From 2aac42db04c58f7ba2389aa060326843490b222a Mon Sep 17 00:00:00 2001 From: Ugonna Paul Dike Date: Tue, 3 Sep 2024 13:38:40 +0100 Subject: [PATCH] Save addresses of contracts deployed with Forge #39 (#55) * Save addresses of contracts deployed with Forge #39 * updated PR * updated PR * updated PR * updated PR * updated PR --- .env.example | 2 +- .gitignore | 2 +- bun.lockb | Bin 176395 -> 217451 bytes foundry.toml | 5 +- src/script/DeployLineaStateBridge.s.sol | 19 +- src/script/DeployLineaWorldID.s.sol | 8 +- src/script/deploy.js | 175 ++++++++++++++---- src/script/js/claimMessageModule.js | 2 +- src/services/lineaStateBridgeEventListener.js | 2 +- 9 files changed, 161 insertions(+), 54 deletions(-) diff --git a/.env.example b/.env.example index 50b5f5f..4c43a43 100644 --- a/.env.example +++ b/.env.example @@ -16,4 +16,4 @@ export MSG_CLAIM_VALUE=0 export MSG_CLAIM_NONCE=0 export MSG_CLAIM_CALLDATA="YOUR_CALL_DATA" export MSG_CLAIM_FEE_RECIPIENT=0x0 - +export PRIVATE_KEY="YOUR_PRIVATE_KEY" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4e87e5b..2651f42 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,4 @@ yarn.lock broadcast/* broadcast/*/31337/ -src/script/.deploy-config.json +.deploy-config.json \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index aab5da0c4f03721964ee8bda3d600034d4d343bb..06b58d30bb9ca9fd890ffaa103e731bc7fcf96cd 100755 GIT binary patch delta 61684 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 delta 36149 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 0) { + if (encodedAddress.length == 32) { // If the address exists, load it address existingBridgeAddress = abi.decode(encodedAddress, (address)); bridge = LineaStateBridge(existingBridgeAddress); diff --git a/src/script/DeployLineaWorldID.s.sol b/src/script/DeployLineaWorldID.s.sol index 18b41b3..42a52b0 100644 --- a/src/script/DeployLineaWorldID.s.sol +++ b/src/script/DeployLineaWorldID.s.sol @@ -29,12 +29,12 @@ contract DeployLineaWorldID is Script { vm.startBroadcast(privateKey); // Check if lineaWorldIdAddress is already in the JSON config - bytes memory encodedAddress = vm.parseJson(json, ".lineaWorldIDAddress"); + bytes memory lineaWorldIDAddressJson = vm.parseJson(json, ".lineaWorldIDAddress"); - if (encodedAddress.length > 0) { + if (lineaWorldIDAddressJson.length == 32) { + address lineaWorldIDAddress = abi.decode(bytes(lineaWorldIDAddressJson), (address)); // If the address exists, load it - address existingWorldIdAddress = abi.decode(encodedAddress, (address)); - lineaWorldId = LineaWorldID(existingWorldIdAddress); + lineaWorldId = LineaWorldID(lineaWorldIDAddress); console.log("Loaded existing LineaWorldID at:", address(lineaWorldId)); } else { // If the address doesn't exist, deploy a new contract diff --git a/src/script/deploy.js b/src/script/deploy.js index 88a82af..ffe423c 100644 --- a/src/script/deploy.js +++ b/src/script/deploy.js @@ -9,6 +9,11 @@ import { execSync } from "child_process"; // === Constants ================================================================================== const CONFIG_FILENAME = "src/script/.deploy-config.json"; const DEFAULT_RPC_URL = "http://localhost:8545"; +const DEFAULT_TREE_DEPTH = 30; +const DEFAULT_MESSENGER_L1 = "0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5"; +const DEFAULT_MESSENGER_L2 = "0x971e727e956690b9957be6d51Ec16E73AcAC83A7"; +const DEFAULT_WORLD_ID_MANAGER = "0x928a514350A403e2f5e3288C102f6B1CCABeb37C"; +const addressRegex = /0x[a-fA-F0-9]{40}/; // === Implementation ============================================================================= @@ -75,6 +80,30 @@ async function getPrivateKey(config) { } } +async function getMessageServiceAddressL1(config) { + if (!config.messageServiceAddressL1) { + config.messageServiceAddressL1 = process.env.MESSENGER_SERVICE_ADDRESS_L1; + } + if (!config.messageServiceAddressL1) { + config.messageServiceAddressL1 = await ask(`Enter L1 message service address: (${DEFAULT_MESSENGER_L1}) `); + } + if (!config.messageServiceAddressL1) { + config.messageServiceAddressL1 = DEFAULT_MESSENGER_L1; + } +} + +async function getMessageServiceAddressL2(config) { + if (!config.messageServiceAddressL2) { + config.messageServiceAddressL2 = process.env.MESSENGER_SERVICE_ADDRESS_L2; + } + if (!config.messageServiceAddressL2) { + config.messageServiceAddressL2 = await ask(`Enter L2 message service address: (${DEFAULT_MESSENGER_L2}) `); + } + if (!config.messageServiceAddressL2) { + config.messageServiceAddressL2 = DEFAULT_MESSENGER_L2; + } +} + async function getEthereumRpcUrl(config) { if (!config.ethereumRpcUrl) { config.ethereumRpcUrl = process.env.ETH_RPC_URL; @@ -123,7 +152,10 @@ async function getLineaEtherscanApiKey(config) { async function getTreeDepth(config) { if (!config.treeDepth) { - config.treeDepth = await ask("Enter WorldID tree depth: "); + config.treeDepth = await ask(`Enter WorldID tree depth: (${DEFAULT_TREE_DEPTH}) `); + } + if (!config.treeDepth) { + config.treeDepth = DEFAULT_TREE_DEPTH; } } @@ -145,6 +177,20 @@ async function getLineaStateBridgeAddress(config) { } } +async function getWorldIDIdentityManagerAddress(config) { + if (!config.worldIDIdentityManagerAddress) { + config.worldIDIdentityManagerAddress = process.env.WORLD_ID_IDENTITY_MANAGER_ADDRESS; + } + if (!config.worldIDIdentityManagerAddress) { + config.worldIDIdentityManagerAddress = await ask( + `Enter WorldID Identity Manager Address: (${DEFAULT_WORLD_ID_MANAGER}) `, + ); + } + if (!config.worldIDIdentityManagerAddress) { + config.worldIDIdentityManagerAddress = DEFAULT_WORLD_ID_MANAGER; + } +} + /////////////////////////////////////////////////////////////////// /// UTILS /// /////////////////////////////////////////////////////////////////// @@ -188,6 +234,8 @@ async function loadConfiguration(useConfig, environment) { } } else { spinner.succeed("Configuration not loaded"); + const data = JSON.stringify({}); + fs.writeFileSync(CONFIG_FILENAME, data); return {}; } } @@ -205,6 +253,22 @@ async function saveConfiguration(config) { fs.writeFileSync(CONFIG_FILENAME, data); } +export function parseJson(data) { + let jsonStartIndex = data.indexOf("{"); + let jsonEndIndex = data.lastIndexOf("}"); + if (jsonStartIndex !== -1 && jsonEndIndex !== -1) { + const jsonString = data.substring(jsonStartIndex, jsonEndIndex + 1); + try { + const jsonData = JSON.parse(jsonString); + return jsonData; + } catch (error) { + throw error; + } + } else { + return {}; + } +} + /////////////////////////////////////////////////////////////////// /// DEPLOYMENTS /// /////////////////////////////////////////////////////////////////// @@ -213,16 +277,27 @@ async function deployLineaWorldID(config) { const spinner = ora("Deploying LineaID on Linea...").start(); try { - const data = execSync( - `forge script src/script/DeployLineaWorldID.s.sol:DeployOpWorldID --fork-url ${config.lineaRpcUrl} \ - --etherscan-api-key ${config.lineaEtherscanApiKey} --broadcast --verify -vvvv`, - ); - console.log(data.toString()); + let command = `forge script src/script/DeployLineaWorldID.s.sol:DeployLineaWorldID --fork-url ${config.lineaRpcUrl} --broadcast --json`; + if (config.lineaEtherscanApiKey) { + command += ` --etherscan-api-key ${config.lineaEtherscanApiKey} --verify`; + } + const output = execSync(command); + const data = output.toString(); + const jsonData = parseJson(data); + if (jsonData.success) { + for (const log of jsonData.logs) { + if (!log.includes("LineaWorldID")) continue; + const match = data.match(addressRegex); + if (!match) continue; + const contractAddress = match[0]; + config.lineaWorldIDAddress = contractAddress; + } + } + spinner.succeed("DeployLineaWorldID.s.sol ran successfully!"); } catch (err) { - console.error(err); + spinner.fail("DeployLineaWorldID.s.sol failed!"); + throw err; } - - spinner.succeed("DeployLineaWorldID.s.sol ran successfully!"); } /////////////////////////////////////////////////////////////////// @@ -233,34 +308,48 @@ async function deployLineaStateBridgeMainnet(config) { const spinner = ora("Deploying Linea State Bridge...").start(); try { - const data = - execSync(`forge script src/script/DeployLineaStateBridgeMainnet.s.sol:DeployLineaStateBridgeMainnet --fork-url ${config.ethereumRpcUrl} \ - --etherscan-api-key ${config.ethereumEtherscanApiKey} --broadcast --verify -vvvv`); - console.log(data.toString()); + let command = `forge script src/script/DeployLineaStateBridge.s.sol:DeployLineaStateBridge --fork-url ${config.ethereumRpcUrl} --broadcast -vvvv --json`; + if (config.ethereumEtherscanApiKey) { + command += ` --etherscan-api-key ${config.lineaEtherscanApiKey} --verify`; + } + const output = execSync(command); + const data = output.toString(); + const jsonData = parseJson(data); + if (jsonData.success) { + for (const log of jsonData.logs) { + if (!log.includes("LineaStateBridge")) continue; + const match = data.match(addressRegex); + if (!match) continue; + const contractAddress = match[0]; + config.lineaStateBridgeAddress = contractAddress; + } + } + spinner.succeed("DeployLineaStateBridge.s.sol ran successfully!"); } catch (err) { - console.error(err); + spinner.fail("DeployLineaStateBridge.s.sol failed!"); + throw err; } - - spinner.succeed("DeployLineaStateBridgeMainnet.s.sol ran successfully!"); } /////////////////////////////////////////////////////////////////// /// INITIALIZE /// /////////////////////////////////////////////////////////////////// -async function InitializeLineaStateBridge(config) { - const spinner = ora("Initializing LineaStateBridge...").start(); +async function InitializeLineaWorldID(config) { + const spinner = ora("Initializing LineaWorldId...").start(); try { const data = execSync( - `forge script src/script/InitializeLineaStateBridge.s.sol:LineaStateBridge --fork-url ${config.lineaRpcUrl} --broadcast -vvvv --legacy`, + `forge script src/script/InitializeLineaWorldID.s.sol:InitializeLineaWorldID --fork-url ${config.lineaRpcUrl} --broadcast -vvvv --legacy --json`, ); - console.log(data.toString()); + const jsonData = parseJson(data.toString()); + if (jsonData.success) { + spinner.succeed("InitializeLineaStateBridge.s.sol ran successfully!"); + } } catch (err) { - console.error(err); + spinner.fail("InitializeLineaStateBridge.s.sol failed!"); + throw err; } - - spinner.succeed("InitializeLineaStateBridge.s.sol ran successfully!"); } /////////////////////////////////////////////////////////////////// @@ -269,21 +358,29 @@ async function InitializeLineaStateBridge(config) { async function deploymentMainnet(config) { dotenv.config(); - - await getPrivateKey(config); - await getEthereumRpcUrl(config); - await getLineaRpcUrl(config); - await getEthereumEtherscanApiKey(config); - await getLineaEtherscanApiKey(config); - await getTreeDepth(config); - await saveConfiguration(config); - await deployLineaWorldID(config); - await getLineaWorldIDAddress(config); - await saveConfiguration(config); - await deployLineaStateBridgeMainnet(config); - await getLineaStateBridgeAddress(config); - await saveConfiguration(config); - await InitializeLineaStateBridge(config); + try { + await getPrivateKey(config); + await getEthereumRpcUrl(config); + await getLineaRpcUrl(config); + await getEthereumEtherscanApiKey(config); + await getLineaEtherscanApiKey(config); + await getTreeDepth(config); + await getMessageServiceAddressL1(config); + await getMessageServiceAddressL2(config); + await saveConfiguration(config); + await deployLineaWorldID(config); + await saveConfiguration(config); + await getWorldIDIdentityManagerAddress(config); + await getLineaWorldIDAddress(config); + await saveConfiguration(config); + await deployLineaStateBridgeMainnet(config); + await saveConfiguration(config); + await getLineaStateBridgeAddress(config); + await saveConfiguration(config); + await InitializeLineaWorldID(config); + } catch (err) { + throw err; + } } /////////////////////////////////////////////////////////////////// @@ -313,4 +410,4 @@ async function main() { await program.parseAsync(); } -main().then(() => process.exit(0)); +main().then(() => process.exit(0)); \ No newline at end of file diff --git a/src/script/js/claimMessageModule.js b/src/script/js/claimMessageModule.js index fe38deb..24fd37e 100644 --- a/src/script/js/claimMessageModule.js +++ b/src/script/js/claimMessageModule.js @@ -63,4 +63,4 @@ async function claimPendingMessage(sender, destination, fee, value, messageHash, } // Export the module functions -export { claimPendingMessage }; +export { claimPendingMessage }; \ No newline at end of file diff --git a/src/services/lineaStateBridgeEventListener.js b/src/services/lineaStateBridgeEventListener.js index b6c86d1..00e5b24 100644 --- a/src/services/lineaStateBridgeEventListener.js +++ b/src/services/lineaStateBridgeEventListener.js @@ -29,4 +29,4 @@ export const lineaStateBridgeEventListener = async ({ console.log(`Transaction Hash: ${event.transactionHash}`); console.log('---------------------------'); }); -}; +}; \ No newline at end of file