diff --git a/evm/deploy-upgradable.js b/evm/deploy-upgradable.js index f46a8ce4..66ad42d5 100644 --- a/evm/deploy-upgradable.js +++ b/evm/deploy-upgradable.js @@ -20,15 +20,19 @@ function getProxy(wallet, proxyAddress) { return new Contract(proxyAddress, IUpgradable.abi, wallet); } -async function getImplementationArgs(contractName, config) { +async function getImplementationArgs(contractName, config, options) { const contractConfig = config[contractName]; switch (contractName) { case 'AxelarGasService': { + if (options.args) { + contractConfig.collector = options.args; + } + const collector = contractConfig.collector; if (!isAddress(collector)) { - throw new Error(`Missing AxelarGasService.collector in the chain info.`); + throw new Error(`Missing AxelarGasService.collector ${collector}.`); } return [collector]; @@ -94,7 +98,7 @@ function getUpgradeArgs(contractName, config) { * Deploy or upgrade an upgradable contract that's based on the init proxy pattern. */ async function deploy(options, chain) { - const { artifactPath, contractName, deployMethod, privateKey, upgrade, verifyEnv, yes } = options; + const { contractName, deployMethod, privateKey, upgrade, verifyEnv, yes } = options; const verifyOptions = verifyEnv ? { env: verifyEnv, chain: chain.name } : null; if (deployMethod === 'create3' && (contractName === 'AxelarGasService' || contractName === 'AxelarDepositService')) { @@ -107,6 +111,11 @@ async function deploy(options, chain) { const wallet = new Wallet(privateKey, provider); await printWalletInfo(wallet); + const artifactPath = + options.artifactPath || + '@axelar-network/axelar-cgp-solidity/artifacts/contracts/' + + (contractName === 'AxelarGasService' ? 'gas-service/' : 'deposit-service/'); + const implementationPath = artifactPath + contractName + '.sol/' + contractName + '.json'; const proxyPath = artifactPath + contractName + 'Proxy.sol/' + contractName + 'Proxy.json'; const implementationJson = require(implementationPath); @@ -119,7 +128,7 @@ async function deploy(options, chain) { } const contractConfig = contracts[contractName]; - const implArgs = await getImplementationArgs(contractName, contracts); + const implArgs = await getImplementationArgs(contractName, contracts, options); const gasOptions = contractConfig.gasOptions || chain.gasOptions || {}; printInfo(`Implementation args for chain ${chain.name}`, implArgs); console.log(`Gas override for chain ${chain.name}: ${JSON.stringify(gasOptions)}`); @@ -150,6 +159,7 @@ async function deploy(options, chain) { if (!yes) { const anwser = readlineSync.question(`Perform an upgrade for ${chain.name}? ${chalk.green('(y/n)')} `); if (anwser !== 'y') return; + console.log(''); } await upgradeUpgradable( @@ -306,17 +316,18 @@ program.addOption( .makeOptionMandatory(true) .env('ENV'), ); -program.addOption(new Option('-a, --artifactPath ', 'artifact path').makeOptionMandatory(true)); program.addOption(new Option('-c, --contractName ', 'contract name').makeOptionMandatory(true)); program.addOption(new Option('-n, --chainNames ', 'chain names').makeOptionMandatory(true)); program.addOption( new Option('-m, --deployMethod ', 'deployment method').choices(['create', 'create2', 'create3']).default('create2'), ); +program.addOption(new Option('-a, --artifactPath ', 'artifact path')); program.addOption(new Option('-p, --privateKey ', 'private key').makeOptionMandatory(true).env('PRIVATE_KEY')); program.addOption(new Option('-s, --salt ', 'salt to use for create2 deployment')); program.addOption(new Option('-u, --upgrade', 'upgrade a deployed contract')); program.addOption(new Option('-v, --verify', 'verify the deployed contract on the explorer').env('VERIFY')); program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); +program.addOption(new Option('--args ', 'customize deployment args')); program.action((options) => { main(options); diff --git a/evm/ownership.js b/evm/ownership.js index dfebd37f..a609ef4e 100644 --- a/evm/ownership.js +++ b/evm/ownership.js @@ -11,11 +11,14 @@ const { Contract, } = ethers; const { Command, Option } = require('commander'); -const { printInfo, printWalletInfo, loadConfig } = require('./utils'); +const { printInfo, printWalletInfo, loadConfig, saveConfig } = require('./utils'); +const readlineSync = require('readline-sync'); +const chalk = require('chalk'); + const IOwnable = require('@axelar-network/axelar-gmp-sdk-solidity/artifacts/contracts/interfaces/IOwnable.sol/IOwnable.json'); async function processCommand(options, chain) { - const { contractName, address, action, privateKey, newOwner } = options; + const { contractName, address, action, privateKey, newOwner, yes } = options; const contracts = chain.contracts; const contractConfig = contracts[contractName]; @@ -35,18 +38,24 @@ async function processCommand(options, chain) { const rpc = chain.rpc; const provider = getDefaultProvider(rpc); + printInfo('Chain', chain.name); + printInfo('Contract name', contractName); + const wallet = new Wallet(privateKey, provider); await printWalletInfo(wallet); - printInfo('Contract name', contractName); - const ownershipContract = new Contract(ownershipAddress, IOwnable.abi, wallet); const gasOptions = contractConfig.gasOptions || chain.gasOptions || {}; - console.log(`Gas override for chain ${chain.name}: ${JSON.stringify(gasOptions)}`); + printInfo(`Gas override for ${chain.name}`, JSON.stringify(gasOptions)); printInfo('Ownership Action', action); + if (!yes) { + const anwser = readlineSync.question(`Proceed with action on ${chain.name}? ${chalk.green('(y/n)')} `); + if (anwser !== 'y') return; + } + switch (action) { case 'owner': { const owner = await ownershipContract.owner(); @@ -92,6 +101,8 @@ async function processCommand(options, chain) { printInfo(`New contract owner: ${owner}`); + contractConfig.owner = owner; + break; } @@ -148,6 +159,8 @@ async function processCommand(options, chain) { printInfo(`New contract owner: ${newOwner}`); + contractConfig.owner = newOwner; + break; } @@ -174,6 +187,7 @@ async function main(options) { for (const chain of chains) { await processCommand(options, config.chains[chain.toLowerCase()]); + saveConfig(config, options.env); } } @@ -191,7 +205,7 @@ program.addOption( program.addOption(new Option('-p, --privateKey ', 'private key').makeOptionMandatory(true).env('PRIVATE_KEY')); program.addOption(new Option('-c, --contractName ', 'contract name').makeOptionMandatory(true)); -program.addOption(new Option('-n, --chain ', 'chain name').makeOptionMandatory(true)); +program.addOption(new Option('-n, --chainNames ', 'chain names').makeOptionMandatory(true)); program.addOption(new Option('--address
', 'override address').makeOptionMandatory(false)); program.addOption( new Option('--action ', 'ownership action').choices([ @@ -202,7 +216,8 @@ program.addOption( 'acceptOwnership', ]), ); -program.addOption(new Option('-d, --newOwner ', 'new owner address').makeOptionMandatory(false)); +program.addOption(new Option('--newOwner ', 'new owner address').makeOptionMandatory(false)); +program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); program.action((options) => { main(options); diff --git a/evm/upgradable.js b/evm/upgradable.js index c8c47781..472d9211 100644 --- a/evm/upgradable.js +++ b/evm/upgradable.js @@ -4,7 +4,7 @@ const { Contract, ContractFactory } = require('ethers'); const { deployAndInitContractConstant, create3DeployAndInitContract } = require('@axelar-network/axelar-gmp-sdk-solidity'); const IUpgradable = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/IUpgradable.json'); -const { verifyContract, deployCreate, getBytecodeHash, deployContract, printInfo } = require('./utils'); +const { verifyContract, deployCreate, getBytecodeHash, deployContract, printInfo, getDeployedAddress, isContract } = require('./utils'); async function deployUpgradable( wallet, @@ -111,15 +111,32 @@ async function upgradeUpgradable( ) { const proxy = new Contract(proxyAddress, IUpgradable.abi, wallet); - const implementation = await deployContract( - deployMethod, - wallet, + const predictedAddress = await getDeployedAddress(wallet.address, deployMethod, { + ...deployOptions, contractJson, - implementationConstructorArgs, - deployOptions, - gasOptions, - verifyOptions, - ); + constructorArgs: implementationConstructorArgs, + provider: wallet.provider, + }); + + printInfo('Predicted Implementation Address', predictedAddress); + let implementation; + + if (await isContract(predictedAddress, wallet.provider)) { + printInfo('New Implementation already deployed', predictedAddress); + implementation = new Contract(predictedAddress, contractJson.abi, wallet); + } else { + implementation = await deployContract( + deployMethod, + wallet, + contractJson, + implementationConstructorArgs, + deployOptions, + gasOptions, + verifyOptions, + ); + printInfo('New Implementation', implementation.address); + } + const implementationCodeHash = await getBytecodeHash(implementation, chain); printInfo('New Implementation Code Hash', implementationCodeHash); diff --git a/evm/utils.js b/evm/utils.js index e8a6f694..c2208cc7 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -3,7 +3,6 @@ const { ContractFactory, Contract, - provider, utils: { computeAddress, getContractAddress, keccak256, isAddress, getCreate2Address, defaultAbiCoder }, } = require('ethers'); const https = require('https'); @@ -332,11 +331,6 @@ const isAddressArray = (arg) => { return true; }; -const isContract = async (target) => { - const code = await provider.getCode(target); - return code !== '0x'; -}; - /** * Determines if a given input is a valid keccak256 hash. * @@ -696,6 +690,16 @@ function wasEventEmitted(receipt, contract, eventName) { return receipt.logs.some((log) => log.topics[0] === event.topics[0]); } +const isContract = async (address, provider) => { + try { + const code = await provider.getCode(address); + return code && code !== '0x'; + } catch (err) { + console.error('Error:', err); + return false; + } +}; + module.exports = { deployCreate, deployCreate2, @@ -718,7 +722,6 @@ module.exports = { isNumber, isNumberArray, isAddressArray, - isContract, isKeccak256Hash, parseArgs, getProxy, @@ -731,4 +734,5 @@ module.exports = { etaToUnixTimestamp, getCurrentTimeInSeconds, wasEventEmitted, + isContract, }; diff --git a/info/testnet.json b/info/testnet.json index d5fe7fb1..8eb38d55 100644 --- a/info/testnet.json +++ b/info/testnet.json @@ -13,9 +13,10 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x45EBDdA7573eafFD69A11DCD06DcF4E88F968998", + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -59,6 +60,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -79,9 +87,10 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xdAD9eF6B912c3aC0Fbb09Ec7BBADa01732e9C890", + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -125,6 +134,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -148,9 +164,10 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xD55a35D937548656a1a4d70890E87409Df1152B1", + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -197,6 +214,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -220,9 +244,10 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5f371178A61e01149CB416F0b5d3842d24E7ae6b", + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -266,6 +291,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -289,9 +321,10 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x71856B99E54c924DC92140C6dc643a67eDed0F33", + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -335,6 +368,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -358,9 +398,10 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x4c671CA2828c9A8D87d917196bc9FB8bFd905445", + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -404,6 +445,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -423,10 +471,11 @@ }, "AxelarGasService": { "salt": "AxelarGasService", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x7aA668025468Fba303974972d95f8296a2De4EB3", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -470,6 +519,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -490,9 +546,10 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xB52988248c2c58f514DC45162713833a5abAC0B2", + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -533,6 +590,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -555,10 +619,11 @@ }, "AxelarGasService": { "salt": "AxelarGasService", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xfEF5c90d84a1C93804496f5e7fbf98ec0C85243C", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -602,6 +667,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -620,10 +692,11 @@ }, "AxelarGasService": { "salt": "AxelarGasService", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -667,6 +740,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -690,10 +770,11 @@ }, "AxelarGasService": { "salt": "AxelarGasService", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -737,6 +818,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -765,10 +853,11 @@ "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" }, "AxelarGasService": { - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbe406f0189a0b4cf3a05c286473d23791dd44cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "wrappedSymbol": "", @@ -806,6 +895,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -832,10 +928,11 @@ }, "AxelarGasService": { "salt": "AxelarGasService", - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "salt": "AxelarDepositService", @@ -876,6 +973,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -901,10 +1005,11 @@ "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" }, "AxelarGasService": { - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "wrappedSymbol": "", @@ -945,6 +1050,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -968,10 +1080,11 @@ "tokenDeployer": "0x8A156bCA562FB75385c4d41ea6903E270A34B727" }, "AxelarGasService": { - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "wrappedSymbol": "", @@ -996,6 +1109,13 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "salt": "InterchainProposalSender v1.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": { @@ -1010,7 +1130,7 @@ "name": "Centrifuge", "id": "centrifuge", "chainId": 2089, - "rpc": "https://node-7103415746313531392.lh.onfinality.io/rpc?apikey=f8ccfe8f-da25-4a8b-ab42-b68eb2e3fb3d", + "rpc": "https://fullnode.algol.cntrfg.com", "tokenSymbol": "ALGL", "contracts": { "AxelarGateway": { @@ -1021,10 +1141,11 @@ "tokenDeployer": "0x8A156bCA562FB75385c4d41ea6903E270A34B727" }, "AxelarGasService": { - "collector": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + "implementation": "0x125AAf72B24a78f7aE5Cae92D7717f533633320d", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { "wrappedSymbol": "", @@ -1036,6 +1157,13 @@ }, "ConstAddressDeployer": { "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "salt": "Operators" } }, "explorer": {