@@ -40,6 +40,7 @@ import { WormholeTransceiver, getMessageEvm } from './platforms/evm';
40
40
import { NttManagerSolana, getMessageSolana } from './platforms/solana';
41
41
import { formatGasFee } from 'routes/utils';
42
42
import { NO_INPUT } from 'utils/style';
43
+ import { estimateAverageGasFee } from 'utils/gas';
43
44
44
45
export abstract class NttBase extends BaseRoute {
45
46
isSupportedChain(chain: ChainName): boolean {
@@ -58,7 +59,8 @@ export abstract class NttBase extends BaseRoute {
58
59
if (
59
60
destChain &&
60
61
destToken &&
61
- !this.isSupportedToken(destToken, destChain)
62
+ !this.isSupportedToken(destToken, destChain) &&
63
+ token.symbol === destToken.symbol
62
64
) {
63
65
return false;
64
66
}
@@ -77,7 +79,8 @@ export abstract class NttBase extends BaseRoute {
77
79
if (
78
80
sourceChain &&
79
81
sourceToken &&
80
- !this.isSupportedToken(sourceToken, sourceChain)
82
+ !this.isSupportedToken(sourceToken, sourceChain) &&
83
+ token.symbol === sourceToken.symbol
81
84
) {
82
85
return false;
83
86
}
@@ -159,9 +162,8 @@ export abstract class NttBase extends BaseRoute {
159
162
routeOptions?: any,
160
163
): Promise<BigNumber> {
161
164
if (isEvmChain(sendingChain)) {
162
- const provider = wh.mustGetProvider(sendingChain);
163
- const gasPrice = await provider.getGasPrice();
164
- return gasPrice.mul(this.TYPE === Route.NttManual ? 200_000 : 250_000);
165
+ const gasLimit = this.TYPE === Route.NttManual ? 200_000 : 250_000;
166
+ return await estimateAverageGasFee(sendingChain, gasLimit);
165
167
} else if (wh.toChainName(sendingChain) === 'solana') {
166
168
return BigNumber.from(10_000);
167
169
}
@@ -177,11 +179,10 @@ export abstract class NttBase extends BaseRoute {
177
179
return BigNumber.from(0);
178
180
}
179
181
if (isEvmChain(destChain)) {
180
- const provider = wh.mustGetProvider(destChain);
181
- const gasPrice = await provider.getGasPrice();
182
- return gasPrice.mul(300_000);
182
+ const gasLimit = 300_000;
183
+ return await estimateAverageGasFee(destChain, gasLimit);
183
184
} else if (wh.toChainName(destChain) === 'solana') {
184
- return BigNumber.from(65_000);
185
+ return BigNumber.from(65_000); // TODO: check this
185
186
}
186
187
throw new Error('Unsupported chain');
187
188
}
@@ -224,6 +225,9 @@ export abstract class NttBase extends BaseRoute {
224
225
tokenConfig.tokenId,
225
226
);
226
227
const sendAmount = removeDust(parseUnits(amount, decimals), decimals);
228
+ if (sendAmount.isZero()) {
229
+ throw new Error('Amount too low');
230
+ }
227
231
const shouldSkipRelayerSend = this.TYPE !== Route.NttRelay;
228
232
return await nttManager.send(
229
233
token,
@@ -351,10 +355,10 @@ export abstract class NttBase extends BaseRoute {
351
355
chain: ChainName | ChainId,
352
356
): Promise<UnsignedNttMessage> {
353
357
if (isEvmChain(chain)) {
354
- return getMessageEvm(tx, chain);
358
+ return await getMessageEvm(tx, chain);
355
359
}
356
360
if (wh.toChainName(chain) === 'solana') {
357
- return getMessageSolana(tx);
361
+ return await getMessageSolana(tx);
358
362
}
359
363
throw new Error('Unsupported chain');
360
364
}
@@ -378,8 +382,6 @@ export abstract class NttBase extends BaseRoute {
378
382
return undefined;
379
383
}
380
384
381
- // The transfer is considered completed when the message is executed
382
- // and not inbound queued
383
385
async isTransferCompleted(
384
386
chain: ChainName | ChainId,
385
387
signedMessage: SignedNttMessage,
@@ -389,14 +391,7 @@ export abstract class NttBase extends BaseRoute {
389
391
}
390
392
const { recipientNttManager, messageDigest } = signedMessage;
391
393
const nttManager = getNttManager(chain, recipientNttManager);
392
- const isMessageExecuted = await nttManager.isMessageExecuted(messageDigest);
393
- if (isMessageExecuted) {
394
- const queuedTransfer = await nttManager.getInboundQueuedTransfer(
395
- messageDigest,
396
- );
397
- return !queuedTransfer;
398
- }
399
- return false;
394
+ return await nttManager.isTransferCompleted(messageDigest);
400
395
}
401
396
402
397
async getTransferDestInfo<T extends TransferDestInfoBaseParams>(
0 commit comments