From e4ccbb1b6c1954a55640c1a0e828650fed1a40c9 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 20 Oct 2023 18:04:18 +0530 Subject: [PATCH 01/11] feat: action to add deployed token manager to tenderly project --- .../add-to-project/addToProject.js | 41 +++++++++++++++++++ .../add-to-project-action/tenderly.yaml | 13 ++++++ 2 files changed, 54 insertions(+) create mode 100644 tenderly-suite/add-to-project-action/add-to-project/addToProject.js create mode 100644 tenderly-suite/add-to-project-action/tenderly.yaml diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js new file mode 100644 index 00000000..ce079c48 --- /dev/null +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -0,0 +1,41 @@ +const axios = require('axios').default; + +const URL = 'https://api.tenderly.co/api/v2/accounts/axelarEng/projects/ITS/contracts'; +const TOKEN_MANAGER_DEPLOYED_TOPIC0 = '0x614cc9db96194a8f405df6fbdd25ebc1df6bb741c1fd196cb927d546c1406c34'; + +const addToProjectFn = async (context, event) => { + const logs = event.logs; + const contracts = []; + + for (let index = 0; index < logs.length; ++index) { + if (logs[index].topics[0] === TOKEN_MANAGER_DEPLOYED_TOPIC0) { + const deployedAddress = '0x' + logs[index].data.substring(218, 258); // TODO: can change with final event imp with AXL-2064 + const name = `TokenManager-${context.metadata.getNetwork()}-${deployedAddress}`; // TokenManager + network + address + + contracts.push({ + address: deployedAddress, + display_name: name, + network_id: event.network, + }); + } + } + + if (contracts.length === 0) throw Error('NO_DEPLOYED_CONTRACT_FOUND'); + + try { + await axios.post( + URL, + { contracts }, + { + headers: { + 'X-Access-Key': await context.secrets.get('API_TOKEN'), + }, + }, + ); + } catch (error) { + console.error(error.response.data); + throw Error('CONTRACT_ADDITION_FAILED'); + } +}; + +module.exports = { addToProjectFn }; diff --git a/tenderly-suite/add-to-project-action/tenderly.yaml b/tenderly-suite/add-to-project-action/tenderly.yaml new file mode 100644 index 00000000..2b887548 --- /dev/null +++ b/tenderly-suite/add-to-project-action/tenderly.yaml @@ -0,0 +1,13 @@ +account_id: "" +actions: + axelareng/its: + runtime: v2 + sources: add-to-project + specs: + add-to-project: + description: This action adds newly deployed TokenManagers to a tenderly project. + function: addToProject:addToProjectFn + trigger: + type: transaction + execution_type: sequential +project_slug: "" \ No newline at end of file From 3a26a69f17e075522420cdd2818b82890a6144c2 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 20 Oct 2023 18:42:30 +0530 Subject: [PATCH 02/11] chore: update error logging --- .../add-to-project-action/add-to-project/addToProject.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index ce079c48..ba244a82 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -33,6 +33,7 @@ const addToProjectFn = async (context, event) => { }, ); } catch (error) { + console.log(error.response.status); console.error(error.response.data); throw Error('CONTRACT_ADDITION_FAILED'); } From 08fe922c8b39166d2edd2d20f1de0b11541b7486 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 27 Oct 2023 14:02:59 +0530 Subject: [PATCH 03/11] refactor: update hash of token manager deployed event and address extraction --- .../add-to-project-action/add-to-project/addToProject.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index ba244a82..da3de7d3 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -1,7 +1,7 @@ const axios = require('axios').default; const URL = 'https://api.tenderly.co/api/v2/accounts/axelarEng/projects/ITS/contracts'; -const TOKEN_MANAGER_DEPLOYED_TOPIC0 = '0x614cc9db96194a8f405df6fbdd25ebc1df6bb741c1fd196cb927d546c1406c34'; +const TOKEN_MANAGER_DEPLOYED_TOPIC0 = '0x5284c2478b9c1a55e973429331078be39b5fb3eeb9d87d10b34d65a4c89ee4eb'; const addToProjectFn = async (context, event) => { const logs = event.logs; @@ -9,7 +9,7 @@ const addToProjectFn = async (context, event) => { for (let index = 0; index < logs.length; ++index) { if (logs[index].topics[0] === TOKEN_MANAGER_DEPLOYED_TOPIC0) { - const deployedAddress = '0x' + logs[index].data.substring(218, 258); // TODO: can change with final event imp with AXL-2064 + const deployedAddress = '0x' + logs[index].data.substring(26, 66); const name = `TokenManager-${context.metadata.getNetwork()}-${deployedAddress}`; // TokenManager + network + address contracts.push({ From 2b7538f5e3294e397aa27413812ae33863bdc4c3 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 27 Oct 2023 14:03:49 +0530 Subject: [PATCH 04/11] chore: add EOL, project_slug and account_id --- tenderly-suite/add-to-project-action/tenderly.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tenderly-suite/add-to-project-action/tenderly.yaml b/tenderly-suite/add-to-project-action/tenderly.yaml index 2b887548..0bebf8c6 100644 --- a/tenderly-suite/add-to-project-action/tenderly.yaml +++ b/tenderly-suite/add-to-project-action/tenderly.yaml @@ -1,4 +1,4 @@ -account_id: "" +account_id: "axelarEng" actions: axelareng/its: runtime: v2 @@ -10,4 +10,4 @@ actions: trigger: type: transaction execution_type: sequential -project_slug: "" \ No newline at end of file +project_slug: "ITS" From b7f31679dea1710d436cb30110706c510fa5f8d7 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Wed, 1 Nov 2023 20:26:44 +0530 Subject: [PATCH 05/11] refactor: resolve PR comments --- .../add-to-project/addToProject.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index da3de7d3..4dfdada3 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -7,10 +7,19 @@ const addToProjectFn = async (context, event) => { const logs = event.logs; const contracts = []; + if (!event || !event.logs || !context || !context.metadata) { + throw new Error('INVALID_INPUT_FOR_ACTION'); + } + for (let index = 0; index < logs.length; ++index) { if (logs[index].topics[0] === TOKEN_MANAGER_DEPLOYED_TOPIC0) { + if(logs[index].data.length < 66){ + throw new Error('INVALID_LOG_DATA_LENGTH'); + } + + // log data contains address in first 32 bytes i.e. first 64 chars, here data string is also prefixed with 0x. const deployedAddress = '0x' + logs[index].data.substring(26, 66); - const name = `TokenManager-${context.metadata.getNetwork()}-${deployedAddress}`; // TokenManager + network + address + const name = `TokenManager-${context.metadata.getNetwork()}-${deployedAddress}`; contracts.push({ address: deployedAddress, From 39876eec8a6a3a7d78a314161fb1c39b85fad90a Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Wed, 1 Nov 2023 22:13:08 +0530 Subject: [PATCH 06/11] refactor: lint --- .../add-to-project-action/add-to-project/addToProject.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index 4dfdada3..3f6c7e76 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -13,7 +13,7 @@ const addToProjectFn = async (context, event) => { for (let index = 0; index < logs.length; ++index) { if (logs[index].topics[0] === TOKEN_MANAGER_DEPLOYED_TOPIC0) { - if(logs[index].data.length < 66){ + if (logs[index].data.length < 66) { throw new Error('INVALID_LOG_DATA_LENGTH'); } From edbb0b8bd3dc4d8942ddb9bf991fa1d470c743a4 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 2 Nov 2023 16:22:32 +0530 Subject: [PATCH 07/11] refactor: move tenderly url to tenderly storage and update error string --- .../add-to-project/addToProject.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index 3f6c7e76..2b6a67d7 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -1,16 +1,15 @@ const axios = require('axios').default; -const URL = 'https://api.tenderly.co/api/v2/accounts/axelarEng/projects/ITS/contracts'; const TOKEN_MANAGER_DEPLOYED_TOPIC0 = '0x5284c2478b9c1a55e973429331078be39b5fb3eeb9d87d10b34d65a4c89ee4eb'; const addToProjectFn = async (context, event) => { - const logs = event.logs; - const contracts = []; - if (!event || !event.logs || !context || !context.metadata) { throw new Error('INVALID_INPUT_FOR_ACTION'); } + const logs = event.logs; + const contracts = []; + for (let index = 0; index < logs.length; ++index) { if (logs[index].topics[0] === TOKEN_MANAGER_DEPLOYED_TOPIC0) { if (logs[index].data.length < 66) { @@ -29,11 +28,11 @@ const addToProjectFn = async (context, event) => { } } - if (contracts.length === 0) throw Error('NO_DEPLOYED_CONTRACT_FOUND'); + if (contracts.length === 0) throw Error('NO_NEW_TOKEN_MANAGER_DEPLOYED'); try { await axios.post( - URL, + await context.storage.getStr('TenderlyAddContractsURL'), { contracts }, { headers: { From 736646aab488750b63ffc6ed49c3b0715b8574d8 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 3 Nov 2023 13:12:55 +0530 Subject: [PATCH 08/11] chore: update comment explaining address extraction from log data --- .../add-to-project-action/add-to-project/addToProject.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index 2b6a67d7..c9a49389 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -16,7 +16,8 @@ const addToProjectFn = async (context, event) => { throw new Error('INVALID_LOG_DATA_LENGTH'); } - // log data contains address in first 32 bytes i.e. first 64 chars, here data string is also prefixed with 0x. + // log data contains address in first 32 bytes i.e. first 64 chars, here data string is also prefixed with 0x. + // data = '0x' + 24 chars (appended 0) + 40 chars (address) const deployedAddress = '0x' + logs[index].data.substring(26, 66); const name = `TokenManager-${context.metadata.getNetwork()}-${deployedAddress}`; From 67e52c0a8d8eaa07a52c366dd8cf0d66e7cf27b9 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Tue, 7 Nov 2023 14:43:50 +0530 Subject: [PATCH 09/11] refactor: use tenderly storage for fetching events abi instead of pre-calculated hash --- .../add-to-project-action/add-to-project/addToProject.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index c9a49389..154e2b3b 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -1,17 +1,19 @@ +const { ethers } = require('ethers'); const axios = require('axios').default; -const TOKEN_MANAGER_DEPLOYED_TOPIC0 = '0x5284c2478b9c1a55e973429331078be39b5fb3eeb9d87d10b34d65a4c89ee4eb'; - const addToProjectFn = async (context, event) => { if (!event || !event.logs || !context || !context.metadata) { throw new Error('INVALID_INPUT_FOR_ACTION'); } + const { tokenManagerDeployed } = await context.storage.getJson('EventsABI'); + const tokenManagerDeployedHash = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(tokenManagerDeployed)); + const logs = event.logs; const contracts = []; for (let index = 0; index < logs.length; ++index) { - if (logs[index].topics[0] === TOKEN_MANAGER_DEPLOYED_TOPIC0) { + if (logs[index].topics[0] === tokenManagerDeployedHash) { if (logs[index].data.length < 66) { throw new Error('INVALID_LOG_DATA_LENGTH'); } From 200f3f1c208dac62a2b5fd01080f331a5405b4a6 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Wed, 8 Nov 2023 19:40:48 +0530 Subject: [PATCH 10/11] chore: add logs for new token manager deployed --- .../add-to-project-action/add-to-project/addToProject.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index 154e2b3b..53453595 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -23,6 +23,8 @@ const addToProjectFn = async (context, event) => { const deployedAddress = '0x' + logs[index].data.substring(26, 66); const name = `TokenManager-${context.metadata.getNetwork()}-${deployedAddress}`; + console.log(`New TokenManager deployed for chain ${context.metadata.getNetwork()} at address ${deployedAddress}`); + contracts.push({ address: deployedAddress, display_name: name, From cb236d1859c453a842dad342196d393e210c58af Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 10 Nov 2023 09:52:51 +0530 Subject: [PATCH 11/11] refactor: use abi decoder for extracting address --- .../add-to-project-action/add-to-project/addToProject.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js index 53453595..01c5f3a1 100644 --- a/tenderly-suite/add-to-project-action/add-to-project/addToProject.js +++ b/tenderly-suite/add-to-project-action/add-to-project/addToProject.js @@ -20,7 +20,7 @@ const addToProjectFn = async (context, event) => { // log data contains address in first 32 bytes i.e. first 64 chars, here data string is also prefixed with 0x. // data = '0x' + 24 chars (appended 0) + 40 chars (address) - const deployedAddress = '0x' + logs[index].data.substring(26, 66); + const [deployedAddress] = ethers.utils.defaultAbiCoder.decode(['address'], logs[index].data.substring(0, 66)); const name = `TokenManager-${context.metadata.getNetwork()}-${deployedAddress}`; console.log(`New TokenManager deployed for chain ${context.metadata.getNetwork()} at address ${deployedAddress}`);