From 2ae01dd408055652f8fbccbd3b2bc8b70bd54ceb Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Thu, 8 Oct 2026 16:54:21 +0000 Subject: [PATCH] =?UTF-8?q?Oracle=20for=20the=202.0=20devnet=20on=20Sepoli?= =?UTF-8?q?a=20(0xbb345004=E2=80=A6,=20statements=20with=20chain=20id=2044?= =?UTF-8?q?65,=20on=20the=20shared=20verifier);=20/oracle=20says=20the=20s?= =?UTF-8?q?hared=20verifier's=20installed=20table=20is=20Devnet=203's=20un?= =?UTF-8?q?til=20devnet-4's=20lands?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- site/oracle.html | 4 +- tools/reference-apps/oracle/deploy.mjs | 6 ++- tools/reference-apps/oracle/deployment.json | 57 +++++++++++++-------- 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/site/oracle.html b/site/oracle.html index 63ebccd67..428bc1067 100644 --- a/site/oracle.html +++ b/site/oracle.html @@ -260,7 +260,7 @@

On Sepolia

-
Oracle
0x3ad71d4660d8a8d2f92248b9c286392dd76a3ab6 IgneumStateOracle, deployed 8 October 2026 on the shared verifier (tx 0x16312cf8…4e2a, block 11870855); its trust() names the two unchecked items below; accepts statements with chain id 4463 or 4464 (the earlier devnet it was deployed against; a redeploy against the 2.0 devnet, chain id 4465, is owed).
+
Oracle
0xbb3450049926da3572e6b67cb94df312fe349e34 IgneumStateOracle for the 2.0 devnet (igneum-devnet-4, statements with chain id 4465), deployed 8 October 2026 on the shared verifier (tx 0x5eb08f3a…a5a9, block 11871485). The Devnet 3 oracles stay as deployed with their records: 0x3ad71d46…3ab6 (chain ids 4463 and 4464, on the shared verifier) and 0xefe9879d…a1b2 (the stand-in verifier at first).
Verifier
0xAf74f3F512081291D663Bb1d6b6d37E99e37D744 the shared IgneumCertificateVerifier (the DEX lane's, a real BLS12-381 check on chain through the EIP-2537 precompiles, voter table installed at checkpoint 2127), set by setVerifier on 8 October 2026 (tx 0xd679bb65…db8e); the stand-in 0xa197ef31…a6f6 served until then
Chain
Sepolia, chain id 11155111; the Igneum 2.0 devnet (igneum-devnet-4), no value
Proven roots
Certificate 2232 (0xf056c26e…, 29 voters, signed weight 4,988 of 7,164) recorded on the shared verifier with a real BLS check, tx 0x1794b785…1e8a, 792,677 gas. Devnet chain block 28439, post_root 0x6e6d2fc8… stored on this oracle with a 6-header path, tx 0xcdb24dbc…ee5fc, 1,624,984 gas; provenBalance read 721.451608 IGN for 0xcaed79d8…c087 on Sepolia, equal to the devnet node's eth_getProof.
@@ -277,7 +277,7 @@
  • Every read: a keccak-keyed Merkle Patricia proof against the stored root, verified on chain.
  • Trust anchors and unchecked signatures, named (also returned by the contract's trust())

      -
    • Deployer-installed trust anchor, disclosed, not removed: the shared verifier's voter table. It stays because no header field commits to the table yet; the day one does, the table is read from the chain and this anchor goes.
    • +
    • Deployer-installed trust anchor, disclosed, not removed: the shared verifier's voter table. It stays because no header field commits to the table yet; the day one does, the table is read from the chain and this anchor goes. The table installed today is Devnet 3's (checkpoint 2127, chain id igneum-devnet-3): a 2.0 devnet certificate is not recordable through it until its deployer installs devnet-4's table; the roots and certificate recorded below are Devnet 3's.
    • The voter table and weights the shared verifier checks certificates against were installed by the verifier's deployer (read from a node at checkpoint 2127), not read from the chain. A certificate is verified against that installed table; a later table that drifts past the rule's margin needs a new install by that deployer.
    • The aggregator's BLS signature over the segment record is not checked on chain, and the SP1 proof behind its statement is not verified on chain. A stored root rests on the aggregator's statement as the nodes check and pay it.
    • A balance read from a stored root is executed and finalised state under those assumptions, not a payment outcome.
    • diff --git a/tools/reference-apps/oracle/deploy.mjs b/tools/reference-apps/oracle/deploy.mjs index 3e70b397b..6bf648dbb 100644 --- a/tools/reference-apps/oracle/deploy.mjs +++ b/tools/reference-apps/oracle/deploy.mjs @@ -29,13 +29,15 @@ async function deploy(name, args) { const oracleOnly = process.argv.includes('--oracle-only'); // --verifier 0x..: construct the oracle on that verifier (the shared IgneumCertificateVerifier) instead of the stub const vi = process.argv.indexOf('--verifier'); const verifierArg = vi > 0 ? process.argv[vi + 1] : null; +// --chain-ids A,B: the statement chain ids the oracle accepts (Devnet 3: 4463,4464; the 2.0 devnet igneum-devnet-4: 4465,4465) +const ci = process.argv.indexOf('--chain-ids'); const chainIds = ci > 0 ? process.argv[ci + 1].split(',').map(Number) : [EVM_CHAIN_ID, EVM_CHAIN_ID_AFTER_FLOOR]; const previous = existsSync(out) ? deployment() : null; const stub = oracleOnly && previous ? previous.stub : await deploy('StubCertificateVerifier', []); -const oracle = await deploy('IgneumStateOracle', [verifierArg || stub.address, EVM_CHAIN_ID, EVM_CHAIN_ID_AFTER_FLOOR]); +const oracle = await deploy('IgneumStateOracle', [verifierArg || stub.address, chainIds[0], chainIds[1] ?? chainIds[0]]); const after = await pub.getBalance({ address: account.address }); const d = { network: 'sepolia', chainId: 11155111, rpc: 'https://ethereum-sepolia-rpc.publicnode.com', deployer: account.address, - evmChainId: EVM_CHAIN_ID, evmChainIdAfterFloor: EVM_CHAIN_ID_AFTER_FLOOR, verifier: verifierArg || 'stub', verifierAddress: verifierArg || stub.address, stub, oracle, deployedAt: new Date().toISOString(), spentWei: (bal - after).toString(), + evmChainId: chainIds[0], evmChainIdAfterFloor: chainIds[1] ?? chainIds[0], verifier: verifierArg || 'stub', verifierAddress: verifierArg || stub.address, stub, oracle, deployedAt: new Date().toISOString(), spentWei: (bal - after).toString(), previous: previous ? [...(previous.previous || []), { stub: previous.stub, oracle: previous.oracle, deployedAt: previous.deployedAt, writes: previous.writes || [] }] : [], }; writeFileSync(out, JSON.stringify(d, null, 1) + '\n'); diff --git a/tools/reference-apps/oracle/deployment.json b/tools/reference-apps/oracle/deployment.json index 8628ee337..0d3d840ea 100644 --- a/tools/reference-apps/oracle/deployment.json +++ b/tools/reference-apps/oracle/deployment.json @@ -3,8 +3,8 @@ "chainId": 11155111, "rpc": "https://ethereum-sepolia-rpc.publicnode.com", "deployer": "0xe1D08384ef4c4c1511c8f05F94C914C4DeDc2787", - "evmChainId": 4463, - "evmChainIdAfterFloor": 4464, + "evmChainId": 4465, + "evmChainIdAfterFloor": 4465, "verifier": "0xAf74f3F512081291D663Bb1d6b6d37E99e37D744", "verifierAddress": "0xAf74f3F512081291D663Bb1d6b6d37E99e37D744", "stub": { @@ -14,13 +14,13 @@ "gasUsed": 8434842 }, "oracle": { - "address": "0x3ad71d4660d8a8d2f92248b9c286392dd76a3ab6", - "tx": "0x16312cf8177eb79c28858d79509ea56376cefb94e09fb1872bfea018df734e2a", - "block": 11870855, + "address": "0xbb3450049926da3572e6b67cb94df312fe349e34", + "tx": "0x5eb08f3aadfbcec8e6eeccf5349278e1c5eeba27c08d6150aa2fdbd0395ca5a9", + "block": 11871485, "gasUsed": 20561543 }, - "deployedAt": "2026-10-08T14:47:15.139Z", - "spentWei": "20561810300059", + "deployedAt": "2026-10-08T16:53:26.556Z", + "spentWei": "20561871984688", "previous": [ { "stub": { @@ -165,21 +165,36 @@ "headers": 6 } ] - } - ], - "writes": [ + }, { - "at": "2026-10-08T14:47:39.502Z", - "what": "submitStateRoot", - "vector": "devnet-3", - "number": "28439", - "postRoot": "0x6e6d2fc8993db13220d84f39ca9cbc08a8c6975ce2932a4289a1d6ef4cef60c8", - "certIndex": "2232", - "tx": "0xcdb24dbceb5b1c5f4605842809228428c59bd73291a0114e555df74c57dee5fc", - "block": 11870857, - "gasUsed": 1624984, - "calldataBytes": 24391, - "headers": 6 + "stub": { + "address": "0xa197ef31d5d5613125779179668e2482ac69a6f6", + "tx": "0xa01091b62dfb4a89b25afb57a3d384677a9ad62370748504d2b3f288c0d3ad38", + "block": 11869583, + "gasUsed": 8434842 + }, + "oracle": { + "address": "0x3ad71d4660d8a8d2f92248b9c286392dd76a3ab6", + "tx": "0x16312cf8177eb79c28858d79509ea56376cefb94e09fb1872bfea018df734e2a", + "block": 11870855, + "gasUsed": 20561543 + }, + "deployedAt": "2026-10-08T14:47:15.139Z", + "writes": [ + { + "at": "2026-10-08T14:47:39.502Z", + "what": "submitStateRoot", + "vector": "devnet-3", + "number": "28439", + "postRoot": "0x6e6d2fc8993db13220d84f39ca9cbc08a8c6975ce2932a4289a1d6ef4cef60c8", + "certIndex": "2232", + "tx": "0xcdb24dbceb5b1c5f4605842809228428c59bd73291a0114e555df74c57dee5fc", + "block": 11870857, + "gasUsed": 1624984, + "calldataBytes": 24391, + "headers": 6 + } + ] } ] }