@wormhole-foundation/sdk-route-ntt 6.1.0 → 6.3.0

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.
@@ -1,286 +0,0 @@
1
- import { TransferState, Wormhole, amount, canonicalAddress, chainToPlatform, finality, guardians, isAttested, isDestinationQueued, isNative, isRedeemed, isSourceFinalized, isSourceInitiated, signSendWait, } from "@wormhole-foundation/sdk-connect";
2
- import * as routes from "@wormhole-foundation/sdk-connect/routes";
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
- // ntt does not support gas drop-off currently
12
- static NATIVE_GAS_DROPOFF_SUPPORTED = 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: "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(request) {
38
- const { srcContracts } = NttRoute.resolveNttContracts(this.staticConfig, request.source.id, request.destination.id);
39
- const ntt = await request.fromChain.getProtocol("Ntt", {
40
- ntt: srcContracts,
41
- });
42
- return ntt.isRelayingAvailable(request.toChain.chain);
43
- }
44
- async validate(request, params) {
45
- const options = params.options ?? this.getDefaultOptions();
46
- const wrapNative = isNative(request.source.id.address);
47
- const parsedAmount = amount.parse(params.amount, request.source.decimals);
48
- // The trimmedAmount may differ from the parsedAmount if the parsedAmount includes dust
49
- const trimmedAmount = NttRoute.trimAmount(parsedAmount, request.destination.decimals);
50
- const { srcContracts, dstContracts } = NttRoute.resolveNttContracts(this.staticConfig, request.source.id, request.destination.id);
51
- const validatedParams = {
52
- amount: params.amount,
53
- normalizedParams: {
54
- amount: trimmedAmount,
55
- sourceContracts: srcContracts,
56
- destinationContracts: dstContracts,
57
- options: {
58
- queue: false,
59
- automatic: true,
60
- wrapNative,
61
- },
62
- },
63
- options,
64
- };
65
- return { valid: true, params: validatedParams };
66
- }
67
- async quote(request, params) {
68
- const { fromChain, toChain } = request;
69
- const ntt = await fromChain.getProtocol("Ntt", {
70
- ntt: params.normalizedParams.sourceContracts,
71
- });
72
- if (!(await ntt.isRelayingAvailable(toChain.chain))) {
73
- return {
74
- success: false,
75
- error: new Error(`Relaying to chain ${toChain.chain} is not available`),
76
- };
77
- }
78
- const deliveryPrice = await ntt.quoteDeliveryPrice(toChain.chain, params.normalizedParams.options);
79
- const dstAmount = amount.scale(params.normalizedParams.amount, request.destination.decimals);
80
- const result = {
81
- success: true,
82
- params,
83
- sourceToken: {
84
- token: request.source.id,
85
- amount: params.normalizedParams.amount,
86
- },
87
- destinationToken: {
88
- token: request.destination.id,
89
- amount: dstAmount,
90
- },
91
- relayFee: {
92
- token: Wormhole.tokenId(fromChain.chain, "native"),
93
- amount: amount.fromBaseUnits(deliveryPrice, fromChain.config.nativeTokenDecimals),
94
- },
95
- eta: params.normalizedParams.sourceContracts.eta ??
96
- finality.estimateFinalityTime(request.fromChain.chain) +
97
- guardians.guardianAttestationEta * 1000,
98
- };
99
- const dstNtt = await toChain.getProtocol("Ntt", {
100
- ntt: params.normalizedParams.destinationContracts,
101
- });
102
- const duration = await dstNtt.getRateLimitDuration();
103
- if (duration > 0n) {
104
- const capacity = await dstNtt.getCurrentInboundCapacity(fromChain.chain);
105
- if (NttRoute.isCapacityThresholdExceeded(amount.units(dstAmount), capacity)) {
106
- result.warnings = [
107
- {
108
- type: "DestinationCapacityWarning",
109
- delayDurationSec: Number(duration),
110
- },
111
- ];
112
- }
113
- }
114
- return result;
115
- }
116
- async initiate(request, signer, quote, to) {
117
- const { params } = quote;
118
- const { fromChain } = request;
119
- const sender = Wormhole.parseAddress(signer.chain(), signer.address());
120
- const ntt = await fromChain.getProtocol("Ntt", {
121
- ntt: params.normalizedParams.sourceContracts,
122
- });
123
- const initXfer = ntt.transfer(sender, amount.units(params.normalizedParams.amount), to, params.normalizedParams.options);
124
- const txids = await signSendWait(fromChain, initXfer, signer);
125
- return {
126
- from: fromChain.chain,
127
- to: to.chain,
128
- state: TransferState.SourceInitiated,
129
- originTxs: txids,
130
- params,
131
- };
132
- }
133
- async resume(tx) {
134
- const vaa = await this.wh.getVaa(tx.txid, "Ntt:WormholeTransferStandardRelayer");
135
- if (!vaa)
136
- throw new Error("No VAA found for transaction: " + tx.txid);
137
- const msgId = {
138
- chain: vaa.emitterChain,
139
- emitter: vaa.emitterAddress,
140
- sequence: vaa.sequence,
141
- };
142
- const { payload } = vaa.payload;
143
- const { recipientChain, trimmedAmount } = payload["nttManagerPayload"].payload;
144
- const token = canonicalAddress({
145
- chain: vaa.emitterChain,
146
- address: payload["nttManagerPayload"].payload.sourceToken,
147
- });
148
- const manager = canonicalAddress({
149
- chain: vaa.emitterChain,
150
- address: payload["sourceNttManager"],
151
- });
152
- const whTransceiver = chainToPlatform(vaa.emitterChain) === "Solana"
153
- ? manager
154
- : canonicalAddress({
155
- chain: vaa.emitterChain,
156
- address: vaa.emitterAddress,
157
- });
158
- const dstInfo = NttRoute.resolveDestinationNttContracts(this.staticConfig, {
159
- chain: vaa.emitterChain,
160
- address: payload["sourceNttManager"],
161
- }, recipientChain);
162
- const amt = amount.fromBaseUnits(trimmedAmount.amount, trimmedAmount.decimals);
163
- return {
164
- from: vaa.emitterChain,
165
- to: recipientChain,
166
- state: TransferState.Attested,
167
- originTxs: [tx],
168
- attestation: {
169
- id: msgId,
170
- attestation: vaa,
171
- },
172
- params: {
173
- amount: amount.display(amt),
174
- options: { automatic: true },
175
- normalizedParams: {
176
- amount: amt,
177
- options: { queue: false, automatic: true },
178
- sourceContracts: {
179
- token,
180
- manager,
181
- transceiver: {
182
- wormhole: whTransceiver,
183
- },
184
- },
185
- destinationContracts: {
186
- token: dstInfo.token,
187
- manager: dstInfo.manager,
188
- transceiver: {
189
- wormhole: dstInfo.transceiver["wormhole"],
190
- },
191
- },
192
- },
193
- },
194
- };
195
- }
196
- // Even though this is an automatic route, the transfer may need to be
197
- // manually finalized if it was queued
198
- async finalize(signer, receipt) {
199
- if (!isDestinationQueued(receipt)) {
200
- throw new Error("The transfer must be destination queued in order to finalize");
201
- }
202
- const { attestation: { attestation: vaa }, } = receipt;
203
- const toChain = this.wh.getChain(receipt.to);
204
- const ntt = await toChain.getProtocol("Ntt", {
205
- ntt: receipt.params.normalizedParams.destinationContracts,
206
- });
207
- const sender = Wormhole.chainAddress(signer.chain(), signer.address());
208
- const payload = vaa.payloadName === "WormholeTransfer"
209
- ? vaa.payload
210
- : vaa.payload["payload"];
211
- const completeTransfer = ntt.completeInboundQueuedTransfer(receipt.from, payload["nttManagerPayload"], sender.address);
212
- const finalizeTxids = await signSendWait(toChain, completeTransfer, signer);
213
- return {
214
- ...receipt,
215
- state: TransferState.DestinationFinalized,
216
- destinationTxs: [...(receipt.destinationTxs ?? []), ...finalizeTxids],
217
- };
218
- }
219
- async *track(receipt, timeout) {
220
- if (isSourceInitiated(receipt) || isSourceFinalized(receipt)) {
221
- const { txid } = receipt.originTxs[receipt.originTxs.length - 1];
222
- const isEvmPlatform = (chain) => chainToPlatform(chain) === "Evm";
223
- const vaaType = isEvmPlatform(receipt.from) && isEvmPlatform(receipt.to)
224
- ? // Automatic NTT transfers between EVM chains use standard relayers
225
- "Ntt:WormholeTransferStandardRelayer"
226
- : "Ntt:WormholeTransfer";
227
- const vaa = await this.wh.getVaa(txid, vaaType, timeout);
228
- if (!vaa) {
229
- throw new Error(`No VAA found for transaction: ${txid}`);
230
- }
231
- const msgId = {
232
- chain: vaa.emitterChain,
233
- emitter: vaa.emitterAddress,
234
- sequence: vaa.sequence,
235
- };
236
- receipt = {
237
- ...receipt,
238
- state: TransferState.Attested,
239
- attestation: {
240
- id: msgId,
241
- attestation: vaa,
242
- },
243
- };
244
- yield receipt;
245
- }
246
- const toChain = this.wh.getChain(receipt.to);
247
- const ntt = await toChain.getProtocol("Ntt", {
248
- ntt: receipt.params.normalizedParams.destinationContracts,
249
- });
250
- if (isAttested(receipt)) {
251
- const { attestation: { attestation: vaa }, } = receipt;
252
- if (await ntt.getIsApproved(vaa)) {
253
- receipt = {
254
- ...receipt,
255
- state: TransferState.DestinationInitiated,
256
- // TODO: check for destination event transactions to get dest Txids
257
- };
258
- yield receipt;
259
- }
260
- }
261
- if (isRedeemed(receipt) || isDestinationQueued(receipt)) {
262
- const { attestation: { attestation: vaa }, } = receipt;
263
- const payload = vaa.payloadName === "WormholeTransfer"
264
- ? vaa.payload
265
- : vaa.payload["payload"];
266
- const queuedTransfer = await ntt.getInboundQueuedTransfer(vaa.emitterChain, payload["nttManagerPayload"]);
267
- if (queuedTransfer !== null) {
268
- receipt = {
269
- ...receipt,
270
- state: TransferState.DestinationQueued,
271
- queueReleaseTime: new Date(queuedTransfer.rateLimitExpiryTimestamp * 1000),
272
- };
273
- yield receipt;
274
- }
275
- else if (await ntt.getIsExecuted(vaa)) {
276
- receipt = {
277
- ...receipt,
278
- state: TransferState.DestinationFinalized,
279
- };
280
- yield receipt;
281
- }
282
- }
283
- yield receipt;
284
- }
285
- }
286
- //# sourceMappingURL=automatic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automatic.js","sourceRoot":"","sources":["../../src/automatic.ts"],"names":[],"mappings":"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"}