Fund once. The protocol runs payroll.
Top up the contract. On the 1st of every month, the chain itself pays every team member their salary — in the same block, on the same minute, in any country. No Deel, no Wise, no payroll provider, no monthly portal login.
Payroll is ~40 lines of JavaScript.
// Payroll — monthly pay run, fired by the chain.
// Fund the contract. On payday, every employee receives
// their salary in the same block. No Stripe, no Deel.
contract Payroll {
init({ team }) {
// team = [{ addr, monthly }] — monthly is in 1e18 ASE units.
storage.set('team', team);
storage.set('runs', 0);
cron.schedule(this.address, 'payday', '0 9 1 * *'); // 1st of month, 09:00 UTC
emit('PayrollStarted', { headcount: team.length });
}
// Anyone can top up the treasury — usually the company wallet.
fund() { /* msg.value lands in the contract balance */ }
// Cron fires this on the 1st of every month. The chain itself
// walks the team and sends each their salary. No keeper.
payday() {
const team = storage.get('team');
let total = 0;
for (const e of team) total += e.monthly;
assert(chain.balance >= total, 'treasury underfunded');
for (const e of team) {
transfer(e.addr, e.monthly);
emit('Paid', { to: e.addr, amount: e.monthly });
}
storage.set('runs', storage.get('runs') + 1);
cron.schedule(this.address, 'payday', '0 9 1 * *');
}
// Read-only — what's still in the treasury after the last run?
treasuryBalance() { return chain.balance; }
}payday() is registered with the chain's cron at deploy time. On the 1st of every month at 09:00 UTC, the chain itself walks the team and pays each in the same block. The contract guards against underfunding before sending a single transfer.
Add someone to the team list.
Push a row to the team array. No I-9 form, no contractor onboarding, no payroll provider account creation. They have a wallet address — that's it.
Top up the treasury once.
Send ASE to the contract. Cover one month or twelve. The contract holds it. No bank, no escrow, no payment provider.
Chain fires payroll on the 1st.
Cron triggers payday(). Every employee receives their salary in the same block. They watch the balance increase in real time, from anywhere in the world.
Paying a distributed team is absurdly broken today.
Hire from anywhere. Wallet addresses don't care about your EOR provider's country list. Day-one parity for every team member.
Deel, Remote, Oyster all charge $500-700/mo per employee. For a team of 20, that's $144k/year — gone, before anyone gets paid.
No converting USD → EUR → MXN with a 3% bid-ask spread on every conversion. Pay in ASE, the recipient swaps locally if they want.
Salaries land in the same block. No SWIFT (3-5 days), no ACH (1-3 days), no “processing” window.
Optional — anyone can verify your team gets paid. For DAOs, foundations, and transparency-by-default companies, this is a feature.
Your payment provider goes down, gets acquired, decides to leave your country — none of it touches you. The chain doesn't.
Same primitive. Eight variations.
Swap the cron schedule, swap the team list, swap the amount logic — everything else stays the same.
Bi-weekly payrollCron schedule "0 9 1,15 * *" instead of monthly.
Contractor payPer-invoice amounts pushed by an admin, no fixed list.
DAO contributorBounties + retainers, paid from a treasury vote.
Streamed salaryPer-second accrual via cron; withdraw any time.
Performance bonusQuarterly payday with on-chain KPI multiplier.
Equity vestingCliff + linear vesting fired by daily cron.
Per-diem expensesPer-employee allowance topped up monthly.
Retainer + bonusBase salary + optional performance top-up per cycle.
Read the contract on GitHub.
Payroll.js — ~40 lines. Fork it, tweak the cron, change the team format, redeploy.
Cron under the hood.
Payday is just ARC-21 cron. Same primitive subs.asentum.com uses, same primitive AI agents use.
Integrate via Pay SDK.
@asentum/pay can register payroll runs as recurring “subscriptions” with you as the merchant. Same hook, different framing.
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 →Royalty splitsRevenue splits that auto-distribute.
Open showcase →Creator economyBorderless tipping + memberships.
Open showcase →TreasuryDCA, rebalance, sweep on autopilot.
Open showcase →SocialOn-chain profiles, posts, comments.
Open showcase →