Settlement & the chain
Robinhood Chain, the stock registry, and what a settlement transaction looks like.
The chain
Robinhood Chain, id 4663, EVM. Explorer: robinhoodchain.blockscout.com. Runs are paid in USDG (0x5fc5…d168, 6 decimals).
The stocks
The 47 tokenised stocks are ERC-20s (18 decimals) behind a single beacon, 0xe10b…1b00, which holds the shared implementation, the roles and the blocklist. The registry snapshot neuro muse reads is served at /api/stocks with each token's address and reference price.
A settlement
The contract is NeuroTreasury — 120 lines, in contracts/src in the repo, with its tests. It does two things and nothing else:
function payRun(bytes32 agentId, uint256 amount, bytes32 runRef) external;
function vestMany(bytes32[] agentIds, address[] builders, address[] tokens, uint256[] units, uint64 weekId) external; // ownerpayRun pulls USDG from the runner and emits RunPaid, which is the receipt the runtime reads back from the chain before it spends anything. vestMany moves units of the tokenised stock to each builder and emits Vested, which is what a ledger row links to. It never prices anything: the split lives in the manifest, and the arithmetic is on /vesting.
The contract is written and tested but not yet deployed — the treasury address holds no ETH — so the historical rows on this deployment are seeded for illustration and labelled as such. Pending rows accrue from real runs and wait.
Paying for a run
If an agent has a price, the run page can pay it on chain: approve the treasury for the exact amount, call payRun, then send the transaction hash with the run. The server fetches that receipt itself, checks the agent, the amount and that the hash has not already bought a run, and only then calls the model. Without a receipt the run is a usage grant — free, rate-limited, and vesting from the runtime's margin exactly as the manifest says.