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(
"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<boolean> {

View File

@ -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)),

View File

@ -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<boolean> {
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"),
},
}
);