From 24fd15d83063cf411d5811b5e3f8686491ff0a0e Mon Sep 17 00:00:00 2001 From: hernandp Date: Wed, 20 Nov 2024 10:58:25 -0300 Subject: [PATCH 1/2] new: Unpause script --- deployment/evm/unpause-transfer.ts | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 deployment/evm/unpause-transfer.ts diff --git a/deployment/evm/unpause-transfer.ts b/deployment/evm/unpause-transfer.ts new file mode 100644 index 00000000..53d2371d --- /dev/null +++ b/deployment/evm/unpause-transfer.ts @@ -0,0 +1,46 @@ +import { + evm, + getContractAddress, + loadTbrPeers, +} from "../helpers/index.js"; +import { toUniversal } from "@wormhole-foundation/sdk-definitions"; +import { chainIdToChain, encoding } from "@wormhole-foundation/sdk-base"; +import { ConfigCommand, ConfigQuery, SupportedChain, Tbrv3 } from "@xlabs-xyz/evm-arbitrary-token-transfers"; +import { EvmAddress } from "@wormhole-foundation/sdk-evm"; +import { wrapEthersProvider } from "../helpers/evm.js"; + +/** + * Unpause transfers for Tbrv3 contracts. + */ +evm.runOnEvms("unpause-transfer", async (chain, signer, log) => { + const tbrv3ProxyAddress = new EvmAddress(getContractAddress("TbrV3Proxies", chain.chainId)); + const tbrv3 = Tbrv3.connect( + wrapEthersProvider(signer.provider!), + chain.network, + chainIdToChain(chain.chainId), + undefined, + tbrv3ProxyAddress + ); + + const queries = []; + queries.push({ query: "IsChainPaused", chain: chainIdToChain(chain.chainId) as SupportedChain } as const satisfies ConfigQuery); + const isPausedResults = await tbrv3.query([{query: "ConfigQueries", queries}]); + + if (!isPausedResults[0].result) { + log("Chain is already unpaused."); + return; + } + + console.log(`Unpausing chain ${chain}...`); + + const partialTx = tbrv3.execTx(0n, [ + { command: "ConfigCommands", + commands: [ + { command: "UpdateTransferPause", + chain: chainIdToChain(chain.chainId) as SupportedChain, + value: false } + ] }]) + const { txid } = await evm.sendTx(signer, { ...partialTx, data: encoding.hex.encode(partialTx.data, true) }); + log(`Unpause tx successful in ${txid}`); + +}); From 0e1d4bc1934a5f44b636c5bba7ed2fc22da5ba2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Claudio=20Nale?= Date: Wed, 20 Nov 2024 18:16:26 -0300 Subject: [PATCH 2/2] deployment: fixes unpause script so that it operates on peer chains --- deployment/evm/unpause-transfer.ts | 43 +++++++++++++++++++----------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/deployment/evm/unpause-transfer.ts b/deployment/evm/unpause-transfer.ts index 53d2371d..abaa61b8 100644 --- a/deployment/evm/unpause-transfer.ts +++ b/deployment/evm/unpause-transfer.ts @@ -2,9 +2,9 @@ import { evm, getContractAddress, loadTbrPeers, + LoggerFn } from "../helpers/index.js"; -import { toUniversal } from "@wormhole-foundation/sdk-definitions"; -import { chainIdToChain, encoding } from "@wormhole-foundation/sdk-base"; +import { Chain, chainIdToChain, encoding } from "@wormhole-foundation/sdk-base"; import { ConfigCommand, ConfigQuery, SupportedChain, Tbrv3 } from "@xlabs-xyz/evm-arbitrary-token-transfers"; import { EvmAddress } from "@wormhole-foundation/sdk-evm"; import { wrapEthersProvider } from "../helpers/evm.js"; @@ -12,35 +12,46 @@ import { wrapEthersProvider } from "../helpers/evm.js"; /** * Unpause transfers for Tbrv3 contracts. */ -evm.runOnEvms("unpause-transfer", async (chain, signer, log) => { - const tbrv3ProxyAddress = new EvmAddress(getContractAddress("TbrV3Proxies", chain.chainId)); +evm.runOnEvms("unpause-transfer", async (operatingChain, signer, log) => { + const tbrv3ProxyAddress = new EvmAddress(getContractAddress("TbrV3Proxies", operatingChain.chainId)); + const peers = loadTbrPeers(operatingChain); const tbrv3 = Tbrv3.connect( wrapEthersProvider(signer.provider!), - chain.network, - chainIdToChain(chain.chainId), + operatingChain.network, + chainIdToChain(operatingChain.chainId), undefined, tbrv3ProxyAddress ); - const queries = []; - queries.push({ query: "IsChainPaused", chain: chainIdToChain(chain.chainId) as SupportedChain } as const satisfies ConfigQuery); + // TODO: accept specific chains to pause or unpause instead of doing an ecosystem wide operation. + const queries = peers.map(({chainId}) => ({ query: "IsChainPaused", chain: chainIdToChain(chainId) as SupportedChain } as const satisfies ConfigQuery)); const isPausedResults = await tbrv3.query([{query: "ConfigQueries", queries}]); - if (!isPausedResults[0].result) { - log("Chain is already unpaused."); + const pausedChains = isPausedResults.filter(({result}) => result); + if (pausedChains.length === 0) { + log("These chains are already unpaused:"); + printChains(isPausedResults.map(({chain}) => chain), log); return; } - console.log(`Unpausing chain ${chain}...`); + console.log(`Unpausing chains:`); + printChains(pausedChains.map(({chain}) => chain), log); + + const commands = pausedChains.map(({chain}) => ({ + command: "UpdateTransferPause", + chain, + value: false, + } as const satisfies ConfigCommand)); const partialTx = tbrv3.execTx(0n, [ { command: "ConfigCommands", - commands: [ - { command: "UpdateTransferPause", - chain: chainIdToChain(chain.chainId) as SupportedChain, - value: false } - ] }]) + commands, + }]) const { txid } = await evm.sendTx(signer, { ...partialTx, data: encoding.hex.encode(partialTx.data, true) }); log(`Unpause tx successful in ${txid}`); }); + +function printChains(chains: Chain[], log: LoggerFn) { + log(`- ${chains.join("\n -")}`); +} \ No newline at end of file