From b6d15196091104983af15294323e71f9ee3dd647 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Mon, 27 Jan 2025 13:03:58 +0300 Subject: [PATCH] chore(typescript-sdk): added quoteToken value control Signed-off-by: Kaan Caglan --- .../playground/babylon-to-holesky.ts | 4 + .../fetch-recommended-channels-legacy.ts | 8 ++ .../playground/holesky-to-babylon.ts | 4 + .../playground/holesky-to-osmosis.ts | 109 ++++++++++++++++++ .../playground/holesky-to-sepolia.ts | 5 + .../playground/osmosis-to-holesky.ts | 6 +- .../playground/sepolia-to-holesky.ts | 5 +- .../playground/stargaze-to-holesky.ts | 5 +- 8 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 typescript-sdk/playground/holesky-to-osmosis.ts diff --git a/typescript-sdk/playground/babylon-to-holesky.ts b/typescript-sdk/playground/babylon-to-holesky.ts index 17a58fd944..284c1f0cf1 100644 --- a/typescript-sdk/playground/babylon-to-holesky.ts +++ b/typescript-sdk/playground/babylon-to-holesky.ts @@ -58,6 +58,10 @@ if (quoteToken.isErr()) { consola.error(quoteToken.error) process.exit(1) } +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} consola.info("quote token", quoteToken.value) diff --git a/typescript-sdk/playground/fetch-recommended-channels-legacy.ts b/typescript-sdk/playground/fetch-recommended-channels-legacy.ts index 21b63a9f33..000edc8a30 100644 --- a/typescript-sdk/playground/fetch-recommended-channels-legacy.ts +++ b/typescript-sdk/playground/fetch-recommended-channels-legacy.ts @@ -42,6 +42,10 @@ if (quoteToken.isErr()) { consola.info("could not get quote token") process.exit(1) } +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} console.log(JSON.stringify(quoteToken.value)) @@ -56,6 +60,10 @@ if (quoteToken2.isErr()) { consola.info("could not get quote token") process.exit(1) } +if (quoteToken2.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} console.log(JSON.stringify(quoteToken2.value)) diff --git a/typescript-sdk/playground/holesky-to-babylon.ts b/typescript-sdk/playground/holesky-to-babylon.ts index 07acf6f2f9..7ef591c7cf 100644 --- a/typescript-sdk/playground/holesky-to-babylon.ts +++ b/typescript-sdk/playground/holesky-to-babylon.ts @@ -58,6 +58,10 @@ if (quoteToken.isErr()) { consola.error(quoteToken.error) process.exit(1) } +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} consola.info("quote token", quoteToken.value) diff --git a/typescript-sdk/playground/holesky-to-osmosis.ts b/typescript-sdk/playground/holesky-to-osmosis.ts new file mode 100644 index 0000000000..0c12cb5e09 --- /dev/null +++ b/typescript-sdk/playground/holesky-to-osmosis.ts @@ -0,0 +1,109 @@ +import { http } from "viem" +import { parseArgs } from "node:util" +import { consola } from "scripts/logger" +import { bech32AddressToHex, createUnionClient } from "#mod.ts" +import { + getChannelInfo, + getQuoteToken, + getRecommendedChannels +} from "#query/offchain/ucs03-channels" +import { privateKeyToAccount } from "viem/accounts" + +// hack to encode bigints to json +declare global { + interface BigInt { + toJSON: () => string + } +} + +if (!BigInt.prototype.toJSON) { + Object.defineProperty(BigInt.prototype, "toJSON", { + value: function () { + return this.toString() + }, + writable: true, + configurable: true + }) +} +// end hack + +const cliArgs = parseArgs({ + args: process.argv.slice(2), + options: { + "private-key": { type: "string" }, + "estimate-gas": { type: "boolean", default: false } + } +}) + +const PRIVATE_KEY = cliArgs.values["private-key"] +const STARS_DENOM = "0xa3570de1c0603051a08a5b2aa1d9ddd4e4e5339d" // wrapped STARS on holesky +const AMOUNT = 1n +const RECEIVER = bech32AddressToHex({ address: "osmo14vcpe0yt8xdzaapm8yy6tm26sf45rdgu2egh5w" }) +const SOURCE_CHAIN_ID = "17000" +const DESTINATION_CHAIN_ID = "osmo-test-5" + +const channels = await getRecommendedChannels() + +const channel = getChannelInfo(SOURCE_CHAIN_ID, DESTINATION_CHAIN_ID, channels) +if (channel === null) { + consola.info("no channel found") + process.exit(1) +} + +consola.info("channel", channel) + +const quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, STARS_DENOM, channel) +if (quoteToken.isErr()) { + consola.info("could not get quote token") + consola.error(quoteToken.error) + process.exit(1) +} + +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} + +consola.info("quote token", quoteToken.value) + +const transferArgs = { + baseToken: STARS_DENOM, + baseAmount: AMOUNT, + quoteToken: quoteToken.value.quote_token, + quoteAmount: AMOUNT, + receiver: RECEIVER, + sourceChannelId: channel.source_channel_id, + ucs03address: `0x${channel.source_port_id}` +} + +consola.info("transfer args", transferArgs) + +if (!PRIVATE_KEY) { + consola.error("no private key provided") + process.exit(1) +} + +const evmClient = createUnionClient({ + chainId: SOURCE_CHAIN_ID, + account: privateKeyToAccount(`0x${PRIVATE_KEY}`), + transport: http("https://rpc.17000.holesky.chain.kitchen") +}) + +const approveResponse = await evmClient.approveErc20(transferArgs) + +if (approveResponse.isErr()) { + consola.error(approveResponse.error) + process.exit(1) +} + +consola.info("approval tx hash", approveResponse.value) + +const transfer = await evmClient.transferAsset(transferArgs) + +if (transfer.isErr()) { + consola.info("transfer submission failed") + consola.error(transfer.error) + process.exit(1) +} + +consola.info("transfer tx hash", transfer.value) diff --git a/typescript-sdk/playground/holesky-to-sepolia.ts b/typescript-sdk/playground/holesky-to-sepolia.ts index d024e461a2..2e01b8a945 100644 --- a/typescript-sdk/playground/holesky-to-sepolia.ts +++ b/typescript-sdk/playground/holesky-to-sepolia.ts @@ -42,6 +42,11 @@ if (quoteToken.isErr()) { process.exit(1) } +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} + consola.info("quote token", quoteToken.value) const transferArgs = { diff --git a/typescript-sdk/playground/osmosis-to-holesky.ts b/typescript-sdk/playground/osmosis-to-holesky.ts index d103deccfc..df52e60da9 100644 --- a/typescript-sdk/playground/osmosis-to-holesky.ts +++ b/typescript-sdk/playground/osmosis-to-holesky.ts @@ -38,7 +38,7 @@ const cliArgs = parseArgs({ const PRIVATE_KEY = cliArgs.values["private-key"] const STARS_DENOM = "uosmo" const AMOUNT = 17n -const RECEIVER = "0x153919669Edc8A5D0c8D1E4507c9CE60435A1177" +const RECEIVER = "0x8478B37E983F520dBCB5d7D3aAD8276B82631aBd" const SOURCE_CHAIN_ID = "osmo-test-5" const DESTINATION_CHAIN_ID = "17000" @@ -58,6 +58,10 @@ if (quoteToken.isErr()) { consola.error(quoteToken.error) process.exit(1) } +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} consola.info("quote token", quoteToken.value) diff --git a/typescript-sdk/playground/sepolia-to-holesky.ts b/typescript-sdk/playground/sepolia-to-holesky.ts index 258e67be54..8760cf6dfe 100644 --- a/typescript-sdk/playground/sepolia-to-holesky.ts +++ b/typescript-sdk/playground/sepolia-to-holesky.ts @@ -41,7 +41,10 @@ if (quoteToken.isErr()) { consola.error("could not get quote token") process.exit(1) } - +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} consola.info("quote token", quoteToken.value) const transferArgs = { diff --git a/typescript-sdk/playground/stargaze-to-holesky.ts b/typescript-sdk/playground/stargaze-to-holesky.ts index 7c04c69a3c..6f5938778f 100644 --- a/typescript-sdk/playground/stargaze-to-holesky.ts +++ b/typescript-sdk/playground/stargaze-to-holesky.ts @@ -58,7 +58,10 @@ if (quoteToken.isErr()) { consola.error(quoteToken.error) process.exit(1) } - +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.info("no quote token available") + process.exit(1) +} consola.info("quote token", quoteToken.value) if (!PRIVATE_KEY) {