From f824225100bda196dc94f9d9ec20231dfd91f1d7 Mon Sep 17 00:00:00 2001 From: Thomas Clowes Date: Fri, 18 Oct 2024 17:53:16 +0100 Subject: [PATCH] - Update to work with latest version of codebase --- README.md | 17 ++++--- another.ts | 2 +- arbitrum-one.ts | 45 +++++++++-------- base.ts | 45 +++++++++-------- bun.lockb | Bin 7293 -> 7669 bytes cache/solidity-files-cache.json | 2 +- contracts/ExampleResolver.sol | 9 ++-- contracts/L1SimpleResolver.sol | 40 +++++++++++++++ contracts/OPResolver.sol | 16 +++--- example-base.ts | 49 +++++++----------- lib/ens-contracts | 2 +- lib/forge-std | 2 +- lib/unruggable-gateways | 2 +- optimism.ts | 85 ++++++++++++++++---------------- package.json | 4 +- 15 files changed, 180 insertions(+), 140 deletions(-) create mode 100644 contracts/L1SimpleResolver.sol diff --git a/README.md b/README.md index 82e47ef..127391a 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,15 @@ ![Resolution Demo](https://github.com/unruggable-labs/unruggable-gateways-ens-resolution-demos/actions/workflows/resolution-demo.yml/badge.svg) -This demo demonstrates a full end to end implementation of the [Unruggable Gateways](https://github.com/unruggable-labs/unruggable-gateways) codebase for resolving an ENS name using data stored on Optimism mainnnet. +This demo demonstrates a full end to end implementations of the [Unruggable Gateways](https://github.com/unruggable-labs/unruggable-gateways) codebase for resolving an ENS name using data stored on [Arbitrum](https://arbiscan.io/address/0xCC344B12fcc8512cc5639CeD6556064a8907c8a1#code), [Base](https://basescan.org/address/0x0C49361E151BC79899A9DD31B8B0CCdE4F6fd2f6#code), and [Optimism](https://optimistic.etherscan.io/address/0xf9d79d8c09d24e0C47E32778c830C545e78512CF#code). -It utilises [Foundry](https://github.com/foundry-rs) (through [blocksmith.js](https://github.com/adraffy/blocksmith.js)) to fork **Ethereum mainnet** and deploy an instance of `OPFaultVerifier`. This verifier is used to verify proofs returned by Unruggable's Optimism gateway running at `https://op-gateway.unruggable.com`. +It utilises [Foundry](https://github.com/foundry-rs) (through [blocksmith.js](https://github.com/adraffy/blocksmith.js)) to fork **Ethereum mainnet** and deploy an instance of the respective chain specific verifier. This verifier is used to verify proofs returned by Unruggable's gateways running at: -The gateway is fetching data proofs from the **real** Optimism Mainnet. This repo includes: - -- `ExampleResolver.sol` which resolves against an address stored in our standard `SlotDataContract` (deployed [here](https://optimistic.etherscan.io/address/0xf9d79d8c09d24e0C47E32778c830C545e78512CF#code)). - -- `OPResolver.sol` which resolves against a [storage contract](https://optimistic.etherscan.io/address/0xc695404735E0F1587A5398a06cAB34D7d7b009Da#code) that implements a PoC of the complex resolution logic outlined in the ENS v2 specification. +- [https://arbitrum-one.gateway.unruggable.com](https://arbitrum-one.gateway.unruggable.com) +- [https://base.gateway.unruggable.com](https://base.gateway.unruggable.com) +- [https://optimism.gateway.unruggable.com](https://optimism.gateway.unruggable.com) +The gateway is fetching data proofs from the **real** chains. To install dependencies: @@ -31,5 +30,7 @@ Copy `.env.example` to `.env` and input API keys for your node provider (Alchemy To run: ```bash -bun run index.ts +bun run arbitrum-one.ts +bun run base.ts +bun run optimism.ts ``` \ No newline at end of file diff --git a/another.ts b/another.ts index 786ddef..0ad1d2c 100644 --- a/another.ts +++ b/another.ts @@ -70,7 +70,7 @@ const NODE = ethers.namehash('opdemo.eth'); const SLOT = solidityFollowSlot(0, NODE) + 1n; //This is the address of the SlotDataContract deployed on the L2 (that we fork) -const EXAMPLE_CONTRACT_ADDRESS = '0x9720E17D90202c20449D07AFEA22Bd85de674bA9'; +const EXAMPLE_CONTRACT_ADDRESS = '0xf9d79d8c09d24e0C47E32778c830C545e78512CF'; // Test with the ExampleResolver that reads a value from our live deployed SlotDataContract // Uncomment this block, and comment the block below to test with the ExampleResolver diff --git a/arbitrum-one.ts b/arbitrum-one.ts index f3e3052..b177c46 100644 --- a/arbitrum-one.ts +++ b/arbitrum-one.ts @@ -1,7 +1,8 @@ import { NitroRollup } from '@unruggable/gateways'; import { createProviderPair, providerURL } from './providers'; -import { runExample } from './example-base'; +import { runExample, type VerifierArgsType } from './example-base'; import { type ConfigItem } from './utils'; +import { Wallet } from 'ethers'; const config = NitroRollup.arb1MainnetConfig; @@ -14,26 +15,30 @@ const rollup = await new NitroRollup( createProviderPair(config), config ); +const hooksPath = `@unruggable/contracts/eth/EthVerifierHooks.sol`; const verifierPath = `@unruggable/contracts/nitro/NitroVerifier.sol`; -const verifierArgs: any[] = []; const GATEWAY_URL = 'https://arbitrum-one.gateway.unruggable.com'; + +const verifierArgs: VerifierArgsType = async (smith, deployerWallet) => { + + const ethHooksArgs: any[] = []; + + const hooks = await smith.deploy({ + import: hooksPath, + args: ethHooksArgs, + }); + + const verifierArgs: any[] = [ + [GATEWAY_URL], + rollup.defaultWindow, + hooks.target, + rollup.L2Rollup.target + ]; + + return verifierArgs; +} + //This is the address of the SlotDataContract deployed on the L2 (that we fork) const EXAMPLE_CONTRACT_ADDRESS = '0xCC344B12fcc8512cc5639CeD6556064a8907c8a1'; //Arb -const configurationToSet: ConfigItem[] = [ - { - getter: 'getWindow', - setter: 'setWindow', - value: rollup.defaultWindow, - }, - { - getter: 'gatewayURLs', - setter: 'setGatewayURLs', - value: [GATEWAY_URL], - }, - { - setter: 'setRollup', - value: rollup.L2Rollup.target, - }, -]; - -runExample(provider, verifierPath, verifierArgs, configurationToSet, EXAMPLE_CONTRACT_ADDRESS); \ No newline at end of file + +runExample(provider, verifierPath, verifierArgs, EXAMPLE_CONTRACT_ADDRESS); \ No newline at end of file diff --git a/base.ts b/base.ts index 2835115..ec55787 100644 --- a/base.ts +++ b/base.ts @@ -1,7 +1,7 @@ import { OPRollup, Gateway } from '@unruggable/gateways'; import { createProviderPair, providerURL } from './providers'; import { runExample } from './example-base'; -import type { ConfigItem } from './utils'; +import type { VerifierArgsType } from './utils'; const config = OPRollup.baseMainnetConfig; @@ -15,26 +15,31 @@ const rollup = await new OPRollup(createProviderPair(config), const gateway = new Gateway(rollup); const commit = await gateway.getLatestCommit(); +const hooksPath = `@unruggable/contracts/eth/EthVerifierHooks.sol`; const verifierPath = `@unruggable/contracts/op/OPVerifier.sol`; -const verifierArgs: any[] = []; const GATEWAY_URL = 'https://base.gateway.unruggable.com'; const EXAMPLE_CONTRACT_ADDRESS = '0x0C49361E151BC79899A9DD31B8B0CCdE4F6fd2f6'; //Base -const configurationToSet: ConfigItem[] = [ - { - getter: 'getWindow', - setter: 'setWindow', - value: rollup.defaultWindow, - }, - { - getter: 'gatewayURLs', - setter: 'setGatewayURLs', - value: [GATEWAY_URL], - }, - { - setter: 'setOracle', - value: rollup.L2OutputOracle.target, - }, -]; - -runExample(provider, verifierPath, verifierArgs, configurationToSet, EXAMPLE_CONTRACT_ADDRESS); \ No newline at end of file + +const verifierArgs: VerifierArgsType = async (smith, deployerWallet) => { + + const ethHooksLibs = {}; + const ethHooksArgs: any[] = []; + + const hooks = await smith.deploy({ + import: hooksPath, + args: ethHooksArgs, + }); + + const verifierArgs: any[] = [ + [GATEWAY_URL], + rollup.defaultWindow, + hooks.target, + rollup.L2OutputOracle.target, + 1 + ]; + + return verifierArgs; +} + +runExample(provider, verifierPath, verifierArgs, EXAMPLE_CONTRACT_ADDRESS); \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 1e72dbec75bb8edfd5a764851a89c9d4babe74b5..e8dea1f48aad5767663fdbee2a88d8d87cb8682e 100755 GIT binary patch delta 2272 zcmbtVdsI~C5x@8DF3Uc6Ec;*|QU%4uguN`wvf(AKh#L;#2?oVSqCild>!Vx7Z=a~K`B9w6 z9T`&@tK3lqYD~dZCWl@_u2RGc2g%%$iO8@9Q z+!N-<_bxK*ug)BN(pfdbYj@M&-#**;+jqKJEh)9tZpPn-mp-z5zGCo@{;Z^|WXF-| zOQsC&wmh^B@27SKI0n)zR@+|K@2-Y+aZ0Ly%YNdAZ*OUvb#3Fb*l5Q8?@@`VBR7-Z zKX-0kfjJ=ipX)ZC?|db*w10Z~n!vSv)w>pliIM|P?3FG%ko)-h8UM2H<^-O-1gRo5 zDA6nVYq^BKtL=y8pT=KmuNfcp(JwlA>~zl8=RId%nA=*AC&@o;t?M@J47%KVbs-)0 z@a9Z`aq;!(m)0~!whWY>x_V{f$bzl#RHUBQdT(c3{rJq{EBx1w=Vg7hsi}2K+G1^G z`-Ae7B{3d<_75wmo!StiNI08ePg(iC=ay=1+YN2^hnlvW?`O$h8 z?bsF(cdXFM`pIRsH;pa7_DXQT&*H>A)6>(UG-(HR9*OzCXR6aRz^688Yt_{_U*Ti{3H5ma8=Tt`}rgHkG}5l75^f? z{h`d%G>L6Bklr0Be!$3{{7eYs`kQy)f_%@EB0#LK7qhsWRS z`!q4Ln5qiyue0}jH}vph7`x%^r-?fD?m*b-7U7pQ#bZaejXt}O-`f*0UTf)qR;e1w zr75%wI;0u2PqV+r5DiVVqS@Umkq4Q=P;nJ$C@7cYknR%?4j*6Eso`!jhQ{4V(oD%S zxxoa-oJR2qu*d`aQNyXp^~GjFIeRdL{e!#KDiFzaDsr)jBhn`Fi3!SII0vM6bLV&> zk}pKgz-G@mBTjJua9gpFbIp;oLUKRI0pm__$7jNm0LUV>BprqvN8%>vPMQqLdn6VV zam+H4<&BMSMeYaxk|+7o%Z;p&H5(~Ck{F`>=f8Wkp|1M+V}>xHY#7W}Xc&_b4l6Z& z<_Q;QbuiE#{Nh$ywl}>zoDFBO$IBpEsnNM+lxt2fbSP_LjkwPY{z{G7HIrQPg`rI* z_9ZqPx)h3O^RNhH;JF5(Ybc=++88OQQA}aB(vYuIhm%W$wX=7HE7F(rjS3ZX?CfyN z#6-EqrfYODbcKZtjYNhE0cw?MI*dyvjB<_2vb(E3-{CV7K*GhGG2Vr6U#X!JK%&y< z{)fsEXdqw-tu0-;iT7V=6{Nwyh`&YjZ-UgHcVAoU2QS zA%sH%R}=WgcPebxL_?}Z?&d6Irq1fdWgNk=U#LrtSlM*$T@D}qNsWm-|Oig<$BmWm)AwH`o~?nc5mWBX@+GjHFw`;LA4zI|_Bj(e-h zmpScXJeXgv+Wc))e%%iL<^_ViEhA%{t+GTWMjLV)QcCT5#e^R0f>>KBj9rlJs0t(r zf=>{6UWhXhcO2qU#Ldw>L6hm4l1UKS%+%yWWV{T0V-(yMiq0Dmgc;H?=tj^8!UE0B zfJKf`=@@stnTxaCl#OR3cTD@&9ym3pcU4Hqo&vWSn;ee$``qm5xxAx2s35eYy<)eZ z{*5VZ(yH3ce$9|gZZyVQ(BUvS2HdGQ2&OqgHDv)gG(W1Ggnpv{>K+Ncv;dYhMG(Gd zOE%KCM8wqFJR|AUR0@2J0+>3apg;HwfxzOmg-<6c;n*N~3+T^z}?nxQ@=xr0zS{SeL=%MLuj52%9swev(lAfV{ zIo)NwXUDRquO71w&YS7E?wzVFtXi@&<7oS?tZ>>7qtfTtR+VvMJ4S7be4bL7Ues7q zk?PB_QP>4${~S8&!ghE|7s4v@aMBnW7_m@m#)Q%4;gP2A6QCby-o2yhbYW|cSzUJ; zT>tFGkvE=^KJnx0ern!$nU+AEGn-e@UsAEu~Uob5?3f*PZftbWpiu zk@6ADW(eWDS$HJ6*u$VLtNOHDeea0tTFvyRAo;F(TY(34?Ui^e)ufvnF+<&4bRxkotNW(fRM>}zYqq|Q2Bx_Xc*rX%sbSD^&VJXidjFXwp@~mw zOyjkj5y8dP6Pm8h*cS5H18JbKVszu*9S$9_d(0a~)-DRoHH*68Z5yy)@|v<~t{jW@ z-|oOEb7AhJ(z$Ew9}X_p(2~Z5e({U+X|UtwS>@9Px;^UC52@|5iz0W|_V%?$JUZ}K z)5MC-^6gEnqSW51hvioaw{{*?nxLCU67MYEA&%;Q7&O0)JRYSx?KJiqhpu#&yECr2 zxliHf+NV5krG0g4>G&+CLs@Atxf!Cz+RA}qP}X!?&PvuQ&aqG4@{by^KO?Oh7F!4- zN@~xpJg}i!dO9x3>O~*4SN-n4_keTU;LVG=ZsGBw%9fVfmgP3cbB=#RFK9KQF2eX!xvf0^_nP>ypqv*V_nv1 z60OL1FPWE20daf@sQKJnPnkPXGW2#sC#FaiN(%1ahK_FN)f6dL$>d%#xrgC>Fm!Vy zkty`v3@?bG-(!h~Oo8?>yfKCsfr1vEnexB&pP=L7@E2wt9PGEOOy-jDC}0^n*Bc7* z`9iqM7m{*(R;ipYJVGlUCtdoQ-D8ipMIkBCe*hPONb>PfRx6M%g-jJegSi6XsE-w# z^$8@1{rCbPbn(%>;zG5+9XbSo4B=4A?G%HvaF-FzezUMZsgP-tR^T|@T@y9h1eupw zyF5da>6Vs0U!zV-PfXRg&0G3;mL_v(vM?cYp(Ya&M0_X}OCV9igD=J2Fkqbp7bI-D zA>j}$wgq47aX`1WB0V8WYzJpWA#hSW5`LA~6-q`^9v(<%1Wc50NfpeN1X2nmlu9N- Lp>+`0O56Sc95F-t diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index a85c3b2..c305678 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -1 +1 @@ -{"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"contracts","tests":"test","scripts":"script","libraries":["lib"]},"files":{"contracts/ExampleResolver.sol":{"lastModificationDate":1725892607579,"contentHash":"bb1b6768fbefeb5cb4f77b7adc56f9ea","sourceName":"contracts/ExampleResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol","lib/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol","lib/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol","lib/ens-contracts/contracts/utils/BytesUtils.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/unruggable-gateways/contracts/GatewayFetchTarget.sol","lib/unruggable-gateways/contracts/GatewayFetcher.sol","lib/unruggable-gateways/contracts/GatewayProtocol.sol","lib/unruggable-gateways/contracts/IGatewayProofVerifier.sol","lib/unruggable-gateways/contracts/IGatewayProver.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Strings.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"],"versionRequirement":"^0.8.25","artifacts":{"ExampleResolver":{"0.8.25":{"path":"ExampleResolver.sol/ExampleResolver.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"contracts/OPResolver.sol":{"lastModificationDate":1725892622120,"contentHash":"66cf39fc027ec4f674d7e9b42a2360e0","sourceName":"contracts/OPResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol","lib/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol","lib/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol","lib/ens-contracts/contracts/utils/BytesUtils.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/unruggable-gateways/contracts/GatewayFetchTarget.sol","lib/unruggable-gateways/contracts/GatewayFetcher.sol","lib/unruggable-gateways/contracts/GatewayProtocol.sol","lib/unruggable-gateways/contracts/IGatewayProofVerifier.sol","lib/unruggable-gateways/contracts/IGatewayProver.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Strings.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"],"versionRequirement":"^0.8.25","artifacts":{"OPResolver":{"0.8.25":{"path":"OPResolver.sol/OPResolver.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"contracts/TransparentUpgradeableProxy.sol":{"lastModificationDate":1725892085761,"contentHash":"e24cf11e2ec42690f0a4c94efa79aedd","sourceName":"contracts/TransparentUpgradeableProxy.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/access/Ownable.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Address.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Context.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol"],"versionRequirement":null,"artifacts":{},"seenByCompiler":true},"lib/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol":{"lastModificationDate":1725892534391,"contentHash":"3f1fad68ada48982f35ef7af2e8a245b","sourceName":"lib/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.8.4","artifacts":{"IAddrResolver":{"0.8.25":{"path":"IAddrResolver.sol/IAddrResolver.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol":{"lastModificationDate":1725892534391,"contentHash":"6f8242d10df510af914b58122a33d176","sourceName":"lib/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.8.4","artifacts":{"IAddressResolver":{"0.8.25":{"path":"IAddressResolver.sol/IAddressResolver.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol":{"lastModificationDate":1725892534391,"contentHash":"5fb946efa195615f0fbe2746a4e76ff6","sourceName":"lib/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.4","artifacts":{"IExtendedResolver":{"0.8.25":{"path":"IExtendedResolver.sol/IExtendedResolver.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/ens-contracts/contracts/utils/BytesUtils.sol":{"lastModificationDate":1725892534393,"contentHash":"e82dc16aa16755a978b1ffb60eeb23f3","sourceName":"lib/ens-contracts/contracts/utils/BytesUtils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.4","artifacts":{"BytesUtils":{"0.8.25":{"path":"BytesUtils.sol/BytesUtils.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/forge-std/src/console.sol":{"lastModificationDate":1725629423935,"contentHash":"19bc22856c14b56e4e55ab19c7a27c87","sourceName":"lib/forge-std/src/console.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{"console":{"0.8.25":{"path":"console.sol/console.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/forge-std/src/console2.sol":{"lastModificationDate":1725629423935,"contentHash":"f65ad21034b111e70fb5342d5771efcd","sourceName":"lib/forge-std/src/console2.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/console.sol"],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{},"seenByCompiler":true},"lib/unruggable-gateways/contracts/GatewayFetchTarget.sol":{"lastModificationDate":1725890040080,"contentHash":"ebeda98bc526ec405624a538f3628e2a","sourceName":"lib/unruggable-gateways/contracts/GatewayFetchTarget.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/contracts/GatewayProtocol.sol","lib/unruggable-gateways/contracts/IGatewayProofVerifier.sol","lib/unruggable-gateways/contracts/IGatewayProver.sol"],"versionRequirement":"^0.8.0","artifacts":{"GatewayFetchTarget":{"0.8.25":{"path":"GatewayFetchTarget.sol/GatewayFetchTarget.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/contracts/GatewayFetcher.sol":{"lastModificationDate":1725890040080,"contentHash":"a32f98b2690b5595dce2c04334f09089","sourceName":"lib/unruggable-gateways/contracts/GatewayFetcher.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/contracts/GatewayProtocol.sol"],"versionRequirement":"^0.8.0","artifacts":{"GatewayFetcher":{"0.8.25":{"path":"GatewayFetcher.sol/GatewayFetcher.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/contracts/GatewayProtocol.sol":{"lastModificationDate":1725890040080,"contentHash":"c6d16d9e0c126ada1a8289d982894b9e","sourceName":"lib/unruggable-gateways/contracts/GatewayProtocol.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.0","artifacts":{},"seenByCompiler":true},"lib/unruggable-gateways/contracts/IGatewayProofVerifier.sol":{"lastModificationDate":1725890040080,"contentHash":"791b1961e5abefc5919f477bd66e18a9","sourceName":"lib/unruggable-gateways/contracts/IGatewayProofVerifier.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/contracts/GatewayProtocol.sol"],"versionRequirement":"^0.8.0","artifacts":{"IGatewayProofVerifier":{"0.8.25":{"path":"IGatewayProofVerifier.sol/IGatewayProofVerifier.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/contracts/IGatewayProver.sol":{"lastModificationDate":1725890040080,"contentHash":"2f5e97376ce122b0cea572540d5fe9ba","sourceName":"lib/unruggable-gateways/contracts/IGatewayProver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/contracts/GatewayProtocol.sol"],"versionRequirement":"^0.8.0","artifacts":{"IGatewayProver":{"0.8.25":{"path":"IGatewayProver.sol/IGatewayProver.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"lastModificationDate":1725890063249,"contentHash":"d3c790edc9ccf808a17c5a6cd13614fd","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/access/Ownable.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Context.sol"],"versionRequirement":"^0.8.20","artifacts":{"Ownable":{"0.8.25":{"path":"Ownable.sol/Ownable.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"lastModificationDate":1725890063253,"contentHash":"4e17c826a54a8ee1a185449d4695d07d","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"IERC1967":{"0.8.25":{"path":"IERC1967.sol/IERC1967.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"lastModificationDate":1725890063261,"contentHash":"48a23123892520179a95b4461c1d752a","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Address.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol"],"versionRequirement":"^0.8.20","artifacts":{"ERC1967Proxy":{"0.8.25":{"path":"ERC1967Proxy.sol/ERC1967Proxy.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"lastModificationDate":1725890063261,"contentHash":"838bc3ef3bcf0376af7d9b2041989b6a","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Address.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol"],"versionRequirement":"^0.8.20","artifacts":{"ERC1967Utils":{"0.8.25":{"path":"ERC1967Utils.sol/ERC1967Utils.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"lastModificationDate":1725890063261,"contentHash":"35308c2fa7be99a959494c37e8257c16","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"Proxy":{"0.8.25":{"path":"Proxy.sol/Proxy.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"lastModificationDate":1725890063261,"contentHash":"0a5c323fd908535580597848b8e550fb","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"IBeacon":{"0.8.25":{"path":"IBeacon.sol/IBeacon.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":{"lastModificationDate":1725890063261,"contentHash":"bbd45bfcd6202c35718661cc5d051226","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/access/Ownable.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Address.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Context.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol"],"versionRequirement":"^0.8.20","artifacts":{"ProxyAdmin":{"0.8.25":{"path":"ProxyAdmin.sol/ProxyAdmin.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"lastModificationDate":1725890063261,"contentHash":"1837abdda8dba1ca489539d966a22bdc","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/access/Ownable.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Address.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Context.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol"],"versionRequirement":"^0.8.20","artifacts":{"ITransparentUpgradeableProxy":{"0.8.25":{"path":"TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}},"TransparentUpgradeableProxy":{"0.8.25":{"path":"TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"lastModificationDate":1725890063265,"contentHash":"79c699f80eb8a9b168cb34e37816f894","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Address.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"Address":{"0.8.25":{"path":"Address.sol/Address.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"lastModificationDate":1725890063265,"contentHash":"67bfbc07588eb8683b3fd8f6f909563e","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Context.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"Context":{"0.8.25":{"path":"Context.sol/Context.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"lastModificationDate":1725890063266,"contentHash":"08cbccfefa284405c12b4bfa8c8c9c2b","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"StorageSlot":{"0.8.25":{"path":"StorageSlot.sol/StorageSlot.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"lastModificationDate":1725890063266,"contentHash":"ba57ff4ddf1d9cae9d2009792795b7f6","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Strings.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"],"versionRequirement":"^0.8.20","artifacts":{"Strings":{"0.8.25":{"path":"Strings.sol/Strings.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"lastModificationDate":1725890063267,"contentHash":"de0163561b417b800d01749cbbe2147e","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"IERC165":{"0.8.25":{"path":"IERC165.sol/IERC165.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"lastModificationDate":1725890063267,"contentHash":"718fa8ba0ff269c92e364c1429d9de57","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"Math":{"0.8.25":{"path":"Math.sol/Math.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"lastModificationDate":1725890063268,"contentHash":"b6c6bdc7aaca4fe5b680760a72e09d3e","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"SignedMath":{"0.8.25":{"path":"SignedMath.sol/SignedMath.json","build_id":"8a6fa4b4898f4921b36c395cf7fd55ab"}}},"seenByCompiler":true}},"builds":["0bb510bede6cb5b976ab721121b10e33","21fdf11c1aed50309ae9f2b725c21543","3162adf421eb34817380c7e0c9b0e168","32305897825b0ec090f0c25674a7f2db","38e84ae90f6dd8c051930c39d9678ca0","3cc3a7fac9295336612333433dc091c9","44df98da981d068fde93dcac0df9710a","4517a1eedd480efa698dc38b40fc401a","48b3536295e363d4c458eb7704f8b776","520ec47d21bbba08af97c33e2880f58e","55fe931875994b05d8aa824a9daa0cba","5a68ad2bd144a153d171908945b343eb","609b26f4788f7dc6161c0a865b75e057","66fdcdcfdd8aeb6537458691e0961792","7839eb7c43d7bb1e4a31fe8e17fbe5e7","8a6fa4b4898f4921b36c395cf7fd55ab","8bbc119a13e89360646cdfc35af542f4","91460961587a4339c3ae27fdc4768751","b559e0c32ebb29a8126e4219845a7c70","c80a89d74a6fc2f21afa8eef3046ce4d","df4760f5563f15cb0381dd5a78bf2c0d","eca78205710325889bd2d04db1480bc1","ef97cf0e0089c670a229968cdf59b4fc","f3c5be57766641ca0aed584da8bd7ee5","f5ef2cb6f540bde2d70d0022f699363b"]} \ No newline at end of file +{"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"contracts","tests":"test","scripts":"script","libraries":["lib"]},"files":{"contracts/ExampleResolver.sol":{"lastModificationDate":1729268983802,"contentHash":"bbfb6c889295f82845a5d396fc2dcbe8","sourceName":"contracts/ExampleResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol","lib/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol","lib/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol","lib/ens-contracts/contracts/utils/BytesUtils.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/unruggable-gateways/contracts/GatewayFetchTarget.sol","lib/unruggable-gateways/contracts/GatewayFetcher.sol","lib/unruggable-gateways/contracts/GatewayRequest.sol","lib/unruggable-gateways/contracts/IGatewayProtocol.sol","lib/unruggable-gateways/contracts/IGatewayVerifier.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Strings.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"],"versionRequirement":"^0.8.25","artifacts":{"ExampleResolver":{"0.8.25":{"path":"ExampleResolver.sol/ExampleResolver.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"contracts/L1SimpleResolver.sol":{"lastModificationDate":1729268994619,"contentHash":"d5c405db109cb8116e5f845d93b5ff0c","sourceName":"contracts/L1SimpleResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/unruggable-gateways/contracts/GatewayFetchTarget.sol","lib/unruggable-gateways/contracts/GatewayFetcher.sol","lib/unruggable-gateways/contracts/GatewayRequest.sol","lib/unruggable-gateways/contracts/IGatewayProtocol.sol","lib/unruggable-gateways/contracts/IGatewayVerifier.sol"],"versionRequirement":"^0.8.25","artifacts":{"L1SimpleResolver":{"0.8.25":{"path":"L1SimpleResolver.sol/L1SimpleResolver.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"contracts/OPResolver.sol":{"lastModificationDate":1729269112853,"contentHash":"c1d7b24ae290138a6110b1f323b931fe","sourceName":"contracts/OPResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol","lib/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol","lib/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol","lib/ens-contracts/contracts/utils/BytesUtils.sol","lib/forge-std/src/console.sol","lib/forge-std/src/console2.sol","lib/unruggable-gateways/contracts/GatewayFetchTarget.sol","lib/unruggable-gateways/contracts/GatewayFetcher.sol","lib/unruggable-gateways/contracts/GatewayRequest.sol","lib/unruggable-gateways/contracts/IGatewayProtocol.sol","lib/unruggable-gateways/contracts/IGatewayVerifier.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Strings.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"],"versionRequirement":"^0.8.25","artifacts":{"OPResolver":{"0.8.25":{"path":"OPResolver.sol/OPResolver.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"lib/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol":{"lastModificationDate":1725969111923,"contentHash":"3f1fad68ada48982f35ef7af2e8a245b","sourceName":"lib/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.8.4","artifacts":{"IAddrResolver":{"0.8.25":{"path":"IAddrResolver.sol/IAddrResolver.json","build_id":"7ea33baedbfacde096f6f7bbf8ef9979"}}},"seenByCompiler":true},"lib/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol":{"lastModificationDate":1725969111923,"contentHash":"6f8242d10df510af914b58122a33d176","sourceName":"lib/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.8.4","artifacts":{"IAddressResolver":{"0.8.25":{"path":"IAddressResolver.sol/IAddressResolver.json","build_id":"7ea33baedbfacde096f6f7bbf8ef9979"}}},"seenByCompiler":true},"lib/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol":{"lastModificationDate":1725969111924,"contentHash":"5fb946efa195615f0fbe2746a4e76ff6","sourceName":"lib/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.4","artifacts":{"IExtendedResolver":{"0.8.25":{"path":"IExtendedResolver.sol/IExtendedResolver.json","build_id":"7ea33baedbfacde096f6f7bbf8ef9979"}}},"seenByCompiler":true},"lib/ens-contracts/contracts/utils/BytesUtils.sol":{"lastModificationDate":1725969111925,"contentHash":"e82dc16aa16755a978b1ffb60eeb23f3","sourceName":"lib/ens-contracts/contracts/utils/BytesUtils.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.4","artifacts":{"BytesUtils":{"0.8.25":{"path":"BytesUtils.sol/BytesUtils.json","build_id":"7ea33baedbfacde096f6f7bbf8ef9979"}}},"seenByCompiler":true},"lib/forge-std/src/console.sol":{"lastModificationDate":1729267975818,"contentHash":"ce19a9e49945b42118379ff99d853c05","sourceName":"lib/forge-std/src/console.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{"console":{"0.8.25":{"path":"console.sol/console.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"lib/forge-std/src/console2.sol":{"lastModificationDate":1725969112011,"contentHash":"f65ad21034b111e70fb5342d5771efcd","sourceName":"lib/forge-std/src/console2.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/forge-std/src/console.sol"],"versionRequirement":">=0.4.22, <0.9.0","artifacts":{},"seenByCompiler":true},"lib/unruggable-gateways/contracts/GatewayFetchTarget.sol":{"lastModificationDate":1729267976411,"contentHash":"eede18042362f52a89b8d6d8d5e27a1b","sourceName":"lib/unruggable-gateways/contracts/GatewayFetchTarget.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/contracts/GatewayRequest.sol","lib/unruggable-gateways/contracts/IGatewayProtocol.sol","lib/unruggable-gateways/contracts/IGatewayVerifier.sol"],"versionRequirement":"^0.8.0","artifacts":{"GatewayFetchTarget":{"0.8.25":{"path":"GatewayFetchTarget.sol/GatewayFetchTarget.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"lib/unruggable-gateways/contracts/GatewayFetcher.sol":{"lastModificationDate":1729267976411,"contentHash":"ae992806dbbb041876e4dca8c70fa5ba","sourceName":"lib/unruggable-gateways/contracts/GatewayFetcher.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/contracts/GatewayRequest.sol"],"versionRequirement":"^0.8.0","artifacts":{"GatewayFetcher":{"0.8.25":{"path":"GatewayFetcher.sol/GatewayFetcher.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"lib/unruggable-gateways/contracts/GatewayRequest.sol":{"lastModificationDate":1729267976412,"contentHash":"7ae76ddaeb072f2131981a8e798291a6","sourceName":"lib/unruggable-gateways/contracts/GatewayRequest.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.0","artifacts":{"EvalFlag":{"0.8.25":{"path":"GatewayRequest.sol/EvalFlag.json","build_id":"3d9f648ab0319f515cdf62891e193052"}},"GatewayOP":{"0.8.25":{"path":"GatewayRequest.sol/GatewayOP.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"lib/unruggable-gateways/contracts/IGatewayProtocol.sol":{"lastModificationDate":1729267976413,"contentHash":"71a5ea9352cf174f4f644edfd647d5e8","sourceName":"lib/unruggable-gateways/contracts/IGatewayProtocol.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/contracts/GatewayRequest.sol"],"versionRequirement":"^0.8.0","artifacts":{"IGatewayProtocol":{"0.8.25":{"path":"IGatewayProtocol.sol/IGatewayProtocol.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"lib/unruggable-gateways/contracts/IGatewayVerifier.sol":{"lastModificationDate":1729267976413,"contentHash":"bdf2fe8e0d0e4d0dc35e16c8d799a686","sourceName":"lib/unruggable-gateways/contracts/IGatewayVerifier.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/contracts/GatewayRequest.sol"],"versionRequirement":"^0.8.0","artifacts":{"IGatewayVerifier":{"0.8.25":{"path":"IGatewayVerifier.sol/IGatewayVerifier.json","build_id":"3d9f648ab0319f515cdf62891e193052"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"lastModificationDate":1725969117411,"contentHash":"ba57ff4ddf1d9cae9d2009792795b7f6","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/Strings.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":["lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol"],"versionRequirement":"^0.8.20","artifacts":{"Strings":{"0.8.25":{"path":"Strings.sol/Strings.json","build_id":"7ea33baedbfacde096f6f7bbf8ef9979"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"lastModificationDate":1725969117412,"contentHash":"de0163561b417b800d01749cbbe2147e","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"IERC165":{"0.8.25":{"path":"IERC165.sol/IERC165.json","build_id":"7ea33baedbfacde096f6f7bbf8ef9979"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"lastModificationDate":1725969117412,"contentHash":"718fa8ba0ff269c92e364c1429d9de57","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/Math.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"Math":{"0.8.25":{"path":"Math.sol/Math.json","build_id":"7ea33baedbfacde096f6f7bbf8ef9979"}}},"seenByCompiler":true},"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"lastModificationDate":1725969117412,"contentHash":"b6c6bdc7aaca4fe5b680760a72e09d3e","sourceName":"lib/unruggable-gateways/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol","compilerSettings":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"]}},"evmVersion":"paris","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}},"imports":[],"versionRequirement":"^0.8.20","artifacts":{"SignedMath":{"0.8.25":{"path":"SignedMath.sol/SignedMath.json","build_id":"7ea33baedbfacde096f6f7bbf8ef9979"}}},"seenByCompiler":true}},"builds":["05a687545abe8b7e72f218ce26285646","0a406a5341145e61706129cc712a39f3","1eb8bba2e9567217ea63682edeb0742b","392ce1423bdc6d540f8e91d97affaf95","3d9f648ab0319f515cdf62891e193052","3e256be6cac97c812bede2bf18959d30","43b734e620daf3cb8e520eeba13822fc","49796362c8c906152409a798aaa95b8b","4e11d44619bc33cd394af113e42547d0","556c9e8f5a0648326b07a5c4dbcba3c7","5e612c27c3822630cd5a6f6cd6e571e8","6313b319f6b5c12a3636f1159a959ba5","736d4d3cb097c78fb9a6e71a4cca9b8c","73e57b5e6b8001805bdbf6885aa1076f","775669e5290ffa42ac83dd690185ce49","7c1bfffd7f95ee210fe88c77fba6b9c8","7ea33baedbfacde096f6f7bbf8ef9979","99cf708f20c58f31522e22a012cfaa7b","9ac3439558c4c41daeb322356ba8c30b","9f81bfecfdfb1059883b9ab9e9dd28bc","b284a15118dcc6c7bb1b7764650a2db0","b3a658d217ef19636f10cfd9ac38e465","bba6c1246fcbf674872fb805458cc4c8","bd49b340c14be1ef06b951fb808289ca","bf23834d9e2a5207f0dd6cdc54489d3d","c624e6fab9db620314a43151f4bf357a","da2db4a88847747e48659dd6e1ac73f6","db0e7ff7c1f83658c14ad8d776c8ea96","dbeeba8d9228d025203801cadf39c88f","e18b5bfd2196201b2cec3db627f251ec","ee73034f648797ba8ef4e94d61441e7b","f09a1aa47a50dfff8f9d809a259c320d","f16ee880c26900e016800b9d42699f45","f696eed8f1864d1a7eb87a1d4e8282fa"]} \ No newline at end of file diff --git a/contracts/ExampleResolver.sol b/contracts/ExampleResolver.sol index 834f5e7..533604c 100644 --- a/contracts/ExampleResolver.sol +++ b/contracts/ExampleResolver.sol @@ -11,10 +11,9 @@ import {IAddressResolver} from "@ensdomains/contracts/resolvers/profiles/IAddres import {BytesUtils} from "@ensdomains/contracts/utils/BytesUtils.sol"; import {Strings} from "@unruggable/lib/openzeppelin-contracts/contracts/utils/Strings.sol"; import {GatewayFetcher, GatewayRequest} from "@unruggable/contracts/GatewayFetcher.sol"; -import "@unruggable/contracts/GatewayProtocol.sol"; // bases -import {GatewayFetchTarget, IGatewayProofVerifier} from "@unruggable/contracts/GatewayFetchTarget.sol"; +import {GatewayFetchTarget, IGatewayVerifier} from "@unruggable/contracts/GatewayFetchTarget.sol"; import "forge-std/console2.sol"; // DEBUG @@ -23,10 +22,10 @@ contract ExampleResolver is IERC165, IExtendedResolver, GatewayFetchTarget { using BytesUtils for bytes; using GatewayFetcher for GatewayRequest; - IGatewayProofVerifier immutable _verifier; + IGatewayVerifier immutable _verifier; address immutable _exampleAddress; - constructor(IGatewayProofVerifier verifier, address exampleAddress) { + constructor(IGatewayVerifier verifier, address exampleAddress) { _verifier = verifier; _exampleAddress = exampleAddress; } @@ -45,7 +44,7 @@ contract ExampleResolver is IERC165, IExtendedResolver, GatewayFetchTarget { .debug("lol") .setOutput(0); - fetch(_verifier, r, this.addrCallback.selector, ''); + fetch(_verifier, r, this.addrCallback.selector); return new bytes(64); } diff --git a/contracts/L1SimpleResolver.sol b/contracts/L1SimpleResolver.sol new file mode 100644 index 0000000..3f8df84 --- /dev/null +++ b/contracts/L1SimpleResolver.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import {GatewayFetcher, GatewayRequest} from "@unruggable/contracts/GatewayFetcher.sol"; +import {GatewayFetchTarget, IGatewayVerifier} from "@unruggable/contracts/GatewayFetchTarget.sol"; + +import "forge-std/console2.sol"; // DEBUG + +contract L1SimpleResolver is GatewayFetchTarget { + using GatewayFetcher for GatewayRequest; + + IGatewayVerifier immutable _verifier; + address immutable _exampleAddress; + + constructor(IGatewayVerifier verifier, address exampleAddress) { + _verifier = verifier; + _exampleAddress = exampleAddress; + } + + function supportsInterface(bytes4 x) external pure returns (bool) { + return x == 0x9061b923 ? false : true; + } + + function addr(bytes32 node) public view returns (address) { + + GatewayRequest memory r = GatewayFetcher + .newRequest(1) + .setTarget(_exampleAddress) + .setSlot(11) + .read() + .debug("lol") + .setOutput(0); + + fetch(_verifier, r, this.addrCallback.selector); + } + + function addrCallback(bytes[] calldata values, uint8, bytes calldata extraData) external pure returns (address) { + return abi.decode(values[0], (address)); + } +} \ No newline at end of file diff --git a/contracts/OPResolver.sol b/contracts/OPResolver.sol index 999a78b..6bb9133 100644 --- a/contracts/OPResolver.sol +++ b/contracts/OPResolver.sol @@ -8,9 +8,9 @@ import {IAddressResolver} from "@ensdomains/contracts/resolvers/profiles/IAddres import {BytesUtils} from "@ensdomains/contracts/utils/BytesUtils.sol"; import {Strings} from "@unruggable/lib/openzeppelin-contracts/contracts/utils/Strings.sol"; -import {GatewayFetcher, GatewayRequest} from "@unruggable/contracts/GatewayFetcher.sol"; -import "@unruggable/contracts/GatewayProtocol.sol"; -import {GatewayFetchTarget, IGatewayProofVerifier} from "@unruggable/contracts/GatewayFetchTarget.sol"; +import {GatewayFetcher} from "@unruggable/contracts/GatewayFetcher.sol"; +import {GatewayFetchTarget, IGatewayVerifier} from "@unruggable/contracts/GatewayFetchTarget.sol"; +import {GatewayRequest, EvalFlag} from "@unruggable/contracts/GatewayRequest.sol"; import {console2 as console} from "forge-std/console2.sol"; // DEBUG @@ -19,11 +19,11 @@ contract OPResolver is IERC165, IExtendedResolver, GatewayFetchTarget { using BytesUtils for bytes; using GatewayFetcher for GatewayRequest; - IGatewayProofVerifier immutable _verifier; + IGatewayVerifier immutable _verifier; address constant STORAGE_CONTRACT_ADDRESS = 0xc695404735E0F1587A5398a06cAB34D7d7b009Da; - constructor(IGatewayProofVerifier verifier) { + constructor(IGatewayVerifier verifier) { console.log("Constructing OPResolver.."); _verifier = verifier; } @@ -81,13 +81,15 @@ contract OPResolver is IERC165, IExtendedResolver, GatewayFetchTarget { .setOutput(0); // save it - baseRequest.push(subRequest).evalLoop(STOP_ON_FAILURE); // loop until we get a failure + baseRequest.push(subRequest).evalLoop(EvalFlag.STOP_ON_FAILURE); // loop until we get a failure baseRequest.pushOutput(1).requireNonzero(uint8(0)).target() // set target to resolver .setSlot(0) // _nodes mapping (map[node]) .push(name.namehash(0)).follow() .read().setOutput(2); // read resolved address into output 2 - fetch(_verifier, baseRequest, this.addrCallback.selector, abi.encodePacked(selector)); + string[] memory urls = new string[](0); + + fetch(_verifier, baseRequest, this.addrCallback.selector, abi.encodePacked(selector), urls); } return new bytes(64); diff --git a/example-base.ts b/example-base.ts index d4741d7..7142205 100644 --- a/example-base.ts +++ b/example-base.ts @@ -1,6 +1,6 @@ import { Foundry } from '@adraffy/blocksmith'; -import { namehash, toBeHex, Contract } from 'ethers'; -import { type ConfigItem, type VerifierArgsType } from './utils'; +import { namehash, toBeHex, Contract, Wallet } from 'ethers'; +import { type VerifierArgsType } from './utils'; import { solidityFollowSlot } from '@unruggable/gateways'; const NAME_TO_TEST = "unruggable.eth"; @@ -9,7 +9,6 @@ export const runExample = async ( chainLink: string, verifierPath: string, verifierArgs: VerifierArgsType, - configurationToSet: ConfigItem[], exampleContractAddress: string ) => { @@ -18,51 +17,39 @@ export const runExample = async ( procLog : true, infoLog : true, }); - - const deployerWallet = foundry.wallets.admin; - + const verifierArgsToUse = typeof verifierArgs === 'function' ? await verifierArgs(foundry) : verifierArgs; - //Deploy verifier + const vmPath = `@unruggable/contracts/GatewayVM.sol`; + + const GatewayVM = await foundry.deploy({ + import: vmPath, + args: [], + }); + + const verifierLibs = {GatewayVM}; + const verifier = await foundry.deploy({ import: verifierPath, args: verifierArgsToUse, + libs: verifierLibs, }); - - //Deploy proxy - const proxy = await foundry.deploy({ - import: `@unruggable/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol`, - args: [verifier.target, deployerWallet.address, '0x'], - }); - - // Instantiate the proxy using the underlying verifier interface - const proxyUsingInterface = new Contract( - proxy.target, - verifier.interface, - deployerWallet - ); - - // Configure the verifier - for (const config of configurationToSet) { - await foundry.confirm(proxyUsingInterface[config.setter](config.value)); - console.log(`Set ${config.setter} to ${config.value}`); - } - + const ENS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'; const NODE = namehash(NAME_TO_TEST); const SLOT = solidityFollowSlot(0, NODE) + 1n; - const arbitrumOneResolver = await foundry.deploy({ + const resolver = await foundry.deploy({ file: 'ExampleResolver', - args: [proxy.target, exampleContractAddress], + args: [verifier.target, exampleContractAddress], }); - console.log('Arbitrum One Resolver deployment:', arbitrumOneResolver.target); + console.log('Resolver deployment:', resolver.target); await foundry.provider.send('anvil_setStorageAt', [ ENS, toBeHex(SLOT, 32), - toBeHex(arbitrumOneResolver.target, 32), + toBeHex(resolver.target, 32), ]); const ens = new Contract( ENS, diff --git a/lib/ens-contracts b/lib/ens-contracts index a6139f0..5421b56 160000 --- a/lib/ens-contracts +++ b/lib/ens-contracts @@ -1 +1 @@ -Subproject commit a6139f0381ce6bcc584cbce36933c5ea95837212 +Subproject commit 5421b5689e695531dc9739f0ad861839bdd231cb diff --git a/lib/forge-std b/lib/forge-std index 1714bee..1de6eec 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 1714bee72e286e73f76e320d110e0eaf5c4e649d +Subproject commit 1de6eecf821de7fe2c908cc48d3ab3dced20717f diff --git a/lib/unruggable-gateways b/lib/unruggable-gateways index 97e0703..dc46be3 160000 --- a/lib/unruggable-gateways +++ b/lib/unruggable-gateways @@ -1 +1 @@ -Subproject commit 97e07035ed8752c2683cf127fb5cdf5db4d6ecff +Subproject commit dc46be31eccfa9ec591aa1c409c8df1ba6c82d82 diff --git a/optimism.ts b/optimism.ts index 26d90c4..c6e3638 100644 --- a/optimism.ts +++ b/optimism.ts @@ -1,7 +1,6 @@ -import { Foundry } from '@adraffy/blocksmith'; import { OPFaultRollup, Gateway } from '@unruggable/gateways'; import { createProviderPair, providerURL } from './providers'; -import type { ConfigItem, VerifierArgsType } from './utils'; +import type { VerifierArgsType } from './utils'; import { runExample } from './example-base'; const config = OPFaultRollup.mainnetConfig; @@ -11,7 +10,7 @@ console.log(providerURL(config.chain1)); console.log(providerURL(config.chain2)); const provider = providerURL(config.chain1); -const rollup = await OPFaultRollup.create( +const rollup = new OPFaultRollup( createProviderPair(config), config ); @@ -19,52 +18,54 @@ const rollup = await OPFaultRollup.create( const gateway = new Gateway(rollup); const commit = await gateway.getLatestCommit(); +const hooksPath = `@unruggable/contracts/eth/EthVerifierHooks.sol`; +const gameFinderPath = `@unruggable/test/gateway/FixedOPFaultGameFinder.sol`; const verifierPath = `@unruggable/contracts/op/OPFaultVerifier.sol`; const GATEWAY_URL = 'https://optimism.gateway.unruggable.com'; -const verifierArgs: VerifierArgsType = async (foundry) => { - - //Deploy gamefinder - /* - // When working with the real gamefinder in the anvil context, iteration is slow. - // ~80s noting the latest fixes to OP fault proving (see https://gov.optimism.io/t/upgrade-proposal-10-granite-network-upgrade/8733) - // We use a fixed gamefinder for demonstration purposes. - // Swap in the below block to use the real gamefinder. - const gameFinder = await foundry.deploy({ - import: `@unruggable/contracts/op/OPFaultGameFinder.sol`, - args: [], +//Deploy gamefinder +/* +// When working with the real gamefinder in the anvil context, iteration is slow. +// ~80s noting the latest fixes to OP fault proving (see https://gov.optimism.io/t/upgrade-proposal-10-granite-network-upgrade/8733) +// We use a fixed gamefinder for demonstration purposes. +// Swap in the below block to use the real gamefinder. +const gameFinder = await foundry.deploy({ + import: `@unruggable/contracts/op/OPFaultGameFinder.sol`, + args: [], +}); +*/ + +const EXAMPLE_CONTRACT_ADDRESS = '0xf9d79d8c09d24e0C47E32778c830C545e78512CF'; + +const verifierArgs: VerifierArgsType = async (smith, deployerWallet) => { + + const gameFinderArgs: any[] = [commit.index]; + + const gameFinder = await smith.deploy({ + import: gameFinderPath, + args: gameFinderArgs, }); - */ - const gameFinder = await foundry.deploy({ - import: `@unruggable/test/gateway/FixedOPFaultGameFinder.sol`, - args: [commit.index], + const ethHooksArgs: any[] = []; + + const hooks = await smith.deploy({ + import: hooksPath, + args: ethHooksArgs, }); - return [gameFinder.target]; + return [ + [GATEWAY_URL], + rollup.defaultWindow, + hooks.target, + [ + rollup.OptimismPortal.target, + gameFinder.target, + rollup.gameTypeBitMask, + rollup.minAgeSec, + ] + ]; + } -const EXAMPLE_CONTRACT_ADDRESS = '0xf9d79d8c09d24e0C47E32778c830C545e78512CF'; -const configurationToSet: ConfigItem[] = [ - { - getter: 'getWindow', - setter: 'setWindow', - value: rollup.defaultWindow, - }, - { - getter: 'gatewayURLs', - setter: 'setGatewayURLs', - value: [GATEWAY_URL], - }, - { - setter: 'setPortal', - value: rollup.OptimismPortal.target, - }, - { - setter: 'setGameTypes', - value: rollup.gameTypeBitMask, - }, -]; - -runExample(provider, verifierPath, verifierArgs, configurationToSet, EXAMPLE_CONTRACT_ADDRESS); \ No newline at end of file +runExample(provider, verifierPath, verifierArgs, EXAMPLE_CONTRACT_ADDRESS); \ No newline at end of file diff --git a/package.json b/package.json index d7ea4f1..86072ec 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "typescript": "^5.5.4" }, "dependencies": { - "@adraffy/blocksmith": "^0.0.33", - "@unruggable/gateways": "^0.0.8" + "@adraffy/blocksmith": "^0.0.40", + "@unruggable/gateways": "^0.1.3" } } \ No newline at end of file