Send revenue once. The chain fans it out.
One contract, one address, N payees. Every incoming payment is split by basis-point share inside the same on-chain transaction. No spreadsheet. No monthly reconciliation. No trust required between the people splitting the money.
A splitter is 30 lines of JavaScript.
// RevenueSplitter — every incoming payment auto-distributes
// across a fixed list of payees, by basis-point share.
contract RevenueSplitter {
init({ payees }) {
// payees = [{ addr, bps }] — sum of bps must equal 10000.
let total = 0;
for (const p of payees) total += p.bps;
assert(total === 10000, 'shares must sum to 100%');
storage.set('payees', payees);
storage.set('totalPaid', 0);
emit('SplitterCreated', { payees });
}
// Default receive — anyone can send ASE here, the chain
// immediately fans it out across every payee in one tx.
receive() {
const payees = storage.get('payees');
const incoming = msg.value;
for (const p of payees) {
const cut = (incoming * p.bps) / 10000;
transfer(p.addr, cut);
emit('Paid', { to: p.addr, amount: cut });
}
storage.set('totalPaid', storage.get('totalPaid') + incoming);
}
// Read-only — anyone can audit the share table at any time.
shares() {
return storage.get('payees');
}
}The receive() handler fires on every incoming payment. The chain walks the payee list, transfers each cut, emits a Paid event per recipient. Shares are immutable once deployed — anyone can audit the table by calling shares().
Define the share table.
Each payee gets a basis-point share. Sum to 10,000. Deploy. The address is now a permanent revenue-routing point.
Anyone sends to the address.
Distributors, marketplaces, customers, NFT secondaries — they all just send to one address. They don't care about the split.
Chain fans out in the same tx.
Every payee gets their cut in the same block as the incoming payment. No monthly batch, no off-chain reconciliation, no waiting.
Splitting revenue is the oldest unsolved business problem.
Co-founders, co-artists, co-creators — no one has to hold the money. The contract holds it for exactly one block.
Every payment, every split, every recipient is on-chain. No QuickBooks export, no he-said-she-said about percentages.
A splitter address is just an address. Plug it into Stripe, NFT royalties, subscriptions, anywhere money arrives.
Payees in any country. No payroll provider, no Wise account, no SWIFT fees, no FX spread.
Payees see their cut land in the same block as the incoming payment. No monthly cheque, no batch run, no T+30.
The split table is locked at deploy. No one can change it later — even the deployer. Predictability as a service.
Eight kinds of split on one primitive.
The contract above is ~30 lines. Each of these is a one-line edit to the share table.
Band royaltiesFour members, equal split, every streaming payout.
NFT secondaryMarketplace sends here; artist + collab + treasury share.
Affiliate programSale arrives, referrer gets 20%, merchant 80%, instant.
DAO treasuryIncome auto-streams to operating / dev / community pools.
Investor pro-rataPre-seed cap table receives distributions proportionally.
Co-founder vestingCap-table-aware splitter — adjust shares via second contract.
Creator collabsManager / editor / creator on every monthly membership.
Open-source tipsRepo address fans tips to maintainers by commit weight.
Read the contract on GitHub.
RevenueSplitter.js — 30 lines, no dependencies, no surprises.
Plug into anything.
A splitter address is just an address. NFT royalties, Stripe webhooks, anywhere money lands.
ARC-20 transfers underneath.
The splitter uses native ASE transfers — same primitive every payment dapp on Asentum builds on.
Five more dapps demonstrating what the chain unlocks.
Recurring charges fired by the chain.
Open showcase →AI agentsAgents that schedule themselves on-chain.
Open showcase →PayrollMonthly payday, fired by the protocol.
Open showcase →Creator economyBorderless tipping + memberships.
Open showcase →TreasuryDCA, rebalance, sweep on autopilot.
Open showcase →SocialOn-chain profiles, posts, comments.
Open showcase →