Enhance logging in the relayer

This commit is contained in:
Bruce Riley 2022-01-28 20:00:56 +00:00
parent ea822b5fb2
commit a295568e58
3 changed files with 99 additions and 45 deletions

View File

@ -300,17 +300,21 @@ async function relayVaaToEvmChain(
"]" "]"
); );
if (await isRedeemedOnEvm(t3Payload, tcd, signedVaaArray)) { if (await isRedeemedOnEvm(tcd, signedVaaArray)) {
logger.info( logger.info(
"relayVaaTo" + "relayVaaTo" +
tcd.name + tcd.name +
": contract: [" + ": srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress + t3Payload.contractAddress +
"], exactIn: " + "], exactIn: " +
exactIn + exactIn +
", native: " + ", native: " +
native + native +
": already transferred" ": completed: already transferred"
); );
return; return;
@ -319,7 +323,11 @@ async function relayVaaToEvmChain(
logger.info( logger.info(
"relayVaaTo" + "relayVaaTo" +
tcd.name + tcd.name +
": contract: [" + ": srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress + t3Payload.contractAddress +
"], exactIn: " + "], exactIn: " +
exactIn + exactIn +
@ -363,27 +371,35 @@ async function relayVaaToEvmChain(
logger.info( logger.info(
"relayVaaTo" + "relayVaaTo" +
tcd.name + tcd.name +
": contract: [" + ": srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress + t3Payload.contractAddress +
"], exactIn: " + "], exactIn: " +
exactIn + exactIn +
", native: " + ", native: " +
native + native +
": success, txHash: " + ": completed: success, txHash: " +
receipt.transactionHash receipt.transactionHash
); );
} catch (e: any) { } catch (e: any) {
if (await isRedeemedOnEvm(t3Payload, tcd, signedVaaArray)) { if (await isRedeemedOnEvm(tcd, signedVaaArray)) {
logger.info( logger.info(
"relayVaaTo" + "relayVaaTo" +
tcd.name + tcd.name +
": contract: [" + ": srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress + t3Payload.contractAddress +
"], exactIn: " + "], exactIn: " +
exactIn + exactIn +
", native: " + ", native: " +
native + native +
": relay failed because the vaa has already been redeemed" ": completed: relay failed because the vaa has already been redeemed"
); );
return; return;
@ -403,35 +419,42 @@ async function relayVaaToEvmChain(
); );
} }
if (await isRedeemedOnEvm(t3Payload, tcd, signedVaaArray)) { if (await isRedeemedOnEvm(tcd, signedVaaArray)) {
logger.info( logger.info(
"relayVaaTo" + "relayVaaTo" +
tcd.name + tcd.name +
": contract: [" + ": srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress + t3Payload.contractAddress +
"], exactIn: " + "], exactIn: " +
exactIn + exactIn +
", native: " + ", native: " +
native + native +
": redeem succeeded" ": redeem confirmed"
); );
} else { } else {
logger.error( logger.error(
"relayVaaTo" + "relayVaaTo" +
tcd.name + tcd.name +
": contract: [" + ": srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress + t3Payload.contractAddress +
"], exactIn: " + "], exactIn: " +
exactIn + exactIn +
", native: " + ", native: " +
native + native +
": redeem failed!" ": completed: failed to confirm redeem!"
); );
} }
} }
async function isRedeemedOnEvm( async function isRedeemedOnEvm(
t3Payload: Type3Payload,
tcd: EvmContractData, tcd: EvmContractData,
signedVaaArray: Uint8Array signedVaaArray: Uint8Array
): Promise<boolean> { ): Promise<boolean> {

View File

@ -61,6 +61,7 @@ export type OurEnvironment = {
}; };
export type Type3Payload = { export type Type3Payload = {
sourceChainId: number;
targetChainId: number; targetChainId: number;
contractAddress: string; contractAddress: string;
relayerFee: ethers.BigNumber; relayerFee: ethers.BigNumber;
@ -224,7 +225,7 @@ async function processVaa(vaaBytes: string) {
let t3Payload: Type3Payload = null; let t3Payload: Type3Payload = null;
try { try {
t3Payload = decodeSignedVAAPayloadType3(parsedVAA); t3Payload = decodeSignedVAAPayloadType3(parsedVAA, parsedVAA.emitter_chain);
} catch (e) { } catch (e) {
logger.error("failed to parse type 3 vaa: %o", e); logger.error("failed to parse type 3 vaa: %o", e);
return; return;
@ -239,7 +240,9 @@ async function processVaa(vaaBytes: string) {
emitter_address + emitter_address +
"], seqNum: " + "], seqNum: " +
parsedVAA.sequence + parsedVAA.sequence +
", contractAddress: [" + ", target: [" +
t3Payload.targetChainId +
":" +
t3Payload.contractAddress + t3Payload.contractAddress +
"], relayerFee: [" + "], relayerFee: [" +
t3Payload.relayerFee + t3Payload.relayerFee +
@ -259,7 +262,9 @@ async function processVaa(vaaBytes: string) {
emitter_address + emitter_address +
"], seqNum: " + "], seqNum: " +
parsedVAA.sequence + parsedVAA.sequence +
", contractAddress: [" + ", target: [" +
t3Payload.targetChainId +
":" +
t3Payload.contractAddress + t3Payload.contractAddress +
"], relayerFee: [" + "], relayerFee: [" +
t3Payload.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)); const payload = Buffer.from(new Uint8Array(parsedVAA.payload));
if (payload[0] !== 3) return undefined; if (payload[0] !== 3) return undefined;
@ -329,6 +337,7 @@ function decodeSignedVAAPayloadType3(parsedVAA: any): Type3Payload {
} }
return { return {
sourceChainId: sourceChainId,
targetChainId: targetChainId, targetChainId: targetChainId,
contractAddress: contractAddress, contractAddress: contractAddress,
relayerFee: ethers.BigNumber.from(payload.slice(101, 101 + 32)), relayerFee: ethers.BigNumber.from(payload.slice(101, 101 + 32)),

View File

@ -173,22 +173,20 @@ export async function relayVaaToTerra(
// "]" // "]"
// ); // );
// if (await isRedeemedOnTerra(t3Payload, terraContractData, signedVaaArray)) { // if (await isRedeemedOnTerra(terraContractData, vaaBytes)) {
// logger.info( // logger.info(
// "relayVaaToTerra: contract: [" + // "relayVaaToTerra: srcChain: " +
// t3Payload.sourceChainId +
// ", targetChain: " +
// t3Payload.targetChainId +
// ", contract: [" +
// t3Payload.contractAddress + // t3Payload.contractAddress +
// "]: already transferred" // "]: completed: already redeemed"
// ); // );
// return; // return;
// } // }
logger.info(
"relayVaaToTerra: contract: [" +
t3Payload.contractAddress +
"]: submitting redeem request"
);
try { try {
logger.debug( logger.debug(
"relayVaaToTerra: creating message using contract address [" + "relayVaaToTerra: creating message using contract address [" +
@ -237,13 +235,22 @@ export async function relayVaaToTerra(
// fee: feeEstimate, // fee: feeEstimate,
}); });
logger.debug("relayVaaToTerra: submitting transaction");
const receipt = await terraContractData.lcdClient.tx.broadcast(tx);
logger.info( logger.info(
"relayVaaToTerra: contract: [" + "relayVaaToTerra: contract: [" +
t3Payload.contractAddress + 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 receipt
); );
@ -254,43 +261,58 @@ export async function relayVaaToTerra(
// receipt.transactionHash // receipt.transactionHash
// ); // );
} catch (e: any) { } catch (e: any) {
// if (await isRedeemedOnTerra(t3Payload, terraContractData, signedVaaArray)) { // if (await isRedeemedOnTerra(terraContractData, vaaBytes)) {
// logger.info( // logger.info(
// "relayVaaToTerra: contract: [" + // "relayVaaToTerra: srcChain: " +
// t3Payload.sourceChainId +
// ", targetChain: " +
// t3Payload.targetChainId +
// ", contract: [" +
// t3Payload.contractAddress + // t3Payload.contractAddress +
// "]: relay failed because the vaa has already been redeemed" // "]: completed: relay failed because the vaa has already been redeemed"
// ); // );
// return; // return;
// } // }
logger.error( logger.error(
"relayVaaToTerra: contract: [" + "relayVaaToTerra: srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress + t3Payload.contractAddress +
"]: transaction failed: %o", "]: completed: transaction failed: %o",
e e
); );
} }
// if (await isRedeemedOnTerra(t3Payload, terraContractData, signedVaaArray)) { // if (await isRedeemedOnTerra(terraContractData, vaaBytes)) {
// logger.info( // logger.info(
// "relayVaaToTerra: contract: [" + // "relayVaaToTerra: srcChain: " +
// t3Payload.sourceChainId +
// ", targetChain: " +
// t3Payload.targetChainId +
// ", contract: [" +
// t3Payload.contractAddress + // t3Payload.contractAddress +
// "]: redeem succeeded" // "]: redeem confirmed"
// ); // );
// } else { // } else {
// logger.error( // logger.error(
// "relayVaaToTerra: contract: [" + // "relayVaaToTerra: srcChain: " +
// t3Payload.sourceChainId +
// ", targetChain: " +
// t3Payload.targetChainId +
// ", contract: [" +
// t3Payload.contractAddress + // t3Payload.contractAddress +
// "]: redeem failed!" // "]: completed: failed to confirm redeem!"
// ); // );
// } // }
} }
async function isRedeemedOnTerra( async function isRedeemedOnTerra(
t3Payload: Type3Payload,
terraContractData: TerraContractData, terraContractData: TerraContractData,
signedVaaArray: Uint8Array vaaBytes: string
): Promise<boolean> { ): Promise<boolean> {
let msg: Terra.MsgExecuteContract = null; let msg: Terra.MsgExecuteContract = null;
let sequenceNumber: number = 0; let sequenceNumber: number = 0;
@ -300,7 +322,7 @@ async function isRedeemedOnTerra(
terraContractData.tokenBridgeAddress, terraContractData.tokenBridgeAddress,
{ {
submit_vaa: { submit_vaa: {
data: fromUint8Array(signedVaaArray), data: Buffer.from(vaaBytes, "hex").toString("base64"),
}, },
} }
); );