TRP VestingEscrow
- Source Code
- Deployed Contracts (mainnet)
- Detailed contracts spec
Token Reward Program (TRP) escrow contracts allow transparent on-chain distribution and vesting of the token rewards for the Lido DAO contributors.
VestingEscrowFactory
Public variables
voting_adapter: address- address of the VotingAdapter used in the vestingsowner: address- factory and vestings ownermanager: address- vestings manager
View methods
target()
Returns immutable TARGET
@external
@view
def target() -> uint256
token()
Returns immutable TOKEN
@external
@view
def token() -> uint256
Methods
deploy_vesting_contract()
Before calling deploy_vesting_contract() caller need to have enough tokens on the balance and call approve(vestingFactoryAddress, fundAmount) on the token contract
Deploy and fund a new instance of the VestingEscrow for the given recipient. Set all params for the deployed escrow.
Returns address of the deployed escrow
@external
def deploy_vesting_contract(
amount: uint256,
recipient: address,
vesting_duration: uint256,
vesting_start: uint256 = block.timestamp,
cliff_length: uint256 = 0,
is_fully_revokable: bool = False
) -> address
Parameters
| Name | Type | Description |
|---|---|---|
amount | uint256 | Amount of the tokens to be controlled by vesting |
recipient | address | Recipient of the vested funds |
vesting_duration | uint256 | Vesting duration in seconds |
vesting_start | uint256 | Vesting start time in seconds (unix time in sec) |
cliff_length | uint256 | Cliff duration in seconds |
is_fully_revokable | bool | Flag that enables revoke_all method |
Reverts if any of the following is true:
vesting_duration <= 0.cliff_length >= vesting_duration- token transfer from caller to factory fails
- approve of the tokens to the actual vesting fails
recover_erc20()
Collect ERC20 tokens from the contract to the owner.
@external
def recover_erc20(
token: address,
amount: uint256
)
Parameters
| Name | Type | Description |
|---|---|---|
token | address | Address of ERC20 token to recover |
amount | uint256 | Amount of the tokens to recover |
Reverts if:
- tokens transfer to
ownerfails
recover_ether()
Collect all ether from the contract to the owner.
@external
def recover_ether()
Reverts if:
- Ether transfer to
ownerfails
update_voting_adapter()
Set self.voting_adapter to voting_adapter.
@external
def update_voting_adapter(
voting_adapter: address
)
Parameters
| Name | Type | Description |
|---|---|---|
voting_adapter | address | New voting adapter |
Reverts if:
- called by anyone except
VestingEscrowFactoryowner
change_owner()
Set self.owner to owner.
@external
def change_owner(
owner: address
)
Parameters
| Name | Type | Description |
|---|---|---|
owner | address | New owner address |
Reverts if:
- called by anyone except
VestingEscrowFactoryowner - arg
owneris empty address
change_manager()
Set self.manager to manager.
@external
def change_manager(
manager: address
)
Parameters
| Name | Type | Description |
|---|---|---|
manager | address | New manager address |
Reverts if:
- called by anyone except
VestingEscrowFactoryowner
VestingEscrow
Public variables
recipient: address- address that can claim tokens from escrowtoken: ERC20- address of the vested tokenstart_time: uint256- vesting start time (UTC time in UNIX seconds)end_time: uint256- vesting end time (UTC time in UNIX seconds)cliff_length: uint256- cliff length in secondsfactory: IVestingEscrowFactory- address of the parent factorytotal_locked: uint256- total amount of the tokens to be vested (does not change after claims)is_fully_revokable: bool- flag showing if the escrow is fully revocable or nottotal_claimed: uint256- total amount of the claimed tokensdisabled_at: uint256- effective vesting end time (UTC time in UNIX seconds). Can differ from end_time in case of the revoke_xxx methods callinitialized: bool- flag indicating that escrow was initializedis_fully_revoked: bool- flag indicating that escrow was fully revoked and there are no more tokens
View methods
unclaimed()
Returns the current amount of the tokens available for the claim.
@external
@view
def unclaimed() -> uint256
locked()
Returns the current amount of the tokens locked.
@external
@view
def locked() -> uint256
Methods
claim()
Claim tokens to the beneficiary address. If the requested amount is larger than unclaimed, then the unclaimed amount will be claimed.
Returns actual amount of the tokens claimed.
@external
def claim(
beneficiary: address = msg.sender,
amount: uint256 = max_value(uint256)
)
Parameters
| Name | Type | Description |
|---|---|---|
beneficiary | address | Address to claim tokens to |
amount | uint256 | Amount of the tokens to claim |
Reverts if:
- called by anyone except vesting
recipient - tokens transfer to
beneficiaryfails
revoke_unvested()
Disable further flow of tokens and revoke the unvested part to the owner.
@external
def revoke_unvested()
Reverts if:
- called by anyone except
VestingEscrowFactoryowner or manager - tokens transfer to
VestingEscrowFactory.owner()fails
revoke_all()
Disable further flow of tokens and revoke all tokens to the owner.
@external
def revoke_all()
Reverts if:
is_fully_revocableparam of theVestingEscrowis not True- called by anyone except
VestingEscrowFactoryowner - tokens transfer to
VestingEscrowFactory.ownerfails
recover_erc20()
Collect ERC20 tokens from the contract to the recipient.
@external
def recover_erc20(
token: address,
amount: uint256
)
Parameters
| Name | Type | Description |
|---|---|---|
token | address | Address of ERC20 token to recover |
amount | uint256 | Amount of the tokens to recover |
Reverts if:
- tokens transfer to
recipientfails
recover_ether()
Collect all ether from the contract to the recipient.
@external
def recover_ether()
Reverts if:
- Ether transfer to
recipientfails
aragon_vote()
Participate in the Aragon vote using all available tokens on the contract's balance. Uses delegateCall to VotingAdapter. VotingAdapter address is fetched from self.factory.
@external
def aragon_vote(
abi_encoded_params: Bytes[1000]
)
Parameters
| Name | Type | Description |
|---|---|---|
abi_encoded_params | Bytes[1000] | ABI encoded params for the vote method call. can be compiled using VotingAdapter.encode_aragon_vote_calldata |
Reverts if:
- called by anyone except vesting
recipient
snapshot_set_delegate()
Delegate Snapshot voting power of all available tokens on the contract's balance to delegate. Uses delegateCall to VotingAdapter. VotingAdapter address is fetched from self.factory.
@external
def snapshot_set_delegate(
abi_encoded_params: Bytes[1000]
)
Parameters
| Name | Type | Description |
|---|---|---|
abi_encoded_params | Bytes[1000] | ABI encoded params for the delegate method call. can be compiled using VotingAdapter.encode_snapshot_set_delegate_calldata |
Reverts if:
- called by anyone except vesting
recipient
delegate()
Stub at the moment of writing
Delegate voting power of all available tokens on the contract's balance to delegate. Uses delegateCall to VotingAdapter. VotingAdapter address is fetched from self.factory.
@external
def delegate(
abi_encoded_params: Bytes[1000]
)
Parameters
| Name | Type | Description |
|---|---|---|
abi_encoded_params | Bytes[1000] | ABI encoded params for the vote method call. can be compiled using VotingAdapter.encode_delegate_calldata |
Reverts if:
- called by anyone except vesting
recipient
VotingAdapter
Public variables
owner: address- votingAdapter owner
View methods
encode_aragon_vote_calldata()
Returns abi encoded params for the aragon_vote call.
@external
@view
def encode_aragon_vote_calldata(
voteId: uint256,
supports: bool
) -> Bytes[1000]
Parameters
| Name | Type | Description |
|---|---|---|
voteId | uint256 | Aragon vote id |
amount | bool | Supports flag. True - for, False - against |
encode_snapshot_set_delegate_calldata()
Returns abi encoded params for the snapshot_set_delegate call.
@external
@view
def encode_snapshot_set_delegate_calldata(
delegate: address
) -> Bytes[1000]
Parameters
| Name | Type | Description |
|---|---|---|
delegate | address | Address to delegate snapshot voting power to |
encode_delegate_calldata()
Returns abi encoded params for the delegate call.
@external
@view
def encode_delegate_calldata(
delegate: address
) -> Bytes[1000]
Parameters
| Name | Type | Description |
|---|---|---|
delegate | address | Address to delegate voting power to |
Methods
aragon_vote()
Participate in the Aragon vote using all available tokens on the contract's balance. It makes sense only for delegateCalls, so the caller's balance will be used. Uses VOTING_CONTRACT_ADDR as the voting contract address.
@external
def aragon_vote(
abi_encoded_params: Bytes[1000]
)
Parameters
| Name | Type | Description |
|---|---|---|
abi_encoded_params | Bytes[1000] | ABI encoded params for the vote method call. can be compiled using VotingAdapter.encode_aragon_vote_calldata |
Reverts if:
- called by anyone except vesting
recipient
snapshot_set_delegate()
Delegate Snapshot voting power of all available tokens. Makes sense only for delegateCalls so that the balance of the caller will be used. Uses SNAPSHOT_DELEGATE_CONTRACT_ADDR as the voting contract address.
@external
def snapshot_set_delegate(
abi_encoded_params: Bytes[1000]
)
Parameters
| Name | Type | Description |
|---|---|---|
abi_encoded_params | Bytes[1000] | ABI encoded params for the delegate method call. can be compiled using VotingAdapter.encode_snapshot_set_delegate_calldata |
Reverts if:
- called by anyone except vesting
recipient
delegate()
Stub at the moment of writing
Stub for the future implementation of the Voting with Delegation.
@external
def delegate(
abi_encoded_params: Bytes[1000]
)
Parameters
| Name | Type | Description |
|---|---|---|
abi_encoded_params | Bytes[1000] | ABI encoded params for the vote method call. can be compiled using VotingAdapter.encode_delegate_calldata |
Always reverts
recover_erc20()
Collect ERC20 tokens from the contract to the owner.
@external
def recover_erc20(
token: address,
amount: uint256
)
Parameters
| Name | Type | Description |
|---|---|---|
token | address | Address of ERC20 token to recover |
amount | uint256 | Amount of the tokens to recover |
Reverts if:
- tokens transfer to
ownerfails
recover_ether()
Collect all ether from the contract to the owner.
@external
def recover_ether()
Reverts if:
- Ether transfer to
ownerfails
change_owner()
Set self.owner to owner
@external
def change_owner(
owner: address
)
Parameters
| Name | Type | Description |
|---|---|---|
owner | address | New owner address |
Reverts if:
- called by anyone except
VotingAdapterowner - arg
owneris empty address