From db102c4c10c14147efc44116612239445854a1f9 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 18 Oct 2024 15:43:57 +0530 Subject: [PATCH 01/36] feat: add script for simulating upgrades --- .../scripts/hardhat/index.ts | 1 + .../scripts/hardhat/simulateUpgrades.ts | 133 ++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts diff --git a/packages/solidity-contracts/scripts/hardhat/index.ts b/packages/solidity-contracts/scripts/hardhat/index.ts index 9d0021fd..bf020a27 100644 --- a/packages/solidity-contracts/scripts/hardhat/index.ts +++ b/packages/solidity-contracts/scripts/hardhat/index.ts @@ -12,3 +12,4 @@ export * from './withdrawalResume'; export * from './withdrawalBlacklist'; export * from './withdrawalWhitelist'; export * from './verifyMainnetDeployment'; +export * from './simulateUpgrades'; diff --git a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts new file mode 100644 index 00000000..2700fd77 --- /dev/null +++ b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts @@ -0,0 +1,133 @@ +import { task } from 'hardhat/config'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { ContractFactory, ethers } from 'ethers'; + +const SECURITY_COUNCIL_MULTISIG = '0x32da601374b38154f05904B16F44A1911Aa6f314'; +const ETH_BALANCE_TO_SET = '0xDE0B6B3A7640000'; // 1 ether +const GAS_AMOUNT = '0x7a1200'; +const GAS_PRICE = '0xF4241'; + +task( + 'simulate-upgrades', + 'Mocks proxy upgrades with tenderly simulation' +).setAction( + async (taskArgs: any, hre: HardhatRuntimeEnvironment): Promise => { + const network = hre.network.name; + + if (network !== 'mainnet') { + return; + } + + const { + upgrades: { prepareUpgrade }, + ethers, + } = hre; + + console.log( + `Mocking proxy upgrades on ${network}:${hre.network.config.chainId}...` + ); + + const signer = await ethers.provider.getSigner(0); + + // fund the signer for deploying the new implementation + const setBalancePayload = { + jsonrpc: '2.0', + method: 'tenderly_setBalance', + params: [[(await signer.getAddress()).toString()], ETH_BALANCE_TO_SET], + }; + + const rpc: string = process.env.RPC_URL!; + + await fetch(rpc, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(setBalancePayload), + }); + + const deployments = await hre.deployments.all(); + + for (const [contractName, deployment] of Object.entries(deployments)) { + if (deployment.abi.length == 0) continue; + + // mocking the deployment for the new implementation too, although this can be optional + // as we can run this cli after running the `upgradeVerification` script, so we'll have access to the new implementation + const factory = (await ethers.getContractFactory( + deployment.linkedData.factory + )) as ContractFactory; // Typing bug in `getContractFactory` + + const deploymentResponse = (await prepareUpgrade( + deployment.address, + factory, + { + kind: 'uups', + constructorArgs: deployment.linkedData.constructorArgs, + getTxResponse: true, + redeployImplementation: 'always', + } + )) as ethers.TransactionResponse; + + const receipt = await hre.ethers.provider.getTransactionReceipt( + deploymentResponse.hash + ); + + const newImplementationAddress = receipt?.contractAddress!; + + const proxy = new ethers.Contract(deployment.address, deployment.abi); + + // simulating upgrade enables to impersonate the security council multisig, without the need of signatures + const encodedUpgradeData = proxy.interface.encodeFunctionData( + 'upgradeTo', + [newImplementationAddress] + ); + const apiUrl = + 'https://api.tenderly.co/api/v1/account/fuel-network/project/preprod/vnets/d8f2a557-5b38-4e23-91a4-390bb5bb0750/transactions/simulate'; + const accessKey = 'jFGmjrxi116C8f-ODkCpOcLU6KIoQ04c'; + + const upgradeImplementationPayload = { + callArgs: { + from: SECURITY_COUNCIL_MULTISIG, + to: deployment.address, + gas: GAS_AMOUNT, + gasPrice: GAS_PRICE, + value: '0x0', + data: encodedUpgradeData, + }, + blockNumber: 'latest', + }; + + const response = await fetch(apiUrl, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'X-Access-Key': accessKey, + }, + body: JSON.stringify(upgradeImplementationPayload), + }); + + // simulations don't result in visible state changes so not checking the new implementation here, so instead we check + // the event logs that the `Upgraded` event was emitted + if (response.ok) { + const responsePayload: any = await response.json(); + + if (responsePayload.logs[0].name === 'Upgraded') { + console.log( + `✅ Upgrade simulation successful for ${contractName} (${deployment.address})` + ); + } else { + console.log( + `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` + ); + throw new Error('Upgrade simulation failed'); + } + } else { + console.log( + `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` + ); + throw new Error('Upgrade simulation failed'); + } + } + } +); From 484052d5aeeef33fb77cf177259fccbd821152d3 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 18 Oct 2024 15:49:52 +0530 Subject: [PATCH 02/36] chore: add try/catch --- .../scripts/hardhat/simulateUpgrades.ts | 157 +++++++++--------- 1 file changed, 80 insertions(+), 77 deletions(-) diff --git a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts index 2700fd77..83c189fa 100644 --- a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts +++ b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts @@ -37,97 +37,100 @@ task( }; const rpc: string = process.env.RPC_URL!; - - await fetch(rpc, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(setBalancePayload), - }); - - const deployments = await hre.deployments.all(); - - for (const [contractName, deployment] of Object.entries(deployments)) { - if (deployment.abi.length == 0) continue; - - // mocking the deployment for the new implementation too, although this can be optional - // as we can run this cli after running the `upgradeVerification` script, so we'll have access to the new implementation - const factory = (await ethers.getContractFactory( - deployment.linkedData.factory - )) as ContractFactory; // Typing bug in `getContractFactory` - - const deploymentResponse = (await prepareUpgrade( - deployment.address, - factory, - { - kind: 'uups', - constructorArgs: deployment.linkedData.constructorArgs, - getTxResponse: true, - redeployImplementation: 'always', - } - )) as ethers.TransactionResponse; - - const receipt = await hre.ethers.provider.getTransactionReceipt( - deploymentResponse.hash - ); - - const newImplementationAddress = receipt?.contractAddress!; - - const proxy = new ethers.Contract(deployment.address, deployment.abi); - - // simulating upgrade enables to impersonate the security council multisig, without the need of signatures - const encodedUpgradeData = proxy.interface.encodeFunctionData( - 'upgradeTo', - [newImplementationAddress] - ); - const apiUrl = - 'https://api.tenderly.co/api/v1/account/fuel-network/project/preprod/vnets/d8f2a557-5b38-4e23-91a4-390bb5bb0750/transactions/simulate'; - const accessKey = 'jFGmjrxi116C8f-ODkCpOcLU6KIoQ04c'; - - const upgradeImplementationPayload = { - callArgs: { - from: SECURITY_COUNCIL_MULTISIG, - to: deployment.address, - gas: GAS_AMOUNT, - gasPrice: GAS_PRICE, - value: '0x0', - data: encodedUpgradeData, - }, - blockNumber: 'latest', - }; - - const response = await fetch(apiUrl, { + try { + await fetch(rpc, { method: 'POST', headers: { - Accept: 'application/json', 'Content-Type': 'application/json', - 'X-Access-Key': accessKey, }, - body: JSON.stringify(upgradeImplementationPayload), + body: JSON.stringify(setBalancePayload), }); - // simulations don't result in visible state changes so not checking the new implementation here, so instead we check - // the event logs that the `Upgraded` event was emitted - if (response.ok) { - const responsePayload: any = await response.json(); + const deployments = await hre.deployments.all(); + + for (const [contractName, deployment] of Object.entries(deployments)) { + if (deployment.abi.length == 0) continue; + + // mocking the deployment for the new implementation too, although this can be optional + // as we can run this cli after running the `upgradeVerification` script, so we'll have access to the new implementation + const factory = (await ethers.getContractFactory( + deployment.linkedData.factory + )) as ContractFactory; // Typing bug in `getContractFactory` + + const deploymentResponse = (await prepareUpgrade( + deployment.address, + factory, + { + kind: 'uups', + constructorArgs: deployment.linkedData.constructorArgs, + getTxResponse: true, + redeployImplementation: 'always', + } + )) as ethers.TransactionResponse; + + const receipt = await hre.ethers.provider.getTransactionReceipt( + deploymentResponse.hash + ); - if (responsePayload.logs[0].name === 'Upgraded') { - console.log( - `✅ Upgrade simulation successful for ${contractName} (${deployment.address})` - ); + const newImplementationAddress = receipt?.contractAddress!; + + const proxy = new ethers.Contract(deployment.address, deployment.abi); + + // simulating upgrade enables to impersonate the security council multisig, without the need of signatures + const encodedUpgradeData = proxy.interface.encodeFunctionData( + 'upgradeTo', + [newImplementationAddress] + ); + const apiUrl = + 'https://api.tenderly.co/api/v1/account/fuel-network/project/preprod/vnets/d8f2a557-5b38-4e23-91a4-390bb5bb0750/transactions/simulate'; + const accessKey = 'jFGmjrxi116C8f-ODkCpOcLU6KIoQ04c'; + + const upgradeImplementationPayload = { + callArgs: { + from: SECURITY_COUNCIL_MULTISIG, + to: deployment.address, + gas: GAS_AMOUNT, + gasPrice: GAS_PRICE, + value: '0x0', + data: encodedUpgradeData, + }, + blockNumber: 'latest', + }; + + const response = await fetch(apiUrl, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'X-Access-Key': accessKey, + }, + body: JSON.stringify(upgradeImplementationPayload), + }); + + // simulations don't result in visible state changes so not checking the new implementation here, so instead we check + // the event logs that the `Upgraded` event was emitted + if (response.ok) { + const responsePayload: any = await response.json(); + + if (responsePayload.logs[0].name === 'Upgraded') { + console.log( + `✅ Upgrade simulation successful for ${contractName} (${deployment.address})` + ); + } else { + console.log( + `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` + ); + throw new Error('Upgrade simulation failed'); + } } else { console.log( `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` ); throw new Error('Upgrade simulation failed'); } - } else { - console.log( - `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` - ); - throw new Error('Upgrade simulation failed'); } + } catch (error) { + console.log(`❌ Upgrade simulation failed: ${error}`); } } ); From 075af21612886117934b00797db724b0d5b9b0c9 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 18 Oct 2024 16:03:07 +0530 Subject: [PATCH 03/36] chore: add task args --- .../scripts/hardhat/simulateUpgrades.ts | 222 +++++++++--------- 1 file changed, 113 insertions(+), 109 deletions(-) diff --git a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts index 83c189fa..4fe05d7a 100644 --- a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts +++ b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts @@ -7,130 +7,134 @@ const ETH_BALANCE_TO_SET = '0xDE0B6B3A7640000'; // 1 ether const GAS_AMOUNT = '0x7a1200'; const GAS_PRICE = '0xF4241'; -task( - 'simulate-upgrades', - 'Mocks proxy upgrades with tenderly simulation' -).setAction( - async (taskArgs: any, hre: HardhatRuntimeEnvironment): Promise => { - const network = hre.network.name; - - if (network !== 'mainnet') { - return; - } +task('simulate-upgrades', 'Mocks proxy upgrades with tenderly simulation') + .addParam('accountslug', 'tenderly account slug') + .addParam('projectname', 'tenderly project name') + .addParam('vnetid', 'tenderly virtual testnet id') + .addParam('accesskey', 'tenderly account access key') + .setAction( + async (taskArgs: any, hre: HardhatRuntimeEnvironment): Promise => { + const network = hre.network.name; + + if (network !== 'mainnet') { + return; + } - const { - upgrades: { prepareUpgrade }, - ethers, - } = hre; - - console.log( - `Mocking proxy upgrades on ${network}:${hre.network.config.chainId}...` - ); - - const signer = await ethers.provider.getSigner(0); - - // fund the signer for deploying the new implementation - const setBalancePayload = { - jsonrpc: '2.0', - method: 'tenderly_setBalance', - params: [[(await signer.getAddress()).toString()], ETH_BALANCE_TO_SET], - }; - - const rpc: string = process.env.RPC_URL!; - try { - await fetch(rpc, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(setBalancePayload), - }); - - const deployments = await hre.deployments.all(); - - for (const [contractName, deployment] of Object.entries(deployments)) { - if (deployment.abi.length == 0) continue; - - // mocking the deployment for the new implementation too, although this can be optional - // as we can run this cli after running the `upgradeVerification` script, so we'll have access to the new implementation - const factory = (await ethers.getContractFactory( - deployment.linkedData.factory - )) as ContractFactory; // Typing bug in `getContractFactory` - - const deploymentResponse = (await prepareUpgrade( - deployment.address, - factory, - { - kind: 'uups', - constructorArgs: deployment.linkedData.constructorArgs, - getTxResponse: true, - redeployImplementation: 'always', - } - )) as ethers.TransactionResponse; - - const receipt = await hre.ethers.provider.getTransactionReceipt( - deploymentResponse.hash - ); - - const newImplementationAddress = receipt?.contractAddress!; - - const proxy = new ethers.Contract(deployment.address, deployment.abi); - - // simulating upgrade enables to impersonate the security council multisig, without the need of signatures - const encodedUpgradeData = proxy.interface.encodeFunctionData( - 'upgradeTo', - [newImplementationAddress] - ); - const apiUrl = - 'https://api.tenderly.co/api/v1/account/fuel-network/project/preprod/vnets/d8f2a557-5b38-4e23-91a4-390bb5bb0750/transactions/simulate'; - const accessKey = 'jFGmjrxi116C8f-ODkCpOcLU6KIoQ04c'; - - const upgradeImplementationPayload = { - callArgs: { - from: SECURITY_COUNCIL_MULTISIG, - to: deployment.address, - gas: GAS_AMOUNT, - gasPrice: GAS_PRICE, - value: '0x0', - data: encodedUpgradeData, - }, - blockNumber: 'latest', - }; + const { + upgrades: { prepareUpgrade }, + ethers, + } = hre; + + console.log( + `Mocking proxy upgrades on ${network}:${hre.network.config.chainId}...` + ); + + const signer = await ethers.provider.getSigner(0); + + // fund the signer for deploying the new implementation + const setBalancePayload = { + jsonrpc: '2.0', + method: 'tenderly_setBalance', + params: [[(await signer.getAddress()).toString()], ETH_BALANCE_TO_SET], + }; - const response = await fetch(apiUrl, { + const rpc: string = process.env.RPC_URL!; + try { + await fetch(rpc, { method: 'POST', headers: { - Accept: 'application/json', 'Content-Type': 'application/json', - 'X-Access-Key': accessKey, }, - body: JSON.stringify(upgradeImplementationPayload), + body: JSON.stringify(setBalancePayload), }); - // simulations don't result in visible state changes so not checking the new implementation here, so instead we check - // the event logs that the `Upgraded` event was emitted - if (response.ok) { - const responsePayload: any = await response.json(); + const deployments = await hre.deployments.all(); + + for (const [contractName, deployment] of Object.entries(deployments)) { + if (deployment.abi.length == 0) continue; + + // mocking the deployment for the new implementation too, although this can be optional + // as we can run this cli after running the `upgradeVerification` script, so we'll have access to the new implementation + const factory = (await ethers.getContractFactory( + deployment.linkedData.factory + )) as ContractFactory; // Typing bug in `getContractFactory` + + const deploymentResponse = (await prepareUpgrade( + deployment.address, + factory, + { + kind: 'uups', + constructorArgs: deployment.linkedData.constructorArgs, + getTxResponse: true, + redeployImplementation: 'always', + } + )) as ethers.TransactionResponse; + + const receipt = await hre.ethers.provider.getTransactionReceipt( + deploymentResponse.hash + ); - if (responsePayload.logs[0].name === 'Upgraded') { - console.log( - `✅ Upgrade simulation successful for ${contractName} (${deployment.address})` - ); + const newImplementationAddress = receipt?.contractAddress!; + + const proxyContractInstance = new ethers.Contract( + deployment.address, + deployment.abi + ); + + // simulating upgrade enables to impersonate the security council multisig, without the need of signatures + const encodedUpgradeData = + proxyContractInstance.interface.encodeFunctionData('upgradeTo', [ + newImplementationAddress, + ]); + const apiUrl = `https://api.tenderly.co/api/v1/account/${taskArgs.accountslug}/project/${taskArgs.projectname}/vnets/${taskArgs.vnetid}/transactions/simulate`; + const accessKey = taskArgs.accesskey; + + const upgradeImplementationPayload = { + callArgs: { + from: SECURITY_COUNCIL_MULTISIG, + to: deployment.address, + gas: GAS_AMOUNT, + gasPrice: GAS_PRICE, + value: '0x0', + data: encodedUpgradeData, + }, + blockNumber: 'latest', + }; + + const response = await fetch(apiUrl, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'X-Access-Key': accessKey, + }, + body: JSON.stringify(upgradeImplementationPayload), + }); + + // simulations don't result in visible state changes so not checking the new implementation here, so instead we check + // the event logs that the `Upgraded` event was emitted + if (response.ok) { + const responsePayload: any = await response.json(); + + if (responsePayload.logs[0].name === 'Upgraded') { + console.log( + `✅ Upgrade simulation successful for ${contractName} (${deployment.address})` + ); + } else { + console.log( + `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` + ); + throw new Error('Upgrade simulation failed'); + } } else { console.log( `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` ); throw new Error('Upgrade simulation failed'); } - } else { - console.log( - `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` - ); - throw new Error('Upgrade simulation failed'); } + } catch (error) { + console.log(`❌ Upgrade simulation failed: ${error}`); } - } catch (error) { - console.log(`❌ Upgrade simulation failed: ${error}`); } - } -); + ); From 7c65435cd376f7bbcf85227645de45fc3bbf8037 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 18 Oct 2024 16:24:30 +0530 Subject: [PATCH 04/36] chore: upddate comment --- packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts index 4fe05d7a..d0d7ece3 100644 --- a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts +++ b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts @@ -54,7 +54,7 @@ task('simulate-upgrades', 'Mocks proxy upgrades with tenderly simulation') if (deployment.abi.length == 0) continue; // mocking the deployment for the new implementation too, although this can be optional - // as we can run this cli after running the `upgradeVerification` script, so we'll have access to the new implementation + // as we can run this cli after running the `upgradeVerification` script, so we'll have access to the new implementation and the updated constructor args const factory = (await ethers.getContractFactory( deployment.linkedData.factory )) as ContractFactory; // Typing bug in `getContractFactory` From 30c3f1b95adccd8b4c999bf158540f8f6b2379be Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 18 Oct 2024 16:32:46 +0530 Subject: [PATCH 05/36] chore: minor touchup --- .../solidity-contracts/scripts/hardhat/simulateUpgrades.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts index d0d7ece3..113cd98c 100644 --- a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts +++ b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts @@ -50,6 +50,9 @@ task('simulate-upgrades', 'Mocks proxy upgrades with tenderly simulation') const deployments = await hre.deployments.all(); + const apiUrl = `https://api.tenderly.co/api/v1/account/${taskArgs.accountslug}/project/${taskArgs.projectname}/vnets/${taskArgs.vnetid}/transactions/simulate`; + const accessKey = taskArgs.accesskey; + for (const [contractName, deployment] of Object.entries(deployments)) { if (deployment.abi.length == 0) continue; @@ -86,8 +89,6 @@ task('simulate-upgrades', 'Mocks proxy upgrades with tenderly simulation') proxyContractInstance.interface.encodeFunctionData('upgradeTo', [ newImplementationAddress, ]); - const apiUrl = `https://api.tenderly.co/api/v1/account/${taskArgs.accountslug}/project/${taskArgs.projectname}/vnets/${taskArgs.vnetid}/transactions/simulate`; - const accessKey = taskArgs.accesskey; const upgradeImplementationPayload = { callArgs: { From 631081ab98ac4c2130f3450ca13377d6b6a7636d Mon Sep 17 00:00:00 2001 From: viraj124 Date: Mon, 21 Oct 2024 14:20:18 +0530 Subject: [PATCH 06/36] chore: reduce the manaual arguments --- .../scripts/hardhat/simulateUpgrades.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts index 113cd98c..10dd465a 100644 --- a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts +++ b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts @@ -8,8 +8,6 @@ const GAS_AMOUNT = '0x7a1200'; const GAS_PRICE = '0xF4241'; task('simulate-upgrades', 'Mocks proxy upgrades with tenderly simulation') - .addParam('accountslug', 'tenderly account slug') - .addParam('projectname', 'tenderly project name') .addParam('vnetid', 'tenderly virtual testnet id') .addParam('accesskey', 'tenderly account access key') .setAction( @@ -39,6 +37,12 @@ task('simulate-upgrades', 'Mocks proxy upgrades with tenderly simulation') }; const rpc: string = process.env.RPC_URL!; + + const deployments = await hre.deployments.all(); + + const apiUrl = `https://api.tenderly.co/api/v1/account/fuel-network/project/preprod/vnets/${taskArgs.vnetid}/transactions/simulate`; + const accessKey = taskArgs.accesskey; + try { await fetch(rpc, { method: 'POST', @@ -48,16 +52,11 @@ task('simulate-upgrades', 'Mocks proxy upgrades with tenderly simulation') body: JSON.stringify(setBalancePayload), }); - const deployments = await hre.deployments.all(); - - const apiUrl = `https://api.tenderly.co/api/v1/account/${taskArgs.accountslug}/project/${taskArgs.projectname}/vnets/${taskArgs.vnetid}/transactions/simulate`; - const accessKey = taskArgs.accesskey; - for (const [contractName, deployment] of Object.entries(deployments)) { if (deployment.abi.length == 0) continue; - // mocking the deployment for the new implementation too, although this can be optional - // as we can run this cli after running the `upgradeVerification` script, so we'll have access to the new implementation and the updated constructor args + // mocking the deployment for the new implementation too. + // we currently assume that this script will be ran, after the `upgradeVerification` script is executed so we have access to the updated `constructorArgs`, otherwise we can allow the contructor arguments to be entered manually. const factory = (await ethers.getContractFactory( deployment.linkedData.factory )) as ContractFactory; // Typing bug in `getContractFactory` From 15d727a1bae3187f08085dc9172b2d88561afba3 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Mon, 21 Oct 2024 14:21:46 +0530 Subject: [PATCH 07/36] feat: add manual ci --- .github/workflows/manual-simulate-upgrade.yml | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/manual-simulate-upgrade.yml diff --git a/.github/workflows/manual-simulate-upgrade.yml b/.github/workflows/manual-simulate-upgrade.yml new file mode 100644 index 00000000..8b06e157 --- /dev/null +++ b/.github/workflows/manual-simulate-upgrade.yml @@ -0,0 +1,33 @@ +name: Manual Simulate Upgrade + +on: + workflow_dispatch: + inputs: + vnetId: + description: 'Enter the tenderly virtual testnet id' + required: true + type: string + accessKey: + description: 'Enter the tenderly account access key' + required: true + type: string + rpc: + description: 'Enter tenderly virtual network rpc' + required: true + type: string + +jobs: + simulate-upgrades: + runs-on: ubuntu-latest + env: + RPC_URL: ${{ github.event.inputs.rpc }} + steps: + - uses: actions/checkout@v3 + - uses: FuelLabs/github-actions/setups/node@master + with: + node-version: 20.16.0 + pnpm-version: 9.0.6 + - name: Simulate Upgrades + run: | + npx hardhat compile && npx hardhat simulate-upgrades --network mainnet --vnetid ${{ github.event.inputs.vnetId }} --accesskey ${{ github.event.inputs.accessKey }} + working-directory: ./packages/solidity-contracts From 74d79e56fa6fd1a92b118250dd0a81df19470d24 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Mon, 21 Oct 2024 14:25:02 +0530 Subject: [PATCH 08/36] chore: add changeset --- .changeset/silent-apples-smile.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/silent-apples-smile.md diff --git a/.changeset/silent-apples-smile.md b/.changeset/silent-apples-smile.md new file mode 100644 index 00000000..27374802 --- /dev/null +++ b/.changeset/silent-apples-smile.md @@ -0,0 +1,5 @@ +--- +'@fuel-bridge/solidity-contracts': minor +--- + +add manual CI to simulate upgrades with tenderly From d212d7b4bbcd4bee5f1160b35ffde9c2032a5c21 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 25 Oct 2024 11:50:40 +0530 Subject: [PATCH 09/36] chore: use env vars in the script --- .../scripts/hardhat/simulateUpgrades.ts | 228 +++++++++--------- 1 file changed, 114 insertions(+), 114 deletions(-) diff --git a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts index 10dd465a..9b62f531 100644 --- a/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts +++ b/packages/solidity-contracts/scripts/hardhat/simulateUpgrades.ts @@ -7,134 +7,134 @@ const ETH_BALANCE_TO_SET = '0xDE0B6B3A7640000'; // 1 ether const GAS_AMOUNT = '0x7a1200'; const GAS_PRICE = '0xF4241'; -task('simulate-upgrades', 'Mocks proxy upgrades with tenderly simulation') - .addParam('vnetid', 'tenderly virtual testnet id') - .addParam('accesskey', 'tenderly account access key') - .setAction( - async (taskArgs: any, hre: HardhatRuntimeEnvironment): Promise => { - const network = hre.network.name; - - if (network !== 'mainnet') { - return; - } - - const { - upgrades: { prepareUpgrade }, - ethers, - } = hre; - - console.log( - `Mocking proxy upgrades on ${network}:${hre.network.config.chainId}...` - ); - - const signer = await ethers.provider.getSigner(0); - - // fund the signer for deploying the new implementation - const setBalancePayload = { - jsonrpc: '2.0', - method: 'tenderly_setBalance', - params: [[(await signer.getAddress()).toString()], ETH_BALANCE_TO_SET], - }; - - const rpc: string = process.env.RPC_URL!; - - const deployments = await hre.deployments.all(); +task( + 'simulate-upgrades', + 'Mocks proxy upgrades with tenderly simulation' +).setAction( + async (taskArgs: any, hre: HardhatRuntimeEnvironment): Promise => { + const network = hre.network.name; + + if (network !== 'mainnet') { + return; + } - const apiUrl = `https://api.tenderly.co/api/v1/account/fuel-network/project/preprod/vnets/${taskArgs.vnetid}/transactions/simulate`; - const accessKey = taskArgs.accesskey; + const { + upgrades: { prepareUpgrade }, + ethers, + } = hre; + + console.log( + `Mocking proxy upgrades on ${network}:${hre.network.config.chainId}...` + ); + + const signer = await ethers.provider.getSigner(0); + + // fund the signer for deploying the new implementation + const setBalancePayload = { + jsonrpc: '2.0', + method: 'tenderly_setBalance', + params: [[(await signer.getAddress()).toString()], ETH_BALANCE_TO_SET], + }; + + const rpc: string = process.env.RPC_URL!; + + const deployments = await hre.deployments.all(); + + const apiUrl = `https://api.tenderly.co/api/v1/account/fuel-network/project/preprod/vnets/${process.env.VNET_ID}/transactions/simulate`; + const accessKey = process.env.ACCESS_KEY; + + try { + await fetch(rpc, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(setBalancePayload), + }); + + for (const [contractName, deployment] of Object.entries(deployments)) { + if (deployment.abi.length == 0) continue; + + // mocking the deployment for the new implementation too. + // we currently assume that this script will be ran, after the `upgradeVerification` script is executed so we have access to the updated `constructorArgs`, otherwise we can allow the contructor arguments to be entered manually. + const factory = (await ethers.getContractFactory( + deployment.linkedData.factory + )) as ContractFactory; // Typing bug in `getContractFactory` + + const deploymentResponse = (await prepareUpgrade( + deployment.address, + factory, + { + kind: 'uups', + constructorArgs: deployment.linkedData.constructorArgs, + getTxResponse: true, + redeployImplementation: 'always', + } + )) as ethers.TransactionResponse; + + const receipt = await hre.ethers.provider.getTransactionReceipt( + deploymentResponse.hash + ); + + const newImplementationAddress = receipt?.contractAddress!; + + const proxyContractInstance = new ethers.Contract( + deployment.address, + deployment.abi + ); + + // simulating upgrade enables to impersonate the security council multisig, without the need of signatures + const encodedUpgradeData = + proxyContractInstance.interface.encodeFunctionData('upgradeTo', [ + newImplementationAddress, + ]); + + const upgradeImplementationPayload = { + callArgs: { + from: SECURITY_COUNCIL_MULTISIG, + to: deployment.address, + gas: GAS_AMOUNT, + gasPrice: GAS_PRICE, + value: '0x0', + data: encodedUpgradeData, + }, + blockNumber: 'latest', + }; - try { - await fetch(rpc, { + const response = await fetch(apiUrl, { method: 'POST', headers: { + Accept: 'application/json', 'Content-Type': 'application/json', + 'X-Access-Key': accessKey, }, - body: JSON.stringify(setBalancePayload), - }); - - for (const [contractName, deployment] of Object.entries(deployments)) { - if (deployment.abi.length == 0) continue; - - // mocking the deployment for the new implementation too. - // we currently assume that this script will be ran, after the `upgradeVerification` script is executed so we have access to the updated `constructorArgs`, otherwise we can allow the contructor arguments to be entered manually. - const factory = (await ethers.getContractFactory( - deployment.linkedData.factory - )) as ContractFactory; // Typing bug in `getContractFactory` - - const deploymentResponse = (await prepareUpgrade( - deployment.address, - factory, - { - kind: 'uups', - constructorArgs: deployment.linkedData.constructorArgs, - getTxResponse: true, - redeployImplementation: 'always', - } - )) as ethers.TransactionResponse; - - const receipt = await hre.ethers.provider.getTransactionReceipt( - deploymentResponse.hash - ); - - const newImplementationAddress = receipt?.contractAddress!; + body: JSON.stringify(upgradeImplementationPayload), + } as any); // typing bug with the request headers - const proxyContractInstance = new ethers.Contract( - deployment.address, - deployment.abi - ); + // simulations don't result in visible state changes so not checking the new implementation here, so instead we check + // the event logs that the `Upgraded` event was emitted + if (response.ok) { + const responsePayload: any = await response.json(); - // simulating upgrade enables to impersonate the security council multisig, without the need of signatures - const encodedUpgradeData = - proxyContractInstance.interface.encodeFunctionData('upgradeTo', [ - newImplementationAddress, - ]); - - const upgradeImplementationPayload = { - callArgs: { - from: SECURITY_COUNCIL_MULTISIG, - to: deployment.address, - gas: GAS_AMOUNT, - gasPrice: GAS_PRICE, - value: '0x0', - data: encodedUpgradeData, - }, - blockNumber: 'latest', - }; - - const response = await fetch(apiUrl, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - 'X-Access-Key': accessKey, - }, - body: JSON.stringify(upgradeImplementationPayload), - }); - - // simulations don't result in visible state changes so not checking the new implementation here, so instead we check - // the event logs that the `Upgraded` event was emitted - if (response.ok) { - const responsePayload: any = await response.json(); - - if (responsePayload.logs[0].name === 'Upgraded') { - console.log( - `✅ Upgrade simulation successful for ${contractName} (${deployment.address})` - ); - } else { - console.log( - `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` - ); - throw new Error('Upgrade simulation failed'); - } + if (responsePayload.logs[0].name === 'Upgraded') { + console.log( + `✅ Upgrade simulation successful for ${contractName} (${deployment.address})` + ); } else { console.log( `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` ); throw new Error('Upgrade simulation failed'); } + } else { + console.log( + `❌ Upgrade simulation failed for ${contractName} (${deployment.address})` + ); + throw new Error('Upgrade simulation failed'); } - } catch (error) { - console.log(`❌ Upgrade simulation failed: ${error}`); } + } catch (error) { + console.log(`❌ Upgrade simulation failed: ${error}`); } - ); + } +); From 5268d89fffa9dac90afcbff5997c64a679785975 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 25 Oct 2024 11:51:12 +0530 Subject: [PATCH 10/36] chore: use env vars in the ci --- .github/workflows/manual-simulate-upgrade.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/manual-simulate-upgrade.yml b/.github/workflows/manual-simulate-upgrade.yml index 8b06e157..7bf4314b 100644 --- a/.github/workflows/manual-simulate-upgrade.yml +++ b/.github/workflows/manual-simulate-upgrade.yml @@ -21,6 +21,8 @@ jobs: runs-on: ubuntu-latest env: RPC_URL: ${{ github.event.inputs.rpc }} + VNET_ID: ${{ github.event.inputs.vnetId }} + ACCESS_KEY: ${{ github.event.inputs.accessKey }} steps: - uses: actions/checkout@v3 - uses: FuelLabs/github-actions/setups/node@master @@ -29,5 +31,5 @@ jobs: pnpm-version: 9.0.6 - name: Simulate Upgrades run: | - npx hardhat compile && npx hardhat simulate-upgrades --network mainnet --vnetid ${{ github.event.inputs.vnetId }} --accesskey ${{ github.event.inputs.accessKey }} + npx hardhat compile && npx hardhat simulate-upgrades --network mainnet working-directory: ./packages/solidity-contracts From 48d8d00404325147fafe5cfebc538c4bd373fe3b Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 29 Oct 2024 21:51:12 +0530 Subject: [PATCH 11/36] chore: setup tenderly fork config --- .../integration-tests/utils/fork.ts | 87 +++++++++++++++++++ packages/solidity-contracts/package.json | 1 + pnpm-lock.yaml | 23 +++-- 3 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 packages/solidity-contracts/integration-tests/utils/fork.ts diff --git a/packages/solidity-contracts/integration-tests/utils/fork.ts b/packages/solidity-contracts/integration-tests/utils/fork.ts new file mode 100644 index 00000000..4b43ae21 --- /dev/null +++ b/packages/solidity-contracts/integration-tests/utils/fork.ts @@ -0,0 +1,87 @@ +import axios, { AxiosResponse } from 'axios'; +import * as dotenv from 'dotenv'; +import { JsonRpcProvider, Signer } from 'ethers'; + +dotenv.config(); + +type TenderlyFork = { + block_number?: number; + network_id: string; + transaction_index?: number; + initial_balance?: number; + chain_config?: { + chain_id: number; + homestead_block: number; + dao_fork_support: boolean; + eip_150_block: number; + eip_150_hash: string; + eip_155_block: number; + eip_158_block: number; + byzantium_block: number; + constantinople_block: number; + petersburg_block: number; + istanbul_block: number; + berlin_block: number; + }; +}; + +export type EthersOnTenderlyFork = { + id: number; + provider: JsonRpcProvider; + blockNumber: number; + /** + * map from address to given address' balance + */ + accounts: { [key: string]: string }; + signers: Signer[]; + removeFork: () => Promise>; +}; + +export const anAxiosOnTenderly = () => + axios.create({ + baseURL: 'https://api.tenderly.co/api/v1', + headers: { + 'X-Access-Key': process.env.TENDERLY_ACCESS_KEY, + 'Content-Type': 'application/json', + }, + }); + +export async function forkForTest( + fork: TenderlyFork +): Promise { + const projectUrl = `account/${process.env.TENDERLY_USER}/project/${process.env.TENDERLY_PROJECT}`; + const axiosOnTenderly = anAxiosOnTenderly(); + + const forkResponse = await axiosOnTenderly.post(`${projectUrl}/fork`, fork); + const forkId = forkResponse.data.root_transaction.fork_id; + + const provider = new JsonRpcProvider( + `https://rpc.tenderly.co/fork/${forkId}` + ); + + const bn = ( + forkResponse.data.root_transaction.receipt.blockNumber as string + ).replace('0x', ''); + const blockNumber: number = Number.parseInt(bn, 16); + + console.info( + `\nForked with fork id ${forkId} at block number ${blockNumber}\nhttps://dashboard.tenderly.co/${process.env.TENDERLY_USER}/${process.env.TENDERLY_PROJECT}/fork/${forkId}\n` + ); + + const accounts = forkResponse.data.simulation_fork.accounts; + const signers = await Promise.all( + Object.keys(accounts).map(async (address) => provider.getSigner(address)) + ); + + return { + provider, + accounts, + signers, + blockNumber, + id: forkId, + removeFork: async () => { + console.log('Removing test fork', forkId); + return await axiosOnTenderly.delete(`${projectUrl}/fork/${forkId}`); + }, + }; +} \ No newline at end of file diff --git a/packages/solidity-contracts/package.json b/packages/solidity-contracts/package.json index a997adca..8ce5dd6f 100644 --- a/packages/solidity-contracts/package.json +++ b/packages/solidity-contracts/package.json @@ -52,6 +52,7 @@ "@types/node": "^18.11.9", "@typescript-eslint/eslint-plugin": "^5.43.0", "@typescript-eslint/parser": "^5.43.0", + "axios": "^1.7.7", "chai": "^4.3.7", "cors": "2.8.5", "dotenv": "^16.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c081144..7d5ed25d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -193,6 +193,9 @@ importers: '@typescript-eslint/parser': specifier: ^5.43.0 version: 5.62.0(eslint@8.57.0)(typescript@4.9.5) + axios: + specifier: ^1.7.7 + version: 1.7.7(debug@4.3.4) chai: specifier: ^4.3.7 version: 4.4.1 @@ -2652,8 +2655,8 @@ packages: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} engines: {node: '>=4'} - axios@1.7.5: - resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -3393,11 +3396,13 @@ packages: eslint@5.16.0: resolution: {integrity: sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==} engines: {node: ^6.14.0 || ^8.10.0 || >=9.10.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@5.0.1: @@ -7915,7 +7920,7 @@ snapshots: '@openzeppelin/defender-admin-client@1.54.1(bufferutil@4.0.5)(debug@4.3.4)(utf-8-validate@5.0.7)': dependencies: '@openzeppelin/defender-base-client': 1.54.1(debug@4.3.4) - axios: 1.7.5(debug@4.3.4) + axios: 1.7.7(debug@4.3.4) ethers: 5.7.2(bufferutil@4.0.5)(utf-8-validate@5.0.7) lodash: 4.17.21 node-fetch: 2.7.0 @@ -7929,7 +7934,7 @@ snapshots: dependencies: amazon-cognito-identity-js: 6.3.12 async-retry: 1.3.3 - axios: 1.7.5(debug@4.3.4) + axios: 1.7.7(debug@4.3.4) lodash: 4.17.21 node-fetch: 2.7.0 transitivePeerDependencies: @@ -7946,7 +7951,7 @@ snapshots: '@openzeppelin/defender-sdk-deploy-client@1.12.0(debug@4.3.4)': dependencies: '@openzeppelin/defender-sdk-base-client': 1.12.0 - axios: 1.7.5(debug@4.3.4) + axios: 1.7.7(debug@4.3.4) lodash: 4.17.21 transitivePeerDependencies: - debug @@ -7955,7 +7960,7 @@ snapshots: '@openzeppelin/defender-sdk-network-client@1.12.0(debug@4.3.4)': dependencies: '@openzeppelin/defender-sdk-base-client': 1.12.0 - axios: 1.7.5(debug@4.3.4) + axios: 1.7.7(debug@4.3.4) lodash: 4.17.21 transitivePeerDependencies: - debug @@ -9083,7 +9088,7 @@ snapshots: axe-core@4.7.0: {} - axios@1.7.5(debug@4.3.4): + axios@1.7.7(debug@4.3.4): dependencies: follow-redirects: 1.15.6(debug@4.3.4) form-data: 4.0.0 @@ -10776,7 +10781,7 @@ snapshots: '@ethersproject/transactions': 5.7.0 '@ethersproject/wallet': 5.7.0 '@types/qs': 6.9.15 - axios: 1.7.5(debug@4.3.4) + axios: 1.7.7(debug@4.3.4) chalk: 4.1.2 chokidar: 3.6.0 debug: 4.3.4(supports-color@8.1.1) @@ -13108,4 +13113,4 @@ snapshots: zksync-ethers@5.9.2(ethers@5.7.2(bufferutil@4.0.5)(utf-8-validate@5.0.7)): dependencies: - ethers: 5.7.2(bufferutil@4.0.5)(utf-8-validate@5.0.7) \ No newline at end of file + ethers: 5.7.2(bufferutil@4.0.5)(utf-8-validate@5.0.7) From d1133a64943986cc5c52bfb29fc75974d80875ae Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 1 Nov 2024 21:08:19 +0530 Subject: [PATCH 12/36] chore: remove unused file --- .../integration-tests/utils/fork.ts | 87 ------------------- 1 file changed, 87 deletions(-) delete mode 100644 packages/solidity-contracts/integration-tests/utils/fork.ts diff --git a/packages/solidity-contracts/integration-tests/utils/fork.ts b/packages/solidity-contracts/integration-tests/utils/fork.ts deleted file mode 100644 index 4b43ae21..00000000 --- a/packages/solidity-contracts/integration-tests/utils/fork.ts +++ /dev/null @@ -1,87 +0,0 @@ -import axios, { AxiosResponse } from 'axios'; -import * as dotenv from 'dotenv'; -import { JsonRpcProvider, Signer } from 'ethers'; - -dotenv.config(); - -type TenderlyFork = { - block_number?: number; - network_id: string; - transaction_index?: number; - initial_balance?: number; - chain_config?: { - chain_id: number; - homestead_block: number; - dao_fork_support: boolean; - eip_150_block: number; - eip_150_hash: string; - eip_155_block: number; - eip_158_block: number; - byzantium_block: number; - constantinople_block: number; - petersburg_block: number; - istanbul_block: number; - berlin_block: number; - }; -}; - -export type EthersOnTenderlyFork = { - id: number; - provider: JsonRpcProvider; - blockNumber: number; - /** - * map from address to given address' balance - */ - accounts: { [key: string]: string }; - signers: Signer[]; - removeFork: () => Promise>; -}; - -export const anAxiosOnTenderly = () => - axios.create({ - baseURL: 'https://api.tenderly.co/api/v1', - headers: { - 'X-Access-Key': process.env.TENDERLY_ACCESS_KEY, - 'Content-Type': 'application/json', - }, - }); - -export async function forkForTest( - fork: TenderlyFork -): Promise { - const projectUrl = `account/${process.env.TENDERLY_USER}/project/${process.env.TENDERLY_PROJECT}`; - const axiosOnTenderly = anAxiosOnTenderly(); - - const forkResponse = await axiosOnTenderly.post(`${projectUrl}/fork`, fork); - const forkId = forkResponse.data.root_transaction.fork_id; - - const provider = new JsonRpcProvider( - `https://rpc.tenderly.co/fork/${forkId}` - ); - - const bn = ( - forkResponse.data.root_transaction.receipt.blockNumber as string - ).replace('0x', ''); - const blockNumber: number = Number.parseInt(bn, 16); - - console.info( - `\nForked with fork id ${forkId} at block number ${blockNumber}\nhttps://dashboard.tenderly.co/${process.env.TENDERLY_USER}/${process.env.TENDERLY_PROJECT}/fork/${forkId}\n` - ); - - const accounts = forkResponse.data.simulation_fork.accounts; - const signers = await Promise.all( - Object.keys(accounts).map(async (address) => provider.getSigner(address)) - ); - - return { - provider, - accounts, - signers, - blockNumber, - id: forkId, - removeFork: async () => { - console.log('Removing test fork', forkId); - return await axiosOnTenderly.delete(`${projectUrl}/fork/${forkId}`); - }, - }; -} \ No newline at end of file From f8c10e1d7973444f51d0e50f7cae74dd048c350c Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 1 Nov 2024 21:31:35 +0530 Subject: [PATCH 13/36] chore: add script for docker setup for integration tests --- packages/solidity-contracts/scripts/node:up.sh | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/solidity-contracts/scripts/node:up.sh diff --git a/packages/solidity-contracts/scripts/node:up.sh b/packages/solidity-contracts/scripts/node:up.sh new file mode 100644 index 00000000..71620aaf --- /dev/null +++ b/packages/solidity-contracts/scripts/node:up.sh @@ -0,0 +1 @@ +docker compose -f ./docker/docker-compose.yml up -d --build \ No newline at end of file From 5c851b0e1369e9f4edc15b4a8329bf3199931f47 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 1 Nov 2024 21:32:03 +0530 Subject: [PATCH 14/36] chore: add placeholder contract --- packages/solidity-contracts/contracts/test/PlaceHolder.sol | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/solidity-contracts/contracts/test/PlaceHolder.sol diff --git a/packages/solidity-contracts/contracts/test/PlaceHolder.sol b/packages/solidity-contracts/contracts/test/PlaceHolder.sol new file mode 100644 index 00000000..ae3c2380 --- /dev/null +++ b/packages/solidity-contracts/contracts/test/PlaceHolder.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +/// @dev The only purpose of this contract is to be copied during the Dockerfile build +/// so that hardhat downloads the compiler and it gets cached +contract PlaceHolder {} \ No newline at end of file From 20332d29879a25a06af1c3719f17829887f4161b Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 1 Nov 2024 21:32:42 +0530 Subject: [PATCH 15/36] chore: add fork config in hardhat config --- packages/solidity-contracts/hardhat.config.ts | 4 ++++ packages/solidity-contracts/package.json | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/solidity-contracts/hardhat.config.ts b/packages/solidity-contracts/hardhat.config.ts index 2815dc62..144caa9a 100644 --- a/packages/solidity-contracts/hardhat.config.ts +++ b/packages/solidity-contracts/hardhat.config.ts @@ -41,6 +41,10 @@ const config: HardhatUserConfig = { accounts: { count: 128, }, + forking: { + enabled: true, + url: process.env.TENDERLY_RPC_URL!, + }, deploy: ['deploy/hardhat'], }, localhost: { diff --git a/packages/solidity-contracts/package.json b/packages/solidity-contracts/package.json index 8ce5dd6f..04e92a81 100644 --- a/packages/solidity-contracts/package.json +++ b/packages/solidity-contracts/package.json @@ -20,10 +20,12 @@ "compile": "pnpm hardhat compile --show-stack-traces", "coverage": "pnpm run build && pnpm hardhat coverage --temp artifacts --network hardhat", "check": "pnpm solhint \"contracts/**/*.sol\"", - "node": "pnpm hardhat node --network hardhat", + "node": "pnpm hardhat node --network hardhat --hostname 0.0.0.0", "start-mining": "pnpm hardhat run --no-compile --network localhost scripts/startAutoMining.ts", "serve-deployments": "pnpm ts-node scripts/serveDeployments.ts", "test": "pnpm hardhat test", + "node:up": "sh ./scripts/node:up.sh", + "hardhat:test:integration": "DISABLE_GAS_REPORTER=true pnpm hardhat --network mainnetFork test fork-integration-tests/**/*.ts --bail", "test-no-compile": "pnpm hardhat test --no-compile", "test-parallel": "pnpx mocha 'test/**/*.ts' --recursive --parallel --require hardhat/register", "prettier": "prettier --write --plugin=prettier-plugin-solidity 'contracts/**/*.sol'", From dcf704a0199b0ea5817aa7f6cfa4521374d8f4d2 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 1 Nov 2024 21:36:50 +0530 Subject: [PATCH 16/36] feat: add docker setup for tenderly fork test suite --- .../docker/block-committer/block-committer.sh | 30 ++ .../docker/docker-compose.yml | 55 ++++ .../docker/docker.block_committer.Dockerfile | 26 ++ .../docker/docker.fuel_core.Dockerfile | 54 ++++ .../docker/docker.l1_chain.Dockerfile | 42 +++ .../docker/fuel_core/fuel_core.sh | 23 ++ .../docker/fuel_core/genesis_coins.json | 299 ++++++++++++++++++ .../docker/l1-chain/l1_chain.sh | 25 ++ 8 files changed, 554 insertions(+) create mode 100644 packages/solidity-contracts/docker/block-committer/block-committer.sh create mode 100644 packages/solidity-contracts/docker/docker-compose.yml create mode 100644 packages/solidity-contracts/docker/docker.block_committer.Dockerfile create mode 100644 packages/solidity-contracts/docker/docker.fuel_core.Dockerfile create mode 100644 packages/solidity-contracts/docker/docker.l1_chain.Dockerfile create mode 100644 packages/solidity-contracts/docker/fuel_core/fuel_core.sh create mode 100644 packages/solidity-contracts/docker/fuel_core/genesis_coins.json create mode 100644 packages/solidity-contracts/docker/l1-chain/l1_chain.sh diff --git a/packages/solidity-contracts/docker/block-committer/block-committer.sh b/packages/solidity-contracts/docker/block-committer/block-committer.sh new file mode 100644 index 00000000..3ccbef09 --- /dev/null +++ b/packages/solidity-contracts/docker/block-committer/block-committer.sh @@ -0,0 +1,30 @@ +#!/bin/sh +set -euo + +RETRIES=${RETRIES:-60} +DELAY=${DELAY:-10} + +# wait for the base layer to be up +echo "Waiting for Fuel Core chain." +curl \ + --fail \ + --show-error \ + --silent \ + --retry-connrefused \ + --retry $RETRIES \ + --retry-delay $DELAY \ + $FUEL_GRAPHQL_ENDPOINT/health > /dev/null +echo "Connected to Fuel Core chain." + + +# PORTAL_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/mainnetFork/FuelMessagePortal.json) + +# pull data from deployer dump +export STATE_CONTRACT_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/FuelChainState.json) +echo "STATE_CONTRACT_ADDRESS: $STATE_CONTRACT_ADDRESS" +echo "FUEL_GRAPHQL_ENDPOINT: $FUEL_GRAPHQL_ENDPOINT" +echo "RPC: $ETHEREUM_RPC" + +# start the Block Commiter +echo "Launching block committer with STATE_CONTRACT_ADDRESS=$STATE_CONTRACT_ADDRESS" +exec /root/fuel-block-committer \ No newline at end of file diff --git a/packages/solidity-contracts/docker/docker-compose.yml b/packages/solidity-contracts/docker/docker-compose.yml new file mode 100644 index 00000000..33d30f2b --- /dev/null +++ b/packages/solidity-contracts/docker/docker-compose.yml @@ -0,0 +1,55 @@ +version: '3.4' + +services: + l1_chain: + platform: linux/amd64 + image: fueldev/l1chain:${DOCKER_TAG_L1_CHAIN:-latest} + container_name: l1_chain + build: + context: ../ + dockerfile: ./docker/docker.l1_chain.Dockerfile + volumes: + - ../deployments/localhost:/l1chain/fuel-v2-contracts/deployments + stop_grace_period: 1s + + fuel_core: + container_name: fuel_core + depends_on: + l1_chain: + condition: service_started + volumes: + - ../deployments/localhost:/l1chain/fuel-v2-contracts/deployments + platform: linux/amd64 + build: + context: ../ + dockerfile: ./docker/docker.fuel_core.Dockerfile + environment: + L1_CHAIN_HTTP: http://l1_chain:8545 + RUST_LOG: debug + DEBUG: true + CONSENSUS_KEY_SECRET: $CONSENSUS_KEY_SECRET + ports: + # expose the service to the host for integration testing + - ${FUEL_CORE_HTTP_PORT:-4000}:4001 + stop_grace_period: 1s + restart: always + + fuel_block_commiter: + container_name: fuel_block_commiter + depends_on: + fuel_core: + condition: service_started + volumes: + - ../deployments/localhost:/l1chain/fuel-v2-contracts/deployments + platform: linux/amd64 + build: + context: ../ + dockerfile: ./docker/docker.block_committer.Dockerfile + environment: + ETHEREUM_RPC: ws://l1_chain:8545/ + FUEL_GRAPHQL_ENDPOINT: http://fuel_core:4001/v1 + ports: + # expose the service to the host for integration testing + - ${COMMITTER_HTTP_PORT:-8888}:8888 + stop_grace_period: 1s + restart: always diff --git a/packages/solidity-contracts/docker/docker.block_committer.Dockerfile b/packages/solidity-contracts/docker/docker.block_committer.Dockerfile new file mode 100644 index 00000000..f1979b06 --- /dev/null +++ b/packages/solidity-contracts/docker/docker.block_committer.Dockerfile @@ -0,0 +1,26 @@ +FROM ghcr.io/fuellabs/fuel-block-committer:v0.4.0 + +ARG ETHEREUM_WALLET_KEY="0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" +ARG COMMIT_INTERVAL=30 +ARG COMMITER_IP=0.0.0.0 +ARG COMMITER_PORT=8888 +ARG ETHEREUM_CHAIN="hardhat" + +# dependencies +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update && apt install -y curl jq && rm -rf /var/lib/apt/lists/* + +# copy chain config +WORKDIR /block-committer + +# expose fuel node port +ENV ETHEREUM_WALLET_KEY="${ETHEREUM_WALLET_KEY}" +ENV COMMIT_INTERVAL="${COMMIT_INTERVAL}" +ENV HOST="${COMMITER_IP}" +ENV PORT="${COMMITER_PORT}" +ENV ETHEREUM_CHAIN="${ETHEREUM_CHAIN}" +EXPOSE ${PORT} + +# copy over script and run +COPY ./docker/block-committer/block-committer.sh . +CMD ["sh", "./block-committer.sh"] \ No newline at end of file diff --git a/packages/solidity-contracts/docker/docker.fuel_core.Dockerfile b/packages/solidity-contracts/docker/docker.fuel_core.Dockerfile new file mode 100644 index 00000000..06899e75 --- /dev/null +++ b/packages/solidity-contracts/docker/docker.fuel_core.Dockerfile @@ -0,0 +1,54 @@ +# # IMPORTANT! +# # Make sure to check: +# # https://github.com/FuelLabs/chain-configuration/tree/master/upgradelog/ignition-testnet +# # and apply the latest state_transition_function and consensus_parameter +# # when upgrading fuel-core +FROM ghcr.io/fuellabs/fuel-core:v0.36.0 + +ARG FUEL_IP=0.0.0.0 +ARG FUEL_PORT=4001 +ARG CONSENSUS_KEY_SECRET=$CONSENSUS_KEY_SECRET + +# dependencies +RUN apt update && apt install -y git curl jq && rm -rf /var/lib/apt/lists/* + +# copy chain config +WORKDIR /fuel + +COPY ./docker/fuel_core/genesis_coins.json . + +RUN git clone \ + https://github.com/FuelLabs/chain-configuration.git \ + /chain-configuration + +# Anchor the chain configuration to a specific commit to avoid CI breaking +RUN cd /chain-configuration && git fetch && git checkout c1c4d3bca57f64118a8d157310e0a839ae5c180a + +# Copy the base local configuration +RUN cp -R /chain-configuration/local/* ./ + +# Copy the devnet consensus parameters and state transition bytecode +RUN cp /chain-configuration/upgradelog/ignition-devnet/consensus_parameters/9.json \ + ./latest_consensus_parameters.json +RUN cp /chain-configuration/upgradelog/ignition-devnet/state_transition_function/9.wasm \ + ./state_transition_bytecode.wasm + +# update local state_config with custom genesis coins config +RUN jq '.coins = input' \ + state_config.json genesis_coins.json > tmp.json \ + && mv tmp.json state_config.json + +# update local state_config with testnet consensus parameters +RUN jq '.consensus_parameters = input' \ + state_config.json latest_consensus_parameters.json > tmp.json \ + && mv tmp.json state_config.json + +# expose fuel node port +ENV FUEL_IP="${FUEL_IP}" +ENV FUEL_PORT="${FUEL_PORT}" +ENV CONSENSUS_KEY_SECRET="${CONSENSUS_KEY_SECRET}" +EXPOSE ${FUEL_PORT} + +# copy over script and run +COPY ./docker/fuel_core/fuel_core.sh . +CMD ["sh", "./fuel_core.sh"] \ No newline at end of file diff --git a/packages/solidity-contracts/docker/docker.l1_chain.Dockerfile b/packages/solidity-contracts/docker/docker.l1_chain.Dockerfile new file mode 100644 index 00000000..9463feb3 --- /dev/null +++ b/packages/solidity-contracts/docker/docker.l1_chain.Dockerfile @@ -0,0 +1,42 @@ +FROM node:20-alpine AS BUILD_IMAGE + +# dependencies +RUN apk --no-cache add git curl +RUN npm i -g pnpm + +WORKDIR /l1chain/fuel-v2-contracts + +ARG L1_IP=0.0.0.0 +ARG L1_PORT=8545 + +# clone the contracts repo +COPY package.json /l1chain/fuel-v2-contracts/ + +# copy over the fuel chain and replace consts values + +# build the ethereum contracts and environment +RUN pnpm install +COPY contracts/test/PlaceHolder.sol /l1chain/fuel-v2-contracts/contracts/test/PlaceHolder.sol +COPY .env /l1chain/fuel-v2-contracts/ +COPY hardhat.config.ts /l1chain/fuel-v2-contracts/ +COPY scripts/ /l1chain/fuel-v2-contracts/scripts/ +RUN pnpm compile + +# replace the fuel chain consts values and change contract code +COPY contracts/ /l1chain/fuel-v2-contracts/contracts/ +COPY deploy/ /l1chain/fuel-v2-contracts/deploy/ +COPY protocol/ /l1chain/fuel-v2-contracts/protocol/ + + +# remove build dependencies +# RUN pnpm prune --prod +RUN pnpm compile + +ENV L1_IP="${L1_IP}" +ENV L1_PORT="${L1_PORT}" +EXPOSE ${L1_PORT} +EXPOSE ${SERVE_PORT} + +# copy over script and run +COPY ./docker/l1-chain/l1_chain.sh /l1chain/l1_chain.sh +CMD ["sh", "/l1chain/l1_chain.sh"] diff --git a/packages/solidity-contracts/docker/fuel_core/fuel_core.sh b/packages/solidity-contracts/docker/fuel_core/fuel_core.sh new file mode 100644 index 00000000..28d01a85 --- /dev/null +++ b/packages/solidity-contracts/docker/fuel_core/fuel_core.sh @@ -0,0 +1,23 @@ +#!/bin/sh +set -euo + +PORTAL_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/FuelMessagePortal.json) + +echo "Launching fuel node with PORTAL_ADDRESS=$PORTAL_ADDRESS" + +exec /root/fuel-core run \ + --ip $FUEL_IP \ + --port $FUEL_PORT \ + --db-type in-memory \ + --utxo-validation \ + --vm-backtrace \ + --enable-relayer \ + --relayer $L1_CHAIN_HTTP \ + --relayer-v2-listening-contracts $PORTAL_ADDRESS \ + --relayer-da-deploy-height 0 \ + --poa-interval-period 1sec \ + --debug \ + --min-gas-price 0 \ + --snapshot ./ + +echo "Launched fuel node" \ No newline at end of file diff --git a/packages/solidity-contracts/docker/fuel_core/genesis_coins.json b/packages/solidity-contracts/docker/fuel_core/genesis_coins.json new file mode 100644 index 00000000..fd78763e --- /dev/null +++ b/packages/solidity-contracts/docker/fuel_core/genesis_coins.json @@ -0,0 +1,299 @@ +[ + { + "owner": "0xc8e615a4089466174459ef19cfd257d2e17adfabff3b8f219dbb5fb4eca87c50", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000001", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x92dffc873b56f219329ed03bb69bebe8c3d8b041088574882f7a6404f02e2f28", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000002", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x456bdaffaf74fe03521754ac445d148033c0c6acf7d593132c43f92fdbc7324c", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000003", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x639880ece7753a32e09164d14dad7436c57737e567f18b98f6ee30fec6b247ec", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000004", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0xfd8c520ef8caff0ad3289aa64acecd4ef86ac8f643fd9b76bf2d163a86a66716", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000005", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x8247104854dd733cb475901d55047f57cb3c8cafe3a9f7233de3325b8bf56a5c", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000006", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x53de37ae51fcfecb17ee3589f68904ac75bf5ec109edeb1065ccb63145287da6", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000007", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x17f4bef51f63f0c28af20d4223a3bf5cf1735a3b7ec52b4fcfbdbb5f30582a6b", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000008", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x95725e9083d8ed1cb52dcf6429d0cfce00cc375eeac5b620b5c36f5b1e734b31", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000009", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x08792a75d5714165aa117fd75450f9efcfb7124d034ef271f2919e4cc287046c", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x000000000000000000000000000000000000000000000000000000000000000a", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x6a16fba49dbdf7689c52b7a22951a54dc164076d27bdc6042b5d8377d68ca10b", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x000000000000000000000000000000000000000000000000000000000000000b", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x6494a55c0e3da212fdd0515507d00ae99151c7966e1448079c76bc447b577254", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x000000000000000000000000000000000000000000000000000000000000000c", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0xe0e1c94a9f9e02454772813ba6a6261b5228db1fabde3a68b23c0e9744ce22fc", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x000000000000000000000000000000000000000000000000000000000000000d", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x425f3e91aedff36e72ae60a8a1d328e625d66d39fcc98d5fcd1ba7df65a9f878", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x000000000000000000000000000000000000000000000000000000000000000e", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0xe2242f2e4971c34bc6fe5e1c0043b1aba717cb6a51f31f0dc0708cca73df905a", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x000000000000000000000000000000000000000000000000000000000000000f", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x6aa67cb316f329111dc708bb766360f5026a614edb11882e14d4cc04f26e0a08", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000010", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0xef5c2b712c4f3a10a37d6371cab2b03a6afd12e4ffcc9567d45d8c4b6e217e5c", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000011", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0xa82f66642de54993b32036eef7914f2dbaa217aa3209707b64d0b90187456a1f", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000012", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x9c9c1f3346b54fe6cb379fa27f338464592515fd865656089c4a23ac34390e6f", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000013", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "owner": "0x8a332bc33f4c10ad36392a9ca958a5ddf56081cc764f61613ea119e42ced6ac5", + "amount": 1000000000000, + "asset_id": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07", + "tx_id": "0x0000000000000000000000000000000000000000000000000000000000000014", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0 + }, + { + "tx_id": "0000000000000000000000000000000000000000000000000000000000000015", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "6b63804cfbf9856e68e5b6e7aef238dc8311ec55bec04df774003a2c96e0418e", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "0000000000000000000000000000000000000000000000000000000000000016", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "54944e5b8189827e470e5a8bacfc6c3667397dc4e1eef7ef3519d16d6d6c6610", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "0000000000000000000000000000000000000000000000000000000000000017", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "e10f526b192593793b7a1559a391445faba82a1d669e3eb2dcd17f9c121b24b1", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "0000000000000000000000000000000000000000000000000000000000000018", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "577e424ee53a16e6a85291feabc8443862495f74ac39a706d2dd0b9fc16955eb", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "0000000000000000000000000000000000000000000000000000000000000019", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "c36be0e14d3eaf5d8d233e0f4a40b3b4e48427d25f84c460d2b03b242a38479e", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "000000000000000000000000000000000000000000000000000000000000002a", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "a1184d77d0d08a064e03b2bd9f50863e88faddea4693a05ca1ee9b1732ea99b7", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "000000000000000000000000000000000000000000000000000000000000002b", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "b5566df884bee4e458151c2fe4082c8af38095cc442c61e0dc83a371d70d88fd", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "000000000000000000000000000000000000000000000000000000000000002c", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "9da7247e1d63d30d69f136f0f8654ee8340362c785b50f0a60513c7edbf5bb7c", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "000000000000000000000000000000000000000000000000000000000000002d", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "4b2ca966aad1a9d66994731db5138933cf61679107c3cde2a10d9594e47c084e", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "000000000000000000000000000000000000000000000000000000000000002e", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "26183fbe7375045250865947695dfc12500dcc43efb9102b4e8c4d3c20009dcb", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "000000000000000000000000000000000000000000000000000000000000002f", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "81f3a10b61828580d06cc4c7b0ed8f59b9fb618be856c55d33decd95489a1e23", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "0000000000000000000000000000000000000000000000000000000000000030", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "587aa0482482efea0234752d1ad9a9c438d1f34d2859b8bef2d56a432cb68e33", + "amount": 1152921504606846976, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + }, + { + "tx_id": "0000000000000000000000000000000000000000000000000000000000000031", + "output_index": 0, + "tx_pointer_block_height": 0, + "tx_pointer_tx_idx": 0, + "owner": "53a9c6a74bee79c5e04115a007984f4bddaafed75f512f68766c6ed59d0aedec", + "amount": 1125899906842624, + "asset_id": "f8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07" + } +] diff --git a/packages/solidity-contracts/docker/l1-chain/l1_chain.sh b/packages/solidity-contracts/docker/l1-chain/l1_chain.sh new file mode 100644 index 00000000..fbb41f7e --- /dev/null +++ b/packages/solidity-contracts/docker/l1-chain/l1_chain.sh @@ -0,0 +1,25 @@ +#!/bin/sh +set -euo + +RETRIES=${RETRIES:-120} +JSON='{"jsonrpc":"2.0","id":0,"method":"net_version","params":[]}' + +L1_CHAIN_HTTP="http://127.0.0.1:$L1_PORT" + +pnpm run node +# wait for the base layer to be up +echo "Waiting for l1 chain." +curl \ + --fail \ + --show-error \ + --silent \ + -H "Content-Type: application/json" \ + --retry-connrefused \ + --retry $RETRIES \ + --retry-delay 1 \ + -d $JSON \ + $L1_CHAIN_HTTP > /dev/null + +echo "Connected to l1 chain." + + From b7a7df21dc0901df8871304d2d4b0d9dd7058c33 Mon Sep 17 00:00:00 2001 From: Viraz Malhotra Date: Sat, 2 Nov 2024 17:17:11 +0530 Subject: [PATCH 17/36] fix: deployed artifact path --- .../docker/block-committer/block-committer.sh | 2 +- packages/solidity-contracts/docker/fuel_core/fuel_core.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/solidity-contracts/docker/block-committer/block-committer.sh b/packages/solidity-contracts/docker/block-committer/block-committer.sh index 3ccbef09..2cff63ca 100644 --- a/packages/solidity-contracts/docker/block-committer/block-committer.sh +++ b/packages/solidity-contracts/docker/block-committer/block-committer.sh @@ -20,7 +20,7 @@ echo "Connected to Fuel Core chain." # PORTAL_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/mainnetFork/FuelMessagePortal.json) # pull data from deployer dump -export STATE_CONTRACT_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/FuelChainState.json) +export STATE_CONTRACT_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/localhost/FuelChainState.json) echo "STATE_CONTRACT_ADDRESS: $STATE_CONTRACT_ADDRESS" echo "FUEL_GRAPHQL_ENDPOINT: $FUEL_GRAPHQL_ENDPOINT" echo "RPC: $ETHEREUM_RPC" diff --git a/packages/solidity-contracts/docker/fuel_core/fuel_core.sh b/packages/solidity-contracts/docker/fuel_core/fuel_core.sh index 28d01a85..84acee38 100644 --- a/packages/solidity-contracts/docker/fuel_core/fuel_core.sh +++ b/packages/solidity-contracts/docker/fuel_core/fuel_core.sh @@ -1,7 +1,7 @@ #!/bin/sh set -euo -PORTAL_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/FuelMessagePortal.json) +PORTAL_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/localhost/FuelMessagePortal.json) echo "Launching fuel node with PORTAL_ADDRESS=$PORTAL_ADDRESS" From 6f233f12fc234672738d026f78277c2c7a70ff84 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Mon, 11 Nov 2024 12:22:36 +0700 Subject: [PATCH 18/36] chore: docker config changes --- .../docker/block-committer/block-committer.sh | 2 -- packages/solidity-contracts/docker/docker-compose.yml | 5 +++++ packages/solidity-contracts/hardhat.config.ts | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/solidity-contracts/docker/block-committer/block-committer.sh b/packages/solidity-contracts/docker/block-committer/block-committer.sh index 2cff63ca..9c4e7790 100644 --- a/packages/solidity-contracts/docker/block-committer/block-committer.sh +++ b/packages/solidity-contracts/docker/block-committer/block-committer.sh @@ -17,8 +17,6 @@ curl \ echo "Connected to Fuel Core chain." -# PORTAL_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/mainnetFork/FuelMessagePortal.json) - # pull data from deployer dump export STATE_CONTRACT_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/localhost/FuelChainState.json) echo "STATE_CONTRACT_ADDRESS: $STATE_CONTRACT_ADDRESS" diff --git a/packages/solidity-contracts/docker/docker-compose.yml b/packages/solidity-contracts/docker/docker-compose.yml index 33d30f2b..4d0a5ec6 100644 --- a/packages/solidity-contracts/docker/docker-compose.yml +++ b/packages/solidity-contracts/docker/docker-compose.yml @@ -10,10 +10,14 @@ services: dockerfile: ./docker/docker.l1_chain.Dockerfile volumes: - ../deployments/localhost:/l1chain/fuel-v2-contracts/deployments + ports: + # expose the service to the host for integration testing + - ${L1_CHAIN_HTTP_PORT:-8545}:8545 stop_grace_period: 1s fuel_core: container_name: fuel_core + image: fueldev/fuelcore:${DOCKER_TAG_FUEL_CORE:-latest} depends_on: l1_chain: condition: service_started @@ -36,6 +40,7 @@ services: fuel_block_commiter: container_name: fuel_block_commiter + image: fueldev/block-committer:${DOCKER_TAG_FUEL_CORE:-latest} depends_on: fuel_core: condition: service_started diff --git a/packages/solidity-contracts/hardhat.config.ts b/packages/solidity-contracts/hardhat.config.ts index 144caa9a..60f3e6ce 100644 --- a/packages/solidity-contracts/hardhat.config.ts +++ b/packages/solidity-contracts/hardhat.config.ts @@ -42,8 +42,8 @@ const config: HardhatUserConfig = { count: 128, }, forking: { - enabled: true, - url: process.env.TENDERLY_RPC_URL!, + enabled: !!process.env.TENDERLY_RPC_URL, + url: process.env.TENDERLY_RPC_URL ? process.env.TENDERLY_RPC_URL : "", }, deploy: ['deploy/hardhat'], }, From c50030a70f670cddc9c7e11aed12c4d361da60ea Mon Sep 17 00:00:00 2001 From: viraj124 Date: Wed, 20 Nov 2024 15:40:45 +0700 Subject: [PATCH 19/36] chore: debug block committer integration issue Signed-off-by: viraj124 --- docker/block-committer/Dockerfile | 13 +---- docker/block-committer/block-commiter.sh | 18 +++---- docker/docker-compose.yml | 67 +++++++++++++++++++----- 3 files changed, 66 insertions(+), 32 deletions(-) diff --git a/docker/block-committer/Dockerfile b/docker/block-committer/Dockerfile index 26419d90..f7dcaba0 100644 --- a/docker/block-committer/Dockerfile +++ b/docker/block-committer/Dockerfile @@ -1,12 +1,7 @@ -FROM ghcr.io/fuellabs/fuel-block-committer:v0.4.0 +FROM ghcr.io/fuellabs/fuel-block-committer:sha-9e8d65b -ARG ETHEREUM_WALLET_KEY="" -ARG COMMIT_INTERVAL=1 ARG COMMITER_IP=0.0.0.0 ARG COMMITER_PORT=8888 -ARG ETHEREUM_CHAIN="hardhat" -ARG ETHEREUM_RPC="" -ARG FUEL_GRAPHQL_ENDPOINT="" # dependencies ENV DEBIAN_FRONTEND=noninteractive @@ -16,13 +11,9 @@ RUN apt update && apt install -y curl jq && rm -rf /var/lib/apt/lists/* WORKDIR /block-committer # expose fuel node port -ENV ETHEREUM_WALLET_KEY="${ETHEREUM_WALLET_KEY}" -ENV COMMIT_INTERVAL="${COMMIT_INTERVAL}" ENV HOST="${COMMITER_IP}" ENV PORT="${COMMITER_PORT}" -ENV ETHEREUM_CHAIN="${ETHEREUM_CHAIN}" -ENV ETHEREUM_RPC="${ETHEREUM_RPC}" -ENV FUEL_GRAPHQL_ENDPOINT="${FUEL_GRAPHQL_ENDPOINT}" + EXPOSE ${PORT} # copy over script and run diff --git a/docker/block-committer/block-commiter.sh b/docker/block-committer/block-commiter.sh index 2a3ad815..b0c22b69 100644 --- a/docker/block-committer/block-commiter.sh +++ b/docker/block-committer/block-commiter.sh @@ -5,11 +5,11 @@ RETRIES=${RETRIES:-60} DELAY=${DELAY:-10} JSON='{"jsonrpc":"2.0","id":0,"method":"net_version","params":[]}' -if [ -z "$ETHEREUM_RPC" ]; then +if [ -z "$COMMITTER__ETH__RPC" ]; then echo "Must specify \$ETHEREUM_RPC." exit 1 fi -if [ -z "$FUEL_GRAPHQL_ENDPOINT" ]; then +if [ -z "$COMMITTER__FUEL__GRAPHQL_ENDPOINT" ]; then echo "Must specify \$FUEL_GRAPHQL_ENDPOINT." exit 1 fi @@ -18,7 +18,7 @@ if [ -z "$DEPLOYMENTS_HTTP" ]; then exit 1 fi -echo $FUEL_GRAPHQL_ENDPOINT/health +echo $COMMITTER__FUEL__GRAPHQL_ENDPOINT/health # wait for the base layer to be up echo "Waiting for Fuel Core chain." @@ -29,7 +29,7 @@ curl \ --retry-connrefused \ --retry $RETRIES \ --retry-delay $DELAY \ - $FUEL_GRAPHQL_ENDPOINT/health > /dev/null + $COMMITTER__FUEL__GRAPHQL_ENDPOINT/health > /dev/null echo "Connected to Fuel Core chain." # get the deployments file from the deployer @@ -47,11 +47,11 @@ curl \ echo "Got l1 chain deployment data." # pull data from deployer dump -export STATE_CONTRACT_ADDRESS=$(cat "./addresses.json" | jq -r .FuelChainState) -echo "STATE_CONTRACT_ADDRESS: $STATE_CONTRACT_ADDRESS" -echo "ETHEREUM_RPC: $ETHEREUM_RPC" -echo "FUEL_GRAPHQL_ENDPOINT: $FUEL_GRAPHQL_ENDPOINT" +export COMMITTER__ETH__STATE_CONTRACT_ADDRESS=$(cat "./addresses.json" | jq -r .FuelChainState) +echo "COMMITTER__ETH__STATE_CONTRACT_ADDRESS: $COMMITTER__ETH__STATE_CONTRACT_ADDRESS" +echo "ETHEREUM_RPC: $COMMITTER__ETH__RPC" +echo "FUEL_GRAPHQL_ENDPOINT: $COMMITTER__FUEL__GRAPHQL_ENDPOINT" -# start the Block Commiter +# # start the Block Commiter echo "Starting block commiter" exec /root/fuel-block-committer diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 949e74bc..c7782d28 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,12 +1,24 @@ version: '3.4' services: + db: + image: postgres:14 + environment: + POSTGRES_USER: username + POSTGRES_PASSWORD: password + POSTGRES_DB: committer_db + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U username -d committer_db'] + interval: 5s + timeout: 5s + retries: 5 + l1_chain: image: fueldev/l1chain:${DOCKER_TAG_L1_CHAIN:-latest} build: dockerfile: ./docker/l1-chain/Dockerfile # Use build context of the root directory - # to allow coping solidity-contracts on Dockerfile + # to allow copying solidity-contracts on Dockerfile context: ../ env_file: - ./envs/l1_chain.env @@ -30,25 +42,56 @@ services: DEPLOYMENTS_HTTP: http://l1_chain:8081/deployments.local.json RUST_LOG: debug DEBUG: true + # DB_PATH: /db ports: # expose the service to the host for integration testing - ${FUEL_CORE_HTTP_PORT:-4000}:4001 stop_grace_period: 1s - fuel_block_commiter: - depends_on: - - fuel_core - image: fueldev/block-committer:${DOCKER_TAG_FUEL_CORE:-latest} + commiter: + image: ghcr.io/fuellabs/fuel-block-committer:sha-9e8d65b platform: linux/amd64 - build: - context: ./block-committer/ - env_file: - - ./envs/block_committer.env + # build: + # context: ./block-committer/ environment: - ETHEREUM_RPC: ws://l1_chain:9545/ - FUEL_GRAPHQL_ENDPOINT: http://fuel_core:4001/v1 + COMMITTER__ETH__RPC: 'ws://l1_chain:9545/' + COMMITTER__ETH__STATE_CONTRACT_ADDRESS: "0000000000000000000000000000000000000000" + COMMITTER__ETH__L1_KEYS__MAIN: 'Private(ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80)' + COMMITTER__ETH__L1_KEYS__BLOB: 'Private(59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d)' + COMMITTER__FUEL__GRAPHQL_ENDPOINT: 'http://fuel-core:4001/graphql' + COMMITTER__FUEL__NUM_BUFFERED_REQUESTS: '5' + COMMITTER__APP__DB__PORT: '5432' + COMMITTER__APP__DB__HOST: 'db' + COMMITTER__APP__DB__USERNAME: 'username' + COMMITTER__APP__DB__PASSWORD: 'password' + COMMITTER__APP__DB__MAX_CONNECTIONS: '10' + COMMITTER__APP__DB__USE_SSL: 'false' + COMMITTER__APP__DB__DATABASE: 'committer_db' + COMMITTER__APP__PORT: '8080' + COMMITTER__APP__HOST: '0.0.0.0' + COMMITTER__APP__BLOCK_CHECK_INTERVAL: '5s' + COMMITTER__APP__TX_FINALIZATION_CHECK_INTERVAL: '5s' + COMMITTER__APP__NUM_BLOCKS_TO_FINALIZE_TX: '3' + COMMITTER__APP__GAS_BUMP_TIMEOUT: '300s' + COMMITTER__APP__TX_MAX_FEE: '4000000000000000' + COMMITTER__APP__SEND_TX_REQUEST_TIMEOUT: '10s' + COMMITTER__APP__BUNDLE__ACCUMULATION_TIMEOUT: '3600s' + COMMITTER__APP__BUNDLE__BLOCKS_TO_ACCUMULATE: '400' + COMMITTER__APP__BUNDLE__OPTIMIZATION_TIMEOUT: '60s' + COMMITTER__APP__BUNDLE__BLOCK_HEIGHT_LOOKBACK: '8500' + COMMITTER__APP__BUNDLE__COMPRESSION_LEVEL: 'level6' + COMMITTER__APP__BUNDLE__OPTIMIZATION_STEP: '100' + COMMITTER__APP__BUNDLE__FRAGMENTS_TO_ACCUMULATE: '3' + COMMITTER__APP__BUNDLE__FRAGMENT_ACCUMULATION_TIMEOUT: '10m' + COMMITTER__APP__BUNDLE__NEW_BUNDLE_CHECK_INTERVAL: '3s' DEPLOYMENTS_HTTP: http://l1_chain:8081/deployments.local.json ports: # expose the service to the host for integration testing - ${COMMITTER_HTTP_PORT:-8888}:8888 - stop_grace_period: 1s + depends_on: + db: + condition: service_healthy + l1_chain: + condition: service_started + fuel_core: + condition: service_started From a1f35830cdb4dfbaf948921013029100b27bef86 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Wed, 20 Nov 2024 16:50:54 +0700 Subject: [PATCH 20/36] chore: inject state contract address dynamically Signed-off-by: viraj124 --- docker/block-committer/Dockerfile | 2 +- docker/docker-compose.yml | 7 +++---- packages/test-utils/src/scripts/relay-deposit.ts | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/docker/block-committer/Dockerfile b/docker/block-committer/Dockerfile index f7dcaba0..b684cbea 100644 --- a/docker/block-committer/Dockerfile +++ b/docker/block-committer/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/fuellabs/fuel-block-committer:sha-9e8d65b +FROM ghcr.io/fuellabs/fuel-block-committer:sha-77607e4 ARG COMMITER_IP=0.0.0.0 ARG COMMITER_PORT=8888 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index c7782d28..3de861f4 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -49,13 +49,12 @@ services: stop_grace_period: 1s commiter: - image: ghcr.io/fuellabs/fuel-block-committer:sha-9e8d65b + image: ghcr.io/fuellabs/fuel-block-committer:sha-77607e4 platform: linux/amd64 - # build: - # context: ./block-committer/ + build: + context: ./block-committer/ environment: COMMITTER__ETH__RPC: 'ws://l1_chain:9545/' - COMMITTER__ETH__STATE_CONTRACT_ADDRESS: "0000000000000000000000000000000000000000" COMMITTER__ETH__L1_KEYS__MAIN: 'Private(ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80)' COMMITTER__ETH__L1_KEYS__BLOB: 'Private(59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d)' COMMITTER__FUEL__GRAPHQL_ENDPOINT: 'http://fuel-core:4001/graphql' diff --git a/packages/test-utils/src/scripts/relay-deposit.ts b/packages/test-utils/src/scripts/relay-deposit.ts index dd087dee..61de020a 100644 --- a/packages/test-utils/src/scripts/relay-deposit.ts +++ b/packages/test-utils/src/scripts/relay-deposit.ts @@ -64,9 +64,8 @@ const main = async () => { let endCursor: string | undefined; if (L2_MESSAGE_NONCE) nonce = new BN(L2_MESSAGE_NONCE); - + // eslint-disable-next-line no-constant-condition else - // eslint-disable-next-line no-constant-condition while (true) { const response = await provider.getMessages(predicateRoot, { after: endCursor, From 0c4ae58073e32dcc05dd572a0dec20956efcbfca Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 22 Nov 2024 12:04:38 +0800 Subject: [PATCH 21/36] chore: update fuel core version in e2e docker file Signed-off-by: viraj124 --- docker/fuel-core/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/fuel-core/Dockerfile b/docker/fuel-core/Dockerfile index b21cd395..5402f329 100644 --- a/docker/fuel-core/Dockerfile +++ b/docker/fuel-core/Dockerfile @@ -3,7 +3,7 @@ # https://github.com/FuelLabs/chain-configuration/tree/master/upgradelog/ignition-testnet # and apply the latest state_transition_function and consensus_parameter # when upgrading fuel-core -FROM ghcr.io/fuellabs/fuel-core:v0.36.0 +FROM ghcr.io/fuellabs/fuel-core:v0.40.0 ARG FUEL_IP=0.0.0.0 ARG FUEL_PORT=4001 From 7e230592c4ccabc2496cf3f3b306e058cf74e640 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 22 Nov 2024 12:05:13 +0800 Subject: [PATCH 22/36] chore: update graphql endpoint Signed-off-by: viraj124 --- docker/block-committer/block-commiter.sh | 3 ++- docker/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docker/block-committer/block-commiter.sh b/docker/block-committer/block-commiter.sh index b0c22b69..a7f12cf3 100644 --- a/docker/block-committer/block-commiter.sh +++ b/docker/block-committer/block-commiter.sh @@ -4,6 +4,7 @@ set -euo RETRIES=${RETRIES:-60} DELAY=${DELAY:-10} JSON='{"jsonrpc":"2.0","id":0,"method":"net_version","params":[]}' +HEALTH_URL=${HEALTH_URL:-"http://fuel_core:4001/v1/health"} if [ -z "$COMMITTER__ETH__RPC" ]; then echo "Must specify \$ETHEREUM_RPC." @@ -29,7 +30,7 @@ curl \ --retry-connrefused \ --retry $RETRIES \ --retry-delay $DELAY \ - $COMMITTER__FUEL__GRAPHQL_ENDPOINT/health > /dev/null + $HEALTH_URL > /dev/null echo "Connected to Fuel Core chain." # get the deployments file from the deployer diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 3de861f4..073e0e7f 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -57,7 +57,7 @@ services: COMMITTER__ETH__RPC: 'ws://l1_chain:9545/' COMMITTER__ETH__L1_KEYS__MAIN: 'Private(ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80)' COMMITTER__ETH__L1_KEYS__BLOB: 'Private(59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d)' - COMMITTER__FUEL__GRAPHQL_ENDPOINT: 'http://fuel-core:4001/graphql' + COMMITTER__FUEL__GRAPHQL_ENDPOINT: 'http://fuel_core:4001/graphql' COMMITTER__FUEL__NUM_BUFFERED_REQUESTS: '5' COMMITTER__APP__DB__PORT: '5432' COMMITTER__APP__DB__HOST: 'db' From 9a3fe72211e658ffb973e58eb8940e3e2f032f0d Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 22 Nov 2024 21:35:01 +0800 Subject: [PATCH 23/36] debug: fuel core issue Signed-off-by: viraj124 --- docker/block-committer/Dockerfile | 3 +-- docker/docker-compose.yml | 2 +- docker/fuel-core/fuel_core.sh | 8 ++++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docker/block-committer/Dockerfile b/docker/block-committer/Dockerfile index b684cbea..788ce522 100644 --- a/docker/block-committer/Dockerfile +++ b/docker/block-committer/Dockerfile @@ -17,5 +17,4 @@ ENV PORT="${COMMITER_PORT}" EXPOSE ${PORT} # copy over script and run -COPY ./block-commiter.sh . -CMD ["sh", "./block-commiter.sh"] +ENTRYPOINT ["sh", "./block-commiter.sh"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 073e0e7f..5dbdadb6 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -42,7 +42,7 @@ services: DEPLOYMENTS_HTTP: http://l1_chain:8081/deployments.local.json RUST_LOG: debug DEBUG: true - # DB_PATH: /db + DB_PATH: /db ports: # expose the service to the host for integration testing - ${FUEL_CORE_HTTP_PORT:-4000}:4001 diff --git a/docker/fuel-core/fuel_core.sh b/docker/fuel-core/fuel_core.sh index 21b694dc..ef243e4b 100644 --- a/docker/fuel-core/fuel_core.sh +++ b/docker/fuel-core/fuel_core.sh @@ -2,8 +2,10 @@ set -euo RETRIES=${RETRIES:-90} +DA_COMPRESSION=${DA_COMPRESSION:-"3600sec"} +GRAPHQL_COMPLEXITY=${GRAPHQL_COMPLEXITY:-500000} JSON='{"jsonrpc":"2.0","id":0,"method":"net_version","params":[]}' -FUEL_DB_PATH=./mnt/db/ +# FUEL_DB_PATH=./mnt/db/ if [ -z "$L1_CHAIN_HTTP" ]; then echo "Must specify \$L1_CHAIN_HTTP." @@ -53,7 +55,7 @@ echo "Starting fuel node." exec /root/fuel-core run \ --ip $FUEL_IP \ --port $FUEL_PORT \ - --db-type in-memory \ + --db-path ${DB_PATH} \ --utxo-validation \ --vm-backtrace \ --enable-relayer \ @@ -61,5 +63,7 @@ exec /root/fuel-core run \ --relayer-v2-listening-contracts $FUEL_MESSAGE_PORTAL_CONTRACT_ADDRESS \ --poa-interval-period 1sec \ --debug \ + --da-compression 3600sec \ + --graphql-max-complexity $GRAPHQL_COMPLEXITY \ --min-gas-price 0 \ --snapshot ./ From 6d60c8f4833639f6ab62eb8edf488d1f98917218 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 26 Nov 2024 12:05:33 +0800 Subject: [PATCH 24/36] chore: update committer account Signed-off-by: viraj124 --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 5dbdadb6..889c497a 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -55,7 +55,7 @@ services: context: ./block-committer/ environment: COMMITTER__ETH__RPC: 'ws://l1_chain:9545/' - COMMITTER__ETH__L1_KEYS__MAIN: 'Private(ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80)' + COMMITTER__ETH__L1_KEYS__MAIN: 'Private(8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba)' COMMITTER__ETH__L1_KEYS__BLOB: 'Private(59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d)' COMMITTER__FUEL__GRAPHQL_ENDPOINT: 'http://fuel_core:4001/graphql' COMMITTER__FUEL__NUM_BUFFERED_REQUESTS: '5' From 1ea8cfe352e2f89428babdd85232952198ab058e Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 26 Nov 2024 12:06:07 +0800 Subject: [PATCH 25/36] fix: fuel core docker setup Signed-off-by: viraj124 --- docker/fuel-core/Dockerfile | 6 +++--- docker/fuel-core/fuel_core.sh | 1 - .../deploy/hardhat/005.register_block_committer.ts | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docker/fuel-core/Dockerfile b/docker/fuel-core/Dockerfile index 5402f329..3d8b69db 100644 --- a/docker/fuel-core/Dockerfile +++ b/docker/fuel-core/Dockerfile @@ -23,15 +23,15 @@ RUN git clone \ /chain-configuration # Anchor the chain configuration to a specific commit to avoid CI breaking -RUN cd /chain-configuration && git checkout c1c4d3bca57f64118a8d157310e0a839ae5c180a +RUN cd /chain-configuration && git checkout 8e4f7b52d7112f929a7cd95b988dfebfd10e87ec # Copy the base local configuration RUN cp -R /chain-configuration/local/* ./ # Copy the devnet consensus parameters and state transition bytecode -RUN cp /chain-configuration/upgradelog/ignition-devnet/consensus_parameters/9.json \ +RUN cp /chain-configuration/upgradelog/ignition-devnet/consensus_parameters/14.json \ ./latest_consensus_parameters.json -RUN cp /chain-configuration/upgradelog/ignition-devnet/state_transition_function/9.wasm \ +RUN cp /chain-configuration/upgradelog/ignition-devnet/state_transition_function/16.wasm \ ./state_transition_bytecode.wasm # update local state_config with custom genesis coins config diff --git a/docker/fuel-core/fuel_core.sh b/docker/fuel-core/fuel_core.sh index ef243e4b..62d0be6c 100644 --- a/docker/fuel-core/fuel_core.sh +++ b/docker/fuel-core/fuel_core.sh @@ -55,7 +55,6 @@ echo "Starting fuel node." exec /root/fuel-core run \ --ip $FUEL_IP \ --port $FUEL_PORT \ - --db-path ${DB_PATH} \ --utxo-validation \ --vm-backtrace \ --enable-relayer \ diff --git a/packages/solidity-contracts/deploy/hardhat/005.register_block_committer.ts b/packages/solidity-contracts/deploy/hardhat/005.register_block_committer.ts index 4231d61d..f0fa19ab 100644 --- a/packages/solidity-contracts/deploy/hardhat/005.register_block_committer.ts +++ b/packages/solidity-contracts/deploy/hardhat/005.register_block_committer.ts @@ -3,7 +3,7 @@ import type { DeployFunction } from 'hardhat-deploy/dist/types'; import { FuelChainState__factory } from '../../typechain'; -const COMMITTER_ADDRESS = '0x70997970C51812dc3A010C7d01b50e0d17dc79C8'; +const COMMITTER_ADDRESS = '0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { ethers, deployments } = hre; From 5ade961ebfd60eaba7eb2e8f73249fad772f9615 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 26 Nov 2024 12:06:59 +0800 Subject: [PATCH 26/36] fix: fuel core docker setup Signed-off-by: viraj124 From cc59923f08cab3fc65d62ede5bea4a19ae475235 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 26 Nov 2024 12:07:08 +0800 Subject: [PATCH 27/36] fix: fuel core docker setup Signed-off-by: viraj124 From 9007746ff9a114bdec66420e1114bb537c777155 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 26 Nov 2024 12:16:01 +0800 Subject: [PATCH 28/36] chore: add changeset Signed-off-by: viraj124 --- .changeset/slow-bottles-bathe.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/slow-bottles-bathe.md diff --git a/.changeset/slow-bottles-bathe.md b/.changeset/slow-bottles-bathe.md new file mode 100644 index 00000000..a0fe543e --- /dev/null +++ b/.changeset/slow-bottles-bathe.md @@ -0,0 +1,6 @@ +--- +'@fuel-bridge/solidity-contracts': patch +'@fuel-bridge/test-utils': patch +--- + +upgrade docker setup for fuel core and block committer From f7cdbbf7875f3a66cba257e4829b34a413e061cb Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 26 Nov 2024 12:46:06 +0800 Subject: [PATCH 29/36] chore: minor touchups Signed-off-by: viraj124 --- docker/block-committer/block-commiter.sh | 2 +- docker/docker-compose.yml | 2 +- docker/fuel-core/fuel_core.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/block-committer/block-commiter.sh b/docker/block-committer/block-commiter.sh index a7f12cf3..74caeb01 100644 --- a/docker/block-committer/block-commiter.sh +++ b/docker/block-committer/block-commiter.sh @@ -53,6 +53,6 @@ echo "COMMITTER__ETH__STATE_CONTRACT_ADDRESS: $COMMITTER__ETH__STATE_CONTRACT_AD echo "ETHEREUM_RPC: $COMMITTER__ETH__RPC" echo "FUEL_GRAPHQL_ENDPOINT: $COMMITTER__FUEL__GRAPHQL_ENDPOINT" -# # start the Block Commiter +# start the Block Commiter echo "Starting block commiter" exec /root/fuel-block-committer diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 889c497a..d56ba458 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -48,7 +48,7 @@ services: - ${FUEL_CORE_HTTP_PORT:-4000}:4001 stop_grace_period: 1s - commiter: + fuel_block_commiter: image: ghcr.io/fuellabs/fuel-block-committer:sha-77607e4 platform: linux/amd64 build: diff --git a/docker/fuel-core/fuel_core.sh b/docker/fuel-core/fuel_core.sh index 62d0be6c..fb5f5264 100644 --- a/docker/fuel-core/fuel_core.sh +++ b/docker/fuel-core/fuel_core.sh @@ -62,7 +62,7 @@ exec /root/fuel-core run \ --relayer-v2-listening-contracts $FUEL_MESSAGE_PORTAL_CONTRACT_ADDRESS \ --poa-interval-period 1sec \ --debug \ - --da-compression 3600sec \ + --da-compression $DA_COMPRESSION \ --graphql-max-complexity $GRAPHQL_COMPLEXITY \ --min-gas-price 0 \ --snapshot ./ From b089b32a02c2363b6a3122616712cc9fc6a74d3c Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 26 Nov 2024 22:27:20 +0800 Subject: [PATCH 30/36] feat: update docker setup Signed-off-by: viraj124 --- .../docker/block-committer/Dockerfile | 22 +++++ .../docker/block-committer/block-committer.sh | 28 +++++-- .../docker/docker-compose.yml | 80 ++++++++++++++----- .../docker/docker.block_committer.Dockerfile | 26 ------ .../docker/envs/fuel_core.env | 1 + .../Dockerfile} | 25 +++--- .../docker/fuel-core/fuel_core.sh | 53 ++++++++++++ .../genesis_coins.json | 0 .../docker/fuel_core/fuel_core.sh | 23 ------ .../Dockerfile} | 0 10 files changed, 169 insertions(+), 89 deletions(-) create mode 100644 packages/solidity-contracts/docker/block-committer/Dockerfile delete mode 100644 packages/solidity-contracts/docker/docker.block_committer.Dockerfile create mode 100644 packages/solidity-contracts/docker/envs/fuel_core.env rename packages/solidity-contracts/docker/{docker.fuel_core.Dockerfile => fuel-core/Dockerfile} (70%) create mode 100644 packages/solidity-contracts/docker/fuel-core/fuel_core.sh rename packages/solidity-contracts/docker/{fuel_core => fuel-core}/genesis_coins.json (100%) delete mode 100644 packages/solidity-contracts/docker/fuel_core/fuel_core.sh rename packages/solidity-contracts/docker/{docker.l1_chain.Dockerfile => l1-chain/Dockerfile} (100%) diff --git a/packages/solidity-contracts/docker/block-committer/Dockerfile b/packages/solidity-contracts/docker/block-committer/Dockerfile new file mode 100644 index 00000000..726da51f --- /dev/null +++ b/packages/solidity-contracts/docker/block-committer/Dockerfile @@ -0,0 +1,22 @@ +FROM ghcr.io/fuellabs/fuel-block-committer:sha-77607e4 + +ARG COMMITER_IP=0.0.0.0 +ARG COMMITER_PORT=8888 + +# dependencies +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update && apt install -y curl jq && rm -rf /var/lib/apt/lists/* + +# copy chain config +WORKDIR /block-committer + +# expose fuel node port +ENV HOST="${COMMITER_IP}" +ENV PORT="${COMMITER_PORT}" + +EXPOSE ${PORT} + +# copy over script and run +COPY ./block-committer.sh . +CMD ["sh", "./block-committer.sh"] +# ENTRYPOINT ["sh", "./block-committer.sh"] diff --git a/packages/solidity-contracts/docker/block-committer/block-committer.sh b/packages/solidity-contracts/docker/block-committer/block-committer.sh index 9c4e7790..9f733800 100644 --- a/packages/solidity-contracts/docker/block-committer/block-committer.sh +++ b/packages/solidity-contracts/docker/block-committer/block-committer.sh @@ -3,6 +3,19 @@ set -euo RETRIES=${RETRIES:-60} DELAY=${DELAY:-10} +JSON='{"jsonrpc":"2.0","id":0,"method":"net_version","params":[]}' +HEALTH_URL=${HEALTH_URL:-"http://fuel_core:4001/v1/health"} + +if [ -z "$COMMITTER__ETH__RPC" ]; then + echo "Must specify \$ETHEREUM_RPC." + exit 1 +fi +if [ -z "$COMMITTER__FUEL__GRAPHQL_ENDPOINT" ]; then + echo "Must specify \$FUEL_GRAPHQL_ENDPOINT." + exit 1 +fi + +echo $COMMITTER__FUEL__GRAPHQL_ENDPOINT/health # wait for the base layer to be up echo "Waiting for Fuel Core chain." @@ -13,16 +26,15 @@ curl \ --retry-connrefused \ --retry $RETRIES \ --retry-delay $DELAY \ - $FUEL_GRAPHQL_ENDPOINT/health > /dev/null + $HEALTH_URL > /dev/null echo "Connected to Fuel Core chain." - # pull data from deployer dump -export STATE_CONTRACT_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/localhost/FuelChainState.json) -echo "STATE_CONTRACT_ADDRESS: $STATE_CONTRACT_ADDRESS" -echo "FUEL_GRAPHQL_ENDPOINT: $FUEL_GRAPHQL_ENDPOINT" -echo "RPC: $ETHEREUM_RPC" +export COMMITTER__ETH__STATE_CONTRACT_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/localhost/FuelChainState.json) +echo "COMMITTER__ETH__STATE_CONTRACT_ADDRESS: $COMMITTER__ETH__STATE_CONTRACT_ADDRESS" +echo "ETHEREUM_RPC: $COMMITTER__ETH__RPC" +echo "FUEL_GRAPHQL_ENDPOINT: $COMMITTER__FUEL__GRAPHQL_ENDPOINT" # start the Block Commiter -echo "Launching block committer with STATE_CONTRACT_ADDRESS=$STATE_CONTRACT_ADDRESS" -exec /root/fuel-block-committer \ No newline at end of file +echo "Starting block commiter" +exec /root/fuel-block-committer diff --git a/packages/solidity-contracts/docker/docker-compose.yml b/packages/solidity-contracts/docker/docker-compose.yml index 4d0a5ec6..1899a89e 100644 --- a/packages/solidity-contracts/docker/docker-compose.yml +++ b/packages/solidity-contracts/docker/docker-compose.yml @@ -1,22 +1,33 @@ version: '3.4' services: + db: + image: postgres:14 + environment: + POSTGRES_USER: username + POSTGRES_PASSWORD: password + POSTGRES_DB: committer_db + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U username -d committer_db'] + interval: 5s + timeout: 5s + retries: 5 + l1_chain: - platform: linux/amd64 image: fueldev/l1chain:${DOCKER_TAG_L1_CHAIN:-latest} - container_name: l1_chain build: + dockerfile: ./docker/l1-chain/Dockerfile + # Use build context of the root directory + # to allow copying solidity-contracts on Dockerfile context: ../ - dockerfile: ./docker/docker.l1_chain.Dockerfile volumes: - ../deployments/localhost:/l1chain/fuel-v2-contracts/deployments ports: # expose the service to the host for integration testing - - ${L1_CHAIN_HTTP_PORT:-8545}:8545 + - ${L1_CHAIN_HTTP_PORT:-8545}:9545 stop_grace_period: 1s fuel_core: - container_name: fuel_core image: fueldev/fuelcore:${DOCKER_TAG_FUEL_CORE:-latest} depends_on: l1_chain: @@ -25,13 +36,14 @@ services: - ../deployments/localhost:/l1chain/fuel-v2-contracts/deployments platform: linux/amd64 build: - context: ../ - dockerfile: ./docker/docker.fuel_core.Dockerfile + context: ./fuel-core/ + env_file: + - ./envs/fuel_core.env environment: L1_CHAIN_HTTP: http://l1_chain:8545 RUST_LOG: debug DEBUG: true - CONSENSUS_KEY_SECRET: $CONSENSUS_KEY_SECRET + DB_PATH: /db ports: # expose the service to the host for integration testing - ${FUEL_CORE_HTTP_PORT:-4000}:4001 @@ -39,22 +51,50 @@ services: restart: always fuel_block_commiter: - container_name: fuel_block_commiter - image: fueldev/block-committer:${DOCKER_TAG_FUEL_CORE:-latest} - depends_on: - fuel_core: - condition: service_started - volumes: - - ../deployments/localhost:/l1chain/fuel-v2-contracts/deployments + image: ghcr.io/fuellabs/fuel-block-committer:sha-77607e4 platform: linux/amd64 build: - context: ../ - dockerfile: ./docker/docker.block_committer.Dockerfile + context: ./block-committer/ + volumes: + - ../deployments/localhost:/l1chain/fuel-v2-contracts/deployments environment: - ETHEREUM_RPC: ws://l1_chain:8545/ - FUEL_GRAPHQL_ENDPOINT: http://fuel_core:4001/v1 + COMMITTER__ETH__RPC: 'ws://l1_chain:8545/' + COMMITTER__ETH__L1_KEYS__MAIN: 'Private(8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba)' + COMMITTER__ETH__L1_KEYS__BLOB: 'Private(59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d)' + COMMITTER__FUEL__GRAPHQL_ENDPOINT: 'http://fuel_core:4001/graphql' + COMMITTER__FUEL__NUM_BUFFERED_REQUESTS: '5' + COMMITTER__APP__DB__PORT: '5432' + COMMITTER__APP__DB__HOST: 'db' + COMMITTER__APP__DB__USERNAME: 'username' + COMMITTER__APP__DB__PASSWORD: 'password' + COMMITTER__APP__DB__MAX_CONNECTIONS: '10' + COMMITTER__APP__DB__USE_SSL: 'false' + COMMITTER__APP__DB__DATABASE: 'committer_db' + COMMITTER__APP__PORT: '8080' + COMMITTER__APP__HOST: '0.0.0.0' + COMMITTER__APP__BLOCK_CHECK_INTERVAL: '5s' + COMMITTER__APP__TX_FINALIZATION_CHECK_INTERVAL: '5s' + COMMITTER__APP__NUM_BLOCKS_TO_FINALIZE_TX: '3' + COMMITTER__APP__GAS_BUMP_TIMEOUT: '300s' + COMMITTER__APP__TX_MAX_FEE: '4000000000000000' + COMMITTER__APP__SEND_TX_REQUEST_TIMEOUT: '10s' + COMMITTER__APP__BUNDLE__ACCUMULATION_TIMEOUT: '3600s' + COMMITTER__APP__BUNDLE__BLOCKS_TO_ACCUMULATE: '400' + COMMITTER__APP__BUNDLE__OPTIMIZATION_TIMEOUT: '60s' + COMMITTER__APP__BUNDLE__BLOCK_HEIGHT_LOOKBACK: '8500' + COMMITTER__APP__BUNDLE__COMPRESSION_LEVEL: 'level6' + COMMITTER__APP__BUNDLE__OPTIMIZATION_STEP: '100' + COMMITTER__APP__BUNDLE__FRAGMENTS_TO_ACCUMULATE: '3' + COMMITTER__APP__BUNDLE__FRAGMENT_ACCUMULATION_TIMEOUT: '10m' + COMMITTER__APP__BUNDLE__NEW_BUNDLE_CHECK_INTERVAL: '3s' ports: # expose the service to the host for integration testing - ${COMMITTER_HTTP_PORT:-8888}:8888 - stop_grace_period: 1s + depends_on: + db: + condition: service_healthy + l1_chain: + condition: service_started + fuel_core: + condition: service_started restart: always diff --git a/packages/solidity-contracts/docker/docker.block_committer.Dockerfile b/packages/solidity-contracts/docker/docker.block_committer.Dockerfile deleted file mode 100644 index f1979b06..00000000 --- a/packages/solidity-contracts/docker/docker.block_committer.Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -FROM ghcr.io/fuellabs/fuel-block-committer:v0.4.0 - -ARG ETHEREUM_WALLET_KEY="0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" -ARG COMMIT_INTERVAL=30 -ARG COMMITER_IP=0.0.0.0 -ARG COMMITER_PORT=8888 -ARG ETHEREUM_CHAIN="hardhat" - -# dependencies -ENV DEBIAN_FRONTEND=noninteractive -RUN apt update && apt install -y curl jq && rm -rf /var/lib/apt/lists/* - -# copy chain config -WORKDIR /block-committer - -# expose fuel node port -ENV ETHEREUM_WALLET_KEY="${ETHEREUM_WALLET_KEY}" -ENV COMMIT_INTERVAL="${COMMIT_INTERVAL}" -ENV HOST="${COMMITER_IP}" -ENV PORT="${COMMITER_PORT}" -ENV ETHEREUM_CHAIN="${ETHEREUM_CHAIN}" -EXPOSE ${PORT} - -# copy over script and run -COPY ./docker/block-committer/block-committer.sh . -CMD ["sh", "./block-committer.sh"] \ No newline at end of file diff --git a/packages/solidity-contracts/docker/envs/fuel_core.env b/packages/solidity-contracts/docker/envs/fuel_core.env new file mode 100644 index 00000000..7b0bf02d --- /dev/null +++ b/packages/solidity-contracts/docker/envs/fuel_core.env @@ -0,0 +1 @@ +CONSENSUS_KEY_SECRET="0xa449b1ffee0e2205fa924c6740cc48b3b473aa28587df6dab12abc245d1f5298" \ No newline at end of file diff --git a/packages/solidity-contracts/docker/docker.fuel_core.Dockerfile b/packages/solidity-contracts/docker/fuel-core/Dockerfile similarity index 70% rename from packages/solidity-contracts/docker/docker.fuel_core.Dockerfile rename to packages/solidity-contracts/docker/fuel-core/Dockerfile index 06899e75..3d8b69db 100644 --- a/packages/solidity-contracts/docker/docker.fuel_core.Dockerfile +++ b/packages/solidity-contracts/docker/fuel-core/Dockerfile @@ -1,36 +1,37 @@ -# # IMPORTANT! -# # Make sure to check: -# # https://github.com/FuelLabs/chain-configuration/tree/master/upgradelog/ignition-testnet -# # and apply the latest state_transition_function and consensus_parameter -# # when upgrading fuel-core -FROM ghcr.io/fuellabs/fuel-core:v0.36.0 +# IMPORTANT! +# Make sure to check: +# https://github.com/FuelLabs/chain-configuration/tree/master/upgradelog/ignition-testnet +# and apply the latest state_transition_function and consensus_parameter +# when upgrading fuel-core +FROM ghcr.io/fuellabs/fuel-core:v0.40.0 ARG FUEL_IP=0.0.0.0 ARG FUEL_PORT=4001 -ARG CONSENSUS_KEY_SECRET=$CONSENSUS_KEY_SECRET +ARG CONSENSUS_KEY_SECRET="" # dependencies +ENV DEBIAN_FRONTEND=noninteractive RUN apt update && apt install -y git curl jq && rm -rf /var/lib/apt/lists/* # copy chain config WORKDIR /fuel -COPY ./docker/fuel_core/genesis_coins.json . +COPY ./genesis_coins.json . RUN git clone \ https://github.com/FuelLabs/chain-configuration.git \ /chain-configuration # Anchor the chain configuration to a specific commit to avoid CI breaking -RUN cd /chain-configuration && git fetch && git checkout c1c4d3bca57f64118a8d157310e0a839ae5c180a +RUN cd /chain-configuration && git checkout 8e4f7b52d7112f929a7cd95b988dfebfd10e87ec # Copy the base local configuration RUN cp -R /chain-configuration/local/* ./ # Copy the devnet consensus parameters and state transition bytecode -RUN cp /chain-configuration/upgradelog/ignition-devnet/consensus_parameters/9.json \ +RUN cp /chain-configuration/upgradelog/ignition-devnet/consensus_parameters/14.json \ ./latest_consensus_parameters.json -RUN cp /chain-configuration/upgradelog/ignition-devnet/state_transition_function/9.wasm \ +RUN cp /chain-configuration/upgradelog/ignition-devnet/state_transition_function/16.wasm \ ./state_transition_bytecode.wasm # update local state_config with custom genesis coins config @@ -50,5 +51,5 @@ ENV CONSENSUS_KEY_SECRET="${CONSENSUS_KEY_SECRET}" EXPOSE ${FUEL_PORT} # copy over script and run -COPY ./docker/fuel_core/fuel_core.sh . +COPY ./fuel_core.sh . CMD ["sh", "./fuel_core.sh"] \ No newline at end of file diff --git a/packages/solidity-contracts/docker/fuel-core/fuel_core.sh b/packages/solidity-contracts/docker/fuel-core/fuel_core.sh new file mode 100644 index 00000000..fb0eeaf1 --- /dev/null +++ b/packages/solidity-contracts/docker/fuel-core/fuel_core.sh @@ -0,0 +1,53 @@ +#!/bin/sh +set -euo + +#!/bin/sh +set -euo + +RETRIES=${RETRIES:-90} +DA_COMPRESSION=${DA_COMPRESSION:-"3600sec"} +GRAPHQL_COMPLEXITY=${GRAPHQL_COMPLEXITY:-500000} +JSON='{"jsonrpc":"2.0","id":0,"method":"net_version","params":[]}' +# FUEL_DB_PATH=./mnt/db/ + +if [ -z "$L1_CHAIN_HTTP" ]; then + echo "Must specify \$L1_CHAIN_HTTP." + exit 1 +fi + +# wait for the base layer to be up +echo "Waiting for l1 chain." +curl \ + --fail \ + --show-error \ + --silent \ + -H "Content-Type: application/json" \ + --retry-connrefused \ + --retry $RETRIES \ + --retry-delay 1 \ + -d $JSON \ + $L1_CHAIN_HTTP > /dev/null +echo "Connected to l1 chain." + +# pull data from deployer dump +export FUEL_MESSAGE_PORTAL_CONTRACT_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/localhost/FuelMessagePortal.json) +echo "FUEL_MESSAGE_PORTAL_CONTRACT_ADDRESS: $FUEL_MESSAGE_PORTAL_CONTRACT_ADDRESS" +echo "L1_CHAIN_HTTP: $L1_CHAIN_HTTP" + +# start the Fuel client +#--db-path ${FUEL_DB_PATH} +echo "Starting fuel node." +exec /root/fuel-core run \ + --ip $FUEL_IP \ + --port $FUEL_PORT \ + --utxo-validation \ + --vm-backtrace \ + --enable-relayer \ + --relayer $L1_CHAIN_HTTP \ + --relayer-v2-listening-contracts $FUEL_MESSAGE_PORTAL_CONTRACT_ADDRESS \ + --poa-interval-period 1sec \ + --debug \ + --da-compression $DA_COMPRESSION \ + --graphql-max-complexity $GRAPHQL_COMPLEXITY \ + --min-gas-price 0 \ + --snapshot ./ diff --git a/packages/solidity-contracts/docker/fuel_core/genesis_coins.json b/packages/solidity-contracts/docker/fuel-core/genesis_coins.json similarity index 100% rename from packages/solidity-contracts/docker/fuel_core/genesis_coins.json rename to packages/solidity-contracts/docker/fuel-core/genesis_coins.json diff --git a/packages/solidity-contracts/docker/fuel_core/fuel_core.sh b/packages/solidity-contracts/docker/fuel_core/fuel_core.sh deleted file mode 100644 index 84acee38..00000000 --- a/packages/solidity-contracts/docker/fuel_core/fuel_core.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -set -euo - -PORTAL_ADDRESS=$(jq -r '.address' /l1chain/fuel-v2-contracts/deployments/localhost/FuelMessagePortal.json) - -echo "Launching fuel node with PORTAL_ADDRESS=$PORTAL_ADDRESS" - -exec /root/fuel-core run \ - --ip $FUEL_IP \ - --port $FUEL_PORT \ - --db-type in-memory \ - --utxo-validation \ - --vm-backtrace \ - --enable-relayer \ - --relayer $L1_CHAIN_HTTP \ - --relayer-v2-listening-contracts $PORTAL_ADDRESS \ - --relayer-da-deploy-height 0 \ - --poa-interval-period 1sec \ - --debug \ - --min-gas-price 0 \ - --snapshot ./ - -echo "Launched fuel node" \ No newline at end of file diff --git a/packages/solidity-contracts/docker/docker.l1_chain.Dockerfile b/packages/solidity-contracts/docker/l1-chain/Dockerfile similarity index 100% rename from packages/solidity-contracts/docker/docker.l1_chain.Dockerfile rename to packages/solidity-contracts/docker/l1-chain/Dockerfile From 52dcec4898e67f7e51ccab38d879673c9e35916a Mon Sep 17 00:00:00 2001 From: viraj124 Date: Tue, 26 Nov 2024 22:28:00 +0800 Subject: [PATCH 31/36] chore: formatting Signed-off-by: viraj124 --- packages/solidity-contracts/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/solidity-contracts/hardhat.config.ts b/packages/solidity-contracts/hardhat.config.ts index 60f3e6ce..887110fb 100644 --- a/packages/solidity-contracts/hardhat.config.ts +++ b/packages/solidity-contracts/hardhat.config.ts @@ -43,7 +43,7 @@ const config: HardhatUserConfig = { }, forking: { enabled: !!process.env.TENDERLY_RPC_URL, - url: process.env.TENDERLY_RPC_URL ? process.env.TENDERLY_RPC_URL : "", + url: process.env.TENDERLY_RPC_URL ? process.env.TENDERLY_RPC_URL : '', }, deploy: ['deploy/hardhat'], }, From d98899413e615241e1293225a70d3bdf2bdab4a1 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 29 Nov 2024 13:26:08 +0530 Subject: [PATCH 32/36] fix: audit ci --- package.json | 8 +++++--- pnpm-lock.yaml | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index c11ab6ce..9d9c87c1 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,8 @@ "@fuels/eslint-plugin": "0.20.0", "@fuels/prettier-config": "0.0.10", "@fuels/ts-config": "0.0.10", - "fuels": "0.96.1", "eslint": "^8.49.0", + "fuels": "0.96.1", "prettier": "^2.7.1", "tsup": "^8.3.0", "tsx": "^3.12.7", @@ -52,7 +52,9 @@ "elliptic@>=4.0.0 <=6.5.6": ">=6.5.7", "elliptic@>=2.0.0 <=6.5.6": ">=6.5.7", "elliptic@>=5.2.1 <=6.5.6": ">=6.5.7", - "micromatch@<4.0.8": ">=4.0.8" + "micromatch@<4.0.8": ">=4.0.8", + "cross-spawn@>=7.0.0 <7.0.5": ">=7.0.5" } - } + }, + "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c5882e5..dd5c0c4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,6 +13,7 @@ overrides: elliptic@>=2.0.0 <=6.5.6: '>=6.5.7' elliptic@>=5.2.1 <=6.5.6: '>=6.5.7' micromatch@<4.0.8: '>=4.0.8' + cross-spawn@>=7.0.0 <7.0.5: '>=7.0.5' importers: @@ -2905,8 +2906,8 @@ packages: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} csv-generate@3.4.3: @@ -9200,7 +9201,7 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -9599,7 +9600,7 @@ snapshots: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 @@ -9611,7 +9612,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -9638,7 +9639,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -9800,7 +9801,7 @@ snapshots: '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 @@ -9992,7 +9993,7 @@ snapshots: execa@5.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -10163,7 +10164,7 @@ snapshots: foreground-child@3.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 signal-exit: 4.1.0 form-data@3.0.1: From c7400ca326b4138932271668b7e3d66811d141e1 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 29 Nov 2024 13:39:06 +0530 Subject: [PATCH 33/36] chore: update package.json --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 9d9c87c1..bbd795aa 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,5 @@ "micromatch@<4.0.8": ">=4.0.8", "cross-spawn@>=7.0.0 <7.0.5": ">=7.0.5" } - }, - "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" + } } From f3e6e0ca0fa90d4502a08a837ea0d79e784a4101 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 29 Nov 2024 14:09:51 +0530 Subject: [PATCH 34/36] chore: upgrade changeset cli version --- package.json | 2 +- pnpm-lock.yaml | 637 ++++++++----------------------------------------- 2 files changed, 96 insertions(+), 543 deletions(-) diff --git a/package.json b/package.json index bbd795aa..dd572120 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "turbo": "^1.10.7" }, "devDependencies": { - "@changesets/cli": "^2.26.2", + "@changesets/cli": "^2.27.10", "@fuel-ts/forc": "0.73.0" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd5c0c4c..43a8b0a3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,8 +51,8 @@ importers: version: 1.13.2 devDependencies: '@changesets/cli': - specifier: ^2.26.2 - version: 2.27.1 + specifier: ^2.27.10 + version: 2.27.10 '@fuel-ts/forc': specifier: 0.73.0 version: 0.73.0 @@ -459,51 +459,54 @@ packages: resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} - '@changesets/apply-release-plan@7.0.0': - resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + '@changesets/apply-release-plan@7.0.6': + resolution: {integrity: sha512-TKhVLtiwtQOgMAC0fCJfmv93faiViKSDqr8oMEqrnNs99gtSC1sZh/aEMS9a+dseU1ESZRCK+ofLgGY7o0fw/Q==} - '@changesets/assemble-release-plan@6.0.0': - resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + '@changesets/assemble-release-plan@6.0.5': + resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} '@changesets/changelog-git@0.2.0': resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} - '@changesets/cli@2.27.1': - resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} + '@changesets/cli@2.27.10': + resolution: {integrity: sha512-PfeXjvs9OfQJV8QSFFHjwHX3QnUL9elPEQ47SgkiwzLgtKGyuikWjrdM+lO9MXzOE22FO9jEGkcs4b+B6D6X0Q==} hasBin: true - '@changesets/config@3.0.0': - resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + '@changesets/config@3.0.4': + resolution: {integrity: sha512-+DiIwtEBpvvv1z30f8bbOsUQGuccnZl9KRKMM/LxUHuDu5oEjmN+bJQ1RIBKNJjfYMQn8RZzoPiX0UgPaLQyXw==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@changesets/get-dependents-graph@2.0.0': - resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + '@changesets/get-dependents-graph@2.1.2': + resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} '@changesets/get-github-info@0.5.2': resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==} - '@changesets/get-release-plan@4.0.0': - resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + '@changesets/get-release-plan@4.0.5': + resolution: {integrity: sha512-E6wW7JoSMcctdVakut0UB76FrrN3KIeJSXvB+DHMFo99CnC3ZVnNYDCVNClMlqAhYGmLmAj77QfApaI3ca4Fkw==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - '@changesets/git@3.0.0': - resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + '@changesets/git@3.0.2': + resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} - '@changesets/logger@0.1.0': - resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} '@changesets/parse@0.4.0': resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} - '@changesets/pre@2.0.0': - resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + '@changesets/pre@2.0.1': + resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} - '@changesets/read@0.6.0': - resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + '@changesets/read@0.6.2': + resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} + + '@changesets/should-skip-package@0.1.1': + resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} @@ -511,8 +514,8 @@ packages: '@changesets/types@6.0.0': resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - '@changesets/write@0.3.0': - resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + '@changesets/write@0.3.2': + resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -2144,9 +2147,6 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/mkdirp@0.5.2': resolution: {integrity: sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==} @@ -2171,9 +2171,6 @@ packages: '@types/node@22.5.0': resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==} - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/pbkdf2@3.1.2': resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} @@ -2512,10 +2509,6 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - asn1js@3.0.5: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} @@ -2623,9 +2616,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - breakword@1.0.6: - resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} - brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -2694,14 +2684,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -2782,20 +2764,9 @@ packages: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -2899,9 +2870,6 @@ packages: cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2910,19 +2878,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - - csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - - csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - - csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} - damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -2978,14 +2933,6 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -3001,9 +2948,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -3494,9 +3438,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - flat-cache@2.0.1: resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} engines: {node: '>=4'} @@ -3705,9 +3646,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -3731,10 +3669,6 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - hardhat-deploy@0.12.4: resolution: {integrity: sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==} @@ -3986,10 +3920,6 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -4094,9 +4024,6 @@ packages: json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -4143,10 +4070,6 @@ packages: klaw@1.3.1: resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} @@ -4180,10 +4103,6 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -4235,9 +4154,6 @@ packages: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -4248,14 +4164,6 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - markdown-it@13.0.1: resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} hasBin: true @@ -4290,10 +4198,6 @@ packages: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} - meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} - merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} @@ -4336,10 +4240,6 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -4365,10 +4265,6 @@ packages: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -4380,10 +4276,6 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mixme@0.5.10: - resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} - engines: {node: '>= 8.0.0'} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -4406,6 +4298,10 @@ packages: engines: {node: '>= 14.0.0'} hasBin: true + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -4609,6 +4505,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@0.2.5: + resolution: {integrity: sha512-3dS7y28uua+UDbRCLBqltMBrbI+A5U2mI9YuxHRxIWYmLj3DwntEBmERYzIAQ4DMeuCUOBSak7dBHHoXKpOTYQ==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4617,10 +4516,6 @@ packages: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4708,10 +4603,6 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -4750,10 +4641,6 @@ packages: yaml: optional: true - preferred-pm@3.1.3: - resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} - engines: {node: '>=10'} - prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -4807,9 +4694,6 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4832,10 +4716,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - ramda@0.30.1: resolution: {integrity: sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==} @@ -4853,18 +4733,10 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - read-pkg@3.0.0: resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} engines: {node: '>=4'} - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -4885,10 +4757,6 @@ packages: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} engines: {node: '>=6.0.0'} - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - reduce-flatten@2.0.0: resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} engines: {node: '>=6'} @@ -4916,9 +4784,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requireindex@1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} @@ -5080,9 +4945,6 @@ packages: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -5148,11 +5010,6 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} - engines: {node: '>=6'} - hasBin: true - solc@0.7.3: resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} engines: {node: '>=8.0.0'} @@ -5194,8 +5051,8 @@ packages: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} - spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -5220,9 +5077,6 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} - string-format@2.0.0: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} @@ -5292,10 +5146,6 @@ packages: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -5404,10 +5254,6 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -5508,11 +5354,6 @@ packages: resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==} hasBin: true - tty-table@4.2.3: - resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} - engines: {node: '>=8.0.0'} - hasBin: true - turbo-darwin-64@1.13.2: resolution: {integrity: sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==} cpu: [x64] @@ -5565,10 +5406,6 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -5577,18 +5414,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} @@ -5721,9 +5550,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web3-utils@1.10.4: resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} engines: {node: '>=8.0.0'} @@ -5751,13 +5577,6 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - - which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} - which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -5832,16 +5651,10 @@ packages: utf-8-validate: optional: true - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -5850,34 +5663,18 @@ packages: engines: {node: '>= 14'} hasBin: true - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -6326,12 +6123,12 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@changesets/apply-release-plan@7.0.0': + '@changesets/apply-release-plan@7.0.6': dependencies: - '@babel/runtime': 7.24.4 - '@changesets/config': 3.0.0 + '@changesets/config': 3.0.4 '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.0 + '@changesets/git': 3.0.2 + '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 @@ -6340,61 +6137,57 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.6.0 + semver: 7.6.3 - '@changesets/assemble-release-plan@6.0.0': + '@changesets/assemble-release-plan@6.0.5': dependencies: - '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.6.0 + semver: 7.6.3 '@changesets/changelog-git@0.2.0': dependencies: '@changesets/types': 6.0.0 - '@changesets/cli@2.27.1': + '@changesets/cli@2.27.10': dependencies: - '@babel/runtime': 7.24.4 - '@changesets/apply-release-plan': 7.0.0 - '@changesets/assemble-release-plan': 6.0.0 + '@changesets/apply-release-plan': 7.0.6 + '@changesets/assemble-release-plan': 6.0.5 '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.0 + '@changesets/config': 3.0.4 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 - '@changesets/get-release-plan': 4.0.0 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-release-plan': 4.0.5 + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.2 + '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 - '@changesets/write': 0.3.0 + '@changesets/write': 0.3.2 '@manypkg/get-packages': 1.1.3 - '@types/semver': 7.5.8 ansi-colors: 4.1.3 - chalk: 2.4.2 ci-info: 3.9.0 enquirer: 2.4.1 external-editor: 3.1.0 fs-extra: 7.0.1 - human-id: 1.0.2 - meow: 6.1.1 - outdent: 0.5.0 + mri: 1.2.0 p-limit: 2.3.0 - preferred-pm: 3.1.3 + package-manager-detector: 0.2.5 + picocolors: 1.1.0 resolve-from: 5.0.0 - semver: 7.6.0 - spawndamnit: 2.0.0 + semver: 7.6.3 + spawndamnit: 3.0.1 term-size: 2.2.1 - tty-table: 4.2.3 - '@changesets/config@3.0.0': + '@changesets/config@3.0.4': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 - '@changesets/logger': 0.1.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/logger': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 @@ -6404,13 +6197,12 @@ snapshots: dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@2.0.0': + '@changesets/get-dependents-graph@2.1.2': dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - chalk: 2.4.2 - fs-extra: 7.0.1 - semver: 7.6.0 + picocolors: 1.1.0 + semver: 7.6.3 '@changesets/get-github-info@0.5.2': dependencies: @@ -6419,63 +6211,62 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.0': + '@changesets/get-release-plan@4.0.5': dependencies: - '@babel/runtime': 7.24.4 - '@changesets/assemble-release-plan': 6.0.0 - '@changesets/config': 3.0.0 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 + '@changesets/assemble-release-plan': 6.0.5 + '@changesets/config': 3.0.4 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.2 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@3.0.0': + '@changesets/git@3.0.2': dependencies: - '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 micromatch: 4.0.8 - spawndamnit: 2.0.0 + spawndamnit: 3.0.1 - '@changesets/logger@0.1.0': + '@changesets/logger@0.1.1': dependencies: - chalk: 2.4.2 + picocolors: 1.1.0 '@changesets/parse@0.4.0': dependencies: '@changesets/types': 6.0.0 js-yaml: 3.14.1 - '@changesets/pre@2.0.0': + '@changesets/pre@2.0.1': dependencies: - '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.0': + '@changesets/read@0.6.2': dependencies: - '@babel/runtime': 7.24.4 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 '@changesets/parse': 0.4.0 '@changesets/types': 6.0.0 - chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 + picocolors: 1.1.0 + + '@changesets/should-skip-package@0.1.1': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 '@changesets/types@4.1.0': {} '@changesets/types@6.0.0': {} - '@changesets/write@0.3.0': + '@changesets/write@0.3.2': dependencies: - '@babel/runtime': 7.24.4 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 @@ -8299,8 +8090,6 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/minimist@1.2.5': {} - '@types/mkdirp@0.5.2': dependencies: '@types/node': 18.19.31 @@ -8325,8 +8114,6 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/normalize-package-data@2.4.4': {} - '@types/pbkdf2@3.1.2': dependencies: '@types/node': 18.19.31 @@ -8765,8 +8552,6 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - arrify@1.0.1: {} - asn1js@3.0.5: dependencies: pvtsutils: 1.3.5 @@ -8884,10 +8669,6 @@ snapshots: dependencies: fill-range: 7.1.1 - breakword@1.0.6: - dependencies: - wcwidth: 1.0.1 - brorand@1.1.0: {} browser-stdout@1.3.1: {} @@ -8965,14 +8746,6 @@ snapshots: callsites@3.1.0: {} - camelcase-keys@6.2.2: - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - - camelcase@5.3.1: {} - camelcase@6.3.0: {} cbor@8.1.0: @@ -9066,26 +8839,12 @@ snapshots: cli-width@4.1.0: {} - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone@1.0.4: {} - color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -9187,12 +8946,6 @@ snapshots: transitivePeerDependencies: - encoding - cross-spawn@5.1.0: - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@6.0.5: dependencies: nice-try: 1.0.5 @@ -9207,19 +8960,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - csv-generate@3.4.3: {} - - csv-parse@4.16.3: {} - - csv-stringify@5.6.5: {} - - csv@5.5.3: - dependencies: - csv-generate: 3.4.3 - csv-parse: 4.16.3 - csv-stringify: 5.6.5 - stream-transform: 2.1.3 - damerau-levenshtein@1.0.8: {} data-view-buffer@1.0.1: @@ -9262,13 +9002,6 @@ snapshots: dependencies: ms: 2.1.3 - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} - decamelize@4.0.0: {} deep-eql@4.1.3: @@ -9279,10 +9012,6 @@ snapshots: deep-is@0.1.4: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 @@ -10127,11 +9856,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-yarn-workspace-root2@1.2.16: - dependencies: - micromatch: 4.0.8 - pkg-dir: 4.2.0 - flat-cache@2.0.1: dependencies: flatted: 2.0.2 @@ -10424,8 +10148,6 @@ snapshots: graceful-fs@4.2.11: {} - grapheme-splitter@1.0.4: {} - graphemer@1.4.0: {} graphql-request@5.0.0(graphql@16.9.0): @@ -10454,8 +10176,6 @@ snapshots: optionalDependencies: uglify-js: 3.19.2 - hard-rejection@2.1.0: {} - hardhat-deploy@0.12.4(bufferutil@4.0.5)(utf-8-validate@5.0.7): dependencies: '@ethersproject/abi': 5.7.0 @@ -10760,8 +10480,6 @@ snapshots: is-path-inside@3.0.3: {} - is-plain-obj@1.1.0: {} - is-plain-obj@2.1.0: {} is-regex@1.1.4: @@ -10862,8 +10580,6 @@ snapshots: json-parse-better-errors@1.0.2: {} - json-parse-even-better-errors@2.3.1: {} - json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -10915,8 +10631,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - kleur@4.1.5: {} - language-subtag-registry@0.3.22: {} language-tags@1.0.9: @@ -10950,13 +10664,6 @@ snapshots: load-tsconfig@0.2.5: {} - load-yaml-file@0.2.0: - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - locate-path@2.0.0: dependencies: p-locate: 2.0.0 @@ -11001,11 +10708,6 @@ snapshots: lru-cache@10.2.0: {} - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -11014,10 +10716,6 @@ snapshots: make-error@1.3.6: {} - map-obj@1.0.1: {} - - map-obj@4.3.0: {} - markdown-it@13.0.1: dependencies: argparse: 2.0.1 @@ -11059,20 +10757,6 @@ snapshots: memorystream@0.3.1: {} - meow@6.1.1: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.13.1 - yargs-parser: 18.1.3 - merge-descriptors@1.0.1: {} merge-stream@2.0.0: {} @@ -11100,8 +10784,6 @@ snapshots: mimic-fn@2.1.0: {} - min-indent@1.0.1: {} - minimalistic-assert@1.0.1: {} minimalistic-crypto-utils@1.0.1: {} @@ -11126,20 +10808,12 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - minimist@1.2.8: {} minipass@7.0.4: {} minipass@7.1.2: {} - mixme@0.5.10: {} - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -11175,6 +10849,8 @@ snapshots: yargs-parser: 20.2.4 yargs-unparser: 2.0.0 + mri@1.2.0: {} + ms@2.0.0: {} ms@2.1.2: {} @@ -11381,6 +11057,8 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@0.2.5: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -11390,13 +11068,6 @@ snapshots: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.24.2 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - parseurl@1.3.3: {} path-exists@3.0.0: {} @@ -11457,10 +11128,6 @@ snapshots: pirates@4.0.6: {} - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - portfinder@1.0.32: dependencies: async: 2.6.4 @@ -11484,13 +11151,6 @@ snapshots: optionalDependencies: tsx: 3.14.0 - preferred-pm@3.1.3: - dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - prelude-ls@1.1.2: {} prelude-ls@1.2.1: {} @@ -11536,8 +11196,6 @@ snapshots: proxy-from-env@1.1.0: {} - pseudomap@1.0.2: {} - punycode@2.3.1: {} pvtsutils@1.3.5: @@ -11556,8 +11214,6 @@ snapshots: queue-microtask@1.2.3: {} - quick-lru@4.0.1: {} - ramda@0.30.1: {} randombytes@2.1.0: @@ -11575,25 +11231,12 @@ snapshots: react-is@16.13.1: {} - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - read-pkg@3.0.0: dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -11619,11 +11262,6 @@ snapshots: dependencies: minimatch: 3.1.2 - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - reduce-flatten@2.0.0: {} reflect.getprototypeof@1.0.6: @@ -11651,8 +11289,6 @@ snapshots: require-from-string@2.0.2: {} - require-main-filename@2.0.0: {} - requireindex@1.2.0: {} resolve-from@3.0.0: {} @@ -11867,8 +11503,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-blocking@2.0.0: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -11939,15 +11573,6 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - smartwrap@2.0.2: - dependencies: - array.prototype.flat: 1.3.2 - breakword: 1.0.6 - grapheme-splitter: 1.0.4 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 15.4.1 - solc@0.7.3(debug@4.3.4): dependencies: command-exists: 1.2.9 @@ -12040,10 +11665,10 @@ snapshots: dependencies: whatwg-url: 7.1.0 - spawndamnit@2.0.0: + spawndamnit@3.0.1: dependencies: - cross-spawn: 5.1.0 - signal-exit: 3.0.7 + cross-spawn: 7.0.6 + signal-exit: 4.1.0 spdx-correct@3.2.0: dependencies: @@ -12067,10 +11692,6 @@ snapshots: statuses@2.0.1: {} - stream-transform@2.1.3: - dependencies: - mixme: 0.5.10 - string-format@2.0.0: {} string-width@2.1.1: @@ -12165,10 +11786,6 @@ snapshots: dependencies: is-hex-prefixed: 1.0.0 - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} @@ -12275,8 +11892,6 @@ snapshots: tree-kill@1.2.2: {} - trim-newlines@3.0.1: {} - ts-api-utils@1.3.0(typescript@5.4.5): dependencies: typescript: 5.4.5 @@ -12425,16 +12040,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - tty-table@4.2.3: - dependencies: - chalk: 4.1.2 - csv: 5.5.3 - kleur: 4.1.5 - smartwrap: 2.0.2 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 17.7.2 - turbo-darwin-64@1.13.2: optional: true @@ -12476,18 +12081,12 @@ snapshots: type-detect@4.0.8: {} - type-fest@0.13.1: {} - type-fest@0.20.2: {} type-fest@0.21.3: {} - type-fest@0.6.0: {} - type-fest@0.7.1: {} - type-fest@0.8.1: {} - type-fest@2.19.0: {} type-fest@4.26.1: {} @@ -12613,10 +12212,6 @@ snapshots: vary@1.1.2: {} - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - web3-utils@1.10.4: dependencies: '@ethereumjs/util': 8.1.0 @@ -12673,13 +12268,6 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.3 - which-module@2.0.1: {} - - which-pm@2.0.0: - dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 - which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 @@ -12745,25 +12333,14 @@ snapshots: bufferutil: 4.0.5 utf-8-validate: 5.0.7 - y18n@4.0.3: {} - y18n@5.0.8: {} - yallist@2.1.2: {} - yallist@4.0.0: {} yaml@2.4.1: {} - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@20.2.4: {} - yargs-parser@21.1.1: {} - yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 @@ -12771,20 +12348,6 @@ snapshots: flat: 5.0.2 is-plain-obj: 2.1.0 - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@16.2.0: dependencies: cliui: 7.0.4 @@ -12795,16 +12358,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 20.2.4 - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.1.2 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yn@3.1.1: {} yocto-queue@0.1.0: {} From e9ff88007c9aedf477371189a7ae7cdb644d5156 Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 29 Nov 2024 14:49:54 +0530 Subject: [PATCH 35/36] chore: fetch all remote branches in ci --- .github/workflows/pr.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 42e596a3..f0d4df9b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -49,10 +49,16 @@ jobs: with: # need this to get full git-history/clone in order to build changelogs and check changesets fetch-depth: 0 + fetch-tags: true - uses: FuelLabs/github-actions/setups/node@master with: node-version: 20.16.0 pnpm-version: 9.0.6 + - name: Fetch and verify remote branches + run: | + git fetch origin main:main + git branch -vv + git remote -v - run: pnpm changeset:check validate: From 99be07539c375686a4883e64367d6df76431c7be Mon Sep 17 00:00:00 2001 From: viraj124 Date: Fri, 29 Nov 2024 16:46:53 +0530 Subject: [PATCH 36/36] chore: add mocha for test suite --- packages/solidity-contracts/package.json | 2 ++ pnpm-lock.yaml | 3 +++ 2 files changed, 5 insertions(+) diff --git a/packages/solidity-contracts/package.json b/packages/solidity-contracts/package.json index 2bdef0f6..8d7842f8 100644 --- a/packages/solidity-contracts/package.json +++ b/packages/solidity-contracts/package.json @@ -24,6 +24,7 @@ "start-mining": "pnpm hardhat run --no-compile --network localhost scripts/startAutoMining.ts", "serve-deployments": "pnpm ts-node scripts/serveDeployments.ts", "test": "pnpm hardhat test", + "integration-test": "pnpm mocha -b -r ts-node/register 'integration-tests/**/*.ts'", "node:up": "sh ./scripts/node:up.sh", "hardhat:test:integration": "DISABLE_GAS_REPORTER=true pnpm hardhat --network mainnetFork test fork-integration-tests/**/*.ts --bail", "test-no-compile": "pnpm hardhat test --no-compile", @@ -48,6 +49,7 @@ "@typechain/hardhat": "^9.1.0", "@types/chai": "^4.3.4", "@types/cors": "2.8.17", + "mocha": "^10.0.0", "@types/express": "^4.17.14", "@types/lodash": "^4.14.202", "@types/mocha": "^10.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 43a8b0a3..3e0245a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -233,6 +233,9 @@ importers: markdownlint-cli: specifier: ^0.32.2 version: 0.32.2 + mocha: + specifier: ^10.0.0 + version: 10.4.0 node-fetch: specifier: ^2.6.6 version: 2.7.0