Robinwood StocksDocs
Reference

Platform contracts API

Registry, factories, splitter, guardian, distributor — the curator platform's contract surface.

The curator platform is live on mainnet; every address is on the addresses page. This page is the API-level map of what each contract does and what, exactly, is privileged. The through-line: after deployment, the only privileged lever on the whole platform is the Safe raising a supply cap (and the Safe-gated brake on the V2 registries). Everything else is permissionless or immutable.

CuratorRegistry

Licenses. Two burn functions, two hard constants, no admin at all:

FunctionWhat it does
burnForLicense()Burns LICENSE_BURN_V1 (10,000 $WOOD) from the caller; grants a permanent V1 (frozen) license
burnForLicenseV2()Burns LICENSE_BURN_V2 (25,000 $WOOD); grants a permanent V2 (agentic) license, which includes V1
isLicensed(address) / isLicensedV2(address)The factories' gate

Legacy 25,000 $WOOD burns from the original pricing are grandfathered into V2. There is no function to revoke, reprice, or refund a license.

BasketFactory (frozen) and BasketFactory2 (agentic)

Permissionless createBasket(...), gated only by the caller's license. Both wire every deployment identically:

  • guardian → the shared CuratorGuardian (below);
  • feeRecipient → the factory's immutable FeeSplitter;
  • starter supply cap ≤ 1,000 tokens (STARTER_CAP), ceiling 1M (maxSupplyCap, immutable).

BasketFactory2 additionally deploys the basket's BasketDistributor in the same transaction, wires the oracle layer (AssetRegistry, MakerRegistry, USDG feed) into the token, and validates the agent policy against the contract ceilings. Both factories expose allBaskets() / basketCount() / curatorOf (and factory2 distributorOf) — the shelf is enumerable on-chain. Neither factory retains any power over a basket after deployment.

FeeSplitter

The feeRecipient of every factory-created basket. Mint fees arrive as basket tokens; distribute(basket) is permissionless and pushes CURATOR_SHARE_BPS = 6000 (60%, a constant) to the curator and the rest to the protocol treasury. No admin can change the split, the treasury, or a basket's registered curator.

CuratorGuardian

The guardian of every curated basket. Its complete external surface is raiseCap(basket, newCap), Safe-gated, upward-only, bounded by the immutable per-basket ceiling. setMintPaused and setFeeRecipient do not exist on it — a curated basket's minting can never be paused and its fee stream can never be redirected, by anyone.

BasketToken2 (agentic baskets)

The frozen BasketToken core (in-kind mint/redeem, full backing, ungated redemption, fee ≤ 0.50%) plus exactly one new power: the agent's rebalance, bounded by the policy. New views: constituents(), units(), nav18(), isFullyBacked(), holder enumeration for the distributor, and the immutable policy getters (rebalanceCooldown(), maxTurnoverBps(), maxSlippageBps()). The curator's only function is setAgent.

BasketDistributor

One per agentic basket, deployed by the factory. Immutable interval (1–90 days); once per interval anyone may run the paginated snapshot-and-pay cycle that pushes the USDG pot pro-rata to holders. No owner; the protocol Safe holds only the payout-side exclusion list (infra addresses whose share stays in the pot). Mechanics: USDG payouts.

AssetRegistry / MakerRegistry / PoolMaker / PoolTwapObserver

The V2 oracle and settlement layer, shared by all agentic baskets and Safe-gated as the global brake — covered in Oracles & pricing.

On this page