Merge branch 'terra-support' of github.com:certusone/wormhole-nativeswap-example into terra-support
This commit is contained in:
commit
31cb892162
|
@ -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> {
|
||||
|
|
|
@ -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)),
|
||||
|
|
|
@ -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"),
|
||||
},
|
||||
}
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue