Skip to main content

ERC20 Drop

import "@thirdweb-dev/contracts/base/ERC20Drop.sol";

The ERC20Drop base contract adds the Drop Single Phase extension contract to the ERC20 base contract to allow you to distribute your tokens under the criteria of claim conditions.

Detected Extensions

Once deployed, you can use the features made available by these extensions on the SDK and dashboard:

Click on each feature to learn more about what functions are available.

Usage

Import the contract and inherit from it.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@thirdweb-dev/contracts/base/ERC20Drop.sol";

contract MyToken is ERC20Drop {
constructor(
address _defaultAdmin,
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20Drop(
_defaultAdmin,
_name,
_symbol,
_primarySaleRecipient
)
{}
}

Functions to Override

The following functions have been implemented on this contract & are available to be overridden to add custom logic:

burn
     /**
* @notice Lets an owner a given amount of their tokens.
* @dev Caller should own the `_amount` of tokens.
*
* @param _amount The number of tokens to burn.
*/
function burn(uint256 _amount) external virtual {
require(balanceOf(msg.sender) >= _amount, "not enough balance");
_burn(msg.sender, _amount);
}
_collectPriceOnClaim
     /// @dev Collects and distributes the primary sale value of tokens being claimed.
function _collectPriceOnClaim(
address _primarySaleRecipient,
uint256 _quantityToClaim,
address _currency,
uint256 _pricePerToken
) internal virtual override {
if (_pricePerToken == 0) {
return;
}

uint256 totalPrice = (_quantityToClaim * _pricePerToken) / 1 ether;
require(totalPrice > 0, "quantity too low");

if (_currency == CurrencyTransferLib.NATIVE_TOKEN) {
require(msg.value == totalPrice, "Must send total price.");
}

address saleRecipient = _primarySaleRecipient == address(0) ? primarySaleRecipient() : _primarySaleRecipient;
CurrencyTransferLib.transferCurrency(_currency, msg.sender, saleRecipient, totalPrice);
}
_transferTokensOnClaim
     /// @dev Transfers the tokens being claimed.
function _transferTokensOnClaim(address _to, uint256 _quantityBeingClaimed)
internal
virtual
override
returns (uint256)
{
_mint(_to, _quantityBeingClaimed);
return 0;
}