@wormhole-foundation/sdk-route-ntt 0.0.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NttRoute = void 0;
4
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
5
+ var NttRoute;
6
+ (function (NttRoute) {
7
+ NttRoute.ManualOptions = {
8
+ automatic: false,
9
+ };
10
+ NttRoute.AutomaticOptions = {
11
+ automatic: true,
12
+ gasDropoff: "0.0",
13
+ };
14
+ function resolveSupportedNetworks(config) {
15
+ return ["Mainnet", "Testnet"];
16
+ }
17
+ NttRoute.resolveSupportedNetworks = resolveSupportedNetworks;
18
+ function resolveSupportedChains(config, network) {
19
+ const configs = Object.values(config.tokens);
20
+ return configs.flatMap((cfg) => cfg.map((chainCfg) => chainCfg.chain));
21
+ }
22
+ NttRoute.resolveSupportedChains = resolveSupportedChains;
23
+ function resolveSourceTokens(config, fromChain) {
24
+ const srcTokens = Object.entries(config.tokens)
25
+ .map(([, configs]) => {
26
+ const tokenConf = configs.find((config) => config.chain === fromChain.chain);
27
+ if (!tokenConf)
28
+ return null;
29
+ return sdk_connect_1.Wormhole.tokenId(fromChain.chain, tokenConf.token);
30
+ })
31
+ .filter((x) => !!x);
32
+ // TODO: dedupe? //return routes.uniqueTokens(srcTokens);
33
+ return srcTokens;
34
+ }
35
+ NttRoute.resolveSourceTokens = resolveSourceTokens;
36
+ function resolveDestinationTokens(config, sourceToken, fromChain, toChain) {
37
+ return Object.entries(config.tokens)
38
+ .map(([, configs]) => {
39
+ const match = configs.find((config) => config.chain === fromChain.chain &&
40
+ config.token.toLowerCase() ===
41
+ (0, sdk_connect_1.canonicalAddress)(sourceToken).toLowerCase());
42
+ if (!match)
43
+ return;
44
+ const remote = configs.find((config) => config.chain === toChain.chain);
45
+ if (!remote)
46
+ return;
47
+ return sdk_connect_1.Wormhole.tokenId(toChain.chain, remote.token);
48
+ })
49
+ .filter((x) => !!x);
50
+ }
51
+ NttRoute.resolveDestinationTokens = resolveDestinationTokens;
52
+ function resolveNttContracts(config, token) {
53
+ const cfg = Object.values(config.tokens);
54
+ const address = (0, sdk_connect_1.canonicalAddress)(token);
55
+ for (const tokens of cfg) {
56
+ const found = tokens.find((tc) => tc.token.toLowerCase() === address.toLowerCase() &&
57
+ tc.chain === token.chain);
58
+ if (found)
59
+ return {
60
+ token: found.token,
61
+ manager: found.manager,
62
+ transceiver: {
63
+ wormhole: found.transceiver.find((v) => v.type === "wormhole")
64
+ .address,
65
+ },
66
+ quoter: found.quoter,
67
+ };
68
+ }
69
+ throw new Error("Cannot find Ntt contracts in config for: " + address);
70
+ }
71
+ NttRoute.resolveNttContracts = resolveNttContracts;
72
+ })(NttRoute || (exports.NttRoute = NttRoute = {}));
73
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { Chain, ChainContext, Network, Signer, TokenId, Wormhole, routes } from "@wormhole-foundation/sdk-connect";
2
+ import "@wormhole-foundation/sdk-definitions-ntt";
3
+ import { NttRoute } from "./types.js";
4
+ type Op = NttRoute.Options;
5
+ type Tp = routes.TransferParams<Op>;
6
+ type Vr = routes.ValidationResult<Op>;
7
+ type Vp = NttRoute.ValidatedParams;
8
+ type QR = routes.QuoteResult<Op, Vp>;
9
+ type Q = routes.Quote<Op, Vp>;
10
+ type R = NttRoute.TransferReceipt;
11
+ export declare function nttAutomaticRoute(config: NttRoute.Config): {
12
+ new <N extends "Mainnet" | "Testnet" | "Devnet">(wh: Wormhole<N>, request: routes.RouteTransferRequest<N>): {
13
+ NATIVE_GAS_DROPOFF_SUPPORTED: boolean;
14
+ IS_AUTOMATIC: boolean;
15
+ readonly staticConfig: any;
16
+ getDefaultOptions(): NttRoute.Options;
17
+ isAvailable(): Promise<boolean>;
18
+ validate(params: Tp): Promise<Vr>;
19
+ quote(params: NttRoute.ValidatedParams): Promise<QR>;
20
+ initiate(signer: Signer, quote: Q): Promise<R>;
21
+ track(receipt: R, timeout?: number | undefined): AsyncGenerator<R, void, unknown>;
22
+ wh: Wormhole<N>;
23
+ request: routes.RouteTransferRequest<N>;
24
+ transferUrl(txid: string): string;
25
+ };
26
+ config: NttRoute.Config;
27
+ meta: {
28
+ name: string;
29
+ };
30
+ supportedNetworks(): ("Mainnet" | "Testnet" | "Devnet")[];
31
+ supportedChains(network: "Mainnet" | "Testnet" | "Devnet"): ("Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia")[];
32
+ supportedSourceTokens(fromChain: ChainContext<"Mainnet" | "Testnet" | "Devnet", "Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia", import("@wormhole-foundation/sdk-connect").ChainToPlatform<"Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia">>): Promise<TokenId[]>;
33
+ supportedDestinationTokens<N_1 extends "Mainnet" | "Testnet" | "Devnet">(sourceToken: TokenId, fromChain: ChainContext<N_1, "Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia", import("@wormhole-foundation/sdk-connect").ChainToPlatform<"Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia">>, toChain: ChainContext<N_1, "Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia", import("@wormhole-foundation/sdk-connect").ChainToPlatform<"Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia">>): Promise<TokenId[]>;
34
+ isProtocolSupported<N_2 extends "Mainnet" | "Testnet" | "Devnet">(chain: ChainContext<N_2, "Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia", import("@wormhole-foundation/sdk-connect").ChainToPlatform<"Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia">>): boolean;
35
+ };
36
+ export declare class NttAutomaticRoute<N extends Network> extends routes.AutomaticRoute<N, Op, Vp, R> implements routes.StaticRouteMethods<typeof NttAutomaticRoute> {
37
+ NATIVE_GAS_DROPOFF_SUPPORTED: boolean;
38
+ IS_AUTOMATIC: boolean;
39
+ readonly staticConfig: any;
40
+ static config: NttRoute.Config;
41
+ static meta: {
42
+ name: string;
43
+ };
44
+ static supportedNetworks(): Network[];
45
+ static supportedChains(network: Network): Chain[];
46
+ static supportedSourceTokens(fromChain: ChainContext<Network>): Promise<TokenId[]>;
47
+ static supportedDestinationTokens<N extends Network>(sourceToken: TokenId, fromChain: ChainContext<N>, toChain: ChainContext<N>): Promise<TokenId[]>;
48
+ static isProtocolSupported<N extends Network>(chain: ChainContext<N>): boolean;
49
+ getDefaultOptions(): Op;
50
+ isAvailable(): Promise<boolean>;
51
+ validate(params: Tp): Promise<Vr>;
52
+ quote(params: Vp): Promise<QR>;
53
+ initiate(signer: Signer, quote: Q): Promise<R>;
54
+ track(receipt: R, timeout?: number): AsyncGenerator<R, void, unknown>;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=automatic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automatic.d.ts","sourceRoot":"","sources":["../../src/automatic.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,YAAY,EAEZ,OAAO,EAEP,MAAM,EACN,OAAO,EAEP,QAAQ,EAOR,MAAM,EAEP,MAAM,kCAAkC,CAAC;AAC1C,OAAO,0CAA0C,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,KAAK,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC3B,KAAK,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACpC,KAAK,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAEtC,KAAK,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;AACnC,KAAK,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACrC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAE9B,KAAK,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;EAKxD;AAED,qBAAa,iBAAiB,CAAC,CAAC,SAAS,OAAO,CAC9C,SAAQ,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAC1C,YAAW,MAAM,CAAC,kBAAkB,CAAC,OAAO,iBAAiB,CAAC;IAErD,4BAA4B,EAAE,OAAO,CAAQ;IAC7C,YAAY,EAAE,OAAO,CAAQ;IAKtC,QAAQ,CAAC,YAAY,MAA2B;IAChD,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAkB;IAEhD,MAAM,CAAC,IAAI;;MAA4B;IAEvC,MAAM,CAAC,iBAAiB,IAAI,OAAO,EAAE;IAIrC,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE;WAIpC,qBAAqB,CAChC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,EAAE,CAAC;WAIR,0BAA0B,CAAC,CAAC,SAAS,OAAO,EACvD,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAC1B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,OAAO,EAAE,CAAC;IASrB,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,OAAO,EAC1C,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GACrB,OAAO;IAIV,iBAAiB,IAAI,EAAE;IAIjB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAM/B,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAiCjC,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAoC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA0B7B,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM;CA4D1D"}
@@ -0,0 +1,152 @@
1
+ import { TransferState, Wormhole, amount, isAttested, isRedeemed, isSourceFinalized, isSourceInitiated, routes, signSendWait, } from "@wormhole-foundation/sdk-connect";
2
+ import "@wormhole-foundation/sdk-definitions-ntt";
3
+ import { NttRoute } from "./types.js";
4
+ export function nttAutomaticRoute(config) {
5
+ class NttRouteImpl extends NttAutomaticRoute {
6
+ static config = config;
7
+ }
8
+ return NttRouteImpl;
9
+ }
10
+ export class NttAutomaticRoute extends routes.AutomaticRoute {
11
+ NATIVE_GAS_DROPOFF_SUPPORTED = true;
12
+ IS_AUTOMATIC = true;
13
+ // @ts-ignore
14
+ // Since we set the config on the static class, access it with this param
15
+ // the NttManualRoute.config will always be empty
16
+ staticConfig = this.constructor.config;
17
+ static config = { tokens: {} };
18
+ static meta = { name: "AutomaticNtt" };
19
+ static supportedNetworks() {
20
+ return NttRoute.resolveSupportedNetworks(this.config);
21
+ }
22
+ static supportedChains(network) {
23
+ return NttRoute.resolveSupportedChains(this.config, network);
24
+ }
25
+ static async supportedSourceTokens(fromChain) {
26
+ return NttRoute.resolveSourceTokens(this.config, fromChain);
27
+ }
28
+ static async supportedDestinationTokens(sourceToken, fromChain, toChain) {
29
+ return NttRoute.resolveDestinationTokens(this.config, sourceToken, fromChain, toChain);
30
+ }
31
+ static isProtocolSupported(chain) {
32
+ return chain.supportsProtocol("Ntt");
33
+ }
34
+ getDefaultOptions() {
35
+ return NttRoute.AutomaticOptions;
36
+ }
37
+ async isAvailable() {
38
+ // TODO: check that both src/dst are available for relayed NTT transfers
39
+ return true;
40
+ //throw new Error("Method not implemented.");
41
+ }
42
+ async validate(params) {
43
+ const options = params.options ?? this.getDefaultOptions();
44
+ const gasDropoff = amount.parse(options.gasDropoff ?? "0.0", this.request.toChain.config.nativeTokenDecimals);
45
+ const amt = amount.parse(params.amount, this.request.source.decimals);
46
+ const validatedParams = {
47
+ amount: params.amount,
48
+ normalizedParams: {
49
+ amount: amt,
50
+ sourceContracts: NttRoute.resolveNttContracts(this.staticConfig, this.request.source.id),
51
+ destinationContracts: NttRoute.resolveNttContracts(this.staticConfig, this.request.destination.id),
52
+ options: {
53
+ queue: false,
54
+ automatic: true,
55
+ gasDropoff: amount.units(gasDropoff),
56
+ },
57
+ },
58
+ options,
59
+ };
60
+ return { valid: true, params: validatedParams };
61
+ }
62
+ async quote(params) {
63
+ const { fromChain, toChain } = this.request;
64
+ const ntt = await fromChain.getProtocol("Ntt", {
65
+ ntt: params.normalizedParams.sourceContracts,
66
+ });
67
+ const deliveryPrice = await ntt.quoteDeliveryPrice(toChain.chain, params.normalizedParams.options);
68
+ return {
69
+ success: true,
70
+ params,
71
+ sourceToken: {
72
+ token: this.request.source.id,
73
+ amount: params.normalizedParams.amount,
74
+ },
75
+ destinationToken: {
76
+ token: this.request.destination.id,
77
+ amount: amount.parse(params.amount, this.request.destination.decimals),
78
+ },
79
+ relayFee: {
80
+ token: Wormhole.tokenId(fromChain.chain, "native"),
81
+ amount: amount.fromBaseUnits(deliveryPrice, fromChain.config.nativeTokenDecimals),
82
+ },
83
+ destinationNativeGas: amount.fromBaseUnits(params.normalizedParams.options.gasDropoff ?? 0n, toChain.config.nativeTokenDecimals),
84
+ };
85
+ }
86
+ async initiate(signer, quote) {
87
+ const { params } = quote;
88
+ const { fromChain, from, to } = this.request;
89
+ const sender = Wormhole.parseAddress(signer.chain(), signer.address());
90
+ const ntt = await fromChain.getProtocol("Ntt", {
91
+ ntt: params.normalizedParams.sourceContracts,
92
+ });
93
+ const initXfer = ntt.transfer(sender, amount.units(params.normalizedParams.amount), to, params.normalizedParams.options);
94
+ const txids = await signSendWait(fromChain, initXfer, signer);
95
+ return {
96
+ from: from.chain,
97
+ to: to.chain,
98
+ state: TransferState.SourceInitiated,
99
+ originTxs: txids,
100
+ params,
101
+ };
102
+ }
103
+ async *track(receipt, timeout) {
104
+ if (isSourceInitiated(receipt) || isSourceFinalized(receipt)) {
105
+ const { txid } = receipt.originTxs[receipt.originTxs.length - 1];
106
+ const vaa = await this.wh.getVaa(txid, "Ntt:WormholeTransfer", timeout);
107
+ if (!vaa)
108
+ throw new Error("No VAA found for transaction: " + txid);
109
+ const msgId = {
110
+ chain: vaa.emitterChain,
111
+ emitter: vaa.emitterAddress,
112
+ sequence: vaa.sequence,
113
+ };
114
+ receipt = {
115
+ ...receipt,
116
+ state: TransferState.Attested,
117
+ attestation: {
118
+ id: msgId,
119
+ attestation: vaa,
120
+ },
121
+ };
122
+ yield receipt;
123
+ }
124
+ const { toChain } = this.request;
125
+ const ntt = await toChain.getProtocol("Ntt", {
126
+ ntt: receipt.params.normalizedParams.destinationContracts,
127
+ });
128
+ if (isAttested(receipt)) {
129
+ const { attestation: { attestation: vaa }, } = receipt;
130
+ if (await ntt.getIsApproved(vaa)) {
131
+ receipt = {
132
+ ...receipt,
133
+ state: TransferState.DestinationInitiated,
134
+ // TODO: check for destination event transactions to get dest Txids
135
+ };
136
+ yield receipt;
137
+ }
138
+ }
139
+ if (isRedeemed(receipt)) {
140
+ const { attestation: { attestation: vaa }, } = receipt;
141
+ if (await ntt.getIsExecuted(vaa)) {
142
+ receipt = {
143
+ ...receipt,
144
+ state: TransferState.DestinationFinalized,
145
+ };
146
+ yield receipt;
147
+ }
148
+ }
149
+ yield receipt;
150
+ }
151
+ }
152
+ //# sourceMappingURL=automatic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automatic.js","sourceRoot":"","sources":["../../src/automatic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./types.js";
2
+ export * from "./manual.js";
3
+ export * from "./automatic.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./types.js";
2
+ export * from "./manual.js";
3
+ export * from "./automatic.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { Chain, ChainContext, Network, Signer, TokenId, Wormhole, routes } from "@wormhole-foundation/sdk-connect";
2
+ import "@wormhole-foundation/sdk-definitions-ntt";
3
+ import { NttRoute } from "./types.js";
4
+ type Op = NttRoute.Options;
5
+ type Tp = routes.TransferParams<Op>;
6
+ type Vr = routes.ValidationResult<Op>;
7
+ type Vp = NttRoute.ValidatedParams;
8
+ type QR = routes.QuoteResult<Op, Vp>;
9
+ type Q = routes.Quote<Op, Vp>;
10
+ type R = NttRoute.TransferReceipt;
11
+ export declare function nttManualRoute(config: NttRoute.Config): {
12
+ new <N extends "Mainnet" | "Testnet" | "Devnet">(wh: Wormhole<N>, request: routes.RouteTransferRequest<N>): {
13
+ NATIVE_GAS_DROPOFF_SUPPORTED: boolean;
14
+ IS_AUTOMATIC: boolean;
15
+ readonly staticConfig: any;
16
+ getDefaultOptions(): NttRoute.Options;
17
+ validate(params: Tp): Promise<Vr>;
18
+ quote(params: NttRoute.ValidatedParams): Promise<QR>;
19
+ initiate(signer: Signer, quote: Q): Promise<R>;
20
+ complete(signer: Signer, receipt: R): Promise<R>;
21
+ finalize(signer: Signer, receipt: R): Promise<R>;
22
+ track(receipt: R, timeout?: number | undefined): AsyncGenerator<R, void, unknown>;
23
+ wh: Wormhole<N>;
24
+ request: routes.RouteTransferRequest<N>;
25
+ transferUrl(txid: string): string;
26
+ };
27
+ config: NttRoute.Config;
28
+ meta: {
29
+ name: string;
30
+ };
31
+ supportedNetworks(): ("Mainnet" | "Testnet" | "Devnet")[];
32
+ supportedChains(network: "Mainnet" | "Testnet" | "Devnet"): ("Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia")[];
33
+ supportedSourceTokens(fromChain: ChainContext<"Mainnet" | "Testnet" | "Devnet", "Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia", import("@wormhole-foundation/sdk-connect").ChainToPlatform<"Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia">>): Promise<TokenId[]>;
34
+ supportedDestinationTokens<N_1 extends "Mainnet" | "Testnet" | "Devnet">(sourceToken: TokenId, fromChain: ChainContext<N_1, "Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia", import("@wormhole-foundation/sdk-connect").ChainToPlatform<"Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia">>, toChain: ChainContext<N_1, "Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia", import("@wormhole-foundation/sdk-connect").ChainToPlatform<"Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia">>): Promise<TokenId[]>;
35
+ isProtocolSupported<N_2 extends "Mainnet" | "Testnet" | "Devnet">(chain: ChainContext<N_2, "Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia", import("@wormhole-foundation/sdk-connect").ChainToPlatform<"Solana" | "Ethereum" | "Terra" | "Bsc" | "Polygon" | "Avalanche" | "Oasis" | "Algorand" | "Aurora" | "Fantom" | "Karura" | "Acala" | "Klaytn" | "Celo" | "Near" | "Moonbeam" | "Neon" | "Terra2" | "Injective" | "Osmosis" | "Sui" | "Aptos" | "Arbitrum" | "Optimism" | "Gnosis" | "Pythnet" | "Xpla" | "Btc" | "Base" | "Sei" | "Rootstock" | "Scroll" | "Mantle" | "Blast" | "Xlayer" | "Linea" | "Berachain" | "Seievm" | "Wormchain" | "Cosmoshub" | "Evmos" | "Kujira" | "Neutron" | "Celestia" | "Stargaze" | "Seda" | "Dymension" | "Provenance" | "Sepolia" | "ArbitrumSepolia" | "BaseSepolia" | "OptimismSepolia" | "Holesky" | "PolygonSepolia">>): boolean;
36
+ };
37
+ export declare class NttManualRoute<N extends Network> extends routes.FinalizableRoute<N, Op, Vp, R> implements routes.StaticRouteMethods<typeof NttManualRoute> {
38
+ NATIVE_GAS_DROPOFF_SUPPORTED: boolean;
39
+ IS_AUTOMATIC: boolean;
40
+ readonly staticConfig: any;
41
+ static config: NttRoute.Config;
42
+ static meta: {
43
+ name: string;
44
+ };
45
+ static supportedNetworks(): Network[];
46
+ static supportedChains(network: Network): Chain[];
47
+ static supportedSourceTokens(fromChain: ChainContext<Network>): Promise<TokenId[]>;
48
+ static supportedDestinationTokens<N extends Network>(sourceToken: TokenId, fromChain: ChainContext<N>, toChain: ChainContext<N>): Promise<TokenId[]>;
49
+ static isProtocolSupported<N extends Network>(chain: ChainContext<N>): boolean;
50
+ getDefaultOptions(): Op;
51
+ validate(params: Tp): Promise<Vr>;
52
+ quote(params: Vp): Promise<QR>;
53
+ initiate(signer: Signer, quote: Q): Promise<R>;
54
+ complete(signer: Signer, receipt: R): Promise<R>;
55
+ finalize(signer: Signer, receipt: R): Promise<R>;
56
+ track(receipt: R, timeout?: number): AsyncGenerator<R, void, unknown>;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=manual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual.d.ts","sourceRoot":"","sources":["../../src/manual.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,YAAY,EAEZ,OAAO,EAEP,MAAM,EACN,OAAO,EAEP,QAAQ,EAOR,MAAM,EAEP,MAAM,kCAAkC,CAAC;AAC1C,OAAO,0CAA0C,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,KAAK,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC3B,KAAK,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACpC,KAAK,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAEtC,KAAK,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;AACnC,KAAK,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACrC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAE9B,KAAK,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC;AAElC,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;EAKrD;AAED,qBAAa,cAAc,CAAC,CAAC,SAAS,OAAO,CAC3C,SAAQ,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAC5C,YAAW,MAAM,CAAC,kBAAkB,CAAC,OAAO,cAAc,CAAC;IAElD,4BAA4B,EAAE,OAAO,CAAS;IAC9C,YAAY,EAAE,OAAO,CAAS;IAKvC,QAAQ,CAAC,YAAY,MAA2B;IAChD,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAkB;IAEhD,MAAM,CAAC,IAAI;;MAAyB;IAEpC,MAAM,CAAC,iBAAiB,IAAI,OAAO,EAAE;IAIrC,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE;WAIpC,qBAAqB,CAChC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,EAAE,CAAC;WAIR,0BAA0B,CAAC,CAAC,SAAS,OAAO,EACvD,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAC1B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,OAAO,EAAE,CAAC;IASrB,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,OAAO,EAC1C,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GACrB,OAAO;IAIV,iBAAiB,IAAI,EAAE;IAIjB,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAkCjC,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAe9B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAyB9C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAuBhD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA0B/B,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM;CA4D1D"}
@@ -0,0 +1,170 @@
1
+ import { TransferState, Wormhole, amount, isAttested, isRedeemed, isSourceFinalized, isSourceInitiated, routes, signSendWait, } from "@wormhole-foundation/sdk-connect";
2
+ import "@wormhole-foundation/sdk-definitions-ntt";
3
+ import { NttRoute } from "./types.js";
4
+ export function nttManualRoute(config) {
5
+ class NttRouteImpl extends NttManualRoute {
6
+ static config = config;
7
+ }
8
+ return NttRouteImpl;
9
+ }
10
+ export class NttManualRoute extends routes.FinalizableRoute {
11
+ NATIVE_GAS_DROPOFF_SUPPORTED = false;
12
+ IS_AUTOMATIC = false;
13
+ // @ts-ignore
14
+ // Since we set the config on the static class, access it with this param
15
+ // the NttManualRoute.config will always be empty
16
+ staticConfig = this.constructor.config;
17
+ static config = { tokens: {} };
18
+ static meta = { name: "ManualNtt" };
19
+ static supportedNetworks() {
20
+ return NttRoute.resolveSupportedNetworks(this.config);
21
+ }
22
+ static supportedChains(network) {
23
+ return NttRoute.resolveSupportedChains(this.config, network);
24
+ }
25
+ static async supportedSourceTokens(fromChain) {
26
+ return NttRoute.resolveSourceTokens(this.config, fromChain);
27
+ }
28
+ static async supportedDestinationTokens(sourceToken, fromChain, toChain) {
29
+ return NttRoute.resolveDestinationTokens(this.config, sourceToken, fromChain, toChain);
30
+ }
31
+ static isProtocolSupported(chain) {
32
+ return chain.supportsProtocol("Ntt");
33
+ }
34
+ getDefaultOptions() {
35
+ return NttRoute.ManualOptions;
36
+ }
37
+ async validate(params) {
38
+ const options = params.options ?? this.getDefaultOptions();
39
+ const amt = amount.parse(params.amount, this.request.source.decimals);
40
+ const gasDropoff = amount.units(amount.parse(options.gasDropoff ?? "0.0", this.request.toChain.config.nativeTokenDecimals));
41
+ const validatedParams = {
42
+ amount: params.amount,
43
+ normalizedParams: {
44
+ amount: amt,
45
+ sourceContracts: NttRoute.resolveNttContracts(this.staticConfig, this.request.source.id),
46
+ destinationContracts: NttRoute.resolveNttContracts(this.staticConfig, this.request.destination.id),
47
+ options: {
48
+ queue: false,
49
+ automatic: false,
50
+ gasDropoff,
51
+ },
52
+ },
53
+ options,
54
+ };
55
+ return { valid: true, params: validatedParams };
56
+ }
57
+ async quote(params) {
58
+ return {
59
+ success: true,
60
+ params,
61
+ sourceToken: {
62
+ token: this.request.source.id,
63
+ amount: params.normalizedParams.amount,
64
+ },
65
+ destinationToken: {
66
+ token: this.request.destination.id,
67
+ amount: amount.parse(params.amount, this.request.destination.decimals),
68
+ },
69
+ };
70
+ }
71
+ async initiate(signer, quote) {
72
+ const { params } = quote;
73
+ const { fromChain, from, to } = this.request;
74
+ const sender = Wormhole.parseAddress(signer.chain(), signer.address());
75
+ const ntt = await fromChain.getProtocol("Ntt", {
76
+ ntt: params.normalizedParams.sourceContracts,
77
+ });
78
+ const initXfer = ntt.transfer(sender, amount.units(params.normalizedParams.amount), to, params.normalizedParams.options);
79
+ const txids = await signSendWait(fromChain, initXfer, signer);
80
+ return {
81
+ from: from.chain,
82
+ to: to.chain,
83
+ state: TransferState.SourceInitiated,
84
+ originTxs: txids,
85
+ params,
86
+ };
87
+ }
88
+ async complete(signer, receipt) {
89
+ if (!isAttested(receipt)) {
90
+ if (isRedeemed(receipt))
91
+ return receipt;
92
+ throw new Error("The source must be finalized in order to complete the transfer");
93
+ }
94
+ const { toChain } = this.request;
95
+ const ntt = await toChain.getProtocol("Ntt", {
96
+ ntt: receipt.params.normalizedParams.destinationContracts,
97
+ });
98
+ const sender = Wormhole.parseAddress(signer.chain(), signer.address());
99
+ const completeXfer = ntt.redeem([receipt.attestation.attestation], sender);
100
+ const txids = await signSendWait(toChain, completeXfer, signer);
101
+ return {
102
+ ...receipt,
103
+ state: TransferState.DestinationInitiated,
104
+ destinationTxs: txids,
105
+ };
106
+ }
107
+ async finalize(signer, receipt) {
108
+ if (!isRedeemed(receipt))
109
+ throw new Error("The transfer must be redeemed in order to finalize");
110
+ const { attestation: { attestation: vaa }, } = receipt;
111
+ const { toChain } = this.request;
112
+ const ntt = await toChain.getProtocol("Ntt", receipt.params.normalizedParams.destinationContracts);
113
+ const completeTransfer = ntt.completeInboundQueuedTransfer(toChain.chain, vaa.payload.nttManagerPayload, this.request.destination.id.address);
114
+ const finalizeTxids = await signSendWait(toChain, completeTransfer, signer);
115
+ return {
116
+ ...receipt,
117
+ state: TransferState.DestinationFinalized,
118
+ destinationTxs: [...(receipt.destinationTxs ?? []), ...finalizeTxids],
119
+ };
120
+ }
121
+ async *track(receipt, timeout) {
122
+ if (isSourceInitiated(receipt) || isSourceFinalized(receipt)) {
123
+ const { txid } = receipt.originTxs[receipt.originTxs.length - 1];
124
+ const vaa = await this.wh.getVaa(txid, "Ntt:WormholeTransfer", timeout);
125
+ if (!vaa)
126
+ throw new Error("No VAA found for transaction: " + txid);
127
+ const msgId = {
128
+ chain: vaa.emitterChain,
129
+ emitter: vaa.emitterAddress,
130
+ sequence: vaa.sequence,
131
+ };
132
+ receipt = {
133
+ ...receipt,
134
+ state: TransferState.Attested,
135
+ attestation: {
136
+ id: msgId,
137
+ attestation: vaa,
138
+ },
139
+ };
140
+ yield receipt;
141
+ }
142
+ const { toChain } = this.request;
143
+ const ntt = await toChain.getProtocol("Ntt", {
144
+ ntt: receipt.params.normalizedParams.destinationContracts,
145
+ });
146
+ if (isAttested(receipt)) {
147
+ const { attestation: { attestation: vaa }, } = receipt;
148
+ if (await ntt.getIsApproved(vaa)) {
149
+ receipt = {
150
+ ...receipt,
151
+ state: TransferState.DestinationInitiated,
152
+ // TODO: check for destination event transactions to get dest Txids
153
+ };
154
+ yield receipt;
155
+ }
156
+ }
157
+ if (isRedeemed(receipt)) {
158
+ const { attestation: { attestation: vaa }, } = receipt;
159
+ if (await ntt.getIsExecuted(vaa)) {
160
+ receipt = {
161
+ ...receipt,
162
+ state: TransferState.DestinationFinalized,
163
+ };
164
+ yield receipt;
165
+ }
166
+ }
167
+ yield receipt;
168
+ }
169
+ }
170
+ //# sourceMappingURL=manual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../src/manual.ts"],"names":[],"mappings":"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"}