Split Finance

Split is a de­cen­tral­ized fi­nance pro­to­col built on Ethereum that came out of con­ver­sa­tions with James Simpson, Richard Galvin, and Alex Erikstrup. These con­ver­sa­tions even­tu­ally be­came a whitepa­per and a us­able pro­to­col and prod­uct. An MVP of the pro­to­col and cor­re­spond­ing ap­pli­ca­tion was built dur­ing the 3 week ETHGlobal hackathon in col­lab­o­ra­tion with Fabio Berger and David Sun, where it won the Compound spon­sor prize.

Around the time Split was born (September 2020), de­cen­tral­ized fi­nance yields were as­tro­nom­i­cal, and it felt like new yield bear­ing as­sets were be­ing cre­ated every day. At the same time, gov­er­nance to­kens were also hit­ting their stride, with to­kens like UNI and COMP lead­ing the way. Some to­kens even pro­vided yield and gov­er­nance rights si­mul­ta­ne­ously.

From the whitepa­per:

Split Protocol fa­cil­i­tates the dis­ag­gre­ga­tion of ex­ist­ing ERC20 to­kens into var­i­ous com­po­nents rep­re­sent­ing dif­fer­ent, valu­able prop­er­ties of the as­set. The core Split smart con­tracts are re­spon­si­ble for re­ceiv­ing and cus­tody­ing ERC20 to­kens and mint­ing their con­stituent com­po­nents, which may in­clude some or all of: gov­er­nance, yield and cap­i­tal. The new com­po­nents rep­re­sented as in­di­vid­ual ERC20 to­kens pro­vide in­vestors with a broader range of risk and re­turn pro­files al­low­ing them to more ef­fi­ciently al­lo­cate cap­i­tal and make as­sets more pro­duc­tive.

The idea be­hind Split is to al­low hold­ers of these new yield-bear­ing and gov­er­nance to­kens to spec­u­late on spe­cific as­pects of their to­kens, in­stead of all as­pects at the same time. The pro­to­col al­lows this by mint­ing con­stituent (yield, gov­er­nance and cap­i­tal) to­kens in ex­change for the full” to­kens men­tioned above. For ex­am­ple, if you de­posit a yield­ing to­ken (such as cDAI) into Split, it will mint you a cap­i­tal and yield to­ken. The yield to­ken gives per­pet­ual rights to the ac­cu­mu­lated yield, and the cap­i­tal to­ken to the un­der­ly­ing cap­i­tal.

Split is a sim­ple con­cept that has a rel­a­tively sim­ple im­ple­men­ta­tion for yield­ing to­kens like cTo­kens, which are to­kens that accrue” yield by ap­pre­ci­at­ing in price. Fittingly, the pro­to­col method that al­lows you to cre­ate these con­stituent to­kens is the split(uint256 amount, address tokenAddress) method.

  /// @dev Allows a holder of a whitelisted Compound token to split it into it's corresponding Yield and Capital tokens
/// @param amount of tokens to split
/// @param tokenAddress the address of token to split
/// @return amountMintedForEach amount of component tokens minted (each)
function split(uint256 amount, address tokenAddress) public returns (uint256 amountMintedForEach) {
ComponentSet memory componentSet = tokensToComponents[tokenAddress];
if (componentSet.yieldToken == address(0) || componentSet.capitalToken == address(0)) {
revert("Attempted to split unsupported token");
}
// Don't mint tokens if the transferFrom was not successful
require(
IERC20(tokenAddress).transferFrom(msg.sender, address(this), amount),
"Failed to transfer tokens to SplitVault."
);
CapitalComponentToken(componentSet.capitalToken).mintFromFull(msg.sender, amount);
uint256 yieldComponentTokenAmount = YieldComponentToken(componentSet.yieldToken).mintFromFull(msg.sender, amount);
emit Split(tokenAddress, amount);
return yieldComponentTokenAmount;
}

After the split, the con­stituent to­kens can be traded and later re­com­bined to re­gain ac­cess to the un­der­ly­ing de­posit.

While we had big am­bi­tions for Split, we never ex­panded the pro­to­col to sup­port more than Compound cTo­kens. The source code is open source, and a SplitVault ca­pa­ble of split­ting cer­tain cTo­kens is de­ployed on main­net. However, Split does not have sig­nif­i­cant us­age to­day. Other pro­to­cols sprang up to cap­ture the op­por­tu­nity in­stead.