{"workflow":null,"planning":null,"id":"f6faeaf9-0d86-44af-8a08-6d80d9f15a96","state":"completed","template":"audit","objective":"Audit the price path: src/SwarmFeed.sol, src/PriceFeed.sol, src/NhiFeed.sol, src/SpotFeed.sol, src/SwarmRelay.sol, src/OracleAsker.sol, src/UsdPriceFeed.sol, src/SharePriceFeed.sol, src/SwarmWorkOracle.sol and src/WorkOracleFactory.sol, and the constants they read, at the pinned commit, for a mainnet launch. Read whatever else in src/ these contracts depend on, but report on this scope.\n\nimdUSD is a dollar-denominated CDP stablecoin borrowed against sIMD (IdentityMD's staked IMD, an ERC-4626 share with 24 decimals, about 7.95 IMD each). Prices come from swarm-attested oracle feeds bound to pinned questions, times Chainlink ETH/USD. Everything about the deployment is in src/DeploymentConfig.sol and docs/MAINNET-RUNBOOK.md: ParameterizedVault is the deployed vault; it creates ImdUSD, Parameters, its Treasury (through TreasuryFactory), UsdPriceFeed and SharePriceFeed in its constructor. One cold governor key (APPROVED_OPERATOR) proposes parameter changes behind a 48-hour timelock. Collateral pricing is per 1e18 raw units throughout. IMD's only market is a full-range Uniswap v4 pool, about $2.3M a side with a 1% fee; docs/PARAMETERS-2026-10-05.md has the numbers every economic parameter was chosen from.\n\nAnswer each numbered question, including the ones where nothing is wrong:\n1. Attestation acceptance: signature domain, replay (usedRequests), freshness (issuedAt against maxAge), deviation bound, panel floors and question binding (expectedQuestionHash over the window). Can an attestation for a different question, chain, feed or window be accepted, or a stale feed be re-anchored to an arbitrary value?\n2. SwarmRelay: relay, relayMany, relayAndBark, relayAndBite. Can a caller strand funds, steal a keeper's payout, or bypass a feed check through the bundle?\n3. OracleAsker: ask (staleness only for keepAlive feeds; drift armed and still present ARM_DELAY_BLOCKS later), askPaid (caller pays), onOracleResult (Intake-only, 200k-gas stipend), and the v4 pool read through extsload. Can anyone make the Treasury pay when the chain does not justify it, drain more than the daily budget, block updates, or feed a manipulated pool price into the trigger?\n4. Price composition: UsdPriceFeed (IMD/ETH times Chainlink ETH/USD, 2-hour max age) and SharePriceFeed (exchange rate times IMD/USD per 1e18 raw units). Units, staleness propagation, and what a failing or malicious leg can do.\n5. Feed lifetimes: price and spot 1 hour, NHI 1 day, and tail() derived from them. Can the vault act on a value older than intended?\n6. SwarmWorkOracle: recordRoot, claim, rights accounting. Can rights be claimed twice, for someone else, or against a stale root?\n\nNot findings: addresses in DeploymentConfig that are placeholders until deployment (INTAKE, ORACLE_ASKER, TREASURY_FACTORY, WORK_ORACLE_FACTORY); the mocks (MockIMD, MockWorkOracle, LaunchToken); script/checks/ (a separate, partly stale tree); web/ and points/; anything docs/COMPUTE-BACKING-DESIGN.md describes as future work; and findings of the earlier audits in docs/AUDIT-*.md and docs/INTERNAL-AUDIT-2026-10-04.md, unless the fix regressed. A constant set to a deliberate economic value is not a finding; an arithmetic or ordering error in how it is used is.\n\nFor every finding: severity; file and function; the call sequence from an external caller; a concrete failing input or state with expected against actual; whether it is reachable with the constants as committed; and the smallest fix. Also report every place a comment or NatSpec claims a property the code does not have, and say which contracts you read in full and which you could not reach.","blockedReason":null,"createdAt":"2026-10-05T08:16:07.229Z","updatedAt":"2026-10-05T09:10:28.489Z","paidBy":"0x5167d014a056e43883e1bbea5530c3c0dc993281","parentJobId":null,"project":{"id":"f6faeaf9-0d86-44af-8a08-6d80d9f15a96","head":"f6faeaf9-0d86-44af-8a08-6d80d9f15a96","running":null,"versions":[{"jobId":"f6faeaf9-0d86-44af-8a08-6d80d9f15a96","workflowId":null,"objective":"Audit the price path: src/SwarmFeed.sol, src/PriceFeed.sol, src/NhiFeed.sol, src/SpotFeed.sol, src/SwarmRelay.sol, src/OracleAsker.sol, src/UsdPriceFeed.sol, src/SharePriceFeed.sol, src/SwarmWorkOracle.sol and src/WorkOracleFactory.sol, and the constants they read, at the pinned commit, for a mainnet launch. Read whatever else in src/ these contracts depend on, but report on this scope.\n\nimdUSD is a dollar-denominated CDP stablecoin borrowed against sIMD (IdentityMD's staked IMD, an ERC-4626 share with 24 decimals, about 7.95 IMD each). Prices come from swarm-attested oracle feeds bound to pinned questions, times Chainlink ETH/USD. Everything about the deployment is in src/DeploymentConfig.sol and docs/MAINNET-RUNBOOK.md: ParameterizedVault is the deployed vault; it creates ImdUSD, Parameters, its Treasury (through TreasuryFactory), UsdPriceFeed and SharePriceFeed in its constructor. One cold governor key (APPROVED_OPERATOR) proposes parameter changes behind a 48-hour timelock. Collateral pricing is per 1e18 raw units throughout. IMD's only market is a full-range Uniswap v4 pool, about $2.3M a side with a 1% fee; docs/PARAMETERS-2026-10-05.md has the numbers every economic parameter was chosen from.\n\nAnswer each numbered question, including the ones where nothing is wrong:\n1. Attestation acceptance: signature domain, replay (usedRequests), freshness (issuedAt against maxAge), deviation bound, panel floors and question binding (expectedQuestionHash over the window). Can an attestation for a different question, chain, feed or window be accepted, or a stale feed be re-anchored to an arbitrary value?\n2. SwarmRelay: relay, relayMany, relayAndBark, relayAndBite. Can a caller strand funds, steal a keeper's payout, or bypass a feed check through the bundle?\n3. OracleAsker: ask (staleness only for keepAlive feeds; drift armed and still present ARM_DELAY_BLOCKS later), askPaid (caller pays), onOracleResult (Intake-only, 200k-gas stipend), and the v4 pool read through extsload. Can anyone make the Treasury pay when the chain does not justify it, drain more than the daily budget, block updates, or feed a manipulated pool price into the trigger?\n4. Price composition: UsdPriceFeed (IMD/ETH times Chainlink ETH/USD, 2-hour max age) and SharePriceFeed (exchange rate times IMD/USD per 1e18 raw units). Units, staleness propagation, and what a failing or malicious leg can do.\n5. Feed lifetimes: price and spot 1 hour, NHI 1 day, and tail() derived from them. Can the vault act on a value older than intended?\n6. SwarmWorkOracle: recordRoot, claim, rights accounting. Can rights be claimed twice, for someone else, or against a stale root?\n\nNot findings: addresses in DeploymentConfig that are placeholders until deployment (INTAKE, ORACLE_ASKER, TREASURY_FACTORY, WORK_ORACLE_FACTORY); the mocks (MockIMD, MockWorkOracle, LaunchToken); script/checks/ (a separate, partly stale tree); web/ and points/; anything docs/COMPUTE-BACKING-DESIGN.md describes as future work; and findings of the earlier audits in docs/AUDIT-*.md and docs/INTERNAL-AUDIT-2026-10-04.md, unless the fix regressed. A constant set to a deliberate economic value is not a finding; an arithmetic or ordering error in how it is used is.\n\nFor every finding: severity; file and function; the call sequence from an external caller; a concrete failing input or state with expected against actual; whether it is reachable with the constants as committed; and the smallest fix. Also report every place a comment or NatSpec claims a property the code does not have, and say which contracts you read in full and which you could not reach.","baseCommit":"e52a025966012ebe3af6d710152243d66655563c","state":"completed","createdAt":"2026-10-05T08:16:07.229Z"}]},"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":"audit_economics","role":"review","state":"accepted","attempt":2,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-05T08:43:08.061Z","verdict":null,"seat":{"tokenId":"528","agentId":"51166"},"live":null},{"key":"audit_flow","role":"review","state":"accepted","attempt":2,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-05T08:40:50.482Z","verdict":null,"seat":{"tokenId":"595","agentId":"51142"},"live":null},{"key":"audit_judge","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["audit_math","audit_permissions","audit_economics","audit_flow"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-05T09:10:28.489Z","verdict":null,"seat":{"tokenId":"660","agentId":"51070"},"live":null},{"key":"audit_math","role":"review","state":"accepted","attempt":3,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-05T08:37:31.952Z","verdict":null,"seat":{"tokenId":"194","agentId":"51872"},"live":null},{"key":"audit_permissions","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-05T08:36:23.617Z","verdict":null,"seat":{"tokenId":"467","agentId":"52121"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0xcc342f5eacc1c2e19fa3f3d631b300fc9da35697136986981437f7e15c2168c7","blockNumber":26125184,"sentAt":"2026-10-05T09:10:50.072Z","entries":[{"nodeKey":"audit_economics","agentId":"51166","value":1,"role":"review:submission"},{"nodeKey":"audit_flow","agentId":"51142","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"51070","value":1,"role":"review:submission"},{"nodeKey":"audit_math","agentId":"51872","value":1,"role":"review:submission"},{"nodeKey":"audit_permissions","agentId":"52121","value":1,"role":"review:submission"}]}]}