ERC 20 Votes Comp Upgradeable
Extension of ERC20 to support Compound's voting and delegation. This version exactly matches Compound's interface, with the drawback of only supporting supply up to (2^96^ - 1). NOTE: You should use this contract if you need exact compatibility with COMP (for example in order to use your token with Governor Alpha or Bravo) and if you are sure the supply cap of 2^96^ is enough for you. Otherwise, use the {ERC20Votes} variant of this module. This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting power can be queried through the public accessors {getCurrentVotes} and {getPriorVotes}. By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked. Enabling self-delegation can easily be done by overriding the {delegates} function. Keep in mind however that this will significantly increase the base gas cost of transfers. Available since v4.2.
Methods
DOMAIN_SEPARATOR
See {IERC20Permit-DOMAIN_SEPARATOR}.
Returns
Name | Type | Description |
---|---|---|
_0 | bytes32 | undefined |
allowance
See {IERC20-allowance}.
Parameters
Name | Type | Description |
---|---|---|
owner | address | undefined |
spender | address | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
approve
See {IERC20-approve}. Requirements: - spender
cannot be the zero address.
Parameters
Name | Type | Description |
---|---|---|
spender | address | undefined |
amount | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | bool | undefined |
balanceOf
See {IERC20-balanceOf}.
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
checkpoints
Get the pos
-th checkpoint for account
.
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
pos | uint32 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | ERC20VotesUpgradeable.Checkpoint | undefined |
decimals
Returns the number of decimals used to get its user representation. For example, if decimals
equals 2
, a balance of 505
tokens should be displayed to a user as 5.05
(505 / 10 ** 2
). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for display purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.
Returns
Name | Type | Description |
---|---|---|
_0 | uint8 | undefined |
decreaseAllowance
Atomically decreases the allowance granted to spender
by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - spender
cannot be the zero address. - spender
must have allowance for the caller of at least subtractedValue
.
Parameters
Name | Type | Description |
---|---|---|
spender | address | undefined |
subtractedValue | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | bool | undefined |
delegate
Delegate votes from the sender to delegatee
.
Parameters
Name | Type | Description |
---|---|---|
delegatee | address | undefined |
delegateBySig
Delegates votes from signer to delegatee
Parameters
Name | Type | Description |
---|---|---|
delegatee | address | undefined |
nonce | uint256 | undefined |
expiry | uint256 | undefined |
v | uint8 | undefined |
r | bytes32 | undefined |
s | bytes32 | undefined |
delegates
Get the address account
is currently delegating to.
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | address | undefined |
getCurrentVotes
Comp version of the {getVotes} accessor, with uint96
return type.
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint96 | undefined |
getPastTotalSupply
Retrieve the totalSupply
at the end of blockNumber
. Note, this value is the sum of all balances. It is but NOT the sum of all the delegated votes! Requirements: - blockNumber
must have been already mined
Parameters
Name | Type | Description |
---|---|---|
blockNumber | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
getPastVotes
Retrieve the number of votes for account
at the end of blockNumber
. Requirements: - blockNumber
must have been already mined
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
blockNumber | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
getPriorVotes
Comp version of the {getPastVotes} accessor, with uint96
return type.
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
blockNumber | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint96 | undefined |
getVotes
Gets the current votes balance for account
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
increaseAllowance
Atomically increases the allowance granted to spender
by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - spender
cannot be the zero address.
Parameters
Name | Type | Description |
---|---|---|
spender | address | undefined |
addedValue | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | bool | undefined |
name
Returns the name of the token.
Returns
Name | Type | Description |
---|---|---|
_0 | string | undefined |
nonces
See {IERC20Permit-nonces}.
Parameters
Name | Type | Description |
---|---|---|
owner | address | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
numCheckpoints
Get number of checkpoints for account
.
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | uint32 | undefined |
permit
See {IERC20Permit-permit}.
Parameters
Name | Type | Description |
---|---|---|
owner | address | undefined |
spender | address | undefined |
value | uint256 | undefined |
deadline | uint256 | undefined |
v | uint8 | undefined |
r | bytes32 | undefined |
s | bytes32 | undefined |
symbol
Returns the symbol of the token, usually a shorter version of the name.
Returns
Name | Type | Description |
---|---|---|
_0 | string | undefined |
totalSupply
See {IERC20-totalSupply}.
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
transfer
See {IERC20-transfer}. Requirements: - recipient
cannot be the zero address. - the caller must have a balance of at least amount
.
Parameters
Name | Type | Description |
---|---|---|
recipient | address | undefined |
amount | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | bool | undefined |
transferFrom
See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - sender
and recipient
cannot be the zero address. - sender
must have a balance of at least amount
. - the caller must have allowance for sender
's tokens of at least amount
.
Parameters
Name | Type | Description |
---|---|---|
sender | address | undefined |
recipient | address | undefined |
amount | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | bool | undefined |
Events
Approval
Parameters
Name | Type | Description |
---|---|---|
owner | address | undefined |
spender | address | undefined |
value | uint256 | undefined |
DelegateChanged
Parameters
Name | Type | Description |
---|---|---|
delegator | address | undefined |
fromDelegate | address | undefined |
toDelegate | address | undefined |
DelegateVotesChanged
Parameters
Name | Type | Description |
---|---|---|
delegate | address | undefined |
previousBalance | uint256 | undefined |
newBalance | uint256 | undefined |
Transfer
Parameters
Name | Type | Description |
---|---|---|
from | address | undefined |
to | address | undefined |
value | uint256 | undefined |
Last updated