ERC20 Vote
import "@thirdweb-dev/contracts/base/ERC20Vote.sol";
The ERC20Vote
smart contract implements the ERC20 standard.
It also supports EIP-2612; allowing approvals to be made via signatures, and 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/ERC20Vote.sol";
contract MyToken is ERC20Vote {
constructor(
address _defaultAdmin,
string memory _name,
string memory _symbol
)
ERC20Vote(
_defaultAdmin,
_name,
_symbol
)
{}
}
Functions to Override
The following functions have been implemented on this contract & are available to be overridden to add custom logic:
mintTo
/**
* @notice Lets an authorized address mint tokens to a recipient.
* @dev The logic in the `_canMint` function determines whether the caller is authorized to mint tokens.
*
* @param _to The recipient of the tokens to mint.
* @param _amount Quantity of tokens to mint.
*/
function mintTo(address _to, uint256 _amount) public virtual {
require(_canMint(), "Not authorized to mint.");
require(_amount != 0, "Minting zero tokens.");
_mint(_to, _amount);
}
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(_msgSender()) >= _amount, "not enough balance");
_burn(msg.sender, _amount);
}