ERC20 Drop - Vote
import "@thirdweb-dev/contracts/base/ERC20DropVote.sol";
The ERC20Drop
base contract adds the Drop Single Phase extension to the ERC20 base contract
to allow you to distribute your tokens under the criteria of claim conditions. It also
implements the ERC20Votes contract,
which provides voting and delegation functionality, along with delegation by signature.
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/ERC20DropVote.sol";
contract MyToken is ERC20DropVote {
constructor(
address _defaultAdmin,
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20DropVote(
_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;
}