{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"07705706-ffee-4e51-a501-c9404680a8d3","kind":"skill:research-report","nodes":[{"acceptedSubmissionHash":"643b34c4a0f7a31037c269c5cacd420e6b6b8d798a8cbdd877ba9a5001f088b9","dependsOn":[],"execution":{"network":true,"profile":"none","requires":["network"],"skillHash":"3ddca93330036359dd721585e58e67820336a0398b7927b3c89369d6134f30f6","skillId":"research-report","tools":[]},"key":"research_report","kind":"code","role":"implement","skillHash":"3ddca93330036359dd721585e58e67820336a0398b7927b3c89369d6134f30f6","skillId":"research-report","state":"accepted"}],"objective":"Design an oracle cooperative: many protocols share one stream of swarm-attested values and split its cost, instead of each buying its own updates.\n\nWHY. Measured for our own CDP stablecoin: 24 updates a day at about 4.25 USD each is 37,230 USD a year, while a 200 bps stability fee on 1M USD of debt earns 20,000. Solo, a small protocol cannot afford a fresh price. The same IMD/ETH price, or the same pool's spot, is wanted by several protocols at once.\n\nHOW THE SWARM ORACLE WORKS, so the design is not generic. An `oracle.request` costs 0.5 IMD (about 4.25 USD) and is answered in minutes, not blocks. A panel of agents answers; a service key (0x5598aa9146215bc13eb26f2c692ad1461fd32982) signs an EIP-712 attestation, domain name \"IdentityMD Oracle\", version \"2\", with chainId and verifyingContract chosen by the requester as `consumer`. Struct: requestId, chainId, questionHash, answerType, answer, figure (uint256), fromBlock, toBlock, blockHash, panelJobId, panelSize, quorum, agreed, issuedAt, expiresAt. Because `agreed` is signed, a consumer enforces its own floor on chain. A chain-evidence answer must come from a re-runnable recipe the signer re-executes, and only these exist: log-sum, log-count, univ4-spot {poolManager, poolId, invert?, samples odd 1-61} (all uint256); call-compare (bool, one view call at the closing block against a threshold); log-rank and v4-volume-rank (address[] or bytes32[]). Anything else is `panel` evidence: voted, not re-run. A panel once returned a price wrong by 256x by majority, so panel evidence is weaker and must be treated so. `questionHash` is keccak over the canonical question document INCLUDING its block window; a consumer must check it, because the requester names the consumer and anyone can buy a signed answer to a different question addressed to your contract. A recurring consumer pins the document prefix and splices in the signed fromBlock/toBlock, and must also require toBlock to advance.\n\nTHE CONSTRAINT THAT SHAPES THIS. An attestation is signed for ONE verifyingContract, so a shared value needs one hub contract as the consumer that verifies, stores and serves it. Storage is then readable for free by anyone, which is the free-rider problem: why pay into the co-op if the value is public?\n\nANSWER, each separately:\n1. Access: gated on-chain reads (an allowlist on the view, the way Chronicle's toll works) versus a public good funded another way. What gating actually excludes, given storage is public off chain and a member could re-publish the value. Recommend one.\n2. Cost-sharing: per-subscription, per-read, or pro rata to value secured. How shared oracle networks price this today (Chainlink sponsorship and feeds, Pyth update fees, API3 dAPIs and OEV, Chronicle, RedStone); cite figures.\n3. Which questions the hub carries, who may add one, and how each question's document prefix is pinned so a new question cannot rewrite an old one. How a member's deviation cap and staleness need not match anyone else's.\n4. Triggers: who decides when to buy an update (a clock, any member, a price-movement band) and how to stop one member draining the pool with requests only it benefits from.\n5. Failure: a refused or late update, a member leaving, a stale value. Every member must be able to see staleness and refuse it independently.\n6. OEV: an update that enables liquidations is worth money to whoever lands it; say who should capture that and whether the co-op can recapture it to fund itself.\n\nTHE CONTRACTS SECTION will be built by a launch that deploys AT MOST FOUR contracts and makes NO calls after deployment, so every link is made in a constructor (a parent may create its children) and every privileged address is a constant in source, never a constructor argument or placeholder. For each contract give: purpose, constructor, storage, external functions with access rules, events, and the invariants a test must hold. Solidity interfaces, not full implementations. Then a Foundry test plan naming each test, including the adversarial ones.\n\nPERIOD: current as of the report date; comparator figures should come from live parameters or from the last 24 months, with the date each was read.\n\nFORMAT: one Markdown spec of roughly 3,000 to 6,000 words, in this order: (1) a one-paragraph recommendation stating the design in plain terms; (2) a decisions table, one row per numbered question above, with the choice, the figure, and the main reason; (3) the answer to each numbered question in its own section; (4) the contracts; (5) the test plan; (6) the risks ranked by severity; (7) open questions that need the IdentityMD developer, each phrased so it can be asked as is. Use tables wherever a comparison has more than two items.\n\nMark every statement about the IdentityMD plane you could not verify yourself as an ASSUMPTION. Cite at least six distinct sources, each a page that states what it is cited for. No marketing pages.","parentJobId":null,"planHash":"4bf1201c33bc764b94e8f9c05f6f412e0a30ca7192b001de421f3c50096bc620","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"07705706-ffee-4e51-a501-c9404680a8d3","publication":{"commit":null,"deliveredAt":null,"repoUrl":null},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51324","feedbackHash":"e069634a67289f784108abf821b6453d2315c55b563b76990e5a9ab2f4e123b2","nodeKey":"research_report","submissionHash":"643b34c4a0f7a31037c269c5cacd420e6b6b8d798a8cbdd877ba9a5001f088b9","tag1":"verification:structural","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"52f17fdb160fb823a332903118460afb417a8db787b809f5ac3d036977e15bb6","state":"completed","submissions":[{"artifacts":[{"bytes":44718,"hash":"be9b6285d13b54a31c39b0d1dcee9bc0f350fb76b4870223ad5c077e97cb09ec","mediaType":"text/markdown","name":"spec","path":"artifacts/spec.md"}],"attempt":1,"bundleHash":null,"device":"54f31a82977e83fd","findings":[],"hash":"643b34c4a0f7a31037c269c5cacd420e6b6b8d798a8cbdd877ba9a5001f088b9","nodeId":"da0ba394-a04a-4f45-af16-99be63bc972f","outcome":"completed","summary":"Created [artifacts/spec.md](artifacts/spec.md) and [README](artifacts/README.md).\n\nThe spec includes all six decisions, dated evidence, explicit assumptions, one-contract architecture, and 30 named tests/invariants.\n\nChecks passed: structure, arithmetic, and Solidity interface compilation. Behavioral tests remain a plan. Files were left untracked.","treeHash":"4b825dc642cb6eb9a060e54bf8d69288fbee4904","usage":{"cachedInputTokens":1579264,"inputTokens":124985,"model":null,"outputTokens":14392,"runtime":"codex","turns":5,"wallClockMs":387573}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"643b34c4a0f7a31037c269c5cacd420e6b6b8d798a8cbdd877ba9a5001f088b9","verifiedTreeHash":"4b825dc642cb6eb9a060e54bf8d69288fbee4904","verifierVersion":"0.1.0+8680b67f"}]}