diff --git a/examples/optimism-gateway/client/src/index.ts b/examples/optimism-gateway/client/src/index.ts index 0b23458..0778ea0 100644 --- a/examples/optimism-gateway/client/src/index.ts +++ b/examples/optimism-gateway/client/src/index.ts @@ -2,7 +2,7 @@ const ethers = require('ethers'); const namehash = require('eth-ens-namehash'); const TEST_NODE = namehash.hash('test.test'); const TEST2_NODE = namehash.hash('test2.test'); -const nodeFetch = require('node-fetch'); +const nodeFetch = require("node-fetch") const TEST_ADDRESS = "0x0000000000000000000000000000000000000001"; require('dotenv').config({ path: '../contracts/.env' }); @@ -35,14 +35,79 @@ if(NETWORK === 'kovan'){ PROVIDER_URL = 'http://localhost:9545' L2_PROVIDER_URL = 'http://localhost:8545' } - const provider = new ethers.providers.JsonRpcProvider(PROVIDER_URL); -const middleware = require('@ensdomains/durin-middleware') -const durinProvider = new middleware.DurinMiddleware(provider) -const wrappedProvider = new ethers.providers.Web3Provider(durinProvider) -const resolver = new ethers.Contract(RESOLVER_STUB_ADDRESS, abi, wrappedProvider); -// const resolver = new ethers.Contract(RESOLVER_STUB_ADDRESS, abi, provider); +const l2provider = new ethers.providers.JsonRpcProvider(L2_PROVIDER_URL); +const resolver = new ethers.Contract(RESOLVER_STUB_ADDRESS, abi, provider); + +console.log({ + RESOLVER_STUB_ADDRESS +}) + +function createL2Wallet() { + const mnemonicWallet = ethers.Wallet.fromMnemonic(MNEMONIC); + return new ethers.Wallet(mnemonicWallet.privateKey, l2provider) +} + +function sleep(ms:number) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +async function addr(node: string) { + try { + return await resolver.addr(node); + } catch (e) { + console.log(`*** resolver.addr error: ${e.message}`); + if (e.errorName === 'OffchainLookup') { + const url = e.errorArgs[2]; // Tested with our adapter deployed in our infra. URL: https://adapters.main.stage.cldev.sh/durin + const iface = new ethers.utils.Interface(abi); + const data = iface.encodeFunctionData('addr', [node]); + const reqBody = { + id: "1", + data: { + to: RESOLVER_STUB_ADDRESS, + abi, + data + } + } + const resp = await nodeFetch( + url, + { + method: 'post', + body: JSON.stringify(reqBody), + headers: {'Content-Type': 'application/json'} + } + ) + const result = (await resp.json()).result + try { + const outputdata = await provider.call({ + to: RESOLVER_STUB_ADDRESS, + data: result, + }); + return iface.decodeFunctionResult('addrWithProof', outputdata); + } catch(ee){ + console.log(`*** resolver.addrWithProof error: ${ee.message}`); + } + } else { + console.log(e); + } + } +} + +async function main() { + console.log('Ask durin for test.test'); + console.log(await addr(TEST_NODE)); + console.log('Ask durin for test2.test'); + console.log(await addr(TEST2_NODE)); + const l2resolver = new ethers.Contract(RESOLVER_ADDRESS, abi2, createL2Wallet()); + console.log('Update test.test on l2'); + await (await l2resolver.setAddr(TEST_NODE, TEST_ADDRESS)).wait(); + console.log('Set new value to l2', await l2resolver.addr(TEST_NODE)); + console.log('Wait 10 sec'); + await sleep(10000) + console.log('Ask durin again'); + console.log(await addr(TEST_NODE)); +} -resolver.addr(namehash.hash('test.test')) - .then(console.log) - .catch(console.log) \ No newline at end of file +main(); \ No newline at end of file