Compare commits

...

4 Commits

Author SHA1 Message Date
Bruce Riley 8ce03171cc Clean up error handling for terra relay 2022-02-02 18:46:33 +00:00
Karl Kempe 3555c22f2b Merge branch 'cross-chain-swap' of github.com:certusone/wormhole-nativeswap-example into terra-support 2022-02-02 16:39:41 +00:00
Karl Kempe 1977bbede0 Modify swap-with-vaa 2022-02-02 16:39:34 +00:00
Kevin Peters 344574ef99 UI - Updated warning message, link rels 2022-01-31 23:41:36 +00:00
4 changed files with 418 additions and 567 deletions

View File

@ -22,7 +22,7 @@ import { makeProvider } from "./src/provider";
require("dotenv").config({ path: ".env" });
// swap related parameters (configurable in UI)
const SWAP_AMOUNT_IN_MATIC = "0.0069";
const SWAP_AMOUNT_IN_MATIC = "0.069";
const SWAP_AMOUNT_IN_ETH = "0.000907";
const SWAP_AMOUNT_IN_AVAX = "0.0075";
const SWAP_AMOUNT_IN_BNB = "0.0015";
@ -243,12 +243,12 @@ async function swapEverythingExactIn(
// do the dst swap after fetching vaa
// connect dst wallet
const dstWallet = determineWalletFromToken(tokenOutAddress);
//const dstWallet = determineWalletFromToken(tokenOutAddress);
console.info("fetchVaaAndSwap");
//console.info("fetchVaaAndSwap");
//const dstSwapReceipt = await swapper.fetchVaaAndSwap(dstWallet);
//console.info(`dst transaction: ${dstSwapReceipt.transactionHash}`);
console.warn("jk");
//console.warn("jk");
return;
}
@ -412,8 +412,8 @@ async function main() {
const tokenOut = getTokenInfo(args.out);
//const tokenOut = UST_TOKEN_INFO;
const recipientAddress = "0x4e2dfAD7D7d0076b5A0A41223E4Bee390C33251C";
//const recipientAddress = "terra1vewnsxcy5fqjslyyy409cw8js550esen38n8ey";
//const recipientAddress = "0x4e2dfAD7D7d0076b5A0A41223E4Bee390C33251C";
const recipientAddress = "terra1vewnsxcy5fqjslyyy409cw8js550esen38n8ey";
if (testExactIn) {
console.info(`testing exact in. native=${isNative}`);
@ -427,7 +427,7 @@ async function main() {
determineAmountFromToken(tokenIn.address),
recipientAddress
);
/*
if (tokenOut.address === UST_TOKEN_INFO.address) {
console.warn("not pinging back");
} else {
@ -441,6 +441,7 @@ async function main() {
recipientAddress
);
}
*/
} else {
console.info(`testing exact out. native=${isNative}`);

View File

@ -576,18 +576,24 @@ export default function Home() {
<Typography variant="subtitle1">{relayerTimeoutString}</Typography>
)}
<Typography variant="subtitle2" color="error">
WARNING: this is a testnet release only
WARNING: this is a testnet release only, prices may not reflect
reality
</Typography>
</Paper>
<div className={classes.spacer} />
<Footer />
<Link href="https://goerli-faucet.slock.it/"
target="_blank" style={{ margin: "5px" }}>
<Link
href="https://goerli-faucet.slock.it/"
target="_blank"
rel="noopener noreferrer"
style={{ margin: "5px" }}
>
Goerli Faucet
</Link>
<Link
href="https://faucet.polygon.technology/"
target="_blank"
rel="noopener noreferrer"
style={{ margin: "5px" }}
>
Mumbai Faucet
@ -595,6 +601,7 @@ export default function Home() {
<Link
href="https://faucet.avax-test.network/"
target="_blank"
rel="noopener noreferrer"
style={{ margin: "5px" }}
>
Fuji Faucet
@ -602,6 +609,7 @@ export default function Home() {
<Link
href="https://testnet.binance.org/faucet-smart/"
target="_blank"
rel="noopener noreferrer"
style={{ margin: "5px" }}
>
BSC Faucet
@ -609,6 +617,7 @@ export default function Home() {
<Link
href="https://github.com/certusone/wormhole-nativeswap-example/"
target="_blank"
rel="noopener noreferrer"
style={{ margin: "5px" }}
>
NativeSwap GitHub

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;
}