From c6c6dd62927261d7ffc3bc50b3a5c8c38bc9f1dc Mon Sep 17 00:00:00 2001 From: Julink Date: Wed, 26 Apr 2023 14:26:24 +0200 Subject: [PATCH 1/2] feat: changed logs for the gateway to be more explicit --- packages/gateway/src/index.ts | 194 +++++++++++++++++++--------------- 1 file changed, 106 insertions(+), 88 deletions(-) diff --git a/packages/gateway/src/index.ts b/packages/gateway/src/index.ts index 865c54cf1..21a5dfa53 100644 --- a/packages/gateway/src/index.ts +++ b/packages/gateway/src/index.ts @@ -57,99 +57,117 @@ server.add(IResolverAbi, [ { type: "resolve", func: async ([encodedName, data]: Result, request) => { - const name = decodeDnsName(Buffer.from(encodedName.slice(2), "hex")); - const node = ethers.utils.namehash(name); + try { + console.log("--------------------REQUEST START--------------------\n"); + console.log(`Request timestamp: ${new Date().toUTCString()}`); + const name = decodeDnsName(Buffer.from(encodedName.slice(2), "hex")); + const node = ethers.utils.namehash(name); - if (debug) { - console.log("encodedName", encodedName); - console.log("name", name); - console.log("node", node); - const to = request?.to; - console.log({ - node, - to, - data, - l1_provider_url, - l2_provider_url, - l2_resolver_address, - }); - } + if (debug) { + console.log("encodedName", encodedName); + console.log("name", name); + console.log("node", node); + const to = request?.to; + console.log({ + node, + to, + data, + l1_provider_url, + l2_provider_url, + l2_resolver_address, + }); + } - const lastBlockFinalized = await rollup.lastFinalizedBatchHeight(); - const blockNumber = lastBlockFinalized.toNumber(); - console.log(`Last block number finalized on L2 : ${blockNumber}`); - const block = await l2provider.getBlock(blockNumber); - const blockHash = block.hash; - const l2blockRaw = await l2provider.send("eth_getBlockByHash", [ - blockHash, - false, - ]); - 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 lastBlockFinalized = await rollup.lastFinalizedBatchHeight(); + console.log(`lastBlockFinalized: ${lastBlockFinalized}`); + const blockNumber = lastBlockFinalized.toNumber(); + const block = await l2provider.getBlock(blockNumber); + const blockHash = block.hash; + const l2blockRaw = await l2provider.send("eth_getBlockByHash", [ + blockHash, + false, + ]); + const stateRoot = l2blockRaw.stateRoot; + console.log(`stateRoot: ${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); - // we get the slot address of the variable 'mapping(bytes32 => uint256) public addresses' - // which is at index 11 of the L2 resolver contract - const tokenIdSlot = ethers.utils.keccak256(node + "00".repeat(31) + "0B"); - const tokenId = await l2provider.getStorageAt( - l2_resolver_address, - tokenIdSlot - ); - const ownerSlot = ethers.utils.keccak256( - tokenId + "00".repeat(31) + "02" - ); + // we get the slot address of the variable 'mapping(bytes32 => uint256) public addresses' + // which is at index 11 of the L2 resolver contract + const tokenIdSlot = ethers.utils.keccak256( + `${node}${"00".repeat(31)}0B` + ); + const tokenId = await l2provider.getStorageAt( + l2_resolver_address, + tokenIdSlot + ); + console.log(`tokenId: ${stateRoot}`); + const ownerSlot = ethers.utils.keccak256( + `${tokenId}${"00".repeat(31)}02` + ); - // Create proof for the tokenId slot - const tokenIdProof = await l2provider.send("eth_getProof", [ - l2_resolver_address, - [tokenIdSlot], - { blockHash }, - ]); - const accountProof = ethers.utils.RLP.encode(tokenIdProof.accountProof); - const tokenIdStorageProof = ethers.utils.RLP.encode( - (tokenIdProof.storageProof as any[]).filter( - (x) => x.key === tokenIdSlot - )[0].proof - ); + // Create proof for the tokenId slot + const tokenIdProof = await l2provider.send("eth_getProof", [ + l2_resolver_address, + [tokenIdSlot], + { blockHash }, + ]); + const accountProof = ethers.utils.RLP.encode(tokenIdProof.accountProof); + const tokenIdStorageProof = ethers.utils.RLP.encode( + // rome-ignore lint/suspicious/noExplicitAny: + (tokenIdProof.storageProof as any[]).filter( + (x) => x.key === tokenIdSlot + )[0].proof + ); + console.log( + `tokenIdStorageProof: ${tokenIdStorageProof.slice(0, 50)}...` + ); - // Create proof for the owner slot - const ownerProof = await l2provider.send("eth_getProof", [ - l2_resolver_address, - [ownerSlot], - { blockHash }, - ]); - const ownerStorageProof = ethers.utils.RLP.encode( - (ownerProof.storageProof as any[]).filter((x) => x.key === ownerSlot)[0] - .proof - ); + // Create proof for the owner slot + const ownerProof = await l2provider.send("eth_getProof", [ + l2_resolver_address, + [ownerSlot], + { blockHash }, + ]); + const ownerStorageProof = ethers.utils.RLP.encode( + // rome-ignore lint/suspicious/noExplicitAny: + (ownerProof.storageProof as any[]).filter( + (x) => x.key === ownerSlot + )[0].proof + ); + console.log(`ownerStorageProof: ${ownerStorageProof.slice(0, 50)}...`); - const finalProof = { - blockHash, - encodedBlockArray, - accountProof, - stateRoot, - tokenIdStorageProof, - ownerStorageProof, - }; - console.log({ finalProof }); - return [finalProof]; + const finalProof = { + blockHash, + encodedBlockArray, + accountProof, + stateRoot, + tokenIdStorageProof, + ownerStorageProof, + }; + console.log("\n--------------------REQUEST END--------------------\n"); + return [finalProof]; + } catch (error) { + console.log(`Error occured: ${error}`); + throw error; + } }, }, ]); @@ -162,7 +180,7 @@ function decodeDnsName(dnsname: Buffer) { while (true) { const len = dnsname.readUInt8(idx); if (len === 0) break; - labels.push(dnsname.slice(idx + 1, idx + len + 1).toString("utf8")); + labels.push(dnsname.subarray(idx + 1, idx + len + 1).toString("utf8")); idx += len + 1; } return labels.join("."); From 48ba51006e3737d8d2e4beed591d7dc24fe68f78 Mon Sep 17 00:00:00 2001 From: Julink Date: Wed, 26 Apr 2023 14:28:09 +0200 Subject: [PATCH 2/2] chore: change docker to be able to deploy to argocd --- packages/gateway/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gateway/Dockerfile b/packages/gateway/Dockerfile index 3ff69adb5..12080852c 100644 --- a/packages/gateway/Dockerfile +++ b/packages/gateway/Dockerfile @@ -12,4 +12,4 @@ COPY --from=build /gateway . ARG L1_PROVIDER_URL ARG L2_PROVIDER_URL ARG L2_RESOLVER_ADDRESS -CMD yarn start \ No newline at end of file +CMD yarn start --l2_resolver_address 0x117F113aEFb9AeD23d901C1fa02fDdaA1d20cCaB --l1_provider_url https://goerli.infura.io/v3/9ed1bd75f3d14307b365c2270d2ea66f --l2_provider_url https://consensys-zkevm-goerli-prealpha.infura.io/v3/16fff764ff2145c2b137fbe8013730c6 \ No newline at end of file