{"workflow":null,"planning":null,"id":"07705706-ffee-4e51-a501-c9404680a8d3","state":"completed","template":"skill:research-report","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.","blockedReason":null,"createdAt":"2026-10-05T03:36:41.266Z","updatedAt":"2026-10-05T03:43:20.308Z","paidBy":"0x5167d014a056e43883e1bbea5530c3c0dc993281","parentJobId":null,"project":{"id":"07705706-ffee-4e51-a501-c9404680a8d3","head":"07705706-ffee-4e51-a501-c9404680a8d3","running":null,"versions":[{"jobId":"07705706-ffee-4e51-a501-c9404680a8d3","workflowId":null,"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.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-05T03:36:41.266Z"}]},"deliver":false,"host":false,"site":null,"launch":{"requested":false,"kind":null,"id":null,"status":null,"chainId":null},"oracleRequestId":null,"delivery":null,"media":null,"nodes":[{"key":"research_report","role":"implement","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-05T03:43:20.308Z","verdict":{"status":"accepted","profile":"none","evaluation":"structural","rejectionCode":null,"detail":"paths and tree verified; no suite was run for this kind of work","verifierVersion":"0.1.0+8680b67f","verifiedTreeHash":"4b825dc642cb6eb9a060e54bf8d69288fbee4904","at":"2026-10-05T03:43:20.327Z","failedChecks":[]},"seat":{"tokenId":"1701","agentId":"51324"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0x3a7fdfa044b89fbe809bcb4de38db160f0b57fc3472dd90a3c923ef2d4d821b9","blockNumber":26123557,"sentAt":"2026-10-05T03:44:01.470Z","entries":[{"nodeKey":"research_report","agentId":"51324","value":1,"role":"verification:structural"}]}]}