SetProtocol/set-protocol-contracts

Support Retrieval of Airdrops and Forks

felix2feng opened this issue · 0 comments

Summary

We propose adding functionality to retrieve token airdrops and forks using a centralized scheme similar to that of temporarily freezing and allowing for retrieval tokens in a way that doesn't change the underlying composition of a Set.

In the future (when ERC820's registry is deployed and trusted), we propose utilizing the ERC777's ERC777TokensRecipient as a hook to capture non-component tokens sent to the contract and allow retrieval through a withdrawal function by the end user.

Motivation

If Sets are to become an attractive investment vehicle, we envision that participants holding Sets need to be able to take advantage of airdrops and hard forks that accrue to the smart contract. Currently, tokens such as OmiseGo that are airdropped to the SetToken are forever lost, as the contract does not have a way to handle retrieval of these tokens. These strategies of taking advantage of airdrops are already being implemented in centralized index fund strategies such as Bitwise's Hold10 and Coinbase's Index.

Centralized Naive Solution

A centralized naive solution would involve the Owner of the Set initiating a proposal that an airdrop has occurred. The smart contract can check that the token proposed is not a component token and that the balance of that token is indeed non-zero. If the proposal is accepted, the airdropped tokens will be distributed equally within all existing SetToken holders.

Snapshotting

One complication is that the supply of SetToken's can be adjusted based on issuances and redemptions. If a Token Airdrop occurred at T0 for X number of tokens, then only the holders at that time should benefit / or at least at the proposal time. If we were only to attribute the Airdrop to those tokenholders, then we would need some sort of snapshotting mechanism on-chain to know which Set Holders indeed owned the tokens at the time of the airdrop proposal.

Note: This feature is still WIP.

Future Implementation (ERC777)

ERC777 is proposed to become Ethereum's new token standard and makes significant improvements upon the shortcomings of ERC20. One of which is the ability to allow Token Contracts to handle tokens sent to the contract via a ERC777TokensRecipient hook that must be called if an ERC777 token is to send a token to another ERC777 contract.

With a Set that wants to take advantage of an airdrop, it becomes as trivial as ensuring that non-component tokens sent to the contract automatically becomes retrievable by the SetToken holder.