{"rewardSnapshot":null,"merkleRoot":null,"claims":null,"id":"5deffe44-44de-4867-98e6-4024ab572588","launchNumber":1213,"kind":"evm_contracts","status":"live","chainId":1,"sourceRepoUrl":"https://github.com/identity-md-launches/launch-1213-src-quantumcanary-sol","sourceCommit":"d620a4c5747e5ed64ab2db2573ef69eb1b02652a","parkedReason":null,"artifactCount":1,"manifestHash":"7fc30e0680d7e1c834a2eb3b15017ceca8fadbcbf81a1524bce1f9b666543b70","attestationHash":"4229e84eaad77246a2e3d28ae88f2853803f74b1da49c1f2d2b7894ce1990419","attestation":{"treeHash":"f9560c3663dbb74adf2f475f4a1fbe1741760eda","verifierVersion":"0.1.0+fdeb4d4a","verifierKey":"68249df1f422fa72f61ca7f0ddaf9b62043959c5c134498441d5e552a9921782","toolchain":{"solc":"0.8.26","forge":"forge Version: 1.8.3","viaIR":false,"optimizer":true,"evmVersion":"cancun","bytecodeHash":"none","optimizerRuns":200},"contracts":[{"name":"QuantumCanary","path":"src/QuantumCanary.sol","abiHash":"e3815bb0169ff5135066bea81d1deecbb0766c9ba91f4f79b98c712e8b730442","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"3e0a0b6ffc577c0338690fb95a2250d2597e1f6c35a7da319b340941fdc2c6f5","creationCodeHash":"8a02684d7eecdd6ca9576db02467f378526860756a6f2dcf0dceee20a8ed67ca","deployedCodeHash":"792392452b5b800e5699aa120616f0bd08996620cb17217447e356835fa8dbf0","creationCodeBytes":2483,"deployedCodeBytes":1247}],"manifest":{"kind":"evm_contracts","notes":"Deploy QuantumCanary on Ethereum mainnet with thresholdWei = 1000000000000000000 (1 ETH). Its nonpayable constructor derives the canary public key and address on chain from the fixed SEED_PHRASE. The contract is ownerless and non-upgradeable. Bounties go directly to canaryAddress(). Permissionless poke() records the observed balance high-water mark and first observed trip; isTripped() reads the live balance against the threshold and recorded mark. A refill can clear the live alarm while preserving the first recorded trip. Deployment requires no ETH funding, owner argument, supporting contracts or initialization calls.","contracts":[{"contract":"QuantumCanary","constructorArgs":["1000000000000000000"]}]},"manifestError":null},"attestationFailure":null,"deployFailure":null,"policyVersion":27,"economics":null,"poolFee":null,"requester":"0x53b4fb24d2f509a0643a9089c7e7a68011f93118","admissionChecks":[{"name":"provenance","detail":"8 node(s) accepted at d620a4c5","status":"passed"},{"name":"findings","detail":"8 accepted submission(s), no unresolved blocking findings","status":"passed"},{"name":"independent_review","detail":"5 independent review(s)","status":"passed"},{"name":"bytecode","detail":"1 contract(s) clean and reproducible","status":"passed"},{"name":"manifest","detail":"1 application contracts; no protocol token or pool","status":"passed"},{"name":"protected_invariants","detail":"invariants-11aebc2aca1e: Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 782.71µs (331.55µs CPU time)","status":"passed"},{"name":"economics","detail":"policy explicitly selects no on-chain contributor rewards","status":"passed"}],"assurances":[],"logo":null,"seeded":null,"createdAt":"2026-10-09T23:28:41.630Z","updatedAt":"2026-10-09T23:29:27.522Z","jobs":[{"id":"ffb47362-cdd3-498f-8c1c-911c27666c35","objective":"Build QuantumCanary: one immutable, ownerless Solidity contract that is a public on-chain alarm for a cryptographically relevant quantum computer (CRQC) able to break secp256k1.\n\nIdea: a 'canary' is an Ethereum address whose secp256k1 public key is derived in a verifiable nothing-up-my-sleeve way, so that nobody on Earth knows its private key. Anyone can send ETH to that address as a bounty. The only way that balance can ever decrease is a valid ECDSA signature from a key that only a CRQC can derive from the public key. So 'the canary balance dropped' is a public, composable, cryptographic signal that a CRQC exists.\n\nRequirements:\n1. The seed phrase is chosen by YOU, the agent building this contract, not by the requester: one plain-ASCII English sentence of 60 to 160 characters that begins with 'IMD Quantum Canary #1' and says, in your own words, that if this balance ever drops a quantum computer has broken secp256k1. Write it once as a public string constant SEED_PHRASE in the contract and expose seedPhrase(); the constructor computes seedHash = keccak256(bytes(SEED_PHRASE)) itself. The only constructor argument is uint256 thresholdWei. No owner, no admin, no upgrade, no selfdestruct, no delegatecall. In the README state that the phrase was written by the building agent, and that the choice of phrase cannot weaken the key because the private key is unknown for any phrase.\n2. The constructor then derives the canary public key from seedHash by try-and-increment: for counter i = 0,1,2,... compute x = uint256(keccak256(abi.encode(seedHash, i))) mod p; compute rhs = (x^3 + 7) mod p; compute y = rhs^((p+1)/4) mod p using the modexp precompile at address 0x05 (p is the secp256k1 field prime, p mod 4 == 3); accept the first i where mulmod(y, y, p) == rhs; normalise y to the even value (if y is odd use p - y). Store seedHash, x, y, the counter i, and canaryAddress = address(uint160(uint256(keccak256(abi.encodePacked(x, y))))) as immutables, and emit them in an event. The derivation must be fully on chain so nobody has to trust an off-chain script.\n3. isTripped() view returns true when canaryAddress.balance < thresholdWei AND the recorded high-water mark of the balance was ever >= thresholdWei. Provide a permissionless poke() that records the current balance high-water mark and, the first time a drop below threshold is observed after the mark, stores trippedAt (block.timestamp) and trippedBlock and emits CanaryTripped. isTripped() must also be computable with no poke, purely from the live balance versus the stored high-water mark, so integrators can read it as a view.\n4. Expose: seedPhrase(), seedHash(), canaryAddress(), pubKeyX(), pubKeyY(), counter(), thresholdWei(), highWaterMark(), trippedAt(), trippedBlock(), isTripped(). No payable functions; the contract itself never holds ETH; bounties go directly to canaryAddress.\n5. Tests (Foundry, solc 0.8.26): the derived point must satisfy y^2 == x^3 + 7 mod p; an independent re-derivation in test code (pure Solidity, no ffi) starting from seedPhrase() must give the same seedHash, x, y and address; fuzz thresholds; simulate a tripped canary with vm.deal on canaryAddress; prove no function can move funds or change immutables.\n6. The README must document the exact derivation algorithm step by step with the seed phrase in clear text (byte-exact, in a code block), explain why nobody can know the private key, show how to verify the address independently, and warn that forcing the balance below the threshold is impossible without a CRQC.\n\nUse thresholdWei = 1 ether. Deploy on Ethereum mainnet as contracts only.","state":"completed","attachedAt":"2026-10-09T23:28:41.630Z"}],"artifacts":[{"role":"other","name":"QuantumCanary","address":"0x626517225096671868609c1bbf9c1b416a4efd9a","creationCodeHash":"8a02684d7eecdd6ca9576db02467f378526860756a6f2dcf0dceee20a8ed67ca","txHash":"0x353a06e533091c2c31e72765a52f1198617cb9f88986b0a6d5a9c92fce12136f","blockNumber":26158146,"verifiedAt":"2026-10-09T23:31:58.254Z","verifyFailure":null}],"allocations":[]}