
Cascade
Dated dollars: money that pays bills before it becomes cash.
Demo
About
A dated dollar is USDC with a maturity date. Cascade turns a dollar into a dated dollar: one dollar of principal, redeemable on a calendar date, fully backed by value held in a vault on Arc. Every dated dollar with the same date is interchangeable. A dollar dated earlier settles any bill due later, at face value — no pricing, no negotiation, no credit check. That single property lets a supplier network run on one committed dollar instead of a chain of loans. Apple commits principal once; the supplier it pays settles its own bill with the same dated dollars, same day; that supplier's supplier does the same. Nobody borrows and nobody waits on a bank. Four operations carry the system: issue a dated dollar against an invoice, pay a bill with dated dollars, extend a dollar's date to earn the vault's yield for the days you commit it, or withdraw once it matures. Every operation is atomic and checked against the protocol's invariants immediately. The vault is live and verified on Arc testnet. The public app plays a year of an illustrative global supply chain — Apple's folding-display buildout — as ten thousand of these settlements move across a live globe. A buyer issues it against an obligation, and the receiving supplier can use those dated dollars to pay its own suppliers before maturity. That is the cascade. At maturity every dated dollar redeems 1:1 for USDC. Our vault runs on Arc and mints ERC-1155 tokens, one token id per UTC maturity day. Tokens with the same maturity day are interchangeable. We ran a year of the Apple display supply chain through the reference implementation: 12,028 invoices registered, 6,923 settled, $1.399B gross settled on $458.2M of committed principal. In our branched run, one $100M issue moves through 9 pay hops to 8 payees and settles $450M, with no new principal created at any split. Our app replays that year on a globe alongside a ledger sidebar and a year timeline, and director mode controls the shots. Its Verify on Arc panel reads balances and date tokens directly from the testnet vault instead of a bundled copy. Live app: https://cascade.vellum.network Repo: https://github.com/mcorrig4/cascade-money Video: https://shared.claude.do/public/cascade-money-demo-v4a.mp4
How it's made
We wrote the vault in Solidity, built and tested it with Foundry, and deployed and verified it on Arc testnet (chain id 5042002) at 0x4E7D5b438d38b93b811F7f847613100023d7DafE. Dated dollars are ERC-1155 tokens: the token ID is a calendar date, so every dollar dated the same day is fungible with every other by construction. Because ERC-1155 balances alone are awkward for wallets and integrators, the vault deploys a deterministic CREATE2 clone of a per-date ERC-20 view (`DatedDollarERC20`) the first time each date is touched — six decimals, a computed `USD+N`/`USD spot` symbol, ISO maturity metadata — reading balances and supply straight from the ERC-1155 ledger rather than holding a second copy of state. `uri()` returns base64 JSON with a rendered SVG coin per date for wallet display. Dated dollars are ERC-1155 ids derived from the UTC maturity day, and a DateMetadata library names each id USD spot or USD+N so a wallet shows the maturity instead of a raw number. The on-chain demo run is 16 transactions: 10 USDC of principal settles 40 USDC across four invoices, and balanceSheet() returns deficit 0 at the end. The protocol itself — the yield index, entitlement accrual, reserve, deficit mode, and every hard invariant in the Tier One specification — is implemented twice: once in the Solidity vault, and once in a Python 3.11+ reference simulator that models settlement, exact yield accrual under the funded index, and discount-window trades without touching a chain. The simulator is what generates the year-long event stream the app plays, and it is also the correctness harness: property-based tests written with Hypothesis exercise the protocol's invariants — principal identity, yield conservation, index monotonicity, date-only-moves-later — across randomized operation sequences and a dedicated ten-thousand-operation stress run, asserting every invariant after every single operation rather than only at test boundaries. The front end is a Vite + React + TypeScript app rendering the simulated year on a 3D globe with globe.gl (built on three.js): animated arcs per payment, a live ledger, a year-long timeline scrubber, a daily volume chart, and a director mode that reproduces every shot in the demo video on demand from one baked NDJSON data file, no backend required. We use Arc's native USDC for gas and for settlement. Arc gives us fast finality and a public explorer for every step, so our settlement path carries no bridge and no wrapped asset. Director mode replays every shot in the film from the same NDJSON file the app plays, so the video cannot drift from the product. A checksum gate refuses to render when narration timestamps are stale. ERC-1155 date ids make every maturity fungible inside its own day, so a dated dollar settles a bill with no pricing step.