Skip to main content

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);
}