From 54caf43910a927b3d62cd318bf61c58946d959fd Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Tue, 15 Oct 2024 13:00:53 +0300 Subject: [PATCH] Populate revert context with correct data --- packages/localnet/src/createToken.ts | 2 +- packages/localnet/src/handleOnEVMCalled.ts | 2 ++ packages/localnet/src/handleOnEVMDeposited.ts | 11 ++++---- packages/localnet/src/handleOnRevertEVM.ts | 8 ++++-- packages/localnet/src/handleOnRevertZEVM.ts | 8 ++++-- packages/localnet/src/handleOnZEVMCalled.ts | 2 ++ .../localnet/src/handleOnZEVMWithdrawn.ts | 27 ++++++++++--------- 7 files changed, 37 insertions(+), 23 deletions(-) diff --git a/packages/localnet/src/createToken.ts b/packages/localnet/src/createToken.ts index 14bbea1..708998e 100644 --- a/packages/localnet/src/createToken.ts +++ b/packages/localnet/src/createToken.ts @@ -98,7 +98,7 @@ export const createToken = async ({ foreignCoins.push({ zrc20_contract_address: zrc20.target, - asset: isGasToken ? "" : (erc20 as any).target, + asset: isGasToken ? ethers.ZeroAddress : (erc20 as any).target, foreign_chain_id: "1", decimals: 18, name: `ZetaChain ZRC-20 ${symbol}`, diff --git a/packages/localnet/src/handleOnEVMCalled.ts b/packages/localnet/src/handleOnEVMCalled.ts index 1621071..2365a7b 100644 --- a/packages/localnet/src/handleOnEVMCalled.ts +++ b/packages/localnet/src/handleOnEVMCalled.ts @@ -62,6 +62,8 @@ export const handleOnEVMCalled = async ({ return await handleOnRevertEVM({ revertOptions, err, + amount: 0, + asset: ethers.ZeroAddress, tss, provider, protocolContracts, diff --git a/packages/localnet/src/handleOnEVMDeposited.ts b/packages/localnet/src/handleOnEVMDeposited.ts index 64f8c84..50ed330 100644 --- a/packages/localnet/src/handleOnEVMDeposited.ts +++ b/packages/localnet/src/handleOnEVMDeposited.ts @@ -24,12 +24,11 @@ export const handleOnEVMDeposited = async ({ exitOnError: boolean; }) => { log("EVM", "Gateway: 'Deposited' event emitted"); + const receiver = args[1]; + const amount = args[2]; + const asset = args[3]; + const message = args[4]; try { - const receiver = args[1]; - const amount = args[2]; - const asset = args[3]; - const message = args[4]; - let foreignCoin; if (asset === ethers.ZeroAddress) { foreignCoin = foreignCoins.find((coin) => coin.coin_type === "Gas"); @@ -87,6 +86,8 @@ export const handleOnEVMDeposited = async ({ const revertOptions = args[5]; return await handleOnRevertEVM({ revertOptions, + asset, + amount, err, tss, provider, diff --git a/packages/localnet/src/handleOnRevertEVM.ts b/packages/localnet/src/handleOnRevertEVM.ts index 183fa96..289ba98 100644 --- a/packages/localnet/src/handleOnRevertEVM.ts +++ b/packages/localnet/src/handleOnRevertEVM.ts @@ -4,6 +4,8 @@ import { ethers, NonceManager } from "ethers"; export const handleOnRevertEVM = async ({ revertOptions, + asset, + amount, err, provider, tss, @@ -12,6 +14,8 @@ export const handleOnRevertEVM = async ({ }: { revertOptions: any; err: any; + asset: any; + amount: any; provider: any; tss: any; protocolContracts: any; @@ -21,8 +25,8 @@ export const handleOnRevertEVM = async ({ const revertAddress = revertOptions[0]; const revertMessage = revertOptions[3]; const revertContext = { - asset: ethers.ZeroAddress, - amount: 0, + asset, + amount, // this should deduct the gas costs revertMessage, }; if (callOnRevert) { diff --git a/packages/localnet/src/handleOnRevertZEVM.ts b/packages/localnet/src/handleOnRevertZEVM.ts index 3beab18..f722719 100644 --- a/packages/localnet/src/handleOnRevertZEVM.ts +++ b/packages/localnet/src/handleOnRevertZEVM.ts @@ -4,6 +4,8 @@ import { logErr } from "./log"; export const handleOnRevertZEVM = async ({ revertOptions, err, + asset, + amount, provider, tss, log, @@ -14,6 +16,8 @@ export const handleOnRevertZEVM = async ({ }: { revertOptions: any; err: any; + asset: any; + amount: any; provider: any; fungibleModuleSigner: any; tss: NonceManager; @@ -26,8 +30,8 @@ export const handleOnRevertZEVM = async ({ const revertAddress = revertOptions[0]; const revertMessage = revertOptions[3]; const revertContext = { - asset: ethers.ZeroAddress, - amount: 0, + asset, + amount, revertMessage, }; diff --git a/packages/localnet/src/handleOnZEVMCalled.ts b/packages/localnet/src/handleOnZEVMCalled.ts index 33885e8..bcf2aa3 100644 --- a/packages/localnet/src/handleOnZEVMCalled.ts +++ b/packages/localnet/src/handleOnZEVMCalled.ts @@ -45,6 +45,8 @@ export const handleOnZEVMCalled = async ({ return await handleOnRevertZEVM({ revertOptions, err, + amount: 0, + asset: ethers.ZeroAddress, provider, fungibleModuleSigner, tss, diff --git a/packages/localnet/src/handleOnZEVMWithdrawn.ts b/packages/localnet/src/handleOnZEVMWithdrawn.ts index eff273a..ded8934 100644 --- a/packages/localnet/src/handleOnZEVMWithdrawn.ts +++ b/packages/localnet/src/handleOnZEVMWithdrawn.ts @@ -25,26 +25,26 @@ export const handleOnZEVMWithdrawn = async ({ exitOnError: boolean; }) => { log("ZetaChain", "Gateway: 'Withdrawn' event emitted"); + const getERC20ByZRC20 = (zrc20: string) => { + const foreignCoin = foreignCoins.find( + (coin: any) => coin.zrc20_contract_address === zrc20 + ); + if (!foreignCoin) { + logErr("EVM", `Foreign coin not found for ZRC20 address: ${zrc20}`); + return; + } + return foreignCoin.asset; + }; + const zrc20 = args[3]; + const amount = args[4]; try { const receiver = args[2]; - const zrc20 = args[3]; - const amount = args[4]; const message = args[7]; (tss as NonceManager).reset(); const zrc20Contract = new ethers.Contract(zrc20, ZRC20.abi, deployer); const coinType = await zrc20Contract.COIN_TYPE(); const isGasToken = coinType === 1n; const isERC20orZETA = coinType === 2n; - const getERC20ByZRC20 = (zrc20: string) => { - const foreignCoin = foreignCoins.find( - (coin: any) => coin.zrc20_contract_address === zrc20 - ); - if (!foreignCoin) { - logErr("EVM", `Foreign coin not found for ZRC20 address: ${zrc20}`); - return; - } - return foreignCoin.asset; - }; if (message !== "0x") { // The message is not empty, so this is a withdrawAndCall operation log("EVM", `Calling ${receiver} with message ${message}`); @@ -54,7 +54,6 @@ export const handleOnZEVMWithdrawn = async ({ .execute(receiver, message, { value: amount, ...deployOpts }); await executeTx.wait(); } else { - console.log("!!!"); const erc20 = getERC20ByZRC20(zrc20); const executeTx = await protocolContracts.custody .connect(tss) @@ -102,6 +101,8 @@ export const handleOnZEVMWithdrawn = async ({ err, provider, tss, + asset: getERC20ByZRC20(zrc20), + amount, log, fungibleModuleSigner, protocolContracts,