Skip to content

Commit a0e6931

Browse files
committed
changed testnet addresses
1 parent 3e5abfc commit a0e6931

21 files changed

+130
-163
lines changed

wormhole-connect/src/AppRouter.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ function AppRouter({ config }: Props) {
7474
dispatch(clearRedeem());
7575
dispatch(clearWallets());
7676
dispatch(clearNtt());
77-
wh.registerProviders(); // reset any providers that may have been set (e.g. signer.provider)
77+
wh.registerProviders(); // reset providers that may have been set during transfer
7878
}
7979
// reset transfer state on leave
8080
if (prevRoute === bridgeRoute && route !== bridgeRoute) {

wormhole-connect/src/config/testnet/gasEstimates.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,11 @@ export const TESTNET_GAS_ESTIMATES: GasEstimates = {
252252
claim: 200000,
253253
},
254254
[Route.NttManual]: {
255-
sendToken: 10000000,
256-
claim: 15000000,
255+
sendToken: 200000,
256+
claim: 250000,
257257
},
258258
[Route.NttRelay]: {
259-
sendToken: 15000000,
259+
sendToken: 450000,
260260
},
261261
},
262262
arbitrum_sepolia: {

wormhole-connect/src/config/testnet/tokens.ts

+18-17
Original file line numberDiff line numberDiff line change
@@ -2231,14 +2231,15 @@ export const TESTNET_TOKENS: TokensConfig = {
22312231
decimals: {
22322232
default: 18,
22332233
},
2234+
},
22342235
TEST_NTTsepolia: {
22352236
key: 'TEST_NTTsepolia',
22362237
symbol: 'TEST_NTT',
22372238
nativeChain: 'sepolia',
22382239
icon: Icon.NTT,
22392240
tokenId: {
22402241
chain: 'sepolia',
2241-
address: '0x169D91C797edF56100F1B765268145660503a423',
2242+
address: '0x1d30E78B7C7fbbcef87ae6e97B5389b2e470CA4a',
22422243
},
22432244
coinGeckoId: '',
22442245
color: '#2774CA',
@@ -2247,8 +2248,8 @@ export const TESTNET_TOKENS: TokensConfig = {
22472248
default: 8,
22482249
},
22492250
ntt: {
2250-
nttManager: '0x24c7E23e3A97cD2F04c9EB9F354bb7f3B31d2d1A',
2251-
wormholeTransceiver: '0xC5bf11aB6aE525FFCA02e2af7F6704CDcECec2eA',
2251+
nttManager: '0xB231aD95f2301bc82eA44c515001F0F746D637e0',
2252+
wormholeTransceiver: '0x1fDC902e30b188FD2BA976B421Cb179943F57896',
22522253
},
22532254
},
22542255
TEST_NTTarbitrum_sepolia: {
@@ -2258,7 +2259,7 @@ export const TESTNET_TOKENS: TokensConfig = {
22582259
icon: Icon.NTT,
22592260
tokenId: {
22602261
chain: 'arbitrum_sepolia',
2261-
address: '0x169D91C797edF56100F1B765268145660503a423',
2262+
address: '0x84A1Cb660B19eB0063EE5FD377eC14AAe3364d74',
22622263
},
22632264
coinGeckoId: '',
22642265
color: '#2774CA',
@@ -2267,8 +2268,8 @@ export const TESTNET_TOKENS: TokensConfig = {
22672268
default: 8,
22682269
},
22692270
ntt: {
2270-
nttManager: '0xaBFa6Ab8dD4d4166b8fea7f84C1458BEf92F3a61',
2271-
wormholeTransceiver: '0xC9a478f97ad763052AD4F00c4d7fC5d187DFFb1B',
2271+
nttManager: '0xEec94CD3083e067398256a79CcA7e740C5c8ef81',
2272+
wormholeTransceiver: '0x0E24D17D7467467b39Bf64A9DFf88776Bd6c74d7',
22722273
},
22732274
},
22742275
TEST_NTTbase_sepolia: {
@@ -2278,7 +2279,7 @@ export const TESTNET_TOKENS: TokensConfig = {
22782279
icon: Icon.NTT,
22792280
tokenId: {
22802281
chain: 'base_sepolia',
2281-
address: '0x169D91C797edF56100F1B765268145660503a423',
2282+
address: '0x7f430D4e7939D994C0955A01FC75D9DE33F12D11',
22822283
},
22832284
coinGeckoId: '',
22842285
color: '#2774CA',
@@ -2287,8 +2288,8 @@ export const TESTNET_TOKENS: TokensConfig = {
22872288
default: 8,
22882289
},
22892290
ntt: {
2290-
nttManager: '0x838a95B6a3E06B6f11C437e22f3C7561a6ec40F1',
2291-
wormholeTransceiver: '0xc3a1248e9bdC1EEF81d16b2AD1594764cBd9307a',
2291+
nttManager: '0xB03b030b2f5B40819Df76467d67eD1C85Ff66fAD',
2292+
wormholeTransceiver: '0x1e072169541f1171e427Aa44B5fd8924BEE71b0e',
22922293
},
22932294
},
22942295
TEST_NTToptimism_sepolia: {
@@ -2298,7 +2299,7 @@ export const TESTNET_TOKENS: TokensConfig = {
22982299
icon: Icon.NTT,
22992300
tokenId: {
23002301
chain: 'optimism_sepolia',
2301-
address: '0x169D91C797edF56100F1B765268145660503a423',
2302+
address: '0x0e15979a7a1eFAEf20312CA45A59eb141bF7E340',
23022303
},
23032304
coinGeckoId: '',
23042305
color: '#2774CA',
@@ -2307,8 +2308,8 @@ export const TESTNET_TOKENS: TokensConfig = {
23072308
default: 8,
23082309
},
23092310
ntt: {
2310-
nttManager: '0x605dE5E0880Cfd6Ffc61aF9585CBAB3946594A3D',
2311-
wormholeTransceiver: '0x5a76440b725909000697E0f72646adf1a492DF8B',
2311+
nttManager: '0x7f430D4e7939D994C0955A01FC75D9DE33F12D11',
2312+
wormholeTransceiver: '0x41265eb2863bf0238081F6AeefeF73549C82C3DD',
23122313
},
23132314
},
23142315
TEST_NTTsolana: {
@@ -2318,7 +2319,7 @@ export const TESTNET_TOKENS: TokensConfig = {
23182319
icon: Icon.NTT,
23192320
tokenId: {
23202321
chain: 'solana',
2321-
address: 'SCAmk7zfNKXemDjap14aGJJyQXZXXhq9X2Fs8oVSsdr',
2322+
address: '87r5ZS91Q2pQbFTvvneqs7y7mbtegtqMt4LDAS4g23Ax',
23222323
},
23232324
coinGeckoId: '',
23242325
color: '#2774CA',
@@ -2327,11 +2328,11 @@ export const TESTNET_TOKENS: TokensConfig = {
23272328
default: 8,
23282329
},
23292330
ntt: {
2330-
nttManager: '7nMTXqo19kzwyisGCdcRP5AErEBToYpVYg2C5PNrjsa2',
2331-
// The wormhole endpoint is baked into the ntt contract on Solana.
2332-
// If the endpoint is split into a separate contract, this address
2331+
nttManager: 'nTTh3bZ5Aer6xboWZe39RDEft4MeVxSQ8D1EYAVLZw9',
2332+
// The wormhole transceiver is baked into the Solana ntt contract.
2333+
// If the transceiver is split into a separate contract, this address
23332334
// and route code should be updated to support the new structure.
2334-
wormholeTransceiver: '7nMTXqo19kzwyisGCdcRP5AErEBToYpVYg2C5PNrjsa2',
2335+
wormholeTransceiver: 'nTTh3bZ5Aer6xboWZe39RDEft4MeVxSQ8D1EYAVLZw9',
23352336
solanaQuoter: '',
23362337
},
23372338
},

wormhole-connect/src/routes/ntt/nttBase.ts

+16-21
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { WormholeTransceiver, getMessageEvm } from './platforms/evm';
4040
import { NttManagerSolana, getMessageSolana } from './platforms/solana';
4141
import { formatGasFee } from 'routes/utils';
4242
import { NO_INPUT } from 'utils/style';
43+
import { estimateAverageGasFee } from 'utils/gas';
4344

4445
export abstract class NttBase extends BaseRoute {
4546
isSupportedChain(chain: ChainName): boolean {
@@ -58,7 +59,8 @@ export abstract class NttBase extends BaseRoute {
5859
if (
5960
destChain &&
6061
destToken &&
61-
!this.isSupportedToken(destToken, destChain)
62+
!this.isSupportedToken(destToken, destChain) &&
63+
token.symbol === destToken.symbol
6264
) {
6365
return false;
6466
}
@@ -77,7 +79,8 @@ export abstract class NttBase extends BaseRoute {
7779
if (
7880
sourceChain &&
7981
sourceToken &&
80-
!this.isSupportedToken(sourceToken, sourceChain)
82+
!this.isSupportedToken(sourceToken, sourceChain) &&
83+
token.symbol === sourceToken.symbol
8184
) {
8285
return false;
8386
}
@@ -159,9 +162,8 @@ export abstract class NttBase extends BaseRoute {
159162
routeOptions?: any,
160163
): Promise<BigNumber> {
161164
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);
165167
} else if (wh.toChainName(sendingChain) === 'solana') {
166168
return BigNumber.from(10_000);
167169
}
@@ -177,11 +179,10 @@ export abstract class NttBase extends BaseRoute {
177179
return BigNumber.from(0);
178180
}
179181
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);
183184
} else if (wh.toChainName(destChain) === 'solana') {
184-
return BigNumber.from(65_000);
185+
return BigNumber.from(65_000); // TODO: check this
185186
}
186187
throw new Error('Unsupported chain');
187188
}
@@ -224,6 +225,9 @@ export abstract class NttBase extends BaseRoute {
224225
tokenConfig.tokenId,
225226
);
226227
const sendAmount = removeDust(parseUnits(amount, decimals), decimals);
228+
if (sendAmount.isZero()) {
229+
throw new Error('Amount too low');
230+
}
227231
const shouldSkipRelayerSend = this.TYPE !== Route.NttRelay;
228232
return await nttManager.send(
229233
token,
@@ -351,10 +355,10 @@ export abstract class NttBase extends BaseRoute {
351355
chain: ChainName | ChainId,
352356
): Promise<UnsignedNttMessage> {
353357
if (isEvmChain(chain)) {
354-
return getMessageEvm(tx, chain);
358+
return await getMessageEvm(tx, chain);
355359
}
356360
if (wh.toChainName(chain) === 'solana') {
357-
return getMessageSolana(tx);
361+
return await getMessageSolana(tx);
358362
}
359363
throw new Error('Unsupported chain');
360364
}
@@ -378,8 +382,6 @@ export abstract class NttBase extends BaseRoute {
378382
return undefined;
379383
}
380384

381-
// The transfer is considered completed when the message is executed
382-
// and not inbound queued
383385
async isTransferCompleted(
384386
chain: ChainName | ChainId,
385387
signedMessage: SignedNttMessage,
@@ -389,14 +391,7 @@ export abstract class NttBase extends BaseRoute {
389391
}
390392
const { recipientNttManager, messageDigest } = signedMessage;
391393
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);
400395
}
401396

402397
async getTransferDestInfo<T extends TransferDestInfoBaseParams>(

wormhole-connect/src/routes/ntt/payloads/transfers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { TrimmedAmount } from '../trimmedAmount';
1+
import { TrimmedAmount } from './trimmedAmount';
22

33
export class NativeTokenTransfer {
44
static prefix = Buffer.from([0x99, 0x4e, 0x54, 0x54]);

wormhole-connect/src/routes/ntt/platforms/evm/getMessage.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import {
2020

2121
const RELAYING_INFO_EVENT_TOPIC =
2222
'0x375a56c053c4d19a2e3445e97b7a28bf4e908617ce6d766e1e03a9d3f5276271';
23+
const RELAYING_INFO_IFACE = new ethers.utils.Interface([
24+
'event RelayingInfo(uint8 relayingType, uint256 deliveryPayment)',
25+
]);
2326

2427
export const getMessageEvm = async (
2528
tx: string,
@@ -53,10 +56,7 @@ export const getMessageEvm = async (
5356
if (!relayingInfoEvent) {
5457
throw new Error('RelayingInfo event not found');
5558
}
56-
const relayingInfoIface = new ethers.utils.Interface([
57-
'event RelayingInfo(uint8 relayingType, uint256 deliveryPayment)',
58-
]);
59-
const parsedRelayingInfo = relayingInfoIface.parseLog(relayingInfoEvent);
59+
const parsedRelayingInfo = RELAYING_INFO_IFACE.parseLog(relayingInfoEvent);
6060
const { relayingType, deliveryPayment } = parsedRelayingInfo.args;
6161
let payload: Buffer;
6262
if (relayingType === NttRelayingType.Standard) {

wormhole-connect/src/routes/ntt/platforms/evm/nttManager.ts

+14-11
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,14 @@ export class NttManagerEvm {
9292
if (!tokenConfig?.ntt?.wormholeTransceiver) {
9393
throw new Error('no wormhole transceiver');
9494
}
95-
const deliveryPrice = !shouldSkipRelayerSend
96-
? BigNumber.from(
95+
const deliveryPrice = shouldSkipRelayerSend
96+
? undefined
97+
: BigNumber.from(
9798
await this.quoteDeliveryPrice(
9899
toChain,
99100
tokenConfig.ntt.wormholeTransceiver,
100101
),
101-
)
102-
: undefined;
102+
);
103103
const transceiverIxs = encodeTransceiverInstructions([
104104
{
105105
index: 0,
@@ -182,17 +182,20 @@ export class NttManagerEvm {
182182
}
183183
}
184184

185-
async isMessageExecuted(messageDigest: string): Promise<boolean> {
186-
try {
187-
return this.nttManager.isMessageExecuted(messageDigest);
188-
} catch (e) {
189-
console.error(e);
190-
throw e;
185+
// The transfer is "complete" when the message is executed and not inbound queued
186+
async isTransferCompleted(messageDigest: string): Promise<boolean> {
187+
const isMessageExecuted = await this.nttManager.isMessageExecuted(
188+
messageDigest,
189+
);
190+
if (isMessageExecuted) {
191+
const queuedTransfer = await this.getInboundQueuedTransfer(messageDigest);
192+
return !queuedTransfer;
191193
}
194+
return false;
192195
}
193196

194197
async isPaused(): Promise<boolean> {
195-
return this.nttManager.isPaused();
198+
return await this.nttManager.isPaused();
196199
}
197200

198201
async fetchRedeemTx(messageDigest: string): Promise<string | undefined> {

wormhole-connect/src/routes/ntt/platforms/evm/wormholeTransceiver.ts

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { wh } from 'utils/sdk';
33
import { WormholeTransceiver__factory } from './abis/WormholeTransceiver__factory';
44
import { TransferWallet, signAndSendTransaction } from 'utils/wallet';
55
import { WormholeTransceiver as WormholeTransceiverAbi } from './abis/WormholeTransceiver';
6+
import { BigNumber } from 'ethers';
67

78
export class WormholeTransceiver {
89
readonly transceiver: WormholeTransceiverAbi;
@@ -32,6 +33,7 @@ export class WormholeTransceiver {
3233

3334
async receiveMessage(vaa: string, payer: string): Promise<string> {
3435
const tx = await this.transceiver.populateTransaction.receiveMessage(vaa);
36+
tx.gasLimit = BigNumber.from(500000);
3537
const signer = await wh.mustGetSigner(this.chain);
3638
const response = await signer.sendTransaction(tx);
3739
const receipt = await response.wait();

wormhole-connect/src/routes/ntt/platforms/index.ts

-21
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import { ChainName, ChainId } from '@wormhole-foundation/wormhole-connect-sdk';
22
import { isEvmChain, wh } from 'utils/sdk';
33
import { NttManagerEvm } from './evm';
44
import { NttManagerSolana } from './solana';
5-
import { WormholeTransceiver } from './evm';
6-
import { NttQuoter } from './solana/nttQuoter';
75

86
export const getNttManager = (
97
chain: ChainName | ChainId,
@@ -17,22 +15,3 @@ export const getNttManager = (
1715
}
1816
throw new Error(`Unsupported chain: ${chain}`);
1917
};
20-
21-
export const isRelayingEnabled = async (
22-
chain: ChainName | ChainId,
23-
address: string,
24-
destChain: ChainName | ChainId,
25-
) => {
26-
if (isEvmChain(chain)) {
27-
const transceiver = new WormholeTransceiver(chain, address);
28-
return await Promise.all([
29-
transceiver.isWormholeRelayingEnabled(destChain),
30-
transceiver.isSpecialRelayingEnabled(destChain),
31-
]).then((results) => results.some((r) => r));
32-
}
33-
if (wh.toChainName(chain) === 'solana') {
34-
const quoter = new NttQuoter(address);
35-
return await quoter.isRelayEnabled(destChain);
36-
}
37-
throw new Error(`Unsupported chain: ${chain}`);
38-
};

wormhole-connect/src/routes/ntt/platforms/solana/nttManager.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -326,13 +326,10 @@ export class NttManagerSolana {
326326
return txId;
327327
}
328328

329-
async isMessageExecuted(messageDigest: string): Promise<boolean> {
329+
async isTransferCompleted(messageDigest: string): Promise<boolean> {
330330
try {
331331
const inboxItem = await this.getInboxItem(messageDigest);
332-
return (
333-
inboxItem.releaseStatus.released !== null &&
334-
inboxItem.releaseStatus.released !== undefined
335-
);
332+
return !!inboxItem.releaseStatus.released;
336333
} catch (e: any) {
337334
if (e.message?.includes('Account does not exist')) {
338335
return false;
@@ -347,7 +344,6 @@ export class NttManagerSolana {
347344
const signatures = await this.connection.getSignaturesForAddress(address, {
348345
limit: 1,
349346
});
350-
console.log(`fetchRedeemTx: ${signatures[0].signature}`);
351347
return signatures ? signatures[0].signature : undefined;
352348
}
353349

0 commit comments

Comments
 (0)