Docs · Tools

An address that shares itself out.

Create Contract deploys an audited 0xSplits contract: an address that divides every payment it receives between the wallets you name, in the proportions you set, with nobody having to be trusted to pass money on. It is for bands, co-founders, revenue shares, affiliate splits, paying an advance back before profit — anywhere a shared wallet would otherwise mean somebody holding the money.

At a glance#

Create Contract
ChainsBase, Ethereum, OP Mainnet, Arbitrum One, Gnosis, Polygon, BNB Smart Chain, Avalanche, Robinhood Chain
Types shippedSplit, Swapper, Waterfall, Liquid Split, Diversifier
Types not shipped yet — shown greyed with the reason, not hidden.
Recipients2 to 100, and the shares must total exactly 100%.
ConfirmationsOne, on a wallet with EIP-5792 batching. Otherwise one or two.
CostNetwork gas, and nothing else. The review step pre-fills an optional support amount you can zero in one click — see below.
Who you transact withThe 0xSplits factory, directly. SwapsPro does not sit between you and it, and the review step shows you the factory address it is about to call.

The three types it can build#

TypeWhat it doesNotes
SplitMoney arriving is shared out between several wallets by percentage.Shares are set to 0.0100% precision. Recipients can either withdraw their share when they like (cheaper, and one recipient who cannot receive money never blocks the others) or be paid directly on every distribution.
WaterfallA queue, not a share-out: the first position is paid in full before the second sees anything.You set an amount per position; the last position has no amount and keeps everything left. One token per waterfall. Good for paying back an advance before profit.
Liquid SplitA split whose shares are NFTs, so a share can be sold, gifted or traded without redeploying.Shares must be whole tenths of a percent. Anything finer is refused rather than rounded — rounding would quietly change what somebody is owed.

Two more 0xSplits types — a Swapper and a Diversifier — are shown on the picker but greyed, each with the reason it is not built yet. Both need a price-oracle setup step, and the tool would rather say so than guess at the settings on your behalf.

Using it, step by step#

  1. Pick the network. The contract lives on one chain and can only receive money there. Types that are not deployed on a chain grey out its button with the reason.
  2. Pick the type. Every card carries a plain-English description of what the contract does and who it suits.
  3. Enter the recipients. An address or an ENS name per row, plus a percentage. There is an Even split button, and while the total is off 100% each row offers to take the remainder. The running total is on screen the whole time.
  4. Decide whether it can change. Permanent means nobody can ever alter the recipients — including you. Changeable nominates one address that can; leaving it blank keeps control with your own wallet.
  5. Set the payout reward. See below.
  6. Review, then deploy. The review step names the type, the chain, every recipient and share, whether it is permanent, who runs the payouts, what you pay, and the exact factory address being called.

ENS resolution is forward-only and always on Ethereum mainnet, whichever chain you are deploying to. A name with no address behind it is called out on the row: “No wallet is registered to that name — paste the address instead.”

What it refuses to accept#

Every rule below is checked as you type, so a bad allocation is caught before the review step rather than by a reverted transaction.

  • Fewer than 2 recipients, or more than 100 — past that the deploy gets expensive and wallets start choking.
  • Anything that is not a wallet address once ENS has had its turn.
  • The same address twice: “{address} is listed twice. Combine the two shares.”
  • A 0% share.
  • A total that is not exactly 100%. The message names the gap in both directions.
  • For a liquid split, a share finer than a tenth of a percent — refused, not rounded.

The reward for paying everyone out#

A split holds money until somebody triggers a distribution, and that somebody pays the gas for it. The distribution incentive is their cut, taken from the amount being shared out at the moment it is shared out — never from money sitting still. It is a parameter of the contract you deploy, so it is baked in at creation.

  • Pre-filled at 1%, fully editable, with a none button that sets it to zero.
  • The contract's own ceiling is 6.5535%. Above that the field says so and the value is capped rather than the deploy failing.
  • The review step pre-fills SwapsPro as the distributor, states plainly that it will earn the incentive when it distributes, and offers Remove and Use my wallet beside it. Distributing is permissionless either way: anyone can trigger it, and whoever does pays the gas and collects the incentive.
  • The distributor is not part of the signed call. It is chosen per distribution by whoever runs one — which can be you, from the tool's own contract list.

