Split contract

Updated 10 days ago

Split distributes ETH and ERC20 tokens according to pre-defined ownership shares. It is useful anytime you want to distribute shares of future income.

In the example above, all incoming funds are split 40% to 0xFfA8 and 60% to alice.eth.

Remember

Keep these in mind whenever interacting with any smart contracts:

  1. Interacting with contracts require onchain transactions, and onchain transactions are irreversible.
  2. Contracts are entirely your property; we hold no control or special privileges over them.
  3. Each contract operates exclusively on the network on which it has been deployed—make sure you're on the right network.

Creating a Split

To create a new contract, first click “New contract” from the navigation. Then select the network on which you want to deploy the contract, and click “Split” from the list of contracts. You will now see that you’re creating a new Split on the network of your choice.

Recipients

These are the accounts to which Split distributes all ETH and ERC20s it receives.

A recipient can be any account capable of being to receive a transaction on an EVM blockchain. This includes other Splits and smart contracts. Since the recipients do not need to withdraw for themselves, the only criteria for a recipient is that they’re able to receive ETH and ERC20 tokens.

To create large Splits, click “Upload CSV” and then either paste in a list of addresses followed by their ownership share (separated by a comma), or upload a CSV file from your computer.

We do not recommend making Splits with more than ~2,000 recipients. Though technically this limit is on a per-blockchain basis (since it’s a function of the block size), we generally recommend the maximum number of recipients stay below 2,000.

Controller

This is the account that’s able to modify the Split after it’s been created. You can think of the controller as being the “Split admin”, since they have unilateral ability to change the Split whenever they wish. Because of this, keep in mind that a Split is only as trustworthy as the admin.

Splits without a controller set are considered “immutable”, since they’re unable to be changed, ever. The controller can always convert the Split to be immutable, but never the other way around.

The decision to add a controller or not is entirely dependent on the context in which the Split will be used. An immutable Split (i.e., one without a controller) is the most secure but also the least flexible. For added flexibility without compromising too much on security, you may consider making a multisig the controller.

Distribution threshold

This is a way to automate distributions so the recipients don’t have to remember to do it themselves. If your Split is going to be regularly receiving funds, we recommend turning this on. If you expect your Split to only receive large amounts infrequently, and you don’t care about “setting it and forgetting it”, you can turn this off.

In general, our philosophy is to keep this on since we believe it leads to a better product experience. Remember that if you turn this off, the recipients will be responsible for manually triggering distributions themselves.

Both the Splits contracts and app are 100% free to use - the Splits team does not make money by you using the system. Becoming a sponsor is a public way of saying “thanks” and goes directly to support the ongoing development of the system. We appreciate your support - whether that’s a financial sponsorship or simply spreading the word to your friends!

Name

This is the contract name that will be displayed in the Splits app instead of the contract’s hexadecimal address. This gets stored offchain (therefore you must be signed in to add one), and you can choose to make the name public, available to other Splits users, or keep it private for personal use only.

Using a Split

Once you’ve created Split, you’re now ready to use it. Using Split means 1) sending ETH or ERC20 tokens to the Split’s address, and 2) distributing funds through the Split to the recipients.

Sending funds

Sending ETH and ERC20 tokens to your Split is as easy as sending funds to any other account. Just copy the address, which can be found at the top of the contract’s detail page, and send tokens to the address. You can send funds via the app, but most people will use the Split address in other platforms and apps (e.g., Zora, Highlight, OpenSea, Manifold, etc).

Distributing balances

Distributing a balance is the time when funds sitting in a Split are allocated to each recipient according to their ownership share. For example, if there’s a 50/50 Split with a 1 ETH balance, when someone distributes that balance, each recipient will be allocated 0.5 ETH.

To distribute a balance, navigate to the Split detail page, select the balances, and hit “Distribute”. You will have the option to “Distribute and keep balance within Splits”, or “Distribute and withdraw for each recipient”. The former will just distribute the balance, meaning each recipient will eventually need to come and withdraw that balance. The latter will actually combine the distribute and withdraw step into a single transaction, by first distributing and then immediately withdrawing for all the recipients.

Once the balance has been distributed, there is no way to take it back. Distributing a balance is a one-way process. Regardless of whether the Split has a controller or not, once funds have been distributed they are permanently allocated to the recipients.

That said, if a Split has a balance and the controller changes the recipients and/or percentages before distribution, the new recipients/percentages will receive the balance.

Editing a Split

Splits can only be edited/modified by the controller. If there is no controller set at time of Split creation, the Split will be permanently fixed and can never be changed.

You can see what Splits you control by clicking your wallet from the dashboard (below your balance) and then clicking the “Controlling” list item. Select the Split you want to edit. To make edits, you will need to ensure your wallet is connect to the network the Split is on.

Towards the top of the Split page, you will see a blue message that says “You control this Split”, with the options to “Edit” and “Transfer”. Edit lets you change the recipients and distribution incentive, and transfer lets you transfer control of the Split to another account.

Editing recipients

To edit the recipients and/or distribution incentive, click the “Edit” button towards the top of the Split detail view. As the controller, you have the unilateral ability to add, remove, or update all the recipients and their ownership shares.

Since editing a Split is an onchain action, once you’re done making edits you will need to approve the transaction in your wallet.

Transfer control

To transfer control to a different account, click the “Transfer” button towards the top of the Split detail view. There are two options for transferring control—you can either transfer control to a different account or you can remove control entirely.

Transferring control to a different account is a two step process, since the new controller will need to accept control. Once the new controller has accepted, they will have complete control over the Split. Once you’ve initiated the transfer, until new controller accepts, you can cancel the transfer at any time. Make sure that whatever account you’re transferring control to is able to both accept control and interact with the Split (i.e., ensure it’s an EOA or a smart account like a multisig that can execute arbitrary transactions).

Removing control will make the Split immutable, meaning it can never be changed in the future. The Split will continue to function as it does, however, the list of recipients is “frozen” and will be permanently fixed.

Split owner

In Splits v1, a Split contract—regardless of whether a controller is set or not—does not have an "owner" or anyone who holds the private keys. This means that Split v1 does not function like a wallet from which you can execute arbitrary calls. Be careful not to set Split v1 as a privileged account (i.e., the account that must initiate a transaction) on third-party platforms.

In Splits v2, a Split contract can have an owner. This owner has full control over the Split and can perform arbitrary transactions.

Still need help? Reach out in /splits, DM us on Twitter, or join our Discord