Skip to main content

Current deployment

Inspect the protocol on Monadvision and the checked deployment manifest. The sources have exact creation/runtime verification recorded through Sourcify. Source verification is not a security audit.
The client generates orderKey for a logical purchase. Direct purchases use nodeId = 0. Use the generated ABI for the complete interface, return values, mutability, events, and errors; do not reconstruct calldata from a prose summary. The contract also supports policy registration, campaign funding and lifecycle actions, refunds, finalization, distributor reward claims, merchant proceeds claims, and unused-budget withdrawals.

Settlement invariants

  • Merchant reward funding and buyer payments are accounted separately.
  • Pending sales preserve the accepted policy and recipients.
  • A sale is refunded before unlock or finalized at/after unlock; terminal outcomes cannot overlap.
  • Beneficiaries pull their own claimable balances.
  • Unused-budget withdrawal cannot spend pending or claimable obligations.
  • Future policy versions require at least 24 hours’ notice and at most one upcoming version.
  • Direct sales do not reserve distributor commission.

Prototype limits

The current deployment bounds storage and claim work with 128 campaigns, 256 nodes per campaign, and 100 sales per campaign. Policies support 1–5 paid levels. A wallet can create one node and make one purchase per campaign in this prototype. Raising these bounds requires gas and capacity review, not just a frontend setting change. The SDUSD token is freely mintable and non-redeemable. Deployment tooling accepts Anvil and Monad Testnet; this is not a mainnet settlement release.

Build and test

From the Spoke repository:
The contract suite includes unit, fuzz, security, and stateful invariant checks. For gas measurements, run forge test --gas-report inside packages/contracts. See source and deployment scripts and recorded testnet proof.