From a295568e58e3c7eeff9da58dff6d26c9240254bb Mon Sep 17 00:00:00 2001 From: Bruce Riley Date: Fri, 28 Jan 2022 20:00:56 +0000 Subject: [PATCH] Enhance logging in the relayer --- swap_relayer/src/evm.ts | 53 ++++++++++++++++++++-------- swap_relayer/src/index.ts | 17 ++++++--- swap_relayer/src/terra.ts | 74 +++++++++++++++++++++++++-------------- 3 files changed, 99 insertions(+), 45 deletions(-) diff --git a/swap_relayer/src/evm.ts b/swap_relayer/src/evm.ts index cb1cb08..fe495fe 100644 --- a/swap_relayer/src/evm.ts +++ b/swap_relayer/src/evm.ts @@ -300,17 +300,21 @@ async function relayVaaToEvmChain( "]" ); - if (await isRedeemedOnEvm(t3Payload, tcd, signedVaaArray)) { + if (await isRedeemedOnEvm(tcd, signedVaaArray)) { logger.info( "relayVaaTo" + tcd.name + - ": contract: [" + + ": srcChain: " + + t3Payload.sourceChainId + + ", targetChain: " + + t3Payload.targetChainId + + ", contract: [" + t3Payload.contractAddress + "], exactIn: " + exactIn + ", native: " + native + - ": already transferred" + ": completed: already transferred" ); return; @@ -319,7 +323,11 @@ async function relayVaaToEvmChain( logger.info( "relayVaaTo" + tcd.name + - ": contract: [" + + ": srcChain: " + + t3Payload.sourceChainId + + ", targetChain: " + + t3Payload.targetChainId + + ", contract: [" + t3Payload.contractAddress + "], exactIn: " + exactIn + @@ -363,27 +371,35 @@ async function relayVaaToEvmChain( logger.info( "relayVaaTo" + tcd.name + - ": contract: [" + + ": srcChain: " + + t3Payload.sourceChainId + + ", targetChain: " + + t3Payload.targetChainId + + ", contract: [" + t3Payload.contractAddress + "], exactIn: " + exactIn + ", native: " + native + - ": success, txHash: " + + ": completed: success, txHash: " + receipt.transactionHash ); } catch (e: any) { - if (await isRedeemedOnEvm(t3Payload, tcd, signedVaaArray)) { + if (await isRedeemedOnEvm(tcd, signedVaaArray)) { logger.info( "relayVaaTo" + tcd.name + - ": contract: [" + + ": srcChain: " + + t3Payload.sourceChainId + + ", targetChain: " + + t3Payload.targetChainId + + ", contract: [" + t3Payload.contractAddress + "], exactIn: " + exactIn + ", native: " + native + - ": relay failed because the vaa has already been redeemed" + ": completed: relay failed because the vaa has already been redeemed" ); return; @@ -403,35 +419,42 @@ async function relayVaaToEvmChain( ); } - if (await isRedeemedOnEvm(t3Payload, tcd, signedVaaArray)) { + if (await isRedeemedOnEvm(tcd, signedVaaArray)) { logger.info( "relayVaaTo" + tcd.name + - ": contract: [" + + ": srcChain: " + + t3Payload.sourceChainId + + ", targetChain: " + + t3Payload.targetChainId + + ", contract: [" + t3Payload.contractAddress + "], exactIn: " + exactIn + ", native: " + native + - ": redeem succeeded" + ": redeem confirmed" ); } else { logger.error( "relayVaaTo" + tcd.name + - ": contract: [" + + ": srcChain: " + + t3Payload.sourceChainId + + ", targetChain: " + + t3Payload.targetChainId + + ", contract: [" + t3Payload.contractAddress + "], exactIn: " + exactIn + ", native: " + native + - ": redeem failed!" + ": completed: failed to confirm redeem!" ); } } async function isRedeemedOnEvm( - t3Payload: Type3Payload, tcd: EvmContractData, signedVaaArray: Uint8Array ): Promise { diff --git a/swap_relayer/src/index.ts b/swap_relayer/src/index.ts index 17dfdac..7d33294 100644 --- a/swap_relayer/src/index.ts +++ b/swap_relayer/src/index.ts @@ -61,6 +61,7 @@ export type OurEnvironment = { }; export type Type3Payload = { + sourceChainId: number; targetChainId: number; contractAddress: string; relayerFee: ethers.BigNumber; @@ -224,7 +225,7 @@ async function processVaa(vaaBytes: string) { let t3Payload: Type3Payload = null; try { - t3Payload = decodeSignedVAAPayloadType3(parsedVAA); + t3Payload = decodeSignedVAAPayloadType3(parsedVAA, parsedVAA.emitter_chain); } catch (e) { logger.error("failed to parse type 3 vaa: %o", e); return; @@ -239,7 +240,9 @@ async function processVaa(vaaBytes: string) { emitter_address + "], seqNum: " + parsedVAA.sequence + - ", contractAddress: [" + + ", target: [" + + t3Payload.targetChainId + + ":" + t3Payload.contractAddress + "], relayerFee: [" + t3Payload.relayerFee + @@ -259,7 +262,9 @@ async function processVaa(vaaBytes: string) { emitter_address + "], seqNum: " + parsedVAA.sequence + - ", contractAddress: [" + + ", target: [" + + t3Payload.targetChainId + + ":" + t3Payload.contractAddress + "], relayerFee: [" + t3Payload.relayerFee + @@ -284,7 +289,10 @@ async function processVaa(vaaBytes: string) { } } -function decodeSignedVAAPayloadType3(parsedVAA: any): Type3Payload { +function decodeSignedVAAPayloadType3( + parsedVAA: any, + sourceChainId: number +): Type3Payload { const payload = Buffer.from(new Uint8Array(parsedVAA.payload)); if (payload[0] !== 3) return undefined; @@ -329,6 +337,7 @@ function decodeSignedVAAPayloadType3(parsedVAA: any): Type3Payload { } return { + sourceChainId: sourceChainId, targetChainId: targetChainId, contractAddress: contractAddress, relayerFee: ethers.BigNumber.from(payload.slice(101, 101 + 32)), diff --git a/swap_relayer/src/terra.ts b/swap_relayer/src/terra.ts index dbf6a20..ee7dd07 100644 --- a/swap_relayer/src/terra.ts +++ b/swap_relayer/src/terra.ts @@ -173,22 +173,20 @@ export async function relayVaaToTerra( // "]" // ); - // if (await isRedeemedOnTerra(t3Payload, terraContractData, signedVaaArray)) { + // if (await isRedeemedOnTerra(terraContractData, vaaBytes)) { // logger.info( - // "relayVaaToTerra: contract: [" + + // "relayVaaToTerra: srcChain: " + + // t3Payload.sourceChainId + + // ", targetChain: " + + // t3Payload.targetChainId + + // ", contract: [" + // t3Payload.contractAddress + - // "]: already transferred" + // "]: completed: already redeemed" // ); // return; // } - logger.info( - "relayVaaToTerra: contract: [" + - t3Payload.contractAddress + - "]: submitting redeem request" - ); - try { logger.debug( "relayVaaToTerra: creating message using contract address [" + @@ -237,13 +235,22 @@ export async function relayVaaToTerra( // fee: feeEstimate, }); - logger.debug("relayVaaToTerra: submitting transaction"); - const receipt = await terraContractData.lcdClient.tx.broadcast(tx); - logger.info( "relayVaaToTerra: contract: [" + t3Payload.contractAddress + - "]: success: %o", + "]: submitting redeem request" + ); + + const receipt = await terraContractData.lcdClient.tx.broadcast(tx); + + logger.info( + "relayVaaToTerra: srcChain: " + + t3Payload.sourceChainId + + ", targetChain: " + + t3Payload.targetChainId + + ", contract: [" + + t3Payload.contractAddress + + "]: completed: success: %o", receipt ); @@ -254,43 +261,58 @@ export async function relayVaaToTerra( // receipt.transactionHash // ); } catch (e: any) { - // if (await isRedeemedOnTerra(t3Payload, terraContractData, signedVaaArray)) { + // if (await isRedeemedOnTerra(terraContractData, vaaBytes)) { // logger.info( - // "relayVaaToTerra: contract: [" + + // "relayVaaToTerra: srcChain: " + + // t3Payload.sourceChainId + + // ", targetChain: " + + // t3Payload.targetChainId + + // ", contract: [" + // t3Payload.contractAddress + - // "]: relay failed because the vaa has already been redeemed" + // "]: completed: relay failed because the vaa has already been redeemed" // ); // return; // } logger.error( - "relayVaaToTerra: contract: [" + + "relayVaaToTerra: srcChain: " + + t3Payload.sourceChainId + + ", targetChain: " + + t3Payload.targetChainId + + ", contract: [" + t3Payload.contractAddress + - "]: transaction failed: %o", + "]: completed: transaction failed: %o", e ); } - // if (await isRedeemedOnTerra(t3Payload, terraContractData, signedVaaArray)) { + // if (await isRedeemedOnTerra(terraContractData, vaaBytes)) { // logger.info( - // "relayVaaToTerra: contract: [" + + // "relayVaaToTerra: srcChain: " + + // t3Payload.sourceChainId + + // ", targetChain: " + + // t3Payload.targetChainId + + // ", contract: [" + // t3Payload.contractAddress + - // "]: redeem succeeded" + // "]: redeem confirmed" // ); // } else { // logger.error( - // "relayVaaToTerra: contract: [" + + // "relayVaaToTerra: srcChain: " + + // t3Payload.sourceChainId + + // ", targetChain: " + + // t3Payload.targetChainId + + // ", contract: [" + // t3Payload.contractAddress + - // "]: redeem failed!" + // "]: completed: failed to confirm redeem!" // ); // } } async function isRedeemedOnTerra( - t3Payload: Type3Payload, terraContractData: TerraContractData, - signedVaaArray: Uint8Array + vaaBytes: string ): Promise { let msg: Terra.MsgExecuteContract = null; let sequenceNumber: number = 0; @@ -300,7 +322,7 @@ async function isRedeemedOnTerra( terraContractData.tokenBridgeAddress, { submit_vaa: { - data: fromUint8Array(signedVaaArray), + data: Buffer.from(vaaBytes, "hex").toString("base64"), }, } );