Protocol overview
The account, the layers, the settlement cycle and the security assumptions.
The Investor Account
An Investor Account is a contract owned by a single wallet. It holds the positions bought with contributions, records which application produced each one, and exposes a read interface any integrated application can call.
The account holder sets two numbers: a Future Rate between 0.5% and 2.0%, and an optional Win Sweep rate on realised profit. Applications cannot set, raise or override either.
- Owner
- The wallet that created the account. Withdrawal authority never leaves it.
- Readable by
- Any integrated application, for the purpose of previewing a contribution.
- Writable by
- The settlement contract, for allocation only.
- Portability
- The account follows the address across every integrated application.
Contract architecture
Four layers, each with a narrow job. Nothing above the account layer can move a position out.
Emits a receipt for each settled user action.
Holds advertised rates, funded budgets and receipt validation.
Batches contributions and executes allocation into the recipe.
Owned by the wallet. The only contract that can move holdings out.
Transaction lifecycle
Every contribution starts as a receipt an application emits when a user action settles, and ends as a position inside the account.
A trade, a close, a settlement, a routed swap.
- User actionA trade, a close, a settlement, a routed swap.
- Receipt emittedThe application submits a signed receipt with the notional.
- Future Split derivedThe account's own rate decides the contribution. The app cannot set it.
- Match releasedIf a funded campaign applies, escrow releases the match.
- Batch settledContributions across the network settle every four hours.
- Recipe allocatedStock-token exposure lands in the account contract.
Batch settlement
Contributions do not execute one at a time. Verified receipts accumulate into a four-hour settlement batch, which nets the network's buying across all recipes before executing. This keeps allocation costs proportionate to a contribution that is frequently under twenty dollars.
- Batch window
- Four hours. Batches are numbered sequentially and are publicly inspectable.
- Netting
- Buy and sell pressure across recipes is netted before execution.
- Failure
- A receipt that fails verification is dropped from the batch, never partially applied.
- Cost
- Allocation cost is shared across every contribution in the batch.
Allocation recipes
A recipe is a set of target weights, not a token. Contributions buy the constituent positions directly, and the account holds them. Switching recipes rebalances the book to the new weights on the next batch.
- QQQ20%
- SPY30%
- NVDA4%
- AAPL5%
- MSFT5%
- USDG36%
- QQQ32%
- SPY34%
- NVDA7%
- AAPL7%
- MSFT6%
- USDG14%
- QQQ40%
- SPY30%
- NVDA10%
- AAPL8%
- MSFT6%
- USDG6%
Corporate actions
Splits, reverse splits and distributions are read from a corporate action oracle and applied as a position multiplier. A four-for-one split multiplies units by four and divides the reference price by four. Account value is unchanged by the adjustment itself, and recipe weights are preserved.
Security assumptions
Stated as assumptions rather than guarantees, because that is what they are.
| Actor | Can | Cannot |
|---|---|---|
| Your wallet |
| No restrictions |
| An application |
|
|
| A settlement operator |
|
|
| Governance |
|
|
- Escrow solvency
- A campaign cannot advertise more than it has deposited. Publication is rejected otherwise.
- Receipt integrity
- Receipts are signed by the application and verified against the notional it reported.
- Operator honesty
- Settlement operators bond $INVESTOR and can be slashed for provably invalid settlement.
- Oracle risk
- Corporate action and price data come from an oracle set governed by bonded holders.
- Market risk
- Recipe holdings can fall in value. Nothing in the protocol offsets market losses.
Events and data model
The canonical shape of a settled contribution, as delivered to an integrator.
1type ContributionEvent = {2 account: `0x${string}`;3 application: string;4 activity: "trade.completed" | "position.closed" | "swap.routed" | "payment.settled";5 notional: number; // USD value of the user action6 contribution: number; // Future Split derived from the account's own rate7 match: number; // Paid from Match Escrow, zero when no campaign applies8 recipe: "2040" | "2050" | "2060";9 batch: string; // Settlement batch identifier10 settledAt: string; // ISO 860111};