Developers
Contracts, APIs and the public book.
Everything runs on Arc testnet (chain 5042002). USDC is 0x3600000000000000000000000000000000000000, 6 decimals.
Contracts
Deployed from Arc Studio, owned by the ops wallet.
| Contract | Address | Role |
|---|---|---|
| Vault | 0x7A40b36b…2e2319 | ERC-4626 vault over USDC: quote, sell, buy, settle, markImpaired |
| ClaimWrapper | 0xfc7E6ECF…115952 | deposit, depositAndSell, collect, redeem |
| ClaimToken | 0x39006ed8…61B090 | ERC-1155 claims, one id per fund and payout date |
| NavOracle | 0xCd55924a…c4A08b | Chainlink Runtime Environment (CRE) receiver: NAV, time, issuer status |
| FundRegistry | 0x63469718…83dCe4 | Listed funds and pricing terms |
| IssuerStub | 0x2b492aD3…516Ebe | Stand-in issuer redemption desk |
| ACRED (stand-in) | 0xCd5DE841…1683E2 | Fund token, 90-day payout |
| ACREDd (demo) | 0x8d9FF934…76d06F | Fund token, 15-minute payout |
Quote
Price a sale before it exists.
cast call 0x7A40b36b012DC19b1f42dd68C13F4daE312e2319 \
"quoteFund(address,uint256)((uint8,string,uint256,uint64,uint16,uint16,uint16,uint16,uint256,uint256))" \
0x8d9FF934E08DA9f8AEbF2280dAD218e8d176d06F 1000000000000000 \
--rpc-url https://rpc.testnet.arc.io
# (verdict, reason, nav, navUpdatedAt, baseBps, utilBps, timeBps, creditBps, payout, capacityLeft)HTTP API
Served by the app.
GET /api/issuer-status?fund=0x... {"status":"OK"} or {"status":"FAILED"}; the API CRE reads
GET /api/book open claims and the fund directory, read from Arkiv
POST /api/nav/push carry the Chainlink NAV and issuer status to the oracle
POST /api/arkiv/sync index new Arc events into ArkivOracle reports
One encoding for CRE and every other writer.
- Chainlink NAV feedThe fund's net asset value, on Ethereum mainnet.
- Issuer statusWhether the issuer is paying: OK or FAILED.
- Chainlink CRENodes read both, agree, and sign one report.
- NavOracle on ArcAccepts only signed reports from the forwarder.
- VaultPrices every sale from it, and halts on bad news.
- Arkiv bookEach sale is written to a public database.
report = abi.encode(address fund, uint256 nav, uint8 navDecimals, uint64 updatedAt, uint8 status)
// status 0 = OK, 1 = FAILED. Equal updatedAt accepted, older rejected, more than 5 minutes ahead rejected.
// The CRE workflow is in cre/nav-bridge: cron, mainnet feed read, issuer API, writeReport to arc-testnet.Run it
Clone, test, query.
git clone https://github.com/ETH-Global-Mumbai-2026/earlyout
cd earlyout/contracts && forge install foundry-rs/forge-std OpenZeppelin/openzeppelin-contracts@v5.7.0 --no-git && forge test
cd ../web && pnpm install && pnpm arkiv:query
cd ../cre && cre workflow simulate ./nav-bridge --target staging-settings