What you actually sign#

Before your wallet opens, the factory call is simulated against a public RPC from your own address. A deploy that would revert is caught there and costs you nothing — the panel says so while it runs: “Running it against the network first, so a mistake costs you nothing.”

the batch

// One EIP-5792 batch:
<factory>.createSplit(...)          // value: 0 — always
{ to: <support recipient>, value: <what you chose> }   // omitted entirely when 0

// On a wallet with no batching, the same thing as two prompts — deploy
// first, support second, never the other way round, so a failed deploy
// can never take your support with it.
  • The factory call always carries value: 0. Money is never sent along with a create.
  • The optional support is a plain native-value transfer with no calldata, so it cannot touch the contract you just deployed.
  • Once a batch has been submitted it is never retried — a retry would deploy twice.
  • In the no-batching path, declining the support prompt is fine and silent: the contract is already deployed and it is yours either way.

The optional support amount#

The review step has a line labelled “Support SwapsPro (optional)”, pre-filled with 0.001 ETH. It is not a fee and the code is emphatic that it must never be called one: a No thanks button zeroes it in one click, the line then reads “Not adding anything. The deploy goes ahead exactly the same”, and the call is left out of the batch entirely. Pro Pass holders are suggested nothing at all.

The “what you pay” block spells out both halves separately: network gas set by the chain, and support — or none. See Fees for how this differs from every other path through the app.

After it deploys#

  • The address is read back from the receipt, not predicted. Every Splits factory emits the new address as an indexed topic of its creation event, which is the reliable source. If the read fails the deploy still succeeded — you just do not get the address on screen.
  • Send money to it and it shares itself out. Coins or tokens, no further setup.
  • Anything you deploy is listed in “Your contracts”, with links to the explorer and to splits.org.
  • You can distribute from that list. For splits, the pending native balance is read on the spot and a Distribute button pays everyone: “You pay the gas, and you collect the 1% incentive for doing it.”

The contract list is per-browser, and that is not a bug

Splits v2 stores only a hash of a recipient list on chain, so distributing requires handing the full list back in exactly as it was at creation. The tool keeps that locally — “Contracts you deployed from this browser. Stored on this device only — the contracts themselves live on chain and are yours regardless.” A different browser will not show your list. The contracts are unaffected, and splits.org can manage any of them.

Failure modes#

SituationWhat happens
The wallet is on the wrong chainIt is switched first, offering to add the chain when the wallet does not know it.
The deploy would revertCaught in simulation, before any signature. The contract's own errors are translated — “The shares do not add up to 100%.”, “Every recipient needs exactly one share.”, “The distribution incentive is above the 6.5535% the contract allows.”
Not enough for gas“This wallet does not have enough to cover the network fee.” There is no upfront balance check — it surfaces from the simulation or the wallet.
You reject the signature“You cancelled the signature.” Nothing is retried.
The wallet reports the batch failed“The wallet reported that the batch failed.” Nothing is re-sent.
A distribution reverts“That transaction reverted.” The contract and its balance are untouched.

What it deliberately will not do#

  • Round a share to make it fit. A liquid split with an off-grid percentage is rejected, because rounding would silently change what someone is owed.
  • Deploy a split that does not total exactly 100%, repeats an address, or gives anyone 0%.
  • Add itself to your recipients. The review step says it out loud: “This never adds anyone to your recipient list. Your recipients are only the wallets you typed above.”
  • Call the support amount a fee, or claim to be free. It is optional, it is named as optional, and the deploy is identical without it.
  • Ship a contract type it cannot configure properly. The two unfinished types are shown greyed with the reason rather than quietly omitted.
  • Sit between you and the factory. The transaction goes straight to the audited 0xSplits factory, whose address is on screen before you sign.