A protocol for splitting tokens into fungible yield, governance and capital components
Split Protocol facilitates the disaggregation of existing ERC20 tokens into various components representing different, valuable properties of the asset. The core Split smart contracts are responsible for receiving and custodying ERC20 tokens and minting their constituent components, which may include some or all of: governance, yield and capital. The new components represented as individual ERC20 tokens provide investors with a broader range of risk and return profiles allowing them to more efficiently allocate capital and make assets more productive.
For this submission, we have focused on splitting Compound cTokens into capital and yield component tokens. A user can split their cTokens by depositing them into the Split vault, and in turn receive a proportional amount of yield and component tokens. The yield component tokens grant the holder perpetual rights to the yield of the corresponding amount of capital in Compound. Yield starts accumulating to the token holder the moment he receives the tokens. Over time, yield (denominated in cTokens) accumulates. When the yield component tokens are transferred, the yield is automatically withdrawn, and the new token holder starts from 0. Both capital and yield component tokens are required to redeem the underlying cToken.
The protocol implements a novel mechanism for tracking accumulated yield by using the exchange rate between the cToken and the underlying token in Compound as a (strictly increasing) price feed. The result for this hackathon is the creation of a novel DeFi asset, the yield component token, which represents "pure" yield without the underlying capital.
Some of the most popular yield-bearing tokens today are deposits in money market protocols that provide the collateral for borrowers. Depositors receive a share of the margin paid by borrowers but also retain the capital risk of the token they have provided - for example Basic Attention Token (BAT). With Split, a cBAT token (a BAT token deposited in the Compound lending platform) can be split into a yield and capital component providing a new, composable yield token with minimal capital risk and a pure capital token that provides speculators with an opportunity to express a view on BAT's price performance.
You can try it out by getting Rinkeby ETH from a faucet, converting those into cTokens, and then splitting the cTokens. Compound.finance also has a UI for minting BAT on Rinkeby. You can also try it on mainnet with cETH :)
The repository is a monorepo using yarn workspaces with two sub-projects: a next.js front-end and a builder project for smart contracts and unit tests. The whole thing is written in Typescript and Solidity. The next.js (React) front-end is easily able to import contract artifacts and deployment addresses from the buidler project.
The buidler project has over 80 unit tests that offer complete coverage, and useful deployment scripts.
The frontend uses React hooks and contexts heavily and updates in reaction to network or address changes, along with transactions happening on the network.