From 09f558f2ce39b4a186e7823b9df3c923da4b0a46 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 17 Nov 2023 21:33:49 +0300 Subject: [PATCH 01/63] add playgorund for testing --- arb-verifier/package.json | 46 ++++++++++++++++++++ arb-verifier/test/arbPlayground.ts | 69 ++++++++++++++++++++++++++++++ package.json | 4 +- 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 arb-verifier/package.json create mode 100644 arb-verifier/test/arbPlayground.ts diff --git a/arb-verifier/package.json b/arb-verifier/package.json new file mode 100644 index 00000000..fd97fd12 --- /dev/null +++ b/arb-verifier/package.json @@ -0,0 +1,46 @@ +{ + "name": "@ensdomains/op-verifier", + "license": "MIT", + "version": "0.1.0", + "scripts": { + "build": "echo 'building op-verifier...' && bun hardhat compile", + "test": " hardhat test", + "clean": "rm -fr artifacts cache node_modules typechain-types", + "lint": "exit 0", + "play" : "npx ts-node ./test/arbPlayground.ts" + + }, + "devDependencies": { + "@ensdomains/op-gateway": "workspace:*", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^1.0.0", + "@typechain/ethers-v6": "^0.4.0", + "@typechain/hardhat": "^8.0.0", + "@types/chai": "^4.2.0", + "@types/express": "^4.17.18", + "@types/mocha": ">=9.1.0", + "@types/supertest": "^2.0.14", + "chai": "^4.2.0", + "ethers": "^6.8.0", + "express": "^4.18.2", + "ganache": "^7.9.1", + "hardhat": "^2.16.0", + "hardhat-deploy": "^0.11.43", + "hardhat-deploy-ethers": "^0.4.1", + "hardhat-gas-reporter": "^1.0.8", + "solidity-bytes-utils": "^0.8.0", + "solidity-coverage": "^0.8.1", + "supertest": "^6.3.3", + "ts-node": "^10.9.1", + "typechain": "^8.2.0", + "typescript": "^5.2.2" + }, + "dependencies": { + "@ensdomains/evm-verifier": "^0.1.0", + "@eth-optimism/contracts": "^0.6.0", + "@eth-optimism/contracts-bedrock": "^0.16.2" + } +} diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts new file mode 100644 index 00000000..88175e47 --- /dev/null +++ b/arb-verifier/test/arbPlayground.ts @@ -0,0 +1,69 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable prettier/prettier */ +import { Contract, ethers } from "ethers" + +export const arbPlayground = async () => { + console.log("go") + const rpc = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" + const outboxGoerli = "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049" + + const validatorWallet = "0xAa01D5570E932a13eF9a06677eaf97d56a33393f" + //const eventTopic = "0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748" + + const l1Provider = new ethers.JsonRpcProvider(rpc) + + const latestBlocknr = await l1Provider.getBlockNumber() + + const latestBlock = await l1Provider.getBlock(latestBlocknr) + + console.log({ + blockNr: latestBlock?.number, + hash: latestBlock?.hash + }) + + const abi = [ + "event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash)", + ]; + + + const curerntB = await l1Provider.getBlockNumber() + + const filter = { + fromBlock: curerntB - 1000, + toBlock: curerntB, + address: "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049", + topics: [ + '0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748', + ] + }; + + const iface = new ethers.Interface(abi) + + + + const logs = await l1Provider.getLogs(filter); + const latestLog = logs[logs.length - 1]; + + const e = iface.parseLog({ + topics: [...latestLog.topics], + data: latestLog.data + + + }) + + const [outputRoot, l2BlockHash] = e.args + + console.log(outputRoot, l2BlockHash) + + + + + + + + + + +} + +arbPlayground() \ No newline at end of file diff --git a/package.json b/package.json index df8a07f8..adf65f0a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "evm-verifier", "l1-verifier", "op-verifier", - "crosschain-resolver" + "crosschain-resolver", + "arbi-verifier", + "arbi-gateway" ], "scripts": { "env": "env", From 2ed2c1377d16fb4068d72831699fec605c003fd4 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sat, 18 Nov 2023 00:59:09 +0300 Subject: [PATCH 02/63] mvp arbi proof service --- arb-verifier/test/ArbProofService.ts | 124 +++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 arb-verifier/test/ArbProofService.ts diff --git a/arb-verifier/test/ArbProofService.ts b/arb-verifier/test/ArbProofService.ts new file mode 100644 index 00000000..6cbd2870 --- /dev/null +++ b/arb-verifier/test/ArbProofService.ts @@ -0,0 +1,124 @@ +/* eslint-disable prettier/prettier */ +import { EVMProofHelper, type IProofService } from '@ensdomains/evm-gateway'; +import { AbiCoder, Contract, Filter, Interface, JsonRpcProvider, type AddressLike } from 'ethers'; + +export interface ArbProvableBlock { + stateRoot: string; + hash: string; + number: number + +} +const SEND_ROOT_UPDATED_EVENT_TOPIC = "0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748" + +const OUTBOX_ABI = [ + "event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash)", +]; + +/** + * The proofService class can be used to calculate proofs for a given target and slot on the Optimism Bedrock network. + * It's also capable of proofing long types such as mappings or string by using all included slots in the proof. + * + */ +export class ArbProofService implements IProofService { + private readonly l1Provider: JsonRpcProvider; + private readonly l2Provider: JsonRpcProvider; + private readonly l2Outbox: Contract; + private readonly helper: EVMProofHelper; + + constructor( + l1Provider: JsonRpcProvider, + l2Provider: JsonRpcProvider, + l2OutboxAddress: string, + ) { + this.l1Provider = l1Provider; + this.l2Provider = l2Provider; + this.l2Outbox = new Contract( + l2OutboxAddress, + OUTBOX_ABI, + l1Provider + ); + this.helper = new EVMProofHelper(l2Provider); + + + } + + async getStorageAt(block: ArbProvableBlock, address: AddressLike, slot: bigint): Promise { + return this.helper.getStorageAt(block.number, address, slot); + } + + + /** + * @dev Fetches a set of proofs for the requested state slots. + * @param block A `ProvableBlock` returned by `getProvableBlock`. + * @param address The address of the contract to fetch data from. + * @param slots An array of slots to fetch data for. + * @returns A proof of the given slots, encoded in a manner that this service's + * corresponding decoding library will understand. + */ + async getProofs( + block: ArbProvableBlock, + address: AddressLike, + slots: bigint[] + ): Promise { + const proof = await this.helper.getProofs(block.number, address, slots); + + return AbiCoder.defaultAbiCoder().encode( + [ + 'tuple(tuple(bytes32 version, bytes32 stateRoot, bytes32 latestBlockhash) outputRootProof)', + 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', + ], + [ + { + blockNo: block.number, + outputRootProof: { + version: + '0x0000000000000000000000000000000000000000000000000000000000000000', + stateRoot: block.stateRoot, + latestBlockhash: block.hash, + }, + }, + proof, + ] + ); + } + + public async getProvableBlock(): Promise { + const latestBlocknr = await this.l1Provider.getBlockNumber() + + const filter: Filter = { + fromBlock: latestBlocknr - 1000, + toBlock: latestBlocknr, + address: this.l2Outbox.getAddress(), + topics: [SEND_ROOT_UPDATED_EVENT_TOPIC] + }; + + const iface = new Interface(OUTBOX_ABI) + + const logs = await this.l1Provider.getLogs(filter); + const latestLog = logs[logs.length - 1]; + + const e = iface.parseLog({ + topics: [...latestLog.topics], + data: latestLog.data + }) + + if (!e) { + throw new Error("No event found") + } + const [stateRoot, l2BlockHash] = e.args + + const l2Block = await this.l2Provider.getBlock(l2BlockHash) + + if (!l2Block) { + throw new Error("No block found") + } + + + return { + hash: l2BlockHash, + number: l2Block.number, + stateRoot: stateRoot + } + + } +} From 3481092bbcb0654e2b24296f5a92ff1d566979dd Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sat, 18 Nov 2023 01:09:36 +0300 Subject: [PATCH 03/63] add arb-verifier package --- arb-verifier/.gitignore | 12 ++ arb-verifier/LICENSE | 21 ++++ arb-verifier/README.md | 31 +++++ arb-verifier/contracts/OPVerifier.sol | 43 +++++++ arb-verifier/contracts/test/TestL1.sol | 106 +++++++++++++++++ arb-verifier/contracts/test/TestL2.sol | 21 ++++ arb-verifier/deploy_l1/00_op_verifier.ts | 33 ++++++ arb-verifier/deploy_l1/10_testl1.ts | 21 ++++ arb-verifier/deploy_l2/01_testl2 .ts | 18 +++ arb-verifier/hardhat.config.ts | 66 +++++++++++ arb-verifier/test/ArbProofService.ts | 2 + arb-verifier/test/arbPlayground.ts | 63 +++++++--- arb-verifier/test/testOPVerifier.ts | 138 ++++++++++++++++++++++ arb-verifier/tsconfig.json | 14 +++ bun.lockb | Bin 665752 -> 669696 bytes crosschain-resolver/test/testResolver.ts | 48 ++++---- l1-verifier/contracts/test/TestL1.sol | 139 +++++++++++++++-------- op-verifier/test/testOPVerifier.ts | 10 +- 18 files changed, 692 insertions(+), 94 deletions(-) create mode 100644 arb-verifier/.gitignore create mode 100644 arb-verifier/LICENSE create mode 100644 arb-verifier/README.md create mode 100644 arb-verifier/contracts/OPVerifier.sol create mode 100644 arb-verifier/contracts/test/TestL1.sol create mode 100644 arb-verifier/contracts/test/TestL2.sol create mode 100644 arb-verifier/deploy_l1/00_op_verifier.ts create mode 100644 arb-verifier/deploy_l1/10_testl1.ts create mode 100644 arb-verifier/deploy_l2/01_testl2 .ts create mode 100644 arb-verifier/hardhat.config.ts create mode 100644 arb-verifier/test/testOPVerifier.ts create mode 100644 arb-verifier/tsconfig.json diff --git a/arb-verifier/.gitignore b/arb-verifier/.gitignore new file mode 100644 index 00000000..3360da73 --- /dev/null +++ b/arb-verifier/.gitignore @@ -0,0 +1,12 @@ +node_modules +.env +coverage +coverage.json +typechain +typechain-types + +# Hardhat files +cache +artifacts +deployments + diff --git a/arb-verifier/LICENSE b/arb-verifier/LICENSE new file mode 100644 index 00000000..92887e55 --- /dev/null +++ b/arb-verifier/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Nick Johnson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/arb-verifier/README.md b/arb-verifier/README.md new file mode 100644 index 00000000..caa6a4ec --- /dev/null +++ b/arb-verifier/README.md @@ -0,0 +1,31 @@ +# @ensdomains/op-verifier + +A complete Solidity library that facilitates sending CCIP-Read requests for Optimism state, and verifying the responses. + +For a detailed readme and usage instructions, see the [monorepo readme](https://github.com/ensdomains/evmgateway/tree/main). + +## Testing + +Start up a devnet by following Optimism's instructions [here](https://community.optimism.io/docs/developers/build/dev-node/#do-i-need-this). + +Then, deploy the L2 contract: + +``` +bun run hardhat deploy --network opDevnetL2 +``` + +Followed by the L1 contract: + +``` +bun run hardhat deploy --network opDevnetL1 +``` + +The L1 contracts contain a reference to the L2 contract, and so will require redeploying if the L2 contract changes. + +Finally, run the tests: + +``` +hardhat test --network opDevnetL1 +``` + +The tests will require small modifications to work on public testnets; specifically, contract addresses are currently fetched from `http://localhost:8080/addresses.json`; this will need to be made conditional on the network being used. diff --git a/arb-verifier/contracts/OPVerifier.sol b/arb-verifier/contracts/OPVerifier.sol new file mode 100644 index 00000000..c0fab2db --- /dev/null +++ b/arb-verifier/contracts/OPVerifier.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { IEVMVerifier } from "@ensdomains/evm-verifier/contracts/IEVMVerifier.sol"; +import { RLPReader } from "@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol"; +import { StateProof, EVMProofHelper } from "@ensdomains/evm-verifier/contracts/EVMProofHelper.sol"; +import { Types } from "@eth-optimism/contracts-bedrock/src/libraries/Types.sol"; +import { Hashing } from "@eth-optimism/contracts-bedrock/src/libraries/Hashing.sol"; + +struct OPWitnessData { + uint256 l2OutputIndex; + Types.OutputRootProof outputRootProof; +} + +interface IL2OutputOracle { + function getL2Output(uint256 _l2OutputIndex) external view returns (Types.OutputProposal memory); +} + +contract OPVerifier is IEVMVerifier { + error OutputRootMismatch(uint256 l2OutputIndex, bytes32 expected, bytes32 actual); + + IL2OutputOracle public opOracle; + string[] _gatewayURLs; + + constructor(string[] memory urls, address outputOracle) { + _gatewayURLs = urls; + opOracle = IL2OutputOracle(outputOracle); + } + + function gatewayURLs() external view returns(string[] memory) { + return _gatewayURLs; + } + + function getStorageValues(address target, bytes32[] memory commands, bytes[] memory constants, bytes memory proof) external view returns(bytes[] memory values) { + (OPWitnessData memory opData, StateProof memory stateProof) = abi.decode(proof, (OPWitnessData, StateProof)); + Types.OutputProposal memory l2out = opOracle.getL2Output(opData.l2OutputIndex); + bytes32 expectedRoot = Hashing.hashOutputRootProof(opData.outputRootProof); + if(l2out.outputRoot != expectedRoot) { + revert OutputRootMismatch(opData.l2OutputIndex, expectedRoot, l2out.outputRoot); + } + return EVMProofHelper.getStorageValues(target, commands, constants, opData.outputRootProof.stateRoot, stateProof); + } +} diff --git a/arb-verifier/contracts/test/TestL1.sol b/arb-verifier/contracts/test/TestL1.sol new file mode 100644 index 00000000..2581aa70 --- /dev/null +++ b/arb-verifier/contracts/test/TestL1.sol @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { EVMFetcher } from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; +import { EVMFetchTarget } from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; +import { IEVMVerifier } from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; + +contract TestL1 is EVMFetchTarget { + using EVMFetcher for EVMFetcher.EVMFetchRequest; + + IEVMVerifier verifier; // Slot 0 + address target; + + constructor(IEVMVerifier _verifier, address _target) { + verifier = _verifier; + target = _target; + } + + function getLatest() public view returns(uint256) { + EVMFetcher.newFetchRequest(verifier, target) + .getStatic(0) + .fetch(this.getLatestCallback.selector, ""); + } + + function getLatestCallback(bytes[] memory values, bytes memory) public pure returns(uint256) { + return abi.decode(values[0], (uint256)); + } + + function getName() public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) + .getDynamic(1) + .fetch(this.getNameCallback.selector, ""); + } + + function getNameCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { + return string(values[0]); + } + + function getHighscorer(uint256 idx) public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) + .getDynamic(3) + .element(idx) + .fetch(this.getHighscorerCallback.selector, ""); + } + + function getHighscorerCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { + return string(values[0]); + } + + function getLatestHighscore() public view returns(uint256) { + EVMFetcher.newFetchRequest(verifier, target) + .getStatic(0) + .getStatic(2) + .ref(0) + .fetch(this.getLatestHighscoreCallback.selector, ""); + } + + function getLatestHighscoreCallback(bytes[] memory values, bytes memory) public pure returns(uint256) { + return abi.decode(values[1], (uint256)); + } + + function getLatestHighscorer() public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) + .getStatic(0) + .getDynamic(3) + .ref(0) + .fetch(this.getLatestHighscorerCallback.selector, ""); + } + + function getLatestHighscorerCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { + return string(values[1]); + } + + function getNickname(string memory _name) public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) + .getDynamic(4) + .element(_name) + .fetch(this.getNicknameCallback.selector, ""); + } + + function getNicknameCallback(bytes[] memory values, bytes memory) public pure returns (string memory) { + return string(values[0]); + } + + function getPrimaryNickname() public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) + .getDynamic(1) + .getDynamic(4) + .ref(0) + .fetch(this.getPrimaryNicknameCallback.selector, ""); + } + + function getPrimaryNicknameCallback(bytes[] memory values, bytes memory) public pure returns (string memory) { + return string(values[1]); + } + + function getZero() public view returns(uint256) { + EVMFetcher.newFetchRequest(verifier, target) + .getStatic(5) + .fetch(this.getZeroCallback.selector, ""); + } + + function getZeroCallback(bytes[] memory values, bytes memory) public pure returns (uint256) { + return abi.decode(values[0], (uint256)); + } +} diff --git a/arb-verifier/contracts/test/TestL2.sol b/arb-verifier/contracts/test/TestL2.sol new file mode 100644 index 00000000..f5fa3c47 --- /dev/null +++ b/arb-verifier/contracts/test/TestL2.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +contract TestL2 { + uint256 latest; // Slot 0 + string name; // Slot 1 + mapping(uint256=>uint256) highscores; // Slot 2 + mapping(uint256=>string) highscorers; // Slot 3 + mapping(string=>string) realnames; // Slot 4 + uint256 zero; // Slot 5 + + constructor() { + latest = 42; + name = "Satoshi"; + highscores[latest] = 12345; + highscorers[latest] = "Hal Finney"; + highscorers[1] = "Hubert Blaine Wolfeschlegelsteinhausenbergerdorff Sr."; + realnames["Money Skeleton"] = "Vitalik Buterin"; + realnames["Satoshi"] = "Hal Finney"; + } +} \ No newline at end of file diff --git a/arb-verifier/deploy_l1/00_op_verifier.ts b/arb-verifier/deploy_l1/00_op_verifier.ts new file mode 100644 index 00000000..b041f8ba --- /dev/null +++ b/arb-verifier/deploy_l1/00_op_verifier.ts @@ -0,0 +1,33 @@ +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {DeployFunction} from 'hardhat-deploy/types'; +import fs from 'fs'; + +const GATEWAY_URLS = { + 'opDevnetL1':'http://localhost:8080/{sender}/{data}.json', + 'goerli':'https://op-gateway-worker.ens-cf.workers.dev/{sender}/{data}.json', +} + +const L2_OUTPUT_ORACLE_ADDRESSES = { + 'goerli': '0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0' +} + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const {deployments, getNamedAccounts, network} = hre; + const {deploy} = deployments; + const {deployer} = await getNamedAccounts(); + let L2_OUTPUT_ORACLE_ADDRESS, GATEWAY_URL + if(network.name === 'opDevnetL1'){ + const opAddresses = await (await fetch("http://localhost:8080/addresses.json")).json(); + L2_OUTPUT_ORACLE_ADDRESS = opAddresses.L2OutputOracleProxy + }else{ + L2_OUTPUT_ORACLE_ADDRESS = L2_OUTPUT_ORACLE_ADDRESSES[network.name] + } + console.log('OPVerifier', [[GATEWAY_URL], L2_OUTPUT_ORACLE_ADDRESS]) + await deploy('OPVerifier', { + from: deployer, + args: [[GATEWAY_URLS[network.name]], L2_OUTPUT_ORACLE_ADDRESS], + log: true, + }); +}; +export default func; +func.tags = ['OPVerifier']; diff --git a/arb-verifier/deploy_l1/10_testl1.ts b/arb-verifier/deploy_l1/10_testl1.ts new file mode 100644 index 00000000..503ce80c --- /dev/null +++ b/arb-verifier/deploy_l1/10_testl1.ts @@ -0,0 +1,21 @@ +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {DeployFunction} from 'hardhat-deploy/types'; + + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const {deployments, getNamedAccounts} = hre; + const {deploy} = deployments; + + const {deployer} = await getNamedAccounts(); + + const OPVerifier = await deployments.get('OPVerifier'); + const TestL2 = await hre.companionNetworks['l2'].deployments.get('TestL2'); + + await deploy('TestL1', { + from: deployer, + args: [OPVerifier.address, TestL2.address], + log: true, + }); +}; +export default func; +func.tags = ['TestL1']; diff --git a/arb-verifier/deploy_l2/01_testl2 .ts b/arb-verifier/deploy_l2/01_testl2 .ts new file mode 100644 index 00000000..b7cf1f60 --- /dev/null +++ b/arb-verifier/deploy_l2/01_testl2 .ts @@ -0,0 +1,18 @@ +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { DeployFunction } from 'hardhat-deploy/types'; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + console.log("start dep") + const { deployments, getNamedAccounts } = hre; + const { deploy } = deployments; + + const { deployer } = await getNamedAccounts(); + + await deploy('TestL2', { + from: deployer, + args: [], + log: true, + }); +}; +export default func; +func.tags = ['TestL2']; diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts new file mode 100644 index 00000000..0a9e2aa0 --- /dev/null +++ b/arb-verifier/hardhat.config.ts @@ -0,0 +1,66 @@ +import '@nomicfoundation/hardhat-toolbox'; +import 'hardhat-deploy'; +import 'hardhat-deploy-ethers'; +import { HardhatUserConfig } from 'hardhat/config'; +import 'ethers' +const DEPLOYER_PRIVATE_KEY = process.env.DEPLOYER_PRIVATE_KEY || "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; +const L1_PROVIDER_URL = process.env.L1_PROVIDER_URL || ''; +const L1_ETHERSCAN_API_KEY = process.env.L1_ETHERSCAN_API_KEY; +const L2_ETHERSCAN_API_KEY = process.env.L2_ETHERSCAN_API_KEY; + +const config: HardhatUserConfig = { + solidity: '0.8.19', + networks: { + opDevnetL1: { + url: "http://localhost:8545/", + accounts: [ + '0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659', + ], + deploy: ["deploy_l1/"], + companionNetworks: { + l2: "opDevnetL2", + }, + }, + opDevnetL2: { + url: "http://localhost:8547/", + accounts: [ + '0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659', + ], + deploy: ["deploy_l2/"], + }, + goerli: { + url: L1_PROVIDER_URL, + accounts: [DEPLOYER_PRIVATE_KEY], + deploy: ["deploy_l1/"], + companionNetworks: { + l2: "optimismGoerli", + }, + }, + arbitrumGoerli: { + url: "https://rpc.goerli.arbitrum.gateway.fm", + accounts: [DEPLOYER_PRIVATE_KEY], + deploy: ["deploy_l2/"], + }, + }, + etherscan: { + apiKey: { + goerli: L1_ETHERSCAN_API_KEY, + optimismGoerli: L2_ETHERSCAN_API_KEY + }, + customChains: [ + { + network: "arbitrumGoerli", + chainId: 420, + urls: { + apiURL: "https://api-goerli.arbiscan.io/api", + browserURL: "https://api-goerli.arbiscan.io.io" + }, + }, + ], + }, + namedAccounts: { + 'deployer': 0, + } +}; + +export default config; diff --git a/arb-verifier/test/ArbProofService.ts b/arb-verifier/test/ArbProofService.ts index 6cbd2870..d0ea45fb 100644 --- a/arb-verifier/test/ArbProofService.ts +++ b/arb-verifier/test/ArbProofService.ts @@ -62,6 +62,8 @@ export class ArbProofService implements IProofService { ): Promise { const proof = await this.helper.getProofs(block.number, address, slots); + console.log("target block", block.number) + console.log(proof) return AbiCoder.defaultAbiCoder().encode( [ 'tuple(tuple(bytes32 version, bytes32 stateRoot, bytes32 latestBlockhash) outputRootProof)', diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts index 88175e47..a4a43707 100644 --- a/arb-verifier/test/arbPlayground.ts +++ b/arb-verifier/test/arbPlayground.ts @@ -1,19 +1,25 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable prettier/prettier */ +import { EVMProofHelper } from "@ensdomains/evm-gateway" import { Contract, ethers } from "ethers" - +import { ArbProofService } from "./ArbProofService" + +const test1Contract = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" + +const rpcMainnet = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" +const rpcArbitrum = "https://arb-goerli.g.alchemy.com/v2/k2Vp4opdLW3ueLYaTPndSFtx4m7T3s71" +const outboxGoerli = "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049" +const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) +const l2Provider = new ethers.JsonRpcProvider(rpcArbitrum, { + chainId: 421613, + name: "arbi goelri" +}) export const arbPlayground = async () => { console.log("go") - const rpc = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" - const outboxGoerli = "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049" - - const validatorWallet = "0xAa01D5570E932a13eF9a06677eaf97d56a33393f" - //const eventTopic = "0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748" - const l1Provider = new ethers.JsonRpcProvider(rpc) + const eventTopic = "0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748" const latestBlocknr = await l1Provider.getBlockNumber() - const latestBlock = await l1Provider.getBlock(latestBlocknr) console.log({ @@ -31,10 +37,8 @@ export const arbPlayground = async () => { const filter = { fromBlock: curerntB - 1000, toBlock: curerntB, - address: "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049", - topics: [ - '0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748', - ] + address: outboxGoerli, + topics: [eventTopic] }; const iface = new ethers.Interface(abi) @@ -47,23 +51,52 @@ export const arbPlayground = async () => { const e = iface.parseLog({ topics: [...latestLog.topics], data: latestLog.data - - }) const [outputRoot, l2BlockHash] = e.args console.log(outputRoot, l2BlockHash) + const l2Block = await l2Provider.getBlock(l2BlockHash) + + const targetBlocknr = l2Block.number + const proofHelper = new EVMProofHelper(l2Provider) + const proofs = await proofHelper.getProofs(targetBlocknr, test1Contract, [0n, 1n]) + console.log(proofs) +} +const runProofService = async () => { + const s = new ArbProofService( + l1Provider, + l2Provider, + outboxGoerli + ); + const getBlock = await s.getProvableBlock() + const proofs = await s.getProofs(getBlock, test1Contract, [0n, 1n]) + + console.log(proofs) + +} + +const readFromContract = async () => { + + const abi = [ + "function latest() view returns (uint256)", + "function name() view returns (string memory)", + ] + const c = new Contract(test1Contract, abi, l2Provider) + const latest = await c.latest() + console.log(latest.toString()) } +//arbPlayground() +//readFromContract() +runProofService() -arbPlayground() \ No newline at end of file diff --git a/arb-verifier/test/testOPVerifier.ts b/arb-verifier/test/testOPVerifier.ts new file mode 100644 index 00000000..cdedd4b4 --- /dev/null +++ b/arb-verifier/test/testOPVerifier.ts @@ -0,0 +1,138 @@ +import { Server } from '@chainlink/ccip-read-server'; +import { makeOPGateway } from '@ensdomains/op-gateway'; +import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider'; +import type { HardhatEthersHelpers } from '@nomicfoundation/hardhat-ethers/types'; +import { expect } from 'chai'; +import { + Contract, + FetchRequest, + Provider, + Signer, + ethers as ethersT +} from 'ethers'; +import express from 'express'; +import hre, { ethers } from 'hardhat'; +import { EthereumProvider } from 'hardhat/types'; +import request from 'supertest'; + +type ethersObj = typeof ethersT & + Omit & { + provider: Omit & { + _hardhatProvider: EthereumProvider; + }; + }; + +declare module 'hardhat/types/runtime' { + const ethers: ethersObj; + interface HardhatRuntimeEnvironment { + ethers: ethersObj; + } +} + +describe('OPVerifier', () => { + let provider: Provider; + let signer: Signer; + let gateway: express.Application; + let target: Contract; + + before(async () => { + // Hack to get a 'real' ethers provider from hardhat. The default `HardhatProvider` + // doesn't support CCIP-read. + provider = new ethers.BrowserProvider(hre.network.provider); + signer = await provider.getSigner(0); + + const opAddresses = await (await fetch("http://localhost:8080/addresses.json")).json(); + + + + const gateway = await makeOPGateway( + (hre.network.config as any).url, + (hre.config.networks[hre.network.companionNetworks.l2] as any).url, + opAddresses.L2OutputOracleProxy, + 5, + ); + const server = new Server() + gateway.add(server) + const app = server.makeApp('/') + + + // Replace ethers' fetch function with one that calls the gateway directly. + const getUrl = FetchRequest.createGetUrlFunc(); + ethers.FetchRequest.registerGetUrl(async (req: FetchRequest) => { + if(req.url != "test:") return getUrl(req); + + const r = request(app).post('/'); + if (req.hasBody()) { + r.set('Content-Type', 'application/json').send( + ethers.toUtf8String(req.body) + ); + } + const response = await r; + return { + statusCode: response.statusCode, + statusMessage: response.ok ? 'OK' : response.statusCode.toString(), + body: ethers.toUtf8Bytes(JSON.stringify(response.body)), + headers: { + 'Content-Type': 'application/json', + }, + }; + }); + + const targetDeployment = await hre.deployments.get('TestL1'); + target = await ethers.getContractAt('TestL1', targetDeployment.address, signer); + }) + + it('simple proofs for fixed values', async () => { + const result = await target.getLatest({ enableCcipRead: true }); + expect(Number(result)).to.equal(42); + }); + + it('simple proofs for dynamic values', async () => { + const result = await target.getName({ enableCcipRead: true }); + expect(result).to.equal('Satoshi'); + }); + + it('nested proofs for dynamic values', async () => { + const result = await target.getHighscorer(42, { enableCcipRead: true }); + expect(result).to.equal('Hal Finney'); + }); + + it('nested proofs for long dynamic values', async () => { + const result = await target.getHighscorer(1, { enableCcipRead: true }); + expect(result).to.equal( + 'Hubert Blaine Wolfeschlegelsteinhausenbergerdorff Sr.' + ); + }); + + it('nested proofs with lookbehind', async () => { + const result = await target.getLatestHighscore({ enableCcipRead: true }); + expect(Number(result)).to.equal(12345); + }); + + it('nested proofs with lookbehind for dynamic values', async () => { + const result = await target.getLatestHighscorer({ enableCcipRead: true }); + expect(result).to.equal('Hal Finney'); + }); + + it('mappings with variable-length keys', async () => { + const result = await target.getNickname('Money Skeleton', { + enableCcipRead: true, + }); + expect(result).to.equal('Vitalik Buterin'); + }); + + it('nested proofs of mappings with variable-length keys', async () => { + const result = await target.getPrimaryNickname({ enableCcipRead: true }); + expect(result).to.equal('Hal Finney'); + }); + + it('treats uninitialized storage elements as zeroes', async () => { + const result = await target.getZero({ enableCcipRead: true }); + expect(Number(result)).to.equal(0); + }); + + it('treats uninitialized dynamic values as empty strings', async () => { + const result = await target.getNickname('Santa', { enableCcipRead: true }); + expect(result).to.equal(""); + }) +}); diff --git a/arb-verifier/tsconfig.json b/arb-verifier/tsconfig.json new file mode 100644 index 00000000..01af39d9 --- /dev/null +++ b/arb-verifier/tsconfig.json @@ -0,0 +1,14 @@ +{ + //"extends": "../tsconfig.json", + "include": ["./scripts", "./test"], + "files": ["hardhat.config.ts"], + "compilerOptions": { + "esModuleInterop": true, + "verbatimModuleSyntax": false, + "allowSyntheticDefaultImports": true, + "target": "ES2020", + "module": "CommonJS", + "moduleResolution": "Node", + "skipLibCheck": true + } +} diff --git a/bun.lockb b/bun.lockb index 2dfecba756a2632611a32902141531382d67fca4..ff614b69b9403945312fcf4c6d5debfcd9e9cee7 100755 GIT binary patch delta 117460 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ª=>VSI4VR~#eNL2 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٪j#E@nE#^PszT6I-a>E%Wl;gM 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 A(f|Me diff --git a/crosschain-resolver/test/testResolver.ts b/crosschain-resolver/test/testResolver.ts index a3690431..8266cd91 100644 --- a/crosschain-resolver/test/testResolver.ts +++ b/crosschain-resolver/test/testResolver.ts @@ -62,9 +62,9 @@ describe('Crosschain Resolver', () => { const server = new Server() gateway.add(server) const app = server.makeApp('/') - const getUrl = FetchRequest.createGetUrlFunc(); + const getUrl = FetchRequest.createGetUrlFunc(); ethers.FetchRequest.registerGetUrl(async (req: FetchRequest) => { - if(req.url != "test:") return getUrl(req); + if (req.url != "test:") return getUrl(req); const r = request(app).post('/'); if (req.hasBody()) { @@ -82,24 +82,24 @@ describe('Crosschain Resolver', () => { }, }; }); - const ensFactory = await ethers.getContractFactory('ENSRegistry',signer); + const ensFactory = await ethers.getContractFactory('ENSRegistry', signer); ens = await ensFactory.deploy(); const ensAddress = await ens.getAddress() - const baseRegistrarFactory = await ethers.getContractFactory('BaseRegistrarImplementation',signer); - baseRegistrar = await baseRegistrarFactory.deploy(ensAddress,ethers.namehash('eth')) + const baseRegistrarFactory = await ethers.getContractFactory('BaseRegistrarImplementation', signer); + baseRegistrar = await baseRegistrarFactory.deploy(ensAddress, ethers.namehash('eth')) const baseRegistrarAddress = await baseRegistrar.getAddress() await baseRegistrar.addController(signerAddress) - const metaDataserviceFactory = await ethers.getContractFactory('StaticMetadataService',signer); + const metaDataserviceFactory = await ethers.getContractFactory('StaticMetadataService', signer); const metaDataservice = await metaDataserviceFactory.deploy('https://ens.domains') const metaDataserviceAddress = await metaDataservice.getAddress() - const reverseRegistrarFactory = await ethers.getContractFactory('ReverseRegistrar',signer); + const reverseRegistrarFactory = await ethers.getContractFactory('ReverseRegistrar', signer); const reverseRegistrar = await reverseRegistrarFactory.deploy(ensAddress) const reverseRegistrarAddress = await reverseRegistrar.getAddress() await ens.setSubnodeOwner(EMPTY_BYTES32, labelhash('reverse'), signerAddress) - await ens.setSubnodeOwner(ethers.namehash('reverse'),labelhash('addr'), reverseRegistrarAddress) + await ens.setSubnodeOwner(ethers.namehash('reverse'), labelhash('addr'), reverseRegistrarAddress) await ens.setSubnodeOwner(EMPTY_BYTES32, labelhash('eth'), baseRegistrarAddress) await baseRegistrar.register(labelhash('foo'), signerAddress, 100000000) - const publicResolverFactory = await ethers.getContractFactory('PublicResolver',signer); + const publicResolverFactory = await ethers.getContractFactory('PublicResolver', signer); const publicResolver = await publicResolverFactory.deploy( ensAddress, '0x0000000000000000000000000000000000000000', @@ -109,7 +109,7 @@ describe('Crosschain Resolver', () => { const publicResolverAddress = await publicResolver.getAddress() await reverseRegistrar.setDefaultResolver(publicResolverAddress) - const wrapperFactory = await ethers.getContractFactory('NameWrapper',signer); + const wrapperFactory = await ethers.getContractFactory('NameWrapper', signer); await provider.send('evm_mine', []); wrapper = await wrapperFactory.deploy( ensAddress, @@ -149,27 +149,27 @@ describe('Crosschain Resolver', () => { l2contract = impl.attach(resolverAddress) }); - it("should not allow non owner to set target", async() => { + it("should not allow non owner to set target", async () => { const incorrectnode = ethers.namehash('notowned.eth') const incorrectname = encodeName('notowned.eth') // For some reason expect().to.be.reverted isn't working // Throwing Error: missing revert data (action="estimateGas"... - try{ + try { await target.setTarget(incorrectnode, resolverAddress) - }catch(e){ + } catch (e) { } const result = await target.getTarget(incorrectname, 0) expect(result[1]).to.equal(EMPTY_ADDRESS); }) - it("should allow owner to set target", async() => { + it("should allow owner to set target", async () => { await target.setTarget(node, signerAddress) const result = await target.getTarget(encodeName(name), 0) expect(result[1]).to.equal(signerAddress); }) - it("subname should get target of its parent", async() => { + it("subname should get target of its parent", async () => { const subname = 'd.foo.eth' const encodedsubname = encodeName(subname) const subnode = ethers.namehash(subname) @@ -179,7 +179,7 @@ describe('Crosschain Resolver', () => { expect(result[1]).to.equal(signerAddress); }) - it("should allow wrapped owner to set target", async() => { + it("should allow wrapped owner to set target", async () => { const label = 'wrapped' const tokenId = labelhash(label) await baseRegistrar.setApprovalForAll(wrapperAddress, true) @@ -197,7 +197,7 @@ describe('Crosschain Resolver', () => { expect(result[1]).to.equal(resolverAddress); }) - it("should resolve empty ETH Address", async() => { + it("should resolve empty ETH Address", async () => { await target.setTarget(node, resolverAddress) const addr = '0x0000000000000000000000000000000000000000' await l2contract.clearRecords(node) @@ -212,7 +212,7 @@ describe('Crosschain Resolver', () => { expect(decoded[0]).to.equal(addr); }) - it("should resolve ETH Address", async() => { + it("should resolve ETH Address", async () => { await target.setTarget(node, resolverAddress) const addr = '0x5A384227B65FA093DEC03Ec34e111Db80A040615' await l2contract.clearRecords(node) @@ -220,7 +220,7 @@ describe('Crosschain Resolver', () => { const result = await l2contract['addr(bytes32)'](node) expect(ethers.getAddress(result)).to.equal(addr); await provider.send("evm_mine", []); - + const i = new ethers.Interface(["function addr(bytes32) returns(address)"]) const calldata = i.encodeFunctionData("addr", [node]) const result2 = await target.resolve(encodedname, calldata, { enableCcipRead: true }) @@ -228,7 +228,7 @@ describe('Crosschain Resolver', () => { expect(decoded[0]).to.equal(addr); }) - it("should resolve ETH Address for subname", async() => { + it("should resolve ETH Address for subname", async () => { await target.setTarget(node, resolverAddress) const addr = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' await l2contract.clearRecords(node) @@ -241,13 +241,13 @@ describe('Crosschain Resolver', () => { await provider.send("evm_mine", []); const i = new ethers.Interface(["function addr(bytes32) returns(address)"]) const calldata = i.encodeFunctionData("addr", [subnode]) - + const result2 = await target.resolve(encodedsubname, calldata, { enableCcipRead: true }) const decoded = i.decodeFunctionResult("addr", result2) expect(decoded[0]).to.equal(addr); }) - it("should resolve non ETH Address", async() => { + it("should resolve non ETH Address", async () => { await target.setTarget(node, resolverAddress) const addr = '0x76a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac' const coinType = 0 // BTC @@ -262,7 +262,7 @@ describe('Crosschain Resolver', () => { expect(decoded[0]).to.equal(addr); }) - it("should resolve text record", async() => { + it("should resolve text record", async () => { await target.setTarget(node, resolverAddress) const key = 'name' const value = 'nick.eth' @@ -277,7 +277,7 @@ describe('Crosschain Resolver', () => { expect(decoded[0]).to.equal(value); }) - it("should test contenthash", async() => { + it("should test contenthash", async () => { await target.setTarget(node, resolverAddress) const contenthash = '0xe3010170122029f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f' await l2contract.clearRecords(node) diff --git a/l1-verifier/contracts/test/TestL1.sol b/l1-verifier/contracts/test/TestL1.sol index 347d8bc6..337ae6f1 100644 --- a/l1-verifier/contracts/test/TestL1.sol +++ b/l1-verifier/contracts/test/TestL1.sol @@ -1,118 +1,159 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; -import { EVMFetcher } from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; -import { EVMFetchTarget } from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; -import { IEVMVerifier } from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; +import {EVMFetcher} from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; +import {EVMFetchTarget} from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; +import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; + +import 'hardhat/console.sol'; contract TestL1 is EVMFetchTarget { using EVMFetcher for EVMFetcher.EVMFetchRequest; - IEVMVerifier verifier; // Slot 0 + IEVMVerifier verifier; // Slot 0 address target; constructor(IEVMVerifier _verifier, address _target) { + console.log('TEST'); verifier = _verifier; target = _target; } - function getLatest() public view returns(uint256) { - EVMFetcher.newFetchRequest(verifier, target) - .getStatic(0) - .fetch(this.getLatestCallback.selector, ""); + function getLatest() public view returns (uint256) { + EVMFetcher.newFetchRequest(verifier, target).getStatic(0).fetch( + this.getLatestCallback.selector, + '' + ); } - function getLatestCallback(bytes[] memory values, bytes memory) public pure returns(uint256) { + function getLatestCallback( + bytes[] memory values, + bytes memory + ) public pure returns (uint256) { return abi.decode(values[0], (uint256)); } - function getName() public view returns(string memory) { - EVMFetcher.newFetchRequest(verifier, target) - .getDynamic(1) - .fetch(this.getNameCallback.selector, ""); + function getName() public view returns (string memory) { + EVMFetcher.newFetchRequest(verifier, target).getDynamic(1).fetch( + this.getNameCallback.selector, + '' + ); } - function getNameCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { + function getNameCallback( + bytes[] memory values, + bytes memory + ) public pure returns (string memory) { return string(values[0]); } - function getHighscorer(uint256 idx) public view returns(string memory) { - EVMFetcher.newFetchRequest(verifier, target) + function getHighscorer(uint256 idx) public view returns (string memory) { + EVMFetcher + .newFetchRequest(verifier, target) .getDynamic(3) - .element(idx) - .fetch(this.getHighscorerCallback.selector, ""); + .element(idx) + .fetch(this.getHighscorerCallback.selector, ''); } - function getHighscorerCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { + function getHighscorerCallback( + bytes[] memory values, + bytes memory + ) public pure returns (string memory) { return string(values[0]); } - function getLatestHighscore() public view returns(uint256) { - EVMFetcher.newFetchRequest(verifier, target) + function getLatestHighscore() public view returns (uint256) { + EVMFetcher + .newFetchRequest(verifier, target) .getStatic(0) .getStatic(2) - .ref(0) - .fetch(this.getLatestHighscoreCallback.selector, ""); + .ref(0) + .fetch(this.getLatestHighscoreCallback.selector, ''); } - function getLatestHighscoreCallback(bytes[] memory values, bytes memory) public pure returns(uint256) { + function getLatestHighscoreCallback( + bytes[] memory values, + bytes memory + ) public pure returns (uint256) { return abi.decode(values[1], (uint256)); } - function getLatestHighscorer() public view returns(string memory) { - EVMFetcher.newFetchRequest(verifier, target) + function getLatestHighscorer() public view returns (string memory) { + EVMFetcher + .newFetchRequest(verifier, target) .getStatic(0) .getDynamic(3) - .ref(0) - .fetch(this.getLatestHighscorerCallback.selector, ""); + .ref(0) + .fetch(this.getLatestHighscorerCallback.selector, ''); } - function getLatestHighscorerCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { + function getLatestHighscorerCallback( + bytes[] memory values, + bytes memory + ) public pure returns (string memory) { return string(values[1]); } - function getNickname(string memory _name) public view returns(string memory) { - EVMFetcher.newFetchRequest(verifier, target) + function getNickname( + string memory _name + ) public view returns (string memory) { + EVMFetcher + .newFetchRequest(verifier, target) .getDynamic(4) - .element(_name) - .fetch(this.getNicknameCallback.selector, ""); + .element(_name) + .fetch(this.getNicknameCallback.selector, ''); } - function getNicknameCallback(bytes[] memory values, bytes memory) public pure returns (string memory) { + function getNicknameCallback( + bytes[] memory values, + bytes memory + ) public pure returns (string memory) { return string(values[0]); } - function getPrimaryNickname() public view returns(string memory) { - EVMFetcher.newFetchRequest(verifier, target) + function getPrimaryNickname() public view returns (string memory) { + EVMFetcher + .newFetchRequest(verifier, target) .getDynamic(1) .getDynamic(4) - .ref(0) - .fetch(this.getPrimaryNicknameCallback.selector, ""); + .ref(0) + .fetch(this.getPrimaryNicknameCallback.selector, ''); } - function getPrimaryNicknameCallback(bytes[] memory values, bytes memory) public pure returns (string memory) { + function getPrimaryNicknameCallback( + bytes[] memory values, + bytes memory + ) public pure returns (string memory) { return string(values[1]); } - function getZero() public view returns(uint256) { - EVMFetcher.newFetchRequest(verifier, target) - .getStatic(5) - .fetch(this.getZeroCallback.selector, ""); + function getZero() public view returns (uint256) { + EVMFetcher.newFetchRequest(verifier, target).getStatic(5).fetch( + this.getZeroCallback.selector, + '' + ); } - function getZeroCallback(bytes[] memory values, bytes memory) public pure returns (uint256) { + function getZeroCallback( + bytes[] memory values, + bytes memory + ) public pure returns (uint256) { return abi.decode(values[0], (uint256)); } - function getZeroIndex() public view returns(uint256) { - EVMFetcher.newFetchRequest(verifier, target) + function getZeroIndex() public view returns (uint256) { + EVMFetcher + .newFetchRequest(verifier, target) .getStatic(5) .getStatic(2) - .ref(0) - .fetch(this.getZeroIndexCallback.selector, ""); + .ref(0) + .fetch(this.getZeroIndexCallback.selector, ''); } - function getZeroIndexCallback(bytes[] memory values, bytes memory) public pure returns(uint256) { + function getZeroIndexCallback( + bytes[] memory values, + bytes memory + ) public pure returns (uint256) { return abi.decode(values[1], (uint256)); } } diff --git a/op-verifier/test/testOPVerifier.ts b/op-verifier/test/testOPVerifier.ts index 4c9be367..8c7b0b88 100644 --- a/op-verifier/test/testOPVerifier.ts +++ b/op-verifier/test/testOPVerifier.ts @@ -1,19 +1,17 @@ -import { makeOPGateway } from '@ensdomains/op-gateway'; import { Server } from '@chainlink/ccip-read-server'; +import { makeOPGateway } from '@ensdomains/op-gateway'; import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider'; import type { HardhatEthersHelpers } from '@nomicfoundation/hardhat-ethers/types'; import { expect } from 'chai'; -import hre from 'hardhat'; import { Contract, - Provider, - ethers as ethersT, FetchRequest, + Provider, Signer, - JsonRpcProvider + ethers as ethersT } from 'ethers'; import express from 'express'; -import { ethers } from 'hardhat'; +import hre, { ethers } from 'hardhat'; import { EthereumProvider } from 'hardhat/types'; import request from 'supertest'; From 15b2386cc2acce01b33d6b549e0ae74520b7f8cf Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sat, 18 Nov 2023 01:23:24 +0300 Subject: [PATCH 04/63] add arb-gateway --- arb-gateway/LICENSE | 21 ++++++ arb-gateway/README.md | 56 ++++++++++++++++ arb-gateway/package.json | 67 +++++++++++++++++++ .../src}/ArbProofService.ts | 2 +- arb-gateway/src/index.ts | 19 ++++++ arb-gateway/src/server.ts | 46 +++++++++++++ arb-gateway/src/worker.ts | 37 ++++++++++ arb-gateway/tsconfig.build.json | 10 +++ arb-gateway/tsconfig.json | 4 ++ arb-gateway/wrangler.toml | 13 ++++ arb-verifier/test/arbPlayground.ts | 2 +- arb-verifier/tsconfig.json | 2 +- 12 files changed, 276 insertions(+), 3 deletions(-) create mode 100644 arb-gateway/LICENSE create mode 100644 arb-gateway/README.md create mode 100644 arb-gateway/package.json rename {arb-verifier/test => arb-gateway/src}/ArbProofService.ts (97%) create mode 100644 arb-gateway/src/index.ts create mode 100644 arb-gateway/src/server.ts create mode 100644 arb-gateway/src/worker.ts create mode 100644 arb-gateway/tsconfig.build.json create mode 100644 arb-gateway/tsconfig.json create mode 100644 arb-gateway/wrangler.toml diff --git a/arb-gateway/LICENSE b/arb-gateway/LICENSE new file mode 100644 index 00000000..92887e55 --- /dev/null +++ b/arb-gateway/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Nick Johnson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/arb-gateway/README.md b/arb-gateway/README.md new file mode 100644 index 00000000..941fd60e --- /dev/null +++ b/arb-gateway/README.md @@ -0,0 +1,56 @@ +# @ensdomains/op-gateway + +An instantiation of [evm-gateway](https://github.com/ensdomains/evmgateway/tree/main/evm-gateway) that targets Optimism - that is, it implements a CCIP-Read gateway that generates proofs of contract state on Optimism. + +For a detailed readme and usage instructions, see the [monorepo readme](https://github.com/ensdomains/evmgateway/tree/main). + +## How to use op-gateway locally via cloudflare dev env (aka wrangler) + +``` +npm install -g bun +cd op-gateway +bun install +touch .dev.vars +## set L1_PROVIDER_URL, L2_PROVIDER_URL, L2_OUTPUT_ORACLE, DELAY=5 +yarn dev +``` + +## How to deploy op-gateway to cloudflare + +``` +cd op-gateway +npm install -g wrangler +wrngler login +wrangler secret put L1_PROVIDER_URL +wrangler secret put L2_PROVIDER_URL +wrangler secret put L2_OUTPUT_ORACLE +wrangler secret put DELAY +yarn deploy +``` + +## How to test + +``` +cd ../l1-verifier l1-gateway +PROVIDER_URL=$PROVIDER_URL TARGET_ADDRESS=$TARGET_ADDRESS yarn remote_test +``` + +## Current deployments + +### Goerli + +#### Contracts + +- OPVerifier = [0x0c2746F20C9c97DBf718de10c04943cf408230A3](https://goerli.etherscan.io/address/0x0c2746F20C9c97DBf718de10c04943cf408230A3) + +#### Example contracts + +- TestL1 = [0x5057276e2BD7750Be043595ac6d21dE31e900c3c](https://goerli.etherscan.io/address/0x5057276e2BD7750Be043595ac6d21dE31e900c3c) + +#### Example contracts(OptimismGoerli) + +- TestL2 = [0x0FEcD0Fec173807204c7B31e36384acEeB048b0A](https://goerli-optimism.etherscan.io/address/0x0FEcD0Fec173807204c7B31e36384acEeB048b0A) + +#### Gateway + +- http://op-gateway-worker.ens-cf.workers.dev diff --git a/arb-gateway/package.json b/arb-gateway/package.json new file mode 100644 index 00000000..f98813a0 --- /dev/null +++ b/arb-gateway/package.json @@ -0,0 +1,67 @@ +{ + "name": "@ensdomains/arb-gateway", + "version": "0.1.0", + "author": "Nick Johnson", + "license": "MIT", + "type": "module", + "main": "./_cjs/index.js", + "module": "./_esm/index.js", + "types": "./_types/index.d.ts", + "typings": "./_types/index.d.ts", + "bin": "./_cjs/server.js", + "sideEffects": false, + "files": [ + "_esm", + "_cjs", + "_types", + "src", + "!**/*.tsbuildinfo" + ], + "exports": { + ".": { + "types": "./_types/index.d.ts", + "import": "./_esm/index.js", + "require": "./_cjs/index.js" + }, + "./package.json": "./package.json" + }, + "engines": { + "node": ">=10", + "bun": ">=1.0.4" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + }, + "scripts": { + "start": "bun ./src/server.ts", + "dev": "wrangler dev", + "deploy": "wrangler deploy", + "build:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./_cjs --removeComments --verbatimModuleSyntax false && echo > ./_cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esm": "tsc --project tsconfig.build.json --module es2022 --outDir ./_esm && echo > ./_esm/package.json '{\"type\":\"module\",\"sideEffects\":false}'", + "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./_types --emitDeclarationOnly --declaration --declarationMap", + "build": "echo 'building op-gateway...' && bun run clean && bun run build:cjs && bun run build:esm && bun run build:types", + "prepublishOnly": "bun ../scripts/prepublishOnly.ts", + "lint": "eslint . --ext .ts", + "prepare": "bun run build", + "clean": "rm -fr _cjs _esm _types" + }, + "husky": { + "hooks": { + "pre-commit": "bun run lint" + } + }, + "dependencies": { + "@chainlink/ccip-read-server": "^0.2.1", + "@commander-js/extra-typings": "^11.0.0", + "@ensdomains/evm-gateway": "^0.1.0", + "@ethereumjs/block": "^5.0.0", + "@nomicfoundation/ethereumjs-block": "^5.0.2", + "commander": "^11.0.0", + "ethers": "^6.7.1" + } +} diff --git a/arb-verifier/test/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts similarity index 97% rename from arb-verifier/test/ArbProofService.ts rename to arb-gateway/src/ArbProofService.ts index d0ea45fb..eaf26fd8 100644 --- a/arb-verifier/test/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -1,6 +1,6 @@ /* eslint-disable prettier/prettier */ import { EVMProofHelper, type IProofService } from '@ensdomains/evm-gateway'; -import { AbiCoder, Contract, Filter, Interface, JsonRpcProvider, type AddressLike } from 'ethers'; +import { AbiCoder, Contract, Interface, JsonRpcProvider, type AddressLike, type Filter } from 'ethers'; export interface ArbProvableBlock { stateRoot: string; diff --git a/arb-gateway/src/index.ts b/arb-gateway/src/index.ts new file mode 100644 index 00000000..d564da73 --- /dev/null +++ b/arb-gateway/src/index.ts @@ -0,0 +1,19 @@ +import { EVMGateway } from '@ensdomains/evm-gateway'; +import { JsonRpcProvider } from 'ethers'; +import { ArbProofService, type ArbProvableBlock } from './ArbProofService.js'; + +export type ArbGateway = EVMGateway; + +export async function makeArbGateway( + l1providerUrl: string, + l2providerUrl: string, + l2OutboxAddress: string +): Promise { + const l1Provider = new JsonRpcProvider(l1providerUrl); + const l2Provider = new JsonRpcProvider(l2providerUrl); + return new EVMGateway( + await new ArbProofService(l1Provider, l2Provider, l2OutboxAddress) + ); +} + +export { ArbProofService, type ArbProvableBlock }; diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts new file mode 100644 index 00000000..f08971db --- /dev/null +++ b/arb-gateway/src/server.ts @@ -0,0 +1,46 @@ +import { Server } from '@chainlink/ccip-read-server'; +import { Command } from '@commander-js/extra-typings'; +import { EVMGateway } from '@ensdomains/evm-gateway'; +import { JsonRpcProvider } from 'ethers'; +import { ArbProofService } from './ArbProofService.js'; + +const program = new Command() + .option('-p, --port ', 'port to listen on', '8080') + .option( + '-u, --l1-provider-url ', + 'l1 provider url', + 'http://localhost:8545/' + ) + .option( + '-v, --l2-provider-url ', + 'l2 provider url', + 'http://localhost:9545/' + ) + .option( + '-o --l2-outbox-address

', + 'address for L2 outbox on the L1', + '' + ); + +program.parse(); + +(async () => { + const options = program.opts(); + + const l1Provider = new JsonRpcProvider(options.l1ProviderUrl); + const l2Provider = new JsonRpcProvider(options.l2ProviderUrl); + + const gateway = new EVMGateway( + new ArbProofService(l1Provider, l2Provider, options.l2OutboxAddress) + ); + const server = new Server(); + gateway.add(server); + const app = server.makeApp('/'); + + const port = parseInt(options.port); + if (String(port) !== options.port) throw new Error('Invalid port'); + + app.listen(port, function () { + console.log(`Listening on ${port}`); + }); +})(); diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts new file mode 100644 index 00000000..8b45fead --- /dev/null +++ b/arb-gateway/src/worker.ts @@ -0,0 +1,37 @@ +import { Server } from '@ensdomains/ccip-read-cf-worker'; +import type { Router } from '@ensdomains/evm-gateway'; +interface Env { + L1_PROVIDER_URL: string; + L2_PROVIDER_URL: string; + L2_OUTBOX: string; + DELAY: number; +} +let app: Router; +async function fetch(request: Request, env: Env) { + // Loading libraries dynamically as a temp work around. + // Otherwise, deployment thorws "Error: Script startup exceeded CPU time limit." error + if (!app) { + const ethers = await import('ethers'); + const EVMGateway = (await import('@ensdomains/evm-gateway')).EVMGateway; + const ArbProofService = (await import('./ArbProofService.js')) + .ArbProofService; + // Set PROVIDER_URL under .dev.vars locally. Set the key as secret remotely with `wrangler secret put WORKER_PROVIDER_URL` + const { L1_PROVIDER_URL, L2_PROVIDER_URL, L2_OUTBOX, } = env; + const l1Provider = new ethers.JsonRpcProvider(L1_PROVIDER_URL); + const l2Provider = new ethers.JsonRpcProvider(L2_PROVIDER_URL); + + console.log({ L1_PROVIDER_URL, L2_PROVIDER_URL }); + const gateway = new EVMGateway( + new ArbProofService(l1Provider, l2Provider, L2_OUTBOX) + ); + + const server = new Server(); + gateway.add(server); + app = server.makeApp('/'); + } + return app.handle(request); +} + +export default { + fetch, +}; diff --git a/arb-gateway/tsconfig.build.json b/arb-gateway/tsconfig.build.json new file mode 100644 index 00000000..7208c6cb --- /dev/null +++ b/arb-gateway/tsconfig.build.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.json", + "include": ["./src"], + "exclude": ["src/**/*.test.ts", "src/**/*.bench.ts"], + "compilerOptions": { + "sourceMap": true, + "rootDir": "./src", + "moduleResolution": "Node" + } +} diff --git a/arb-gateway/tsconfig.json b/arb-gateway/tsconfig.json new file mode 100644 index 00000000..3cf966d7 --- /dev/null +++ b/arb-gateway/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../tsconfig.json", + "include": ["src"] +} diff --git a/arb-gateway/wrangler.toml b/arb-gateway/wrangler.toml new file mode 100644 index 00000000..8b2e3b27 --- /dev/null +++ b/arb-gateway/wrangler.toml @@ -0,0 +1,13 @@ +name = "op-gateway-worker" +account_id = "15dcc9085cb794bb4f29d3e8177ac880" +main = "./src/worker.ts" +node_compat = true +compatibility_date = "2023-10-13" + +[dev] +port = 8080 + +[build] +command = "yarn build" + +[vars] diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts index a4a43707..e71db5da 100644 --- a/arb-verifier/test/arbPlayground.ts +++ b/arb-verifier/test/arbPlayground.ts @@ -2,7 +2,7 @@ /* eslint-disable prettier/prettier */ import { EVMProofHelper } from "@ensdomains/evm-gateway" import { Contract, ethers } from "ethers" -import { ArbProofService } from "./ArbProofService" +import { ArbProofService } from "../../arb-gateway/src/ArbProofService" const test1Contract = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" diff --git a/arb-verifier/tsconfig.json b/arb-verifier/tsconfig.json index 01af39d9..06d169db 100644 --- a/arb-verifier/tsconfig.json +++ b/arb-verifier/tsconfig.json @@ -1,6 +1,6 @@ { //"extends": "../tsconfig.json", - "include": ["./scripts", "./test"], + "include": ["./scripts", "./test", "../arb-gateway/src/ArbProofService.ts"], "files": ["hardhat.config.ts"], "compilerOptions": { "esModuleInterop": true, From 7ebb0c95f0266dd4736be511b7a1e51175c35a1c Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sat, 18 Nov 2023 01:23:40 +0300 Subject: [PATCH 05/63] clean up workspace --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index adf65f0a..fc11ef95 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "l1-verifier", "op-verifier", "crosschain-resolver", - "arbi-verifier", - "arbi-gateway" + "arb-verifier", + "arb-gateway" ], "scripts": { "env": "env", From 25b3c0eba55e21994b8e739a4941c7b5c2723f1b Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sat, 18 Nov 2023 13:12:31 +0300 Subject: [PATCH 06/63] fix workspace --- arb-gateway/package.json | 2 +- arb-verifier/package.json | 7 +++---- arb-verifier/test/arbPlayground.ts | 2 +- bun.lockb | Bin 669696 -> 666256 bytes 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/arb-gateway/package.json b/arb-gateway/package.json index f98813a0..bc2d5207 100644 --- a/arb-gateway/package.json +++ b/arb-gateway/package.json @@ -44,7 +44,7 @@ "build:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./_cjs --removeComments --verbatimModuleSyntax false && echo > ./_cjs/package.json '{\"type\":\"commonjs\"}'", "build:esm": "tsc --project tsconfig.build.json --module es2022 --outDir ./_esm && echo > ./_esm/package.json '{\"type\":\"module\",\"sideEffects\":false}'", "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./_types --emitDeclarationOnly --declaration --declarationMap", - "build": "echo 'building op-gateway...' && bun run clean && bun run build:cjs && bun run build:esm && bun run build:types", + "build": "echo 'building arb-gateway...' && bun run clean && bun run build:cjs && bun run build:esm && bun run build:types", "prepublishOnly": "bun ../scripts/prepublishOnly.ts", "lint": "eslint . --ext .ts", "prepare": "bun run build", diff --git a/arb-verifier/package.json b/arb-verifier/package.json index fd97fd12..f5dbaa7a 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -1,5 +1,5 @@ { - "name": "@ensdomains/op-verifier", + "name": "@ensdomains/arb-verifier", "license": "MIT", "version": "0.1.0", "scripts": { @@ -7,11 +7,10 @@ "test": " hardhat test", "clean": "rm -fr artifacts cache node_modules typechain-types", "lint": "exit 0", - "play" : "npx ts-node ./test/arbPlayground.ts" - + "play": "npx ts-node ./test/arbPlayground.ts" }, "devDependencies": { - "@ensdomains/op-gateway": "workspace:*", + "@ensdomains/arb-gateway": "workspace:*", "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", "@nomicfoundation/hardhat-ethers": "^3.0.0", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts index e71db5da..405d1df9 100644 --- a/arb-verifier/test/arbPlayground.ts +++ b/arb-verifier/test/arbPlayground.ts @@ -2,7 +2,7 @@ /* eslint-disable prettier/prettier */ import { EVMProofHelper } from "@ensdomains/evm-gateway" import { Contract, ethers } from "ethers" -import { ArbProofService } from "../../arb-gateway/src/ArbProofService" +import { ArbProofService } from "@ensdomains/arb-gateway" const test1Contract = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" diff --git a/bun.lockb b/bun.lockb index ff614b69b9403945312fcf4c6d5debfcd9e9cee7..5ef050ac170c3c34bdb6dfbbe8c25d62b163bb4a 100755 GIT binary patch delta 83257 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

;##&KAH|$%n2X8hXp5TK zuHX(6thQNTdDW17@ghb)gY`BA&f zP2V5m6gRP-0|;`oMj4Lmn^gn<*v97fQa+A3|Av#K)6?*@s7rQ(9q%?qYG`QfP`JuKcuYOt4afHnD6-7=!=?^y!G zU0C9nW{-fRQO;#%_*vrh%z+J2=j7XTuIfCV0@4{F+t_=LaK!f}iWXJb8NDRR&o6q^;?d19Q=rc%-kW&89YXl^Q*Bh@McLcY)Qp1&? z@#N_cy$h0A;%jV2-Sn?w&ip%7Z$GM}ZM)OIxBnSZdX1-WZ{OEV|2h^~eHXvn31{xb z9%FNIcW{zXRUC~B0g2trWZ&awYhPsV@*>%%la1}zhBaKHJ;RZvMzoNA!sM4kAyV)XSecTES!E1 zm$`?QXFEBhqJFs}?{Me|l75D~5_~oU>gR5ro$U-*_qR}MFLu+vjoF{MiEm?0yL*FS zmNoHWP$t(Crq)Npi$Q(e%@1ZfhfFCPYD?7Va-Y^lX9>4?AawE1aniqIhJi(McEJo- zll4Jaxt|+h5JqD)LXX2S=h+mOi6Q?2iTlvfc0&9H>Gz?kY$uO^vl8A9I@2xuxPQG$9g^CxUJNscg8tI& zYypW?{Tal)LFEtZr#5K`Y(T{YAQ|w8f39*b$aovu$PYnkkIZsn(*5cvI^`|_Nl8Dd zgqMT3zvPj{vu@>2^0=esr&#!+2iSqRg_E=G9d6?1n6q)So|854N)8g29#nfV1<>OV zs5|wsAz^dX`ytg)x0f?Ox~7+0n-u|wb932(C^zQmzr^fQ+{7<2r{H1j3RC6vtO(## zigA#7Z8ZEZkUwF=9jfpeU(@k!<*zYkz?Q&UsV+Pn#Ek>@&kst<*QaDj)c($`JQ{P_ zZq+*3yzY)VXM=|NCFDfvMv!a?@SUSk`z5#Xw^&-eN8E$I4R8iLqH%zkpNKj)fW+XI zSJK4Jst1zcO3gQ??xQ-Sn0Zc=DV6>QjtM8qz;VFe(XE8LbX(9{nbR&vhpGf)J_nM) zL77A}aug)y({M5Ie%lFE%k(<*PPS7_%3PO>I%_~;TLzT{p#~%#2)c!H?8pA@os&Q* zjl%0e96N9x`$cUjrclSnwRc2Y9zYd<#6-2ux)DYq5rfXo;WLmJl=fIX`ffL_9XzfI z&xK*S(#jT6Vl};${Rt#mYt-%fgzg8(V_0%P5*AoAKr2C~`_~$dl>CLD^sNBQ#!z@{P1#^5fWJ<`$$PtFnP0_(9`Vr zyv@sbHbtthxpQCcL_pFfodBml6DT0TXDLV&U}YdOd<2p)(;Z)f9oi>7OCAD}^@xeX zPH_cDuPfQYaraKO6H@|L9|GzwDu&BQjrE_>?e;3`*&JIu>m96T4+xKawpKw7xE2Go z(-Hz-^eQ8E%=s-v%3^!^bLwh@DO`Ov$X^`&2N$~x;s$bmG~8qtgPA%!3!e>Sm6@3x zzJ`?VOZIbKWqmsquD_dclGCN|Xi~ai*iPzfnZ-`p^BP@on(ahs(AjDlmg%)1X8p`; z`*SbR5M^7wkg^WS<`_i0AlPjN$)(tMT2|ym9Si^yZm3t;h^v=Dio^Jehy9k9-q?;E zH*Al-L>K(7sbxN6yoHVJE>0=ggSke-@gC4fU%exDWYv4goTvs59K#;W2)FQw{t*)D z(XtS=emMwHa^yS=Bw7$n7{z5E|6V5i0V&_*!ku0*wsdkyiKk#3?hRIgq;)+){{$p1 z&K{1ZN*BMXCH>o9=Q@zIL7-#Syb6*&guKj4h*+-~wNuC1lVK#jFyn|J_ko6My-TBZ zTQAYv=1k73M1-Gw-LfWnh0X2k@MCYt_)F4xX|GNZeD>O?{fAfC!j47yy{SW08!WDY zk;%)c;8oE`64@Nw_)-hsDSip5EaHvVBu_-;^KGeYmH>-hDD zCxKWPw`be8dWqw3qOT#uJU9^{Z|DbVXn$9ccEbnW)aLd8=Ox&QfeL9uKJ*T@WH#RU zA)8BYb8C$ED@mFoY2W50+Mr-JuM*)b-iLx*ndVisv7`3OUV2+H+j$8@IR9U4_qBrO zNDfu&IQvxvjV7Z&Q+@ShiTf2)sAwtgC45XtH-mH0?W8X9&6U>V6K`sJdw^ZxRklZg z-Je)iu73r)NvF%F>KRP=WHej?8t5NxRFRUn1do4zZ4j#!8>Duh>1c6d&xF1ZB%a9W zQGV3E-K*?KBOgI(P?v?N^XI`PN>CoC9~bDN_1u4F_d8nhHPE@Kyv|>$ z9W^fj8blsbg|nFZL1R)S{{UsD(5SC;ldsq92c_x^_xhTW-sbu^&q9*2C@^D)=UYKT zK*Z(Q(eSSzHch;ra<-S=iDA3@fJ||Do#F#hJR)7(KT@NcCESK6e-=pB17d!-4AjlP zH@VaB{!YSq6*Q1mm}Mo=v_=QLZe8pFk=Q}q(xj$Ycp6N98D(b!sq<1@`w672FcOjO z-1zFr!kX_kkoPuuEGWb&mg55$A&u+;W_kNXIQ7_9{i3;ME`^s}Jc&*Dj*p zz_1eB(?9ebP5WJ%L`p^i`x4))KmGDUUE(prnJ-qY`2B7>1H`j7A5`KZyKq;73?+5Q-22=ISAO1eX zH-P$i8JBS%OX^Hj6sNrG$G??wHh^mL4uH<4B=e7@<_xd02OeJbllGI%0L%ZQAn9G2 zSJHrcBM{SwkTS@t>`CFJKL_jj5%zvhgQUBd0&n z>2}n)RdRqB=!L8ZKrb(0iER9fwrqQucd;u1rTp1h0g_rAuj*^f>#NN&;PrpirG}-I z=RE&h$TxLHzK&-XP}GQBJx+;`6@SrM3ObJ;;;U(SPZU8)q@ivGsMp!IWX0 zU6>UC^Z~GOWw+GqKl%rI8h9n`Dftsnbs{s;$FlwFQuEZA4P$hsuaAMG=ZqmoCCAvB zhbFB1qd+pG{+UN)31}q93$`83doZF?9WQe{1DR&~3zVMT-wcv^btmvHNG!@=xml4q zw(mA-XR;@aPY~RzvUgq_*0~+S%iPt^?lAy|2@k8W= z_18Bs3}clGx|lpY7JeKg*D=P#&L(xWPJg5Bi~~te(T|(Rl^~fm{&n_CUiv^>>)3ky zex!To+3fIOQvS(=Gn-VDf|i$=f#tUYr7MgobC;d4kNhRtKHjT5lUhQKEuo2%gF#;U zAbNVW5K@I49fY3+o#|$*$ad<~*I&P6BK#3``haB2c)&h^UV`Kr+My>~K%y;U_Mx98 zD$pn$Ilh7Zaw(O_9v7r}a-uOGB$cR%w}Zq0G%$t+Kr$zF0qEAyG~ksyNfZHP_)p+( zC*>>UuWmIUS&XQ!IO=q7q+?8QVj$*&{My|k4@RAB1`%i&|L;LE)c!4})2DH&<(VAx zfrfj9FA)|=X+?-*6{>SKVqOvG535!8mQl{&}AaPpqrbg|*y!3Mzgfp7Z zA@|UR?C=aygZ!XgO^Sn`AF`caNJ&)VlKmVgG`00zAomD+{Zi0Hex83G1`^A22gPb? zHPhelZRqcP2ZBTm-M?3Wq?3wvfd+x_Jvvjjxy~Dm&8hrokaVrCm&v(-e*zHx zSW5cKR(cCNIQ_>=^FaOlIQ9ssY|3L8V))^J4|i=TepR?X+ewhp5^~l77)SBOUP&_= z1DX8^yOr}=X$P3jlcM%AFENT>_O4fnaN6*$wk$-9U{SQrWvy*@+T8;}kfY_`D*PL% zp8m4f?byHpOZH_&04CD2V6F5LW2maraoP+AO>?p$DZtcDbB_1Ajb*9qd%RxfKSB=| zfT*0C`8!CBMhpM;-Tu}~KcD(Kx6#q#SgI^qXGR;_{U&jS^Bk;LoH??PDAzVM!rTd+ z3t}^{A=|#jtGs|tKIYXR!bji-xtq6TJH6Z4X8TvdMqoY&?|CTOc|=mG0MBH<1xfc( zkv4K-d(BTV&LuFlUa=Y^UV&CDcKbo2{ZZ`RK^+>8z`b)p>W^|_eHTb-(5I>UO`d-< z;T+#lOV;tn6`U#)HZ0hnHXdjyB@x1hm(dp%DGq96B(;i;gZ?&d$Torg(D%NioS zHKpqND@ErMHT2Ok!Q^s~I0Qpfk`)2S>QvV)nao@To$6=F?Cf}ws(|Zr2shTNyp%Cp z2B|(N^WjC%2)|X?mbW-r!wMm6Y1A1H5{vtB->YFS58w%5d0 zZmWOrYI0E_{Zy=~`Ljq$Y$j3@;GP1BN!9flWoS#7n?-0aNFqE_^{Qxi3FsWH;!ToL zg+CFUhTQ`%!>c0$K>uy8MKI!3lxFktv_ZZsNc9dsno6dH zdwK^aaZfU~r_?&*WC-6JH=Ey+@|nn6B>&sDd-d1eu`WrIAki6w&i8=CZkAW|B7q#Fy_TnJ ztDyuw2Cyf|iC%T&)VNY2sZs)4pOS(AT~ zyj+tr&$O)^O}LkWSwtT=yF&6#$&R<5RWp7VmDgnamv6;gCUf~;AW5nKl0c(ybt1_ zmG(})%(f=@Jncmmfy6qsi-1>?#2q?Z9_S&rW;vkl{x#wNt3fiZ?7-Lnz76W@pGef7 zAVEz|Bu0_ak(Y3>1Qeq@VYWOPei1Yv_3EEf_X<^$Wsy_c;ULrD2czL@LH;33*b>wxZhGSJ3w&7-kgT)*b>a0O&RTfRaF~>g1HOts zrce5NedVCqK5Yi+@s8B~-G7zrH~DXQ_F^x6DGt(p%HJ!S3zFMA?nXG7*ktm!<6umO zCIVB6^DF|1Tk3uBev`*3A`X1~RGoJIvmR$ONK1-m+-wkeIOI(5vG0<>ta}x|-p!N9?E_?x~k8h;Kq-qVZ6C|$AD=pl_wl36Z;NLq%;-LRp z7bEw<$bK<3CBsLgjMN*>oKAcG8b5=SIFtH#6-cL#Opb3r;-K7fEn*;xv;~dAGe9Ps z5O}IVYGbj-*B}X}dRNz}ICU<89ScCZL6E)uBOs1&d1w(iOj0`M$=iiq$Gx`WRjy<( zrW*ZN2b3n8E(9`8-2PhKQ1^NRc^|^k3l1BBc%>M|`Cq(N))z zZ6MJNBhc2bAaP}CI2;WRm@EC>%nNuGq-1^4hhp16s*%j{w0W9GG^F+{keZPR7A^%{ z;MedxDT#fY9*w1one$DLrP*+yAa^rw&s36<+bP?t;#bbxlXnQ`c5;9 znoo|I4}dh>%dF^F5%dF7gf9cJW9D{!6)Dk-0LjUN&;Ygg@e6gz`3*alfMhgSXs)2c zASs!e-jVlV#5Gck(_)d@Tes}PLD~&&XCqgGWFn?Yhd+hkT@9YGpK#UR>h^qtz^IZK zQ=XBnV`}b))P*SX%dE)NMmzs@Zvsfd5qDP@;x3RF!q+4GE~u|RGum8}a(%pGHb{01 z>R+#cWO!K*siE7oK}i{qq(Od62=4|F%!;xd=Q>qL`#TmS_R=GPRUn;NCA9TENc+PL zab&Rqw*O>Z0FtpM&T)FN8YGvc%;fBY(NUHAv=&Pg;e`!31O#zTNyJ!2N)KVg*k74a zwY9Wg8VrWiG6^KA>YA|$BvXhnf-dL<3*Xyk67zq$mQVCQ2P zsgWUIrD%7f8a~addWzOSqB1j&1^XM245Y3G9d6R==mEc^b~#A$QUTmq0VDP%pBKvB z0{IW5!i|=*61s&I+0IZ>#_JfZMF!z$Y;vCl$vVVMJMY$h2NFGSA@2PLu3)6x&2#!k zBms?jEY~lA)Gy?arQyl|Np&MZs=5r)B9K&$fAUy<3rH460&z#8)E~7)S><}VK@$>Q zr+`=#=43k`kdkr6wzB#?NDKL+8SL1%iK+jEoF*P|D1;S%CDDH&oNrX3)u-t;bX ztIi2Ljn#fQsFxN^MkDh<{}qUwZHB=&FzHc)bl=eXHocZfxrBQ%gUDk?2Db9nD*^Jdz@m3e82Z%RP`3?1F zK{7{cZP@G%4T{u;c9(!;z~xoGtO!87Mi+r+LA<)l+lc9RqL}h*A#VVQ-TVr|Z-Dar zJDW@H(kaK0=Ax_!KteCi;2EheK(ayREDSH`eYaYZlR92!m<5vF@%#Pw%TplrZaJqs zBzdxEN7C1rS>&%nYZ|kD!N?4!Ih1Z$>(u z?$Hi0qgcZdAn`$6ke&efcRv36Y(Ig{^7Hr;7RRo`K7baM|3^vqsh_B4@8B(-O=OFi zh`3C_??5_+nat>J_v#>#Vl>-rQtzwdm7GCeUId;)rh)zM z*9A{)yAmXwVdR-(Z-ev(uxek_2|u7C&qIe*(a33_ag?kbvt=-H8*3^)3=}I73a;Ys z7kG&mI7FJa8J|eq+}c%M4XpDStjs3n2eYa0!C-x<;vjf4NaNOFQmL(jlm3uugBP%k z8xIl>@*i78JkUT;?VNhgF#i0Hoc!=Vj#HfLV5Hydf4=7}QvJZ{bM?Z&xPS^ zh?nf{B;`Lb41Yu_%U^V(TU1Tk%e;Z02NEmzi)HvZ5I0r)CeSaWB+zOIx^}B=O$5;y zrb@j>0tYAJ+q1pItJr8Kq{I+>gs4#OQB_K#+c1#kW$xweF_8c4Ao2w%KPsjoQTuH= zCm9s(J1zkE@!4PJmV;QE*wwy8O06lSnpOw%SmysQkmR8U&x8Qd0A^*mcm^b)A!YW+ zuO>gmIK3WIRdwB)4H5;oo*?}QNJF}yuRv0_I%dbm)ujn0s5BjPK6%E~b^`zA(l>0^ zD|Irw0}^M@9o0uh z8ze1gpK3sAR0&p{o(g(MdyyQ2{7K`jsUk?i=zYeKT%K;c=B2;OYcoxs)_`Ejb)g)L zoNnOYgyd}?wUoRIa{wd{BKq&`mi8D*NO9DygMPE!kahIBt zxCy!gq>>U}0Mj%<+aT=^U{6(GCIQxcZ zQ!ch9}S6Jez?G0IEmZ<(*28Q^s$uU8gysl)!{WA4L$gp0Fv4< z9rLsbBojR39g$x}1=YDuFh#Tr; zwzGhgI3qevi}DDm<^Zc-Bb(QX{nw+tjuGbcTk4_>ysC}#3N)T8^Z;)!NM@4bZxFh^ zt@}I8yAmX};U;F>l0+5Ug`$zJg28p|4-&s6J2T3jFY>Oj~uI~jQ;K=uOG<=N}{5b`0&FS=!T+!9H zq`l3nJcJ#1jqvY(a^Yp5n#KPM3>3GTtCc1;wj;;QeP92C+ttWMRJ8(m0&=p_@~^U@F7!x^Bs)Bf6u+F$V)rPifxd>a z5&jt@>#}a0CVZsYr}?Kq_71P+d(>z1ZvI4sH}MC%q3!?mh-me_KiF$BopxkaHnyxt z^_@T18#2Q_zOLUzX?*Kc_q!-`{)yG!&Ix_NtN7mDg`wu*Ydc8qGj9sDaf1KS_w?#U zi$as_@RyzWvw+n{wuh$KoF;{;4_qC(%nm<6`;OS>CLtSbX8EX(#?{Cs)jMAa{hsD6 z-xKODnd!lQn#y0T^#77|8rlW_q3YkcyQ|Mz8fs9-S%HVPqOyfv&a%+;c4qabH-~!r zjn@zUpk>+^ulr4*&c{7PR2I`pl_3HPeXeMRY$Xc2{xx3zdqWZXXmz6%q4(@|w-5@O zQs}lTw6I(_C8sohN=~^o!L!{^m+-H-{EsHy-YuaG-o%>F21K zNedq+r3x=|U1-{dvu_PW!o6IslfK`d=3n#2J)xfVDPG39(5!IUnv{Km|B3e&@6~mo zQTEkdyL)N$DDzAQz$>_lw!ZWV?+p!WcfMSQx^vgnsykz{{QnJ8%igWtdvEAJcB59C zv`j~lG9)qY;f0}4b;k|dtcLq+G3<}k4_Ah!)Cq@o8poL@T2|k&IrMOveR1`94~Od5 zMo;Qk=k5406iRFIj`vqp=r#LtZ^g@@i)Bbh%T=v{|0Ut?!`EV8^^IFY6YAN&Rv+3P zs+Sgi`7h>>I)mFYzpLL|#~qdwI*Xa8a<`iU$3ZrksBI}e1S+KCTBJ8b*U>Q6rm-QOs!`6lni1EF5_`_&X^ZHN6o zQ(HY|Y3Q);2kio%owr^8(5C1g{6W^|y+hxIE_H%GySlJ?%%RZ7HdR*lIviRV3Lhkb z`vw~3>w3daq4FT{Vr}N{{$SPO9@p*rcc^;bzr$~&bBwj{HM@dzoCT0JoNTIcE^+J`iWQaynS8j_D}xxAN>gVbjY%pzw&1+{ZD|U z*Ub(0j44wGyoo6*pB;unSPvR*CqS+X^IdMZ=S(@#V1;r?YnLfl4|26B_`E3?fxE+S zFTl|g`Rk(AorZfGP84C9S!)gVo~f?^+`WeTz?5qUx504x{BrEdq|yqJxU7lsofb~4O-`(vI|l&$qnMRJVEZ5Lse{xoAH#KmJFQ`opYp-eWOP{atiGn8ZMZIQ zQNyJft}9%Y;p!MJ9j>3@LWb)Gx5Kzc*l?%7?SvEmteb?C{8RZpYYIl-Br}8WF2gl} zLvh&)S;Q!d?Houq91bZu4CPxT2|gp>WITuQ-DSpTYlE};_P-cX@<;GZkdQDi-f-uU{?7F7QaEw&k$g)e!Dq6ma1`lM z!%Z>QvgNX7z=^@8!by+Ww^_3cR~V*!X?QH(x#r>`Q=x3ccSzUy6dR7cvDL+AP{44U zJX^g@>??(n`Yz(z-dtO5%CXO~+EY%}q8Wx8C;dMbvIXQ!LvkBrHGz|$I?HgEkZxwU z*@ol3$10I7@tI?|%Se|RZm!`jmwY%0$ny+0f%H$LTZ{eY8}bU$3sL`Au#i0=T3& zoW${a4JitV!wGkv;VMW^=3

*2&Q3;E{2Nyy%4xJ9H-gp;tl$y|FC>2x^x+;6z6 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 Date: Sat, 18 Nov 2023 16:00:22 +0300 Subject: [PATCH 07/63] stash outbox --- arb-gateway/src/ArbProofService.ts | 24 ++-- arb-verifier/contracts/ArbVerifier.sol | 52 ++++++++ arb-verifier/contracts/OPVerifier.sol | 59 ++++++--- arb-verifier/contracts/test/MockOutbox.sol | 7 + arb-verifier/contracts/test/MockTestL1.sol | 91 +++++++++++++ .../{testOPVerifier.ts => testArbVerifier.ts} | 13 +- arb-verifier/test/testMockVerifier.ts | 45 +++++++ evm-verifier/contracts/MerkleTrie.sol | 125 ++++++++++++------ 8 files changed, 343 insertions(+), 73 deletions(-) create mode 100644 arb-verifier/contracts/ArbVerifier.sol create mode 100644 arb-verifier/contracts/test/MockOutbox.sol create mode 100644 arb-verifier/contracts/test/MockTestL1.sol rename arb-verifier/test/{testOPVerifier.ts => testArbVerifier.ts} (93%) create mode 100644 arb-verifier/test/testMockVerifier.ts diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index eaf26fd8..b77cb732 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -62,22 +62,28 @@ export class ArbProofService implements IProofService { ): Promise { const proof = await this.helper.getProofs(block.number, address, slots); - console.log("target block", block.number) + console.log(block) + console.log(proof) + const rpcBlock = await this.l2Provider.send( + 'eth_getBlockByNumber', + ['0x' + block.number.toString(16), false] + ); + + console.log(rpcBlock) + return AbiCoder.defaultAbiCoder().encode( [ - 'tuple(tuple(bytes32 version, bytes32 stateRoot, bytes32 latestBlockhash) outputRootProof)', + 'tuple(bytes32 version, bytes32 stateRoot, bytes32 latestBlockhash)', 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', ], [ { - blockNo: block.number, - outputRootProof: { - version: - '0x0000000000000000000000000000000000000000000000000000000000000000', - stateRoot: block.stateRoot, - latestBlockhash: block.hash, - }, + version: + '0x0000000000000000000000000000000000000000000000000000000000000000', + stateRoot: rpcBlock.stateRoot, + latestBlockhash: block.hash, + }, proof, ] diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol new file mode 100644 index 00000000..14aef8fa --- /dev/null +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -0,0 +1,52 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; +import {StateProof, EVMProofHelper} from '@ensdomains/evm-verifier/contracts/EVMProofHelper.sol'; +import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; + +import 'hardhat/console.sol'; +struct ArbWitnessData { + bytes32 version; + bytes32 stateRoot; + bytes32 latestBlockhash; +} + +interface IOutbox { + function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash +} + +contract ArbVerifier is IEVMVerifier { + //Todo replace with IFace + IOutbox public immutable outbox; + string[] _gatewayURLs; + + constructor(IOutbox _outboxAddress, string[] memory _urls) { + outbox = _outboxAddress; + _gatewayURLs = _urls; + } + + function gatewayURLs() external view returns (string[] memory) { + return _gatewayURLs; + } + + function getStorageValues( + address target, + bytes32[] memory commands, + bytes[] memory constants, + bytes memory proof + ) external view returns (bytes[] memory values) { + (ArbWitnessData memory opData, StateProof memory stateProof) = abi + .decode(proof, (ArbWitnessData, StateProof)); + + console.log('hello'); + console.logBytes32(opData.stateRoot); + + return + EVMProofHelper.getStorageValues( + target, + commands, + constants, + opData.stateRoot, + stateProof + ); + } +} diff --git a/arb-verifier/contracts/OPVerifier.sol b/arb-verifier/contracts/OPVerifier.sol index c0fab2db..7961f7e7 100644 --- a/arb-verifier/contracts/OPVerifier.sol +++ b/arb-verifier/contracts/OPVerifier.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; -import { IEVMVerifier } from "@ensdomains/evm-verifier/contracts/IEVMVerifier.sol"; -import { RLPReader } from "@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol"; -import { StateProof, EVMProofHelper } from "@ensdomains/evm-verifier/contracts/EVMProofHelper.sol"; -import { Types } from "@eth-optimism/contracts-bedrock/src/libraries/Types.sol"; -import { Hashing } from "@eth-optimism/contracts-bedrock/src/libraries/Hashing.sol"; +import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; +import {RLPReader} from '@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol'; +import {StateProof, EVMProofHelper} from '@ensdomains/evm-verifier/contracts/EVMProofHelper.sol'; +import {Types} from '@eth-optimism/contracts-bedrock/src/libraries/Types.sol'; +import {Hashing} from '@eth-optimism/contracts-bedrock/src/libraries/Hashing.sol'; struct OPWitnessData { uint256 l2OutputIndex; @@ -13,11 +13,17 @@ struct OPWitnessData { } interface IL2OutputOracle { - function getL2Output(uint256 _l2OutputIndex) external view returns (Types.OutputProposal memory); + function getL2Output( + uint256 _l2OutputIndex + ) external view returns (Types.OutputProposal memory); } contract OPVerifier is IEVMVerifier { - error OutputRootMismatch(uint256 l2OutputIndex, bytes32 expected, bytes32 actual); + error OutputRootMismatch( + uint256 l2OutputIndex, + bytes32 expected, + bytes32 actual + ); IL2OutputOracle public opOracle; string[] _gatewayURLs; @@ -27,17 +33,40 @@ contract OPVerifier is IEVMVerifier { opOracle = IL2OutputOracle(outputOracle); } - function gatewayURLs() external view returns(string[] memory) { + function gatewayURLs() external view returns (string[] memory) { return _gatewayURLs; } - function getStorageValues(address target, bytes32[] memory commands, bytes[] memory constants, bytes memory proof) external view returns(bytes[] memory values) { - (OPWitnessData memory opData, StateProof memory stateProof) = abi.decode(proof, (OPWitnessData, StateProof)); - Types.OutputProposal memory l2out = opOracle.getL2Output(opData.l2OutputIndex); - bytes32 expectedRoot = Hashing.hashOutputRootProof(opData.outputRootProof); - if(l2out.outputRoot != expectedRoot) { - revert OutputRootMismatch(opData.l2OutputIndex, expectedRoot, l2out.outputRoot); + function getStorageValues( + address target, + bytes32[] memory commands, + bytes[] memory constants, + bytes memory proof + ) external view returns (bytes[] memory values) { + (OPWitnessData memory opData, StateProof memory stateProof) = abi + .decode(proof, (OPWitnessData, StateProof)); + Types.OutputProposal memory l2out = opOracle.getL2Output( + opData.l2OutputIndex + ); + bytes32 expectedRoot = Hashing.hashOutputRootProof( + opData.outputRootProof + ); + if (l2out.outputRoot != expectedRoot) { + revert OutputRootMismatch( + opData.l2OutputIndex, + expectedRoot, + l2out.outputRoot + ); } - return EVMProofHelper.getStorageValues(target, commands, constants, opData.outputRootProof.stateRoot, stateProof); + return + EVMProofHelper.getStorageValues( + target, + commands, + constants, + opData.outputRootProof.stateRoot, + stateProof + ); } } + + diff --git a/arb-verifier/contracts/test/MockOutbox.sol b/arb-verifier/contracts/test/MockOutbox.sol new file mode 100644 index 00000000..f712da2b --- /dev/null +++ b/arb-verifier/contracts/test/MockOutbox.sol @@ -0,0 +1,7 @@ +contract MockOutbox { + function pushRoot(bytes32 blockHash, bytes32 root) external { + roots[root] = blockHash; + } + + mapping(bytes32 => bytes32) public roots; // maps root hashes => L2 block hash +} diff --git a/arb-verifier/contracts/test/MockTestL1.sol b/arb-verifier/contracts/test/MockTestL1.sol new file mode 100644 index 00000000..c74bbca3 --- /dev/null +++ b/arb-verifier/contracts/test/MockTestL1.sol @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import {EVMFetcher} from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; +import {EVMFetchTarget} from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; +import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; + +contract MockTestL1 is EVMFetchTarget { + using EVMFetcher for EVMFetcher.EVMFetchRequest; + + IEVMVerifier verifier; // Slot 0 + address target; + + constructor(IEVMVerifier _verifier, address _target) { + verifier = _verifier; + target = _target; + } + + function getLatest() + public + view + returns (EVMFetcher.EVMFetchRequest memory) + { + return EVMFetcher.newFetchRequest(verifier, target).getStatic(0); + } + + function getName() public view returns (EVMFetcher.EVMFetchRequest memory) { + return EVMFetcher.newFetchRequest(verifier, target).getDynamic(1); + } + + function getHighscorer( + uint256 idx + ) public view returns (EVMFetcher.EVMFetchRequest memory) { + return + EVMFetcher.newFetchRequest(verifier, target).getDynamic(3).element( + idx + ); + } + + function getLatestHighscore() + public + view + returns (EVMFetcher.EVMFetchRequest memory) + { + return + EVMFetcher + .newFetchRequest(verifier, target) + .getStatic(0) + .getStatic(2) + .ref(0); + } + + function getLatestHighscorer() + public + view + returns (EVMFetcher.EVMFetchRequest memory) + { + return + EVMFetcher + .newFetchRequest(verifier, target) + .getStatic(0) + .getDynamic(3) + .ref(0); + } + + function getNickname( + string memory _name + ) public view returns (EVMFetcher.EVMFetchRequest memory) { + return + EVMFetcher.newFetchRequest(verifier, target).getDynamic(4).element( + _name + ); + } + + function getPrimaryNickname() + public + view + returns (EVMFetcher.EVMFetchRequest memory) + { + return + EVMFetcher + .newFetchRequest(verifier, target) + .getDynamic(1) + .getDynamic(4) + .ref(0); + } + + function getZero() public view returns (EVMFetcher.EVMFetchRequest memory) { + return EVMFetcher.newFetchRequest(verifier, target).getStatic(5); + } +} diff --git a/arb-verifier/test/testOPVerifier.ts b/arb-verifier/test/testArbVerifier.ts similarity index 93% rename from arb-verifier/test/testOPVerifier.ts rename to arb-verifier/test/testArbVerifier.ts index cdedd4b4..ef234b14 100644 --- a/arb-verifier/test/testOPVerifier.ts +++ b/arb-verifier/test/testArbVerifier.ts @@ -1,5 +1,5 @@ import { Server } from '@chainlink/ccip-read-server'; -import { makeOPGateway } from '@ensdomains/op-gateway'; +import { makeArbGateway } from '@ensdomains/arb-gateway'; import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider'; import type { HardhatEthersHelpers } from '@nomicfoundation/hardhat-ethers/types'; import { expect } from 'chai'; @@ -41,15 +41,16 @@ describe('OPVerifier', () => { provider = new ethers.BrowserProvider(hre.network.provider); signer = await provider.getSigner(0); - const opAddresses = await (await fetch("http://localhost:8080/addresses.json")).json(); + //AS long as the Local node is not working we're using mockInbox contract + //const opAddresses = await (await fetch("http://localhost:8080/addresses.json")).json(); - - const gateway = await makeOPGateway( + + const gateway = await makeArbGateway( (hre.network.config as any).url, (hre.config.networks[hre.network.companionNetworks.l2] as any).url, opAddresses.L2OutputOracleProxy, - 5, + ); const server = new Server() gateway.add(server) @@ -59,7 +60,7 @@ describe('OPVerifier', () => { // Replace ethers' fetch function with one that calls the gateway directly. const getUrl = FetchRequest.createGetUrlFunc(); ethers.FetchRequest.registerGetUrl(async (req: FetchRequest) => { - if(req.url != "test:") return getUrl(req); + if (req.url != "test:") return getUrl(req); const r = request(app).post('/'); if (req.hasBody()) { diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts new file mode 100644 index 00000000..127d8e12 --- /dev/null +++ b/arb-verifier/test/testMockVerifier.ts @@ -0,0 +1,45 @@ +/* eslint-disable prettier/prettier */ + +import { AbiCoder } from "ethers" +import hardhat from "hardhat" +const proof ="0x0000000000000000000000000000000000000000000000000000000000000000032ccc640fc02c8fe4e184ae8cf7ef4a907ca7e31305089afc47eefc8234036e5bbfe2e7a10af762f5c190da88808125973dcf88aa9785fe5a08a8f700d29ec7000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000ce0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000214f90211a0409458b6e6c207b066f7a28651142c90837bd9ce7d4e290e0b7a3691b3653db9a0130a2435654ef2e9e91720cfac54f547fff2bfb4907d6d5180a2654b1a4df8d9a04e42bda2d451575530dd8e2f77a6c6c1beac080349d18c74fae02fde75574207a03a74f4d0f35158ef12c73f20723a1ea7b94f5c288ae388981da395ab47dde777a0722aa04f18ce80be1efb1c0789d6e1850f9551857ef607d5a0c036444d84e98ea017a3a471a5b1624841b7d26fa2c8baf507d485ead026964e22e2dcc6c4bb3833a0aaae9f78c25eb8276dbafa647e0fd4cd2f8b1882ff98d8aff999ec65ee3eaf2ba0b452095e75520ee12c64c2afcd90bd2ee8eb97d2d7db5159d80c5ae511f8185da00fde16b41dc060acc8ef63038a3449c17759ba9631bcf29031253e00d52a61caa0f05c88389bf3c102a2de6284fdb29cd3091c26df4f053d5c9e24f5ef2b2edc6da0f4a0a1fcd9f17e36e9336d038f7f5d24cb3a3922b44e57f3a3ca7ed63d3c2c6ba0b84a4e3138cf6cefe5c083dca8ae16e5ef31af5ca88ee0b7a2c74bc1c363da5ba028436b1e03cc12117166efecfe4b950de1fb1d63f29f04fff89900ab76484547a09c29c3732cc31ba5c6215b83dd1b6b912ef668e90539afb7acdb1f5ce3245ba6a014217481f537bddf20028d59a437f6df6c83dec97a6e6f95146c2bc808a8002aa0a3bbf8fa470393cfdd7b84e9997d722d8121d423e9739753ca161d6cd6767fb1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a06820060d8ce135aa309d26aa50fe5a922c270eb4db13b0b9abdc8a981130bdaca0653cb41e53e53662420f6c9e1970073485367b39783713df624d3ab495d2a01aa03798c484c1006114586aaf64a6862064d334e9e80c6b05b1cc88f835b2288286a0c45b59b5ddb46030c86632fcb05bae58c073e7b1f202fff485bdb5ec838d6c86a0a3657fb1d1fca9f0d561c3137faee64740b3c9491007e58bfb3cb8772452ba1ea0c55ddea906053559891c2e26abc5946d65b83566fd4adf992a3cdaaf307bb723a0e00f8e135a5d82e878a57224127ea5b283c6182d06731cd65f3528d344bb5caca066f0e7291690a328e79001d20fd6e2e558ed5f71d58ca924247dc19063905437a0793a1508a29280ff14c9d580a6b7a9191dbb3f941c23e110395df7a2d5acbdd0a075a386f1cf876f1816b1a3a6c68b12c4f499aa39bf7545271ce185e2815e9873a050d99b9648dd4755db69a8f07f1de398e57d646f73422695224b27fdbfeae6a1a0c70898fe27ff0bb7c9f7d41b0d45051c88af9cdeb8bb5b318b8c8f7ee9a30c8da08c226d159b5d20f572c5c02587da103209ec96418e221188515386f203c90efea07d07447e6f337838169461516abec987b2cfe6d7e0440579c9b678408786d7a3a0dbe154dda1bac8883e08f3ba42e4ee9686086ff71043db4fec0be2aba79c40e0a0957447e04c9d09d5a949f11ec0b3f467652989cb37c8eb61502d582855214b78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a02598d76dc5cf5262159bae820e1b7af848d96818c6380e4025d1661b390c1cf1a037b35d50b93c3f9463523ace45fb1c6407cb4780cbc2cd4a0ea46001a9456f6ca03a97e86eec4a6c4169092d064722c9d6714fa4ed84147d25307338c3da086687a0c4e3d4a1bad1f9960baa148354f55fed61849e8b0f642ee581693087a77e9121a0ec3d2ae4ad26e3e7ec11e3a9a9e247049cb417392d165a86a9d2a0a21b21755da0dc095aff6e8ca9a3bb742b910077283914484cc96a1a9536407653a64a870feea00b7a0cc0b6c00c8cd7e22460404c616662523c9be04bcfb062af3af327e3f31aa0f513f4185f9d02a97da248fa17fa451afe0a4874ff245e9a089cace50f9e08c8a03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a0385e34ca19eb58f9cd794d0c924141a945a358d79f556ebac0025fbbe8d8e4dfa03adac6ac8afad7c7431dcbeff1a7b1f818ca899c8dfebd1b8b86e03ff09095a5a06fe35e0a65ec911bb82a17f16a469d797932978e67acc7e1165323937eeb5e13800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a0b88cbbd015422511ba3c9977ca62bdaa4de6c437f85ee542d8ce60870f0b3310a09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf18688000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e99800000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053f851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045f843a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a1a05361746f7368690000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000" +describe("Arbi Verifier", () => { + + it.only("test", async () => { + /** + * Prepate mock inbox + */ + const outboxF = await hardhat.ethers.getContractFactory("MockOutbox") + const mockOutbox = await outboxF.deploy() + + + + await mockOutbox.pushRoot( + "0x47ee108ea84e6f85c2749e942ee3d5d6a2cc5ef81f3b5c651c0f3c1b472bd645", + "0x913ac55af774e541d9c787428951598010fc41cacf2b9e97a924c7eff7d10fc5", + ) + + /** + * Deploy verifier + */ + + const f = await hardhat.ethers.getContractFactory("ArbVerifier") + const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) + + /** + * Deploy MockTestL1 + */ + + const testL2OnArbi = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" + + const fMockTest = await hardhat.ethers.getContractFactory("MockTestL1") + const mockTestL1 = await fMockTest.deploy(await arbiVerfifier.getAddress(), testL2OnArbi) + + const [, , commands, , constants] = await mockTestL1.getLatest() + + + + const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) + + }) +}) \ No newline at end of file diff --git a/evm-verifier/contracts/MerkleTrie.sol b/evm-verifier/contracts/MerkleTrie.sol index e00564ae..23a032c2 100644 --- a/evm-verifier/contracts/MerkleTrie.sol +++ b/evm-verifier/contracts/MerkleTrie.sol @@ -6,9 +6,10 @@ pragma solidity ^0.8.0; -import { Bytes } from "@eth-optimism/contracts-bedrock/src/libraries/Bytes.sol"; -import { RLPReader } from "@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol"; +import {Bytes} from '@eth-optimism/contracts-bedrock/src/libraries/Bytes.sol'; +import {RLPReader} from '@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol'; +import 'hardhat/console.sol'; /** * @title MerkleTrie @@ -63,7 +64,7 @@ library MerkleTrie { /** * @notice RLP representation of `NULL`. */ - bytes internal constant RLP_NULL = hex"80"; + bytes internal constant RLP_NULL = hex'80'; /** * @notice Verifies a proof that a given key/value pair is present in the trie. @@ -104,17 +105,22 @@ library MerkleTrie { bytes32 _root ) internal pure returns (bool, bytes memory) { TrieNode[] memory proof = _parseProof(_proof); - (uint256 pathLength, bytes memory keyRemainder, bool isFinalNode) = _walkNodePath( - proof, - _key, - _root - ); + ( + uint256 pathLength, + bytes memory keyRemainder, + bool isFinalNode + ) = _walkNodePath(proof, _key, _root); bool noRemainder = keyRemainder.length == 0; - require(noRemainder || isFinalNode, "MerkleTrie: provided proof is invalid"); + require( + noRemainder || isFinalNode, + 'MerkleTrie: provided proof is invalid' + ); - bytes memory value = noRemainder ? _getNodeValue(proof[pathLength - 1]) : bytes(""); + bytes memory value = noRemainder + ? _getNodeValue(proof[pathLength - 1]) + : bytes(''); return (value.length > 0, value); } @@ -135,15 +141,7 @@ library MerkleTrie { TrieNode[] memory _proof, bytes memory _key, bytes32 _root - ) - private - pure - returns ( - uint256, - bytes memory, - bool - ) - { + ) private pure returns (uint256, bytes memory, bool) { uint256 pathLength = 0; bytes memory key = Bytes.toNibbles(_key); @@ -162,22 +160,38 @@ library MerkleTrie { pathLength += 1; if (currentKeyIndex == 0) { + console.log('length'); + console.log(_proof.length); + console.log('---'); + console.logBytes( + abi.encodePacked(keccak256(currentNode.encoded)) + ); + console.log('---'); + console.logBytes(currentNode.encoded); + console.log('---'); + console.logBytes(currentNodeID); // First proof element is always the root node. require( - Bytes.equal(abi.encodePacked(keccak256(currentNode.encoded)), currentNodeID), - "MerkleTrie: invalid root hash" + Bytes.equal( + abi.encodePacked(keccak256(currentNode.encoded)), + currentNodeID + ), + 'MerkleTrie: invalid root hash' ); } else if (currentNode.encoded.length >= 32) { // Nodes 32 bytes or larger are hashed inside branch nodes. require( - Bytes.equal(abi.encodePacked(keccak256(currentNode.encoded)), currentNodeID), - "MerkleTrie: invalid large internal hash" + Bytes.equal( + abi.encodePacked(keccak256(currentNode.encoded)), + currentNodeID + ), + 'MerkleTrie: invalid large internal hash' ); } else { // Nodes smaller than 32 bytes aren't hashed. require( Bytes.equal(currentNode.encoded, currentNodeID), - "MerkleTrie: invalid internal node hash" + 'MerkleTrie: invalid internal node hash' ); } @@ -190,22 +204,29 @@ library MerkleTrie { // We're not at the end of the key yet. // Figure out what the next node ID should be and continue. uint8 branchKey = uint8(key[currentKeyIndex]); - RLPReader.RLPItem memory nextNode = currentNode.decoded[branchKey]; + RLPReader.RLPItem memory nextNode = currentNode.decoded[ + branchKey + ]; currentNodeID = _getNodeID(nextNode); currentKeyIncrement = 1; continue; } - } else if (currentNode.decoded.length == LEAF_OR_EXTENSION_NODE_LENGTH) { + } else if ( + currentNode.decoded.length == LEAF_OR_EXTENSION_NODE_LENGTH + ) { bytes memory path = _getNodePath(currentNode); uint8 prefix = uint8(path[0]); uint8 offset = 2 - (prefix % 2); bytes memory pathRemainder = Bytes.slice(path, offset); bytes memory keyRemainder = Bytes.slice(key, currentKeyIndex); - uint256 sharedNibbleLength = _getSharedNibbleLength(pathRemainder, keyRemainder); + uint256 sharedNibbleLength = _getSharedNibbleLength( + pathRemainder, + keyRemainder + ); require( keyRemainder.length >= pathRemainder.length, - "MerkleTrie: invalid key length for leaf or extension node" + 'MerkleTrie: invalid key length for leaf or extension node' ); if (prefix == PREFIX_LEAF_EVEN || prefix == PREFIX_LEAF_ODD) { @@ -221,7 +242,10 @@ library MerkleTrie { // We've hit a leaf node, so our next node should be NULL. currentNodeID = RLP_NULL; break; - } else if (prefix == PREFIX_EXTENSION_EVEN || prefix == PREFIX_EXTENSION_ODD) { + } else if ( + prefix == PREFIX_EXTENSION_EVEN || + prefix == PREFIX_EXTENSION_ODD + ) { if (sharedNibbleLength != pathRemainder.length) { // Our extension node is not identical to the remainder. // We've hit the end of this path @@ -236,10 +260,12 @@ library MerkleTrie { continue; } } else { - revert("MerkleTrie: received a node with an unknown prefix"); + revert( + 'MerkleTrie: received a node with an unknown prefix' + ); } } else { - revert("MerkleTrie: received an unparseable node"); + revert('MerkleTrie: received an unparseable node'); } } @@ -258,11 +284,16 @@ library MerkleTrie { * * @return Proof parsed into easily accessible structs. */ - function _parseProof(bytes[] memory _proof) private pure returns (TrieNode[] memory) { + function _parseProof( + bytes[] memory _proof + ) private pure returns (TrieNode[] memory) { uint256 length = _proof.length; TrieNode[] memory proof = new TrieNode[](length); for (uint256 i = 0; i < length; ) { - proof[i] = TrieNode({ encoded: _proof[i], decoded: RLPReader.readList(_proof[i]) }); + proof[i] = TrieNode({ + encoded: _proof[i], + decoded: RLPReader.readList(_proof[i]) + }); unchecked { ++i; } @@ -278,8 +309,13 @@ library MerkleTrie { * * @return ID for the node, depending on the size of its contents. */ - function _getNodeID(RLPReader.RLPItem memory _node) private pure returns (bytes memory) { - return _node.length < 32 ? RLPReader.readRawBytes(_node) : RLPReader.readBytes(_node); + function _getNodeID( + RLPReader.RLPItem memory _node + ) private pure returns (bytes memory) { + return + _node.length < 32 + ? RLPReader.readRawBytes(_node) + : RLPReader.readBytes(_node); } /** @@ -289,7 +325,9 @@ library MerkleTrie { * * @return Node path, converted to an array of nibbles. */ - function _getNodePath(TrieNode memory _node) private pure returns (bytes memory) { + function _getNodePath( + TrieNode memory _node + ) private pure returns (bytes memory) { return Bytes.toNibbles(RLPReader.readBytes(_node.decoded[0])); } @@ -300,7 +338,9 @@ library MerkleTrie { * * @return Node value, as hex bytes. */ - function _getNodeValue(TrieNode memory _node) private pure returns (bytes memory) { + function _getNodeValue( + TrieNode memory _node + ) private pure returns (bytes memory) { return RLPReader.readBytes(_node.decoded[_node.decoded.length - 1]); } @@ -312,11 +352,10 @@ library MerkleTrie { * * @return Number of shared nibbles. */ - function _getSharedNibbleLength(bytes memory _a, bytes memory _b) - private - pure - returns (uint256) - { + function _getSharedNibbleLength( + bytes memory _a, + bytes memory _b + ) private pure returns (uint256) { uint256 shared; uint256 max = (_a.length < _b.length) ? _a.length : _b.length; for (; shared < max && _a[shared] == _b[shared]; ) { @@ -326,4 +365,4 @@ library MerkleTrie { } return shared; } -} \ No newline at end of file +} From 0c31ad29c887a03ac978620829a2b5358894c6df Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sat, 18 Nov 2023 20:00:10 +0300 Subject: [PATCH 08/63] get rid of logging --- evm-verifier/contracts/MerkleTrie.sol | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/evm-verifier/contracts/MerkleTrie.sol b/evm-verifier/contracts/MerkleTrie.sol index 23a032c2..9b904af0 100644 --- a/evm-verifier/contracts/MerkleTrie.sol +++ b/evm-verifier/contracts/MerkleTrie.sol @@ -9,8 +9,6 @@ pragma solidity ^0.8.0; import {Bytes} from '@eth-optimism/contracts-bedrock/src/libraries/Bytes.sol'; import {RLPReader} from '@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol'; -import 'hardhat/console.sol'; - /** * @title MerkleTrie * @notice MerkleTrie is a small library for verifying standard Ethereum Merkle-Patricia trie @@ -160,16 +158,6 @@ library MerkleTrie { pathLength += 1; if (currentKeyIndex == 0) { - console.log('length'); - console.log(_proof.length); - console.log('---'); - console.logBytes( - abi.encodePacked(keccak256(currentNode.encoded)) - ); - console.log('---'); - console.logBytes(currentNode.encoded); - console.log('---'); - console.logBytes(currentNodeID); // First proof element is always the root node. require( Bytes.equal( From 5e1ef4bb7a89f93e8978e18861618544e1a57fe5 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sat, 18 Nov 2023 20:49:30 +0300 Subject: [PATCH 09/63] merkle tree wip --- arb-gateway/src/ArbProofService.ts | 23 +++++------ arb-verifier/contracts/ArbVerifier.sol | 46 ++++++++++++++-------- arb-verifier/contracts/test/MockTestL1.sol | 20 +++++++++- arb-verifier/test/arbPlayground.ts | 33 ++++++++++++++-- arb-verifier/test/testMockVerifier.ts | 37 +++++++++++++++-- l1-verifier/contracts/test/TestL1.sol | 2 + 6 files changed, 125 insertions(+), 36 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index b77cb732..474af965 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -4,6 +4,7 @@ import { AbiCoder, Contract, Interface, JsonRpcProvider, type AddressLike, type export interface ArbProvableBlock { stateRoot: string; + sendRoot: string; hash: string; number: number @@ -64,14 +65,6 @@ export class ArbProofService implements IProofService { console.log(block) - console.log(proof) - const rpcBlock = await this.l2Provider.send( - 'eth_getBlockByNumber', - ['0x' + block.number.toString(16), false] - ); - - console.log(rpcBlock) - return AbiCoder.defaultAbiCoder().encode( [ 'tuple(bytes32 version, bytes32 stateRoot, bytes32 latestBlockhash)', @@ -81,7 +74,7 @@ export class ArbProofService implements IProofService { { version: '0x0000000000000000000000000000000000000000000000000000000000000000', - stateRoot: rpcBlock.stateRoot, + stateRoot: block.stateRoot, latestBlockhash: block.hash, }, @@ -113,7 +106,7 @@ export class ArbProofService implements IProofService { if (!e) { throw new Error("No event found") } - const [stateRoot, l2BlockHash] = e.args + const [sendRoot, l2BlockHash] = e.args const l2Block = await this.l2Provider.getBlock(l2BlockHash) @@ -121,11 +114,19 @@ export class ArbProofService implements IProofService { throw new Error("No block found") } + console.log("l2blockFromHash", l2Block) + console.log("stateRoot from event", sendRoot) + + const blockWithStateRoot = await this.l2Provider.send( + 'eth_getBlockByNumber', + ['0x' + l2Block.number.toString(16), false] + ); return { hash: l2BlockHash, number: l2Block.number, - stateRoot: stateRoot + stateRoot: blockWithStateRoot.stateRoot, + sendRoot } } diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index 14aef8fa..70f86517 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -10,17 +10,17 @@ struct ArbWitnessData { bytes32 latestBlockhash; } -interface IOutbox { +interface IRollup { function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash } contract ArbVerifier is IEVMVerifier { //Todo replace with IFace - IOutbox public immutable outbox; + IRollup public immutable rollup; string[] _gatewayURLs; - constructor(IOutbox _outboxAddress, string[] memory _urls) { - outbox = _outboxAddress; + constructor(IOutbox _rollupAddress, string[] memory _urls) { + rollup = _rollupAddress; _gatewayURLs = _urls; } @@ -34,19 +34,33 @@ contract ArbVerifier is IEVMVerifier { bytes[] memory constants, bytes memory proof ) external view returns (bytes[] memory values) { - (ArbWitnessData memory opData, StateProof memory stateProof) = abi + (ArbWitnessData memory arbData, StateProof memory stateProof) = abi .decode(proof, (ArbWitnessData, StateProof)); - console.log('hello'); - console.logBytes32(opData.stateRoot); - - return - EVMProofHelper.getStorageValues( - target, - commands, - constants, - opData.stateRoot, - stateProof - ); + console.log('stateeRoot'); + + console.logBytes32(arbData.stateRoot); + + values = EVMProofHelper.getStorageValues( + target, + commands, + constants, + arbData.stateRoot, + stateProof + ); + } + + function prooooooof( + uint64 nodeIndex, + bytes32 blockHash, + bytes32 sendRoot + ) internal { + bytes32 confirmdata = keccak256(abi.encodePacked(blockHash, sendRoot)); + Node memory rblock = rollup.getNode(nodeIndex); + require(rblock.confirmData == confirmdata, 'confirmData mismatch'); + + bytes32 givenRoot = keccak256(abi.encodePacked(confirmData, stateRoot)); + + } } diff --git a/arb-verifier/contracts/test/MockTestL1.sol b/arb-verifier/contracts/test/MockTestL1.sol index c74bbca3..20326dcd 100644 --- a/arb-verifier/contracts/test/MockTestL1.sol +++ b/arb-verifier/contracts/test/MockTestL1.sol @@ -5,6 +5,8 @@ import {EVMFetcher} from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; import {EVMFetchTarget} from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; +uint8 constant OP_END = 0xff; + contract MockTestL1 is EVMFetchTarget { using EVMFetcher for EVMFetcher.EVMFetchRequest; @@ -21,7 +23,13 @@ contract MockTestL1 is EVMFetchTarget { view returns (EVMFetcher.EVMFetchRequest memory) { - return EVMFetcher.newFetchRequest(verifier, target).getStatic(0); + EVMFetcher.EVMFetchRequest memory req = EVMFetcher + .newFetchRequest(verifier, target) + .getStatic(0); + + _addOperation(req, OP_END); + + return req; } function getName() public view returns (EVMFetcher.EVMFetchRequest memory) { @@ -88,4 +96,14 @@ contract MockTestL1 is EVMFetchTarget { function getZero() public view returns (EVMFetcher.EVMFetchRequest memory) { return EVMFetcher.newFetchRequest(verifier, target).getStatic(5); } + + function _addOperation( + EVMFetcher.EVMFetchRequest memory request, + uint8 op + ) private pure { + uint256 commandIdx = request.commands.length - 1; + request.commands[commandIdx] = + request.commands[commandIdx] | + (bytes32(bytes1(op)) >> (8 * request.operationIdx++)); + } } diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts index 405d1df9..5bb2725b 100644 --- a/arb-verifier/test/arbPlayground.ts +++ b/arb-verifier/test/arbPlayground.ts @@ -3,12 +3,12 @@ import { EVMProofHelper } from "@ensdomains/evm-gateway" import { Contract, ethers } from "ethers" import { ArbProofService } from "@ensdomains/arb-gateway" - const test1Contract = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" const rpcMainnet = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" const rpcArbitrum = "https://arb-goerli.g.alchemy.com/v2/k2Vp4opdLW3ueLYaTPndSFtx4m7T3s71" const outboxGoerli = "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049" +const rollupAddr = "0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17" const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) const l2Provider = new ethers.JsonRpcProvider(rpcArbitrum, { chainId: 421613, @@ -62,12 +62,11 @@ export const arbPlayground = async () => { const proofHelper = new EVMProofHelper(l2Provider) - const proofs = await proofHelper.getProofs(targetBlocknr, test1Contract, [0n, 1n]) + const proofs = await proofHelper.getProofs(targetBlocknr, test1Contract, [0n]) console.log(proofs) - } const runProofService = async () => { @@ -78,7 +77,7 @@ const runProofService = async () => { ); const getBlock = await s.getProvableBlock() - const proofs = await s.getProofs(getBlock, test1Contract, [0n, 1n]) + const proofs = await s.getProofs(getBlock, test1Contract, [0n]) console.log(proofs) @@ -100,3 +99,29 @@ const readFromContract = async () => { //readFromContract() runProofService() +const withRollup = async () => { + /* const rollup = new Contract(rollupAddr, rollupAbi, l1Provider) + const helper = new Contract() + + const nodeIdx = await rollup.latestNodeCreated() + + const nodeEventFilter = await rollup.filters.NodeCreated(nodeIdx); + const nodeEvents = await rollup.queryFilter(nodeEventFilter); + const assertion = nodeEvents[0].args!.assertion + + const sendRoot = await helper.getSendRoot(assertion) + const blockHash = await helper.getBlockHash(assertion) + const l2blockRaw = await l2provider.send('eth_getBlockByHash', [ + blockHash, + false + ]); + + console.log(nodeIdx.toString()) */ + +} + +//withRollup() + +const weProof = () => { + +} \ No newline at end of file diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts index 127d8e12..cd539a74 100644 --- a/arb-verifier/test/testMockVerifier.ts +++ b/arb-verifier/test/testMockVerifier.ts @@ -1,8 +1,31 @@ /* eslint-disable prettier/prettier */ -import { AbiCoder } from "ethers" import hardhat from "hardhat" -const proof ="0x0000000000000000000000000000000000000000000000000000000000000000032ccc640fc02c8fe4e184ae8cf7ef4a907ca7e31305089afc47eefc8234036e5bbfe2e7a10af762f5c190da88808125973dcf88aa9785fe5a08a8f700d29ec7000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000ce0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000214f90211a0409458b6e6c207b066f7a28651142c90837bd9ce7d4e290e0b7a3691b3653db9a0130a2435654ef2e9e91720cfac54f547fff2bfb4907d6d5180a2654b1a4df8d9a04e42bda2d451575530dd8e2f77a6c6c1beac080349d18c74fae02fde75574207a03a74f4d0f35158ef12c73f20723a1ea7b94f5c288ae388981da395ab47dde777a0722aa04f18ce80be1efb1c0789d6e1850f9551857ef607d5a0c036444d84e98ea017a3a471a5b1624841b7d26fa2c8baf507d485ead026964e22e2dcc6c4bb3833a0aaae9f78c25eb8276dbafa647e0fd4cd2f8b1882ff98d8aff999ec65ee3eaf2ba0b452095e75520ee12c64c2afcd90bd2ee8eb97d2d7db5159d80c5ae511f8185da00fde16b41dc060acc8ef63038a3449c17759ba9631bcf29031253e00d52a61caa0f05c88389bf3c102a2de6284fdb29cd3091c26df4f053d5c9e24f5ef2b2edc6da0f4a0a1fcd9f17e36e9336d038f7f5d24cb3a3922b44e57f3a3ca7ed63d3c2c6ba0b84a4e3138cf6cefe5c083dca8ae16e5ef31af5ca88ee0b7a2c74bc1c363da5ba028436b1e03cc12117166efecfe4b950de1fb1d63f29f04fff89900ab76484547a09c29c3732cc31ba5c6215b83dd1b6b912ef668e90539afb7acdb1f5ce3245ba6a014217481f537bddf20028d59a437f6df6c83dec97a6e6f95146c2bc808a8002aa0a3bbf8fa470393cfdd7b84e9997d722d8121d423e9739753ca161d6cd6767fb1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a06820060d8ce135aa309d26aa50fe5a922c270eb4db13b0b9abdc8a981130bdaca0653cb41e53e53662420f6c9e1970073485367b39783713df624d3ab495d2a01aa03798c484c1006114586aaf64a6862064d334e9e80c6b05b1cc88f835b2288286a0c45b59b5ddb46030c86632fcb05bae58c073e7b1f202fff485bdb5ec838d6c86a0a3657fb1d1fca9f0d561c3137faee64740b3c9491007e58bfb3cb8772452ba1ea0c55ddea906053559891c2e26abc5946d65b83566fd4adf992a3cdaaf307bb723a0e00f8e135a5d82e878a57224127ea5b283c6182d06731cd65f3528d344bb5caca066f0e7291690a328e79001d20fd6e2e558ed5f71d58ca924247dc19063905437a0793a1508a29280ff14c9d580a6b7a9191dbb3f941c23e110395df7a2d5acbdd0a075a386f1cf876f1816b1a3a6c68b12c4f499aa39bf7545271ce185e2815e9873a050d99b9648dd4755db69a8f07f1de398e57d646f73422695224b27fdbfeae6a1a0c70898fe27ff0bb7c9f7d41b0d45051c88af9cdeb8bb5b318b8c8f7ee9a30c8da08c226d159b5d20f572c5c02587da103209ec96418e221188515386f203c90efea07d07447e6f337838169461516abec987b2cfe6d7e0440579c9b678408786d7a3a0dbe154dda1bac8883e08f3ba42e4ee9686086ff71043db4fec0be2aba79c40e0a0957447e04c9d09d5a949f11ec0b3f467652989cb37c8eb61502d582855214b78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a02598d76dc5cf5262159bae820e1b7af848d96818c6380e4025d1661b390c1cf1a037b35d50b93c3f9463523ace45fb1c6407cb4780cbc2cd4a0ea46001a9456f6ca03a97e86eec4a6c4169092d064722c9d6714fa4ed84147d25307338c3da086687a0c4e3d4a1bad1f9960baa148354f55fed61849e8b0f642ee581693087a77e9121a0ec3d2ae4ad26e3e7ec11e3a9a9e247049cb417392d165a86a9d2a0a21b21755da0dc095aff6e8ca9a3bb742b910077283914484cc96a1a9536407653a64a870feea00b7a0cc0b6c00c8cd7e22460404c616662523c9be04bcfb062af3af327e3f31aa0f513f4185f9d02a97da248fa17fa451afe0a4874ff245e9a089cace50f9e08c8a03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a0385e34ca19eb58f9cd794d0c924141a945a358d79f556ebac0025fbbe8d8e4dfa03adac6ac8afad7c7431dcbeff1a7b1f818ca899c8dfebd1b8b86e03ff09095a5a06fe35e0a65ec911bb82a17f16a469d797932978e67acc7e1165323937eeb5e13800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a0b88cbbd015422511ba3c9977ca62bdaa4de6c437f85ee542d8ce60870f0b3310a09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf18688000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e99800000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053f851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045f843a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a1a05361746f7368690000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000" +const proof = "0x00000000000000000000000000000000000000000000000000000000000000008d2264fa219fdb40b2ee0d22088cfd6288ceed53d785bd3b92045ecbf1128bbfce8b27002d58a56ea49da88b9f2f40c5c1707d487cedcb3d1c1301108957a523000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000ce0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000214f90211a0e1aa1538de15fee8fbec6777d8d5e9d65d1e060fd8dc040d68ea31efad3eb39aa05287ff209c82b2e0a740fd3982c237242f0fe1eb398988180b7e491c7329a2e7a059e4b35315eea107f328a1c6eb314454cfaabae0e1b4260ac4151588df2be3daa0372fd183d1745122ce61b6743e997936411f0ac0df8355013d43602240535004a0f6c40dee84f732a68e185f7f64f2391027eb6ebf487955e786d4f98ff4442caea088d5aa571004e2e27d611ebd041b6232195eac6094fe74d5511bcd040097bfe3a0f85d689c0b2a7f419624d51f1560b3348991da966d144ed781b68a80a3700d1da03153a85f779de65c0b4471958a3af1cb9de09b42e005d31ae599c9eb5cc154a7a0a09dd18e6e6bc67e7cc04d35732df7fa07a3c54f0dcd51fab20e22769bca8880a0c69c333d45b18cc3d8639eba6db19e41f68d020760de3efe7b5d12b2dbd2554da093afefb76492696942323ed7d4edbd3f005c516a043705a057eab6cf38706015a0048d0f68a45347442bc530e9e2a4c00efbe6f7aeccce3a5ee5b15f18748da056a058872c6315c0cc47b372d3b46c5b01874f7e7192bb3047e1abf40fe4c98d4a3ca03bc05d3f18c44295f35ff77e72312ea52f0739b6b7ce06eca337c19276856570a0b50d1beebfdf3cebe18d22ef91c8721559777f1b44daa20c605458f4a88d72d5a0e3d4e64d4582f2a5ebba2c20efc044e594837ca2193c3881ac9f23b59b1b2c36800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a04d2d3acde5e73e71c054b1c299e0d4b652d3ed5ea59e13e4a10d8ebb622a37f8a00b73d7ef6f04cc2c4ea7d48f11b55604245a6edac69f8b39bf16a6473de68ef6a05e9a40fa87d4c13d64377d62e8d82e2e12f880460860b3f87973d5455726895ba0bdf32fa7dbc121632f0ace3d74aa75395b186591d201428e22f4a1853a9bf933a0df14bbaed7fc72d1064a4f4304e8932756b912c396789bb9f4a7e8f00ad766a7a098ef3223331d93b1b0f24d41bb7dfbbd21826bf9b88ff8d45c337b849e9480f3a0ac6c17cfbd89640d2e325a3bfb6fb72a46bd046c7598ef50e9ddf64f70c63ae5a090ef9f5f56e156d9ff46f3dbd18bd80b47eb2861b26d198ede41916620c71419a09cd5b5ad94ce49fa128daec1b352a368f347ccba29d34b78b50c509e7592bc9ca0cdd7b9ebeff6cccbaf9a60f675e13c1859169024c29aae0df5be45495e95df0ea0124369f6f1601ac83ea28008e4dfabce24c16ac7ec9ebdb9a93ccb2ebb668a1aa0c46e7a3d0605cc9fb75d4315a44124aa4319371aabc35352f51fc70743d0e71ba0ebabcbcf9ce3edf181b4a1c4d12d54527c82b93f389d67b0ad963c1277d97d5fa05fb80bdb0f96b9028867c00b7ddcab745d2e21e453ca2719b189d0d5dd8af250a0e798fafb662769064916ab0676b6ad799367f6aea27415e7885538446ea52e39a039c4eb5e88bd412b7853096381107ae4a4f00ede6f1e29b011564c847e8b7ecf800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a0a9ceb76a2b4f2309543944b62f7e75d2995e5c97042ce92eb1eda15bcd412116a0776aa21a0f797ade2d2ecdb909c10baba1fc5f28124c44d439b280c0cc6a5941a03a97e86eec4a6c4169092d064722c9d6714fa4ed84147d25307338c3da086687a03dd02cfdb56f8c0c7142032eff73674b1e5590eb463405b901be7ce5ca89ab86a0ec3d2ae4ad26e3e7ec11e3a9a9e247049cb417392d165a86a9d2a0a21b21755da0dc095aff6e8ca9a3bb742b910077283914484cc96a1a9536407653a64a870feea0b44d66cb14c00fe4923a8175d254d3148e7e3291a4c666c46848814678e32f4fa0370b6fe91f198215188021ebfd613fd854db4e1a70db550b2865b169217d29c2a03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a0b946076d77c0197c1e4411a1255e80ea6a378d9de26797a4f770e22ef4ee414da0eb1127bd741ea202b9f1aeea078f0266be3749b7e0ff4b514dd85b249197209ca00e618170c166e68fab3a858bd2a14276d035721b6d7e961ee7fd7ff6a0c6f73c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a0b88cbbd015422511ba3c9977ca62bdaa4de6c437f85ee542d8ce60870f0b3310a09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf18688000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e99800000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053f851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a0000000000000000000000000000000000000000000000000000000000" + +const p = { + stateTrieWitness: [ + '0xf90211a0ecbb5930d0d44a48876bc9f92d5f16b470858adacfefb31bf241861ef82ef365a05dd3908206bdc8321a8f5aebbf3a2745b8c528eedab13f6983d38743feb4b790a0a1adb1d322267351fc37499c5b057f76a0622969d5c542bb873df2f06a69c12fa05385b6566b6b1e6a3128eea7c09121cc50d364e4c22c6a8a3a7629ae10d05168a07a02845466ee54b429767f479ee0b53184931f07b4d4ce2dc2414d718dc4e24fa08eb46baacdf11591d3fb014f6230b26bb34b95fc3341b8ca4d350e7f9ea635c6a004f323a1c155647a17177821557bc9876a5025bb6c4cf24568e554573628d455a06b2db470cb6422aa00a4052882a1e58c57f6fc02e8e2c7595ecbfb460190211ea08b6ac77a8d9424d56bdee393bd9eda2d9291bc9e70cab606e02d71e8e4574719a048d22ea0362f52a6f6a50b9f0061513017fe785496382b386fc90a80d459df58a0c0b6b51c6f35615a5ef75651dad24dac9e699c80846380f6e21e48e75d975eb6a0d94c2d494ee20548f94eb5a183d393236a04820b46c1927da5e79f14c9608051a0fb3908d2b05acbf87d5b6dbb4e514ba28fc74826ec01770ab611a6d5b632c9b1a0d3d24aff6ae8582fe0333196ebb5cdba6c7930abda3057af8bbe781c2a5f4edfa01e02189b43b74ff71e69cd1ca81385c071ae7caaef53ab69bad97b85ff07a286a0b5aff837cc8b99fa249712c294682976b220d2124125828a0b0a39bcbaa95a6b80', + '0xf90211a06bfc6112fb2883d0436836248c9f4f5c5db650f855302860605fe75c9f0c576da0f5bdabdb6c201b8d76d34e0db8b37942aa74e20e20a1ef3f7c8a6110ca085a47a0327122b35929022c10e99ebe6ae898c3c467aaa94b4a412114a01d763aeb8a43a0309dced8e39f6629374db60e676d770402d67268983f2a99928229b193ec9990a0c77809805f1ddc8b72c511bd815537a4c91353bfba79520b7e25d8a0b2a3bfdaa0575afb490f48bb7e2a13f0ba7ef479535fb3f38bc8243b24d82ceaf8e5c7d347a03079ffc2dd4d07e23208c3b82b9bf07fa0dcfb2c891bbea7fd2c7ba0b0aae0eba04358d6a31475be7c04b22e4b4adf9c619c787d04c2cb03045901443b8a81f3c9a0f2a2cdbfb7a0968d0b746312fa43d18406a7fdded3a2a342ba38936512c5d0e4a0640ebcb60df8bd6f92bc17058e7832507a8c23bf0f4eb003d7b29fc438ec0c6da0393953ea1f65571d25d5bb6a2c334c834a99f29e0392db2af8edee82d470b001a0133d400c51da299c5ef4987455429b5f2ff64827212fa310cd3cdecf8ad8011ea07c8f8a8556d88b38a77131b6031bfa534a5edaa6dfcaef9f87adcf83e7f8ddaba0b99b0e42c4e0b5bde981ab210d6d837574ae23cb5c7056b8aa5aa42cbe2d1c5ba0f8c8efe9f6d5f92d47bfbdd572e914b13eff156753135061d73a243455028099a06c46452fffcf604574c452dd4d3685e58fb8b6ee2bf2a9914b3c406e73d332d580', + '0xf90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a0fda81ec1dbc32b3ae5d2c10eba02eaf359ab595b05937cd7ec8818bb7a6b5978a037b35d50b93c3f9463523ace45fb1c6407cb4780cbc2cd4a0ea46001a9456f6ca03a97e86eec4a6c4169092d064722c9d6714fa4ed84147d25307338c3da086687a07d0cdfc2eb7fda8d62d4925f54254ea5a87b1251ab32ea8dfdfacc98bcf9af7ea0ec3d2ae4ad26e3e7ec11e3a9a9e247049cb417392d165a86a9d2a0a21b21755da0dc095aff6e8ca9a3bb742b910077283914484cc96a1a9536407653a64a870feea039766bc9e47cd08ebd60ff1d959a683ff2b85f920ad5c0e86f558a13ae6172e2a0d7fbe3279aba6f18de6def2e63cc179c825c08a62dbd0ea2e810c2c139824e7ca03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a022f6c7f923798d45e158df64560f49e8d392a6d592b1a225108b6fc062a74acaa009e5cc3419f31c72e01e6ee35504faac4a7a70d77877172bc0cded5cd8e2edc9a06fe35e0a65ec911bb82a17f16a469d797932978e67acc7e1165323937eeb5e1380', + '0xf90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a0b88cbbd015422511ba3c9977ca62bdaa4de6c437f85ee542d8ce60870f0b3310a09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf186880', + '0xf901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e9980', + '0xf8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb8' + ], + storageProofs: [ + [ + '0xf8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580', + '0xf851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080', + '0xe2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a' + ], + [ + '0xf8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580', + '0xf843a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a1a05361746f7368690000000000000000000000000000000000000000000000000e' + ] + ], + stateRoot: '0x5eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0ac' +} + describe("Arbi Verifier", () => { it.only("test", async () => { @@ -35,11 +58,17 @@ describe("Arbi Verifier", () => { const fMockTest = await hardhat.ethers.getContractFactory("MockTestL1") const mockTestL1 = await fMockTest.deploy(await arbiVerfifier.getAddress(), testL2OnArbi) - const [, , commands, , constants] = await mockTestL1.getLatest() + const req = await mockTestL1.getLatest() + const [, , commands, , constants] = req + + console.log(req) - const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) + + + const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) + console.log(res) }) }) \ No newline at end of file diff --git a/l1-verifier/contracts/test/TestL1.sol b/l1-verifier/contracts/test/TestL1.sol index 337ae6f1..506b1e53 100644 --- a/l1-verifier/contracts/test/TestL1.sol +++ b/l1-verifier/contracts/test/TestL1.sol @@ -156,4 +156,6 @@ contract TestL1 is EVMFetchTarget { ) public pure returns (uint256) { return abi.decode(values[1], (uint256)); } + + } From 2ab3282d0f4f7f776cf3cc8db34908f313aab242 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sat, 18 Nov 2023 23:52:44 +0300 Subject: [PATCH 10/63] checkpoint statevaldation --- arb-gateway/package.json | 3 +- arb-gateway/src/ArbProofService.ts | 139 +- arb-gateway/src/abi/helperAbi.ts | 170 ++ arb-gateway/src/abi/rollupABI.ts | 1753 ++++++++++++++++++++ arb-gateway/src/index.ts | 16 +- arb-gateway/src/server.ts | 24 +- arb-gateway/src/worker.ts | 26 +- arb-verifier/contracts/ArbVerifier.sol | 48 +- arb-verifier/contracts/AssertionHelper.sol | 462 ++++++ arb-verifier/package.json | 5 +- arb-verifier/test/abi/helperAbi.ts | 170 ++ arb-verifier/test/abi/rollupABI.ts | 1753 ++++++++++++++++++++ arb-verifier/test/arbPlayground.ts | 157 +- arb-verifier/test/gist.ts | 123 ++ arb-verifier/test/testMockVerifier.ts | 32 +- bun.lockb | Bin 666256 -> 689392 bytes 16 files changed, 4658 insertions(+), 223 deletions(-) create mode 100644 arb-gateway/src/abi/helperAbi.ts create mode 100644 arb-gateway/src/abi/rollupABI.ts create mode 100644 arb-verifier/contracts/AssertionHelper.sol create mode 100644 arb-verifier/test/abi/helperAbi.ts create mode 100644 arb-verifier/test/abi/rollupABI.ts create mode 100644 arb-verifier/test/gist.ts diff --git a/arb-gateway/package.json b/arb-gateway/package.json index bc2d5207..eaf18ff9 100644 --- a/arb-gateway/package.json +++ b/arb-gateway/package.json @@ -62,6 +62,7 @@ "@ethereumjs/block": "^5.0.0", "@nomicfoundation/ethereumjs-block": "^5.0.2", "commander": "^11.0.0", - "ethers": "^6.7.1" + "ethers": "^6.7.1", + "ethers5": "npm:ethers@5.7.2" } } diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 474af965..0940f103 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -1,19 +1,18 @@ /* eslint-disable prettier/prettier */ import { EVMProofHelper, type IProofService } from '@ensdomains/evm-gateway'; -import { AbiCoder, Contract, Interface, JsonRpcProvider, type AddressLike, type Filter } from 'ethers'; - +import { AbiCoder, ethers, type AddressLike } from 'ethers'; +import { ethers as ethers5 } from "ethers5"; +import helperAbi from "./abi/helperAbi.js"; +import rollupAbi from "./abi/rollupABI.js"; export interface ArbProvableBlock { - stateRoot: string; - sendRoot: string; - hash: string; number: number + sendRoot: string, + blockHash: string, + nodeIndex: string, + rlpEncodedBlock: string } -const SEND_ROOT_UPDATED_EVENT_TOPIC = "0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748" -const OUTBOX_ABI = [ - "event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash)", -]; /** * The proofService class can be used to calculate proofs for a given target and slot on the Optimism Bedrock network. @@ -21,24 +20,27 @@ const OUTBOX_ABI = [ * */ export class ArbProofService implements IProofService { - private readonly l1Provider: JsonRpcProvider; - private readonly l2Provider: JsonRpcProvider; - private readonly l2Outbox: Contract; + private readonly l2LegacyProvider: ethers5.providers.JsonRpcProvider; + private readonly rollup: ethers5.Contract; + private readonly assertionHelper: ethers5.Contract; private readonly helper: EVMProofHelper; constructor( - l1Provider: JsonRpcProvider, - l2Provider: JsonRpcProvider, - l2OutboxAddress: string, + l2Provider: ethers.JsonRpcProvider, + l1LegacyProvider: ethers5.providers.JsonRpcProvider, + l2LegacyProvider: ethers5.providers.JsonRpcProvider, + l2RollupAddress: string, + assertionHelperAddress: string ) { - this.l1Provider = l1Provider; - this.l2Provider = l2Provider; - this.l2Outbox = new Contract( - l2OutboxAddress, - OUTBOX_ABI, - l1Provider + this.l2LegacyProvider = l2LegacyProvider; + this.rollup = new ethers5.Contract( + l2RollupAddress, + rollupAbi, + ); this.helper = new EVMProofHelper(l2Provider); + this.rollup = new ethers5.Contract(l2RollupAddress, rollupAbi, l1LegacyProvider) + this.assertionHelper = new ethers5.Contract(assertionHelperAddress, helperAbi, l2LegacyProvider) } @@ -61,22 +63,23 @@ export class ArbProofService implements IProofService { address: AddressLike, slots: bigint[] ): Promise { + console.log("input block", block) const proof = await this.helper.getProofs(block.number, address, slots); - console.log(block) return AbiCoder.defaultAbiCoder().encode( [ - 'tuple(bytes32 version, bytes32 stateRoot, bytes32 latestBlockhash)', + 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', ], [ { version: '0x0000000000000000000000000000000000000000000000000000000000000000', - stateRoot: block.stateRoot, - latestBlockhash: block.hash, - + sendRoot: block.sendRoot, + blockHash: block.blockHash, + nodeIndex: block.nodeIndex, + rlpEncodedBlock: block.rlpEncodedBlock }, proof, ] @@ -84,50 +87,50 @@ export class ArbProofService implements IProofService { } public async getProvableBlock(): Promise { - const latestBlocknr = await this.l1Provider.getBlockNumber() - - const filter: Filter = { - fromBlock: latestBlocknr - 1000, - toBlock: latestBlocknr, - address: this.l2Outbox.getAddress(), - topics: [SEND_ROOT_UPDATED_EVENT_TOPIC] - }; - - const iface = new Interface(OUTBOX_ABI) - - const logs = await this.l1Provider.getLogs(filter); - const latestLog = logs[logs.length - 1]; - - const e = iface.parseLog({ - topics: [...latestLog.topics], - data: latestLog.data - }) - - if (!e) { - throw new Error("No event found") - } - const [sendRoot, l2BlockHash] = e.args - - const l2Block = await this.l2Provider.getBlock(l2BlockHash) - - if (!l2Block) { - throw new Error("No block found") - } - - console.log("l2blockFromHash", l2Block) - console.log("stateRoot from event", sendRoot) - - const blockWithStateRoot = await this.l2Provider.send( - 'eth_getBlockByNumber', - ['0x' + l2Block.number.toString(16), false] - ); + const nodeIndex = await this.rollup.latestNodeCreated() + + const nodeEventFilter = await this.rollup.filters.NodeCreated(nodeIndex); + const nodeEvents = await this.rollup.queryFilter(nodeEventFilter) as any; + const assertion = nodeEvents[0].args!.assertion + + const sendRoot = await this.assertionHelper.getSendRoot(assertion) + const blockHash = await this.assertionHelper.getBlockHash(assertion) + + const l2blockRaw = await this.l2LegacyProvider.send('eth_getBlockByHash', [ + blockHash, + false + ]); + + const blockarray = [ + l2blockRaw.parentHash, + l2blockRaw.sha3Uncles, + l2blockRaw.miner, + l2blockRaw.stateRoot, + l2blockRaw.transactionsRoot, + l2blockRaw.receiptsRoot, + l2blockRaw.logsBloom, + ethers5.BigNumber.from(l2blockRaw.difficulty).toHexString(), + ethers5.BigNumber.from(l2blockRaw.number).toHexString(), + ethers5.BigNumber.from(l2blockRaw.gasLimit).toHexString(), + ethers5.BigNumber.from(l2blockRaw.gasUsed).toHexString(), + ethers5.BigNumber.from(l2blockRaw.timestamp).toHexString(), + l2blockRaw.extraData, + l2blockRaw.mixHash, + l2blockRaw.nonce, + ethers5.BigNumber.from(l2blockRaw.baseFeePerGas).toHexString(), + ] + + + const rlpEncodedBlock = ethers.encodeRlp(blockarray) return { - hash: l2BlockHash, - number: l2Block.number, - stateRoot: blockWithStateRoot.stateRoot, - sendRoot + rlpEncodedBlock, + sendRoot, + blockHash, + nodeIndex: nodeIndex.toNumber(), + number: ethers5.BigNumber.from(l2blockRaw.number).toNumber(), } - } + + } diff --git a/arb-gateway/src/abi/helperAbi.ts b/arb-gateway/src/abi/helperAbi.ts new file mode 100644 index 00000000..03432fee --- /dev/null +++ b/arb-gateway/src/abi/helperAbi.ts @@ -0,0 +1,170 @@ +export default [ + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct Assertion", + "name": "assertion", + "type": "tuple" + } + ], + "name": "getBlockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct Assertion", + "name": "assertion", + "type": "tuple" + } + ], + "name": "getSendRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + } +] \ No newline at end of file diff --git a/arb-gateway/src/abi/rollupABI.ts b/arb-gateway/src/abi/rollupABI.ts new file mode 100644 index 00000000..03f65871 --- /dev/null +++ b/arb-gateway/src/abi/rollupABI.ts @@ -0,0 +1,1753 @@ +export default [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "blockHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "sendRoot", + "type": "bytes32" + } + ], + "name": "NodeConfirmed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "parentNodeHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "nodeHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "executionHash", + "type": "bytes32" + }, + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "indexed": false, + "internalType": "struct RollupLib.Assertion", + "name": "assertion", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "afterInboxBatchAcc", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "wasmModuleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "inboxMaxCount", + "type": "uint256" + } + ], + "name": "NodeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + } + ], + "name": "NodeRejected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "challengeIndex", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "address", + "name": "asserter", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "challenger", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "challengedNode", + "type": "uint64" + } + ], + "name": "RollupChallengeStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "machineHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + } + ], + "name": "RollupInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "UpgradedSecondary", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "initialBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "finalBalance", + "type": "uint256" + } + ], + "name": "UserStakeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "initialBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "finalBalance", + "type": "uint256" + } + ], + "name": "UserWithdrawableFundsUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "VALIDATOR_AFK_BLOCKS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "_stakerMap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountStaked", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "latestStakedNode", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "currentChallenge", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "isStaked", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "addToDeposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "amountStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridge", + "outputs": [ + { + "internalType": "contract IBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "chainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "challengeManager", + "outputs": [ + { + "internalType": "contract IChallengeManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "challengeIndex", + "type": "uint256" + }, + { + "internalType": "address", + "name": "winningStaker", + "type": "address" + }, + { + "internalType": "address", + "name": "losingStaker", + "type": "address" + } + ], + "name": "completeChallenge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "blockHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sendRoot", + "type": "bytes32" + } + ], + "name": "confirmNextNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "confirmPeriodBlocks", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + } + ], + "name": "countStakedZombies", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + } + ], + "name": "countZombiesStakedOnChildren", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[2]", + "name": "stakers", + "type": "address[2]" + }, + { + "internalType": "uint64[2]", + "name": "nodeNums", + "type": "uint64[2]" + }, + { + "internalType": "enum MachineStatus[2]", + "name": "machineStatuses", + "type": "uint8[2]" + }, + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState[2]", + "name": "globalStates", + "type": "tuple[2]" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "secondExecutionHash", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proposedTimes", + "type": "uint256[2]" + }, + { + "internalType": "bytes32[2]", + "name": "wasmModuleRoots", + "type": "bytes32[2]" + } + ], + "name": "createChallenge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "currentChallenge", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentRequiredStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "extraChallengeTimeBlocks", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "firstUnresolvedNode", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct RollupLib.Assertion", + "name": "assertion", + "type": "tuple" + } + ], + "name": "getL2BlockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + } + ], + "name": "getNode", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "stateHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "challengeHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "confirmData", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "prevNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "deadlineBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "noChildConfirmedBeforeBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "stakerCount", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "childStakerCount", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "firstChildBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "latestChildNumber", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAtBlock", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "nodeHash", + "type": "bytes32" + } + ], + "internalType": "struct Node", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "getStaker", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "amountStaked", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "latestStakedNode", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "currentChallenge", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "isStaked", + "type": "bool" + } + ], + "internalType": "struct IRollupCore.Staker", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "stakerNum", + "type": "uint64" + } + ], + "name": "getStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inbox", + "outputs": [ + { + "internalType": "contract IInbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_stakeToken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isERC20Enabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "isStaked", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "isStakedOnLatestConfirmed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "isZombie", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastStakeBlock", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestConfirmed", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestNodeCreated", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "latestStakedNode", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "loserStakeEscrow", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumAssertionPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "nodeHash", + "type": "bytes32" + } + ], + "name": "newStakeOnExistingNode", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct RollupLib.Assertion", + "name": "assertion", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "expectedNodeHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "prevNodeInboxMaxCount", + "type": "uint256" + } + ], + "name": "newStakeOnNewNode", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "nodeHasStaker", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "outbox", + "outputs": [ + { + "internalType": "contract IOutbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "target", + "type": "uint256" + } + ], + "name": "reduceDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "rejectNextNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startIndex", + "type": "uint256" + } + ], + "name": "removeOldZombies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeWhitelistAfterFork", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeWhitelistAfterValidatorAfk", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "zombieNum", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNodes", + "type": "uint256" + } + ], + "name": "removeZombie", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeNum", + "type": "uint256" + } + ], + "name": "requireUnresolved", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "requireUnresolvedExists", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "firstUnresolvedNodeNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "latestCreatedNode", + "type": "uint64" + } + ], + "name": "requiredStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "returnOldDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rollupDeploymentBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rollupEventInbox", + "outputs": [ + { + "internalType": "contract IRollupEventInbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sequencerInbox", + "outputs": [ + { + "internalType": "contract ISequencerInbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "nodeHash", + "type": "bytes32" + } + ], + "name": "stakeOnExistingNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct RollupLib.Assertion", + "name": "assertion", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "expectedNodeHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "prevNodeInboxMaxCount", + "type": "uint256" + } + ], + "name": "stakeOnNewNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakerCount", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalWithdrawableFunds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "validatorUtils", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "validatorWalletCreator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "validatorWhitelistDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wasmModuleRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "withdrawStakerFunds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "withdrawableFunds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "zombieNum", + "type": "uint256" + } + ], + "name": "zombieAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "zombieCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "zombieNum", + "type": "uint256" + } + ], + "name": "zombieLatestStakedNode", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/arb-gateway/src/index.ts b/arb-gateway/src/index.ts index d564da73..7935e725 100644 --- a/arb-gateway/src/index.ts +++ b/arb-gateway/src/index.ts @@ -1,18 +1,28 @@ import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService, type ArbProvableBlock } from './ArbProofService.js'; +import { ethers as ethers5 } from "ethers5"; + export type ArbGateway = EVMGateway; export async function makeArbGateway( l1providerUrl: string, l2providerUrl: string, - l2OutboxAddress: string + l2RollupAddress: string, + l2AssertionHelperaddress: string, ): Promise { - const l1Provider = new JsonRpcProvider(l1providerUrl); const l2Provider = new JsonRpcProvider(l2providerUrl); + const l1LegacyProvider = new ethers5.providers.JsonRpcProvider(l1providerUrl); + const l2LegacyProvider = new ethers5.providers.JsonRpcProvider(l2providerUrl); return new EVMGateway( - await new ArbProofService(l1Provider, l2Provider, l2OutboxAddress) + await new ArbProofService( + l2Provider, + l1LegacyProvider, + l2LegacyProvider, + l2RollupAddress, + l2AssertionHelperaddress + ) ); } diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts index f08971db..b5b56b33 100644 --- a/arb-gateway/src/server.ts +++ b/arb-gateway/src/server.ts @@ -3,6 +3,8 @@ import { Command } from '@commander-js/extra-typings'; import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService } from './ArbProofService.js'; +import { ethers as ethers5 } from "ethers5"; + const program = new Command() .option('-p, --port ', 'port to listen on', '8080') @@ -17,7 +19,12 @@ const program = new Command() 'http://localhost:9545/' ) .option( - '-o --l2-outbox-address

', + '-o --l2-rollup-address
', + 'address for L2 outbox on the L1', + '' + ) + .option( + '-o --l2-assertion-helper-address
', 'address for L2 outbox on the L1', '' ); @@ -27,11 +34,22 @@ program.parse(); (async () => { const options = program.opts(); - const l1Provider = new JsonRpcProvider(options.l1ProviderUrl); const l2Provider = new JsonRpcProvider(options.l2ProviderUrl); + const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( + options.l1ProviderUrl + ); + const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( + options.l2ProviderUrl + ); const gateway = new EVMGateway( - new ArbProofService(l1Provider, l2Provider, options.l2OutboxAddress) + new ArbProofService( + l2Provider, + l1LegacyProvider, + l2LegacyProvider, + options.l2RollupAddress, + options.l2AssertionHelperAddress + ) ); const server = new Server(); gateway.add(server); diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts index 8b45fead..0d95a06f 100644 --- a/arb-gateway/src/worker.ts +++ b/arb-gateway/src/worker.ts @@ -3,26 +3,42 @@ import type { Router } from '@ensdomains/evm-gateway'; interface Env { L1_PROVIDER_URL: string; L2_PROVIDER_URL: string; - L2_OUTBOX: string; - DELAY: number; + L2_ROLLUP: string; + L2_ASSERTION_HELPER: string; } + let app: Router; async function fetch(request: Request, env: Env) { // Loading libraries dynamically as a temp work around. // Otherwise, deployment thorws "Error: Script startup exceeded CPU time limit." error if (!app) { const ethers = await import('ethers'); + const ethers5 = await import('ethers5'); + const EVMGateway = (await import('@ensdomains/evm-gateway')).EVMGateway; const ArbProofService = (await import('./ArbProofService.js')) .ArbProofService; // Set PROVIDER_URL under .dev.vars locally. Set the key as secret remotely with `wrangler secret put WORKER_PROVIDER_URL` - const { L1_PROVIDER_URL, L2_PROVIDER_URL, L2_OUTBOX, } = env; - const l1Provider = new ethers.JsonRpcProvider(L1_PROVIDER_URL); + const { L1_PROVIDER_URL, L2_PROVIDER_URL, L2_ROLLUP, L2_ASSERTION_HELPER } = env; + const l2Provider = new ethers.JsonRpcProvider(L2_PROVIDER_URL); + const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( + L1_PROVIDER_URL + ); + const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( + L2_PROVIDER_URL + ); + console.log({ L1_PROVIDER_URL, L2_PROVIDER_URL }); const gateway = new EVMGateway( - new ArbProofService(l1Provider, l2Provider, L2_OUTBOX) + new ArbProofService( + l2Provider, + l1LegacyProvider, + l2LegacyProvider, + L2_ROLLUP, + L2_ASSERTION_HELPER + ) ); const server = new Server(); diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index 70f86517..a6507131 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -2,24 +2,24 @@ pragma solidity ^0.8.17; import {StateProof, EVMProofHelper} from '@ensdomains/evm-verifier/contracts/EVMProofHelper.sol'; import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; +import {Node, IRollupCore} from '@arbitrum/nitro-contracts/src/rollup/IRollupCore.sol'; +import {RLPReader} from '@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol'; import 'hardhat/console.sol'; struct ArbWitnessData { bytes32 version; - bytes32 stateRoot; - bytes32 latestBlockhash; -} - -interface IRollup { - function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash + bytes32 sendRoot; + bytes32 blockHash; + uint64 nodeIndex; + bytes rlpEncodedBlock; } contract ArbVerifier is IEVMVerifier { //Todo replace with IFace - IRollup public immutable rollup; + IRollupCore public immutable rollup; string[] _gatewayURLs; - constructor(IOutbox _rollupAddress, string[] memory _urls) { + constructor(IRollupCore _rollupAddress, string[] memory _urls) { rollup = _rollupAddress; _gatewayURLs = _urls; } @@ -37,30 +37,32 @@ contract ArbVerifier is IEVMVerifier { (ArbWitnessData memory arbData, StateProof memory stateProof) = abi .decode(proof, (ArbWitnessData, StateProof)); - console.log('stateeRoot'); + bytes32 confirmData = keccak256( + abi.encodePacked(arbData.blockHash, arbData.sendRoot) + ); + + console.log('idx'); + console.log(arbData.nodeIndex); + // Node memory rblock = rollup.getNode(arbData.nodeIndex); + // require(rblock.confirmData == confirmData, 'confirmData mismatch'); - console.logBytes32(arbData.stateRoot); + //Todo encode block and get stateRoot + + bytes32 stateRoot = decodeBlock(arbData.rlpEncodedBlock); values = EVMProofHelper.getStorageValues( target, commands, constants, - arbData.stateRoot, + stateRoot, stateProof ); } - function prooooooof( - uint64 nodeIndex, - bytes32 blockHash, - bytes32 sendRoot - ) internal { - bytes32 confirmdata = keccak256(abi.encodePacked(blockHash, sendRoot)); - Node memory rblock = rollup.getNode(nodeIndex); - require(rblock.confirmData == confirmdata, 'confirmData mismatch'); - - bytes32 givenRoot = keccak256(abi.encodePacked(confirmData, stateRoot)); - - + function decodeBlock( + bytes memory rlpEncdoedBlock + ) internal pure returns (bytes32) { + RLPReader.RLPItem[] memory i = RLPReader.readList(rlpEncdoedBlock); + return bytes32(RLPReader.readBytes(i[3])); } } diff --git a/arb-verifier/contracts/AssertionHelper.sol b/arb-verifier/contracts/AssertionHelper.sol new file mode 100644 index 00000000..d009b186 --- /dev/null +++ b/arb-verifier/contracts/AssertionHelper.sol @@ -0,0 +1,462 @@ +/** + *Submitted for verification at Etherscan.io on 2022-12-20 +*/ + +// File: @arbitrum/nitro-contracts/src/state/Instructions.sol + +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE + + +pragma solidity ^0.8.0; + +struct Instruction { + uint16 opcode; + uint256 argumentData; +} + +library Instructions { + uint16 internal constant UNREACHABLE = 0x00; + uint16 internal constant NOP = 0x01; + uint16 internal constant RETURN = 0x0F; + uint16 internal constant CALL = 0x10; + uint16 internal constant CALL_INDIRECT = 0x11; + uint16 internal constant LOCAL_GET = 0x20; + uint16 internal constant LOCAL_SET = 0x21; + uint16 internal constant GLOBAL_GET = 0x23; + uint16 internal constant GLOBAL_SET = 0x24; + + uint16 internal constant I32_LOAD = 0x28; + uint16 internal constant I64_LOAD = 0x29; + uint16 internal constant F32_LOAD = 0x2A; + uint16 internal constant F64_LOAD = 0x2B; + uint16 internal constant I32_LOAD8_S = 0x2C; + uint16 internal constant I32_LOAD8_U = 0x2D; + uint16 internal constant I32_LOAD16_S = 0x2E; + uint16 internal constant I32_LOAD16_U = 0x2F; + uint16 internal constant I64_LOAD8_S = 0x30; + uint16 internal constant I64_LOAD8_U = 0x31; + uint16 internal constant I64_LOAD16_S = 0x32; + uint16 internal constant I64_LOAD16_U = 0x33; + uint16 internal constant I64_LOAD32_S = 0x34; + uint16 internal constant I64_LOAD32_U = 0x35; + + uint16 internal constant I32_STORE = 0x36; + uint16 internal constant I64_STORE = 0x37; + uint16 internal constant F32_STORE = 0x38; + uint16 internal constant F64_STORE = 0x39; + uint16 internal constant I32_STORE8 = 0x3A; + uint16 internal constant I32_STORE16 = 0x3B; + uint16 internal constant I64_STORE8 = 0x3C; + uint16 internal constant I64_STORE16 = 0x3D; + uint16 internal constant I64_STORE32 = 0x3E; + + uint16 internal constant MEMORY_SIZE = 0x3F; + uint16 internal constant MEMORY_GROW = 0x40; + + uint16 internal constant DROP = 0x1A; + uint16 internal constant SELECT = 0x1B; + uint16 internal constant I32_CONST = 0x41; + uint16 internal constant I64_CONST = 0x42; + uint16 internal constant F32_CONST = 0x43; + uint16 internal constant F64_CONST = 0x44; + uint16 internal constant I32_EQZ = 0x45; + uint16 internal constant I32_RELOP_BASE = 0x46; + uint16 internal constant IRELOP_EQ = 0; + uint16 internal constant IRELOP_NE = 1; + uint16 internal constant IRELOP_LT_S = 2; + uint16 internal constant IRELOP_LT_U = 3; + uint16 internal constant IRELOP_GT_S = 4; + uint16 internal constant IRELOP_GT_U = 5; + uint16 internal constant IRELOP_LE_S = 6; + uint16 internal constant IRELOP_LE_U = 7; + uint16 internal constant IRELOP_GE_S = 8; + uint16 internal constant IRELOP_GE_U = 9; + uint16 internal constant IRELOP_LAST = IRELOP_GE_U; + + uint16 internal constant I64_EQZ = 0x50; + uint16 internal constant I64_RELOP_BASE = 0x51; + + uint16 internal constant I32_UNOP_BASE = 0x67; + uint16 internal constant IUNOP_CLZ = 0; + uint16 internal constant IUNOP_CTZ = 1; + uint16 internal constant IUNOP_POPCNT = 2; + uint16 internal constant IUNOP_LAST = IUNOP_POPCNT; + + uint16 internal constant I32_ADD = 0x6A; + uint16 internal constant I32_SUB = 0x6B; + uint16 internal constant I32_MUL = 0x6C; + uint16 internal constant I32_DIV_S = 0x6D; + uint16 internal constant I32_DIV_U = 0x6E; + uint16 internal constant I32_REM_S = 0x6F; + uint16 internal constant I32_REM_U = 0x70; + uint16 internal constant I32_AND = 0x71; + uint16 internal constant I32_OR = 0x72; + uint16 internal constant I32_XOR = 0x73; + uint16 internal constant I32_SHL = 0x74; + uint16 internal constant I32_SHR_S = 0x75; + uint16 internal constant I32_SHR_U = 0x76; + uint16 internal constant I32_ROTL = 0x77; + uint16 internal constant I32_ROTR = 0x78; + + uint16 internal constant I64_UNOP_BASE = 0x79; + + uint16 internal constant I64_ADD = 0x7C; + uint16 internal constant I64_SUB = 0x7D; + uint16 internal constant I64_MUL = 0x7E; + uint16 internal constant I64_DIV_S = 0x7F; + uint16 internal constant I64_DIV_U = 0x80; + uint16 internal constant I64_REM_S = 0x81; + uint16 internal constant I64_REM_U = 0x82; + uint16 internal constant I64_AND = 0x83; + uint16 internal constant I64_OR = 0x84; + uint16 internal constant I64_XOR = 0x85; + uint16 internal constant I64_SHL = 0x86; + uint16 internal constant I64_SHR_S = 0x87; + uint16 internal constant I64_SHR_U = 0x88; + uint16 internal constant I64_ROTL = 0x89; + uint16 internal constant I64_ROTR = 0x8A; + + uint16 internal constant I32_WRAP_I64 = 0xA7; + uint16 internal constant I64_EXTEND_I32_S = 0xAC; + uint16 internal constant I64_EXTEND_I32_U = 0xAD; + + uint16 internal constant I32_REINTERPRET_F32 = 0xBC; + uint16 internal constant I64_REINTERPRET_F64 = 0xBD; + uint16 internal constant F32_REINTERPRET_I32 = 0xBE; + uint16 internal constant F64_REINTERPRET_I64 = 0xBF; + + uint16 internal constant I32_EXTEND_8S = 0xC0; + uint16 internal constant I32_EXTEND_16S = 0xC1; + uint16 internal constant I64_EXTEND_8S = 0xC2; + uint16 internal constant I64_EXTEND_16S = 0xC3; + uint16 internal constant I64_EXTEND_32S = 0xC4; + + uint16 internal constant INIT_FRAME = 0x8002; + uint16 internal constant ARBITRARY_JUMP = 0x8003; + uint16 internal constant ARBITRARY_JUMP_IF = 0x8004; + uint16 internal constant MOVE_FROM_STACK_TO_INTERNAL = 0x8005; + uint16 internal constant MOVE_FROM_INTERNAL_TO_STACK = 0x8006; + uint16 internal constant DUP = 0x8008; + uint16 internal constant CROSS_MODULE_CALL = 0x8009; + uint16 internal constant CALLER_MODULE_INTERNAL_CALL = 0x800A; + + uint16 internal constant GET_GLOBAL_STATE_BYTES32 = 0x8010; + uint16 internal constant SET_GLOBAL_STATE_BYTES32 = 0x8011; + uint16 internal constant GET_GLOBAL_STATE_U64 = 0x8012; + uint16 internal constant SET_GLOBAL_STATE_U64 = 0x8013; + + uint16 internal constant READ_PRE_IMAGE = 0x8020; + uint16 internal constant READ_INBOX_MESSAGE = 0x8021; + uint16 internal constant HALT_AND_SET_FINISHED = 0x8022; + + uint256 internal constant INBOX_INDEX_SEQUENCER = 0; + uint256 internal constant INBOX_INDEX_DELAYED = 1; + + function hash(Instruction memory inst) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("Instruction:", inst.opcode, inst.argumentData)); + } +} + +enum ValueType { + I32, + I64, + F32, + F64, + REF_NULL, + FUNC_REF, + INTERNAL_REF +} + +struct Value { + ValueType valueType; + uint256 contents; +} + +library ValueLib { + function hash(Value memory val) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("Value:", val.valueType, val.contents)); + } + + function maxValueType() internal pure returns (ValueType) { + return ValueType.INTERNAL_REF; + } + + function assumeI32(Value memory val) internal pure returns (uint32) { + uint256 uintval = uint256(val.contents); + require(val.valueType == ValueType.I32, "NOT_I32"); + require(uintval < (1 << 32), "BAD_I32"); + return uint32(uintval); + } + + function assumeI64(Value memory val) internal pure returns (uint64) { + uint256 uintval = uint256(val.contents); + require(val.valueType == ValueType.I64, "NOT_I64"); + require(uintval < (1 << 64), "BAD_I64"); + return uint64(uintval); + } + + function newRefNull() internal pure returns (Value memory) { + return Value({valueType: ValueType.REF_NULL, contents: 0}); + } + + function newI32(uint32 x) internal pure returns (Value memory) { + return Value({valueType: ValueType.I32, contents: uint256(x)}); + } + + function newI64(uint64 x) internal pure returns (Value memory) { + return Value({valueType: ValueType.I64, contents: uint256(x)}); + } + + function newBoolean(bool x) internal pure returns (Value memory) { + if (x) { + return newI32(uint32(1)); + } else { + return newI32(uint32(0)); + } + } +} + +struct StackFrame { + Value returnPc; + bytes32 localsMerkleRoot; + uint32 callerModule; + uint32 callerModuleInternals; +} + +struct StackFrameWindow { + StackFrame[] proved; + bytes32 remainingHash; +} + +library StackFrameLib { + using ValueLib for Value; + + function hash(StackFrame memory frame) internal pure returns (bytes32) { + return + keccak256( + abi.encodePacked( + "Stack frame:", + frame.returnPc.hash(), + frame.localsMerkleRoot, + frame.callerModule, + frame.callerModuleInternals + ) + ); + } + + function hash(StackFrameWindow memory window) internal pure returns (bytes32 h) { + h = window.remainingHash; + for (uint256 i = 0; i < window.proved.length; i++) { + h = keccak256(abi.encodePacked("Stack frame stack:", hash(window.proved[i]), h)); + } + } + + function peek(StackFrameWindow memory window) internal pure returns (StackFrame memory) { + require(window.proved.length == 1, "BAD_WINDOW_LENGTH"); + return window.proved[0]; + } + + function pop(StackFrameWindow memory window) internal pure returns (StackFrame memory frame) { + require(window.proved.length == 1, "BAD_WINDOW_LENGTH"); + frame = window.proved[0]; + window.proved = new StackFrame[](0); + } + + function push(StackFrameWindow memory window, StackFrame memory frame) internal pure { + StackFrame[] memory newProved = new StackFrame[](window.proved.length + 1); + for (uint256 i = 0; i < window.proved.length; i++) { + newProved[i] = window.proved[i]; + } + newProved[window.proved.length] = frame; + window.proved = newProved; + } +} + +struct ValueArray { + Value[] inner; +} + +library ValueArrayLib { + function get(ValueArray memory arr, uint256 index) internal pure returns (Value memory) { + return arr.inner[index]; + } + + function set( + ValueArray memory arr, + uint256 index, + Value memory val + ) internal pure { + arr.inner[index] = val; + } + + function length(ValueArray memory arr) internal pure returns (uint256) { + return arr.inner.length; + } + + function push(ValueArray memory arr, Value memory val) internal pure { + Value[] memory newInner = new Value[](arr.inner.length + 1); + for (uint256 i = 0; i < arr.inner.length; i++) { + newInner[i] = arr.inner[i]; + } + newInner[arr.inner.length] = val; + arr.inner = newInner; + } + + function pop(ValueArray memory arr) internal pure returns (Value memory popped) { + popped = arr.inner[arr.inner.length - 1]; + Value[] memory newInner = new Value[](arr.inner.length - 1); + for (uint256 i = 0; i < newInner.length; i++) { + newInner[i] = arr.inner[i]; + } + arr.inner = newInner; + } +} + +struct ValueStack { + ValueArray proved; + bytes32 remainingHash; +} + +library ValueStackLib { + using ValueLib for Value; + using ValueArrayLib for ValueArray; + + function hash(ValueStack memory stack) internal pure returns (bytes32 h) { + h = stack.remainingHash; + uint256 len = stack.proved.length(); + for (uint256 i = 0; i < len; i++) { + h = keccak256(abi.encodePacked("Value stack:", stack.proved.get(i).hash(), h)); + } + } + + function peek(ValueStack memory stack) internal pure returns (Value memory) { + uint256 len = stack.proved.length(); + return stack.proved.get(len - 1); + } + + function pop(ValueStack memory stack) internal pure returns (Value memory) { + return stack.proved.pop(); + } + + function push(ValueStack memory stack, Value memory val) internal pure { + return stack.proved.push(val); + } +} + +enum MachineStatus { + RUNNING, + FINISHED, + ERRORED, + TOO_FAR +} + +struct Machine { + MachineStatus status; + ValueStack valueStack; + ValueStack internalStack; + StackFrameWindow frameStack; + bytes32 globalStateHash; + uint32 moduleIdx; + uint32 functionIdx; + uint32 functionPc; + bytes32 modulesRoot; +} + +library MachineLib { + using StackFrameLib for StackFrameWindow; + using ValueStackLib for ValueStack; + + function hash(Machine memory mach) internal pure returns (bytes32) { + // Warning: the non-running hashes are replicated in Challenge + if (mach.status == MachineStatus.RUNNING) { + return + keccak256( + abi.encodePacked( + "Machine running:", + mach.valueStack.hash(), + mach.internalStack.hash(), + mach.frameStack.hash(), + mach.globalStateHash, + mach.moduleIdx, + mach.functionIdx, + mach.functionPc, + mach.modulesRoot + ) + ); + } else if (mach.status == MachineStatus.FINISHED) { + return keccak256(abi.encodePacked("Machine finished:", mach.globalStateHash)); + } else if (mach.status == MachineStatus.ERRORED) { + return keccak256(abi.encodePacked("Machine errored:")); + } else if (mach.status == MachineStatus.TOO_FAR) { + return keccak256(abi.encodePacked("Machine too far:")); + } else { + revert("BAD_MACH_STATUS"); + } + } +} +struct GlobalState { + bytes32[2] bytes32Vals; + uint64[2] u64Vals; +} + +library GlobalStateLib { + uint16 internal constant BYTES32_VALS_NUM = 2; + uint16 internal constant U64_VALS_NUM = 2; + + function hash(GlobalState memory state) internal pure returns (bytes32) { + return + keccak256( + abi.encodePacked( + "Global state:", + state.bytes32Vals[0], + state.bytes32Vals[1], + state.u64Vals[0], + state.u64Vals[1] + ) + ); + } + + function getBlockHash(GlobalState memory state) internal pure returns (bytes32) { + return state.bytes32Vals[0]; + } + + function getSendRoot(GlobalState memory state) internal pure returns (bytes32) { + return state.bytes32Vals[1]; + } + + function getInboxPosition(GlobalState memory state) internal pure returns (uint64) { + return state.u64Vals[0]; + } + + function getPositionInMessage(GlobalState memory state) internal pure returns (uint64) { + return state.u64Vals[1]; + } + + function isEmpty(GlobalState calldata state) internal pure returns (bool) { + return (state.bytes32Vals[0] == bytes32(0) && + state.bytes32Vals[1] == bytes32(0) && + state.u64Vals[0] == 0 && + state.u64Vals[1] == 0); + } +} + +struct ExecutionState { + GlobalState globalState; + MachineStatus machineStatus; +} + +struct Assertion { + ExecutionState beforeState; + ExecutionState afterState; + uint64 numBlocks; +} + +contract AssertionHelper{ + function getBlockHash(Assertion calldata assertion) external pure returns(bytes32 hash){ + hash = GlobalStateLib.getBlockHash(assertion.afterState.globalState); + } + function getSendRoot(Assertion calldata assertion) external pure returns(bytes32 root){ + root = GlobalStateLib.getSendRoot(assertion.afterState.globalState); + } +} \ No newline at end of file diff --git a/arb-verifier/package.json b/arb-verifier/package.json index f5dbaa7a..014c6957 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -24,6 +24,7 @@ "@types/supertest": "^2.0.14", "chai": "^4.2.0", "ethers": "^6.8.0", + "ethers5": "npm:ethers@5.7.2", "express": "^4.18.2", "ganache": "^7.9.1", "hardhat": "^2.16.0", @@ -40,6 +41,8 @@ "dependencies": { "@ensdomains/evm-verifier": "^0.1.0", "@eth-optimism/contracts": "^0.6.0", - "@eth-optimism/contracts-bedrock": "^0.16.2" + "@eth-optimism/contracts-bedrock": "^0.16.2", + "@arbitrum/nitro-contracts": "^1.1.0" + } } diff --git a/arb-verifier/test/abi/helperAbi.ts b/arb-verifier/test/abi/helperAbi.ts new file mode 100644 index 00000000..03432fee --- /dev/null +++ b/arb-verifier/test/abi/helperAbi.ts @@ -0,0 +1,170 @@ +export default [ + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct Assertion", + "name": "assertion", + "type": "tuple" + } + ], + "name": "getBlockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct Assertion", + "name": "assertion", + "type": "tuple" + } + ], + "name": "getSendRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + } +] \ No newline at end of file diff --git a/arb-verifier/test/abi/rollupABI.ts b/arb-verifier/test/abi/rollupABI.ts new file mode 100644 index 00000000..03f65871 --- /dev/null +++ b/arb-verifier/test/abi/rollupABI.ts @@ -0,0 +1,1753 @@ +export default [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "blockHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "sendRoot", + "type": "bytes32" + } + ], + "name": "NodeConfirmed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "parentNodeHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "nodeHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "executionHash", + "type": "bytes32" + }, + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "indexed": false, + "internalType": "struct RollupLib.Assertion", + "name": "assertion", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "afterInboxBatchAcc", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "wasmModuleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "inboxMaxCount", + "type": "uint256" + } + ], + "name": "NodeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + } + ], + "name": "NodeRejected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "challengeIndex", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "address", + "name": "asserter", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "challenger", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "challengedNode", + "type": "uint64" + } + ], + "name": "RollupChallengeStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "machineHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + } + ], + "name": "RollupInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "UpgradedSecondary", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "initialBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "finalBalance", + "type": "uint256" + } + ], + "name": "UserStakeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "initialBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "finalBalance", + "type": "uint256" + } + ], + "name": "UserWithdrawableFundsUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "VALIDATOR_AFK_BLOCKS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "_stakerMap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountStaked", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "latestStakedNode", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "currentChallenge", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "isStaked", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "addToDeposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "amountStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridge", + "outputs": [ + { + "internalType": "contract IBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "chainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "challengeManager", + "outputs": [ + { + "internalType": "contract IChallengeManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "challengeIndex", + "type": "uint256" + }, + { + "internalType": "address", + "name": "winningStaker", + "type": "address" + }, + { + "internalType": "address", + "name": "losingStaker", + "type": "address" + } + ], + "name": "completeChallenge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "blockHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sendRoot", + "type": "bytes32" + } + ], + "name": "confirmNextNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "confirmPeriodBlocks", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + } + ], + "name": "countStakedZombies", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + } + ], + "name": "countZombiesStakedOnChildren", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[2]", + "name": "stakers", + "type": "address[2]" + }, + { + "internalType": "uint64[2]", + "name": "nodeNums", + "type": "uint64[2]" + }, + { + "internalType": "enum MachineStatus[2]", + "name": "machineStatuses", + "type": "uint8[2]" + }, + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState[2]", + "name": "globalStates", + "type": "tuple[2]" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "secondExecutionHash", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proposedTimes", + "type": "uint256[2]" + }, + { + "internalType": "bytes32[2]", + "name": "wasmModuleRoots", + "type": "bytes32[2]" + } + ], + "name": "createChallenge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "currentChallenge", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentRequiredStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "extraChallengeTimeBlocks", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "firstUnresolvedNode", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct RollupLib.Assertion", + "name": "assertion", + "type": "tuple" + } + ], + "name": "getL2BlockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + } + ], + "name": "getNode", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "stateHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "challengeHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "confirmData", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "prevNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "deadlineBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "noChildConfirmedBeforeBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "stakerCount", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "childStakerCount", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "firstChildBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "latestChildNumber", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAtBlock", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "nodeHash", + "type": "bytes32" + } + ], + "internalType": "struct Node", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "getStaker", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "amountStaked", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "latestStakedNode", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "currentChallenge", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "isStaked", + "type": "bool" + } + ], + "internalType": "struct IRollupCore.Staker", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "stakerNum", + "type": "uint64" + } + ], + "name": "getStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inbox", + "outputs": [ + { + "internalType": "contract IInbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_stakeToken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isERC20Enabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "isStaked", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "isStakedOnLatestConfirmed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "isZombie", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastStakeBlock", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestConfirmed", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestNodeCreated", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "latestStakedNode", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "loserStakeEscrow", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumAssertionPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "nodeHash", + "type": "bytes32" + } + ], + "name": "newStakeOnExistingNode", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct RollupLib.Assertion", + "name": "assertion", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "expectedNodeHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "prevNodeInboxMaxCount", + "type": "uint256" + } + ], + "name": "newStakeOnNewNode", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "nodeHasStaker", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "outbox", + "outputs": [ + { + "internalType": "contract IOutbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "target", + "type": "uint256" + } + ], + "name": "reduceDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "rejectNextNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startIndex", + "type": "uint256" + } + ], + "name": "removeOldZombies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeWhitelistAfterFork", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeWhitelistAfterValidatorAfk", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "zombieNum", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNodes", + "type": "uint256" + } + ], + "name": "removeZombie", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeNum", + "type": "uint256" + } + ], + "name": "requireUnresolved", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "requireUnresolvedExists", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "firstUnresolvedNodeNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "latestCreatedNode", + "type": "uint64" + } + ], + "name": "requiredStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "returnOldDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rollupDeploymentBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rollupEventInbox", + "outputs": [ + { + "internalType": "contract IRollupEventInbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sequencerInbox", + "outputs": [ + { + "internalType": "contract ISequencerInbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "nodeNum", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "nodeHash", + "type": "bytes32" + } + ], + "name": "stakeOnExistingNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "beforeState", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes32[2]", + "name": "bytes32Vals", + "type": "bytes32[2]" + }, + { + "internalType": "uint64[2]", + "name": "u64Vals", + "type": "uint64[2]" + } + ], + "internalType": "struct GlobalState", + "name": "globalState", + "type": "tuple" + }, + { + "internalType": "enum MachineStatus", + "name": "machineStatus", + "type": "uint8" + } + ], + "internalType": "struct RollupLib.ExecutionState", + "name": "afterState", + "type": "tuple" + }, + { + "internalType": "uint64", + "name": "numBlocks", + "type": "uint64" + } + ], + "internalType": "struct RollupLib.Assertion", + "name": "assertion", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "expectedNodeHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "prevNodeInboxMaxCount", + "type": "uint256" + } + ], + "name": "stakeOnNewNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakerCount", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalWithdrawableFunds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "validatorUtils", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "validatorWalletCreator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "validatorWhitelistDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wasmModuleRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "withdrawStakerFunds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "withdrawableFunds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "zombieNum", + "type": "uint256" + } + ], + "name": "zombieAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "zombieCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "zombieNum", + "type": "uint256" + } + ], + "name": "zombieLatestStakedNode", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts index 5bb2725b..73e4b71f 100644 --- a/arb-verifier/test/arbPlayground.ts +++ b/arb-verifier/test/arbPlayground.ts @@ -1,79 +1,41 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable prettier/prettier */ -import { EVMProofHelper } from "@ensdomains/evm-gateway" -import { Contract, ethers } from "ethers" -import { ArbProofService } from "@ensdomains/arb-gateway" +import { AbiCoder, Contract, Interface, JsonRpcProvider, ethers } from "ethers" +import { ethers as ethers5 } from "ethers5" const test1Contract = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" +import rollupAbi from "./abi/rollupABI" +import helperAbi from "./abi/helperAbi" +import { ArbProofService } from "@ensdomains/arb-gateway" + const rpcMainnet = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" const rpcArbitrum = "https://arb-goerli.g.alchemy.com/v2/k2Vp4opdLW3ueLYaTPndSFtx4m7T3s71" const outboxGoerli = "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049" const rollupAddr = "0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17" +const helperAddr = "0xC2ffb7bB521f7C48aAA3Ee0e3E35D5ca1A6CE53A" + + const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) const l2Provider = new ethers.JsonRpcProvider(rpcArbitrum, { chainId: 421613, name: "arbi goelri" }) -export const arbPlayground = async () => { - console.log("go") - - const eventTopic = "0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748" - - const latestBlocknr = await l1Provider.getBlockNumber() - const latestBlock = await l1Provider.getBlock(latestBlocknr) - - console.log({ - blockNr: latestBlock?.number, - hash: latestBlock?.hash - }) - - const abi = [ - "event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash)", - ]; - - - const curerntB = await l1Provider.getBlockNumber() - - const filter = { - fromBlock: curerntB - 1000, - toBlock: curerntB, - address: outboxGoerli, - topics: [eventTopic] - }; - - const iface = new ethers.Interface(abi) - - - - const logs = await l1Provider.getLogs(filter); - const latestLog = logs[logs.length - 1]; - - const e = iface.parseLog({ - topics: [...latestLog.topics], - data: latestLog.data - }) - - const [outputRoot, l2BlockHash] = e.args - - console.log(outputRoot, l2BlockHash) - const l2Block = await l2Provider.getBlock(l2BlockHash) - - const targetBlocknr = l2Block.number - - const proofHelper = new EVMProofHelper(l2Provider) - - const proofs = await proofHelper.getProofs(targetBlocknr, test1Contract, [0n]) - - console.log(proofs) - - -} const runProofService = async () => { + + const l2Provider = new JsonRpcProvider(rpcArbitrum); + const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( + rpcMainnet + ); + const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( + rpcArbitrum + ); const s = new ArbProofService( - l1Provider, l2Provider, - outboxGoerli + l1LegacyProvider, + l2LegacyProvider, + rollupAddr, + helperAddr ); const getBlock = await s.getProvableBlock() @@ -83,45 +45,60 @@ const runProofService = async () => { } -const readFromContract = async () => { - - const abi = [ - "function latest() view returns (uint256)", - "function name() view returns (string memory)", - ] - const c = new Contract(test1Contract, abi, l2Provider) - - const latest = await c.latest() - console.log(latest.toString()) -} //arbPlayground() //readFromContract() runProofService() const withRollup = async () => { - /* const rollup = new Contract(rollupAddr, rollupAbi, l1Provider) - const helper = new Contract() - - const nodeIdx = await rollup.latestNodeCreated() - - const nodeEventFilter = await rollup.filters.NodeCreated(nodeIdx); - const nodeEvents = await rollup.queryFilter(nodeEventFilter); - const assertion = nodeEvents[0].args!.assertion - - const sendRoot = await helper.getSendRoot(assertion) - const blockHash = await helper.getBlockHash(assertion) - const l2blockRaw = await l2provider.send('eth_getBlockByHash', [ - blockHash, - false - ]); - - console.log(nodeIdx.toString()) */ + const rollup = new ethers5.Contract(rollupAddr, rollupAbi, new ethers5.providers.JsonRpcProvider(rpcMainnet)) + const helper = new ethers5.Contract(helperAddr, helperAbi, new ethers5.providers.JsonRpcProvider(rpcArbitrum)) + + const nodeIdx = await rollup.latestNodeCreated() + + const nodeEventFilter = await rollup.filters.NodeCreated(nodeIdx); + const nodeEvents = await rollup.queryFilter(nodeEventFilter) as any; + const assertion = nodeEvents[0].args!.assertion + + const sendRoot = await helper.getSendRoot(assertion) + const blockHash = await helper.getBlockHash(assertion) + + const l2blockRaw = await l2Provider.send('eth_getBlockByHash', [ + blockHash, + false + ]); + const stateRoot = l2blockRaw.stateRoot + console.log(l2blockRaw) + const blockarray = [ + l2blockRaw.parentHash, + l2blockRaw.sha3Uncles, + l2blockRaw.miner, + l2blockRaw.stateRoot, + l2blockRaw.transactionsRoot, + l2blockRaw.receiptsRoot, + l2blockRaw.logsBloom, + ethers5.BigNumber.from(l2blockRaw.difficulty).toHexString(), + ethers5.BigNumber.from(l2blockRaw.number).toHexString(), + ethers5.BigNumber.from(l2blockRaw.gasLimit).toHexString(), + ethers5.BigNumber.from(l2blockRaw.gasUsed).toHexString(), + ethers5.BigNumber.from(l2blockRaw.timestamp).toHexString(), + l2blockRaw.extraData, + l2blockRaw.mixHash, + l2blockRaw.nonce, + ethers5.BigNumber.from(l2blockRaw.baseFeePerGas).toHexString(), + ] + + + const encodedBlockArray = ethers.encodeRlp(blockarray) + const slot = ethers.ZeroHash + + console.log(encodedBlockArray) + + console.log(nodeIdx.toString()) + + console.log(nodeIdx.toString()) } //withRollup() -const weProof = () => { - -} \ No newline at end of file diff --git a/arb-verifier/test/gist.ts b/arb-verifier/test/gist.ts new file mode 100644 index 00000000..26af9c71 --- /dev/null +++ b/arb-verifier/test/gist.ts @@ -0,0 +1,123 @@ +/* eslint-disable prettier/prettier *//* +import { Server } from '@chainlink/ccip-read-server'; +import { Command } from 'commander'; +import { ethers } from 'ethers'; + +const IResolverAbi = require('@ensdomains/arb-resolver-contracts/artifacts/contracts/l1/ArbitrumResolverStub.sol/IResolverService.json').abi +const helperAbi = require('@ensdomains/arb-resolver-contracts/artifacts/contracts/l1/AssertionHelper.sol/AssertionHelper.json').abi + +const rollupAbi = require('../src/rollup.json') +const { BigNumber } = ethers +const program = new Command(); +program + .option('-r --l2_resolver_address
', 'RESOLVER_ADDRESS') + .option('-h --helper_address ', 'HELPER_ADDRESS') + .option('-l1p --l1_provider_url ', 'L1_PROVIDER_URL', 'http://localhost:8545') + .option('-l2p --l2_provider_url ', 'L2_PROVIDER_URL', 'http://localhost:8547') + .option('-l1c --l1_chain_id ', 'L1_CHAIN_ID', '1337') + .option('-l2c --l2_chain_id ', 'L2_CHAIN_ID', '412346') + .option('-ru --rollup_address ', 'ROLLUP_ADDRESS', '0x7456c45bfd495b7bcf424c0a7993a324035f682f') + .option('-d --debug', 'debug', false) + // + .option('-v --verification_option ', 'latest|finalized|number_of_blocks', 'latest') + .option('-p --port ', 'Port number to serve on', '8081'); +program.parse(process.argv); +const options = program.opts(); +console.log({ options }) +const { l1_provider_url, l2_provider_url, rollup_address, helper_address, l2_resolver_address, l1_chain_id, l2_chain_id, debug, verification_option } = options +if (helper_address === undefined || l2_resolver_address === undefined) { + throw ('Must specify --l2_resolver_address and --helper_address') +} + +const l1provider = new ethers.providers.JsonRpcProvider(l1_provider_url); +const l2provider = new ethers.providers.JsonRpcProvider(l2_provider_url); +const rollup = new ethers.Contract(rollup_address, rollupAbi, l1provider); +const helper = new ethers.Contract(helper_address, helperAbi, l1provider); +const server = new Server(); + +server.add(IResolverAbi, [ + { + type: 'addr(bytes32)', + func: async ([node], { to, data: _callData }) => { + const addrSlot = ethers.utils.keccak256(node + '00'.repeat(31) + '01'); + if (debug) { + console.log(1, { node, to, _callData, l1_provider_url, l2_provider_url, l2_resolver_address, l1_chain_id, l2_chain_id }) + const blockNumber = (await l2provider.getBlock('latest')).number + console.log(2, { blockNumber, addrSlot }) + let addressData + try { + addressData = await l2provider.getStorageAt(l2_resolver_address, addrSlot) + } catch (e) { + console.log(3, { e }) + } + console.log(4, { + addressData + }) + } + let nodeIndex, ago + if (verification_option === 'latest') { + nodeIndex = await rollup.latestNodeCreated() + } else { + if (verification_option === 'finalized') { + ago = 0 + } else { + ago = parseInt(verification_option) + } + nodeIndex = (await rollup.latestConfirmed()).sub(ago) + } + console.log({ verification_option, nodeIndex: nodeIndex.toString(), ago }) + const nodeEventFilter = await rollup.filters.NodeCreated(nodeIndex); + const nodeEvents = await rollup.queryFilter(nodeEventFilter); + const assertion = nodeEvents[0].args!.assertion + const sendRoot = await helper.getSendRoot(assertion) + const blockHash = await helper.getBlockHash(assertion) + const l2blockRaw = await l2provider.send('eth_getBlockByHash', [ + blockHash, + false + ]); + console.log(5, { l2blockRaw }) + const stateRoot = l2blockRaw.stateRoot + const blockarray = [ + l2blockRaw.parentHash, + l2blockRaw.sha3Uncles, + l2blockRaw.miner, + l2blockRaw.stateRoot, + l2blockRaw.transactionsRoot, + l2blockRaw.receiptsRoot, + l2blockRaw.logsBloom, + BigNumber.from(l2blockRaw.difficulty).toHexString(), + BigNumber.from(l2blockRaw.number).toHexString(), + BigNumber.from(l2blockRaw.gasLimit).toHexString(), + BigNumber.from(l2blockRaw.gasUsed).toHexString(), + BigNumber.from(l2blockRaw.timestamp).toHexString(), + l2blockRaw.extraData, + l2blockRaw.mixHash, + l2blockRaw.nonce, + BigNumber.from(l2blockRaw.baseFeePerGas).toHexString(), + ] + const encodedBlockArray = ethers.utils.RLP.encode(blockarray) + const slot = ethers.utils.keccak256(node + '00'.repeat(31) + '01'); + const proof = await l2provider.send('eth_getProof', [ + l2_resolver_address, + [slot], + { blockHash } + ]); + console.log(6, JSON.stringify(proof, null, 2)) + const accountProof = ethers.utils.RLP.encode(proof.accountProof) + const storageProof = ethers.utils.RLP.encode((proof.storageProof as any[]).filter((x) => x.key === slot)[0].proof) + const finalProof = { + nodeIndex, + blockHash, + sendRoot, + encodedBlockArray, + stateTrieWitness: accountProof, + stateRoot, + storageTrieWitness: storageProof, + }; + console.log(7, { finalProof }) + return [finalProof] + } + } +]); +const app = server.makeApp('/'); +app.listen(options.port); */ \ No newline at end of file diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts index cd539a74..af634ad6 100644 --- a/arb-verifier/test/testMockVerifier.ts +++ b/arb-verifier/test/testMockVerifier.ts @@ -1,30 +1,9 @@ /* eslint-disable prettier/prettier */ import hardhat from "hardhat" -const proof = "0x00000000000000000000000000000000000000000000000000000000000000008d2264fa219fdb40b2ee0d22088cfd6288ceed53d785bd3b92045ecbf1128bbfce8b27002d58a56ea49da88b9f2f40c5c1707d487cedcb3d1c1301108957a523000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000ce0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000214f90211a0e1aa1538de15fee8fbec6777d8d5e9d65d1e060fd8dc040d68ea31efad3eb39aa05287ff209c82b2e0a740fd3982c237242f0fe1eb398988180b7e491c7329a2e7a059e4b35315eea107f328a1c6eb314454cfaabae0e1b4260ac4151588df2be3daa0372fd183d1745122ce61b6743e997936411f0ac0df8355013d43602240535004a0f6c40dee84f732a68e185f7f64f2391027eb6ebf487955e786d4f98ff4442caea088d5aa571004e2e27d611ebd041b6232195eac6094fe74d5511bcd040097bfe3a0f85d689c0b2a7f419624d51f1560b3348991da966d144ed781b68a80a3700d1da03153a85f779de65c0b4471958a3af1cb9de09b42e005d31ae599c9eb5cc154a7a0a09dd18e6e6bc67e7cc04d35732df7fa07a3c54f0dcd51fab20e22769bca8880a0c69c333d45b18cc3d8639eba6db19e41f68d020760de3efe7b5d12b2dbd2554da093afefb76492696942323ed7d4edbd3f005c516a043705a057eab6cf38706015a0048d0f68a45347442bc530e9e2a4c00efbe6f7aeccce3a5ee5b15f18748da056a058872c6315c0cc47b372d3b46c5b01874f7e7192bb3047e1abf40fe4c98d4a3ca03bc05d3f18c44295f35ff77e72312ea52f0739b6b7ce06eca337c19276856570a0b50d1beebfdf3cebe18d22ef91c8721559777f1b44daa20c605458f4a88d72d5a0e3d4e64d4582f2a5ebba2c20efc044e594837ca2193c3881ac9f23b59b1b2c36800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a04d2d3acde5e73e71c054b1c299e0d4b652d3ed5ea59e13e4a10d8ebb622a37f8a00b73d7ef6f04cc2c4ea7d48f11b55604245a6edac69f8b39bf16a6473de68ef6a05e9a40fa87d4c13d64377d62e8d82e2e12f880460860b3f87973d5455726895ba0bdf32fa7dbc121632f0ace3d74aa75395b186591d201428e22f4a1853a9bf933a0df14bbaed7fc72d1064a4f4304e8932756b912c396789bb9f4a7e8f00ad766a7a098ef3223331d93b1b0f24d41bb7dfbbd21826bf9b88ff8d45c337b849e9480f3a0ac6c17cfbd89640d2e325a3bfb6fb72a46bd046c7598ef50e9ddf64f70c63ae5a090ef9f5f56e156d9ff46f3dbd18bd80b47eb2861b26d198ede41916620c71419a09cd5b5ad94ce49fa128daec1b352a368f347ccba29d34b78b50c509e7592bc9ca0cdd7b9ebeff6cccbaf9a60f675e13c1859169024c29aae0df5be45495e95df0ea0124369f6f1601ac83ea28008e4dfabce24c16ac7ec9ebdb9a93ccb2ebb668a1aa0c46e7a3d0605cc9fb75d4315a44124aa4319371aabc35352f51fc70743d0e71ba0ebabcbcf9ce3edf181b4a1c4d12d54527c82b93f389d67b0ad963c1277d97d5fa05fb80bdb0f96b9028867c00b7ddcab745d2e21e453ca2719b189d0d5dd8af250a0e798fafb662769064916ab0676b6ad799367f6aea27415e7885538446ea52e39a039c4eb5e88bd412b7853096381107ae4a4f00ede6f1e29b011564c847e8b7ecf800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a0a9ceb76a2b4f2309543944b62f7e75d2995e5c97042ce92eb1eda15bcd412116a0776aa21a0f797ade2d2ecdb909c10baba1fc5f28124c44d439b280c0cc6a5941a03a97e86eec4a6c4169092d064722c9d6714fa4ed84147d25307338c3da086687a03dd02cfdb56f8c0c7142032eff73674b1e5590eb463405b901be7ce5ca89ab86a0ec3d2ae4ad26e3e7ec11e3a9a9e247049cb417392d165a86a9d2a0a21b21755da0dc095aff6e8ca9a3bb742b910077283914484cc96a1a9536407653a64a870feea0b44d66cb14c00fe4923a8175d254d3148e7e3291a4c666c46848814678e32f4fa0370b6fe91f198215188021ebfd613fd854db4e1a70db550b2865b169217d29c2a03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a0b946076d77c0197c1e4411a1255e80ea6a378d9de26797a4f770e22ef4ee414da0eb1127bd741ea202b9f1aeea078f0266be3749b7e0ff4b514dd85b249197209ca00e618170c166e68fab3a858bd2a14276d035721b6d7e961ee7fd7ff6a0c6f73c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a0b88cbbd015422511ba3c9977ca62bdaa4de6c437f85ee542d8ce60870f0b3310a09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf18688000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e99800000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053f851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a0000000000000000000000000000000000000000000000000000000000" - -const p = { - stateTrieWitness: [ - '0xf90211a0ecbb5930d0d44a48876bc9f92d5f16b470858adacfefb31bf241861ef82ef365a05dd3908206bdc8321a8f5aebbf3a2745b8c528eedab13f6983d38743feb4b790a0a1adb1d322267351fc37499c5b057f76a0622969d5c542bb873df2f06a69c12fa05385b6566b6b1e6a3128eea7c09121cc50d364e4c22c6a8a3a7629ae10d05168a07a02845466ee54b429767f479ee0b53184931f07b4d4ce2dc2414d718dc4e24fa08eb46baacdf11591d3fb014f6230b26bb34b95fc3341b8ca4d350e7f9ea635c6a004f323a1c155647a17177821557bc9876a5025bb6c4cf24568e554573628d455a06b2db470cb6422aa00a4052882a1e58c57f6fc02e8e2c7595ecbfb460190211ea08b6ac77a8d9424d56bdee393bd9eda2d9291bc9e70cab606e02d71e8e4574719a048d22ea0362f52a6f6a50b9f0061513017fe785496382b386fc90a80d459df58a0c0b6b51c6f35615a5ef75651dad24dac9e699c80846380f6e21e48e75d975eb6a0d94c2d494ee20548f94eb5a183d393236a04820b46c1927da5e79f14c9608051a0fb3908d2b05acbf87d5b6dbb4e514ba28fc74826ec01770ab611a6d5b632c9b1a0d3d24aff6ae8582fe0333196ebb5cdba6c7930abda3057af8bbe781c2a5f4edfa01e02189b43b74ff71e69cd1ca81385c071ae7caaef53ab69bad97b85ff07a286a0b5aff837cc8b99fa249712c294682976b220d2124125828a0b0a39bcbaa95a6b80', - '0xf90211a06bfc6112fb2883d0436836248c9f4f5c5db650f855302860605fe75c9f0c576da0f5bdabdb6c201b8d76d34e0db8b37942aa74e20e20a1ef3f7c8a6110ca085a47a0327122b35929022c10e99ebe6ae898c3c467aaa94b4a412114a01d763aeb8a43a0309dced8e39f6629374db60e676d770402d67268983f2a99928229b193ec9990a0c77809805f1ddc8b72c511bd815537a4c91353bfba79520b7e25d8a0b2a3bfdaa0575afb490f48bb7e2a13f0ba7ef479535fb3f38bc8243b24d82ceaf8e5c7d347a03079ffc2dd4d07e23208c3b82b9bf07fa0dcfb2c891bbea7fd2c7ba0b0aae0eba04358d6a31475be7c04b22e4b4adf9c619c787d04c2cb03045901443b8a81f3c9a0f2a2cdbfb7a0968d0b746312fa43d18406a7fdded3a2a342ba38936512c5d0e4a0640ebcb60df8bd6f92bc17058e7832507a8c23bf0f4eb003d7b29fc438ec0c6da0393953ea1f65571d25d5bb6a2c334c834a99f29e0392db2af8edee82d470b001a0133d400c51da299c5ef4987455429b5f2ff64827212fa310cd3cdecf8ad8011ea07c8f8a8556d88b38a77131b6031bfa534a5edaa6dfcaef9f87adcf83e7f8ddaba0b99b0e42c4e0b5bde981ab210d6d837574ae23cb5c7056b8aa5aa42cbe2d1c5ba0f8c8efe9f6d5f92d47bfbdd572e914b13eff156753135061d73a243455028099a06c46452fffcf604574c452dd4d3685e58fb8b6ee2bf2a9914b3c406e73d332d580', - '0xf90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a0fda81ec1dbc32b3ae5d2c10eba02eaf359ab595b05937cd7ec8818bb7a6b5978a037b35d50b93c3f9463523ace45fb1c6407cb4780cbc2cd4a0ea46001a9456f6ca03a97e86eec4a6c4169092d064722c9d6714fa4ed84147d25307338c3da086687a07d0cdfc2eb7fda8d62d4925f54254ea5a87b1251ab32ea8dfdfacc98bcf9af7ea0ec3d2ae4ad26e3e7ec11e3a9a9e247049cb417392d165a86a9d2a0a21b21755da0dc095aff6e8ca9a3bb742b910077283914484cc96a1a9536407653a64a870feea039766bc9e47cd08ebd60ff1d959a683ff2b85f920ad5c0e86f558a13ae6172e2a0d7fbe3279aba6f18de6def2e63cc179c825c08a62dbd0ea2e810c2c139824e7ca03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a022f6c7f923798d45e158df64560f49e8d392a6d592b1a225108b6fc062a74acaa009e5cc3419f31c72e01e6ee35504faac4a7a70d77877172bc0cded5cd8e2edc9a06fe35e0a65ec911bb82a17f16a469d797932978e67acc7e1165323937eeb5e1380', - '0xf90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a0b88cbbd015422511ba3c9977ca62bdaa4de6c437f85ee542d8ce60870f0b3310a09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf186880', - '0xf901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e9980', - '0xf8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb8' - ], - storageProofs: [ - [ - '0xf8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580', - '0xf851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080', - '0xe2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a' - ], - [ - '0xf8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580', - '0xf843a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a1a05361746f7368690000000000000000000000000000000000000000000000000e' - ] - ], - stateRoot: '0x5eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0ac' -} +const proof = "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000000c51f1f2f3c5c2b0319c1e2732e5ab10d79b0084f8a33322a7a43188f4e4068982a34ce1cebd426e17aa8e9ae10b135ef29f7eabb5435f65ff46d1724b907fc24000000000000000000000000000000000000000000000000000000000000302300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000227f90224a0ef78c4de58e03cff1173bb2f18e11da6ad1683d0473f3259fffb457769f10ef1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794a4b000000000000000000073657175656e636572a08809ba979cdeacad684901b8cec6df53792aa24aa8b715d28d8fae490a798bcca011a52c4debf8eef8ad4aa2fe749fd7c394cb5398b2c3315d339dde3b09a7c373a0aaa709602e0d328533f490628e6d62ce3c3fb3c8f12007782f3b3361bbdddf0cb9010020800204028010020020000006080889880a009000000020018005900081404800000020048231000080a0000800000b00d002310421000000000000020180800c000244824400201081000801000358000000ac100288000800a520300000208008000888000012040248422c10a0009008428002001820300240000120060020420400000142008810103a141002c0003260020b94008200401040001210048040488800a02000078020000014000210048300000b00811008008003000400801004000030202080001058001000018002d900008024480010000000146064400400a0011108022d4240080a6c000400010080c058100101c800000100001001840352e7e28704000000000000831a8c74846559152aa0c51f1f2f3c5c2b0319c1e2732e5ab10d79b0084f8a33322a7a43188f4e406898a0000000000000afa70000000000999b7f000000000000000a00000000000000008800000000000caa208405f5e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000ce0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000214f90211a0d95f72e1567ee5bd03c3da14d465f443ca0df90e1894ba7b1106a012fee5c28aa010d0fd303f0987183f732d8eb29e9c83b48de8ffb28457f321b8ba23e07a22bba0879b53d01c17440c2ae1c34071432e8555fee7fd36d1622f1af465899a4cf668a0ef22fa86a8a89a9c0f0689a0941876c347605b41a5c5a57b4ff286c2ccc0b98ca01f2a43799352dbc3017f6c2905fe2079f12054597d84e1c60eaf51dcbf6df4eba03d2a72f10d54671e3bce0e40aaf38aa2366c125dd6e293ec61cbaaa4d01ea569a09c07af8b9824a12c7cba0a440c9183f128d53132c8fe69a7ace20ad6da228e4aa02699c725fa9d607e830041b2e38c828b6c2c8c996e79a735a3b5fdd2d4e94269a005e4a7a9232594eaca23880b4cd45ead49d84188195593ded3559219df205505a09b0edff3448a4fe4302a84f325a6e343f67ae1725d4315b858c0f1207e6f3ad8a045fabf29bfee453b3f7ea218fef3d164efce0695c35e571af803141b79df6e6da04fb0a2f66b9336be474a9c1db1a0302b27eb0a99734fcada884040daac24c656a0346048b188562cc55f6f7361e4d3165100c7fc70c1dffe08de659610b4de077ea00019ccb81789f725a80a9934792218725518adeb8dc0a643b696032c4f5338d3a0e773b5784434f9bc262aa8c212e86d1d1976d7bc4abde20dac3a9b4a5c69380da0f53b525af396f109b23be65c075c325409f7078ce771183b24e3f5616e00b360800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a01c9322bb2eb3711ea632c8e36bae8a49e11db224873ac60e74a0e4588972515da0160fdcba0e31dec13c5913f2e484bf70afabaa514fa41a28c15599920add2a86a0e1c5d1a28b12b82614050177f821f2c7e1bdee5aaec3c4dbf8b8e6a3d98134e1a09d746dfe0f0208ebbba914d069c6079a2a59baf5d27c3d7da76f2bb28b5d6875a0131292a2dceaed3dfc1799b44add1f41dad221fb3c41d4179dd8065f93c05a25a0a3576a7a52552bff196b1a658fbd56e00d982d03b2532e07b49e8204900d1f1ba0f0319df37ea8ca8909aa47acf5ad13937d6639c911a500aca1244172cfc0cf10a0fdec9ed88db5d937441503a11b5e7731f226e7a202a1a683000328b8a30cbef4a0961b2bb7ae74f16ef913849a71118d9ba9f9067e64e6df80fb33c5cb9aac17f2a0e9f963c59de750f5821d5bafc2ff13d5bac89fab85d36fb8a8335b4fcf11e078a057d35552c73bd079367cb074606225efbcaae282b7398dbdacd2688ebe65fe8ca00d82a7c9ecfef6649326b6f8aac40179abfa0ac8c27062473c4a8d2cdb438524a0123e851cd784cb69c42ddf5e7a2d965177140ae8c82997783b57809bcb56f77fa091bdc74941adb6a581999af7628ae23201ad7c5bd929419f7f76f0dd4ac0dcdba0779948b81396e9c2b2759fcee09c50fd01b85bbae6002de4a89289820651b618a0d1feeae0b6248f7f2e3a51b465cb53addbfc97784e523651b3aacdf4ac3ca0f7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a0821e8e45276ab853177b4c00b4b41fa95358fb4a5880a082aaf632ff0c06a907a0f07a87b04bb103488c200fe4e5c2a2bb3f176a1aa6d0459cf1ed303f5dd2c464a05d5bc7b1ed313b0cc4d43ea44eb6b7d16f87f080eaa144e0c1c38dfc5bcbaaeca06178960d0f2a3bb1098f3dc6d7692cbc2ab6df7d1f7561d7d0e84ee60b3b7a84a0115c2e6f26ede6328aafea7885214220412e9ace12b85590c6fc0af40593ea6ba02fd974e21f9edfa5f6b5610c52eb5320f589ba7c68f662ccab1883efa9a49eeda0f972cc730e243b58a6cf9b6ecf1a17ccad418dfc8873a6f146720c20f8c0c233a0482a61180cac068809c41f985fced929248ff903693d7fd7774a59ba0216a048a03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a0586775d96ff6b6e4143cea775b68f2f8eaf732c742ab032d794a5e863ed519f4a076fe3a3e1d661b2fb8c6fdd5f166829a529e67bd95b619dca5df3286dab9b234a00e618170c166e68fab3a858bd2a14276d035721b6d7e961ee7fd7ff6a0c6f73c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a02a4b0ec28bbf0c94b4094d871b5ce109258108e719da12784b58f2dafcc0cc2da09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf18688000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e99800000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053f851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a0000000000000000000000000000000000000000000000000000000000" + + describe("Arbi Verifier", () => { @@ -62,11 +41,6 @@ describe("Arbi Verifier", () => { const [, , commands, , constants] = req - console.log(req) - - - - const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) console.log(res) diff --git a/bun.lockb b/bun.lockb index 5ef050ac170c3c34bdb6dfbbe8c25d62b163bb4a..086556859720dc65d1950473ae76061701b2ca41 100755 GIT binary patch delta 31549 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 delta 17827 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 From ffb66d0808002ce9484d5ef670ed2f6e2e958ed4 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 00:22:36 +0300 Subject: [PATCH 11/63] checkpoint finish contract + gateway --- arb-gateway/src/ArbProofService.ts | 1 - arb-verifier/contracts/ArbVerifier.sol | 6 ++-- arb-verifier/contracts/test/MockOutbox.sol | 15 +++++--- arb-verifier/test/arbPlayground.ts | 14 +++++++- arb-verifier/test/testMockVerifier.ts | 42 +++++++++++++++++----- 5 files changed, 59 insertions(+), 19 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 0940f103..3f64b5de 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -66,7 +66,6 @@ export class ArbProofService implements IProofService { console.log("input block", block) const proof = await this.helper.getProofs(block.number, address, slots); - return AbiCoder.defaultAbiCoder().encode( [ 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index a6507131..2244566d 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -43,10 +43,8 @@ contract ArbVerifier is IEVMVerifier { console.log('idx'); console.log(arbData.nodeIndex); - // Node memory rblock = rollup.getNode(arbData.nodeIndex); - // require(rblock.confirmData == confirmData, 'confirmData mismatch'); - - //Todo encode block and get stateRoot + Node memory rblock = rollup.getNode(arbData.nodeIndex); + require(rblock.confirmData == confirmData, 'confirmData mismatch'); bytes32 stateRoot = decodeBlock(arbData.rlpEncodedBlock); diff --git a/arb-verifier/contracts/test/MockOutbox.sol b/arb-verifier/contracts/test/MockOutbox.sol index f712da2b..26576004 100644 --- a/arb-verifier/contracts/test/MockOutbox.sol +++ b/arb-verifier/contracts/test/MockOutbox.sol @@ -1,7 +1,14 @@ -contract MockOutbox { - function pushRoot(bytes32 blockHash, bytes32 root) external { - roots[root] = blockHash; +import {Node, IRollupCore} from '@arbitrum/nitro-contracts/src/rollup/IRollupCore.sol'; + +contract MockRollup { + function pushNode(uint idx, bytes calldata encodedNode) external { + Node memory node = abi.decode(encodedNode, (Node)); + roots[idx] = node; + } + + function getNode(uint64 idx) external view returns (Node memory) { + return roots[idx]; } - mapping(bytes32 => bytes32) public roots; // maps root hashes => L2 block hash + mapping(uint256 => Node) public roots; // maps root hashes => L2 block hash } diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts index 73e4b71f..db4efb9a 100644 --- a/arb-verifier/test/arbPlayground.ts +++ b/arb-verifier/test/arbPlayground.ts @@ -48,7 +48,7 @@ const runProofService = async () => { //arbPlayground() //readFromContract() -runProofService() +//runProofService() const withRollup = async () => { const rollup = new ethers5.Contract(rollupAddr, rollupAbi, new ethers5.providers.JsonRpcProvider(rpcMainnet)) @@ -102,3 +102,15 @@ const withRollup = async () => { //withRollup() +const getNode = async () => { + const idx = 12323 + + const rollup = new Contract(rollupAddr, rollupAbi,l1Provider) + + const n = await rollup.getNode(idx) + + console.log(n) + +} + +getNode() \ No newline at end of file diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts index af634ad6..260a010c 100644 --- a/arb-verifier/test/testMockVerifier.ts +++ b/arb-verifier/test/testMockVerifier.ts @@ -1,5 +1,6 @@ /* eslint-disable prettier/prettier */ +import { ethers } from "ethers" import hardhat from "hardhat" const proof = "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000000c51f1f2f3c5c2b0319c1e2732e5ab10d79b0084f8a33322a7a43188f4e4068982a34ce1cebd426e17aa8e9ae10b135ef29f7eabb5435f65ff46d1724b907fc24000000000000000000000000000000000000000000000000000000000000302300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000227f90224a0ef78c4de58e03cff1173bb2f18e11da6ad1683d0473f3259fffb457769f10ef1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794a4b000000000000000000073657175656e636572a08809ba979cdeacad684901b8cec6df53792aa24aa8b715d28d8fae490a798bcca011a52c4debf8eef8ad4aa2fe749fd7c394cb5398b2c3315d339dde3b09a7c373a0aaa709602e0d328533f490628e6d62ce3c3fb3c8f12007782f3b3361bbdddf0cb9010020800204028010020020000006080889880a009000000020018005900081404800000020048231000080a0000800000b00d002310421000000000000020180800c000244824400201081000801000358000000ac100288000800a520300000208008000888000012040248422c10a0009008428002001820300240000120060020420400000142008810103a141002c0003260020b94008200401040001210048040488800a02000078020000014000210048300000b00811008008003000400801004000030202080001058001000018002d900008024480010000000146064400400a0011108022d4240080a6c000400010080c058100101c800000100001001840352e7e28704000000000000831a8c74846559152aa0c51f1f2f3c5c2b0319c1e2732e5ab10d79b0084f8a33322a7a43188f4e406898a0000000000000afa70000000000999b7f000000000000000a00000000000000008800000000000caa208405f5e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000ce0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000214f90211a0d95f72e1567ee5bd03c3da14d465f443ca0df90e1894ba7b1106a012fee5c28aa010d0fd303f0987183f732d8eb29e9c83b48de8ffb28457f321b8ba23e07a22bba0879b53d01c17440c2ae1c34071432e8555fee7fd36d1622f1af465899a4cf668a0ef22fa86a8a89a9c0f0689a0941876c347605b41a5c5a57b4ff286c2ccc0b98ca01f2a43799352dbc3017f6c2905fe2079f12054597d84e1c60eaf51dcbf6df4eba03d2a72f10d54671e3bce0e40aaf38aa2366c125dd6e293ec61cbaaa4d01ea569a09c07af8b9824a12c7cba0a440c9183f128d53132c8fe69a7ace20ad6da228e4aa02699c725fa9d607e830041b2e38c828b6c2c8c996e79a735a3b5fdd2d4e94269a005e4a7a9232594eaca23880b4cd45ead49d84188195593ded3559219df205505a09b0edff3448a4fe4302a84f325a6e343f67ae1725d4315b858c0f1207e6f3ad8a045fabf29bfee453b3f7ea218fef3d164efce0695c35e571af803141b79df6e6da04fb0a2f66b9336be474a9c1db1a0302b27eb0a99734fcada884040daac24c656a0346048b188562cc55f6f7361e4d3165100c7fc70c1dffe08de659610b4de077ea00019ccb81789f725a80a9934792218725518adeb8dc0a643b696032c4f5338d3a0e773b5784434f9bc262aa8c212e86d1d1976d7bc4abde20dac3a9b4a5c69380da0f53b525af396f109b23be65c075c325409f7078ce771183b24e3f5616e00b360800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a01c9322bb2eb3711ea632c8e36bae8a49e11db224873ac60e74a0e4588972515da0160fdcba0e31dec13c5913f2e484bf70afabaa514fa41a28c15599920add2a86a0e1c5d1a28b12b82614050177f821f2c7e1bdee5aaec3c4dbf8b8e6a3d98134e1a09d746dfe0f0208ebbba914d069c6079a2a59baf5d27c3d7da76f2bb28b5d6875a0131292a2dceaed3dfc1799b44add1f41dad221fb3c41d4179dd8065f93c05a25a0a3576a7a52552bff196b1a658fbd56e00d982d03b2532e07b49e8204900d1f1ba0f0319df37ea8ca8909aa47acf5ad13937d6639c911a500aca1244172cfc0cf10a0fdec9ed88db5d937441503a11b5e7731f226e7a202a1a683000328b8a30cbef4a0961b2bb7ae74f16ef913849a71118d9ba9f9067e64e6df80fb33c5cb9aac17f2a0e9f963c59de750f5821d5bafc2ff13d5bac89fab85d36fb8a8335b4fcf11e078a057d35552c73bd079367cb074606225efbcaae282b7398dbdacd2688ebe65fe8ca00d82a7c9ecfef6649326b6f8aac40179abfa0ac8c27062473c4a8d2cdb438524a0123e851cd784cb69c42ddf5e7a2d965177140ae8c82997783b57809bcb56f77fa091bdc74941adb6a581999af7628ae23201ad7c5bd929419f7f76f0dd4ac0dcdba0779948b81396e9c2b2759fcee09c50fd01b85bbae6002de4a89289820651b618a0d1feeae0b6248f7f2e3a51b465cb53addbfc97784e523651b3aacdf4ac3ca0f7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a0821e8e45276ab853177b4c00b4b41fa95358fb4a5880a082aaf632ff0c06a907a0f07a87b04bb103488c200fe4e5c2a2bb3f176a1aa6d0459cf1ed303f5dd2c464a05d5bc7b1ed313b0cc4d43ea44eb6b7d16f87f080eaa144e0c1c38dfc5bcbaaeca06178960d0f2a3bb1098f3dc6d7692cbc2ab6df7d1f7561d7d0e84ee60b3b7a84a0115c2e6f26ede6328aafea7885214220412e9ace12b85590c6fc0af40593ea6ba02fd974e21f9edfa5f6b5610c52eb5320f589ba7c68f662ccab1883efa9a49eeda0f972cc730e243b58a6cf9b6ecf1a17ccad418dfc8873a6f146720c20f8c0c233a0482a61180cac068809c41f985fced929248ff903693d7fd7774a59ba0216a048a03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a0586775d96ff6b6e4143cea775b68f2f8eaf732c742ab032d794a5e863ed519f4a076fe3a3e1d661b2fb8c6fdd5f166829a529e67bd95b619dca5df3286dab9b234a00e618170c166e68fab3a858bd2a14276d035721b6d7e961ee7fd7ff6a0c6f73c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a02a4b0ec28bbf0c94b4094d871b5ce109258108e719da12784b58f2dafcc0cc2da09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf18688000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e99800000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053f851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a0000000000000000000000000000000000000000000000000000000000" @@ -11,22 +12,45 @@ describe("Arbi Verifier", () => { /** * Prepate mock inbox */ - const outboxF = await hardhat.ethers.getContractFactory("MockOutbox") + const outboxF = await hardhat.ethers.getContractFactory("MockRollup") const mockOutbox = await outboxF.deploy() + const node = [ + '0xaad6a147fa8176e09f24e5c5b80be300f546a8d533545aca5b8a591b51d8d301', + '0x8b35fdd8fd6228b5f0ca3ef1eb92eb1d38831df9fd69d551ed8b4b6f3fab83c3', + '0x2d24172db206e7876c218d308f1f64f4f9b5cb92a2be43369ae586c043152dc2', + 12322n, + 10066841n, + 10067081n, + 2n, + 2n, + 10067061n, + 12324n, + 10066821n, + '0x1d00f3367c3a951e8b4504bd5ff983af8e2a08a5d0d70a1176c40f3b60b75f14' + ] + + const abiEncoded = ethers.AbiCoder.defaultAbiCoder().encode([ + "bytes32", "bytes32", "bytes32", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "bytes32" + ], node) + + + console.log(abiEncoded) - await mockOutbox.pushRoot( - "0x47ee108ea84e6f85c2749e942ee3d5d6a2cc5ef81f3b5c651c0f3c1b472bd645", - "0x913ac55af774e541d9c787428951598010fc41cacf2b9e97a924c7eff7d10fc5", - ) + await mockOutbox.pushNode( + 12323, + abiEncoded, + ) /** * Deploy verifier - */ - - const f = await hardhat.ethers.getContractFactory("ArbVerifier") - const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) + */ + + const f = await hardhat.ethers.getContractFactory("ArbVerifier") + const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) + + console.log("check") /** * Deploy MockTestL1 From 57fd4b0edcc0768941907ffa101ac86c5883f1e8 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 00:26:58 +0300 Subject: [PATCH 12/63] test for latest --- arb-verifier/test/testMockVerifier.ts | 19 +++++++------------ l1-verifier/contracts/test/TestL1.sol | 5 ----- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts index 260a010c..289b15ce 100644 --- a/arb-verifier/test/testMockVerifier.ts +++ b/arb-verifier/test/testMockVerifier.ts @@ -1,5 +1,6 @@ /* eslint-disable prettier/prettier */ +import { expect } from "chai" import { ethers } from "ethers" import hardhat from "hardhat" const proof = "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000000c51f1f2f3c5c2b0319c1e2732e5ab10d79b0084f8a33322a7a43188f4e4068982a34ce1cebd426e17aa8e9ae10b135ef29f7eabb5435f65ff46d1724b907fc24000000000000000000000000000000000000000000000000000000000000302300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000227f90224a0ef78c4de58e03cff1173bb2f18e11da6ad1683d0473f3259fffb457769f10ef1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794a4b000000000000000000073657175656e636572a08809ba979cdeacad684901b8cec6df53792aa24aa8b715d28d8fae490a798bcca011a52c4debf8eef8ad4aa2fe749fd7c394cb5398b2c3315d339dde3b09a7c373a0aaa709602e0d328533f490628e6d62ce3c3fb3c8f12007782f3b3361bbdddf0cb9010020800204028010020020000006080889880a009000000020018005900081404800000020048231000080a0000800000b00d002310421000000000000020180800c000244824400201081000801000358000000ac100288000800a520300000208008000888000012040248422c10a0009008428002001820300240000120060020420400000142008810103a141002c0003260020b94008200401040001210048040488800a02000078020000014000210048300000b00811008008003000400801004000030202080001058001000018002d900008024480010000000146064400400a0011108022d4240080a6c000400010080c058100101c800000100001001840352e7e28704000000000000831a8c74846559152aa0c51f1f2f3c5c2b0319c1e2732e5ab10d79b0084f8a33322a7a43188f4e406898a0000000000000afa70000000000999b7f000000000000000a00000000000000008800000000000caa208405f5e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000ce0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000214f90211a0d95f72e1567ee5bd03c3da14d465f443ca0df90e1894ba7b1106a012fee5c28aa010d0fd303f0987183f732d8eb29e9c83b48de8ffb28457f321b8ba23e07a22bba0879b53d01c17440c2ae1c34071432e8555fee7fd36d1622f1af465899a4cf668a0ef22fa86a8a89a9c0f0689a0941876c347605b41a5c5a57b4ff286c2ccc0b98ca01f2a43799352dbc3017f6c2905fe2079f12054597d84e1c60eaf51dcbf6df4eba03d2a72f10d54671e3bce0e40aaf38aa2366c125dd6e293ec61cbaaa4d01ea569a09c07af8b9824a12c7cba0a440c9183f128d53132c8fe69a7ace20ad6da228e4aa02699c725fa9d607e830041b2e38c828b6c2c8c996e79a735a3b5fdd2d4e94269a005e4a7a9232594eaca23880b4cd45ead49d84188195593ded3559219df205505a09b0edff3448a4fe4302a84f325a6e343f67ae1725d4315b858c0f1207e6f3ad8a045fabf29bfee453b3f7ea218fef3d164efce0695c35e571af803141b79df6e6da04fb0a2f66b9336be474a9c1db1a0302b27eb0a99734fcada884040daac24c656a0346048b188562cc55f6f7361e4d3165100c7fc70c1dffe08de659610b4de077ea00019ccb81789f725a80a9934792218725518adeb8dc0a643b696032c4f5338d3a0e773b5784434f9bc262aa8c212e86d1d1976d7bc4abde20dac3a9b4a5c69380da0f53b525af396f109b23be65c075c325409f7078ce771183b24e3f5616e00b360800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a01c9322bb2eb3711ea632c8e36bae8a49e11db224873ac60e74a0e4588972515da0160fdcba0e31dec13c5913f2e484bf70afabaa514fa41a28c15599920add2a86a0e1c5d1a28b12b82614050177f821f2c7e1bdee5aaec3c4dbf8b8e6a3d98134e1a09d746dfe0f0208ebbba914d069c6079a2a59baf5d27c3d7da76f2bb28b5d6875a0131292a2dceaed3dfc1799b44add1f41dad221fb3c41d4179dd8065f93c05a25a0a3576a7a52552bff196b1a658fbd56e00d982d03b2532e07b49e8204900d1f1ba0f0319df37ea8ca8909aa47acf5ad13937d6639c911a500aca1244172cfc0cf10a0fdec9ed88db5d937441503a11b5e7731f226e7a202a1a683000328b8a30cbef4a0961b2bb7ae74f16ef913849a71118d9ba9f9067e64e6df80fb33c5cb9aac17f2a0e9f963c59de750f5821d5bafc2ff13d5bac89fab85d36fb8a8335b4fcf11e078a057d35552c73bd079367cb074606225efbcaae282b7398dbdacd2688ebe65fe8ca00d82a7c9ecfef6649326b6f8aac40179abfa0ac8c27062473c4a8d2cdb438524a0123e851cd784cb69c42ddf5e7a2d965177140ae8c82997783b57809bcb56f77fa091bdc74941adb6a581999af7628ae23201ad7c5bd929419f7f76f0dd4ac0dcdba0779948b81396e9c2b2759fcee09c50fd01b85bbae6002de4a89289820651b618a0d1feeae0b6248f7f2e3a51b465cb53addbfc97784e523651b3aacdf4ac3ca0f7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a0821e8e45276ab853177b4c00b4b41fa95358fb4a5880a082aaf632ff0c06a907a0f07a87b04bb103488c200fe4e5c2a2bb3f176a1aa6d0459cf1ed303f5dd2c464a05d5bc7b1ed313b0cc4d43ea44eb6b7d16f87f080eaa144e0c1c38dfc5bcbaaeca06178960d0f2a3bb1098f3dc6d7692cbc2ab6df7d1f7561d7d0e84ee60b3b7a84a0115c2e6f26ede6328aafea7885214220412e9ace12b85590c6fc0af40593ea6ba02fd974e21f9edfa5f6b5610c52eb5320f589ba7c68f662ccab1883efa9a49eeda0f972cc730e243b58a6cf9b6ecf1a17ccad418dfc8873a6f146720c20f8c0c233a0482a61180cac068809c41f985fced929248ff903693d7fd7774a59ba0216a048a03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a0586775d96ff6b6e4143cea775b68f2f8eaf732c742ab032d794a5e863ed519f4a076fe3a3e1d661b2fb8c6fdd5f166829a529e67bd95b619dca5df3286dab9b234a00e618170c166e68fab3a858bd2a14276d035721b6d7e961ee7fd7ff6a0c6f73c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a02a4b0ec28bbf0c94b4094d871b5ce109258108e719da12784b58f2dafcc0cc2da09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf18688000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e99800000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053f851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a0000000000000000000000000000000000000000000000000000000000" @@ -8,7 +9,7 @@ const proof = "0x000000000000000000000000000000000000000000000000000000000000004 describe("Arbi Verifier", () => { - it.only("test", async () => { + it.only("latest", async () => { /** * Prepate mock inbox */ @@ -36,9 +37,6 @@ describe("Arbi Verifier", () => { ], node) - console.log(abiEncoded) - - await mockOutbox.pushNode( 12323, abiEncoded, @@ -46,11 +44,10 @@ describe("Arbi Verifier", () => { /** * Deploy verifier */ - - const f = await hardhat.ethers.getContractFactory("ArbVerifier") - const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) - - console.log("check") + + const f = await hardhat.ethers.getContractFactory("ArbVerifier") + const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) + /** * Deploy MockTestL1 @@ -64,9 +61,7 @@ describe("Arbi Verifier", () => { const req = await mockTestL1.getLatest() const [, , commands, , constants] = req - - const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) - console.log(res) + expect(res[0]).to.equal(42n) }) }) \ No newline at end of file diff --git a/l1-verifier/contracts/test/TestL1.sol b/l1-verifier/contracts/test/TestL1.sol index 506b1e53..abf8a2d5 100644 --- a/l1-verifier/contracts/test/TestL1.sol +++ b/l1-verifier/contracts/test/TestL1.sol @@ -5,8 +5,6 @@ import {EVMFetcher} from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; import {EVMFetchTarget} from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; -import 'hardhat/console.sol'; - contract TestL1 is EVMFetchTarget { using EVMFetcher for EVMFetcher.EVMFetchRequest; @@ -14,7 +12,6 @@ contract TestL1 is EVMFetchTarget { address target; constructor(IEVMVerifier _verifier, address _target) { - console.log('TEST'); verifier = _verifier; target = _target; } @@ -156,6 +153,4 @@ contract TestL1 is EVMFetchTarget { ) public pure returns (uint256) { return abi.decode(values[1], (uint256)); } - - } From b925d95f3c604fdc03712afde2de57ae7343dddd Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 00:43:34 +0300 Subject: [PATCH 13/63] finish test for latest --- arb-gateway/src/ArbProofService.ts | 1 - arb-verifier/contracts/ArbVerifier.sol | 3 -- arb-verifier/test/testMockVerifier.ts | 69 ++++++++++++++++++-------- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 3f64b5de..6f0eda2b 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -63,7 +63,6 @@ export class ArbProofService implements IProofService { address: AddressLike, slots: bigint[] ): Promise { - console.log("input block", block) const proof = await this.helper.getProofs(block.number, address, slots); return AbiCoder.defaultAbiCoder().encode( diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index 2244566d..324f1e16 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -5,7 +5,6 @@ import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol' import {Node, IRollupCore} from '@arbitrum/nitro-contracts/src/rollup/IRollupCore.sol'; import {RLPReader} from '@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol'; -import 'hardhat/console.sol'; struct ArbWitnessData { bytes32 version; bytes32 sendRoot; @@ -41,8 +40,6 @@ contract ArbVerifier is IEVMVerifier { abi.encodePacked(arbData.blockHash, arbData.sendRoot) ); - console.log('idx'); - console.log(arbData.nodeIndex); Node memory rblock = rollup.getNode(arbData.nodeIndex); require(rblock.confirmData == confirmData, 'confirmData mismatch'); diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts index 289b15ce..ac8f200c 100644 --- a/arb-verifier/test/testMockVerifier.ts +++ b/arb-verifier/test/testMockVerifier.ts @@ -1,36 +1,64 @@ /* eslint-disable prettier/prettier */ import { expect } from "chai" -import { ethers } from "ethers" +import { AbiCoder, Contract, JsonRpcProvider, ethers } from "ethers" import hardhat from "hardhat" -const proof = "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000000c51f1f2f3c5c2b0319c1e2732e5ab10d79b0084f8a33322a7a43188f4e4068982a34ce1cebd426e17aa8e9ae10b135ef29f7eabb5435f65ff46d1724b907fc24000000000000000000000000000000000000000000000000000000000000302300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000227f90224a0ef78c4de58e03cff1173bb2f18e11da6ad1683d0473f3259fffb457769f10ef1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794a4b000000000000000000073657175656e636572a08809ba979cdeacad684901b8cec6df53792aa24aa8b715d28d8fae490a798bcca011a52c4debf8eef8ad4aa2fe749fd7c394cb5398b2c3315d339dde3b09a7c373a0aaa709602e0d328533f490628e6d62ce3c3fb3c8f12007782f3b3361bbdddf0cb9010020800204028010020020000006080889880a009000000020018005900081404800000020048231000080a0000800000b00d002310421000000000000020180800c000244824400201081000801000358000000ac100288000800a520300000208008000888000012040248422c10a0009008428002001820300240000120060020420400000142008810103a141002c0003260020b94008200401040001210048040488800a02000078020000014000210048300000b00811008008003000400801004000030202080001058001000018002d900008024480010000000146064400400a0011108022d4240080a6c000400010080c058100101c800000100001001840352e7e28704000000000000831a8c74846559152aa0c51f1f2f3c5c2b0319c1e2732e5ab10d79b0084f8a33322a7a43188f4e406898a0000000000000afa70000000000999b7f000000000000000a00000000000000008800000000000caa208405f5e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000ce0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000214f90211a0d95f72e1567ee5bd03c3da14d465f443ca0df90e1894ba7b1106a012fee5c28aa010d0fd303f0987183f732d8eb29e9c83b48de8ffb28457f321b8ba23e07a22bba0879b53d01c17440c2ae1c34071432e8555fee7fd36d1622f1af465899a4cf668a0ef22fa86a8a89a9c0f0689a0941876c347605b41a5c5a57b4ff286c2ccc0b98ca01f2a43799352dbc3017f6c2905fe2079f12054597d84e1c60eaf51dcbf6df4eba03d2a72f10d54671e3bce0e40aaf38aa2366c125dd6e293ec61cbaaa4d01ea569a09c07af8b9824a12c7cba0a440c9183f128d53132c8fe69a7ace20ad6da228e4aa02699c725fa9d607e830041b2e38c828b6c2c8c996e79a735a3b5fdd2d4e94269a005e4a7a9232594eaca23880b4cd45ead49d84188195593ded3559219df205505a09b0edff3448a4fe4302a84f325a6e343f67ae1725d4315b858c0f1207e6f3ad8a045fabf29bfee453b3f7ea218fef3d164efce0695c35e571af803141b79df6e6da04fb0a2f66b9336be474a9c1db1a0302b27eb0a99734fcada884040daac24c656a0346048b188562cc55f6f7361e4d3165100c7fc70c1dffe08de659610b4de077ea00019ccb81789f725a80a9934792218725518adeb8dc0a643b696032c4f5338d3a0e773b5784434f9bc262aa8c212e86d1d1976d7bc4abde20dac3a9b4a5c69380da0f53b525af396f109b23be65c075c325409f7078ce771183b24e3f5616e00b360800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a01c9322bb2eb3711ea632c8e36bae8a49e11db224873ac60e74a0e4588972515da0160fdcba0e31dec13c5913f2e484bf70afabaa514fa41a28c15599920add2a86a0e1c5d1a28b12b82614050177f821f2c7e1bdee5aaec3c4dbf8b8e6a3d98134e1a09d746dfe0f0208ebbba914d069c6079a2a59baf5d27c3d7da76f2bb28b5d6875a0131292a2dceaed3dfc1799b44add1f41dad221fb3c41d4179dd8065f93c05a25a0a3576a7a52552bff196b1a658fbd56e00d982d03b2532e07b49e8204900d1f1ba0f0319df37ea8ca8909aa47acf5ad13937d6639c911a500aca1244172cfc0cf10a0fdec9ed88db5d937441503a11b5e7731f226e7a202a1a683000328b8a30cbef4a0961b2bb7ae74f16ef913849a71118d9ba9f9067e64e6df80fb33c5cb9aac17f2a0e9f963c59de750f5821d5bafc2ff13d5bac89fab85d36fb8a8335b4fcf11e078a057d35552c73bd079367cb074606225efbcaae282b7398dbdacd2688ebe65fe8ca00d82a7c9ecfef6649326b6f8aac40179abfa0ac8c27062473c4a8d2cdb438524a0123e851cd784cb69c42ddf5e7a2d965177140ae8c82997783b57809bcb56f77fa091bdc74941adb6a581999af7628ae23201ad7c5bd929419f7f76f0dd4ac0dcdba0779948b81396e9c2b2759fcee09c50fd01b85bbae6002de4a89289820651b618a0d1feeae0b6248f7f2e3a51b465cb53addbfc97784e523651b3aacdf4ac3ca0f7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a0b2fbcf2edff8a96dd14ceaad33638dc75a25dc076af91a1560fc241699a56ea6a0821e8e45276ab853177b4c00b4b41fa95358fb4a5880a082aaf632ff0c06a907a0f07a87b04bb103488c200fe4e5c2a2bb3f176a1aa6d0459cf1ed303f5dd2c464a05d5bc7b1ed313b0cc4d43ea44eb6b7d16f87f080eaa144e0c1c38dfc5bcbaaeca06178960d0f2a3bb1098f3dc6d7692cbc2ab6df7d1f7561d7d0e84ee60b3b7a84a0115c2e6f26ede6328aafea7885214220412e9ace12b85590c6fc0af40593ea6ba02fd974e21f9edfa5f6b5610c52eb5320f589ba7c68f662ccab1883efa9a49eeda0f972cc730e243b58a6cf9b6ecf1a17ccad418dfc8873a6f146720c20f8c0c233a0482a61180cac068809c41f985fced929248ff903693d7fd7774a59ba0216a048a03540454e951734746c02def599ab9b3bdd171de847418360024aad06b47fbb0aa03e2a114070d1c2e40509a607f397a19cbe10cafbdde1b268ca0b9a2e9a6a06a2a09895fbc227c026df0294c8c40d3ace544d9941871e9056e8f5848719eea2d120a08a3a903a918394e636f7f455386aed65c871447069199bc2f3379e86848dc280a0586775d96ff6b6e4143cea775b68f2f8eaf732c742ab032d794a5e863ed519f4a076fe3a3e1d661b2fb8c6fdd5f166829a529e67bd95b619dca5df3286dab9b234a00e618170c166e68fab3a858bd2a14276d035721b6d7e961ee7fd7ff6a0c6f73c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000214f90211a015cedad3ea2a5d2524f3cb62688bbd2b7d03b4ee15fe4f4c2220643bc8368886a0daf95ecd78efe9d1d66f3f1f7877406a9708c585bda8533dbaa8af14c214e3dba04d30ab4cf85c60479ac75679c9c3a1af51233d082cb8c112e53acbc1b32c4d21a02a4b0ec28bbf0c94b4094d871b5ce109258108e719da12784b58f2dafcc0cc2da09cc81c0c49f1e97836043841f66d995b3ec8eb0991ec4d13c3e8e7a6de2d5280a05298b0ed3effa08061f8d787bed5dbcd322a7ffb96febed87eeecc99eadbb149a0dc7808f73b0a60910182206616646ca1cec8859008ea83fc1c0ae9e21c4d8934a0c9dd7f0c9f521215c3671efcee4a1a715009cc02315248751fa69e9a426b2817a073550200a586f014d673aa7a169a730ca388f735a1b2ffbc5982a159f5ede39ea0c55d268773253712d4f0e95c1046f5a1f296279ad9ae6ec917791887f10bb5d9a05e382eabc149b521938225736bc08efff05c4e378050e4dd4ed8efd6c971aa67a025400f8f7e4ef6aac40cbe0dc07041caee0eee3f66eb316f0741ca4c2b0e7714a00c6c6aa5aab3980ddcd91eef2c69308279499dae59bdf0b71b09f93b97252c59a041e545ab62d4462f46be9b9f7d2a978804d9c6bcc5475353096bc3aeabb0ffd4a087403516ecbedb6ad6365a681f00eb58fdbbfc5a2d64c9697760ac650a09224ba0dde62d73fe4ff6b423eea6bda3b71e733f174fb22d39c8228549ebcbf1cf18688000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4f901f1a010fcc45e1be5615b25b701487069cfa0b169b860d95c1ffaf0eeb551a8afe1e7a02baad1b9232dde637ae60c9fe06335c875de47fda09301be8012fbc4d6706a79a02e213bf6d8c9b6d175231002b6700f25ef7728b26729c725c15e9b9958562f30a0b018c33a4937d5c35280a66fd51cf939fdcbd1f61f8ee4438fa7b8abb42c0a95a07a6db750ac23dbca4982bf652769542e51d2afc0c081e0af788617af460dadcaa03f9b829c29dd335a8d8d07b516dc889f45ae39978d48d44c3155e6aa3fd8adafa0eb60743c932cd2945ba5d4d4e1121b26907c6792fa1f9916efe9b79d57b1f872a0f6e4aa7da476502fd1e47faef0409648f48aba6189a9158ac924a35a173c3b62a091a0b781627d66f39932ea0d6d56f6cc1f56961e849ecfa2a8d657d58c5f2bf5a0f78cc4c4b4f677d602e9a5de9634e2b27f3dae1811dc3c47f939663c5b3c6be5a0e9737f9b263462ccfd2b33d0a8f203d1e21f8a40dacfc15973fa2729e22fdd23a08da62ccfeb14147168e4183d11eb36b837705f55a8371f29eb86067b6a0b05d3a023d1d37c01ef868443b54b9a14cb0536b83a3c0fbb8dae188dfcc52b28947869a02d9f374dda2b91889938273be7c216d0ab28ec687553ac4e35ca9d577b7d17c580a06b83adefcc06d8a20608b47e4680878daae1b50fd1db552862f847a0ed587e99800000000000000000000000000000000000000000000000000000000000000000000000000000000000000069f8679e3245dd7ef6904143a2e2afe327e466d8c05c651a2e33fe746d8fbac6ad95b846f8440180a05eed55cf975e2e2257fe8527e028679782c5b34dddeb0b644227d786fd79b0aca0ed4dac3a97cd55d7d89bb750f0b138f949787bafb76f9a2902e57f29742b4fb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f3f8f180a06b106f66e8e3522f3d9f4b72b56d2303f9a03ba0e96ee652545da63afc38f10ba0a6da6302e11f3d5045774729a336b7f05221779cd6ef9c7e74ee7e5906c51c9280808080a0d23f9adb4bcb42ab7f8bf9ead851ea7a9d0c16a0efc5a3b94474222d69c3248880a08d23f83c8ee2118facd295df2cf546b3b6d5b4561a77373c312f095e928f457880a0634c9f1a3d2fb9b7e7ce3d0155401f6daa67535acb12ded6834a2ffef6ab106580a0728df5a626df9c9a2eeace98dcea304405f92841252bee0eb66b74422687f1f580a0b954e5d774806d3a050295a2451ca8b6611e5d31fbc482433dacfe0e1d2f3d2580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053f851808080808080808080a05562d4c69fcaf7778df616351f2996b02b6b9b11df787de5f96da97af2968a738080a0fe7d9a8a67908cb0be5a316771b51572303e2ce6d98418c7ee5aa3ed7cbbefb080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023e2a0200decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5632a0000000000000000000000000000000000000000000000000000000000" +import { ethers as ethers5 } from "ethers5" +import { ArbProofService } from "@ensdomains/arb-gateway" + +import rollupAbi from "./abi/rollupABI" + + +const rpcMainnet = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" +const rpcArbitrum = "https://arb-goerli.g.alchemy.com/v2/k2Vp4opdLW3ueLYaTPndSFtx4m7T3s71" +const rollupAddr = "0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17" +const helperAddr = "0xC2ffb7bB521f7C48aAA3Ee0e3E35D5ca1A6CE53A" + +const testL2OnArbi = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" describe("Arbi Verifier", () => { it.only("latest", async () => { - /** - * Prepate mock inbox - */ + const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) + const l2Provider = new JsonRpcProvider(rpcArbitrum); + const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( + rpcMainnet + ); + const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( + rpcArbitrum + ); + const s = new ArbProofService( + l2Provider, + l1LegacyProvider, + l2LegacyProvider, + rollupAddr, + helperAddr + ); + + const getBlock = await s.getProvableBlock() + const proof = await s.getProofs(getBlock, testL2OnArbi, [0n]) + + const outboxF = await hardhat.ethers.getContractFactory("MockRollup") const mockOutbox = await outboxF.deploy() + const rollup = new Contract(rollupAddr, rollupAbi, l1Provider) + + const proofEnc = AbiCoder.defaultAbiCoder().decode( + [ + 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', + 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', + ], + proof + + ); + + const idx = proofEnc[0][3] + - const node = [ - '0xaad6a147fa8176e09f24e5c5b80be300f546a8d533545aca5b8a591b51d8d301', - '0x8b35fdd8fd6228b5f0ca3ef1eb92eb1d38831df9fd69d551ed8b4b6f3fab83c3', - '0x2d24172db206e7876c218d308f1f64f4f9b5cb92a2be43369ae586c043152dc2', - 12322n, - 10066841n, - 10067081n, - 2n, - 2n, - 10067061n, - 12324n, - 10066821n, - '0x1d00f3367c3a951e8b4504bd5ff983af8e2a08a5d0d70a1176c40f3b60b75f14' - ] + const node = await rollup.getNode(idx) const abiEncoded = ethers.AbiCoder.defaultAbiCoder().encode([ "bytes32", "bytes32", "bytes32", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "bytes32" @@ -38,7 +66,7 @@ describe("Arbi Verifier", () => { await mockOutbox.pushNode( - 12323, + idx, abiEncoded, ) /** @@ -53,7 +81,6 @@ describe("Arbi Verifier", () => { * Deploy MockTestL1 */ - const testL2OnArbi = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" const fMockTest = await hardhat.ethers.getContractFactory("MockTestL1") const mockTestL1 = await fMockTest.deploy(await arbiVerfifier.getAddress(), testL2OnArbi) From 16315dc0ba3276dace17699fe96d67f249edcfb8 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 00:50:31 +0300 Subject: [PATCH 14/63] add test for name --- arb-verifier/contracts/test/MockTestL1.sol | 8 ++- arb-verifier/test/arbPlayground.ts | 2 +- arb-verifier/test/testMockVerifier.ts | 75 +++++++++++++++++++++- 3 files changed, 81 insertions(+), 4 deletions(-) diff --git a/arb-verifier/contracts/test/MockTestL1.sol b/arb-verifier/contracts/test/MockTestL1.sol index 20326dcd..70b0aa3b 100644 --- a/arb-verifier/contracts/test/MockTestL1.sol +++ b/arb-verifier/contracts/test/MockTestL1.sol @@ -33,7 +33,13 @@ contract MockTestL1 is EVMFetchTarget { } function getName() public view returns (EVMFetcher.EVMFetchRequest memory) { - return EVMFetcher.newFetchRequest(verifier, target).getDynamic(1); + EVMFetcher.EVMFetchRequest memory req = EVMFetcher + .newFetchRequest(verifier, target) + .getDynamic(1); + + _addOperation(req, OP_END); + + return req; } function getHighscorer( diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts index db4efb9a..6c8cc44d 100644 --- a/arb-verifier/test/arbPlayground.ts +++ b/arb-verifier/test/arbPlayground.ts @@ -113,4 +113,4 @@ const getNode = async () => { } -getNode() \ No newline at end of file +//getNode() \ No newline at end of file diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts index ac8f200c..66227bc3 100644 --- a/arb-verifier/test/testMockVerifier.ts +++ b/arb-verifier/test/testMockVerifier.ts @@ -20,7 +20,7 @@ const testL2OnArbi = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" describe("Arbi Verifier", () => { - it.only("latest", async () => { + it("latest", async () => { const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) const l2Provider = new JsonRpcProvider(rpcArbitrum); const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( @@ -35,8 +35,8 @@ describe("Arbi Verifier", () => { l2LegacyProvider, rollupAddr, helperAddr - ); + ); const getBlock = await s.getProvableBlock() const proof = await s.getProofs(getBlock, testL2OnArbi, [0n]) @@ -91,4 +91,75 @@ describe("Arbi Verifier", () => { const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) expect(res[0]).to.equal(42n) }) + it.only("name", async () => { + const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) + const l2Provider = new JsonRpcProvider(rpcArbitrum); + const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( + rpcMainnet + ); + const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( + rpcArbitrum + ); + const s = new ArbProofService( + l2Provider, + l1LegacyProvider, + l2LegacyProvider, + rollupAddr, + helperAddr + + ); + const getBlock = await s.getProvableBlock() + const proof = await s.getProofs(getBlock, testL2OnArbi, [1n]) + + + const outboxF = await hardhat.ethers.getContractFactory("MockRollup") + const mockOutbox = await outboxF.deploy() + + const rollup = new Contract(rollupAddr, rollupAbi, l1Provider) + + const proofEnc = AbiCoder.defaultAbiCoder().decode( + [ + 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', + 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', + ], + proof + + ); + + const idx = proofEnc[0][3] + + + const node = await rollup.getNode(idx) + + const abiEncoded = ethers.AbiCoder.defaultAbiCoder().encode([ + "bytes32", "bytes32", "bytes32", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "bytes32" + ], node) + + + await mockOutbox.pushNode( + idx, + abiEncoded, + ) + /** + * Deploy verifier + */ + + const f = await hardhat.ethers.getContractFactory("ArbVerifier") + const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) + + + /** + * Deploy MockTestL1 + */ + + + const fMockTest = await hardhat.ethers.getContractFactory("MockTestL1") + const mockTestL1 = await fMockTest.deploy(await arbiVerfifier.getAddress(), testL2OnArbi) + + const req = await mockTestL1.getName() + + const [, , commands, , constants] = req + const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) + expect(res[0]).to.equal("Satoshi") + }) }) \ No newline at end of file From 750fbc72e337af88267c919a398ba176bc20ebb2 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 01:24:35 +0300 Subject: [PATCH 15/63] more tests --- arb-verifier/contracts/test/MockTestL1.sol | 38 ++++++---- arb-verifier/test/testMockVerifier.ts | 87 +++++++++++++++++++++- 2 files changed, 105 insertions(+), 20 deletions(-) diff --git a/arb-verifier/contracts/test/MockTestL1.sol b/arb-verifier/contracts/test/MockTestL1.sol index 70b0aa3b..f9e78304 100644 --- a/arb-verifier/contracts/test/MockTestL1.sol +++ b/arb-verifier/contracts/test/MockTestL1.sol @@ -45,10 +45,13 @@ contract MockTestL1 is EVMFetchTarget { function getHighscorer( uint256 idx ) public view returns (EVMFetcher.EVMFetchRequest memory) { - return - EVMFetcher.newFetchRequest(verifier, target).getDynamic(3).element( - idx - ); + EVMFetcher.EVMFetchRequest memory req = EVMFetcher + .newFetchRequest(verifier, target) + .getDynamic(3) + .element(idx); + + _addOperation(req, OP_END); + return req; } function getLatestHighscore() @@ -56,12 +59,13 @@ contract MockTestL1 is EVMFetchTarget { view returns (EVMFetcher.EVMFetchRequest memory) { - return - EVMFetcher - .newFetchRequest(verifier, target) - .getStatic(0) - .getStatic(2) - .ref(0); + EVMFetcher.EVMFetchRequest memory req = EVMFetcher + .newFetchRequest(verifier, target) + .getStatic(0) + .getStatic(2) + .ref(0); + _addOperation(req, OP_END); + return req; } function getLatestHighscorer() @@ -69,12 +73,14 @@ contract MockTestL1 is EVMFetchTarget { view returns (EVMFetcher.EVMFetchRequest memory) { - return - EVMFetcher - .newFetchRequest(verifier, target) - .getStatic(0) - .getDynamic(3) - .ref(0); + EVMFetcher.EVMFetchRequest memory req = EVMFetcher + .newFetchRequest(verifier, target) + .getStatic(0) + .getDynamic(3) + .ref(0); + + _addOperation(req, OP_END); + return req; } function getNickname( diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts index 66227bc3..63cdd0a6 100644 --- a/arb-verifier/test/testMockVerifier.ts +++ b/arb-verifier/test/testMockVerifier.ts @@ -1,12 +1,13 @@ /* eslint-disable prettier/prettier */ import { expect } from "chai" -import { AbiCoder, Contract, JsonRpcProvider, ethers } from "ethers" +import { AbiCoder, Contract, JsonRpcProvider, ethers, hexlify, keccak256, toBeHex, toBigInt } from "ethers" import hardhat from "hardhat" -import { ethers as ethers5 } from "ethers5" +import { BigNumber, ethers as ethers5 } from "ethers5" import { ArbProofService } from "@ensdomains/arb-gateway" import rollupAbi from "./abi/rollupABI" +import { solidityKeccak256, toUtf8String } from "ethers5/lib/utils" const rpcMainnet = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" @@ -91,7 +92,7 @@ describe("Arbi Verifier", () => { const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) expect(res[0]).to.equal(42n) }) - it.only("name", async () => { + it("name", async () => { const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) const l2Provider = new JsonRpcProvider(rpcArbitrum); const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( @@ -160,6 +161,84 @@ describe("Arbi Verifier", () => { const [, , commands, , constants] = req const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) - expect(res[0]).to.equal("Satoshi") + expect(toUtf8String(res[0])).to.equal("Satoshi") }) + it("highscore string", async () => { + const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) + const l2Provider = new JsonRpcProvider(rpcArbitrum); + const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( + rpcMainnet + ); + const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( + rpcArbitrum + ); + const s = new ArbProofService( + l2Provider, + l1LegacyProvider, + l2LegacyProvider, + rollupAddr, + helperAddr + + ); + const getBlock = await s.getProvableBlock() + const hash = solidityKeccak256(["uint256", "uint256"], [42n, 3n]) + const proof = await s.getProofs(getBlock, testL2OnArbi, [toBigInt(hash)]) + + + + const outboxF = await hardhat.ethers.getContractFactory("MockRollup") + const mockOutbox = await outboxF.deploy() + + const rollup = new Contract(rollupAddr, rollupAbi, l1Provider) + + const proofEnc = AbiCoder.defaultAbiCoder().decode( + [ + 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', + 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', + ], + proof + + ); + + const idx = proofEnc[0][3] + + + const node = await rollup.getNode(idx) + + const abiEncoded = ethers.AbiCoder.defaultAbiCoder().encode([ + "bytes32", "bytes32", "bytes32", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "bytes32" + ], node) + + + await mockOutbox.pushNode( + idx, + abiEncoded, + ) + /** + * Deploy verifier + */ + + const f = await hardhat.ethers.getContractFactory("ArbVerifier") + const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) + + + /** + * Deploy MockTestL1 + */ + + + const fMockTest = await hardhat.ethers.getContractFactory("MockTestL1") + const mockTestL1 = await fMockTest.deploy(await arbiVerfifier.getAddress(), testL2OnArbi) + + const req = await mockTestL1.getHighscorer(42) + + console.log(req) + + const [, , commands, , constants] = req + const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) + + console.log(res) + expect(toUtf8String(res[0])).to.equal("Hal Finney") + }) + }) \ No newline at end of file From c6159df1668019db03a71d31915eaf2bc19778ad Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 02:06:22 +0300 Subject: [PATCH 16/63] comments --- arb-gateway/src/ArbProofService.ts | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 6f0eda2b..fe1ab78f 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -15,7 +15,7 @@ export interface ArbProvableBlock { /** - * The proofService class can be used to calculate proofs for a given target and slot on the Optimism Bedrock network. + * The proofService class can be used to calculate proofs for a given target and slot on the Arbitrum network. * It's also capable of proofing long types such as mappings or string by using all included slots in the proof. * */ @@ -83,22 +83,42 @@ export class ArbProofService implements IProofService { ] ); } - + /** + * Retrieves information about the latest provable block in the Arbitrum Rollup. + * + * @returns { Promise } A promise that resolves to an object containing information about the provable block. + * @throws Throws an error if any of the underlying operations fail. + * + * @typedef { Object } ArbProvableBlock + * @property { string } rlpEncodedBlock - The RLP - encoded block information. + * @property { string } sendRoot - The send root of the provable block. + * @property { string } blockHash - The hash of the provable block. + * @property { number } nodeIndex - The index of the node corresponding to the provable block. + * @property { number } number - The block number of the provable block. + */ public async getProvableBlock(): Promise { + //Retrieve the latest pending node that has been committed to the rollup. const nodeIndex = await this.rollup.latestNodeCreated() + //We fetch the node created event for the node index we just retrieved. const nodeEventFilter = await this.rollup.filters.NodeCreated(nodeIndex); - const nodeEvents = await this.rollup.queryFilter(nodeEventFilter) as any; + const nodeEvents = await this.rollup.queryFilter(nodeEventFilter); + //Ethers v6 handles events differntly from v5. It dosent seem to decode the events like in v5. Which makes it pretty different to deal with a compley event like the NodeCreated event. + //I'm certain that there are ways to encode the data with ethers v6 but i havent them figured out yet + //TODO refactor to use ethers v6 const assertion = nodeEvents[0].args!.assertion + //The assertion contains all information we need. Unfurtunately, the encoded hence the assertionHelper is used to decode it. + //TODO refactor use AbiCoder instead of assertionHelper const sendRoot = await this.assertionHelper.getSendRoot(assertion) const blockHash = await this.assertionHelper.getBlockHash(assertion) + //The L1 rollup only provides us with the block hash. In order to ensure that the stateRoot we're using for the proof is indeed part of the block, we need to fetch the block. And provide it to the proof. const l2blockRaw = await this.l2LegacyProvider.send('eth_getBlockByHash', [ blockHash, false ]); - + //RLP encoder has problems with bigint types from v6. So v5 is used here as well const blockarray = [ l2blockRaw.parentHash, l2blockRaw.sha3Uncles, @@ -118,7 +138,7 @@ export class ArbProofService implements IProofService { ethers5.BigNumber.from(l2blockRaw.baseFeePerGas).toHexString(), ] - + //Rlp encode the block to pass it as an argument const rlpEncodedBlock = ethers.encodeRlp(blockarray) return { From 13da401b35aece82e27edb58fce2fcd6f8a3eb10 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 02:24:05 +0300 Subject: [PATCH 17/63] add comments --- arb-verifier/contracts/ArbVerifier.sol | 33 +++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index 324f1e16..2816561c 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -14,7 +14,6 @@ struct ArbWitnessData { } contract ArbVerifier is IEVMVerifier { - //Todo replace with IFace IRollupCore public immutable rollup; string[] _gatewayURLs; @@ -23,10 +22,22 @@ contract ArbVerifier is IEVMVerifier { _gatewayURLs = _urls; } + /* + * Retrieves an array of gateway URLs used by the contract. + * @returns {string[]} An array containing the gateway URLs. + * */ function gatewayURLs() external view returns (string[] memory) { return _gatewayURLs; } + /* + * Retrieves storage values from the specified target address + * + * @param {address} target - The target address from which storage values are to be retrieved. + * @param {bytes32[]} commands - An array of storage keys (commands) to query. + * @param {bytes[]} constants - An array of constant values corresponding to the storage keys. + * @param {bytes} proof - The proof data containing Arbitrum witness data and state proof. + */ function getStorageValues( address target, bytes32[] memory commands, @@ -36,13 +47,21 @@ contract ArbVerifier is IEVMVerifier { (ArbWitnessData memory arbData, StateProof memory stateProof) = abi .decode(proof, (ArbWitnessData, StateProof)); + //The confirm data is the keccak256 hash of the block hash and the send root. It is used to verify that the block hash is correct. bytes32 confirmData = keccak256( abi.encodePacked(arbData.blockHash, arbData.sendRoot) ); - + //Get the node from the rollup contract Node memory rblock = rollup.getNode(arbData.nodeIndex); - require(rblock.confirmData == confirmData, 'confirmData mismatch'); + //Verify that the block hash is correct + require(rblock.confirmData == confirmData, 'confirmData mismatch'); + //Verifiy that the block that is being proven is the same as the block that was passed in + require( + arbData.blockHash == keccak256(arbData.rlpEncodedBlock), + 'blockHash encodedBlockArray mismatch' + ); + //Now that we know that the block is valid, we can get the state root from the block. bytes32 stateRoot = decodeBlock(arbData.rlpEncodedBlock); values = EVMProofHelper.getStorageValues( @@ -54,6 +73,14 @@ contract ArbVerifier is IEVMVerifier { ); } + /* + * Decodes a block by extracting and converting the bytes32 value from the RLP-encoded block information. + * + * @param {bytes} rlpEncodedBlock - The RLP-encoded block information. + * @returns {bytes32} The decoded bytes32 value extracted from the RLP-encoded block information. + * + * @notice This function is designed to be used internally within the contract. + */ function decodeBlock( bytes memory rlpEncdoedBlock ) internal pure returns (bytes32) { From c412d33f9f48c51ccde58212680b09a50cc61b23 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 08:38:40 +0300 Subject: [PATCH 18/63] remove OpVerifier from arb-verifier dir --- arb-verifier/contracts/OPVerifier.sol | 72 --------------------------- arb-verifier/test/testArbVerifier.ts | 4 +- 2 files changed, 2 insertions(+), 74 deletions(-) delete mode 100644 arb-verifier/contracts/OPVerifier.sol diff --git a/arb-verifier/contracts/OPVerifier.sol b/arb-verifier/contracts/OPVerifier.sol deleted file mode 100644 index 7961f7e7..00000000 --- a/arb-verifier/contracts/OPVerifier.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; -import {RLPReader} from '@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol'; -import {StateProof, EVMProofHelper} from '@ensdomains/evm-verifier/contracts/EVMProofHelper.sol'; -import {Types} from '@eth-optimism/contracts-bedrock/src/libraries/Types.sol'; -import {Hashing} from '@eth-optimism/contracts-bedrock/src/libraries/Hashing.sol'; - -struct OPWitnessData { - uint256 l2OutputIndex; - Types.OutputRootProof outputRootProof; -} - -interface IL2OutputOracle { - function getL2Output( - uint256 _l2OutputIndex - ) external view returns (Types.OutputProposal memory); -} - -contract OPVerifier is IEVMVerifier { - error OutputRootMismatch( - uint256 l2OutputIndex, - bytes32 expected, - bytes32 actual - ); - - IL2OutputOracle public opOracle; - string[] _gatewayURLs; - - constructor(string[] memory urls, address outputOracle) { - _gatewayURLs = urls; - opOracle = IL2OutputOracle(outputOracle); - } - - function gatewayURLs() external view returns (string[] memory) { - return _gatewayURLs; - } - - function getStorageValues( - address target, - bytes32[] memory commands, - bytes[] memory constants, - bytes memory proof - ) external view returns (bytes[] memory values) { - (OPWitnessData memory opData, StateProof memory stateProof) = abi - .decode(proof, (OPWitnessData, StateProof)); - Types.OutputProposal memory l2out = opOracle.getL2Output( - opData.l2OutputIndex - ); - bytes32 expectedRoot = Hashing.hashOutputRootProof( - opData.outputRootProof - ); - if (l2out.outputRoot != expectedRoot) { - revert OutputRootMismatch( - opData.l2OutputIndex, - expectedRoot, - l2out.outputRoot - ); - } - return - EVMProofHelper.getStorageValues( - target, - commands, - constants, - opData.outputRootProof.stateRoot, - stateProof - ); - } -} - - diff --git a/arb-verifier/test/testArbVerifier.ts b/arb-verifier/test/testArbVerifier.ts index ef234b14..33e822a4 100644 --- a/arb-verifier/test/testArbVerifier.ts +++ b/arb-verifier/test/testArbVerifier.ts @@ -28,8 +28,8 @@ declare module 'hardhat/types/runtime' { ethers: ethersObj; } } - -describe('OPVerifier', () => { +//Skipped because testnet is not working on my machine yet +describe.skip('ArbVerifier', () => { let provider: Provider; let signer: Signer; let gateway: express.Application; From 82bbb12e0362b85bdc1a988dfcfc6975e484fc93 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 08:43:42 +0300 Subject: [PATCH 19/63] add global run script --- README.md | 3 +++ package.json | 1 + 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 85cdd060..205fa24a 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,9 @@ This repository implements a generic CCIP-Read gateway framework for fetching st While this functionality is written primarily with read calls in mind, it also functions for transactions; using a compliant library like Ethers, a transaction that includes relevant L2 proofs can be generated and signed. +## Test Arbitrum +To the the arbritrum resolver, install and build the monorepo and run `bun run test arb` is runs tests against the arbitrum goerli testnet instead of the nitro docker image + ## Usage 1. Have your contract extend `EVMFetcher`. diff --git a/package.json b/package.json index fc11ef95..215ab7ec 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "build": "bun run workspace evm-gateway build && bun run workspace -evm-gateway build", "test": "bun run workspace l1-verifier test && bun run workspace crosschain-resolver test", "lint": "bun run workspace all lint", + "test-arb": "bun run workspace arb-verifier test", "prepare": "husky install" }, "husky": { From 971f3a2379bcff135ec73a3206125fd565578a74 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 08:54:25 +0300 Subject: [PATCH 20/63] update env in server --- arb-gateway/src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts index b5b56b33..2fbe5639 100644 --- a/arb-gateway/src/server.ts +++ b/arb-gateway/src/server.ts @@ -24,7 +24,7 @@ const program = new Command() '' ) .option( - '-o --l2-assertion-helper-address
', + '-ah --l2-assertion-helper-address
', 'address for L2 outbox on the L1', '' ); From 5450c6a7219018523e990d5f4c91c857bc87852c Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 08:55:56 +0300 Subject: [PATCH 21/63] renmae deploy script --- .../{00_op_verifier.ts => 00_arb_verifier.ts} | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) rename arb-verifier/deploy_l1/{00_op_verifier.ts => 00_arb_verifier.ts} (63%) diff --git a/arb-verifier/deploy_l1/00_op_verifier.ts b/arb-verifier/deploy_l1/00_arb_verifier.ts similarity index 63% rename from arb-verifier/deploy_l1/00_op_verifier.ts rename to arb-verifier/deploy_l1/00_arb_verifier.ts index b041f8ba..ce1b0b0f 100644 --- a/arb-verifier/deploy_l1/00_op_verifier.ts +++ b/arb-verifier/deploy_l1/00_arb_verifier.ts @@ -1,10 +1,10 @@ -import {HardhatRuntimeEnvironment} from 'hardhat/types'; -import {DeployFunction} from 'hardhat-deploy/types'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { DeployFunction } from 'hardhat-deploy/types'; import fs from 'fs'; const GATEWAY_URLS = { - 'opDevnetL1':'http://localhost:8080/{sender}/{data}.json', - 'goerli':'https://op-gateway-worker.ens-cf.workers.dev/{sender}/{data}.json', + 'opDevnetL1': 'http://localhost:8089/{sender}/{data}.json', + 'goerli': 'http://localhost:8089/{sender}/{data}.json', } const L2_OUTPUT_ORACLE_ADDRESSES = { @@ -12,14 +12,14 @@ const L2_OUTPUT_ORACLE_ADDRESSES = { } const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - const {deployments, getNamedAccounts, network} = hre; - const {deploy} = deployments; - const {deployer} = await getNamedAccounts(); + const { deployments, getNamedAccounts, network } = hre; + const { deploy } = deployments; + const { deployer } = await getNamedAccounts(); let L2_OUTPUT_ORACLE_ADDRESS, GATEWAY_URL - if(network.name === 'opDevnetL1'){ + if (network.name === 'opDevnetL1') { const opAddresses = await (await fetch("http://localhost:8080/addresses.json")).json(); L2_OUTPUT_ORACLE_ADDRESS = opAddresses.L2OutputOracleProxy - }else{ + } else { L2_OUTPUT_ORACLE_ADDRESS = L2_OUTPUT_ORACLE_ADDRESSES[network.name] } console.log('OPVerifier', [[GATEWAY_URL], L2_OUTPUT_ORACLE_ADDRESS]) From 98b4174050fa64493b3d283a8bb5f3785a8f9433 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Sun, 19 Nov 2023 08:58:51 +0300 Subject: [PATCH 22/63] replace outbox with rollup --- arb-verifier/deploy_l1/00_arb_verifier.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/arb-verifier/deploy_l1/00_arb_verifier.ts b/arb-verifier/deploy_l1/00_arb_verifier.ts index ce1b0b0f..865b0511 100644 --- a/arb-verifier/deploy_l1/00_arb_verifier.ts +++ b/arb-verifier/deploy_l1/00_arb_verifier.ts @@ -1,14 +1,13 @@ -import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; -import fs from 'fs'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; const GATEWAY_URLS = { 'opDevnetL1': 'http://localhost:8089/{sender}/{data}.json', 'goerli': 'http://localhost:8089/{sender}/{data}.json', } -const L2_OUTPUT_ORACLE_ADDRESSES = { - 'goerli': '0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0' +const ROLLUP_ADDRESSES = { + 'goerli': '0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17' } const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { @@ -20,14 +19,14 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const opAddresses = await (await fetch("http://localhost:8080/addresses.json")).json(); L2_OUTPUT_ORACLE_ADDRESS = opAddresses.L2OutputOracleProxy } else { - L2_OUTPUT_ORACLE_ADDRESS = L2_OUTPUT_ORACLE_ADDRESSES[network.name] + L2_OUTPUT_ORACLE_ADDRESS = ROLLUP_ADDRESSES[network.name] } - console.log('OPVerifier', [[GATEWAY_URL], L2_OUTPUT_ORACLE_ADDRESS]) - await deploy('OPVerifier', { + console.log('ArbVerifier', [[GATEWAY_URL], L2_OUTPUT_ORACLE_ADDRESS]) + await deploy('ArbVerifier', { from: deployer, args: [[GATEWAY_URLS[network.name]], L2_OUTPUT_ORACLE_ADDRESS], log: true, }); }; export default func; -func.tags = ['OPVerifier']; +func.tags = ['ArbVerifier']; From a6128cd33837865a5beb6baae86e798d2f29d57c Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Tue, 21 Nov 2023 16:23:57 +0100 Subject: [PATCH 23/63] clean up code --- arb-gateway/package.json | 3 +- arb-gateway/src/ArbProofService.ts | 49 +-- arb-gateway/src/index.ts | 13 +- arb-gateway/src/server.ts | 23 +- arb-gateway/src/worker.ts | 20 +- arb-verifier/contracts/AssertionHelper.sol | 462 --------------------- arb-verifier/package.json | 1 - arb-verifier/test/arbPlayground.ts | 116 ------ arb-verifier/test/gist.ts | 123 ------ arb-verifier/test/testMockVerifier.ts | 44 +- bun.lockb | Bin 689392 -> 689264 bytes 11 files changed, 41 insertions(+), 813 deletions(-) delete mode 100644 arb-verifier/contracts/AssertionHelper.sol delete mode 100644 arb-verifier/test/arbPlayground.ts delete mode 100644 arb-verifier/test/gist.ts diff --git a/arb-gateway/package.json b/arb-gateway/package.json index eaf18ff9..bc2d5207 100644 --- a/arb-gateway/package.json +++ b/arb-gateway/package.json @@ -62,7 +62,6 @@ "@ethereumjs/block": "^5.0.0", "@nomicfoundation/ethereumjs-block": "^5.0.2", "commander": "^11.0.0", - "ethers": "^6.7.1", - "ethers5": "npm:ethers@5.7.2" + "ethers": "^6.7.1" } } diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index fe1ab78f..37329a49 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -1,8 +1,7 @@ /* eslint-disable prettier/prettier */ import { EVMProofHelper, type IProofService } from '@ensdomains/evm-gateway'; -import { AbiCoder, ethers, type AddressLike } from 'ethers'; +import { AbiCoder, Contract, EventLog, ethers, toBeHex, type AddressLike } from 'ethers'; import { ethers as ethers5 } from "ethers5"; -import helperAbi from "./abi/helperAbi.js"; import rollupAbi from "./abi/rollupABI.js"; export interface ArbProvableBlock { number: number @@ -20,28 +19,24 @@ export interface ArbProvableBlock { * */ export class ArbProofService implements IProofService { - private readonly l2LegacyProvider: ethers5.providers.JsonRpcProvider; - private readonly rollup: ethers5.Contract; - private readonly assertionHelper: ethers5.Contract; + private readonly l2Provider: ethers.JsonRpcProvider; + private readonly rollup: Contract; private readonly helper: EVMProofHelper; constructor( + l1Provider: ethers.JsonRpcProvider, l2Provider: ethers.JsonRpcProvider, - l1LegacyProvider: ethers5.providers.JsonRpcProvider, - l2LegacyProvider: ethers5.providers.JsonRpcProvider, l2RollupAddress: string, - assertionHelperAddress: string + ) { - this.l2LegacyProvider = l2LegacyProvider; - this.rollup = new ethers5.Contract( + this.l2Provider = l2Provider; + this.rollup = new Contract( l2RollupAddress, rollupAbi, ); this.helper = new EVMProofHelper(l2Provider); - this.rollup = new ethers5.Contract(l2RollupAddress, rollupAbi, l1LegacyProvider) - this.assertionHelper = new ethers5.Contract(assertionHelperAddress, helperAbi, l2LegacyProvider) - + this.rollup = new Contract(l2RollupAddress, rollupAbi, l1Provider) } @@ -103,18 +98,13 @@ export class ArbProofService implements IProofService { //We fetch the node created event for the node index we just retrieved. const nodeEventFilter = await this.rollup.filters.NodeCreated(nodeIndex); const nodeEvents = await this.rollup.queryFilter(nodeEventFilter); - //Ethers v6 handles events differntly from v5. It dosent seem to decode the events like in v5. Which makes it pretty different to deal with a compley event like the NodeCreated event. - //I'm certain that there are ways to encode the data with ethers v6 but i havent them figured out yet - //TODO refactor to use ethers v6 - const assertion = nodeEvents[0].args!.assertion + const assertion = (nodeEvents[0] as EventLog).args!.assertion + //Instead of using the AssertionHelper contract we can extract sendRoot from the assertion. Avoiding the deployment of the AssertionHelper contract and an additional RPC call. + const [blockHash, sendRoot] = assertion[1][0][0] - //The assertion contains all information we need. Unfurtunately, the encoded hence the assertionHelper is used to decode it. - //TODO refactor use AbiCoder instead of assertionHelper - const sendRoot = await this.assertionHelper.getSendRoot(assertion) - const blockHash = await this.assertionHelper.getBlockHash(assertion) //The L1 rollup only provides us with the block hash. In order to ensure that the stateRoot we're using for the proof is indeed part of the block, we need to fetch the block. And provide it to the proof. - const l2blockRaw = await this.l2LegacyProvider.send('eth_getBlockByHash', [ + const l2blockRaw = await this.l2Provider.send('eth_getBlockByHash', [ blockHash, false ]); @@ -127,15 +117,15 @@ export class ArbProofService implements IProofService { l2blockRaw.transactionsRoot, l2blockRaw.receiptsRoot, l2blockRaw.logsBloom, - ethers5.BigNumber.from(l2blockRaw.difficulty).toHexString(), - ethers5.BigNumber.from(l2blockRaw.number).toHexString(), - ethers5.BigNumber.from(l2blockRaw.gasLimit).toHexString(), - ethers5.BigNumber.from(l2blockRaw.gasUsed).toHexString(), - ethers5.BigNumber.from(l2blockRaw.timestamp).toHexString(), + toBeHex(l2blockRaw.difficulty), + toBeHex(l2blockRaw.number), + toBeHex(l2blockRaw.gasLimit), + toBeHex(l2blockRaw.gasUsed), + toBeHex(l2blockRaw.timestamp), l2blockRaw.extraData, l2blockRaw.mixHash, l2blockRaw.nonce, - ethers5.BigNumber.from(l2blockRaw.baseFeePerGas).toHexString(), + toBeHex(l2blockRaw.baseFeePerGas) ] //Rlp encode the block to pass it as an argument @@ -145,10 +135,9 @@ export class ArbProofService implements IProofService { rlpEncodedBlock, sendRoot, blockHash, - nodeIndex: nodeIndex.toNumber(), + nodeIndex: nodeIndex, number: ethers5.BigNumber.from(l2blockRaw.number).toNumber(), } } - } diff --git a/arb-gateway/src/index.ts b/arb-gateway/src/index.ts index 7935e725..c0ddd824 100644 --- a/arb-gateway/src/index.ts +++ b/arb-gateway/src/index.ts @@ -1,7 +1,6 @@ import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService, type ArbProvableBlock } from './ArbProofService.js'; -import { ethers as ethers5 } from "ethers5"; export type ArbGateway = EVMGateway; @@ -10,19 +9,11 @@ export async function makeArbGateway( l1providerUrl: string, l2providerUrl: string, l2RollupAddress: string, - l2AssertionHelperaddress: string, ): Promise { + const l1Provider = new JsonRpcProvider(l1providerUrl); const l2Provider = new JsonRpcProvider(l2providerUrl); - const l1LegacyProvider = new ethers5.providers.JsonRpcProvider(l1providerUrl); - const l2LegacyProvider = new ethers5.providers.JsonRpcProvider(l2providerUrl); return new EVMGateway( - await new ArbProofService( - l2Provider, - l1LegacyProvider, - l2LegacyProvider, - l2RollupAddress, - l2AssertionHelperaddress - ) + await new ArbProofService(l1Provider, l2Provider, l2RollupAddress) ); } diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts index 2fbe5639..aa6d186d 100644 --- a/arb-gateway/src/server.ts +++ b/arb-gateway/src/server.ts @@ -3,7 +3,6 @@ import { Command } from '@commander-js/extra-typings'; import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService } from './ArbProofService.js'; -import { ethers as ethers5 } from "ethers5"; const program = new Command() @@ -22,34 +21,18 @@ const program = new Command() '-o --l2-rollup-address
', 'address for L2 outbox on the L1', '' - ) - .option( - '-ah --l2-assertion-helper-address
', - 'address for L2 outbox on the L1', - '' ); - + program.parse(); (async () => { const options = program.opts(); + const l1Provider = new JsonRpcProvider(options.l1ProviderUrl); const l2Provider = new JsonRpcProvider(options.l2ProviderUrl); - const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( - options.l1ProviderUrl - ); - const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( - options.l2ProviderUrl - ); const gateway = new EVMGateway( - new ArbProofService( - l2Provider, - l1LegacyProvider, - l2LegacyProvider, - options.l2RollupAddress, - options.l2AssertionHelperAddress - ) + new ArbProofService(l1Provider, l2Provider, options.l2RollupAddress) ); const server = new Server(); gateway.add(server); diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts index 0d95a06f..99f78850 100644 --- a/arb-gateway/src/worker.ts +++ b/arb-gateway/src/worker.ts @@ -4,7 +4,6 @@ interface Env { L1_PROVIDER_URL: string; L2_PROVIDER_URL: string; L2_ROLLUP: string; - L2_ASSERTION_HELPER: string; } let app: Router; @@ -13,32 +12,19 @@ async function fetch(request: Request, env: Env) { // Otherwise, deployment thorws "Error: Script startup exceeded CPU time limit." error if (!app) { const ethers = await import('ethers'); - const ethers5 = await import('ethers5'); const EVMGateway = (await import('@ensdomains/evm-gateway')).EVMGateway; const ArbProofService = (await import('./ArbProofService.js')) .ArbProofService; // Set PROVIDER_URL under .dev.vars locally. Set the key as secret remotely with `wrangler secret put WORKER_PROVIDER_URL` - const { L1_PROVIDER_URL, L2_PROVIDER_URL, L2_ROLLUP, L2_ASSERTION_HELPER } = env; + const { L1_PROVIDER_URL, L2_PROVIDER_URL, L2_ROLLUP } = env; + const l1Provider = new ethers.JsonRpcProvider(L1_PROVIDER_URL); const l2Provider = new ethers.JsonRpcProvider(L2_PROVIDER_URL); - const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( - L1_PROVIDER_URL - ); - const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( - L2_PROVIDER_URL - ); - console.log({ L1_PROVIDER_URL, L2_PROVIDER_URL }); const gateway = new EVMGateway( - new ArbProofService( - l2Provider, - l1LegacyProvider, - l2LegacyProvider, - L2_ROLLUP, - L2_ASSERTION_HELPER - ) + new ArbProofService(l1Provider, l2Provider, L2_ROLLUP) ); const server = new Server(); diff --git a/arb-verifier/contracts/AssertionHelper.sol b/arb-verifier/contracts/AssertionHelper.sol deleted file mode 100644 index d009b186..00000000 --- a/arb-verifier/contracts/AssertionHelper.sol +++ /dev/null @@ -1,462 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2022-12-20 -*/ - -// File: @arbitrum/nitro-contracts/src/state/Instructions.sol - -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE - - -pragma solidity ^0.8.0; - -struct Instruction { - uint16 opcode; - uint256 argumentData; -} - -library Instructions { - uint16 internal constant UNREACHABLE = 0x00; - uint16 internal constant NOP = 0x01; - uint16 internal constant RETURN = 0x0F; - uint16 internal constant CALL = 0x10; - uint16 internal constant CALL_INDIRECT = 0x11; - uint16 internal constant LOCAL_GET = 0x20; - uint16 internal constant LOCAL_SET = 0x21; - uint16 internal constant GLOBAL_GET = 0x23; - uint16 internal constant GLOBAL_SET = 0x24; - - uint16 internal constant I32_LOAD = 0x28; - uint16 internal constant I64_LOAD = 0x29; - uint16 internal constant F32_LOAD = 0x2A; - uint16 internal constant F64_LOAD = 0x2B; - uint16 internal constant I32_LOAD8_S = 0x2C; - uint16 internal constant I32_LOAD8_U = 0x2D; - uint16 internal constant I32_LOAD16_S = 0x2E; - uint16 internal constant I32_LOAD16_U = 0x2F; - uint16 internal constant I64_LOAD8_S = 0x30; - uint16 internal constant I64_LOAD8_U = 0x31; - uint16 internal constant I64_LOAD16_S = 0x32; - uint16 internal constant I64_LOAD16_U = 0x33; - uint16 internal constant I64_LOAD32_S = 0x34; - uint16 internal constant I64_LOAD32_U = 0x35; - - uint16 internal constant I32_STORE = 0x36; - uint16 internal constant I64_STORE = 0x37; - uint16 internal constant F32_STORE = 0x38; - uint16 internal constant F64_STORE = 0x39; - uint16 internal constant I32_STORE8 = 0x3A; - uint16 internal constant I32_STORE16 = 0x3B; - uint16 internal constant I64_STORE8 = 0x3C; - uint16 internal constant I64_STORE16 = 0x3D; - uint16 internal constant I64_STORE32 = 0x3E; - - uint16 internal constant MEMORY_SIZE = 0x3F; - uint16 internal constant MEMORY_GROW = 0x40; - - uint16 internal constant DROP = 0x1A; - uint16 internal constant SELECT = 0x1B; - uint16 internal constant I32_CONST = 0x41; - uint16 internal constant I64_CONST = 0x42; - uint16 internal constant F32_CONST = 0x43; - uint16 internal constant F64_CONST = 0x44; - uint16 internal constant I32_EQZ = 0x45; - uint16 internal constant I32_RELOP_BASE = 0x46; - uint16 internal constant IRELOP_EQ = 0; - uint16 internal constant IRELOP_NE = 1; - uint16 internal constant IRELOP_LT_S = 2; - uint16 internal constant IRELOP_LT_U = 3; - uint16 internal constant IRELOP_GT_S = 4; - uint16 internal constant IRELOP_GT_U = 5; - uint16 internal constant IRELOP_LE_S = 6; - uint16 internal constant IRELOP_LE_U = 7; - uint16 internal constant IRELOP_GE_S = 8; - uint16 internal constant IRELOP_GE_U = 9; - uint16 internal constant IRELOP_LAST = IRELOP_GE_U; - - uint16 internal constant I64_EQZ = 0x50; - uint16 internal constant I64_RELOP_BASE = 0x51; - - uint16 internal constant I32_UNOP_BASE = 0x67; - uint16 internal constant IUNOP_CLZ = 0; - uint16 internal constant IUNOP_CTZ = 1; - uint16 internal constant IUNOP_POPCNT = 2; - uint16 internal constant IUNOP_LAST = IUNOP_POPCNT; - - uint16 internal constant I32_ADD = 0x6A; - uint16 internal constant I32_SUB = 0x6B; - uint16 internal constant I32_MUL = 0x6C; - uint16 internal constant I32_DIV_S = 0x6D; - uint16 internal constant I32_DIV_U = 0x6E; - uint16 internal constant I32_REM_S = 0x6F; - uint16 internal constant I32_REM_U = 0x70; - uint16 internal constant I32_AND = 0x71; - uint16 internal constant I32_OR = 0x72; - uint16 internal constant I32_XOR = 0x73; - uint16 internal constant I32_SHL = 0x74; - uint16 internal constant I32_SHR_S = 0x75; - uint16 internal constant I32_SHR_U = 0x76; - uint16 internal constant I32_ROTL = 0x77; - uint16 internal constant I32_ROTR = 0x78; - - uint16 internal constant I64_UNOP_BASE = 0x79; - - uint16 internal constant I64_ADD = 0x7C; - uint16 internal constant I64_SUB = 0x7D; - uint16 internal constant I64_MUL = 0x7E; - uint16 internal constant I64_DIV_S = 0x7F; - uint16 internal constant I64_DIV_U = 0x80; - uint16 internal constant I64_REM_S = 0x81; - uint16 internal constant I64_REM_U = 0x82; - uint16 internal constant I64_AND = 0x83; - uint16 internal constant I64_OR = 0x84; - uint16 internal constant I64_XOR = 0x85; - uint16 internal constant I64_SHL = 0x86; - uint16 internal constant I64_SHR_S = 0x87; - uint16 internal constant I64_SHR_U = 0x88; - uint16 internal constant I64_ROTL = 0x89; - uint16 internal constant I64_ROTR = 0x8A; - - uint16 internal constant I32_WRAP_I64 = 0xA7; - uint16 internal constant I64_EXTEND_I32_S = 0xAC; - uint16 internal constant I64_EXTEND_I32_U = 0xAD; - - uint16 internal constant I32_REINTERPRET_F32 = 0xBC; - uint16 internal constant I64_REINTERPRET_F64 = 0xBD; - uint16 internal constant F32_REINTERPRET_I32 = 0xBE; - uint16 internal constant F64_REINTERPRET_I64 = 0xBF; - - uint16 internal constant I32_EXTEND_8S = 0xC0; - uint16 internal constant I32_EXTEND_16S = 0xC1; - uint16 internal constant I64_EXTEND_8S = 0xC2; - uint16 internal constant I64_EXTEND_16S = 0xC3; - uint16 internal constant I64_EXTEND_32S = 0xC4; - - uint16 internal constant INIT_FRAME = 0x8002; - uint16 internal constant ARBITRARY_JUMP = 0x8003; - uint16 internal constant ARBITRARY_JUMP_IF = 0x8004; - uint16 internal constant MOVE_FROM_STACK_TO_INTERNAL = 0x8005; - uint16 internal constant MOVE_FROM_INTERNAL_TO_STACK = 0x8006; - uint16 internal constant DUP = 0x8008; - uint16 internal constant CROSS_MODULE_CALL = 0x8009; - uint16 internal constant CALLER_MODULE_INTERNAL_CALL = 0x800A; - - uint16 internal constant GET_GLOBAL_STATE_BYTES32 = 0x8010; - uint16 internal constant SET_GLOBAL_STATE_BYTES32 = 0x8011; - uint16 internal constant GET_GLOBAL_STATE_U64 = 0x8012; - uint16 internal constant SET_GLOBAL_STATE_U64 = 0x8013; - - uint16 internal constant READ_PRE_IMAGE = 0x8020; - uint16 internal constant READ_INBOX_MESSAGE = 0x8021; - uint16 internal constant HALT_AND_SET_FINISHED = 0x8022; - - uint256 internal constant INBOX_INDEX_SEQUENCER = 0; - uint256 internal constant INBOX_INDEX_DELAYED = 1; - - function hash(Instruction memory inst) internal pure returns (bytes32) { - return keccak256(abi.encodePacked("Instruction:", inst.opcode, inst.argumentData)); - } -} - -enum ValueType { - I32, - I64, - F32, - F64, - REF_NULL, - FUNC_REF, - INTERNAL_REF -} - -struct Value { - ValueType valueType; - uint256 contents; -} - -library ValueLib { - function hash(Value memory val) internal pure returns (bytes32) { - return keccak256(abi.encodePacked("Value:", val.valueType, val.contents)); - } - - function maxValueType() internal pure returns (ValueType) { - return ValueType.INTERNAL_REF; - } - - function assumeI32(Value memory val) internal pure returns (uint32) { - uint256 uintval = uint256(val.contents); - require(val.valueType == ValueType.I32, "NOT_I32"); - require(uintval < (1 << 32), "BAD_I32"); - return uint32(uintval); - } - - function assumeI64(Value memory val) internal pure returns (uint64) { - uint256 uintval = uint256(val.contents); - require(val.valueType == ValueType.I64, "NOT_I64"); - require(uintval < (1 << 64), "BAD_I64"); - return uint64(uintval); - } - - function newRefNull() internal pure returns (Value memory) { - return Value({valueType: ValueType.REF_NULL, contents: 0}); - } - - function newI32(uint32 x) internal pure returns (Value memory) { - return Value({valueType: ValueType.I32, contents: uint256(x)}); - } - - function newI64(uint64 x) internal pure returns (Value memory) { - return Value({valueType: ValueType.I64, contents: uint256(x)}); - } - - function newBoolean(bool x) internal pure returns (Value memory) { - if (x) { - return newI32(uint32(1)); - } else { - return newI32(uint32(0)); - } - } -} - -struct StackFrame { - Value returnPc; - bytes32 localsMerkleRoot; - uint32 callerModule; - uint32 callerModuleInternals; -} - -struct StackFrameWindow { - StackFrame[] proved; - bytes32 remainingHash; -} - -library StackFrameLib { - using ValueLib for Value; - - function hash(StackFrame memory frame) internal pure returns (bytes32) { - return - keccak256( - abi.encodePacked( - "Stack frame:", - frame.returnPc.hash(), - frame.localsMerkleRoot, - frame.callerModule, - frame.callerModuleInternals - ) - ); - } - - function hash(StackFrameWindow memory window) internal pure returns (bytes32 h) { - h = window.remainingHash; - for (uint256 i = 0; i < window.proved.length; i++) { - h = keccak256(abi.encodePacked("Stack frame stack:", hash(window.proved[i]), h)); - } - } - - function peek(StackFrameWindow memory window) internal pure returns (StackFrame memory) { - require(window.proved.length == 1, "BAD_WINDOW_LENGTH"); - return window.proved[0]; - } - - function pop(StackFrameWindow memory window) internal pure returns (StackFrame memory frame) { - require(window.proved.length == 1, "BAD_WINDOW_LENGTH"); - frame = window.proved[0]; - window.proved = new StackFrame[](0); - } - - function push(StackFrameWindow memory window, StackFrame memory frame) internal pure { - StackFrame[] memory newProved = new StackFrame[](window.proved.length + 1); - for (uint256 i = 0; i < window.proved.length; i++) { - newProved[i] = window.proved[i]; - } - newProved[window.proved.length] = frame; - window.proved = newProved; - } -} - -struct ValueArray { - Value[] inner; -} - -library ValueArrayLib { - function get(ValueArray memory arr, uint256 index) internal pure returns (Value memory) { - return arr.inner[index]; - } - - function set( - ValueArray memory arr, - uint256 index, - Value memory val - ) internal pure { - arr.inner[index] = val; - } - - function length(ValueArray memory arr) internal pure returns (uint256) { - return arr.inner.length; - } - - function push(ValueArray memory arr, Value memory val) internal pure { - Value[] memory newInner = new Value[](arr.inner.length + 1); - for (uint256 i = 0; i < arr.inner.length; i++) { - newInner[i] = arr.inner[i]; - } - newInner[arr.inner.length] = val; - arr.inner = newInner; - } - - function pop(ValueArray memory arr) internal pure returns (Value memory popped) { - popped = arr.inner[arr.inner.length - 1]; - Value[] memory newInner = new Value[](arr.inner.length - 1); - for (uint256 i = 0; i < newInner.length; i++) { - newInner[i] = arr.inner[i]; - } - arr.inner = newInner; - } -} - -struct ValueStack { - ValueArray proved; - bytes32 remainingHash; -} - -library ValueStackLib { - using ValueLib for Value; - using ValueArrayLib for ValueArray; - - function hash(ValueStack memory stack) internal pure returns (bytes32 h) { - h = stack.remainingHash; - uint256 len = stack.proved.length(); - for (uint256 i = 0; i < len; i++) { - h = keccak256(abi.encodePacked("Value stack:", stack.proved.get(i).hash(), h)); - } - } - - function peek(ValueStack memory stack) internal pure returns (Value memory) { - uint256 len = stack.proved.length(); - return stack.proved.get(len - 1); - } - - function pop(ValueStack memory stack) internal pure returns (Value memory) { - return stack.proved.pop(); - } - - function push(ValueStack memory stack, Value memory val) internal pure { - return stack.proved.push(val); - } -} - -enum MachineStatus { - RUNNING, - FINISHED, - ERRORED, - TOO_FAR -} - -struct Machine { - MachineStatus status; - ValueStack valueStack; - ValueStack internalStack; - StackFrameWindow frameStack; - bytes32 globalStateHash; - uint32 moduleIdx; - uint32 functionIdx; - uint32 functionPc; - bytes32 modulesRoot; -} - -library MachineLib { - using StackFrameLib for StackFrameWindow; - using ValueStackLib for ValueStack; - - function hash(Machine memory mach) internal pure returns (bytes32) { - // Warning: the non-running hashes are replicated in Challenge - if (mach.status == MachineStatus.RUNNING) { - return - keccak256( - abi.encodePacked( - "Machine running:", - mach.valueStack.hash(), - mach.internalStack.hash(), - mach.frameStack.hash(), - mach.globalStateHash, - mach.moduleIdx, - mach.functionIdx, - mach.functionPc, - mach.modulesRoot - ) - ); - } else if (mach.status == MachineStatus.FINISHED) { - return keccak256(abi.encodePacked("Machine finished:", mach.globalStateHash)); - } else if (mach.status == MachineStatus.ERRORED) { - return keccak256(abi.encodePacked("Machine errored:")); - } else if (mach.status == MachineStatus.TOO_FAR) { - return keccak256(abi.encodePacked("Machine too far:")); - } else { - revert("BAD_MACH_STATUS"); - } - } -} -struct GlobalState { - bytes32[2] bytes32Vals; - uint64[2] u64Vals; -} - -library GlobalStateLib { - uint16 internal constant BYTES32_VALS_NUM = 2; - uint16 internal constant U64_VALS_NUM = 2; - - function hash(GlobalState memory state) internal pure returns (bytes32) { - return - keccak256( - abi.encodePacked( - "Global state:", - state.bytes32Vals[0], - state.bytes32Vals[1], - state.u64Vals[0], - state.u64Vals[1] - ) - ); - } - - function getBlockHash(GlobalState memory state) internal pure returns (bytes32) { - return state.bytes32Vals[0]; - } - - function getSendRoot(GlobalState memory state) internal pure returns (bytes32) { - return state.bytes32Vals[1]; - } - - function getInboxPosition(GlobalState memory state) internal pure returns (uint64) { - return state.u64Vals[0]; - } - - function getPositionInMessage(GlobalState memory state) internal pure returns (uint64) { - return state.u64Vals[1]; - } - - function isEmpty(GlobalState calldata state) internal pure returns (bool) { - return (state.bytes32Vals[0] == bytes32(0) && - state.bytes32Vals[1] == bytes32(0) && - state.u64Vals[0] == 0 && - state.u64Vals[1] == 0); - } -} - -struct ExecutionState { - GlobalState globalState; - MachineStatus machineStatus; -} - -struct Assertion { - ExecutionState beforeState; - ExecutionState afterState; - uint64 numBlocks; -} - -contract AssertionHelper{ - function getBlockHash(Assertion calldata assertion) external pure returns(bytes32 hash){ - hash = GlobalStateLib.getBlockHash(assertion.afterState.globalState); - } - function getSendRoot(Assertion calldata assertion) external pure returns(bytes32 root){ - root = GlobalStateLib.getSendRoot(assertion.afterState.globalState); - } -} \ No newline at end of file diff --git a/arb-verifier/package.json b/arb-verifier/package.json index 014c6957..2b20f699 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -24,7 +24,6 @@ "@types/supertest": "^2.0.14", "chai": "^4.2.0", "ethers": "^6.8.0", - "ethers5": "npm:ethers@5.7.2", "express": "^4.18.2", "ganache": "^7.9.1", "hardhat": "^2.16.0", diff --git a/arb-verifier/test/arbPlayground.ts b/arb-verifier/test/arbPlayground.ts deleted file mode 100644 index 6c8cc44d..00000000 --- a/arb-verifier/test/arbPlayground.ts +++ /dev/null @@ -1,116 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -/* eslint-disable prettier/prettier */ -import { AbiCoder, Contract, Interface, JsonRpcProvider, ethers } from "ethers" -import { ethers as ethers5 } from "ethers5" -const test1Contract = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" - -import rollupAbi from "./abi/rollupABI" -import helperAbi from "./abi/helperAbi" -import { ArbProofService } from "@ensdomains/arb-gateway" - -const rpcMainnet = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" -const rpcArbitrum = "https://arb-goerli.g.alchemy.com/v2/k2Vp4opdLW3ueLYaTPndSFtx4m7T3s71" -const outboxGoerli = "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049" -const rollupAddr = "0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17" -const helperAddr = "0xC2ffb7bB521f7C48aAA3Ee0e3E35D5ca1A6CE53A" - - -const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) -const l2Provider = new ethers.JsonRpcProvider(rpcArbitrum, { - chainId: 421613, - name: "arbi goelri" -}) - -const runProofService = async () => { - - const l2Provider = new JsonRpcProvider(rpcArbitrum); - const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( - rpcMainnet - ); - const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( - rpcArbitrum - ); - const s = new ArbProofService( - l2Provider, - l1LegacyProvider, - l2LegacyProvider, - rollupAddr, - helperAddr - ); - - const getBlock = await s.getProvableBlock() - const proofs = await s.getProofs(getBlock, test1Contract, [0n]) - - console.log(proofs) - -} - - -//arbPlayground() -//readFromContract() -//runProofService() - -const withRollup = async () => { - const rollup = new ethers5.Contract(rollupAddr, rollupAbi, new ethers5.providers.JsonRpcProvider(rpcMainnet)) - const helper = new ethers5.Contract(helperAddr, helperAbi, new ethers5.providers.JsonRpcProvider(rpcArbitrum)) - - const nodeIdx = await rollup.latestNodeCreated() - - const nodeEventFilter = await rollup.filters.NodeCreated(nodeIdx); - const nodeEvents = await rollup.queryFilter(nodeEventFilter) as any; - const assertion = nodeEvents[0].args!.assertion - - const sendRoot = await helper.getSendRoot(assertion) - const blockHash = await helper.getBlockHash(assertion) - - const l2blockRaw = await l2Provider.send('eth_getBlockByHash', [ - blockHash, - false - ]); - const stateRoot = l2blockRaw.stateRoot - console.log(l2blockRaw) - const blockarray = [ - l2blockRaw.parentHash, - l2blockRaw.sha3Uncles, - l2blockRaw.miner, - l2blockRaw.stateRoot, - l2blockRaw.transactionsRoot, - l2blockRaw.receiptsRoot, - l2blockRaw.logsBloom, - ethers5.BigNumber.from(l2blockRaw.difficulty).toHexString(), - ethers5.BigNumber.from(l2blockRaw.number).toHexString(), - ethers5.BigNumber.from(l2blockRaw.gasLimit).toHexString(), - ethers5.BigNumber.from(l2blockRaw.gasUsed).toHexString(), - ethers5.BigNumber.from(l2blockRaw.timestamp).toHexString(), - l2blockRaw.extraData, - l2blockRaw.mixHash, - l2blockRaw.nonce, - ethers5.BigNumber.from(l2blockRaw.baseFeePerGas).toHexString(), - ] - - - const encodedBlockArray = ethers.encodeRlp(blockarray) - const slot = ethers.ZeroHash - - console.log(encodedBlockArray) - - console.log(nodeIdx.toString()) - - console.log(nodeIdx.toString()) - -} - -//withRollup() - -const getNode = async () => { - const idx = 12323 - - const rollup = new Contract(rollupAddr, rollupAbi,l1Provider) - - const n = await rollup.getNode(idx) - - console.log(n) - -} - -//getNode() \ No newline at end of file diff --git a/arb-verifier/test/gist.ts b/arb-verifier/test/gist.ts deleted file mode 100644 index 26af9c71..00000000 --- a/arb-verifier/test/gist.ts +++ /dev/null @@ -1,123 +0,0 @@ -/* eslint-disable prettier/prettier *//* -import { Server } from '@chainlink/ccip-read-server'; -import { Command } from 'commander'; -import { ethers } from 'ethers'; - -const IResolverAbi = require('@ensdomains/arb-resolver-contracts/artifacts/contracts/l1/ArbitrumResolverStub.sol/IResolverService.json').abi -const helperAbi = require('@ensdomains/arb-resolver-contracts/artifacts/contracts/l1/AssertionHelper.sol/AssertionHelper.json').abi - -const rollupAbi = require('../src/rollup.json') -const { BigNumber } = ethers -const program = new Command(); -program - .option('-r --l2_resolver_address
', 'RESOLVER_ADDRESS') - .option('-h --helper_address ', 'HELPER_ADDRESS') - .option('-l1p --l1_provider_url ', 'L1_PROVIDER_URL', 'http://localhost:8545') - .option('-l2p --l2_provider_url ', 'L2_PROVIDER_URL', 'http://localhost:8547') - .option('-l1c --l1_chain_id ', 'L1_CHAIN_ID', '1337') - .option('-l2c --l2_chain_id ', 'L2_CHAIN_ID', '412346') - .option('-ru --rollup_address ', 'ROLLUP_ADDRESS', '0x7456c45bfd495b7bcf424c0a7993a324035f682f') - .option('-d --debug', 'debug', false) - // - .option('-v --verification_option ', 'latest|finalized|number_of_blocks', 'latest') - .option('-p --port ', 'Port number to serve on', '8081'); -program.parse(process.argv); -const options = program.opts(); -console.log({ options }) -const { l1_provider_url, l2_provider_url, rollup_address, helper_address, l2_resolver_address, l1_chain_id, l2_chain_id, debug, verification_option } = options -if (helper_address === undefined || l2_resolver_address === undefined) { - throw ('Must specify --l2_resolver_address and --helper_address') -} - -const l1provider = new ethers.providers.JsonRpcProvider(l1_provider_url); -const l2provider = new ethers.providers.JsonRpcProvider(l2_provider_url); -const rollup = new ethers.Contract(rollup_address, rollupAbi, l1provider); -const helper = new ethers.Contract(helper_address, helperAbi, l1provider); -const server = new Server(); - -server.add(IResolverAbi, [ - { - type: 'addr(bytes32)', - func: async ([node], { to, data: _callData }) => { - const addrSlot = ethers.utils.keccak256(node + '00'.repeat(31) + '01'); - if (debug) { - console.log(1, { node, to, _callData, l1_provider_url, l2_provider_url, l2_resolver_address, l1_chain_id, l2_chain_id }) - const blockNumber = (await l2provider.getBlock('latest')).number - console.log(2, { blockNumber, addrSlot }) - let addressData - try { - addressData = await l2provider.getStorageAt(l2_resolver_address, addrSlot) - } catch (e) { - console.log(3, { e }) - } - console.log(4, { - addressData - }) - } - let nodeIndex, ago - if (verification_option === 'latest') { - nodeIndex = await rollup.latestNodeCreated() - } else { - if (verification_option === 'finalized') { - ago = 0 - } else { - ago = parseInt(verification_option) - } - nodeIndex = (await rollup.latestConfirmed()).sub(ago) - } - console.log({ verification_option, nodeIndex: nodeIndex.toString(), ago }) - const nodeEventFilter = await rollup.filters.NodeCreated(nodeIndex); - const nodeEvents = await rollup.queryFilter(nodeEventFilter); - const assertion = nodeEvents[0].args!.assertion - const sendRoot = await helper.getSendRoot(assertion) - const blockHash = await helper.getBlockHash(assertion) - const l2blockRaw = await l2provider.send('eth_getBlockByHash', [ - blockHash, - false - ]); - console.log(5, { l2blockRaw }) - const stateRoot = l2blockRaw.stateRoot - const blockarray = [ - l2blockRaw.parentHash, - l2blockRaw.sha3Uncles, - l2blockRaw.miner, - l2blockRaw.stateRoot, - l2blockRaw.transactionsRoot, - l2blockRaw.receiptsRoot, - l2blockRaw.logsBloom, - BigNumber.from(l2blockRaw.difficulty).toHexString(), - BigNumber.from(l2blockRaw.number).toHexString(), - BigNumber.from(l2blockRaw.gasLimit).toHexString(), - BigNumber.from(l2blockRaw.gasUsed).toHexString(), - BigNumber.from(l2blockRaw.timestamp).toHexString(), - l2blockRaw.extraData, - l2blockRaw.mixHash, - l2blockRaw.nonce, - BigNumber.from(l2blockRaw.baseFeePerGas).toHexString(), - ] - const encodedBlockArray = ethers.utils.RLP.encode(blockarray) - const slot = ethers.utils.keccak256(node + '00'.repeat(31) + '01'); - const proof = await l2provider.send('eth_getProof', [ - l2_resolver_address, - [slot], - { blockHash } - ]); - console.log(6, JSON.stringify(proof, null, 2)) - const accountProof = ethers.utils.RLP.encode(proof.accountProof) - const storageProof = ethers.utils.RLP.encode((proof.storageProof as any[]).filter((x) => x.key === slot)[0].proof) - const finalProof = { - nodeIndex, - blockHash, - sendRoot, - encodedBlockArray, - stateTrieWitness: accountProof, - stateRoot, - storageTrieWitness: storageProof, - }; - console.log(7, { finalProof }) - return [finalProof] - } - } -]); -const app = server.makeApp('/'); -app.listen(options.port); */ \ No newline at end of file diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts index 63cdd0a6..40ae981d 100644 --- a/arb-verifier/test/testMockVerifier.ts +++ b/arb-verifier/test/testMockVerifier.ts @@ -1,13 +1,12 @@ /* eslint-disable prettier/prettier */ +import { ArbProofService } from "@ensdomains/arb-gateway" import { expect } from "chai" -import { AbiCoder, Contract, JsonRpcProvider, ethers, hexlify, keccak256, toBeHex, toBigInt } from "ethers" +import { AbiCoder, Contract, JsonRpcProvider, ethers, toBigInt } from "ethers" import hardhat from "hardhat" -import { BigNumber, ethers as ethers5 } from "ethers5" -import { ArbProofService } from "@ensdomains/arb-gateway" -import rollupAbi from "./abi/rollupABI" import { solidityKeccak256, toUtf8String } from "ethers5/lib/utils" +import rollupAbi from "./abi/rollupABI" const rpcMainnet = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" @@ -24,18 +23,13 @@ describe("Arbi Verifier", () => { it("latest", async () => { const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) const l2Provider = new JsonRpcProvider(rpcArbitrum); - const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( - rpcMainnet - ); - const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( - rpcArbitrum - ); + + const s = new ArbProofService( + l1Provider, l2Provider, - l1LegacyProvider, - l2LegacyProvider, rollupAddr, - helperAddr + ); const getBlock = await s.getProvableBlock() @@ -95,18 +89,12 @@ describe("Arbi Verifier", () => { it("name", async () => { const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) const l2Provider = new JsonRpcProvider(rpcArbitrum); - const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( - rpcMainnet - ); - const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( - rpcArbitrum - ); + + const s = new ArbProofService( + l1Provider, l2Provider, - l1LegacyProvider, - l2LegacyProvider, rollupAddr, - helperAddr ); const getBlock = await s.getProvableBlock() @@ -166,18 +154,12 @@ describe("Arbi Verifier", () => { it("highscore string", async () => { const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) const l2Provider = new JsonRpcProvider(rpcArbitrum); - const l1LegacyProvider = new ethers5.providers.JsonRpcProvider( - rpcMainnet - ); - const l2LegacyProvider = new ethers5.providers.JsonRpcProvider( - rpcArbitrum - ); + + const s = new ArbProofService( + l1Provider, l2Provider, - l1LegacyProvider, - l2LegacyProvider, rollupAddr, - helperAddr ); const getBlock = await s.getProvableBlock() diff --git a/bun.lockb b/bun.lockb index 086556859720dc65d1950473ae76061701b2ca41..5906ebb825e0cad84d2bfd1d56748e5a9c5fc7ea 100755 GIT binary patch delta 19804 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 delta 19890 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 ZZwfa*oRP?gjn7MV8=t&kT*d{F{|8{5Q?vj8 From b54dfe9e23b257715ee6c0df7e3223e0c9fc1531 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Tue, 21 Nov 2023 18:11:55 +0100 Subject: [PATCH 24/63] test against nitro test node --- arb-gateway/src/ArbProofService.ts | 5 +- arb-gateway/src/server.ts | 2 +- arb-verifier/contracts/ArbVerifier.sol | 2 +- arb-verifier/contracts/test/MockOutbox.sol | 14 -- arb-verifier/contracts/test/MockTestL1.sol | 121 ----------- arb-verifier/deploy_l1/00_arb_verifier.ts | 25 +-- arb-verifier/deploy_l1/10_testl1.ts | 15 +- arb-verifier/deploy_l2/01_testl2 .ts | 1 - arb-verifier/hardhat.config.ts | 10 +- arb-verifier/package.json | 5 +- arb-verifier/test/testArbVerifier.ts | 12 +- arb-verifier/test/testMockVerifier.ts | 226 --------------------- 12 files changed, 37 insertions(+), 401 deletions(-) delete mode 100644 arb-verifier/contracts/test/MockOutbox.sol delete mode 100644 arb-verifier/contracts/test/MockTestL1.sol delete mode 100644 arb-verifier/test/testMockVerifier.ts diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 37329a49..82dcc99d 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -33,11 +33,9 @@ export class ArbProofService implements IProofService { this.rollup = new Contract( l2RollupAddress, rollupAbi, - + l1Provider ); this.helper = new EVMProofHelper(l2Provider); - this.rollup = new Contract(l2RollupAddress, rollupAbi, l1Provider) - } async getStorageAt(block: ArbProvableBlock, address: AddressLike, slot: bigint): Promise { @@ -58,6 +56,7 @@ export class ArbProofService implements IProofService { address: AddressLike, slots: bigint[] ): Promise { + const proof = await this.helper.getProofs(block.number, address, slots); return AbiCoder.defaultAbiCoder().encode( diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts index aa6d186d..02509e83 100644 --- a/arb-gateway/src/server.ts +++ b/arb-gateway/src/server.ts @@ -22,7 +22,7 @@ const program = new Command() 'address for L2 outbox on the L1', '' ); - + program.parse(); (async () => { diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index 2816561c..13d5b720 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -17,7 +17,7 @@ contract ArbVerifier is IEVMVerifier { IRollupCore public immutable rollup; string[] _gatewayURLs; - constructor(IRollupCore _rollupAddress, string[] memory _urls) { + constructor(string[] memory _urls, IRollupCore _rollupAddress) { rollup = _rollupAddress; _gatewayURLs = _urls; } diff --git a/arb-verifier/contracts/test/MockOutbox.sol b/arb-verifier/contracts/test/MockOutbox.sol deleted file mode 100644 index 26576004..00000000 --- a/arb-verifier/contracts/test/MockOutbox.sol +++ /dev/null @@ -1,14 +0,0 @@ -import {Node, IRollupCore} from '@arbitrum/nitro-contracts/src/rollup/IRollupCore.sol'; - -contract MockRollup { - function pushNode(uint idx, bytes calldata encodedNode) external { - Node memory node = abi.decode(encodedNode, (Node)); - roots[idx] = node; - } - - function getNode(uint64 idx) external view returns (Node memory) { - return roots[idx]; - } - - mapping(uint256 => Node) public roots; // maps root hashes => L2 block hash -} diff --git a/arb-verifier/contracts/test/MockTestL1.sol b/arb-verifier/contracts/test/MockTestL1.sol deleted file mode 100644 index f9e78304..00000000 --- a/arb-verifier/contracts/test/MockTestL1.sol +++ /dev/null @@ -1,121 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; - -import {EVMFetcher} from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; -import {EVMFetchTarget} from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; -import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; - -uint8 constant OP_END = 0xff; - -contract MockTestL1 is EVMFetchTarget { - using EVMFetcher for EVMFetcher.EVMFetchRequest; - - IEVMVerifier verifier; // Slot 0 - address target; - - constructor(IEVMVerifier _verifier, address _target) { - verifier = _verifier; - target = _target; - } - - function getLatest() - public - view - returns (EVMFetcher.EVMFetchRequest memory) - { - EVMFetcher.EVMFetchRequest memory req = EVMFetcher - .newFetchRequest(verifier, target) - .getStatic(0); - - _addOperation(req, OP_END); - - return req; - } - - function getName() public view returns (EVMFetcher.EVMFetchRequest memory) { - EVMFetcher.EVMFetchRequest memory req = EVMFetcher - .newFetchRequest(verifier, target) - .getDynamic(1); - - _addOperation(req, OP_END); - - return req; - } - - function getHighscorer( - uint256 idx - ) public view returns (EVMFetcher.EVMFetchRequest memory) { - EVMFetcher.EVMFetchRequest memory req = EVMFetcher - .newFetchRequest(verifier, target) - .getDynamic(3) - .element(idx); - - _addOperation(req, OP_END); - return req; - } - - function getLatestHighscore() - public - view - returns (EVMFetcher.EVMFetchRequest memory) - { - EVMFetcher.EVMFetchRequest memory req = EVMFetcher - .newFetchRequest(verifier, target) - .getStatic(0) - .getStatic(2) - .ref(0); - _addOperation(req, OP_END); - return req; - } - - function getLatestHighscorer() - public - view - returns (EVMFetcher.EVMFetchRequest memory) - { - EVMFetcher.EVMFetchRequest memory req = EVMFetcher - .newFetchRequest(verifier, target) - .getStatic(0) - .getDynamic(3) - .ref(0); - - _addOperation(req, OP_END); - return req; - } - - function getNickname( - string memory _name - ) public view returns (EVMFetcher.EVMFetchRequest memory) { - return - EVMFetcher.newFetchRequest(verifier, target).getDynamic(4).element( - _name - ); - } - - function getPrimaryNickname() - public - view - returns (EVMFetcher.EVMFetchRequest memory) - { - return - EVMFetcher - .newFetchRequest(verifier, target) - .getDynamic(1) - .getDynamic(4) - .ref(0); - } - - function getZero() public view returns (EVMFetcher.EVMFetchRequest memory) { - return EVMFetcher.newFetchRequest(verifier, target).getStatic(5); - } - - function _addOperation( - EVMFetcher.EVMFetchRequest memory request, - uint8 op - ) private pure { - uint256 commandIdx = request.commands.length - 1; - request.commands[commandIdx] = - request.commands[commandIdx] | - (bytes32(bytes1(op)) >> (8 * request.operationIdx++)); - } -} diff --git a/arb-verifier/deploy_l1/00_arb_verifier.ts b/arb-verifier/deploy_l1/00_arb_verifier.ts index 865b0511..92fabd7d 100644 --- a/arb-verifier/deploy_l1/00_arb_verifier.ts +++ b/arb-verifier/deploy_l1/00_arb_verifier.ts @@ -2,29 +2,30 @@ import { DeployFunction } from 'hardhat-deploy/types'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; const GATEWAY_URLS = { - 'opDevnetL1': 'http://localhost:8089/{sender}/{data}.json', - 'goerli': 'http://localhost:8089/{sender}/{data}.json', -} + arbDevnetL1: 'http://localhost:8089/{sender}/{data}.json', + goerli: 'http://localhost:8089/{sender}/{data}.json', +}; const ROLLUP_ADDRESSES = { - 'goerli': '0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17' -} + goerli: '0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17', +}; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deployments, getNamedAccounts, network } = hre; const { deploy } = deployments; const { deployer } = await getNamedAccounts(); - let L2_OUTPUT_ORACLE_ADDRESS, GATEWAY_URL - if (network.name === 'opDevnetL1') { - const opAddresses = await (await fetch("http://localhost:8080/addresses.json")).json(); - L2_OUTPUT_ORACLE_ADDRESS = opAddresses.L2OutputOracleProxy + let ROLLUP_ADDRESS, GATEWAY_URL; + console.log("NW ", network.name) + if (network.name === 'arbDevnetL1') { + const rollup = '0xb264babb91df9d1ca05c8c2028288dc08c4bee46'; + ROLLUP_ADDRESS = rollup; } else { - L2_OUTPUT_ORACLE_ADDRESS = ROLLUP_ADDRESSES[network.name] + ROLLUP_ADDRESS = ROLLUP_ADDRESSES[network.name]; } - console.log('ArbVerifier', [[GATEWAY_URL], L2_OUTPUT_ORACLE_ADDRESS]) + console.log('ArbVerifier', [[GATEWAY_URL], ROLLUP_ADDRESS]); await deploy('ArbVerifier', { from: deployer, - args: [[GATEWAY_URLS[network.name]], L2_OUTPUT_ORACLE_ADDRESS], + args: [[GATEWAY_URLS[network.name]], ROLLUP_ADDRESS], log: true, }); }; diff --git a/arb-verifier/deploy_l1/10_testl1.ts b/arb-verifier/deploy_l1/10_testl1.ts index 503ce80c..38e3b64e 100644 --- a/arb-verifier/deploy_l1/10_testl1.ts +++ b/arb-verifier/deploy_l1/10_testl1.ts @@ -1,21 +1,22 @@ -import {HardhatRuntimeEnvironment} from 'hardhat/types'; -import {DeployFunction} from 'hardhat-deploy/types'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { DeployFunction } from 'hardhat-deploy/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - const {deployments, getNamedAccounts} = hre; - const {deploy} = deployments; + const { deployments, getNamedAccounts } = hre; + const { deploy } = deployments; - const {deployer} = await getNamedAccounts(); + const { deployer } = await getNamedAccounts(); - const OPVerifier = await deployments.get('OPVerifier'); + const ArbVerifier = await deployments.get('ArbVerifier'); const TestL2 = await hre.companionNetworks['l2'].deployments.get('TestL2'); await deploy('TestL1', { from: deployer, - args: [OPVerifier.address, TestL2.address], + args: [ArbVerifier.address, TestL2.address], log: true, }); + }; export default func; func.tags = ['TestL1']; diff --git a/arb-verifier/deploy_l2/01_testl2 .ts b/arb-verifier/deploy_l2/01_testl2 .ts index b7cf1f60..263a9d58 100644 --- a/arb-verifier/deploy_l2/01_testl2 .ts +++ b/arb-verifier/deploy_l2/01_testl2 .ts @@ -2,7 +2,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - console.log("start dep") const { deployments, getNamedAccounts } = hre; const { deploy } = deployments; diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index 0a9e2aa0..84c79690 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -11,18 +11,18 @@ const L2_ETHERSCAN_API_KEY = process.env.L2_ETHERSCAN_API_KEY; const config: HardhatUserConfig = { solidity: '0.8.19', networks: { - opDevnetL1: { - url: "http://localhost:8545/", + arbDevnetL1: { + url: "http://127.0.0.1:8545/", accounts: [ '0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659', ], deploy: ["deploy_l1/"], companionNetworks: { - l2: "opDevnetL2", + l2: "arbDevnetL2", }, }, - opDevnetL2: { - url: "http://localhost:8547/", + arbDevnetL2: { + url: "http://127.0.0.1:8547/", accounts: [ '0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659', ], diff --git a/arb-verifier/package.json b/arb-verifier/package.json index 2b20f699..d1d552f2 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -4,10 +4,9 @@ "version": "0.1.0", "scripts": { "build": "echo 'building op-verifier...' && bun hardhat compile", - "test": " hardhat test", + "test": " hardhat test --network arbDevnetL1", "clean": "rm -fr artifacts cache node_modules typechain-types", - "lint": "exit 0", - "play": "npx ts-node ./test/arbPlayground.ts" + "lint": "exit 0" }, "devDependencies": { "@ensdomains/arb-gateway": "workspace:*", diff --git a/arb-verifier/test/testArbVerifier.ts b/arb-verifier/test/testArbVerifier.ts index 33e822a4..5b8843a4 100644 --- a/arb-verifier/test/testArbVerifier.ts +++ b/arb-verifier/test/testArbVerifier.ts @@ -28,8 +28,8 @@ declare module 'hardhat/types/runtime' { ethers: ethersObj; } } -//Skipped because testnet is not working on my machine yet -describe.skip('ArbVerifier', () => { + +describe('ArbVerifier', () => { let provider: Provider; let signer: Signer; let gateway: express.Application; @@ -41,16 +41,14 @@ describe.skip('ArbVerifier', () => { provider = new ethers.BrowserProvider(hre.network.provider); signer = await provider.getSigner(0); - //AS long as the Local node is not working we're using mockInbox contract - //const opAddresses = await (await fetch("http://localhost:8080/addresses.json")).json(); - + const rollupAddress = '0xb264babb91df9d1ca05c8c2028288dc08c4bee46'; const gateway = await makeArbGateway( (hre.network.config as any).url, (hre.config.networks[hre.network.companionNetworks.l2] as any).url, - opAddresses.L2OutputOracleProxy, - + rollupAddress, + 5, ); const server = new Server() gateway.add(server) diff --git a/arb-verifier/test/testMockVerifier.ts b/arb-verifier/test/testMockVerifier.ts deleted file mode 100644 index 40ae981d..00000000 --- a/arb-verifier/test/testMockVerifier.ts +++ /dev/null @@ -1,226 +0,0 @@ -/* eslint-disable prettier/prettier */ - -import { ArbProofService } from "@ensdomains/arb-gateway" -import { expect } from "chai" -import { AbiCoder, Contract, JsonRpcProvider, ethers, toBigInt } from "ethers" -import hardhat from "hardhat" - -import { solidityKeccak256, toUtf8String } from "ethers5/lib/utils" -import rollupAbi from "./abi/rollupABI" - - -const rpcMainnet = "https://eth-goerli.g.alchemy.com/v2/XsX8NB_NvPFNUIAPQmOSjP4rMqsrTGDV" -const rpcArbitrum = "https://arb-goerli.g.alchemy.com/v2/k2Vp4opdLW3ueLYaTPndSFtx4m7T3s71" -const rollupAddr = "0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17" -const helperAddr = "0xC2ffb7bB521f7C48aAA3Ee0e3E35D5ca1A6CE53A" - -const testL2OnArbi = "0x2161d46ad2b7dd9c9f58b8be0609198899fb431d" - - - -describe("Arbi Verifier", () => { - - it("latest", async () => { - const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) - const l2Provider = new JsonRpcProvider(rpcArbitrum); - - - const s = new ArbProofService( - l1Provider, - l2Provider, - rollupAddr, - - - ); - const getBlock = await s.getProvableBlock() - const proof = await s.getProofs(getBlock, testL2OnArbi, [0n]) - - - const outboxF = await hardhat.ethers.getContractFactory("MockRollup") - const mockOutbox = await outboxF.deploy() - - const rollup = new Contract(rollupAddr, rollupAbi, l1Provider) - - const proofEnc = AbiCoder.defaultAbiCoder().decode( - [ - 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', - 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', - ], - proof - - ); - - const idx = proofEnc[0][3] - - - const node = await rollup.getNode(idx) - - const abiEncoded = ethers.AbiCoder.defaultAbiCoder().encode([ - "bytes32", "bytes32", "bytes32", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "bytes32" - ], node) - - - await mockOutbox.pushNode( - idx, - abiEncoded, - ) - /** - * Deploy verifier - */ - - const f = await hardhat.ethers.getContractFactory("ArbVerifier") - const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) - - - /** - * Deploy MockTestL1 - */ - - - const fMockTest = await hardhat.ethers.getContractFactory("MockTestL1") - const mockTestL1 = await fMockTest.deploy(await arbiVerfifier.getAddress(), testL2OnArbi) - - const req = await mockTestL1.getLatest() - - const [, , commands, , constants] = req - const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) - expect(res[0]).to.equal(42n) - }) - it("name", async () => { - const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) - const l2Provider = new JsonRpcProvider(rpcArbitrum); - - - const s = new ArbProofService( - l1Provider, - l2Provider, - rollupAddr, - - ); - const getBlock = await s.getProvableBlock() - const proof = await s.getProofs(getBlock, testL2OnArbi, [1n]) - - - const outboxF = await hardhat.ethers.getContractFactory("MockRollup") - const mockOutbox = await outboxF.deploy() - - const rollup = new Contract(rollupAddr, rollupAbi, l1Provider) - - const proofEnc = AbiCoder.defaultAbiCoder().decode( - [ - 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', - 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', - ], - proof - - ); - - const idx = proofEnc[0][3] - - - const node = await rollup.getNode(idx) - - const abiEncoded = ethers.AbiCoder.defaultAbiCoder().encode([ - "bytes32", "bytes32", "bytes32", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "bytes32" - ], node) - - - await mockOutbox.pushNode( - idx, - abiEncoded, - ) - /** - * Deploy verifier - */ - - const f = await hardhat.ethers.getContractFactory("ArbVerifier") - const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) - - - /** - * Deploy MockTestL1 - */ - - - const fMockTest = await hardhat.ethers.getContractFactory("MockTestL1") - const mockTestL1 = await fMockTest.deploy(await arbiVerfifier.getAddress(), testL2OnArbi) - - const req = await mockTestL1.getName() - - const [, , commands, , constants] = req - const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) - expect(toUtf8String(res[0])).to.equal("Satoshi") - }) - it("highscore string", async () => { - const l1Provider = new ethers.JsonRpcProvider(rpcMainnet) - const l2Provider = new JsonRpcProvider(rpcArbitrum); - - - const s = new ArbProofService( - l1Provider, - l2Provider, - rollupAddr, - - ); - const getBlock = await s.getProvableBlock() - const hash = solidityKeccak256(["uint256", "uint256"], [42n, 3n]) - const proof = await s.getProofs(getBlock, testL2OnArbi, [toBigInt(hash)]) - - - - const outboxF = await hardhat.ethers.getContractFactory("MockRollup") - const mockOutbox = await outboxF.deploy() - - const rollup = new Contract(rollupAddr, rollupAbi, l1Provider) - - const proofEnc = AbiCoder.defaultAbiCoder().decode( - [ - 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', - 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', - ], - proof - - ); - - const idx = proofEnc[0][3] - - - const node = await rollup.getNode(idx) - - const abiEncoded = ethers.AbiCoder.defaultAbiCoder().encode([ - "bytes32", "bytes32", "bytes32", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "uint64", "bytes32" - ], node) - - - await mockOutbox.pushNode( - idx, - abiEncoded, - ) - /** - * Deploy verifier - */ - - const f = await hardhat.ethers.getContractFactory("ArbVerifier") - const arbiVerfifier = await f.deploy(await mockOutbox.getAddress(), ["d"]) - - - /** - * Deploy MockTestL1 - */ - - - const fMockTest = await hardhat.ethers.getContractFactory("MockTestL1") - const mockTestL1 = await fMockTest.deploy(await arbiVerfifier.getAddress(), testL2OnArbi) - - const req = await mockTestL1.getHighscorer(42) - - console.log(req) - - const [, , commands, , constants] = req - const res = await arbiVerfifier.getStorageValues(testL2OnArbi, [...commands], [...constants], proof) - - console.log(res) - expect(toUtf8String(res[0])).to.equal("Hal Finney") - }) - -}) \ No newline at end of file From 148255a4f50fe8f3fe811b90e2c7eb4e4d92b426 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Tue, 21 Nov 2023 18:14:20 +0100 Subject: [PATCH 25/63] add comments --- arb-verifier/deploy_l1/00_arb_verifier.ts | 2 ++ arb-verifier/test/testArbVerifier.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/arb-verifier/deploy_l1/00_arb_verifier.ts b/arb-verifier/deploy_l1/00_arb_verifier.ts index 92fabd7d..9ce94bf5 100644 --- a/arb-verifier/deploy_l1/00_arb_verifier.ts +++ b/arb-verifier/deploy_l1/00_arb_verifier.ts @@ -17,6 +17,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { let ROLLUP_ADDRESS, GATEWAY_URL; console.log("NW ", network.name) if (network.name === 'arbDevnetL1') { + //Rollup address according to sequencer config. Unfortunately, there is no endpoint to fetch it at runtime from the rollup. + //The address can be found at nitro-testnode-sequencer-1/config/deployment.json const rollup = '0xb264babb91df9d1ca05c8c2028288dc08c4bee46'; ROLLUP_ADDRESS = rollup; } else { diff --git a/arb-verifier/test/testArbVerifier.ts b/arb-verifier/test/testArbVerifier.ts index 5b8843a4..fdcf0d9b 100644 --- a/arb-verifier/test/testArbVerifier.ts +++ b/arb-verifier/test/testArbVerifier.ts @@ -41,6 +41,8 @@ describe('ArbVerifier', () => { provider = new ethers.BrowserProvider(hre.network.provider); signer = await provider.getSigner(0); + //Rollup address according to sequencer config. Unfortunately, there is no endpoint to fetch it at runtime from the rollup. + //The address can be found at nitro-testnode-sequencer-1/config/deployment.json const rollupAddress = '0xb264babb91df9d1ca05c8c2028288dc08c4bee46'; From 75e46095e797e584a839c267339e747553b8d174 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Wed, 29 Nov 2023 17:25:42 +0100 Subject: [PATCH 26/63] remove old v5 dep --- arb-gateway/src/ArbProofService.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 82dcc99d..868bf056 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -1,7 +1,6 @@ /* eslint-disable prettier/prettier */ import { EVMProofHelper, type IProofService } from '@ensdomains/evm-gateway'; -import { AbiCoder, Contract, EventLog, ethers, toBeHex, type AddressLike } from 'ethers'; -import { ethers as ethers5 } from "ethers5"; +import { AbiCoder, Contract, EventLog, ethers, toBeHex, type AddressLike, toNumber } from 'ethers'; import rollupAbi from "./abi/rollupABI.js"; export interface ArbProvableBlock { number: number @@ -56,8 +55,9 @@ export class ArbProofService implements IProofService { address: AddressLike, slots: bigint[] ): Promise { - + console.log("BNR", block.number) const proof = await this.helper.getProofs(block.number, address, slots); + console.log("AFTER", block.number) return AbiCoder.defaultAbiCoder().encode( [ @@ -135,7 +135,7 @@ export class ArbProofService implements IProofService { sendRoot, blockHash, nodeIndex: nodeIndex, - number: ethers5.BigNumber.from(l2blockRaw.number).toNumber(), + number: toNumber(l2blockRaw.number) } } From e7a9fa5a8612e01987727cc19bf90aa0cf864044 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Wed, 29 Nov 2023 17:36:54 +0100 Subject: [PATCH 27/63] remove logs --- arb-gateway/src/ArbProofService.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 868bf056..a550d37e 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -55,9 +55,7 @@ export class ArbProofService implements IProofService { address: AddressLike, slots: bigint[] ): Promise { - console.log("BNR", block.number) const proof = await this.helper.getProofs(block.number, address, slots); - console.log("AFTER", block.number) return AbiCoder.defaultAbiCoder().encode( [ From 0d07456ecb927f31166c2c6cf9758018649b3035 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Wed, 29 Nov 2023 17:40:01 +0100 Subject: [PATCH 28/63] change package order in global package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 215ab7ec..0a92841f 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,12 @@ "evm-gateway", "l1-gateway", "op-gateway", + "arb-gateway", "evm-verifier", "l1-verifier", "op-verifier", - "crosschain-resolver", "arb-verifier", - "arb-gateway" + "crosschain-resolver" ], "scripts": { "env": "env", @@ -19,7 +19,7 @@ "build": "bun run workspace evm-gateway build && bun run workspace -evm-gateway build", "test": "bun run workspace l1-verifier test && bun run workspace crosschain-resolver test", "lint": "bun run workspace all lint", - "test-arb": "bun run workspace arb-verifier test", + "test-arb": "bun run workspace arb-verifier test", "prepare": "husky install" }, "husky": { From 5a603668ce33aa95ed59e28814daea3a9a74be29 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Thu, 30 Nov 2023 16:01:16 +0100 Subject: [PATCH 29/63] add instructions to run the tests for arb verifier --- arb-gateway/README.md | 25 +++++++++++-------------- arb-verifier/package.json | 3 +-- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/arb-gateway/README.md b/arb-gateway/README.md index 941fd60e..e4752639 100644 --- a/arb-gateway/README.md +++ b/arb-gateway/README.md @@ -1,4 +1,4 @@ -# @ensdomains/op-gateway +# @ensdomains/arb-gateway An instantiation of [evm-gateway](https://github.com/ensdomains/evmgateway/tree/main/evm-gateway) that targets Optimism - that is, it implements a CCIP-Read gateway that generates proofs of contract state on Optimism. @@ -30,10 +30,15 @@ yarn deploy ## How to test -``` -cd ../l1-verifier l1-gateway -PROVIDER_URL=$PROVIDER_URL TARGET_ADDRESS=$TARGET_ADDRESS yarn remote_test -``` +1. Start the Nitro Test node. You can find instructions here: https://docs.arbitrum.io/node-running/how-tos/local-dev-node +2. Retrieve the Rollup address from the Node's Logs. +3. Replace the rollup address in the files `arb-verifier/test/testArbVerifier.ts` and `arb-verifier/deploy_l1/00_arb_verifier.ts`. +4. Build the Project. +5. Navigate to the Gateway directory using `cd ./arb-gateway`. +6. Start the Gateway by running `bun run start -u http://127.0.0.1:8545/ -v http://127.0.0.1:8547/ -o 0xb264babb91df9d1ca05c8c2028288dc08c4bee46 -p 8089`. +7. Open another Terminal Tab and navigate to the verifier directory using `cd ./arb-verifier/`. +8. Deploy contracts to the node using the command `npx hardhat --network arbDevnetL1 deploy`. +9. Run the test using the command `bun run test`. ## Current deployments @@ -41,16 +46,8 @@ PROVIDER_URL=$PROVIDER_URL TARGET_ADDRESS=$TARGET_ADDRESS yarn remote_test #### Contracts -- OPVerifier = [0x0c2746F20C9c97DBf718de10c04943cf408230A3](https://goerli.etherscan.io/address/0x0c2746F20C9c97DBf718de10c04943cf408230A3) - #### Example contracts -- TestL1 = [0x5057276e2BD7750Be043595ac6d21dE31e900c3c](https://goerli.etherscan.io/address/0x5057276e2BD7750Be043595ac6d21dE31e900c3c) - -#### Example contracts(OptimismGoerli) - -- TestL2 = [0x0FEcD0Fec173807204c7B31e36384acEeB048b0A](https://goerli-optimism.etherscan.io/address/0x0FEcD0Fec173807204c7B31e36384acEeB048b0A) +#### Example contracts(ArbitrumGoerli) #### Gateway - -- http://op-gateway-worker.ens-cf.workers.dev diff --git a/arb-verifier/package.json b/arb-verifier/package.json index d1d552f2..3abfcf4b 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -3,7 +3,7 @@ "license": "MIT", "version": "0.1.0", "scripts": { - "build": "echo 'building op-verifier...' && bun hardhat compile", + "build": "echo 'building arb-verifier...' && bun hardhat compile", "test": " hardhat test --network arbDevnetL1", "clean": "rm -fr artifacts cache node_modules typechain-types", "lint": "exit 0" @@ -41,6 +41,5 @@ "@eth-optimism/contracts": "^0.6.0", "@eth-optimism/contracts-bedrock": "^0.16.2", "@arbitrum/nitro-contracts": "^1.1.0" - } } From 50e9cc574b922bd828518e0514dad645f33f979b Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Thu, 30 Nov 2023 16:32:52 +0100 Subject: [PATCH 30/63] remove old hackathon test-script --- README.md | 3 +-- package.json | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 205fa24a..8142636f 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,7 @@ This repository implements a generic CCIP-Read gateway framework for fetching st While this functionality is written primarily with read calls in mind, it also functions for transactions; using a compliant library like Ethers, a transaction that includes relevant L2 proofs can be generated and signed. -## Test Arbitrum -To the the arbritrum resolver, install and build the monorepo and run `bun run test arb` is runs tests against the arbitrum goerli testnet instead of the nitro docker image + ## Usage diff --git a/package.json b/package.json index 0a92841f..66bb8e98 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "build": "bun run workspace evm-gateway build && bun run workspace -evm-gateway build", "test": "bun run workspace l1-verifier test && bun run workspace crosschain-resolver test", "lint": "bun run workspace all lint", - "test-arb": "bun run workspace arb-verifier test", "prepare": "husky install" }, "husky": { From 94c3d789263a10c9651862bb18a7b8bce95c5509 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Thu, 30 Nov 2023 16:45:46 +0100 Subject: [PATCH 31/63] remove outdated comment --- arb-gateway/src/ArbProofService.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index a550d37e..06c34ac1 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -105,7 +105,6 @@ export class ArbProofService implements IProofService { blockHash, false ]); - //RLP encoder has problems with bigint types from v6. So v5 is used here as well const blockarray = [ l2blockRaw.parentHash, l2blockRaw.sha3Uncles, From 4e86131674202f6073ac03a7ca6f00c4a7d76e15 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Thu, 30 Nov 2023 16:48:34 +0100 Subject: [PATCH 32/63] remove helperAbi since its no longer needed --- arb-gateway/src/abi/helperAbi.ts | 170 ------------------------------- 1 file changed, 170 deletions(-) delete mode 100644 arb-gateway/src/abi/helperAbi.ts diff --git a/arb-gateway/src/abi/helperAbi.ts b/arb-gateway/src/abi/helperAbi.ts deleted file mode 100644 index 03432fee..00000000 --- a/arb-gateway/src/abi/helperAbi.ts +++ /dev/null @@ -1,170 +0,0 @@ -export default [ - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" - }, - { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } - ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" - }, - { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } - ], - "internalType": "struct ExecutionState", - "name": "beforeState", - "type": "tuple" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" - }, - { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } - ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" - }, - { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } - ], - "internalType": "struct ExecutionState", - "name": "afterState", - "type": "tuple" - }, - { - "internalType": "uint64", - "name": "numBlocks", - "type": "uint64" - } - ], - "internalType": "struct Assertion", - "name": "assertion", - "type": "tuple" - } - ], - "name": "getBlockHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" - }, - { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } - ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" - }, - { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } - ], - "internalType": "struct ExecutionState", - "name": "beforeState", - "type": "tuple" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" - }, - { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } - ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" - }, - { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } - ], - "internalType": "struct ExecutionState", - "name": "afterState", - "type": "tuple" - }, - { - "internalType": "uint64", - "name": "numBlocks", - "type": "uint64" - } - ], - "internalType": "struct Assertion", - "name": "assertion", - "type": "tuple" - } - ], - "name": "getSendRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - } -] \ No newline at end of file From c1b2b0587a79cb2474052e5fdff61ed51c137ba9 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Thu, 30 Nov 2023 17:00:58 +0100 Subject: [PATCH 33/63] revert liniting in other packages --- crosschain-resolver/test/testResolver.ts | 48 ++++---- evm-verifier/contracts/MerkleTrie.sol | 115 ++++++++----------- l1-verifier/contracts/test/TestL1.sol | 136 ++++++++--------------- op-verifier/test/testOPVerifier.ts | 10 +- 4 files changed, 123 insertions(+), 186 deletions(-) diff --git a/crosschain-resolver/test/testResolver.ts b/crosschain-resolver/test/testResolver.ts index 8266cd91..a3690431 100644 --- a/crosschain-resolver/test/testResolver.ts +++ b/crosschain-resolver/test/testResolver.ts @@ -62,9 +62,9 @@ describe('Crosschain Resolver', () => { const server = new Server() gateway.add(server) const app = server.makeApp('/') - const getUrl = FetchRequest.createGetUrlFunc(); + const getUrl = FetchRequest.createGetUrlFunc(); ethers.FetchRequest.registerGetUrl(async (req: FetchRequest) => { - if (req.url != "test:") return getUrl(req); + if(req.url != "test:") return getUrl(req); const r = request(app).post('/'); if (req.hasBody()) { @@ -82,24 +82,24 @@ describe('Crosschain Resolver', () => { }, }; }); - const ensFactory = await ethers.getContractFactory('ENSRegistry', signer); + const ensFactory = await ethers.getContractFactory('ENSRegistry',signer); ens = await ensFactory.deploy(); const ensAddress = await ens.getAddress() - const baseRegistrarFactory = await ethers.getContractFactory('BaseRegistrarImplementation', signer); - baseRegistrar = await baseRegistrarFactory.deploy(ensAddress, ethers.namehash('eth')) + const baseRegistrarFactory = await ethers.getContractFactory('BaseRegistrarImplementation',signer); + baseRegistrar = await baseRegistrarFactory.deploy(ensAddress,ethers.namehash('eth')) const baseRegistrarAddress = await baseRegistrar.getAddress() await baseRegistrar.addController(signerAddress) - const metaDataserviceFactory = await ethers.getContractFactory('StaticMetadataService', signer); + const metaDataserviceFactory = await ethers.getContractFactory('StaticMetadataService',signer); const metaDataservice = await metaDataserviceFactory.deploy('https://ens.domains') const metaDataserviceAddress = await metaDataservice.getAddress() - const reverseRegistrarFactory = await ethers.getContractFactory('ReverseRegistrar', signer); + const reverseRegistrarFactory = await ethers.getContractFactory('ReverseRegistrar',signer); const reverseRegistrar = await reverseRegistrarFactory.deploy(ensAddress) const reverseRegistrarAddress = await reverseRegistrar.getAddress() await ens.setSubnodeOwner(EMPTY_BYTES32, labelhash('reverse'), signerAddress) - await ens.setSubnodeOwner(ethers.namehash('reverse'), labelhash('addr'), reverseRegistrarAddress) + await ens.setSubnodeOwner(ethers.namehash('reverse'),labelhash('addr'), reverseRegistrarAddress) await ens.setSubnodeOwner(EMPTY_BYTES32, labelhash('eth'), baseRegistrarAddress) await baseRegistrar.register(labelhash('foo'), signerAddress, 100000000) - const publicResolverFactory = await ethers.getContractFactory('PublicResolver', signer); + const publicResolverFactory = await ethers.getContractFactory('PublicResolver',signer); const publicResolver = await publicResolverFactory.deploy( ensAddress, '0x0000000000000000000000000000000000000000', @@ -109,7 +109,7 @@ describe('Crosschain Resolver', () => { const publicResolverAddress = await publicResolver.getAddress() await reverseRegistrar.setDefaultResolver(publicResolverAddress) - const wrapperFactory = await ethers.getContractFactory('NameWrapper', signer); + const wrapperFactory = await ethers.getContractFactory('NameWrapper',signer); await provider.send('evm_mine', []); wrapper = await wrapperFactory.deploy( ensAddress, @@ -149,27 +149,27 @@ describe('Crosschain Resolver', () => { l2contract = impl.attach(resolverAddress) }); - it("should not allow non owner to set target", async () => { + it("should not allow non owner to set target", async() => { const incorrectnode = ethers.namehash('notowned.eth') const incorrectname = encodeName('notowned.eth') // For some reason expect().to.be.reverted isn't working // Throwing Error: missing revert data (action="estimateGas"... - try { + try{ await target.setTarget(incorrectnode, resolverAddress) - } catch (e) { + }catch(e){ } const result = await target.getTarget(incorrectname, 0) expect(result[1]).to.equal(EMPTY_ADDRESS); }) - it("should allow owner to set target", async () => { + it("should allow owner to set target", async() => { await target.setTarget(node, signerAddress) const result = await target.getTarget(encodeName(name), 0) expect(result[1]).to.equal(signerAddress); }) - it("subname should get target of its parent", async () => { + it("subname should get target of its parent", async() => { const subname = 'd.foo.eth' const encodedsubname = encodeName(subname) const subnode = ethers.namehash(subname) @@ -179,7 +179,7 @@ describe('Crosschain Resolver', () => { expect(result[1]).to.equal(signerAddress); }) - it("should allow wrapped owner to set target", async () => { + it("should allow wrapped owner to set target", async() => { const label = 'wrapped' const tokenId = labelhash(label) await baseRegistrar.setApprovalForAll(wrapperAddress, true) @@ -197,7 +197,7 @@ describe('Crosschain Resolver', () => { expect(result[1]).to.equal(resolverAddress); }) - it("should resolve empty ETH Address", async () => { + it("should resolve empty ETH Address", async() => { await target.setTarget(node, resolverAddress) const addr = '0x0000000000000000000000000000000000000000' await l2contract.clearRecords(node) @@ -212,7 +212,7 @@ describe('Crosschain Resolver', () => { expect(decoded[0]).to.equal(addr); }) - it("should resolve ETH Address", async () => { + it("should resolve ETH Address", async() => { await target.setTarget(node, resolverAddress) const addr = '0x5A384227B65FA093DEC03Ec34e111Db80A040615' await l2contract.clearRecords(node) @@ -220,7 +220,7 @@ describe('Crosschain Resolver', () => { const result = await l2contract['addr(bytes32)'](node) expect(ethers.getAddress(result)).to.equal(addr); await provider.send("evm_mine", []); - + const i = new ethers.Interface(["function addr(bytes32) returns(address)"]) const calldata = i.encodeFunctionData("addr", [node]) const result2 = await target.resolve(encodedname, calldata, { enableCcipRead: true }) @@ -228,7 +228,7 @@ describe('Crosschain Resolver', () => { expect(decoded[0]).to.equal(addr); }) - it("should resolve ETH Address for subname", async () => { + it("should resolve ETH Address for subname", async() => { await target.setTarget(node, resolverAddress) const addr = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' await l2contract.clearRecords(node) @@ -241,13 +241,13 @@ describe('Crosschain Resolver', () => { await provider.send("evm_mine", []); const i = new ethers.Interface(["function addr(bytes32) returns(address)"]) const calldata = i.encodeFunctionData("addr", [subnode]) - + const result2 = await target.resolve(encodedsubname, calldata, { enableCcipRead: true }) const decoded = i.decodeFunctionResult("addr", result2) expect(decoded[0]).to.equal(addr); }) - it("should resolve non ETH Address", async () => { + it("should resolve non ETH Address", async() => { await target.setTarget(node, resolverAddress) const addr = '0x76a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac' const coinType = 0 // BTC @@ -262,7 +262,7 @@ describe('Crosschain Resolver', () => { expect(decoded[0]).to.equal(addr); }) - it("should resolve text record", async () => { + it("should resolve text record", async() => { await target.setTarget(node, resolverAddress) const key = 'name' const value = 'nick.eth' @@ -277,7 +277,7 @@ describe('Crosschain Resolver', () => { expect(decoded[0]).to.equal(value); }) - it("should test contenthash", async () => { + it("should test contenthash", async() => { await target.setTarget(node, resolverAddress) const contenthash = '0xe3010170122029f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f' await l2contract.clearRecords(node) diff --git a/evm-verifier/contracts/MerkleTrie.sol b/evm-verifier/contracts/MerkleTrie.sol index 9b904af0..e00564ae 100644 --- a/evm-verifier/contracts/MerkleTrie.sol +++ b/evm-verifier/contracts/MerkleTrie.sol @@ -6,8 +6,9 @@ pragma solidity ^0.8.0; -import {Bytes} from '@eth-optimism/contracts-bedrock/src/libraries/Bytes.sol'; -import {RLPReader} from '@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol'; +import { Bytes } from "@eth-optimism/contracts-bedrock/src/libraries/Bytes.sol"; +import { RLPReader } from "@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPReader.sol"; + /** * @title MerkleTrie @@ -62,7 +63,7 @@ library MerkleTrie { /** * @notice RLP representation of `NULL`. */ - bytes internal constant RLP_NULL = hex'80'; + bytes internal constant RLP_NULL = hex"80"; /** * @notice Verifies a proof that a given key/value pair is present in the trie. @@ -103,22 +104,17 @@ library MerkleTrie { bytes32 _root ) internal pure returns (bool, bytes memory) { TrieNode[] memory proof = _parseProof(_proof); - ( - uint256 pathLength, - bytes memory keyRemainder, - bool isFinalNode - ) = _walkNodePath(proof, _key, _root); + (uint256 pathLength, bytes memory keyRemainder, bool isFinalNode) = _walkNodePath( + proof, + _key, + _root + ); bool noRemainder = keyRemainder.length == 0; - require( - noRemainder || isFinalNode, - 'MerkleTrie: provided proof is invalid' - ); + require(noRemainder || isFinalNode, "MerkleTrie: provided proof is invalid"); - bytes memory value = noRemainder - ? _getNodeValue(proof[pathLength - 1]) - : bytes(''); + bytes memory value = noRemainder ? _getNodeValue(proof[pathLength - 1]) : bytes(""); return (value.length > 0, value); } @@ -139,7 +135,15 @@ library MerkleTrie { TrieNode[] memory _proof, bytes memory _key, bytes32 _root - ) private pure returns (uint256, bytes memory, bool) { + ) + private + pure + returns ( + uint256, + bytes memory, + bool + ) + { uint256 pathLength = 0; bytes memory key = Bytes.toNibbles(_key); @@ -160,26 +164,20 @@ library MerkleTrie { if (currentKeyIndex == 0) { // First proof element is always the root node. require( - Bytes.equal( - abi.encodePacked(keccak256(currentNode.encoded)), - currentNodeID - ), - 'MerkleTrie: invalid root hash' + Bytes.equal(abi.encodePacked(keccak256(currentNode.encoded)), currentNodeID), + "MerkleTrie: invalid root hash" ); } else if (currentNode.encoded.length >= 32) { // Nodes 32 bytes or larger are hashed inside branch nodes. require( - Bytes.equal( - abi.encodePacked(keccak256(currentNode.encoded)), - currentNodeID - ), - 'MerkleTrie: invalid large internal hash' + Bytes.equal(abi.encodePacked(keccak256(currentNode.encoded)), currentNodeID), + "MerkleTrie: invalid large internal hash" ); } else { // Nodes smaller than 32 bytes aren't hashed. require( Bytes.equal(currentNode.encoded, currentNodeID), - 'MerkleTrie: invalid internal node hash' + "MerkleTrie: invalid internal node hash" ); } @@ -192,29 +190,22 @@ library MerkleTrie { // We're not at the end of the key yet. // Figure out what the next node ID should be and continue. uint8 branchKey = uint8(key[currentKeyIndex]); - RLPReader.RLPItem memory nextNode = currentNode.decoded[ - branchKey - ]; + RLPReader.RLPItem memory nextNode = currentNode.decoded[branchKey]; currentNodeID = _getNodeID(nextNode); currentKeyIncrement = 1; continue; } - } else if ( - currentNode.decoded.length == LEAF_OR_EXTENSION_NODE_LENGTH - ) { + } else if (currentNode.decoded.length == LEAF_OR_EXTENSION_NODE_LENGTH) { bytes memory path = _getNodePath(currentNode); uint8 prefix = uint8(path[0]); uint8 offset = 2 - (prefix % 2); bytes memory pathRemainder = Bytes.slice(path, offset); bytes memory keyRemainder = Bytes.slice(key, currentKeyIndex); - uint256 sharedNibbleLength = _getSharedNibbleLength( - pathRemainder, - keyRemainder - ); + uint256 sharedNibbleLength = _getSharedNibbleLength(pathRemainder, keyRemainder); require( keyRemainder.length >= pathRemainder.length, - 'MerkleTrie: invalid key length for leaf or extension node' + "MerkleTrie: invalid key length for leaf or extension node" ); if (prefix == PREFIX_LEAF_EVEN || prefix == PREFIX_LEAF_ODD) { @@ -230,10 +221,7 @@ library MerkleTrie { // We've hit a leaf node, so our next node should be NULL. currentNodeID = RLP_NULL; break; - } else if ( - prefix == PREFIX_EXTENSION_EVEN || - prefix == PREFIX_EXTENSION_ODD - ) { + } else if (prefix == PREFIX_EXTENSION_EVEN || prefix == PREFIX_EXTENSION_ODD) { if (sharedNibbleLength != pathRemainder.length) { // Our extension node is not identical to the remainder. // We've hit the end of this path @@ -248,12 +236,10 @@ library MerkleTrie { continue; } } else { - revert( - 'MerkleTrie: received a node with an unknown prefix' - ); + revert("MerkleTrie: received a node with an unknown prefix"); } } else { - revert('MerkleTrie: received an unparseable node'); + revert("MerkleTrie: received an unparseable node"); } } @@ -272,16 +258,11 @@ library MerkleTrie { * * @return Proof parsed into easily accessible structs. */ - function _parseProof( - bytes[] memory _proof - ) private pure returns (TrieNode[] memory) { + function _parseProof(bytes[] memory _proof) private pure returns (TrieNode[] memory) { uint256 length = _proof.length; TrieNode[] memory proof = new TrieNode[](length); for (uint256 i = 0; i < length; ) { - proof[i] = TrieNode({ - encoded: _proof[i], - decoded: RLPReader.readList(_proof[i]) - }); + proof[i] = TrieNode({ encoded: _proof[i], decoded: RLPReader.readList(_proof[i]) }); unchecked { ++i; } @@ -297,13 +278,8 @@ library MerkleTrie { * * @return ID for the node, depending on the size of its contents. */ - function _getNodeID( - RLPReader.RLPItem memory _node - ) private pure returns (bytes memory) { - return - _node.length < 32 - ? RLPReader.readRawBytes(_node) - : RLPReader.readBytes(_node); + function _getNodeID(RLPReader.RLPItem memory _node) private pure returns (bytes memory) { + return _node.length < 32 ? RLPReader.readRawBytes(_node) : RLPReader.readBytes(_node); } /** @@ -313,9 +289,7 @@ library MerkleTrie { * * @return Node path, converted to an array of nibbles. */ - function _getNodePath( - TrieNode memory _node - ) private pure returns (bytes memory) { + function _getNodePath(TrieNode memory _node) private pure returns (bytes memory) { return Bytes.toNibbles(RLPReader.readBytes(_node.decoded[0])); } @@ -326,9 +300,7 @@ library MerkleTrie { * * @return Node value, as hex bytes. */ - function _getNodeValue( - TrieNode memory _node - ) private pure returns (bytes memory) { + function _getNodeValue(TrieNode memory _node) private pure returns (bytes memory) { return RLPReader.readBytes(_node.decoded[_node.decoded.length - 1]); } @@ -340,10 +312,11 @@ library MerkleTrie { * * @return Number of shared nibbles. */ - function _getSharedNibbleLength( - bytes memory _a, - bytes memory _b - ) private pure returns (uint256) { + function _getSharedNibbleLength(bytes memory _a, bytes memory _b) + private + pure + returns (uint256) + { uint256 shared; uint256 max = (_a.length < _b.length) ? _a.length : _b.length; for (; shared < max && _a[shared] == _b[shared]; ) { @@ -353,4 +326,4 @@ library MerkleTrie { } return shared; } -} +} \ No newline at end of file diff --git a/l1-verifier/contracts/test/TestL1.sol b/l1-verifier/contracts/test/TestL1.sol index abf8a2d5..347d8bc6 100644 --- a/l1-verifier/contracts/test/TestL1.sol +++ b/l1-verifier/contracts/test/TestL1.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; -import {EVMFetcher} from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; -import {EVMFetchTarget} from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; -import {IEVMVerifier} from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; +import { EVMFetcher } from '@ensdomains/evm-verifier/contracts/EVMFetcher.sol'; +import { EVMFetchTarget } from '@ensdomains/evm-verifier/contracts/EVMFetchTarget.sol'; +import { IEVMVerifier } from '@ensdomains/evm-verifier/contracts/IEVMVerifier.sol'; contract TestL1 is EVMFetchTarget { using EVMFetcher for EVMFetcher.EVMFetchRequest; - IEVMVerifier verifier; // Slot 0 + IEVMVerifier verifier; // Slot 0 address target; constructor(IEVMVerifier _verifier, address _target) { @@ -16,141 +16,103 @@ contract TestL1 is EVMFetchTarget { target = _target; } - function getLatest() public view returns (uint256) { - EVMFetcher.newFetchRequest(verifier, target).getStatic(0).fetch( - this.getLatestCallback.selector, - '' - ); + function getLatest() public view returns(uint256) { + EVMFetcher.newFetchRequest(verifier, target) + .getStatic(0) + .fetch(this.getLatestCallback.selector, ""); } - function getLatestCallback( - bytes[] memory values, - bytes memory - ) public pure returns (uint256) { + function getLatestCallback(bytes[] memory values, bytes memory) public pure returns(uint256) { return abi.decode(values[0], (uint256)); } - function getName() public view returns (string memory) { - EVMFetcher.newFetchRequest(verifier, target).getDynamic(1).fetch( - this.getNameCallback.selector, - '' - ); + function getName() public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) + .getDynamic(1) + .fetch(this.getNameCallback.selector, ""); } - function getNameCallback( - bytes[] memory values, - bytes memory - ) public pure returns (string memory) { + function getNameCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { return string(values[0]); } - function getHighscorer(uint256 idx) public view returns (string memory) { - EVMFetcher - .newFetchRequest(verifier, target) + function getHighscorer(uint256 idx) public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) .getDynamic(3) - .element(idx) - .fetch(this.getHighscorerCallback.selector, ''); + .element(idx) + .fetch(this.getHighscorerCallback.selector, ""); } - function getHighscorerCallback( - bytes[] memory values, - bytes memory - ) public pure returns (string memory) { + function getHighscorerCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { return string(values[0]); } - function getLatestHighscore() public view returns (uint256) { - EVMFetcher - .newFetchRequest(verifier, target) + function getLatestHighscore() public view returns(uint256) { + EVMFetcher.newFetchRequest(verifier, target) .getStatic(0) .getStatic(2) - .ref(0) - .fetch(this.getLatestHighscoreCallback.selector, ''); + .ref(0) + .fetch(this.getLatestHighscoreCallback.selector, ""); } - function getLatestHighscoreCallback( - bytes[] memory values, - bytes memory - ) public pure returns (uint256) { + function getLatestHighscoreCallback(bytes[] memory values, bytes memory) public pure returns(uint256) { return abi.decode(values[1], (uint256)); } - function getLatestHighscorer() public view returns (string memory) { - EVMFetcher - .newFetchRequest(verifier, target) + function getLatestHighscorer() public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) .getStatic(0) .getDynamic(3) - .ref(0) - .fetch(this.getLatestHighscorerCallback.selector, ''); + .ref(0) + .fetch(this.getLatestHighscorerCallback.selector, ""); } - function getLatestHighscorerCallback( - bytes[] memory values, - bytes memory - ) public pure returns (string memory) { + function getLatestHighscorerCallback(bytes[] memory values, bytes memory) public pure returns(string memory) { return string(values[1]); } - function getNickname( - string memory _name - ) public view returns (string memory) { - EVMFetcher - .newFetchRequest(verifier, target) + function getNickname(string memory _name) public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) .getDynamic(4) - .element(_name) - .fetch(this.getNicknameCallback.selector, ''); + .element(_name) + .fetch(this.getNicknameCallback.selector, ""); } - function getNicknameCallback( - bytes[] memory values, - bytes memory - ) public pure returns (string memory) { + function getNicknameCallback(bytes[] memory values, bytes memory) public pure returns (string memory) { return string(values[0]); } - function getPrimaryNickname() public view returns (string memory) { - EVMFetcher - .newFetchRequest(verifier, target) + function getPrimaryNickname() public view returns(string memory) { + EVMFetcher.newFetchRequest(verifier, target) .getDynamic(1) .getDynamic(4) - .ref(0) - .fetch(this.getPrimaryNicknameCallback.selector, ''); + .ref(0) + .fetch(this.getPrimaryNicknameCallback.selector, ""); } - function getPrimaryNicknameCallback( - bytes[] memory values, - bytes memory - ) public pure returns (string memory) { + function getPrimaryNicknameCallback(bytes[] memory values, bytes memory) public pure returns (string memory) { return string(values[1]); } - function getZero() public view returns (uint256) { - EVMFetcher.newFetchRequest(verifier, target).getStatic(5).fetch( - this.getZeroCallback.selector, - '' - ); + function getZero() public view returns(uint256) { + EVMFetcher.newFetchRequest(verifier, target) + .getStatic(5) + .fetch(this.getZeroCallback.selector, ""); } - function getZeroCallback( - bytes[] memory values, - bytes memory - ) public pure returns (uint256) { + function getZeroCallback(bytes[] memory values, bytes memory) public pure returns (uint256) { return abi.decode(values[0], (uint256)); } - function getZeroIndex() public view returns (uint256) { - EVMFetcher - .newFetchRequest(verifier, target) + function getZeroIndex() public view returns(uint256) { + EVMFetcher.newFetchRequest(verifier, target) .getStatic(5) .getStatic(2) - .ref(0) - .fetch(this.getZeroIndexCallback.selector, ''); + .ref(0) + .fetch(this.getZeroIndexCallback.selector, ""); } - function getZeroIndexCallback( - bytes[] memory values, - bytes memory - ) public pure returns (uint256) { + function getZeroIndexCallback(bytes[] memory values, bytes memory) public pure returns(uint256) { return abi.decode(values[1], (uint256)); } } diff --git a/op-verifier/test/testOPVerifier.ts b/op-verifier/test/testOPVerifier.ts index 8c7b0b88..4c9be367 100644 --- a/op-verifier/test/testOPVerifier.ts +++ b/op-verifier/test/testOPVerifier.ts @@ -1,17 +1,19 @@ -import { Server } from '@chainlink/ccip-read-server'; import { makeOPGateway } from '@ensdomains/op-gateway'; +import { Server } from '@chainlink/ccip-read-server'; import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider'; import type { HardhatEthersHelpers } from '@nomicfoundation/hardhat-ethers/types'; import { expect } from 'chai'; +import hre from 'hardhat'; import { Contract, - FetchRequest, Provider, + ethers as ethersT, + FetchRequest, Signer, - ethers as ethersT + JsonRpcProvider } from 'ethers'; import express from 'express'; -import hre, { ethers } from 'hardhat'; +import { ethers } from 'hardhat'; import { EthereumProvider } from 'hardhat/types'; import request from 'supertest'; From 81089048fe1bccd92722fe523f4031433661c5f0 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Thu, 30 Nov 2023 17:05:17 +0100 Subject: [PATCH 34/63] lint arb packages --- arb-gateway/src/abi/rollupABI.ts | 2366 +++++++++++++++--------------- arb-gateway/src/index.ts | 3 +- arb-gateway/src/server.ts | 1 - 3 files changed, 1184 insertions(+), 1186 deletions(-) diff --git a/arb-gateway/src/abi/rollupABI.ts b/arb-gateway/src/abi/rollupABI.ts index 03f65871..c839f3ec 100644 --- a/arb-gateway/src/abi/rollupABI.ts +++ b/arb-gateway/src/abi/rollupABI.ts @@ -1,1753 +1,1753 @@ export default [ { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" + indexed: false, + internalType: 'address', + name: 'previousAdmin', + type: 'address', }, { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } + indexed: false, + internalType: 'address', + name: 'newAdmin', + type: 'address', + }, ], - "name": "AdminChanged", - "type": "event" + name: 'AdminChanged', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } + indexed: true, + internalType: 'address', + name: 'beacon', + type: 'address', + }, ], - "name": "BeaconUpgraded", - "type": "event" + name: 'BeaconUpgraded', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" + indexed: true, + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', }, { - "indexed": false, - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" + indexed: false, + internalType: 'bytes32', + name: 'blockHash', + type: 'bytes32', }, { - "indexed": false, - "internalType": "bytes32", - "name": "sendRoot", - "type": "bytes32" - } + indexed: false, + internalType: 'bytes32', + name: 'sendRoot', + type: 'bytes32', + }, ], - "name": "NodeConfirmed", - "type": "event" + name: 'NodeConfirmed', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" + indexed: true, + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', }, { - "indexed": true, - "internalType": "bytes32", - "name": "parentNodeHash", - "type": "bytes32" + indexed: true, + internalType: 'bytes32', + name: 'parentNodeHash', + type: 'bytes32', }, { - "indexed": true, - "internalType": "bytes32", - "name": "nodeHash", - "type": "bytes32" + indexed: true, + internalType: 'bytes32', + name: 'nodeHash', + type: 'bytes32', }, { - "indexed": false, - "internalType": "bytes32", - "name": "executionHash", - "type": "bytes32" + indexed: false, + internalType: 'bytes32', + name: 'executionHash', + type: 'bytes32', }, { - "components": [ + components: [ { - "components": [ + components: [ { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" + internalType: 'struct GlobalState', + name: 'globalState', + type: 'tuple', }, { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } + internalType: 'enum MachineStatus', + name: 'machineStatus', + type: 'uint8', + }, ], - "internalType": "struct RollupLib.ExecutionState", - "name": "beforeState", - "type": "tuple" + internalType: 'struct RollupLib.ExecutionState', + name: 'beforeState', + type: 'tuple', }, { - "components": [ + components: [ { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" + internalType: 'struct GlobalState', + name: 'globalState', + type: 'tuple', }, { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } + internalType: 'enum MachineStatus', + name: 'machineStatus', + type: 'uint8', + }, ], - "internalType": "struct RollupLib.ExecutionState", - "name": "afterState", - "type": "tuple" + internalType: 'struct RollupLib.ExecutionState', + name: 'afterState', + type: 'tuple', }, { - "internalType": "uint64", - "name": "numBlocks", - "type": "uint64" - } + internalType: 'uint64', + name: 'numBlocks', + type: 'uint64', + }, ], - "indexed": false, - "internalType": "struct RollupLib.Assertion", - "name": "assertion", - "type": "tuple" + indexed: false, + internalType: 'struct RollupLib.Assertion', + name: 'assertion', + type: 'tuple', }, { - "indexed": false, - "internalType": "bytes32", - "name": "afterInboxBatchAcc", - "type": "bytes32" + indexed: false, + internalType: 'bytes32', + name: 'afterInboxBatchAcc', + type: 'bytes32', }, { - "indexed": false, - "internalType": "bytes32", - "name": "wasmModuleRoot", - "type": "bytes32" + indexed: false, + internalType: 'bytes32', + name: 'wasmModuleRoot', + type: 'bytes32', }, { - "indexed": false, - "internalType": "uint256", - "name": "inboxMaxCount", - "type": "uint256" - } + indexed: false, + internalType: 'uint256', + name: 'inboxMaxCount', + type: 'uint256', + }, ], - "name": "NodeCreated", - "type": "event" + name: 'NodeCreated', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" - } + indexed: true, + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', + }, ], - "name": "NodeRejected", - "type": "event" + name: 'NodeRejected', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } + indexed: false, + internalType: 'address', + name: 'account', + type: 'address', + }, ], - "name": "Paused", - "type": "event" + name: 'Paused', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "uint64", - "name": "challengeIndex", - "type": "uint64" + indexed: true, + internalType: 'uint64', + name: 'challengeIndex', + type: 'uint64', }, { - "indexed": false, - "internalType": "address", - "name": "asserter", - "type": "address" + indexed: false, + internalType: 'address', + name: 'asserter', + type: 'address', }, { - "indexed": false, - "internalType": "address", - "name": "challenger", - "type": "address" + indexed: false, + internalType: 'address', + name: 'challenger', + type: 'address', }, { - "indexed": false, - "internalType": "uint64", - "name": "challengedNode", - "type": "uint64" - } + indexed: false, + internalType: 'uint64', + name: 'challengedNode', + type: 'uint64', + }, ], - "name": "RollupChallengeStarted", - "type": "event" + name: 'RollupChallengeStarted', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "bytes32", - "name": "machineHash", - "type": "bytes32" + indexed: false, + internalType: 'bytes32', + name: 'machineHash', + type: 'bytes32', }, { - "indexed": false, - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - } + indexed: false, + internalType: 'uint256', + name: 'chainId', + type: 'uint256', + }, ], - "name": "RollupInitialized", - "type": "event" + name: 'RollupInitialized', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } + indexed: false, + internalType: 'address', + name: 'account', + type: 'address', + }, ], - "name": "Unpaused", - "type": "event" + name: 'Unpaused', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } + indexed: true, + internalType: 'address', + name: 'implementation', + type: 'address', + }, ], - "name": "Upgraded", - "type": "event" + name: 'Upgraded', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } + indexed: true, + internalType: 'address', + name: 'implementation', + type: 'address', + }, ], - "name": "UpgradedSecondary", - "type": "event" + name: 'UpgradedSecondary', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "user", - "type": "address" + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', }, { - "indexed": false, - "internalType": "uint256", - "name": "initialBalance", - "type": "uint256" + indexed: false, + internalType: 'uint256', + name: 'initialBalance', + type: 'uint256', }, { - "indexed": false, - "internalType": "uint256", - "name": "finalBalance", - "type": "uint256" - } + indexed: false, + internalType: 'uint256', + name: 'finalBalance', + type: 'uint256', + }, ], - "name": "UserStakeUpdated", - "type": "event" + name: 'UserStakeUpdated', + type: 'event', }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "user", - "type": "address" + indexed: true, + internalType: 'address', + name: 'user', + type: 'address', }, { - "indexed": false, - "internalType": "uint256", - "name": "initialBalance", - "type": "uint256" + indexed: false, + internalType: 'uint256', + name: 'initialBalance', + type: 'uint256', }, { - "indexed": false, - "internalType": "uint256", - "name": "finalBalance", - "type": "uint256" - } + indexed: false, + internalType: 'uint256', + name: 'finalBalance', + type: 'uint256', + }, ], - "name": "UserWithdrawableFundsUpdated", - "type": "event" + name: 'UserWithdrawableFundsUpdated', + type: 'event', }, { - "inputs": [], - "name": "VALIDATOR_AFK_BLOCKS", - "outputs": [ + inputs: [], + name: 'VALIDATOR_AFK_BLOCKS', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "name": "_stakerMap", - "outputs": [ + name: '_stakerMap', + outputs: [ { - "internalType": "uint256", - "name": "amountStaked", - "type": "uint256" + internalType: 'uint256', + name: 'amountStaked', + type: 'uint256', }, { - "internalType": "uint64", - "name": "index", - "type": "uint64" + internalType: 'uint64', + name: 'index', + type: 'uint64', }, { - "internalType": "uint64", - "name": "latestStakedNode", - "type": "uint64" + internalType: 'uint64', + name: 'latestStakedNode', + type: 'uint64', }, { - "internalType": "uint64", - "name": "currentChallenge", - "type": "uint64" + internalType: 'uint64', + name: 'currentChallenge', + type: 'uint64', }, { - "internalType": "bool", - "name": "isStaked", - "type": "bool" - } + internalType: 'bool', + name: 'isStaked', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } + internalType: 'address', + name: 'stakerAddress', + type: 'address', + }, ], - "name": "addToDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: 'addToDeposit', + outputs: [], + stateMutability: 'payable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "staker", - "type": "address" - } + internalType: 'address', + name: 'staker', + type: 'address', + }, ], - "name": "amountStaked", - "outputs": [ + name: 'amountStaked', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "baseStake", - "outputs": [ + inputs: [], + name: 'baseStake', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "bridge", - "outputs": [ + inputs: [], + name: 'bridge', + outputs: [ { - "internalType": "contract IBridge", - "name": "", - "type": "address" - } + internalType: 'contract IBridge', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "chainId", - "outputs": [ + inputs: [], + name: 'chainId', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "challengeManager", - "outputs": [ + inputs: [], + name: 'challengeManager', + outputs: [ { - "internalType": "contract IChallengeManager", - "name": "", - "type": "address" - } + internalType: 'contract IChallengeManager', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "challengeIndex", - "type": "uint256" + internalType: 'uint256', + name: 'challengeIndex', + type: 'uint256', }, { - "internalType": "address", - "name": "winningStaker", - "type": "address" + internalType: 'address', + name: 'winningStaker', + type: 'address', }, { - "internalType": "address", - "name": "losingStaker", - "type": "address" - } + internalType: 'address', + name: 'losingStaker', + type: 'address', + }, ], - "name": "completeChallenge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'completeChallenge', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" + internalType: 'bytes32', + name: 'blockHash', + type: 'bytes32', }, { - "internalType": "bytes32", - "name": "sendRoot", - "type": "bytes32" - } + internalType: 'bytes32', + name: 'sendRoot', + type: 'bytes32', + }, ], - "name": "confirmNextNode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'confirmNextNode', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [], - "name": "confirmPeriodBlocks", - "outputs": [ + inputs: [], + name: 'confirmPeriodBlocks', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" - } + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', + }, ], - "name": "countStakedZombies", - "outputs": [ + name: 'countStakedZombies', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" - } + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', + }, ], - "name": "countZombiesStakedOnChildren", - "outputs": [ + name: 'countZombiesStakedOnChildren', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address[2]", - "name": "stakers", - "type": "address[2]" + internalType: 'address[2]', + name: 'stakers', + type: 'address[2]', }, { - "internalType": "uint64[2]", - "name": "nodeNums", - "type": "uint64[2]" + internalType: 'uint64[2]', + name: 'nodeNums', + type: 'uint64[2]', }, { - "internalType": "enum MachineStatus[2]", - "name": "machineStatuses", - "type": "uint8[2]" + internalType: 'enum MachineStatus[2]', + name: 'machineStatuses', + type: 'uint8[2]', }, { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState[2]", - "name": "globalStates", - "type": "tuple[2]" + internalType: 'struct GlobalState[2]', + name: 'globalStates', + type: 'tuple[2]', }, { - "internalType": "uint64", - "name": "numBlocks", - "type": "uint64" + internalType: 'uint64', + name: 'numBlocks', + type: 'uint64', }, { - "internalType": "bytes32", - "name": "secondExecutionHash", - "type": "bytes32" + internalType: 'bytes32', + name: 'secondExecutionHash', + type: 'bytes32', }, { - "internalType": "uint256[2]", - "name": "proposedTimes", - "type": "uint256[2]" + internalType: 'uint256[2]', + name: 'proposedTimes', + type: 'uint256[2]', }, { - "internalType": "bytes32[2]", - "name": "wasmModuleRoots", - "type": "bytes32[2]" - } + internalType: 'bytes32[2]', + name: 'wasmModuleRoots', + type: 'bytes32[2]', + }, ], - "name": "createChallenge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'createChallenge', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "staker", - "type": "address" - } + internalType: 'address', + name: 'staker', + type: 'address', + }, ], - "name": "currentChallenge", - "outputs": [ + name: 'currentChallenge', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "currentRequiredStake", - "outputs": [ + inputs: [], + name: 'currentRequiredStake', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "extraChallengeTimeBlocks", - "outputs": [ + inputs: [], + name: 'extraChallengeTimeBlocks', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "firstUnresolvedNode", - "outputs": [ + inputs: [], + name: 'firstUnresolvedNode', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "components": [ + components: [ { - "components": [ + components: [ { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" + internalType: 'struct GlobalState', + name: 'globalState', + type: 'tuple', }, { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } + internalType: 'enum MachineStatus', + name: 'machineStatus', + type: 'uint8', + }, ], - "internalType": "struct RollupLib.ExecutionState", - "name": "beforeState", - "type": "tuple" + internalType: 'struct RollupLib.ExecutionState', + name: 'beforeState', + type: 'tuple', }, { - "components": [ + components: [ { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" + internalType: 'struct GlobalState', + name: 'globalState', + type: 'tuple', }, { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } + internalType: 'enum MachineStatus', + name: 'machineStatus', + type: 'uint8', + }, ], - "internalType": "struct RollupLib.ExecutionState", - "name": "afterState", - "type": "tuple" + internalType: 'struct RollupLib.ExecutionState', + name: 'afterState', + type: 'tuple', }, { - "internalType": "uint64", - "name": "numBlocks", - "type": "uint64" - } + internalType: 'uint64', + name: 'numBlocks', + type: 'uint64', + }, ], - "internalType": "struct RollupLib.Assertion", - "name": "assertion", - "type": "tuple" - } + internalType: 'struct RollupLib.Assertion', + name: 'assertion', + type: 'tuple', + }, ], - "name": "getL2BlockHash", - "outputs": [ + name: 'getL2BlockHash', + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" - } + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', + }, ], - "name": "getNode", - "outputs": [ + name: 'getNode', + outputs: [ { - "components": [ + components: [ { - "internalType": "bytes32", - "name": "stateHash", - "type": "bytes32" + internalType: 'bytes32', + name: 'stateHash', + type: 'bytes32', }, { - "internalType": "bytes32", - "name": "challengeHash", - "type": "bytes32" + internalType: 'bytes32', + name: 'challengeHash', + type: 'bytes32', }, { - "internalType": "bytes32", - "name": "confirmData", - "type": "bytes32" + internalType: 'bytes32', + name: 'confirmData', + type: 'bytes32', }, { - "internalType": "uint64", - "name": "prevNum", - "type": "uint64" + internalType: 'uint64', + name: 'prevNum', + type: 'uint64', }, { - "internalType": "uint64", - "name": "deadlineBlock", - "type": "uint64" + internalType: 'uint64', + name: 'deadlineBlock', + type: 'uint64', }, { - "internalType": "uint64", - "name": "noChildConfirmedBeforeBlock", - "type": "uint64" + internalType: 'uint64', + name: 'noChildConfirmedBeforeBlock', + type: 'uint64', }, { - "internalType": "uint64", - "name": "stakerCount", - "type": "uint64" + internalType: 'uint64', + name: 'stakerCount', + type: 'uint64', }, { - "internalType": "uint64", - "name": "childStakerCount", - "type": "uint64" + internalType: 'uint64', + name: 'childStakerCount', + type: 'uint64', }, { - "internalType": "uint64", - "name": "firstChildBlock", - "type": "uint64" + internalType: 'uint64', + name: 'firstChildBlock', + type: 'uint64', }, { - "internalType": "uint64", - "name": "latestChildNumber", - "type": "uint64" + internalType: 'uint64', + name: 'latestChildNumber', + type: 'uint64', }, { - "internalType": "uint64", - "name": "createdAtBlock", - "type": "uint64" + internalType: 'uint64', + name: 'createdAtBlock', + type: 'uint64', }, { - "internalType": "bytes32", - "name": "nodeHash", - "type": "bytes32" - } + internalType: 'bytes32', + name: 'nodeHash', + type: 'bytes32', + }, ], - "internalType": "struct Node", - "name": "", - "type": "tuple" - } + internalType: 'struct Node', + name: '', + type: 'tuple', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "staker", - "type": "address" - } + internalType: 'address', + name: 'staker', + type: 'address', + }, ], - "name": "getStaker", - "outputs": [ + name: 'getStaker', + outputs: [ { - "components": [ + components: [ { - "internalType": "uint256", - "name": "amountStaked", - "type": "uint256" + internalType: 'uint256', + name: 'amountStaked', + type: 'uint256', }, { - "internalType": "uint64", - "name": "index", - "type": "uint64" + internalType: 'uint64', + name: 'index', + type: 'uint64', }, { - "internalType": "uint64", - "name": "latestStakedNode", - "type": "uint64" + internalType: 'uint64', + name: 'latestStakedNode', + type: 'uint64', }, { - "internalType": "uint64", - "name": "currentChallenge", - "type": "uint64" + internalType: 'uint64', + name: 'currentChallenge', + type: 'uint64', }, { - "internalType": "bool", - "name": "isStaked", - "type": "bool" - } + internalType: 'bool', + name: 'isStaked', + type: 'bool', + }, ], - "internalType": "struct IRollupCore.Staker", - "name": "", - "type": "tuple" - } + internalType: 'struct IRollupCore.Staker', + name: '', + type: 'tuple', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint64", - "name": "stakerNum", - "type": "uint64" - } + internalType: 'uint64', + name: 'stakerNum', + type: 'uint64', + }, ], - "name": "getStakerAddress", - "outputs": [ + name: 'getStakerAddress', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "inbox", - "outputs": [ + inputs: [], + name: 'inbox', + outputs: [ { - "internalType": "contract IInbox", - "name": "", - "type": "address" - } + internalType: 'contract IInbox', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_stakeToken", - "type": "address" - } + internalType: 'address', + name: '_stakeToken', + type: 'address', + }, ], - "name": "initialize", - "outputs": [], - "stateMutability": "view", - "type": "function" + name: 'initialize', + outputs: [], + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "isERC20Enabled", - "outputs": [ + inputs: [], + name: 'isERC20Enabled', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" - } + internalType: 'bool', + name: '', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "staker", - "type": "address" - } + internalType: 'address', + name: 'staker', + type: 'address', + }, ], - "name": "isStaked", - "outputs": [ + name: 'isStaked', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" - } + internalType: 'bool', + name: '', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "staker", - "type": "address" - } + internalType: 'address', + name: 'staker', + type: 'address', + }, ], - "name": "isStakedOnLatestConfirmed", - "outputs": [ + name: 'isStakedOnLatestConfirmed', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" - } + internalType: 'bool', + name: '', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "name": "isValidator", - "outputs": [ + name: 'isValidator', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" - } + internalType: 'bool', + name: '', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "staker", - "type": "address" - } + internalType: 'address', + name: 'staker', + type: 'address', + }, ], - "name": "isZombie", - "outputs": [ + name: 'isZombie', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" - } + internalType: 'bool', + name: '', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "lastStakeBlock", - "outputs": [ + inputs: [], + name: 'lastStakeBlock', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "latestConfirmed", - "outputs": [ + inputs: [], + name: 'latestConfirmed', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "latestNodeCreated", - "outputs": [ + inputs: [], + name: 'latestNodeCreated', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "staker", - "type": "address" - } + internalType: 'address', + name: 'staker', + type: 'address', + }, ], - "name": "latestStakedNode", - "outputs": [ + name: 'latestStakedNode', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "loserStakeEscrow", - "outputs": [ + inputs: [], + name: 'loserStakeEscrow', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "minimumAssertionPeriod", - "outputs": [ + inputs: [], + name: 'minimumAssertionPeriod', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', }, { - "internalType": "bytes32", - "name": "nodeHash", - "type": "bytes32" - } + internalType: 'bytes32', + name: 'nodeHash', + type: 'bytes32', + }, ], - "name": "newStakeOnExistingNode", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: 'newStakeOnExistingNode', + outputs: [], + stateMutability: 'payable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "components": [ + components: [ { - "components": [ + components: [ { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" + internalType: 'struct GlobalState', + name: 'globalState', + type: 'tuple', }, { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } + internalType: 'enum MachineStatus', + name: 'machineStatus', + type: 'uint8', + }, ], - "internalType": "struct RollupLib.ExecutionState", - "name": "beforeState", - "type": "tuple" + internalType: 'struct RollupLib.ExecutionState', + name: 'beforeState', + type: 'tuple', }, { - "components": [ + components: [ { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" + internalType: 'struct GlobalState', + name: 'globalState', + type: 'tuple', }, { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } + internalType: 'enum MachineStatus', + name: 'machineStatus', + type: 'uint8', + }, ], - "internalType": "struct RollupLib.ExecutionState", - "name": "afterState", - "type": "tuple" + internalType: 'struct RollupLib.ExecutionState', + name: 'afterState', + type: 'tuple', }, { - "internalType": "uint64", - "name": "numBlocks", - "type": "uint64" - } + internalType: 'uint64', + name: 'numBlocks', + type: 'uint64', + }, ], - "internalType": "struct RollupLib.Assertion", - "name": "assertion", - "type": "tuple" + internalType: 'struct RollupLib.Assertion', + name: 'assertion', + type: 'tuple', }, { - "internalType": "bytes32", - "name": "expectedNodeHash", - "type": "bytes32" + internalType: 'bytes32', + name: 'expectedNodeHash', + type: 'bytes32', }, { - "internalType": "uint256", - "name": "prevNodeInboxMaxCount", - "type": "uint256" - } + internalType: 'uint256', + name: 'prevNodeInboxMaxCount', + type: 'uint256', + }, ], - "name": "newStakeOnNewNode", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: 'newStakeOnNewNode', + outputs: [], + stateMutability: 'payable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', }, { - "internalType": "address", - "name": "staker", - "type": "address" - } + internalType: 'address', + name: 'staker', + type: 'address', + }, ], - "name": "nodeHasStaker", - "outputs": [ + name: 'nodeHasStaker', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" - } + internalType: 'bool', + name: '', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "outbox", - "outputs": [ + inputs: [], + name: 'outbox', + outputs: [ { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } + internalType: 'contract IOutbox', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "owner", - "outputs": [ + inputs: [], + name: 'owner', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "paused", - "outputs": [ + inputs: [], + name: 'paused', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" - } + internalType: 'bool', + name: '', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ + inputs: [], + name: 'proxiableUUID', + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "target", - "type": "uint256" - } + internalType: 'uint256', + name: 'target', + type: 'uint256', + }, ], - "name": "reduceDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'reduceDeposit', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } + internalType: 'address', + name: 'stakerAddress', + type: 'address', + }, ], - "name": "rejectNextNode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'rejectNextNode', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "startIndex", - "type": "uint256" - } + internalType: 'uint256', + name: 'startIndex', + type: 'uint256', + }, ], - "name": "removeOldZombies", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'removeOldZombies', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [], - "name": "removeWhitelistAfterFork", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + inputs: [], + name: 'removeWhitelistAfterFork', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [], - "name": "removeWhitelistAfterValidatorAfk", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + inputs: [], + name: 'removeWhitelistAfterValidatorAfk', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "zombieNum", - "type": "uint256" + internalType: 'uint256', + name: 'zombieNum', + type: 'uint256', }, { - "internalType": "uint256", - "name": "maxNodes", - "type": "uint256" - } + internalType: 'uint256', + name: 'maxNodes', + type: 'uint256', + }, ], - "name": "removeZombie", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'removeZombie', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "nodeNum", - "type": "uint256" - } + internalType: 'uint256', + name: 'nodeNum', + type: 'uint256', + }, ], - "name": "requireUnresolved", - "outputs": [], - "stateMutability": "view", - "type": "function" + name: 'requireUnresolved', + outputs: [], + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "requireUnresolvedExists", - "outputs": [], - "stateMutability": "view", - "type": "function" + inputs: [], + name: 'requireUnresolvedExists', + outputs: [], + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" + internalType: 'uint256', + name: 'blockNumber', + type: 'uint256', }, { - "internalType": "uint64", - "name": "firstUnresolvedNodeNum", - "type": "uint64" + internalType: 'uint64', + name: 'firstUnresolvedNodeNum', + type: 'uint64', }, { - "internalType": "uint64", - "name": "latestCreatedNode", - "type": "uint64" - } + internalType: 'uint64', + name: 'latestCreatedNode', + type: 'uint64', + }, ], - "name": "requiredStake", - "outputs": [ + name: 'requiredStake', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "stakerAddress", - "type": "address" - } + internalType: 'address', + name: 'stakerAddress', + type: 'address', + }, ], - "name": "returnOldDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'returnOldDeposit', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [], - "name": "rollupDeploymentBlock", - "outputs": [ + inputs: [], + name: 'rollupDeploymentBlock', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "rollupEventInbox", - "outputs": [ + inputs: [], + name: 'rollupEventInbox', + outputs: [ { - "internalType": "contract IRollupEventInbox", - "name": "", - "type": "address" - } + internalType: 'contract IRollupEventInbox', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "sequencerInbox", - "outputs": [ + inputs: [], + name: 'sequencerInbox', + outputs: [ { - "internalType": "contract ISequencerInbox", - "name": "", - "type": "address" - } + internalType: 'contract ISequencerInbox', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint64", - "name": "nodeNum", - "type": "uint64" + internalType: 'uint64', + name: 'nodeNum', + type: 'uint64', }, { - "internalType": "bytes32", - "name": "nodeHash", - "type": "bytes32" - } + internalType: 'bytes32', + name: 'nodeHash', + type: 'bytes32', + }, ], - "name": "stakeOnExistingNode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'stakeOnExistingNode', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "components": [ + components: [ { - "components": [ + components: [ { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" + internalType: 'struct GlobalState', + name: 'globalState', + type: 'tuple', }, { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } + internalType: 'enum MachineStatus', + name: 'machineStatus', + type: 'uint8', + }, ], - "internalType": "struct RollupLib.ExecutionState", - "name": "beforeState", - "type": "tuple" + internalType: 'struct RollupLib.ExecutionState', + name: 'beforeState', + type: 'tuple', }, { - "components": [ + components: [ { - "components": [ + components: [ { - "internalType": "bytes32[2]", - "name": "bytes32Vals", - "type": "bytes32[2]" + internalType: 'bytes32[2]', + name: 'bytes32Vals', + type: 'bytes32[2]', }, { - "internalType": "uint64[2]", - "name": "u64Vals", - "type": "uint64[2]" - } + internalType: 'uint64[2]', + name: 'u64Vals', + type: 'uint64[2]', + }, ], - "internalType": "struct GlobalState", - "name": "globalState", - "type": "tuple" + internalType: 'struct GlobalState', + name: 'globalState', + type: 'tuple', }, { - "internalType": "enum MachineStatus", - "name": "machineStatus", - "type": "uint8" - } + internalType: 'enum MachineStatus', + name: 'machineStatus', + type: 'uint8', + }, ], - "internalType": "struct RollupLib.ExecutionState", - "name": "afterState", - "type": "tuple" + internalType: 'struct RollupLib.ExecutionState', + name: 'afterState', + type: 'tuple', }, { - "internalType": "uint64", - "name": "numBlocks", - "type": "uint64" - } + internalType: 'uint64', + name: 'numBlocks', + type: 'uint64', + }, ], - "internalType": "struct RollupLib.Assertion", - "name": "assertion", - "type": "tuple" + internalType: 'struct RollupLib.Assertion', + name: 'assertion', + type: 'tuple', }, { - "internalType": "bytes32", - "name": "expectedNodeHash", - "type": "bytes32" + internalType: 'bytes32', + name: 'expectedNodeHash', + type: 'bytes32', }, { - "internalType": "uint256", - "name": "prevNodeInboxMaxCount", - "type": "uint256" - } + internalType: 'uint256', + name: 'prevNodeInboxMaxCount', + type: 'uint256', + }, ], - "name": "stakeOnNewNode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'stakeOnNewNode', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [], - "name": "stakeToken", - "outputs": [ + inputs: [], + name: 'stakeToken', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "stakerCount", - "outputs": [ + inputs: [], + name: 'stakerCount', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "totalWithdrawableFunds", - "outputs": [ + inputs: [], + name: 'totalWithdrawableFunds', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "validatorUtils", - "outputs": [ + inputs: [], + name: 'validatorUtils', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "validatorWalletCreator", - "outputs": [ + inputs: [], + name: 'validatorWalletCreator', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "validatorWhitelistDisabled", - "outputs": [ + inputs: [], + name: 'validatorWhitelistDisabled', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" - } + internalType: 'bool', + name: '', + type: 'bool', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "wasmModuleRoot", - "outputs": [ + inputs: [], + name: 'wasmModuleRoot', + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "withdrawStakerFunds", - "outputs": [ + inputs: [], + name: 'withdrawStakerFunds', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "nonpayable", - "type": "function" + stateMutability: 'nonpayable', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "user", - "type": "address" - } + internalType: 'address', + name: 'user', + type: 'address', + }, ], - "name": "withdrawableFunds", - "outputs": [ + name: 'withdrawableFunds', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "zombieNum", - "type": "uint256" - } + internalType: 'uint256', + name: 'zombieNum', + type: 'uint256', + }, ], - "name": "zombieAddress", - "outputs": [ + name: 'zombieAddress', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" - } + internalType: 'address', + name: '', + type: 'address', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [], - "name": "zombieCount", - "outputs": [ + inputs: [], + name: 'zombieCount', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + internalType: 'uint256', + name: '', + type: 'uint256', + }, ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function', }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "zombieNum", - "type": "uint256" - } + internalType: 'uint256', + name: 'zombieNum', + type: 'uint256', + }, ], - "name": "zombieLatestStakedNode", - "outputs": [ + name: 'zombieLatestStakedNode', + outputs: [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } + internalType: 'uint64', + name: '', + type: 'uint64', + }, ], - "stateMutability": "view", - "type": "function" - } -] + stateMutability: 'view', + type: 'function', + }, +]; diff --git a/arb-gateway/src/index.ts b/arb-gateway/src/index.ts index c0ddd824..9fbb5946 100644 --- a/arb-gateway/src/index.ts +++ b/arb-gateway/src/index.ts @@ -2,13 +2,12 @@ import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService, type ArbProvableBlock } from './ArbProofService.js'; - export type ArbGateway = EVMGateway; export async function makeArbGateway( l1providerUrl: string, l2providerUrl: string, - l2RollupAddress: string, + l2RollupAddress: string ): Promise { const l1Provider = new JsonRpcProvider(l1providerUrl); const l2Provider = new JsonRpcProvider(l2providerUrl); diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts index 02509e83..a0f91e49 100644 --- a/arb-gateway/src/server.ts +++ b/arb-gateway/src/server.ts @@ -4,7 +4,6 @@ import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService } from './ArbProofService.js'; - const program = new Command() .option('-p, --port ', 'port to listen on', '8080') .option( From 661853f1010655ed4eb4da5a71d09d07692d18b0 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Thu, 30 Nov 2023 17:15:07 +0100 Subject: [PATCH 35/63] add comment reagarding the stateRoot --- arb-verifier/contracts/ArbVerifier.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index 13d5b720..1b699794 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -77,14 +77,13 @@ contract ArbVerifier is IEVMVerifier { * Decodes a block by extracting and converting the bytes32 value from the RLP-encoded block information. * * @param {bytes} rlpEncodedBlock - The RLP-encoded block information. - * @returns {bytes32} The decoded bytes32 value extracted from the RLP-encoded block information. - * - * @notice This function is designed to be used internally within the contract. + * @returns {bytes32} The stateRoot extracted from the RLP-encoded block information. */ function decodeBlock( bytes memory rlpEncdoedBlock ) internal pure returns (bytes32) { RLPReader.RLPItem[] memory i = RLPReader.readList(rlpEncdoedBlock); + //StateRoot is located at idx 3 return bytes32(RLPReader.readBytes(i[3])); } } From db012b6793899da6c4c02ea370d1d71869ff30fe Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Thu, 30 Nov 2023 17:17:54 +0100 Subject: [PATCH 36/63] use correct chainId for ArbitrumGoerli --- arb-verifier/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index 84c79690..eaa5b786 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -50,7 +50,7 @@ const config: HardhatUserConfig = { customChains: [ { network: "arbitrumGoerli", - chainId: 420, + chainId: 421613, urls: { apiURL: "https://api-goerli.arbiscan.io/api", browserURL: "https://api-goerli.arbiscan.io.io" From ece982334bde93597ec1ff584d64612a924a5a48 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 1 Dec 2023 09:18:52 +0100 Subject: [PATCH 37/63] update README --- arb-gateway/README.md | 10 +++++----- arb-gateway/wrangler.toml | 2 +- arb-verifier/README.md | 34 ++++++++++++++++++++++++---------- 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/arb-gateway/README.md b/arb-gateway/README.md index e4752639..bc855dfa 100644 --- a/arb-gateway/README.md +++ b/arb-gateway/README.md @@ -1,24 +1,24 @@ # @ensdomains/arb-gateway -An instantiation of [evm-gateway](https://github.com/ensdomains/evmgateway/tree/main/evm-gateway) that targets Optimism - that is, it implements a CCIP-Read gateway that generates proofs of contract state on Optimism. +An instantiation of [evm-gateway](https://github.com/ensdomains/evmgateway/tree/main/evm-gateway) that targets Arbitrum - that is, it implements a CCIP-Read gateway that generates proofs of contract state on Arbitrum. For a detailed readme and usage instructions, see the [monorepo readme](https://github.com/ensdomains/evmgateway/tree/main). -## How to use op-gateway locally via cloudflare dev env (aka wrangler) +## How to use arb-gateway locally via cloudflare dev env (aka wrangler) ``` npm install -g bun -cd op-gateway +cd arb-gateway bun install touch .dev.vars ## set L1_PROVIDER_URL, L2_PROVIDER_URL, L2_OUTPUT_ORACLE, DELAY=5 yarn dev ``` -## How to deploy op-gateway to cloudflare +## How to deploy arb-gateway to cloudflare ``` -cd op-gateway +cd arb-gateway npm install -g wrangler wrngler login wrangler secret put L1_PROVIDER_URL diff --git a/arb-gateway/wrangler.toml b/arb-gateway/wrangler.toml index 8b2e3b27..4c0787a8 100644 --- a/arb-gateway/wrangler.toml +++ b/arb-gateway/wrangler.toml @@ -1,4 +1,4 @@ -name = "op-gateway-worker" +name = "arb-gateway-worker" account_id = "15dcc9085cb794bb4f29d3e8177ac880" main = "./src/worker.ts" node_compat = true diff --git a/arb-verifier/README.md b/arb-verifier/README.md index caa6a4ec..f2f3cad4 100644 --- a/arb-verifier/README.md +++ b/arb-verifier/README.md @@ -1,31 +1,45 @@ # @ensdomains/op-verifier -A complete Solidity library that facilitates sending CCIP-Read requests for Optimism state, and verifying the responses. +A complete Solidity library that facilitates sending CCIP-Read requests for Arbitrum state, and verifying the responses. For a detailed readme and usage instructions, see the [monorepo readme](https://github.com/ensdomains/evmgateway/tree/main). ## Testing -Start up a devnet by following Optimism's instructions [here](https://community.optimism.io/docs/developers/build/dev-node/#do-i-need-this). +Start up a devnet by following Arbitrums's instructions [here](https://docs.arbitrum.io/node-running/how-tos/local-dev-node). -Then, deploy the L2 contract: +The test requires you to use the rollup address of your node, which may not always be the same. This address is printed in the logs after you've initially set up the node. Copy that value and replace it accordingly. Unfortunately, there is no endpoint to retrieve the rollup address dynamically. + +Copy the rollup address from the Node's Logs. Add it to the following files + +``` +arb-verifier/test/testArbVerifier.ts +``` ``` -bun run hardhat deploy --network opDevnetL2 +arb-verifier/deploy_l1/00_arb_verifier.ts ``` -Followed by the L1 contract: +Build the project ``` -bun run hardhat deploy --network opDevnetL1 +bun run build ``` -The L1 contracts contain a reference to the L2 contract, and so will require redeploying if the L2 contract changes. +Open another terminal window and start the Gateway -Finally, run the tests: +``` +cd ./arb-gateway && bun run start -u http://127.0.0.1:8545/ -v http://127.0.0.1:8547/ -o $ROLLUP_ADDRESS -p 8089 +``` + +Go back to the first Termina window and deploy the contracts to the test node ``` -hardhat test --network opDevnetL1 +npx hardhat --network arbDevnetL1 deploy && npx hardhat --network arbDevnetL2 deploy ``` -The tests will require small modifications to work on public testnets; specifically, contract addresses are currently fetched from `http://localhost:8080/addresses.json`; this will need to be made conditional on the network being used. +Finally, run the tests: + +``` +bun run test +``` From 6865e7baa6828825d65957b4c00d23c782b8087b Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 1 Dec 2023 09:23:33 +0100 Subject: [PATCH 38/63] remove op contracts from arb-verifier package.json --- arb-verifier/hardhat.config.ts | 36 ++++++++++++++++++---------------- arb-verifier/package.json | 2 -- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index eaa5b786..9b5f07e4 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -2,8 +2,10 @@ import '@nomicfoundation/hardhat-toolbox'; import 'hardhat-deploy'; import 'hardhat-deploy-ethers'; import { HardhatUserConfig } from 'hardhat/config'; -import 'ethers' -const DEPLOYER_PRIVATE_KEY = process.env.DEPLOYER_PRIVATE_KEY || "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; +import 'ethers'; +const DEPLOYER_PRIVATE_KEY = + process.env.DEPLOYER_PRIVATE_KEY || + 'ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; const L1_PROVIDER_URL = process.env.L1_PROVIDER_URL || ''; const L1_ETHERSCAN_API_KEY = process.env.L1_ETHERSCAN_API_KEY; const L2_ETHERSCAN_API_KEY = process.env.L2_ETHERSCAN_API_KEY; @@ -12,55 +14,55 @@ const config: HardhatUserConfig = { solidity: '0.8.19', networks: { arbDevnetL1: { - url: "http://127.0.0.1:8545/", + url: 'http://127.0.0.1:8545/', accounts: [ '0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659', ], - deploy: ["deploy_l1/"], + deploy: ['deploy_l1/'], companionNetworks: { - l2: "arbDevnetL2", + l2: 'arbDevnetL2', }, }, arbDevnetL2: { - url: "http://127.0.0.1:8547/", + url: 'http://127.0.0.1:8547/', accounts: [ '0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659', ], - deploy: ["deploy_l2/"], + deploy: ['deploy_l2/'], }, goerli: { url: L1_PROVIDER_URL, accounts: [DEPLOYER_PRIVATE_KEY], - deploy: ["deploy_l1/"], + deploy: ['deploy_l1/'], companionNetworks: { - l2: "optimismGoerli", + l2: 'arbitrumGoerli', }, }, arbitrumGoerli: { - url: "https://rpc.goerli.arbitrum.gateway.fm", + url: 'https://rpc.goerli.arbitrum.gateway.fm', accounts: [DEPLOYER_PRIVATE_KEY], - deploy: ["deploy_l2/"], + deploy: ['deploy_l2/'], }, }, etherscan: { apiKey: { goerli: L1_ETHERSCAN_API_KEY, - optimismGoerli: L2_ETHERSCAN_API_KEY + arbitrumGoerli: L2_ETHERSCAN_API_KEY, }, customChains: [ { - network: "arbitrumGoerli", + network: 'arbitrumGoerli', chainId: 421613, urls: { - apiURL: "https://api-goerli.arbiscan.io/api", - browserURL: "https://api-goerli.arbiscan.io.io" + apiURL: 'https://api-goerli.arbiscan.io/api', + browserURL: 'https://api-goerli.arbiscan.io.io', }, }, ], }, namedAccounts: { - 'deployer': 0, - } + deployer: 0, + }, }; export default config; diff --git a/arb-verifier/package.json b/arb-verifier/package.json index 3abfcf4b..3d10fe72 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -38,8 +38,6 @@ }, "dependencies": { "@ensdomains/evm-verifier": "^0.1.0", - "@eth-optimism/contracts": "^0.6.0", - "@eth-optimism/contracts-bedrock": "^0.16.2", "@arbitrum/nitro-contracts": "^1.1.0" } } From ae749021c1079f506b2c04d92ebe054c208ea10e Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:08:09 +0000 Subject: [PATCH 39/63] Add goerli deployment info --- arb-gateway/README.md | 6 +++--- arb-verifier/README.md | 18 ++++++++++++++++++ arb-verifier/deploy_l1/00_arb_verifier.ts | 7 ++++--- arb-verifier/hardhat.config.ts | 7 ++++--- arb-verifier/test/testArbVerifier.ts | 3 ++- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/arb-gateway/README.md b/arb-gateway/README.md index e4752639..4b7daaa5 100644 --- a/arb-gateway/README.md +++ b/arb-gateway/README.md @@ -11,7 +11,7 @@ npm install -g bun cd op-gateway bun install touch .dev.vars -## set L1_PROVIDER_URL, L2_PROVIDER_URL, L2_OUTPUT_ORACLE, DELAY=5 +## set L1_PROVIDER_URL, L2_PROVIDER_URL, L2_ROLLUP yarn dev ``` @@ -21,10 +21,10 @@ yarn dev cd op-gateway npm install -g wrangler wrngler login + wrangler secret put L1_PROVIDER_URL wrangler secret put L2_PROVIDER_URL -wrangler secret put L2_OUTPUT_ORACLE -wrangler secret put DELAY +wrangler secret put L2_ROLLUP yarn deploy ``` diff --git a/arb-verifier/README.md b/arb-verifier/README.md index caa6a4ec..be37e3a0 100644 --- a/arb-verifier/README.md +++ b/arb-verifier/README.md @@ -29,3 +29,21 @@ hardhat test --network opDevnetL1 ``` The tests will require small modifications to work on public testnets; specifically, contract addresses are currently fetched from `http://localhost:8080/addresses.json`; this will need to be made conditional on the network being used. + + +## Deployments + +### L2 + +- TestL2.sol = [0xAdef74372444e716C0473dEe1F9Cb3108EFa3818](https://goerli.arbiscan.io/address/0xAdef74372444e716C0473dEe1F9Cb3108EFa3818#code) + +### L1 + +- ArbVerifier = [0x9E46DeE08Ad370bEFa7858c0E9a6c87f2D7E57A1](https://goerli.etherscan.io/address/0x9E46DeE08Ad370bEFa7858c0E9a6c87f2D7E57A1#code) + +- TestL1.sol = [0x0d6c6B70cd561EB59e6818D832197fFad60840AB](https://goerli.etherscan.io/address/0x0d6c6B70cd561EB59e6818D832197fFad60840AB#code) + +### Gateway server + +- https://arb-gateway-worker.ens-cf.workers.dev + diff --git a/arb-verifier/deploy_l1/00_arb_verifier.ts b/arb-verifier/deploy_l1/00_arb_verifier.ts index 9ce94bf5..87a94a4a 100644 --- a/arb-verifier/deploy_l1/00_arb_verifier.ts +++ b/arb-verifier/deploy_l1/00_arb_verifier.ts @@ -3,7 +3,7 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; const GATEWAY_URLS = { arbDevnetL1: 'http://localhost:8089/{sender}/{data}.json', - goerli: 'http://localhost:8089/{sender}/{data}.json', + goerli: 'https://arb-gateway-worker.ens-cf.workers.dev/{sender}/{data}.json', }; const ROLLUP_ADDRESSES = { @@ -14,7 +14,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deployments, getNamedAccounts, network } = hre; const { deploy } = deployments; const { deployer } = await getNamedAccounts(); - let ROLLUP_ADDRESS, GATEWAY_URL; + let ROLLUP_ADDRESS; console.log("NW ", network.name) if (network.name === 'arbDevnetL1') { //Rollup address according to sequencer config. Unfortunately, there is no endpoint to fetch it at runtime from the rollup. @@ -24,10 +24,11 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { } else { ROLLUP_ADDRESS = ROLLUP_ADDRESSES[network.name]; } + const GATEWAY_URL = GATEWAY_URLS[network.name]; console.log('ArbVerifier', [[GATEWAY_URL], ROLLUP_ADDRESS]); await deploy('ArbVerifier', { from: deployer, - args: [[GATEWAY_URLS[network.name]], ROLLUP_ADDRESS], + args: [[GATEWAY_URL], ROLLUP_ADDRESS], log: true, }); }; diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index 84c79690..d818b276 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -33,7 +33,7 @@ const config: HardhatUserConfig = { accounts: [DEPLOYER_PRIVATE_KEY], deploy: ["deploy_l1/"], companionNetworks: { - l2: "optimismGoerli", + l2: "arbitrumGoerli" }, }, arbitrumGoerli: { @@ -45,12 +45,13 @@ const config: HardhatUserConfig = { etherscan: { apiKey: { goerli: L1_ETHERSCAN_API_KEY, - optimismGoerli: L2_ETHERSCAN_API_KEY + optimismGoerli: L2_ETHERSCAN_API_KEY, + arbitrumGoerli: L2_ETHERSCAN_API_KEY }, customChains: [ { network: "arbitrumGoerli", - chainId: 420, + chainId: 421613, urls: { apiURL: "https://api-goerli.arbiscan.io/api", browserURL: "https://api-goerli.arbiscan.io.io" diff --git a/arb-verifier/test/testArbVerifier.ts b/arb-verifier/test/testArbVerifier.ts index fdcf0d9b..e536f6ef 100644 --- a/arb-verifier/test/testArbVerifier.ts +++ b/arb-verifier/test/testArbVerifier.ts @@ -44,7 +44,8 @@ describe('ArbVerifier', () => { //Rollup address according to sequencer config. Unfortunately, there is no endpoint to fetch it at runtime from the rollup. //The address can be found at nitro-testnode-sequencer-1/config/deployment.json const rollupAddress = '0xb264babb91df9d1ca05c8c2028288dc08c4bee46'; - + // When testing against Goerli, replace with this address + // const rollupAddress = '0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17'; const gateway = await makeArbGateway( (hre.network.config as any).url, From 77a6b7c076b8992b3a807dcc732174b681a98c92 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:14:37 +0000 Subject: [PATCH 40/63] Change worker name --- arb-gateway/wrangler.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arb-gateway/wrangler.toml b/arb-gateway/wrangler.toml index 8b2e3b27..4c0787a8 100644 --- a/arb-gateway/wrangler.toml +++ b/arb-gateway/wrangler.toml @@ -1,4 +1,4 @@ -name = "op-gateway-worker" +name = "arb-gateway-worker" account_id = "15dcc9085cb794bb4f29d3e8177ac880" main = "./src/worker.ts" node_compat = true From 2c61006e308b492a28e4663d0ae3deae598f2426 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:17:35 +0000 Subject: [PATCH 41/63] Add comma --- arb-verifier/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index d818b276..af8f180a 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -33,7 +33,7 @@ const config: HardhatUserConfig = { accounts: [DEPLOYER_PRIVATE_KEY], deploy: ["deploy_l1/"], companionNetworks: { - l2: "arbitrumGoerli" + l2: "arbitrumGoerli", }, }, arbitrumGoerli: { From 479c4f85613ed0da0ed62455ad54783d5abbda9f Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:18:22 +0000 Subject: [PATCH 42/63] Change to single quote --- arb-verifier/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index af8f180a..cf986966 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -33,7 +33,7 @@ const config: HardhatUserConfig = { accounts: [DEPLOYER_PRIVATE_KEY], deploy: ["deploy_l1/"], companionNetworks: { - l2: "arbitrumGoerli", + l2: 'arbitrumGoerli', }, }, arbitrumGoerli: { From d4a53e22309b22b976d1997a3092905f8092eeb6 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:20:09 +0000 Subject: [PATCH 43/63] single quote --- arb-verifier/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index cf986966..b685726f 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -37,7 +37,7 @@ const config: HardhatUserConfig = { }, }, arbitrumGoerli: { - url: "https://rpc.goerli.arbitrum.gateway.fm", + url: 'https://rpc.goerli.arbitrum.gateway.fm', accounts: [DEPLOYER_PRIVATE_KEY], deploy: ["deploy_l2/"], }, From b48975f84d743e782c25365441f02e1fbd323848 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:21:31 +0000 Subject: [PATCH 44/63] single quote --- arb-verifier/hardhat.config.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index b685726f..e999bf33 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -39,22 +39,21 @@ const config: HardhatUserConfig = { arbitrumGoerli: { url: 'https://rpc.goerli.arbitrum.gateway.fm', accounts: [DEPLOYER_PRIVATE_KEY], - deploy: ["deploy_l2/"], + deploy: ['deploy_l2/'], }, }, etherscan: { apiKey: { goerli: L1_ETHERSCAN_API_KEY, - optimismGoerli: L2_ETHERSCAN_API_KEY, arbitrumGoerli: L2_ETHERSCAN_API_KEY }, customChains: [ { - network: "arbitrumGoerli", + network: 'arbitrumGoerli', chainId: 421613, urls: { - apiURL: "https://api-goerli.arbiscan.io/api", - browserURL: "https://api-goerli.arbiscan.io.io" + apiURL: 'https://api-goerli.arbiscan.io/api', + browserURL: 'https://api-goerli.arbiscan.io.io' }, }, ], From 896a818152a91dc3692051ce8a3146f242647155 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:22:19 +0000 Subject: [PATCH 45/63] comma --- arb-verifier/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index e999bf33..233907bd 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -53,7 +53,7 @@ const config: HardhatUserConfig = { chainId: 421613, urls: { apiURL: 'https://api-goerli.arbiscan.io/api', - browserURL: 'https://api-goerli.arbiscan.io.io' + browserURL: 'https://api-goerli.arbiscan.io.io', }, }, ], From 519c861709334983259545d73b968a3ce821a388 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:22:53 +0000 Subject: [PATCH 46/63] comma --- arb-verifier/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arb-verifier/hardhat.config.ts b/arb-verifier/hardhat.config.ts index 233907bd..d5163453 100644 --- a/arb-verifier/hardhat.config.ts +++ b/arb-verifier/hardhat.config.ts @@ -45,7 +45,7 @@ const config: HardhatUserConfig = { etherscan: { apiKey: { goerli: L1_ETHERSCAN_API_KEY, - arbitrumGoerli: L2_ETHERSCAN_API_KEY + arbitrumGoerli: L2_ETHERSCAN_API_KEY, }, customChains: [ { From 381345af3f169162148aa60439ae6ff44f717144 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:26:35 +0000 Subject: [PATCH 47/63] Update readme --- arb-verifier/README.md | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/arb-verifier/README.md b/arb-verifier/README.md index be37e3a0..b4d563eb 100644 --- a/arb-verifier/README.md +++ b/arb-verifier/README.md @@ -1,35 +1,48 @@ # @ensdomains/op-verifier -A complete Solidity library that facilitates sending CCIP-Read requests for Optimism state, and verifying the responses. +A complete Solidity library that facilitates sending CCIP-Read requests for Arbitrum state, and verifying the responses. For a detailed readme and usage instructions, see the [monorepo readme](https://github.com/ensdomains/evmgateway/tree/main). ## Testing -Start up a devnet by following Optimism's instructions [here](https://community.optimism.io/docs/developers/build/dev-node/#do-i-need-this). +Start up a devnet by following Arbitrums's instructions [here](https://docs.arbitrum.io/node-running/how-tos/local-dev-node). -Then, deploy the L2 contract: +The test requires you to use the rollup address of your node, which may not always be the same. This address is printed in the logs after you've initially set up the node. Copy that value and replace it accordingly. Unfortunately, there is no endpoint to retrieve the rollup address dynamically. + +Copy the rollup address from the Node's Logs. Add it to the following files + +``` +arb-verifier/test/testArbVerifier.ts +``` ``` -bun run hardhat deploy --network opDevnetL2 +arb-verifier/deploy_l1/00_arb_verifier.ts ``` -Followed by the L1 contract: +Build the project ``` -bun run hardhat deploy --network opDevnetL1 +bun run build ``` -The L1 contracts contain a reference to the L2 contract, and so will require redeploying if the L2 contract changes. +Open another terminal window and start the Gateway -Finally, run the tests: +``` +cd ./arb-gateway && bun run start -u http://127.0.0.1:8545/ -v http://127.0.0.1:8547/ -o $ROLLUP_ADDRESS -p 8089 +``` + +Go back to the first Termina window and deploy the contracts to the test node ``` -hardhat test --network opDevnetL1 +npx hardhat --network arbDevnetL1 deploy && npx hardhat --network arbDevnetL2 deploy ``` -The tests will require small modifications to work on public testnets; specifically, contract addresses are currently fetched from `http://localhost:8080/addresses.json`; this will need to be made conditional on the network being used. +Finally, run the tests: +``` +bun run test +``` ## Deployments From b49dc6fd095b3eaec78fad1b23fe26e3ad120551 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:00:18 +0000 Subject: [PATCH 48/63] Support cors --- arb-gateway/src/worker.ts | 5 ++++- arb-verifier/package.json | 3 ++- bun.lockb | Bin 689264 -> 646424 bytes evm-gateway/src/utils.ts | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts index 99f78850..599e7dc0 100644 --- a/arb-gateway/src/worker.ts +++ b/arb-gateway/src/worker.ts @@ -1,11 +1,14 @@ import { Server } from '@ensdomains/ccip-read-cf-worker'; +import { createCors } from 'itty-router'; import type { Router } from '@ensdomains/evm-gateway'; + interface Env { L1_PROVIDER_URL: string; L2_PROVIDER_URL: string; L2_ROLLUP: string; } +const {corsify} = createCors() let app: Router; async function fetch(request: Request, env: Env) { // Loading libraries dynamically as a temp work around. @@ -31,7 +34,7 @@ async function fetch(request: Request, env: Env) { gateway.add(server); app = server.makeApp('/'); } - return app.handle(request); + return app.handle(request).then(corsify); } export default { diff --git a/arb-verifier/package.json b/arb-verifier/package.json index 3d10fe72..b55b1c7e 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -37,7 +37,8 @@ "typescript": "^5.2.2" }, "dependencies": { + "@arbitrum/nitro-contracts": "^1.1.0", "@ensdomains/evm-verifier": "^0.1.0", - "@arbitrum/nitro-contracts": "^1.1.0" + "itty-router": "^4.0.23" } } diff --git a/bun.lockb b/bun.lockb index 5906ebb825e0cad84d2bfd1d56748e5a9c5fc7ea..fc2918b01f757ed46f524e68eaf5ec8cdb72f678 100755 GIT binary patch delta 155874 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⪼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

;;4tb==Ww?EY2X|Q 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%0Djzb?QX9c7^3ksGx`=zLX=Us2! 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 S;}RWFkH^IT`sLyF_5T6n<`=L4 diff --git a/evm-gateway/src/utils.ts b/evm-gateway/src/utils.ts index 170d588f..0c5c3cb0 100644 --- a/evm-gateway/src/utils.ts +++ b/evm-gateway/src/utils.ts @@ -1,3 +1,3 @@ export interface Router { - handle: (request: Request) => void; + handle: (request: Request) => Promise; } From b43c13947bd8af2f0821c694f8eba0248a7bbd2d Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:22:04 +0000 Subject: [PATCH 49/63] Add preflight --- arb-gateway/src/worker.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts index 599e7dc0..6707291c 100644 --- a/arb-gateway/src/worker.ts +++ b/arb-gateway/src/worker.ts @@ -8,7 +8,7 @@ interface Env { L2_ROLLUP: string; } -const {corsify} = createCors() +const {corsify, preflight} = createCors() let app: Router; async function fetch(request: Request, env: Env) { // Loading libraries dynamically as a temp work around. @@ -33,6 +33,7 @@ async function fetch(request: Request, env: Env) { const server = new Server(); gateway.add(server); app = server.makeApp('/'); + app.all('*', preflight); } return app.handle(request).then(corsify); } From 128bbbdda3f81113746aaf3f5195a58b669c09ac Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:28:28 +0000 Subject: [PATCH 50/63] Revert "Add preflight" This reverts commit b43c13947bd8af2f0821c694f8eba0248a7bbd2d. --- arb-gateway/src/worker.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts index 6707291c..599e7dc0 100644 --- a/arb-gateway/src/worker.ts +++ b/arb-gateway/src/worker.ts @@ -8,7 +8,7 @@ interface Env { L2_ROLLUP: string; } -const {corsify, preflight} = createCors() +const {corsify} = createCors() let app: Router; async function fetch(request: Request, env: Env) { // Loading libraries dynamically as a temp work around. @@ -33,7 +33,6 @@ async function fetch(request: Request, env: Env) { const server = new Server(); gateway.add(server); app = server.makeApp('/'); - app.all('*', preflight); } return app.handle(request).then(corsify); } From 36f68d51fca9a1a40241b95a0502ae4a7c44a804 Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:28:40 +0000 Subject: [PATCH 51/63] Revert "Support cors" This reverts commit b49dc6fd095b3eaec78fad1b23fe26e3ad120551. --- arb-gateway/src/worker.ts | 5 +---- arb-verifier/package.json | 3 +-- bun.lockb | Bin 646424 -> 689264 bytes evm-gateway/src/utils.ts | 2 +- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts index 599e7dc0..99f78850 100644 --- a/arb-gateway/src/worker.ts +++ b/arb-gateway/src/worker.ts @@ -1,14 +1,11 @@ import { Server } from '@ensdomains/ccip-read-cf-worker'; -import { createCors } from 'itty-router'; import type { Router } from '@ensdomains/evm-gateway'; - interface Env { L1_PROVIDER_URL: string; L2_PROVIDER_URL: string; L2_ROLLUP: string; } -const {corsify} = createCors() let app: Router; async function fetch(request: Request, env: Env) { // Loading libraries dynamically as a temp work around. @@ -34,7 +31,7 @@ async function fetch(request: Request, env: Env) { gateway.add(server); app = server.makeApp('/'); } - return app.handle(request).then(corsify); + return app.handle(request); } export default { diff --git a/arb-verifier/package.json b/arb-verifier/package.json index b55b1c7e..3d10fe72 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -37,8 +37,7 @@ "typescript": "^5.2.2" }, "dependencies": { - "@arbitrum/nitro-contracts": "^1.1.0", "@ensdomains/evm-verifier": "^0.1.0", - "itty-router": "^4.0.23" + "@arbitrum/nitro-contracts": "^1.1.0" } } diff --git a/bun.lockb b/bun.lockb index fc2918b01f757ed46f524e68eaf5ec8cdb72f678..5906ebb825e0cad84d2bfd1d56748e5a9c5fc7ea 100755 GIT binary patch delta 181412 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

;;4tb==Ww?EY2X|Q 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%0Djzb?QX9c7^3ksGx`=zLX=Us2! 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 S;}RWFkH^IT`sLyF_5T6n<`=L4 delta 155874 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⪼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 Promise; + handle: (request: Request) => void; } From c33121c08c2916c437018ff2c49068a6120abd6e Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:46:11 +0000 Subject: [PATCH 52/63] Update ccip-read-cf-worker to 0.0.2 --- bun.lockb | Bin 689264 -> 689664 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 5906ebb825e0cad84d2bfd1d56748e5a9c5fc7ea..9602319e3ae608ebd6c54162f701051169040815 100755 GIT binary patch delta 20753 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 M Date: Tue, 5 Dec 2023 09:32:46 +0000 Subject: [PATCH 53/63] Update ccip-read-cf-worker to v 0.0.3 --- bun.lockb | Bin 689664 -> 698112 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 9602319e3ae608ebd6c54162f701051169040815..b0dc89fc628dd0ab2831e1f0ad88d9513ef4b34f 100755 GIT binary patch delta 154855 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

bQ{P;+dF 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

p{q)Rs*a^E~55$0&pg9t6 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 YOchEPr|F_z!@mt!W4Jj^Q$_Lr0b<_0IRF3v delta 149328 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

I>o+rvsL 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

-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 diff --git a/package.json b/package.json index 7bc01ca1..eb970e6f 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "typescript": "^5.2.2" }, "dependencies": { - "@ensdomains/ccip-read-cf-worker": "^0.0.2", + "@ensdomains/ccip-read-cf-worker": "^0.0.3", "@eth-optimism/sdk": "^3.1.4" } } From 3d98ec7d245202f974d4ba5efdf06307d852993b Mon Sep 17 00:00:00 2001 From: Makoto Inoue <2630+makoto@users.noreply.github.com> Date: Tue, 5 Dec 2023 09:43:22 +0000 Subject: [PATCH 54/63] Update README.md --- arb-gateway/README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/arb-gateway/README.md b/arb-gateway/README.md index da036dac..c4ff055f 100644 --- a/arb-gateway/README.md +++ b/arb-gateway/README.md @@ -40,14 +40,3 @@ yarn deploy 8. Deploy contracts to the node using the command `npx hardhat --network arbDevnetL1 deploy`. 9. Run the test using the command `bun run test`. -## Current deployments - -### Goerli - -#### Contracts - -#### Example contracts - -#### Example contracts(ArbitrumGoerli) - -#### Gateway From e9c065e2741b64b1153868c433a51d14071d5df0 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Wed, 6 Dec 2023 09:35:03 +0100 Subject: [PATCH 55/63] remove blank space --- arb-gateway/src/ArbProofService.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 06c34ac1..e1c7f5e6 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -4,7 +4,6 @@ import { AbiCoder, Contract, EventLog, ethers, toBeHex, type AddressLike, toNumb import rollupAbi from "./abi/rollupABI.js"; export interface ArbProvableBlock { number: number - sendRoot: string, blockHash: string, nodeIndex: string, From 91b33909ee39b240e16524a080dcfb0fc0112785 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Wed, 6 Dec 2023 09:59:11 +0100 Subject: [PATCH 56/63] move rollup address to env --- arb-gateway/README.md | 6 ++++-- arb-gateway/example.env | 0 arb-gateway/src/server.ts | 3 ++- arb-verifier/deploy_l1/00_arb_verifier.ts | 5 ++--- arb-verifier/example.env | 2 ++ arb-verifier/package.json | 3 ++- arb-verifier/test/testArbVerifier.ts | 2 +- bun.lockb | Bin 698112 -> 644408 bytes 8 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 arb-gateway/example.env create mode 100644 arb-verifier/example.env diff --git a/arb-gateway/README.md b/arb-gateway/README.md index c4ff055f..74a04c81 100644 --- a/arb-gateway/README.md +++ b/arb-gateway/README.md @@ -4,6 +4,8 @@ An instantiation of [evm-gateway](https://github.com/ensdomains/evmgateway/tree/ For a detailed readme and usage instructions, see the [monorepo readme](https://github.com/ensdomains/evmgateway/tree/main). +To get started, you need to have an RPC URL for both Ethereum Mainnet and Arbitrum. You also need to provide an L2_ROLLUP address which is the Rollup contract deployed on Mainnet or the Nitro Node. + ## How to use arb-gateway locally via cloudflare dev env (aka wrangler) ``` @@ -32,10 +34,10 @@ yarn deploy 1. Start the Nitro Test node. You can find instructions here: https://docs.arbitrum.io/node-running/how-tos/local-dev-node 2. Retrieve the Rollup address from the Node's Logs. -3. Replace the rollup address in the files `arb-verifier/test/testArbVerifier.ts` and `arb-verifier/deploy_l1/00_arb_verifier.ts`. +3. Copy the example.env file in both arb-gateway and arb-verifier, and add the Rollup address. 4. Build the Project. 5. Navigate to the Gateway directory using `cd ./arb-gateway`. -6. Start the Gateway by running `bun run start -u http://127.0.0.1:8545/ -v http://127.0.0.1:8547/ -o 0xb264babb91df9d1ca05c8c2028288dc08c4bee46 -p 8089`. +6. Start the Gateway by running `bun run start -u http://127.0.0.1:8545/ -v http://127.0.0.1:8547/ -p 8089`. 7. Open another Terminal Tab and navigate to the verifier directory using `cd ./arb-verifier/`. 8. Deploy contracts to the node using the command `npx hardhat --network arbDevnetL1 deploy`. 9. Run the test using the command `bun run test`. diff --git a/arb-gateway/example.env b/arb-gateway/example.env new file mode 100644 index 00000000..e69de29b diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts index a0f91e49..02050fcb 100644 --- a/arb-gateway/src/server.ts +++ b/arb-gateway/src/server.ts @@ -19,7 +19,7 @@ const program = new Command() .option( '-o --l2-rollup-address

', 'address for L2 outbox on the L1', - '' + process.env.ROLLUP_ADDRESS ); program.parse(); @@ -30,6 +30,7 @@ program.parse(); const l1Provider = new JsonRpcProvider(options.l1ProviderUrl); const l2Provider = new JsonRpcProvider(options.l2ProviderUrl); + const gateway = new EVMGateway( new ArbProofService(l1Provider, l2Provider, options.l2RollupAddress) ); diff --git a/arb-verifier/deploy_l1/00_arb_verifier.ts b/arb-verifier/deploy_l1/00_arb_verifier.ts index 87a94a4a..078f0985 100644 --- a/arb-verifier/deploy_l1/00_arb_verifier.ts +++ b/arb-verifier/deploy_l1/00_arb_verifier.ts @@ -1,5 +1,6 @@ import { DeployFunction } from 'hardhat-deploy/types'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import 'dotenv/config'; const GATEWAY_URLS = { arbDevnetL1: 'http://localhost:8089/{sender}/{data}.json', @@ -15,12 +16,10 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deploy } = deployments; const { deployer } = await getNamedAccounts(); let ROLLUP_ADDRESS; - console.log("NW ", network.name) if (network.name === 'arbDevnetL1') { //Rollup address according to sequencer config. Unfortunately, there is no endpoint to fetch it at runtime from the rollup. //The address can be found at nitro-testnode-sequencer-1/config/deployment.json - const rollup = '0xb264babb91df9d1ca05c8c2028288dc08c4bee46'; - ROLLUP_ADDRESS = rollup; + ROLLUP_ADDRESS = process.env.ROLLUP_ADDRESS; } else { ROLLUP_ADDRESS = ROLLUP_ADDRESSES[network.name]; } diff --git a/arb-verifier/example.env b/arb-verifier/example.env new file mode 100644 index 00000000..eb96d04e --- /dev/null +++ b/arb-verifier/example.env @@ -0,0 +1,2 @@ +DEPLOYER_PRIVATE_KEY ="" +ROLLUP_ADDRESS = "" diff --git a/arb-verifier/package.json b/arb-verifier/package.json index 3d10fe72..02175715 100644 --- a/arb-verifier/package.json +++ b/arb-verifier/package.json @@ -37,7 +37,8 @@ "typescript": "^5.2.2" }, "dependencies": { + "@arbitrum/nitro-contracts": "^1.1.0", "@ensdomains/evm-verifier": "^0.1.0", - "@arbitrum/nitro-contracts": "^1.1.0" + "dotenv": "^16.3.1" } } diff --git a/arb-verifier/test/testArbVerifier.ts b/arb-verifier/test/testArbVerifier.ts index e536f6ef..4729498b 100644 --- a/arb-verifier/test/testArbVerifier.ts +++ b/arb-verifier/test/testArbVerifier.ts @@ -43,7 +43,7 @@ describe('ArbVerifier', () => { //Rollup address according to sequencer config. Unfortunately, there is no endpoint to fetch it at runtime from the rollup. //The address can be found at nitro-testnode-sequencer-1/config/deployment.json - const rollupAddress = '0xb264babb91df9d1ca05c8c2028288dc08c4bee46'; + const rollupAddress = process.env.ROLLUP_ADDRESS; // When testing against Goerli, replace with this address // const rollupAddress = '0x45e5cAea8768F42B385A366D3551Ad1e0cbFAb17'; diff --git a/bun.lockb b/bun.lockb index b0dc89fc628dd0ab2831e1f0ad88d9513ef4b34f..15b76ef54836a976532e7e61f2201cf4f57696a4 100755 GIT binary patch delta 148834 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

B)XmiF4x=hk#&>EZ00(4zJZHSMR8kE2M0 zQgQ=7`?*}Qr=MSrgi4Oq=qU>9MIt2<<)@dJnrBD)ubmfG&aUGmyz}2oCc`v;&OpuK z?xskKl1J0sNYZ>PDP*5VDQr00T%cflEr*-fY5v%#@*~`+$90_g$>vjEpGQ(rqqw%` zv$goFQx#vzY7cTqHrva08la=u2$Q!V$$#wTE!E5Ys1fF^+LYL%u_zM8!=SlunOn90 zIastCX@)eW{Yj?vJcZ_TIfL4w&QPVj~=@oEG$3OZ~o72zV4t3js znjS|$CvN$RnZKs{{q}g&gA|P4eP49TjA}O<=Xo7?&8S!L2NJ%cNTz1YygAOaoyjv>wQa96 z5l@`SMEut{vvMXEbvlnXrDoyTd%USLi}n`rju|?Oewkx}*(dkY6Ut6mizbv9pDbuyIB~{vul$%}SxKjZIo&74L^FFfNzROfW{mk| z-~DLqH>r82vfG>aCz^w350pkC0}?s5q^W%Sr=i=C@QycXOf+G0&`}?Wlt`?9sd<+B zmD7Fh#P3`hX*SWkIENg#+s9dbT_&3Ogz)v9Xf}H8cjmB>zJIdWGM90q$6U4t+=sfp zEQL+#c?8bc+f>60ygbF7UsC&4pXk$a5icxG?NftDOpwH*2b;Ezy$EbX(j7XVwzhw= z+bRm?y|i%KqRMY+=5U&6(96@@OhsPmyDZs&-#WQ-3Xui1n`T~mUuO8W1nwLRmXd!3|JtzGnYRCdc zphC0UM!mOUt%_#whYgVMCMWw=-?5T;NGyRqm0Vr#mpN8{-iN=J^K{XQkc@br;+-qKx`P*(&4dVSpznv$gpbV5_w1|+4>ebL*Ag-;Fn6WXJ01(juT&c zQdY9+fQXKDKjtn5DRT}lY%u7gs+k�SxdP=K_eNu1fk;#rZ2@0nMlmQ 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 brJOb!A>~JqR*FhPr#$=fXX>)Q;^O}U)smQi delta 180130 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 From cf6f9b1113930aa1a6ce5bbe40ebae977ce57e45 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Wed, 6 Dec 2023 10:00:58 +0100 Subject: [PATCH 57/63] commander extra typings is a dev dependency now --- arb-gateway/package.json | 5 ++++- bun.lockb | Bin 644408 -> 697720 bytes 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/arb-gateway/package.json b/arb-gateway/package.json index bc2d5207..b61ec7fa 100644 --- a/arb-gateway/package.json +++ b/arb-gateway/package.json @@ -57,11 +57,14 @@ }, "dependencies": { "@chainlink/ccip-read-server": "^0.2.1", - "@commander-js/extra-typings": "^11.0.0", "@ensdomains/evm-gateway": "^0.1.0", "@ethereumjs/block": "^5.0.0", "@nomicfoundation/ethereumjs-block": "^5.0.2", "commander": "^11.0.0", "ethers": "^6.7.1" + }, + "devDependencies": { + "@commander-js/extra-typings": "^11.0.0" + } } diff --git a/bun.lockb b/bun.lockb index 15b76ef54836a976532e7e61f2201cf4f57696a4..ac72e4275bdb6358b9bbede9d71e445109e07aae 100755 GIT binary patch delta 180201 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≀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ɛ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 From d15a480a2a926d791fb71fcfad7b080f117af6ac Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Wed, 6 Dec 2023 10:12:30 +0100 Subject: [PATCH 58/63] remove blockhash from calldata --- arb-gateway/src/ArbProofService.ts | 5 +---- arb-verifier/contracts/ArbVerifier.sol | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index e1c7f5e6..fce656ec 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -5,7 +5,6 @@ import rollupAbi from "./abi/rollupABI.js"; export interface ArbProvableBlock { number: number sendRoot: string, - blockHash: string, nodeIndex: string, rlpEncodedBlock: string } @@ -58,7 +57,7 @@ export class ArbProofService implements IProofService { return AbiCoder.defaultAbiCoder().encode( [ - 'tuple(bytes32 version, bytes32 sendRoot, bytes32 blockHash,uint64 nodeIndex,bytes rlpEncodedBlock)', + 'tuple(bytes32 version, bytes32 sendRoot, uint64 nodeIndex,bytes rlpEncodedBlock)', 'tuple(bytes[] stateTrieWitness, bytes[][] storageProofs)', ], [ @@ -66,7 +65,6 @@ export class ArbProofService implements IProofService { version: '0x0000000000000000000000000000000000000000000000000000000000000000', sendRoot: block.sendRoot, - blockHash: block.blockHash, nodeIndex: block.nodeIndex, rlpEncodedBlock: block.rlpEncodedBlock }, @@ -129,7 +127,6 @@ export class ArbProofService implements IProofService { return { rlpEncodedBlock, sendRoot, - blockHash, nodeIndex: nodeIndex, number: toNumber(l2blockRaw.number) } diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index 1b699794..3fd759bf 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -8,7 +8,6 @@ import {RLPReader} from '@eth-optimism/contracts-bedrock/src/libraries/rlp/RLPRe struct ArbWitnessData { bytes32 version; bytes32 sendRoot; - bytes32 blockHash; uint64 nodeIndex; bytes rlpEncodedBlock; } @@ -47,22 +46,23 @@ contract ArbVerifier is IEVMVerifier { (ArbWitnessData memory arbData, StateProof memory stateProof) = abi .decode(proof, (ArbWitnessData, StateProof)); - //The confirm data is the keccak256 hash of the block hash and the send root. It is used to verify that the block hash is correct. - bytes32 confirmData = keccak256( - abi.encodePacked(arbData.blockHash, arbData.sendRoot) - ); //Get the node from the rollup contract Node memory rblock = rollup.getNode(arbData.nodeIndex); + //The confirm data is the keccak256 hash of the block hash and the send root. It is used to verify that the rblock is a subject of the layer 2 block that is being proven. + bytes32 confirmData = keccak256( + abi.encodePacked( + keccak256(arbData.rlpEncodedBlock), + arbData.sendRoot + ) + ); + //Verify that the block hash is correct require(rblock.confirmData == confirmData, 'confirmData mismatch'); //Verifiy that the block that is being proven is the same as the block that was passed in - require( - arbData.blockHash == keccak256(arbData.rlpEncodedBlock), - 'blockHash encodedBlockArray mismatch' - ); + //Now that we know that the block is valid, we can get the state root from the block. - bytes32 stateRoot = decodeBlock(arbData.rlpEncodedBlock); + bytes32 stateRoot = getStateRootFromBlock(arbData.rlpEncodedBlock); values = EVMProofHelper.getStorageValues( target, @@ -74,12 +74,12 @@ contract ArbVerifier is IEVMVerifier { } /* - * Decodes a block by extracting and converting the bytes32 value from the RLP-encoded block information. + * Decodes a block by extracting and converting the bytes32 value from the RLP-encoded block to get the stateRoot. * * @param {bytes} rlpEncodedBlock - The RLP-encoded block information. * @returns {bytes32} The stateRoot extracted from the RLP-encoded block information. */ - function decodeBlock( + function getStateRootFromBlock( bytes memory rlpEncdoedBlock ) internal pure returns (bytes32) { RLPReader.RLPItem[] memory i = RLPReader.readList(rlpEncdoedBlock); From 97707018bfa047175f51e46d8c192ef9f568a9a9 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Wed, 6 Dec 2023 10:21:58 +0100 Subject: [PATCH 59/63] fix typo in ArbVerfifer --- arb-verifier/contracts/ArbVerifier.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arb-verifier/contracts/ArbVerifier.sol b/arb-verifier/contracts/ArbVerifier.sol index 3fd759bf..a868a628 100644 --- a/arb-verifier/contracts/ArbVerifier.sol +++ b/arb-verifier/contracts/ArbVerifier.sol @@ -80,9 +80,9 @@ contract ArbVerifier is IEVMVerifier { * @returns {bytes32} The stateRoot extracted from the RLP-encoded block information. */ function getStateRootFromBlock( - bytes memory rlpEncdoedBlock + bytes memory rlpEncodedBlock ) internal pure returns (bytes32) { - RLPReader.RLPItem[] memory i = RLPReader.readList(rlpEncdoedBlock); + RLPReader.RLPItem[] memory i = RLPReader.readList(rlpEncodedBlock); //StateRoot is located at idx 3 return bytes32(RLPReader.readBytes(i[3])); } From d4d3147f88b689b35d20b02c01c2be475fc22011 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 8 Dec 2023 10:49:39 +0100 Subject: [PATCH 60/63] add in memory cache --- arb-gateway/src/ArbProofService.ts | 47 +++++++++++++++++++++--------- arb-gateway/src/index.ts | 8 ++++- arb-gateway/src/server.ts | 9 ++++-- arb-gateway/src/worker.ts | 8 ++++- 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index fce656ec..3c9a65de 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -2,6 +2,7 @@ import { EVMProofHelper, type IProofService } from '@ensdomains/evm-gateway'; import { AbiCoder, Contract, EventLog, ethers, toBeHex, type AddressLike, toNumber } from 'ethers'; import rollupAbi from "./abi/rollupABI.js"; +import type { IBlockCache } from './cache/IBlockCache.js'; export interface ArbProvableBlock { number: number sendRoot: string, @@ -19,11 +20,14 @@ export class ArbProofService implements IProofService { private readonly l2Provider: ethers.JsonRpcProvider; private readonly rollup: Contract; private readonly helper: EVMProofHelper; + private readonly cache: IBlockCache; + constructor( l1Provider: ethers.JsonRpcProvider, l2Provider: ethers.JsonRpcProvider, l2RollupAddress: string, + cache: IBlockCache ) { this.l2Provider = l2Provider; @@ -33,6 +37,7 @@ export class ArbProofService implements IProofService { l1Provider ); this.helper = new EVMProofHelper(l2Provider); + this.cache = cache } async getStorageAt(block: ArbProvableBlock, address: AddressLike, slot: bigint): Promise { @@ -88,20 +93,8 @@ export class ArbProofService implements IProofService { public async getProvableBlock(): Promise { //Retrieve the latest pending node that has been committed to the rollup. const nodeIndex = await this.rollup.latestNodeCreated() + const [l2blockRaw, sendRoot] = await this.getCachedBlock(nodeIndex) - //We fetch the node created event for the node index we just retrieved. - const nodeEventFilter = await this.rollup.filters.NodeCreated(nodeIndex); - const nodeEvents = await this.rollup.queryFilter(nodeEventFilter); - const assertion = (nodeEvents[0] as EventLog).args!.assertion - //Instead of using the AssertionHelper contract we can extract sendRoot from the assertion. Avoiding the deployment of the AssertionHelper contract and an additional RPC call. - const [blockHash, sendRoot] = assertion[1][0][0] - - - //The L1 rollup only provides us with the block hash. In order to ensure that the stateRoot we're using for the proof is indeed part of the block, we need to fetch the block. And provide it to the proof. - const l2blockRaw = await this.l2Provider.send('eth_getBlockByHash', [ - blockHash, - false - ]); const blockarray = [ l2blockRaw.parentHash, l2blockRaw.sha3Uncles, @@ -132,4 +125,32 @@ export class ArbProofService implements IProofService { } } + private async getCachedBlock(nodeIndex: bigint): Promise<[Record, string]> { + + //We first check if we have the block cached + const cachedBlock = await this.cache.getBlock(nodeIndex) + if (cachedBlock) { + return [cachedBlock.block, cachedBlock.sendRoot] + } + + //We fetch the node created event for the node index we just retrieved. + const nodeEventFilter = await this.rollup.filters.NodeCreated(nodeIndex); + const nodeEvents = await this.rollup.queryFilter(nodeEventFilter); + const assertion = (nodeEvents[0] as EventLog).args!.assertion + //Instead of using the AssertionHelper contract we can extract sendRoot from the assertion. Avoiding the deployment of the AssertionHelper contract and an additional RPC call. + const [blockHash, sendRoot] = assertion[1][0][0] + + + //The L1 rollup only provides us with the block hash. In order to ensure that the stateRoot we're using for the proof is indeed part of the block, we need to fetch the block. And provide it to the proof. + const l2blockRaw = await this.l2Provider.send('eth_getBlockByHash', [ + blockHash, + false + ]); + + //Cache the block for future use + await this.cache.setBlock(nodeIndex, l2blockRaw, sendRoot) + + return [l2blockRaw, sendRoot] + } + } diff --git a/arb-gateway/src/index.ts b/arb-gateway/src/index.ts index 9fbb5946..beaf34a6 100644 --- a/arb-gateway/src/index.ts +++ b/arb-gateway/src/index.ts @@ -1,6 +1,7 @@ import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService, type ArbProvableBlock } from './ArbProofService.js'; +import { InMemoryBlockCache } from './cache/InMemoryBlockCache.js'; export type ArbGateway = EVMGateway; @@ -12,7 +13,12 @@ export async function makeArbGateway( const l1Provider = new JsonRpcProvider(l1providerUrl); const l2Provider = new JsonRpcProvider(l2providerUrl); return new EVMGateway( - await new ArbProofService(l1Provider, l2Provider, l2RollupAddress) + new ArbProofService( + l1Provider, + l2Provider, + l2RollupAddress, + new InMemoryBlockCache() + ) ); } diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts index 02050fcb..d057f9d2 100644 --- a/arb-gateway/src/server.ts +++ b/arb-gateway/src/server.ts @@ -3,6 +3,7 @@ import { Command } from '@commander-js/extra-typings'; import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService } from './ArbProofService.js'; +import { InMemoryBlockCache } from './cache/InMemoryBlockCache.js'; const program = new Command() .option('-p, --port ', 'port to listen on', '8080') @@ -30,9 +31,13 @@ program.parse(); const l1Provider = new JsonRpcProvider(options.l1ProviderUrl); const l2Provider = new JsonRpcProvider(options.l2ProviderUrl); - const gateway = new EVMGateway( - new ArbProofService(l1Provider, l2Provider, options.l2RollupAddress) + new ArbProofService( + l1Provider, + l2Provider, + options.l2RollupAddress, + new InMemoryBlockCache() + ) ); const server = new Server(); gateway.add(server); diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts index 99f78850..74306148 100644 --- a/arb-gateway/src/worker.ts +++ b/arb-gateway/src/worker.ts @@ -1,5 +1,6 @@ import { Server } from '@ensdomains/ccip-read-cf-worker'; import type { Router } from '@ensdomains/evm-gateway'; +import { InMemoryBlockCache } from './cache/InMemoryBlockCache.js'; interface Env { L1_PROVIDER_URL: string; L2_PROVIDER_URL: string; @@ -24,7 +25,12 @@ async function fetch(request: Request, env: Env) { console.log({ L1_PROVIDER_URL, L2_PROVIDER_URL }); const gateway = new EVMGateway( - new ArbProofService(l1Provider, l2Provider, L2_ROLLUP) + new ArbProofService( + l1Provider, + l2Provider, + L2_ROLLUP, + new InMemoryBlockCache() + ) ); const server = new Server(); From 402a151f30ff91e3c18520c1cbc2de2a4e4f5d53 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 8 Dec 2023 11:41:05 +0100 Subject: [PATCH 61/63] rename cache to blockCache --- arb-gateway/README.md | 2 +- arb-gateway/src/ArbProofService.ts | 2 +- arb-gateway/src/blockCache/IBlockCache.ts | 28 ++++++++++++ .../src/blockCache/InMemoryBlockCache.ts | 43 +++++++++++++++++++ arb-gateway/src/index.ts | 2 +- arb-gateway/src/server.ts | 2 +- arb-gateway/src/worker.ts | 2 +- 7 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 arb-gateway/src/blockCache/IBlockCache.ts create mode 100644 arb-gateway/src/blockCache/InMemoryBlockCache.ts diff --git a/arb-gateway/README.md b/arb-gateway/README.md index 74a04c81..37d96604 100644 --- a/arb-gateway/README.md +++ b/arb-gateway/README.md @@ -39,6 +39,6 @@ yarn deploy 5. Navigate to the Gateway directory using `cd ./arb-gateway`. 6. Start the Gateway by running `bun run start -u http://127.0.0.1:8545/ -v http://127.0.0.1:8547/ -p 8089`. 7. Open another Terminal Tab and navigate to the verifier directory using `cd ./arb-verifier/`. -8. Deploy contracts to the node using the command `npx hardhat --network arbDevnetL1 deploy`. +8. Deploy contracts to the node using the command ` npx hardhat --network arbDevnetL2 deploy && npx hardhat --network arbDevnetL1 deploy `. 9. Run the test using the command `bun run test`. diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index 3c9a65de..aaff5477 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -2,7 +2,7 @@ import { EVMProofHelper, type IProofService } from '@ensdomains/evm-gateway'; import { AbiCoder, Contract, EventLog, ethers, toBeHex, type AddressLike, toNumber } from 'ethers'; import rollupAbi from "./abi/rollupABI.js"; -import type { IBlockCache } from './cache/IBlockCache.js'; +import type { IBlockCache } from './blockCache/IBlockCache.js'; export interface ArbProvableBlock { number: number sendRoot: string, diff --git a/arb-gateway/src/blockCache/IBlockCache.ts b/arb-gateway/src/blockCache/IBlockCache.ts new file mode 100644 index 00000000..66fc6732 --- /dev/null +++ b/arb-gateway/src/blockCache/IBlockCache.ts @@ -0,0 +1,28 @@ +/** + * Interface for a block cache. + */ +export interface IBlockCache { + /** + * Retrieves a block from the cache. + * @param nodeIndex The index of the node. + * @returns A promise that resolves to the retrieved block, or null if the block is not found. + */ + getBlock(nodeIndex: bigint): Promise<{ + nodeIndex: bigint; + block: Record; + sendRoot: string; + } | null>; + + /** + * Sets a block in the cache. + * @param nodeIndex The index of the node. + * @param block The block data to be stored. + * @param sendRoot The send root associated with the block. + * @returns A promise that resolves when the block is successfully set in the cache. + */ + setBlock( + nodeIndex: bigint, + block: Record, + sendRoot: string + ): Promise; +} diff --git a/arb-gateway/src/blockCache/InMemoryBlockCache.ts b/arb-gateway/src/blockCache/InMemoryBlockCache.ts new file mode 100644 index 00000000..f429b63f --- /dev/null +++ b/arb-gateway/src/blockCache/InMemoryBlockCache.ts @@ -0,0 +1,43 @@ +import type { IBlockCache } from './IBlockCache.js'; + +//Dummy in memory cache for storing block data. Replace with something more sophisticated like redis in the future +export class InMemoryBlockCache implements IBlockCache { + private block: Record; + private nodeIndex: bigint; + private sendRoot: string; + + constructor() { + this.block = {}; + this.nodeIndex = 0n; + this.sendRoot = ''; + } + + public async getBlock(nodeIndex: bigint): Promise<{ + nodeIndex: bigint; + block: Record; + sendRoot: string; + } | null> { + //Cache miss + if (nodeIndex !== this.nodeIndex) { + console.log('Cache miss for nodeIndex: ', nodeIndex); + return null; + } + //Cache hit + console.log('Cache hit for nodeIndex: ', nodeIndex); + return { + nodeIndex: this.nodeIndex, + block: this.block, + sendRoot: this.sendRoot, + }; + } + + public async setBlock( + nodeIndex: bigint, + block: Record, + sendRoot: string + ) { + this.nodeIndex = nodeIndex; + this.block = block; + this.sendRoot = sendRoot; + } +} diff --git a/arb-gateway/src/index.ts b/arb-gateway/src/index.ts index beaf34a6..87ee7ef0 100644 --- a/arb-gateway/src/index.ts +++ b/arb-gateway/src/index.ts @@ -1,7 +1,7 @@ import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService, type ArbProvableBlock } from './ArbProofService.js'; -import { InMemoryBlockCache } from './cache/InMemoryBlockCache.js'; +import { InMemoryBlockCache } from './blockCache/InMemoryBlockCache.js'; export type ArbGateway = EVMGateway; diff --git a/arb-gateway/src/server.ts b/arb-gateway/src/server.ts index d057f9d2..6f6ae898 100644 --- a/arb-gateway/src/server.ts +++ b/arb-gateway/src/server.ts @@ -3,7 +3,7 @@ import { Command } from '@commander-js/extra-typings'; import { EVMGateway } from '@ensdomains/evm-gateway'; import { JsonRpcProvider } from 'ethers'; import { ArbProofService } from './ArbProofService.js'; -import { InMemoryBlockCache } from './cache/InMemoryBlockCache.js'; +import { InMemoryBlockCache } from './blockCache/InMemoryBlockCache.js'; const program = new Command() .option('-p, --port ', 'port to listen on', '8080') diff --git a/arb-gateway/src/worker.ts b/arb-gateway/src/worker.ts index 74306148..40b9f348 100644 --- a/arb-gateway/src/worker.ts +++ b/arb-gateway/src/worker.ts @@ -1,6 +1,6 @@ import { Server } from '@ensdomains/ccip-read-cf-worker'; import type { Router } from '@ensdomains/evm-gateway'; -import { InMemoryBlockCache } from './cache/InMemoryBlockCache.js'; +import { InMemoryBlockCache } from './blockCache/InMemoryBlockCache.js'; interface Env { L1_PROVIDER_URL: string; L2_PROVIDER_URL: string; From aac64fd6050988df60eba74608db963acdf3fbf6 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 8 Dec 2023 12:11:39 +0100 Subject: [PATCH 62/63] change method name to getL2BlockForNode --- arb-gateway/src/ArbProofService.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arb-gateway/src/ArbProofService.ts b/arb-gateway/src/ArbProofService.ts index aaff5477..fc4cac9b 100644 --- a/arb-gateway/src/ArbProofService.ts +++ b/arb-gateway/src/ArbProofService.ts @@ -93,7 +93,7 @@ export class ArbProofService implements IProofService { public async getProvableBlock(): Promise { //Retrieve the latest pending node that has been committed to the rollup. const nodeIndex = await this.rollup.latestNodeCreated() - const [l2blockRaw, sendRoot] = await this.getCachedBlock(nodeIndex) + const [l2blockRaw, sendRoot] = await this.getL2BlockForNode(nodeIndex) const blockarray = [ l2blockRaw.parentHash, @@ -124,8 +124,12 @@ export class ArbProofService implements IProofService { number: toNumber(l2blockRaw.number) } } - - private async getCachedBlock(nodeIndex: bigint): Promise<[Record, string]> { + /** + * Fetches the corrospending L2 block for a given node index and returns it along with the send root. + * @param {bigint} nodeIndex - The index of the node for which to fetch the block. + * @returns {Promise<[Record, string]>} A promise that resolves to a tuple containing the fetched block and the send root. + */ + private async getL2BlockForNode(nodeIndex: bigint): Promise<[Record, string]> { //We first check if we have the block cached const cachedBlock = await this.cache.getBlock(nodeIndex) From 74785aed253d071961d062e767ccb05241b8187d Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 8 Dec 2023 12:17:52 +0100 Subject: [PATCH 63/63] adjust console.log statements from InMemoryBlockCache --- arb-gateway/src/blockCache/InMemoryBlockCache.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arb-gateway/src/blockCache/InMemoryBlockCache.ts b/arb-gateway/src/blockCache/InMemoryBlockCache.ts index f429b63f..f95b966d 100644 --- a/arb-gateway/src/blockCache/InMemoryBlockCache.ts +++ b/arb-gateway/src/blockCache/InMemoryBlockCache.ts @@ -23,7 +23,6 @@ export class InMemoryBlockCache implements IBlockCache { return null; } //Cache hit - console.log('Cache hit for nodeIndex: ', nodeIndex); return { nodeIndex: this.nodeIndex, block: this.block, @@ -36,6 +35,8 @@ export class InMemoryBlockCache implements IBlockCache { block: Record, sendRoot: string ) { + console.log('Setting new block for nodeIndex: ', nodeIndex); + this.nodeIndex = nodeIndex; this.block = block; this.sendRoot = sendRoot;