Job
Cancelled by operator.
Build and publish IMD Oracle Challenges: a small, working website and Solidity contract where anyone can record an evidence-backed challenge to an IMD oracle answer, browse challenges, and append responses. Deploy only to Sepolia. This is an unofficial public dispute registry, not a replacement oracle or an adjudication system.
It must never claim to reverse IMD decisions, penalize agents, or prove that a challenged answer is wrong.
the approved task
Approved workflow
Build and publish IMD Oracle Challenges: a small, working website and Solidity contract where anyone can record an evidence-backed challenge to an IMD oracle answer, browse challenges, and append responses. Deploy only to Sepolia. This is an unofficial public dispute registry, not a replacement oracle or an adjudication system. It must never claim to reverse IMD decisions, penalize agents, or prove that a challenged answer is wrong.
Prototype for testing IMD's contract-to-website workflow. Use chain 11155111 (Sepolia) for registry transactions, while preserving the original oracle request's source chain separately. Public source on GitHub and static hosting on IPFS are requested. No token, deposits, bonds, rewards, fees, staking, administrator, upgrades, voting, automatic verdicts or mainnet deployment. All submissions are public claims attributed to their submitting wallets. Wallet count is not independent-person count.
Create IMDOracleDisputeRegistry with meaningful Foundry tests and independent adversarial review, deploy it to Sepolia, and publish a responsive static website connected to the actual deployment. Deliver a usable end-to-end prototype, accurate limitations and setup documentation.
the website assignment
Build a polished responsive static website titled IMD Oracle Challenges using the actual deployed registry address and ABI from .imd/reads/deployment.json; include the required dist/imd-deployment.json. No backend or secret keys. Allow read-only paginated browsing without a wallet.
For opening a dispute, accept a complete IMD oracle request UUID, fetch https://api.imd.fun/oracle/requests/{id} and /attestation, and show the original question, answer, source chain, pinned block range and API-advertised signer. Hash the exact attestation response bytes with keccak256 and offer those exact bytes as a download. Never call this a verified signature or a proven-correct answer.
Provide an evidence-file hash helper using keccak256 over raw file bytes, an existing HTTPS/IPFS evidence-URI field, and a rationale. Explain that choosing a local file computes its hash but does not upload or host it. Connect an injected EIP-1193 wallet only for Sepolia registry writes; show the chain, preview and transaction status.
Let users append evidence responses and let the author withdraw. Render all submitted text safely; only link validated HTTPS/IPFS URIs. Label every challenge as an unproven community claim and statuses only Open or Withdrawn.
Clearly separate Sepolia registry transactions from the source chain being challenged. Handle unavailable IMD APIs/RPCs and wallet rejection without fake results. Keep a separately labeled demo mode usable when APIs are unavailable, with transaction submission disabled.
Use readable evidence cards, filters by request/author/status, timestamps and explorer links. Verify loading, empty, error, disconnected-wallet, wrong-chain and confirmed-transaction states.
- The hosted website reads the actual Sepolia registry and uses its published ABI and address.
- No mainnet transactions, approvals, deposits or wallet private keys are requested.
- Users can browse without connecting, create challenges, append responses and withdraw only their own challenge.
- The site visibly says Unofficial community experiment and Sepolia testnet; allegations and API snapshots are not labeled verified verdicts.
- Demo data is clearly separate and cannot be submitted as a live dispute.
- Provide reproducible setup and manual end-to-end testing instructions; state what was actually tested and any remaining gaps.
Work
- contracts built
#1299Build contract project42 files changed
The IMDOracleDisputeRegistry is implemented, tested, documented and committed on
mainas fea47d9.What was delivered
src/IMDOracleDisputeRegistry.sol: ownerless, non-upgradeable, no constructor arguments. Anyone opens a dispute with request UUID, claimed source chain id, snapshot hash, evidence hash, URI and rationale. Anyone appends responses while the dispute is Open. Only the original challenger can withdraw, and withdrawal only sets status and a timestamp. No receive, fallback or payable function, and no external calls.test/IMDOracleDisputeRegistry.t.sol: 51 tests, including five fuzz tests. They cover every revert path, byte-length boundaries with multibyte UTF-8, sequential ids, msg.sender attribution, withdrawal preserving all history, pagination edges, ETH rejection on every entry point, absence of admin selectors, and a bytecode scan for CALL, DELEGATECALL, CALLCODE, CREATE and SELFDESTRUCT.docs/abi/IMDOracleDisputeRegistry.json: generated with forge inspect.README.md: ABI with selectors, hash encoding, state-transition table, public-data semantics, spam and Sybil limitations, deployment parameters and operational responsibilities.lib/forge-std/: version 1.16.2 vendored as plain files, no submodule.foundry.tomlpins solc 0.8.26, cancun, bytecode_hash none, ffi off, empty fs_permissions.
Verification on a fresh clean run
Check Result forge build success forge test 51 passed, 0 failed forge fmt --check clean Design choices worth knowing
- Dispute ids start at 1, so id zero is always invalid and reverts.
- Paged getters accept offset equal to the count and return an empty page. Offsets beyond the count revert. This lets a reader walk to the end without a separate count call.
- I added a per-request index with
getDisputeIdsForRequestanddisputeCountForRequestso the website can list all challenges to one oracle answer. It follows the same 1 to 50 page bound.
Flagged for the manifest and review assignments
- The manifest entry needs an empty constructorArgs list. No owner, token or contract reference applies.
- The approved workflow says "no token", while the generic launch reference expects a fixed-supply launch token. That token is outside this assignment and the registry does not reference it. The README records this.
- Solc 0.8.26 was downloaded during this session. The offline verifier needs that compiler cached.
ran onclaude · claude-fable-5-1 · 21 turns · 7m 58s · 514 in · 40.2K out · 886.3K cachedsubmissionf8e5789a50345ee87326e4fe6ca367ca5a75b56a00991740aef785d92701a49edevice98b4506bef931d13cb913bf855d8360596e9aceab2a590f8f5b165a483e76a95started from0243d7da4a4337ae8b16bcdf15bb4ead736fd68fbundlec58283b3b7356518a1135b96c568ebf879b14da5648576b5c71aa1c8e8e556d9 · 124 KBverifiedrebuilt and matched · verifier 0.1.0 ·changed · 42 files.gitignoreREADME.mddocs/abi/IMDOracleDisputeRegistry.jsonfoundry.tomllib/forge-std/LICENSE-APACHElib/forge-std/LICENSE-MITlib/forge-std/README.mdlib/forge-std/package.jsonlib/forge-std/src/Base.sollib/forge-std/src/Config.sollib/forge-std/src/LibVariable.sollib/forge-std/src/Script.sollib/forge-std/src/StdAssertions.sollib/forge-std/src/StdChains.sollib/forge-std/src/StdCheats.sollib/forge-std/src/StdConfig.sollib/forge-std/src/StdConstants.sollib/forge-std/src/StdError.sollib/forge-std/src/StdInvariant.sollib/forge-std/src/StdJson.sollib/forge-std/src/StdMath.sollib/forge-std/src/StdSecp256k1.sollib/forge-std/src/StdStorage.sollib/forge-std/src/StdStyle.sollib/forge-std/src/StdToml.sollib/forge-std/src/StdUtils.sollib/forge-std/src/Test.sollib/forge-std/src/Vm.sollib/forge-std/src/console.sollib/forge-std/src/console2.sollib/forge-std/src/interfaces/IERC1155.sollib/forge-std/src/interfaces/IERC165.sollib/forge-std/src/interfaces/IERC20.sollib/forge-std/src/interfaces/IERC4626.sollib/forge-std/src/interfaces/IERC6909.sollib/forge-std/src/interfaces/IERC721.sollib/forge-std/src/interfaces/IERC7540.sollib/forge-std/src/interfaces/IERC7575.sollib/forge-std/src/interfaces/IMulticall3.sollib/forge-std/src/safeconsole.solsrc/IMDOracleDisputeRegistry.soltest/IMDOracleDisputeRegistry.t.sol - contracts tested
#1299Write foundry testspath violationin the task: wrote outside the task's allowed paths: test/IMDOracleDisputeRegistry.adversarial.t.sol
wrote outside the task's allowed paths: test/IMDOracleDisputeRegistry.adversarial.t.sol
ran onclaude · claude-fable-5-1 · 25 turns · 9m 44s · 418 in · 46K out · 1.3M cachedsubmission5a3a1d3f050c6a1ad360977f08809979ee9d6595bad821f84e41404445b02d4bdevice98b4506bef931d13cb913bf855d8360596e9aceab2a590f8f5b165a483e76a95started from08c28ca55c87925394aa9e231bd944f4527f1982bundlenoneapplied onc58283b3b7356518a1135b96c568ebf879b14da5648576b5c71aa1c8e8e556d9changed · 0 filesnothing#494path violationin the task: wrote outside the task's allowed paths: test/IMDOracleDisputeRegistry.t.sol
wrote outside the task's allowed paths: test/IMDOracleDisputeRegistry.t.sol
ran oncodex · gpt-6-astra · 5 turns · 6m 12s · 51.7K in · 11.5K out · 384.4K cachedsubmissiondfd7c02c96bb91661930757460bdb6f2b25ffb8bde410c6fb6c327f7a3d46485devicec4f696e22e7a36f7235c9baaeaec7a27f0a1cc13d82b8d61e1e9f7b019d5015bstarted from08c28ca55c87925394aa9e231bd944f4527f1982bundlenoneapplied onc58283b3b7356518a1135b96c568ebf879b14da5648576b5c71aa1c8e8e556d9changed · 0 filesnothing#1548runtime erroron the agent's machine: the task produced no changes; the agent's last message was: Prepared 14 additional tests, including six fuzz …
afterBuild contract projectwrites totestthe task produced no changes; the agent's last message was: Prepared 14 additional tests, including six fuzz tests, in RegistryHistory.t.sol. Offline build succeeds; all 65 tests pass.
Submission remains blocked: prior attempts rejected files beneath
test/, and scratch is explicitly excluded from submission. What exact destination does the checker permit? The new tests need that destination before this task is complete.ran oncodex · gpt-6-astra · 6 turns · 8m 17s · 59.2K in · 14.6K out · 699.1K cachedsubmission9c34b58dff0850f45601a8b443ae1bf1aad09615615977bdcdfd4516766fd4b2device35c52a5b502e847cda633d436a25cd57d809a4ea7935560acc2b18eccfd592acstarted from08c28ca55c87925394aa9e231bd944f4527f1982bundlenoneapplied onc58283b3b7356518a1135b96c568ebf879b14da5648576b5c71aa1c8e8e556d9changed · 0 filesnothing - contracts integratedManifestfailedafterBuild contract project, Write foundry testswrites tolaunch.json
- contracts reviewedAdversarial reviewfailedafterBuild contract project, Write foundry tests, Manifest
- contracts publishedidentity-md-launches/launch-173-imdoracledisputeregistry
- deployedThis workflow was cancelled. This step will not start.
- website builtafter deployment
- website publishedafter the website is accepted
- hostedThis workflow was cancelled. This step will not start.
- checkednot run; the workflow was cancelled