Skip to main content

TRP VestingEscrow

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 vestings
  • owner: address - factory and vestings owner
  • manager: 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()

note

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
NameTypeDescription
amountuint256Amount of the tokens to be controlled by vesting
recipientaddressRecipient of the vested funds
vesting_durationuint256Vesting duration in seconds
vesting_startuint256Vesting start time in seconds (unix time in sec)
cliff_lengthuint256Cliff duration in seconds
is_fully_revokableboolFlag that enables revoke_all method
note

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
NameTypeDescription
tokenaddressAddress of ERC20 token to recover
amountuint256Amount of the tokens to recover
note

Reverts if:

  • tokens transfer to owner fails

recover_ether()

Collect all ether from the contract to the owner.

@external
def recover_ether()
note

Reverts if:

  • Ether transfer to owner fails

update_voting_adapter()

Set self.voting_adapter to voting_adapter.

@external
def update_voting_adapter(
voting_adapter: address
)
Parameters
NameTypeDescription
voting_adapteraddressNew voting adapter
note

Reverts if:

  • called by anyone except VestingEscrowFactory owner

change_owner()

Set self.owner to owner.

@external
def change_owner(
owner: address
)
Parameters
NameTypeDescription
owneraddressNew owner address
note

Reverts if:

  • called by anyone except VestingEscrowFactory owner
  • arg owner is empty address

change_manager()

Set self.manager to manager.

@external
def change_manager(
manager: address
)
Parameters
NameTypeDescription
manageraddressNew manager address
note

Reverts if:

  • called by anyone except VestingEscrowFactory owner

VestingEscrow

Public variables

  • recipient: address - address that can claim tokens from escrow
  • token: ERC20 - address of the vested token
  • start_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 seconds
  • factory: IVestingEscrowFactory - address of the parent factory
  • total_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 not
  • total_claimed: uint256 - total amount of the claimed tokens
  • disabled_at: uint256 - effective vesting end time (UTC time in UNIX seconds). Can differ from end_time in case of the revoke_xxx methods call
  • initialized: bool - flag indicating that escrow was initialized
  • is_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
NameTypeDescription
beneficiaryaddressAddress to claim tokens to
amountuint256Amount of the tokens to claim
note

Reverts if:

  • called by anyone except vesting recipient
  • tokens transfer to beneficiary fails

revoke_unvested()

Disable further flow of tokens and revoke the unvested part to the owner.

@external
def revoke_unvested()
note

Reverts if:

  • called by anyone except VestingEscrowFactory owner 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()
note

Reverts if:

  • is_fully_revocable param of the VestingEscrow is not True
  • called by anyone except VestingEscrowFactory owner
  • tokens transfer to VestingEscrowFactory.owner fails

recover_erc20()

Collect ERC20 tokens from the contract to the recipient.

@external
def recover_erc20(
token: address,
amount: uint256
)
Parameters
NameTypeDescription
tokenaddressAddress of ERC20 token to recover
amountuint256Amount of the tokens to recover
note

Reverts if:

  • tokens transfer to recipient fails

recover_ether()

Collect all ether from the contract to the recipient.

@external
def recover_ether()
note

Reverts if:

  • Ether transfer to recipient fails

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
NameTypeDescription
abi_encoded_paramsBytes[1000]ABI encoded params for the vote method call. can be compiled using VotingAdapter.encode_aragon_vote_calldata
note

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
NameTypeDescription
abi_encoded_paramsBytes[1000]ABI encoded params for the delegate method call. can be compiled using VotingAdapter.encode_snapshot_set_delegate_calldata
note

Reverts if:

  • called by anyone except vesting recipient

delegate()

note

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
NameTypeDescription
abi_encoded_paramsBytes[1000]ABI encoded params for the vote method call. can be compiled using VotingAdapter.encode_delegate_calldata
note

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
NameTypeDescription
voteIduint256Aragon vote id
amountboolSupports 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
NameTypeDescription
delegateaddressAddress 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
NameTypeDescription
delegateaddressAddress 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
NameTypeDescription
abi_encoded_paramsBytes[1000]ABI encoded params for the vote method call. can be compiled using VotingAdapter.encode_aragon_vote_calldata
note

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
NameTypeDescription
abi_encoded_paramsBytes[1000]ABI encoded params for the delegate method call. can be compiled using VotingAdapter.encode_snapshot_set_delegate_calldata
note

Reverts if:

  • called by anyone except vesting recipient

delegate()

note

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
NameTypeDescription
abi_encoded_paramsBytes[1000]ABI encoded params for the vote method call. can be compiled using VotingAdapter.encode_delegate_calldata
note

Always reverts

recover_erc20()

Collect ERC20 tokens from the contract to the owner.

@external
def recover_erc20(
token: address,
amount: uint256
)
Parameters
NameTypeDescription
tokenaddressAddress of ERC20 token to recover
amountuint256Amount of the tokens to recover
note

Reverts if:

  • tokens transfer to owner fails

recover_ether()

Collect all ether from the contract to the owner.

@external
def recover_ether()
note

Reverts if:

  • Ether transfer to owner fails

change_owner()

Set self.owner to owner

@external
def change_owner(
owner: address
)
Parameters
NameTypeDescription
owneraddressNew owner address
note

Reverts if:

  • called by anyone except VotingAdapter owner
  • arg owner is empty address