SSV DAO Partners - SSV Vesting

Summary

DAO partners who successfully proposed (and voted on) buying tokens from the DAO according to the Partner Program proposal are required to follow these guidelines in order to execute the token transfer.

There are four steps to the process:

  1. ETH/ USDC is transferred from the Partner to the DAO treasury wallet.
  2. The DAO multisig committee should then execute the proposal. four out of six members are needed for the execution.
  3. First, new SSV tokens are minted and subsequently transferred to a Smart Vesting Contract. One transfer for each purchaser.
  4. The Smart Vestin Contract initiates a one year cliff (lock period) and additional one year linear vesting period. 50% of the tokens shall be released after a one year cliff and the rest of the 50% during the second year continuously, per block.
  5. Unless specifically requested, all token transfers are irrevocable

The address from which ETH/ USDC tokens are sent to the DAO wallet will be the recipient of SSV tokens.

Vesting Contract Mechanics

The SSV tokens vesting process is done via an audited smart contract
Address: 0xB8471180C79A0a69C7790A1CCf62e91b3c3559Bf.

The vesting contract mechanism is designed for 2 years.

The first year is the ‘Cliff’ period and the second year is the ‘Linear Vesting’ period.

The two-year vesting period commences on the date the relevant purchase proposal has been approved by the DAO.
During the Cliff phase all tokens are completely locked and made inaccessible.
Exactly one year after funds are locked in the contract the one year Cliff period ends and 50% of the total vested tokens are made available for withdrawal.

Upon completion of the one year Cliff period, the one year Linear Vesting period begins.

As a reminder, the address from which ETH/ USDC tokens are sent to the DAO wallet will be the recipient of SSV tokens for both the Vesting and Cliff periods.

How to access the vesting status:
Use Etherscan

  1. totalVestingBalanceOf: the total number of tokens held for a beneficiary. It includes both the tokens that are already vested and the unvested tokens. The total number held by the contract.
  2. vestedBalanceOf: total number of vested tokens still held in the contract for a beneficiary. These tokens are available for withdrawal to the pre-designated wallet address.
  3. unvestedBalanceOf: ​​the total number of unvested tokens held in vesting contracts for a beneficiary. These tokens are still in the vesting process and are not available for withdrawal.

How to Withdraw the Vested Tokens

Use Etherscan

You can use either the Withdraw or WithdrawFor(beneficiary address) transactions to withdraw the vested amount. The withdrawal is a transaction on the blockchain.

DAO Voting During Cliff/ Vesting

Although the SSV tokens are locked during the Cliff and Vesting phases, DAO voting is available for all Partners.

Each Partner can vote with the full number of tokens minted, regardless whether they are fully vested and not.

To vote, you’ll need to make sure the address used to send ETH/ USDC to the DAO wallet is held in a wallet compatible with Snapshot when the voting process is held.

To vote directly follow the instructions on: Snapshot

1 Like

Since this is a proxy contract, shouldn’t we provide information about the actual contract address behind the proxy and maybe link to a git commit matching the audit report?

Further, why is there a Withdraw and WithdrawFor transactions? Can somebody else initiate the withdrawal for any beneficiary address?

Also, we should put a link to the current WIP DAO treasure spreadsheet, so everyone can follow the transactions and has a good overview of what and why was minted.

  1. I’ve attached the contracts code + audit below
  2. Controller proxy contract: 1. 0xB8471180C79A0a69C7790A1CCf62e91b3c3559Bf
  3. Controller implementation (pointed to from the proxy): 0x051cD7c00d37d54A9eAAcBb0Ef17AB790D93e4a5
  4. The controller creates a new instance of a vesting contract for each vesting, you can see an example here: TransparentUpgradeableProxy | 0xB8471180C79A0a69C7790A1CCf62e91b3c3559Bf
  5. withdraw is as the name suggest, will withdraw to the sender address (only vested tokens), withdrawFor enables sending the tokens from the sender to another address. Only senders which actually have vested tokens can withdraw.
2 Likes