Split

Split diagram

Split acts as an equity instrument by letting you define the percent of future value each recipient will earn. It's a payable smart contract that distributes all ETH & ERC20 tokens it receives among recipients according to pre-set ownership percentages.

How it works

  • Each Split is a payable smart contract with two more more recipients. Each recipient has an address and an ownership percent. ETH and ERC20s sent directly to the Split are held in the Split's balance until distributeETH or distributeERC20 are called.
  • Recipients, ownerships, and keeper fees are stored onchain as calldata and re-passed as args and validated via hashing when needed.
  • Each Split gets its own address and proxy for maximum composability with other contracts onchain. For these proxies, we extended EIP-1167 Minimal Proxy Contract (opens in a new tab) to avoid DELEGATECALL inside receive(), allowing for Splits to accept hard gas-capped sends & transfers.
  • SplitWallet (opens in a new tab) is the implementation logic for SplitProxy. SplitProxy delegates all calls to SplitWallet other than handling receive() itself to avoid the gas cost with DELEGATECALL. All funds pile up in SplitMain (opens in a new tab) until withdraw is called for a recipient.
  • We recommend reviewing the contracts flow of funds.
⚠️

Splits do not work with non-transferable, fee-on-transfer, and rebasing tokens.

  • Non-transferable tokens will be stuck in the Split forever.
  • Fee-on-transfer tokens will distribute, but not all recipients will be able to withdraw their share.
  • If a rebasing tokens supply decreases, not all recipients will be able to withdraw their share. If the supply increases, the incremental yield will be lost and stuck in Split Main.

Addresses

Ethereum – 1
Optimism – 10
BSC – 56
Gnosis – 100
Polygon – 137
Fantom – 250
Base – 8453
Arbitrum – 42161
Avalanche – 43114
Zora – 7777777
Aurora – 1313161554
Blast – 81457