{"read":{"source":"live","ttl_s":60,"what":"`live` — this request read the chain and the explorer. `cache` — a reading at most 60s old. `stale` — the copy had expired, so it was served anyway and a refresh is running behind this response (up to 900s old). Contract state does not change per request and one uncached card costs 6 RPC + 4 explorer calls, so this is what keeps a crowd from rate-limiting the pool out from under everyone. A vow-specific read (?vow_id=) is never cached and always says `live`."},"chain":{"name":"Robinhood Chain","rpc":"https://rpc.mainnet.chain.robinhood.com","chain_id":4663,"explorer":"https://robinhoodchain.blockscout.com","explorer_api":"https://robinhoodchain.blockscout.com/api/v2"},"explorer_readability":"every scry contract carries an on-chain NOTICE string and emits string-bearing events — the full oath / terms / label land in the event log, so a human on the explorer reads sentences, not hashes. Permissionless, ownerless, free (gas is the price). Anyone can run their own; the reference deployment's only special property is the pubkey third parties already pin. Each addressed contract carries a `verified` flag + `recent_events` tail read live from the Robinhood-Chain Blockscout API (chain.explorer_api) — no web3 or wallet needed to browse them.","status":null,"contracts":{"notary":{"address":"0x0C15fA7829458118e3d26229F58FE0443f8b792c","deployed":true,"explorer":"https://robinhoodchain.blockscout.com/address/0x0C15fA7829458118e3d26229F58FE0443f8b792c","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x0C15fA7829458118e3d26229F58FE0443f8b792c","verified":true,"live":{"count":70},"recent_events":[{"event":"Notarized(address indexed by, bytes32 indexed hash, string label, string memo, uint64 at, uint256 seq, bool firstForHash)","tx":"0xe46b3c6772a51ffda082ddb22fad45793261d7e2341693dfeb3a3f272629ab12","block":62112761,"at":"2026-09-13T16:52:17.000000Z"},{"event":"Notarized(address indexed by, bytes32 indexed hash, string label, string memo, uint64 at, uint256 seq, bool firstForHash)","tx":"0x6c24aba724f98e5a682689371c8624d0ae7de7b0d08200c8e190a6d1c7425c99","block":62112736,"at":"2026-09-13T16:52:14.000000Z"},{"event":"Notarized(address indexed by, bytes32 indexed hash, string label, string memo, uint64 at, uint256 seq, bool firstForHash)","tx":"0xc78b902f26b49810618420c0e948cca9c25dbf1c2ce1ed55d6a77c4e118761f7","block":53927153,"at":"2026-09-04T02:58:05.000000Z"},{"event":"Notarized(address indexed by, bytes32 indexed hash, string label, string memo, uint64 at, uint256 seq, bool firstForHash)","tx":"0x6125e745d9a6cf69fd57890c2707795041341f7c2a82397f65bff6fde01cf0c2","block":53927129,"at":"2026-09-04T02:58:03.000000Z"},{"event":"Notarized(address indexed by, bytes32 indexed hash, string label, string memo, uint64 at, uint256 seq, bool firstForHash)","tx":"0x1e3668ae8365407d1fb74ade310ec612bd8be7b13ccf42fe6ecca3986b166afc","block":44123003,"at":"2026-08-23T15:46:52.000000Z"}],"what":"commit any hash with a plain-text label + memo before the outcome; first-seen per hash is the priority record. The daily augury seed beacon posts here too.","calls":{"notarize(bytes32 hash, string label, string memo)":"put a commitment on the record","checkReveal(bytes32 hash, string preimage)":"verify a revealed preimage from the read tab"},"events":["Notarized(by, hash, label, memo, at, seq, firstForHash)"],"off_chain":"the meter's /anchors + the augury seed reveal (GET /augury/seed)","onchain_name":"ScryNotary","recent_events_reachable":true},"covenant":{"address":"0xf2ddf64a5256c7f004520f12A125D56c6fAf7CE4","deployed":true,"explorer":"https://robinhoodchain.blockscout.com/address/0xf2ddf64a5256c7f004520f12A125D56c6fAf7CE4","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0xf2ddf64a5256c7f004520f12A125D56c6fAf7CE4","verified":true,"live":{"covenantCount":0},"recent_events":[],"what":"a fleet swears ONE oath, one wallet at a time; renouncing is recorded, never erased.","calls":{"open(bytes32 covenantId, bytes32 textHash, uint32 cadenceHours, string label, string text)":"publish the shared oath (full text in the event log)","swear(bytes32 covenantId)":"a wallet accepts the oath","renounce(bytes32 covenantId, string reason)":"a recorded, public breach"},"events":["CovenantOpened(covenantId, opener, textHash, cadenceHours, label, text)","Sworn(covenantId, member, seq, at)","Renounced(covenantId, member, seq, reason, at)"],"off_chain":"GET /covenant/{id} (cohort view) · POST /covenant to open off-chain first","onchain_name":"ScryCovenant","recent_events_reachable":true},"pact":{"address":"0x9E666aDA6EC24C4Ef5F5e78013202585D0f323c2","deployed":true,"explorer":"https://robinhoodchain.blockscout.com/address/0x9E666aDA6EC24C4Ef5F5e78013202585D0f323c2","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x9E666aDA6EC24C4Ef5F5e78013202585D0f323c2","verified":true,"live":{"pactCount":0},"recent_events":[],"what":"an agreement BETWEEN parties (different obligations, one document); each party asserts its own status; the register never renders a verdict.","calls":{"propose(bytes32 pactId, bytes32 termsHash, string title, string terms, address[] parties, string[] roles, string[] obligations)":"publish the agreement (terms + every role/obligation in the log)","sign(bytes32 pactId)":"a named party accepts its side","comment(bytes32 pactId, string text)":"add to the shared thread","assertStatus(bytes32 pactId, string status)":"assert YOUR OWN view"},"events":["PactProposed(pactId, proposer, termsHash, title, terms, parties, roles, obligations)","PactSigned(pactId, party, signedCount, at)","PactComment(pactId, by, text, at)","StatusAsserted(pactId, by, status, at)"],"off_chain":"GET /pact/{id} (the parties + thread) · POST /pact to propose off-chain first","onchain_name":"ScryPact","recent_events_reachable":true},"stele_edition":{"address":null,"deployed":false,"explorer":null,"explorer_api":null,"verified":null,"live":null,"recent_events":null,"what":"transferable ERC-721 prints of a vow's stele. The vow stays soulbound — the print does NOT move the vow. Flat SCRY price, SCRY-in to the splitter.","calls":{"mintEdition(bytes32 vowId)":"mint a print (approve SCRY for `price` first)","price()":"the flat SCRY price","editionCount(bytes32 vowId)":"prints minted of a vow"},"events":["EditionMinted(vowId, tokenId, edition, to)","Transfer(from, to, tokenId)"],"off_chain":"GET /vow/{id}/stele.svg (the live stele a print depicts)"},"eidolon":{"address":null,"deployed":false,"explorer":null,"explorer_api":null,"verified":null,"live":null,"recent_events":null,"what":"the Thousand — 1000 one-of-one eidolon vessels (ERC-721), the agency's special mint. Flat SCRY to the splitter; sequential ids; traits sealed by an immutable sha256(salt) commitment set before mint #1, so nobody (operator included) can steer a trait. A vessel is a collectible, not a measurement.","calls":{"mint()":"summon one of the thousand (approve SCRY for `price` first)","price()":"the flat SCRY price","totalMinted()":"how many are summoned","saltCommitment()":"sha256 of the trait salt, committed at deploy","royaltyInfo(uint256,uint256)":"ERC-2981 — royalties to the fee splitter"},"events":["EidolonMinted(tokenId, to)","Transfer(from, to, tokenId)"],"off_chain":"GET /eidolon (the card) · /eidolon/{id}/metadata · /eidolon/provenance · GET /prepare/eidolon/mint (unsigned calldata)"},"vow_registry":{"address":"0x08131e7660639bBd086dFfA9375c2a563F1D3590","deployed":true,"explorer":"https://robinhoodchain.blockscout.com/address/0x08131e7660639bBd086dFfA9375c2a563F1D3590","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x08131e7660639bBd086dFfA9375c2a563F1D3590","verified":true,"live":{"anchorCount":18},"recent_events":[{"event":"Anchored(bytes32 indexed root, uint64 vowCount, string leavesCid, uint64 timestamp)","tx":"0x1fcc8ffcb112175845a6950e2543b38700e1188dc9c779c8d068666e2c38f095","block":20911019,"at":"2026-07-27T17:29:26.000000Z"},{"event":"Anchored(bytes32 indexed root, uint64 vowCount, string leavesCid, uint64 timestamp)","tx":"0xe5a12363c7cf8294511432230c3b2d6475cd1b1ff2058dfb013e30c09bd13ba3","block":20433772,"at":"2026-07-27T04:09:20.000000Z"},{"event":"Anchored(bytes32 indexed root, uint64 vowCount, string leavesCid, uint64 timestamp)","tx":"0x4d88baac27e767bdfefa5890a75b4c06403a69a422f7bc0655c7a96f3640e858","block":19572324,"at":"2026-07-26T04:09:18.000000Z"},{"event":"Anchored(bytes32 indexed root, uint64 vowCount, string leavesCid, uint64 timestamp)","tx":"0x863214ce3a739f0aafc6d3a027fddb6173a61db6a39399372645424d51a66191","block":19330370,"at":"2026-07-25T21:24:27.000000Z"},{"event":"Anchored(bytes32 indexed root, uint64 vowCount, string leavesCid, uint64 timestamp)","tx":"0x4c360f43ffe523e02e40e39a1326739cc2d0b05f5ed7b786202b97e2f2eda25b","block":19168398,"at":"2026-07-25T16:53:42.000000Z"}],"what":"soulbound vows (ERC-5192) + the merkle anchor that makes every vow ledger tamper-evident against even the scry operator.","calls":{"takeVow(bytes32 vowId, bytes32 textHash, uint32 cadenceHours, bool sealed_, string text)":"mint a soulbound vow","anchorRoot(bytes32 root, uint64 vowCount, string leavesCid)":"oracle-only: post the daily merkle root"},"events":["VowTaken(tokenId, vowId, swearer, textHash, cadenceHours, sealed_, text)","Anchored(root, vowCount, leavesCid, timestamp)"],"off_chain":"GET /vow/{id} · GET /anchors · GET /vow/{id}/proof","onchain_name":"ScryVowRegistry","recent_events_reachable":true},"reputation":{"address":null,"deployed":false,"explorer":null,"explorer_api":null,"verified":null,"live":null,"recent_events":null,"what":"soulbound market reputation — a per-wallet score only authorized market contracts (the job board, the arbiter) may earn or slash. Non-transferable by construction: you can't buy a good name, sell a clean one, or wash a slashed record by switching wallets. DISTINCT from the meter's score-blind behavioral read — a market-history record, never a measurement, never for sale.","calls":{"rep(address who) → uint256":"a wallet's current reputation","threshold() → uint256":"the posted score a wallet needs for high-value jobs","meets(address who) → bool":"does this wallet clear the threshold","earn(address,uint256,bytes32) / slash(...)":"authorized market contracts only — never a payment path"},"events":["Earned(who, amount, total, reason)","Slashed(who, amount, total, reason)","ThresholdSet(threshold)","AuthoritySet(who, allowed)"],"off_chain":"GET /reputation/{address} (a wallet's score) · GET /reputation (the board + posted threshold)"}},"economy":{"what":"the non-register scry contracts (the economy spine and the game contracts) — source in contracts/src, deploy scripts in contracts/script","job_board":{"contract":"EloJobBoard","what":"the on-chain spine of the agent-labor market — hire a named worker under a trust mode (escrow / insured / reputation-only); the flat-fee court is paid the same whatever it rules; earns/slashes EloReputation on the outcome","key_calls":["post(seller, amount, mode, specHash, deadline, premium)","deliver(id, hash)","complete(id)","dispute(id)"]},"insurance_pool":{"contract":"EloInsurancePool","what":"the premium pool behind the 'insured' trust mode — anyone pays premiums, the board pays capped claims; no owner-drain path","key_calls":["payPremium(uint256)","claim(to, amount, jobId)"]},"bank":{"contract":"ScryBank","address":"0x7e0aAa241D1D8E12421E8Caf207FB197d44225D9","what":"stake ELO → xELO, a pro-rata claim on every ELO the bank holds (SushiBar/Jeweler pattern, single-sided). No owner, no pause, no lock and no emission schedule: the pool grows only when the posted split routes real ELO fees in, so the redemption rate only ever ratchets up. No rate of return is quoted anywhere — the income is event-driven, not a rate.","key_calls":["enter(uint256)","leave(uint256)","redemptionRate() → uint256 (1e18)"],"caveat":"while totalSupply() == 0 ANY inflow is captured WHOLE by the first depositor, the fee splitter's 40% bank line included — it is a plain safeTransfer like any other, and anyone may call distribute(). Corrected 2026-07-28; this said the splitter was the safe inflow. Stake into it in the same sitting as the deploy.","off_chain":"GET /bank","explorer":"https://robinhoodchain.blockscout.com/address/0x7e0aAa241D1D8E12421E8Caf207FB197d44225D9","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x7e0aAa241D1D8E12421E8Caf207FB197d44225D9"},"fee_splitter":{"contract":"ScryFeeSplitter","address":"0x34E0F7dAFfFcd7Dfcab4B4C7Cc11747c3746453c","what":"every ELO fee we take — service fees, and the ELO-denominated game entries and rakes since 'scry can enter' (2026-07-25) — routes through one posted bps table: burn (0xdEaD) / bank / prize escrow / ops. Sums to 10000, enforced by the constructor; every change is an event. NEVER measurement revenue, in either direction.","key_calls":["distribute() (permissionless)","burnBps() → uint16","totalBurned() → uint256","cuts(uint256) → (address, uint16)","setSplit(address[] to, uint16[] bps)"],"caveat":"rescue() is an operator override that BYPASSES the split, so the honest sentence is 'the split is the only path funds take WITHOUT the operator key' — never 'the only path'","off_chain":"GET /bank","explorer":"https://robinhoodchain.blockscout.com/address/0x34E0F7dAFfFcd7Dfcab4B4C7Cc11747c3746453c","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x34E0F7dAFfFcd7Dfcab4B4C7Cc11747c3746453c"},"harvest":{"contract":"ScryHarvest","address":"0x4e9d1837efba102b121c97409da08addcb028d8e","what":"merkle-claim payouts of the augury harvest — operator funds, ledger posts the root, players claim themselves","key_calls":["claim(address wallet, uint256 cumulative, bytes32[] proof)","postRoot(bytes32 newRoot, uint256 totalCommitted, string ledgerRef)"],"caveat":"deployed UNFUNDED and with no root, which is the correct resting state. Since 2026-07-29 it is the AIRDROP instrument only: the games went ledgerless — a real coin at the door and on the win, nothing accruing in between — so gameplay no longer accrues or bridges, and what a root commits here is a snapshot drop, and roots are republishable so nobody forfeits by claiming late","explorer":"https://robinhoodchain.blockscout.com/address/0x4e9d1837efba102b121c97409da08addcb028d8e","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x4e9d1837efba102b121c97409da08addcb028d8e"},"garden":{"contract":"ScryGarden","address":"0x41da298526fcf79f69d16076f22a4692d52aabc7","what":"the constant-product AMM (x*y=k, LP ticker SEED) behind the MYRRH/OBOL pair; spotPrice is a raw reserve ratio and is manipulable by design, so it is never an oracle for anything valued","key_calls":["addLiquidity(...)","removeLiquidity(...)","swap(...)","spotPrice()"],"caveat":"1,000 wei of SEED is MINIMUM_LIQUIDITY, locked forever so totalSupply can never return to 0 — the standard first-depositor guard. Everything else is redeemable through removeLiquidity, which has no owner gate and no timelock","explorer":"https://robinhoodchain.blockscout.com/address/0x41da298526fcf79f69d16076f22a4692d52aabc7","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x41da298526fcf79f69d16076f22a4692d52aabc7"},"nexum":{"contract":"ScryBurrow","what":"borrow against posted collateral and stay above water; liquidations are the game. Reads the Garden's spot price on purpose - holding a shove in public is what makes manipulation cost something","key_calls":["depositCollateral(uint256)","borrow(uint256)","repay(uint256)","liquidate(address)","healthFactor(address)"]},"granary_obol":{"contract":"ScryGranary","address":"0x57a270a37610A750B302889ECD13d48DA78fD3B7","what":"holds OBOL's MINTER SLOT. Nothing else can mint the coin. Grantees (the silo, a season pot, the cashier) mint through it against a posted per-UTC-day cap; the steward can set or revoke a grant, and can stewardMint UNCAPPED.","key_calls":["grants(address) -> (dailyCap, mintedToday, day, enabled)","setGrant(address, uint256)","revokeGrant(address)","stewardMint(address, uint256)","rotateMinterAway(address)","transferSteward(address)"],"caveat":"the honest sentence is 'a grant is capped, the STEWARD is not'. stewardMint has no cap and rotateMinterAway can hand the slot to any address including an EOA, so nothing here is renounced. The only terminal act is transferSteward, which is two-step and which deploy_town.sh never calls.","explorer":"https://robinhoodchain.blockscout.com/address/0x57a270a37610A750B302889ECD13d48DA78fD3B7","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x57a270a37610A750B302889ECD13d48DA78fD3B7"},"granary_myrrh":{"contract":"ScryGranary","address":"0x1fc285b4Fa3a6923b0E5e2fc7A7F0d8765C7f69d","what":"holds MYRRH's MINTER SLOT, and is a SEPARATE deployment from the OBOL granary — a ScryGranary binds exactly one token. Its one grantee today is the Gardener.","key_calls":["grants(address) -> (dailyCap, mintedToday, day, enabled)","setGrant(address, uint256)","revokeGrant(address)","stewardMint(address, uint256)"],"caveat":"same uncapped-steward caveat as the OBOL granary. MYRRH's own 21,000,000 cap is immutable on the token and is a LIFETIME mint budget — _burn never decrements it — so the cap binds this granary too, however the grants are set.","explorer":"https://robinhoodchain.blockscout.com/address/0x1fc285b4Fa3a6923b0E5e2fc7A7F0d8765C7f69d","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x1fc285b4Fa3a6923b0E5e2fc7A7F0d8765C7f69d"},"gardener":{"contract":"ScryGardener","address":"0xa390Da8dB5B5967e25225a5EFeAb22F955417b97","what":"the farm: stake the Garden's SEED, earn MYRRH on a posted per-second schedule. MYRRH's only source — before it, every MYRRH in existence was hand-minted.","key_calls":["deposit(uint256 pid, uint256 amount)","withdraw(uint256, uint256)","pendingMyrrh(uint256, address)","claimLocked()","currentRewardPerSecond()","emergencyWithdraw(uint256)"],"caveat":"IMMUTABLE, no setter: the cliff (unlockTime) that locked harvest waits for, and the halving shape. ADJUSTABLE forever by the owner: rewardPerSecond, lockBps, addPool, setAllocPoint — so the emission rate is a posted number, never a promise. Most of each harvest locks until the cliff; emergencyWithdraw forfeits pending rewards.","explorer":"https://robinhoodchain.blockscout.com/address/0xa390Da8dB5B5967e25225a5EFeAb22F955417b97","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0xa390Da8dB5B5967e25225a5EFeAb22F955417b97"},"silo":{"contract":"ScrySilo","address":"0x2989f6016aC43058B7F1DEC363Ba27100CA34C73","what":"the OBOL sink and drip — seal OBOL away and it accrues; break the seal early and a posted share burns.","key_calls":["deposit(uint256)","withdraw(uint256)","breakSeal(uint256)"],"caveat":"maxBreakBps is IMMUTABLE at 5000 — half of a sealed position is the most an early break can ever burn, and that is the burn at t=0, falling from there. It mints through the OBOL granary against a posted daily grant, so its drip is bounded by that grant and not by its own arithmetic.","explorer":"https://robinhoodchain.blockscout.com/address/0x2989f6016aC43058B7F1DEC363Ba27100CA34C73","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x2989f6016aC43058B7F1DEC363Ba27100CA34C73"},"orchard":{"contract":"ScryOrchard","address":"0x4cB19FC98F37a2615C02515bFbb10174d8c35b69","what":"reward seasons for real canonical Uniswap v3 liquidity — a finite, pre-funded OBOL pot paid by liquidity-seconds spent IN RANGE. Your position NFT stays yours; the Orchard cannot edit its liquidity.","key_calls":["createIncentive(...)","stakeToken(uint256)","unstakeToken(uint256)","withdrawToken(uint256, address)","claimReward(...)","incentives(uint256)"],"caveat":"THE ORCHARD NEVER MINTS — a season is funded up front or it does not exist, so no season can outrun its pot. Deployed with NO SEASON POSTED, which is the correct resting state. Only in-range liquidity earns, and after a season closes an out-of-range position's share decays until it is unstaked.","explorer":"https://robinhoodchain.blockscout.com/address/0x4cB19FC98F37a2615C02515bFbb10174d8c35b69","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x4cB19FC98F37a2615C02515bFbb10174d8c35b69"},"shrine":{"contract":"ScryShrine","address":"0x013F6575CBAb64C5831062F9eb662eB3219925dE","what":"burn OBOL or MYRRH as an offering, and the burn is a public record. Two altars: OBOL at 1 point per token, MYRRH at 5.","key_calls":["offer(uint8 altar, uint256 amount)","scoreOf(address)","addOffering(...)","setOfferingEnabled(...)"],"caveat":"BURNS ONLY — no grant, no minter, no funds held, and no way in but offer(). A rank here buys NOTHING: not reputation, not access, not odds. The owner's only powers are adding an offering and enabling it; the base step is immutable with no setter.","explorer":"https://robinhoodchain.blockscout.com/address/0x013F6575CBAb64C5831062F9eb662eB3219925dE","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0x013F6575CBAb64C5831062F9eb662eB3219925dE"},"gacha":{"contract":"ScryGacha","address":"0xb63Ce4F300193413884fBf1568548c9b48ba3b0f","what":"deposit an NFT with ETH backing and it has a floor; pay to draw a random one and either keep it or hand it back for most of its backing. Draw weights are inverse to backing, and the full solved game — every position's exact draw chance and the floor-only edge — is published free at GET /gacha/book before anyone pays.","key_calls":["openPool(...)","deposit(...)","quote(collection)","draw(...)","settle(...)","reveal(...)"],"caveat":"backing, price, fees and standing bids are NATIVE ETH between depositors and buyers; the ELO toll rail is in the bytecode and DISARMED (tollRate 0). The reveal delay is counted in TRUE L2 blocks via ArbSys, not Solidity's block.number, which on this Nitro chain is the parent chain's — the same confusion once turned a ~10s reveal into ~20 minutes.","off_chain":"GET /gacha","explorer":"https://robinhoodchain.blockscout.com/address/0xb63Ce4F300193413884fBf1568548c9b48ba3b0f","explorer_api":"https://robinhoodchain.blockscout.com/api/v2/addresses/0xb63Ce4F300193413884fBf1568548c9b48ba3b0f"}},"note":"the meter never executes any of this — your wallet acts. These registers make the off-chain records (cohorts, pacts, vows) public and tamper-evident; they never render a verdict."}