ERC20VestableVotesUpgradeableV1
Alluvial
ERC20VestableVotesUpgradeableV1
This is an ERC20 extension that- can be used as source of vote power (inherited from OpenZeppelin ERC20VotesUpgradeable)- can delegate vote power from an account to another account (inherited from OpenZeppelin ERC20VotesUpgradeable)- can manage token vestings: ownership is progressively transferred to a beneficiary according to a vesting schedule- keeps a history (checkpoints) of each account's vote power@notice Notes from OpenZeppelin ERC20VotesUpgradeable- vote power can be delegated either by calling the {delegate} function, or by providing a signature to be used with {delegateBySig}- keeps a history (checkpoints) of each account's vote power- power can be queried through the public accessors {getVotes} and {getPastVotes}.- by default, token balance does not account for voting power. This makes transfers cheaper. The downside is that itrequires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.@notice Notes about token vesting- any token holder can call the method {createVestingSchedule} in order to transfer tokens to a beneficiary according to a vesting schedule. Whencreating a vesting schedule, tokens are transferred to an escrow that holds the token while the vesting progresses. Voting power of the escrowed token is delegated to thebeneficiary or a delegatee account set by the vesting schedule creator- the schedule beneficiary call {releaseVestingSchedule} to get vested tokens transferred from escrow- the schedule creator can revoke a revocable schedule by calling {revokeVestingSchedule} in which case the non-vested tokens are transfered from the escrow back to the creator- the schedule beneficiary can delegate escrow voting power to any account by calling {delegateVestingEscrow}@notice Vesting schedule attributes are- start : start time of the vesting period- cliff duration: duration before which first tokens gets ownable- total duration: duration of the entire vesting (sum of all vesting period durations)- period duration: duration of a single period of vesting- lock duration: duration before tokens gets unlocked. can exceed the duration of the vesting chedule- amount: amount of tokens granted by the vesting schedule- beneficiary: beneficiary of tokens after they are releaseVestingScheduled- revocable: whether the schedule can be revoked@notice Vesting schedule- if currentTime < cliff: vestedToken = 0- if cliff <= currentTime < end: vestedToken = (vestedPeriodCount(currentTime) * periodDuration * amount) / totalDuration- if end < currentTime: vestedToken = amount@notice Remark: After cliff new tokens get vested at the end of each period@notice Vested token & lock period- a vested token is a token that will be eventually releasable from the escrow to the beneficiary once the lock period is over- lock period prevents beneficiary from releasing vested tokens before the lock period ends. Vested tokenswill eventually be releasable once the lock period is over@notice Example: Joe gets a vesting starting on Jan 1st 2022 with duration of 1 year and a lock period of 2 years.On Jan 1st 2023, Joe will have all tokens vested but can not yet release it due to the lock period.On Jan 1st 2024, lock period is over and Joe can release all tokens.
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}. NOTE: If amount
is the maximum uint256
, the allowance is not updated on transferFrom
. This is semantically equivalent to an infinite approval. 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 |
computeVestingReleasableAmount
Computes the releasable amount of tokens for a vesting schedule.
Parameters
Name | Type | Description |
---|---|---|
_index | uint256 | index of the vesting schedule |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | amount of releasable tokens |
computeVestingVestedAmount
Computes the vested amount of tokens for a vesting schedule.
Parameters
Name | Type | Description |
---|---|---|
_index | uint256 | index of the vesting schedule |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | amount of vested tokens |
createVestingSchedule
Creates a new vesting scheduleThere may delay between the time a user should start vesting tokens and the time the vesting schedule is actually created on the contract.Typically a user joins the Liquid Collective but some weeks pass before the user gets all legal agreements in place and signed for thetoken grant emission to happen. In this case, the vesting schedule created for the token grant would start on the join date which is in the past.
As vesting schedules can be created in the past, this means that you should be careful when creating a vesting schedule and what duration parametersyou use as this contract would allow creating a vesting schedule in the past and even a vesting schedule that has already ended.
Parameters
Name | Type | Description |
---|---|---|
_start | uint64 | start time of the vesting |
_cliffDuration | uint32 | duration to vesting cliff (in seconds) |
_duration | uint32 | total vesting schedule duration after which all tokens are vested (in seconds) |
_periodDuration | uint32 | duration of a period after which new tokens unlock (in seconds) |
_lockDuration | uint32 | duration during which tokens are locked (in seconds) |
_revocable | bool | whether the vesting schedule is revocable or not |
_amount | uint256 | amount of token attributed by the vesting schedule |
_beneficiary | address | address of the beneficiary of the tokens |
_delegatee | address | address to delegate escrow voting power to |
_ignoreGlobalUnlockSchedule | bool | whether the vesting schedule should ignore the global lock |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | index of the created vesting schedule |
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 |
delegateVestingEscrow
Delegate vesting escrowed tokens
Parameters
Name | Type | Description |
---|---|---|
_index | uint256 | index of the vesting schedule |
_delegatee | address | address to delegate the token to |
Returns
Name | Type | Description |
---|---|---|
_0 | bool | True on success |
delegates
Get the address account
is currently delegating to.
Parameters
Name | Type | Description |
---|---|---|
account | address | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | address | 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 |
getVestingSchedule
Get vesting schedule
The vesting schedule structure represents a static configuration used to compute the desiredvesting details of a beneficiary at all times. The values won't change even after tokens are released.The only dynamic field of the structure is end, and is updated whenever a vesting schedule is revoked
Parameters
Name | Type | Description |
---|---|---|
_index | uint256 | Index of the vesting schedule |
Returns
Name | Type | Description |
---|---|---|
_0 | VestingSchedulesV2.VestingSchedule | undefined |
getVestingScheduleCount
Get count of vesting schedules
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | count of vesting schedules |
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 |
isGlobalUnlockedScheduleIgnored
Get vesting global unlock schedule activation status for a vesting schedule
Parameters
Name | Type | Description |
---|---|---|
_index | uint256 | Index of the vesting schedule |
Returns
Name | Type | Description |
---|---|---|
_0 | bool | true if the vesting schedule should ignore the global unlock schedule |
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 |
releaseVestingSchedule
Release vesting scheduleWhen tokens are released from the escrow, the delegated address of the escrow will see its voting power decrease.The beneficiary has to make sure its delegation parameters are set properly to be able to use/delegate the voting power of its balance.
Parameters
Name | Type | Description |
---|---|---|
_index | uint256 | Index of the vesting schedule to release |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | released amount |
revokeVestingSchedule
Revoke vesting schedule
Parameters
Name | Type | Description |
---|---|---|
_index | uint256 | Index of the vesting schedule to revoke |
_end | uint64 | End date for the schedule |
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | amount returned to the vesting schedule creator |
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: - to
cannot be the zero address. - the caller must have a balance of at least amount
.
Parameters
Name | Type | Description |
---|---|---|
to | 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}. NOTE: Does not update the allowance if the current allowance is the maximum uint256
. Requirements: - from
and to
cannot be the zero address. - from
must have a balance of at least amount
. - the caller must have allowance for from
's tokens of at least amount
.
Parameters
Name | Type | Description |
---|---|---|
from | address | undefined |
to | address | undefined |
amount | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
_0 | bool | undefined |
vestingEscrow
Get the address of the escrow for a vesting schedule
Parameters
Name | Type | Description |
---|---|---|
_index | uint256 | Index of the vesting schedule |
Returns
Name | Type | Description |
---|---|---|
_0 | address | address of the escrow |
Events
Approval
Emitted when the allowance of a spender
for an owner
is set by a call to {approve}. value
is the new allowance.
Parameters
Name | Type | Description |
---|---|---|
owner | address | undefined |
spender | address | undefined |
value | uint256 | undefined |
CreatedVestingSchedule
A new vesting schedule has been created
Parameters
Name | Type | Description |
---|---|---|
index | uint256 | Vesting schedule index |
creator | address | Creator of the vesting schedule |
beneficiary | address | Vesting beneficiary address |
amount | uint256 | Vesting schedule amount |
DelegateChanged
Emitted when an account changes their delegate.
Parameters
Name | Type | Description |
---|---|---|
delegator | address | undefined |
fromDelegate | address | undefined |
toDelegate | address | undefined |
DelegateVotesChanged
Emitted when a token transfer or delegate change results in changes to a delegate's number of votes.
Parameters
Name | Type | Description |
---|---|---|
delegate | address | undefined |
previousBalance | uint256 | undefined |
newBalance | uint256 | undefined |
DelegatedVestingEscrow
Vesting escrow has been delegated
Parameters
Name | Type | Description |
---|---|---|
index | uint256 | Vesting schedule index |
oldDelegatee | address | old delegatee |
newDelegatee | address | new delegatee |
beneficiary | address | vesting schedule beneficiary |
Initialized
Triggered when the contract has been initialized or reinitialized.
Parameters
Name | Type | Description |
---|---|---|
version | uint8 | undefined |
ReleasedVestingSchedule
Vesting schedule has been released
Parameters
Name | Type | Description |
---|---|---|
index | uint256 | Vesting schedule index |
releasedAmount | uint256 | Amount of tokens released to the beneficiary |
RevokedVestingSchedule
Vesting schedule has been revoked
Parameters
Name | Type | Description |
---|---|---|
index | uint256 | Vesting schedule index |
returnedAmount | uint256 | Amount of tokens returned to the creator |
newEnd | uint256 | New end timestamp after revoke action |
Transfer
Emitted when value
tokens are moved from one account (from
) to another (to
). Note that value
may be zero.
Parameters
Name | Type | Description |
---|---|---|
from | address | undefined |
to | address | undefined |
value | uint256 | undefined |
Errors
GlobalUnlockUnderlfow
Underflow in global unlock logic (should never happen)
InvalidRevokedVestingScheduleEnd
Attempt to revoke a vesting schedule with an invalid end parameter
InvalidVestingScheduleParameter
Invalid parameter for a vesting schedule
Parameters
Name | Type | Description |
---|---|---|
msg | string | undefined |
Unauthorized
The operator is unauthorized for the caller
Parameters
Name | Type | Description |
---|---|---|
caller | address | Address performing the call |
UnsufficientVestingScheduleCreatorBalance
Vesting schedule creator has unsufficient balance to create vesting schedule
VestingScheduleIsLocked
The vesting schedule is locked
VestingScheduleNotFound
The VestingSchedule was not found
Parameters
Name | Type | Description |
---|---|---|
index | uint256 | vesting schedule index |
VestingScheduleNotRevocable
The vesting schedule is not revocable
VestingScheduleNotRevocableInPast
Attempt to revoke a schedule in the past
ZeroReleasableAmount
No token to release
Last updated