Clean up error handling for terra relay

This commit is contained in:
Bruce Riley 2022-02-02 18:46:33 +00:00
parent 3555c22f2b
commit 8ce03171cc
2 changed files with 398 additions and 557 deletions

File diff suppressed because it is too large Load Diff

View File

@ -167,26 +167,6 @@ export async function relayVaaToTerra(
) {
if (!terraContractData) return;
// logger.debug(
// "relayVaaToTerra: checking if already redeemed using tokenBridgeAddress [" +
// terraContractData.tokenBridgeAddress +
// "]"
// );
// if (await isRedeemedOnTerra(terraContractData, vaaBytes)) {
// logger.info(
// "relayVaaToTerra: srcChain: " +
// t3Payload.sourceChainId +
// ", targetChain: " +
// t3Payload.targetChainId +
// ", contract: [" +
// t3Payload.contractAddress +
// "]: completed: already redeemed"
// );
// return;
// }
try {
logger.debug(
"relayVaaToTerra: creating message using contract address [" +
@ -241,6 +221,34 @@ export async function relayVaaToTerra(
const receipt = await terraContractData.lcdClient.tx.broadcast(tx);
if (!receipt.txhash) {
logger.info(
"relayVaaToTerra: srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress +
"]: completed: failed, no txhash: %o",
receipt
);
}
if (receipt.raw_log && receipt.raw_log.search("VaaAlreadyExecuted") >= 0) {
logger.info(
"relayVaaToTerra: srcChain: " +
t3Payload.sourceChainId +
", targetChain: " +
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress +
"]: completed: success: already executed, txhash: " +
receipt.txhash
);
return;
}
logger.info(
"relayVaaToTerra: srcChain: " +
t3Payload.sourceChainId +
@ -248,31 +256,10 @@ export async function relayVaaToTerra(
t3Payload.targetChainId +
", contract: [" +
t3Payload.contractAddress +
"]: completed: success: %o",
receipt
"]: completed: success: txhash: " +
receipt.txhash
);
// logger.info(
// "relayVaaToTerra: contract: [" +
// t3Payload.contractAddress +
// "]: success, txHash: " +
// receipt.transactionHash
// );
} catch (e: any) {
// if (await isRedeemedOnTerra(terraContractData, vaaBytes)) {
// logger.info(
// "relayVaaToTerra: srcChain: " +
// t3Payload.sourceChainId +
// ", targetChain: " +
// t3Payload.targetChainId +
// ", contract: [" +
// t3Payload.contractAddress +
// "]: completed: relay failed because the vaa has already been redeemed"
// );
// return;
// }
logger.error(
"relayVaaToTerra: srcChain: " +
t3Payload.sourceChainId +
@ -284,74 +271,4 @@ export async function relayVaaToTerra(
e
);
}
// if (await isRedeemedOnTerra(terraContractData, vaaBytes)) {
// logger.info(
// "relayVaaToTerra: srcChain: " +
// t3Payload.sourceChainId +
// ", targetChain: " +
// t3Payload.targetChainId +
// ", contract: [" +
// t3Payload.contractAddress +
// "]: redeem confirmed"
// );
// } else {
// logger.error(
// "relayVaaToTerra: srcChain: " +
// t3Payload.sourceChainId +
// ", targetChain: " +
// t3Payload.targetChainId +
// ", contract: [" +
// t3Payload.contractAddress +
// "]: completed: failed to confirm redeem!"
// );
// }
}
async function isRedeemedOnTerra(
terraContractData: TerraContractData,
vaaBytes: string
): Promise<boolean> {
let msg: Terra.MsgExecuteContract = null;
let sequenceNumber: number = 0;
try {
msg = new Terra.MsgExecuteContract(
terraContractData.wallet.key.accAddress,
terraContractData.tokenBridgeAddress,
{
submit_vaa: {
data: Buffer.from(vaaBytes, "hex").toString("base64"),
},
}
);
sequenceNumber = await terraContractData.wallet.sequence();
} catch (e) {
logger.error(
"isRedeemedOnTerra: failed to create message or look up sequence number, e: %o",
e
);
return false;
}
try {
await terraContractData.lcdClient.tx.estimateFee(
[{ sequenceNumber: sequenceNumber }],
{
msgs: [msg],
}
);
} catch (e) {
if (e.response.data.error.includes("VaaAlreadyExecuted")) {
return true;
}
logger.error(
"isRedeemedOnTerra: failed to check if transfer is already complete, e: %o",
e
);
}
return false;
}