@wormhole-foundation/sdk-solana-tokenbridge 2.3.0 → 3.0.0-tb-exec.beta.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.
@@ -0,0 +1,31 @@
1
+ import type { AccountAddress, ChainAddress, ChainsConfig, Contracts, Network, Platform, TokenAddress, TokenId, ExecutorTokenBridge } from '@wormhole-foundation/sdk-connect';
2
+ import type { SolanaChains } from '@wormhole-foundation/sdk-solana';
3
+ import { SolanaUnsignedTransaction } from '@wormhole-foundation/sdk-solana';
4
+ import { Program } from '@coral-xyz/anchor';
5
+ import type { AddressLookupTableAccount, Connection } from '@solana/web3.js';
6
+ import { PublicKey } from '@solana/web3.js';
7
+ import '@wormhole-foundation/sdk-solana-core';
8
+ import { ExecutorTokenBridgeRelayer } from './executorTokenBridgeTypes.js';
9
+ export declare class SolanaExecutorTokenBridge<N extends Network, C extends SolanaChains> implements ExecutorTokenBridge<N, C> {
10
+ readonly network: N;
11
+ readonly chain: C;
12
+ readonly connection: Connection;
13
+ readonly contracts: Contracts;
14
+ readonly relayerProgramId: PublicKey;
15
+ readonly executorProgramId: PublicKey;
16
+ readonly wormholeProgramId: PublicKey;
17
+ readonly tokenBridgeProgramId: PublicKey;
18
+ readonly relayerProgram: Program<ExecutorTokenBridgeRelayer>;
19
+ constructor(network: N, chain: C, connection: Connection, contracts: Contracts);
20
+ static fromRpc<N extends Network>(connection: Connection, config: ChainsConfig<N, Platform>): Promise<SolanaExecutorTokenBridge<N, SolanaChains>>;
21
+ transfer(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>, amount: bigint, executorQuote: ExecutorTokenBridge.ExecutorQuote, referrerFee?: ExecutorTokenBridge.ReferrerFee): AsyncGenerator<SolanaUnsignedTransaction<N, C>>;
22
+ redeem(sender: AccountAddress<C>, vaa: ExecutorTokenBridge.VAA): AsyncGenerator<SolanaUnsignedTransaction<N, C>>;
23
+ getAddressLookupTable(): Promise<AddressLookupTableAccount | null>;
24
+ static associatedTokenAccountMinRent: bigint | undefined;
25
+ estimateMsgValueAndGasLimit(receivedToken: TokenId, recipient?: ChainAddress): Promise<{
26
+ msgValue: bigint;
27
+ gasLimit: bigint;
28
+ }>;
29
+ private createUnsignedTx;
30
+ }
31
+ //# sourceMappingURL=executorTokenBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executorTokenBridge.d.ts","sourceRoot":"","sources":["../../src/executorTokenBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAW1C,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAGL,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,KAAK,EACV,yBAAyB,EACzB,UAAU,EAEX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,SAAS,EAMV,MAAM,iBAAiB,CAAC;AASzB,OAAO,sCAAsC,CAAC;AAG9C,OAAO,EACL,0BAA0B,EAE3B,MAAM,+BAA+B,CAAC;AAYvC,qBAAa,yBAAyB,CACpC,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,YAAY,CACtB,YAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAUlC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAX/B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,CAAC;IACtC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAEzC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC;gBAGlD,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS;WAqBlB,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAe/C,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,mBAAmB,CAAC,aAAa,EAChD,WAAW,CAAC,EAAE,mBAAmB,CAAC,WAAW,GAC5C,cAAc,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA6P3C,MAAM,CACX,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,GAAG,EAAE,mBAAmB,CAAC,GAAG,GAC3B,cAAc,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAiL5C,qBAAqB,IAAI,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAmBxE,MAAM,CAAC,6BAA6B,EAAE,MAAM,GAAG,SAAS,CAAa;IAE/D,2BAA2B,CAC/B,aAAa,EAAE,OAAO,EACtB,SAAS,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAoDlD,OAAO,CAAC,gBAAgB;CAazB"}
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SolanaExecutorTokenBridge = void 0;
7
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
8
+ const sdk_solana_1 = require("@wormhole-foundation/sdk-solana");
9
+ const anchor_1 = require("@coral-xyz/anchor");
10
+ const web3_js_1 = require("@solana/web3.js");
11
+ const spl_token_1 = require("@solana/spl-token");
12
+ require("@wormhole-foundation/sdk-solana-core");
13
+ const bn_js_1 = __importDefault(require("bn.js"));
14
+ const executorTokenBridgeTypes_js_1 = require("./executorTokenBridgeTypes.js");
15
+ const sdk_solana_core_1 = require("@wormhole-foundation/sdk-solana-core");
16
+ const tokenBridge_js_1 = require("./tokenBridge.js");
17
+ const index_js_1 = require("./utils/index.js");
18
+ class SolanaExecutorTokenBridge {
19
+ network;
20
+ chain;
21
+ connection;
22
+ contracts;
23
+ relayerProgramId;
24
+ executorProgramId;
25
+ wormholeProgramId;
26
+ tokenBridgeProgramId;
27
+ relayerProgram;
28
+ constructor(network, chain, connection, contracts) {
29
+ this.network = network;
30
+ this.chain = chain;
31
+ this.connection = connection;
32
+ this.contracts = contracts;
33
+ if (!contracts.executorTokenBridge)
34
+ throw new Error(`Executor Token Bridge contracts not found for network ${network} and chain ${chain}`);
35
+ this.relayerProgramId = new web3_js_1.PublicKey(contracts.executorTokenBridge.relayer);
36
+ this.executorProgramId = new web3_js_1.PublicKey(contracts.executor);
37
+ this.wormholeProgramId = new web3_js_1.PublicKey(contracts.coreBridge);
38
+ this.tokenBridgeProgramId = new web3_js_1.PublicKey(contracts.tokenBridge);
39
+ this.relayerProgram = new anchor_1.Program(executorTokenBridgeTypes_js_1.ExecutorTokenBridgeRelayerIdl, this.relayerProgramId, { connection: this.connection });
40
+ }
41
+ static async fromRpc(connection, config) {
42
+ const [network, chain] = await sdk_solana_1.SolanaPlatform.chainFromRpc(connection);
43
+ const conf = config[chain];
44
+ if (conf.network !== network)
45
+ throw new Error(`Network mismatch: ${conf.network} != ${network}`);
46
+ return new SolanaExecutorTokenBridge(network, chain, connection, conf.contracts);
47
+ }
48
+ async *transfer(sender, recipient, token, amount, executorQuote, referrerFee) {
49
+ const dstExecutor = sdk_connect_1.contracts.executorTokenBridge.get(this.network, recipient.chain);
50
+ if (!dstExecutor || !dstExecutor.relayer) {
51
+ throw new Error(`Token Bridge Executor Relayer contract for domain ${recipient.chain} not found`);
52
+ }
53
+ const dstRelayer = dstExecutor.relayer;
54
+ const senderPubkey = new sdk_solana_1.SolanaAddress(sender).unwrap();
55
+ const targetChain = (0, sdk_connect_1.toChainId)(recipient.chain);
56
+ const targetRecipient = recipient.address.toUniversalAddress();
57
+ const { estimatedCost, signedQuote, relayInstructions } = executorQuote;
58
+ const signedQuoteBytes = (0, sdk_connect_1.serializeLayout)(sdk_connect_1.signedQuoteLayout, signedQuote);
59
+ const relayInstructionsBytes = (0, sdk_connect_1.serializeLayout)(sdk_connect_1.relayInstructionsLayout, relayInstructions);
60
+ const tokenBridge = new tokenBridge_js_1.SolanaTokenBridge(this.network, this.chain, this.connection, this.contracts);
61
+ const isGasToken = (0, sdk_connect_1.isNative)(token);
62
+ const isWrappedAsset = !isGasToken && (await tokenBridge.isWrappedAsset(token));
63
+ const mint = isGasToken ? spl_token_1.NATIVE_MINT : new sdk_solana_1.SolanaAddress(token).unwrap();
64
+ const tokenProgram = await sdk_solana_1.SolanaPlatform.getTokenProgramId(this.connection, mint);
65
+ const payeePubkey = new web3_js_1.PublicKey(signedQuote.quote.payeeAddress);
66
+ const messageKeypair = web3_js_1.Keypair.generate();
67
+ const dstTransferRecipient = (0, sdk_connect_1.toUniversal)(recipient.chain, dstRelayer);
68
+ const dstExecutionAddress = dstTransferRecipient;
69
+ // Derive PDAs
70
+ const tokenBridgeConfig = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('config')], this.tokenBridgeProgramId)[0];
71
+ const tokenBridgeCustody = web3_js_1.PublicKey.findProgramAddressSync([mint.toBuffer()], this.tokenBridgeProgramId)[0];
72
+ const tokenBridgeAuthoritySigner = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('authority_signer')], this.tokenBridgeProgramId)[0];
73
+ const tokenBridgeCustodySigner = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('custody_signer')], this.tokenBridgeProgramId)[0];
74
+ const { wormholeEmitter: tokenBridgeEmitterId, wormholeSequence: tokenBridgeSequence, wormholeFeeCollector, wormholeBridge, } = sdk_solana_core_1.utils.getWormholeDerivedAccounts(this.tokenBridgeProgramId, this.wormholeProgramId);
75
+ const config = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('sender')], this.relayerProgramId)[0];
76
+ const fromTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(mint, senderPubkey, false, tokenProgram);
77
+ const tmpTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('tmp'), mint.toBytes()], this.relayerProgramId)[0];
78
+ const instructions = [];
79
+ if (referrerFee && referrerFee.feeAmount > 0n) {
80
+ const referrer = new web3_js_1.PublicKey(referrerFee.referrer.address.toString());
81
+ if (mint.equals(spl_token_1.NATIVE_MINT)) {
82
+ instructions.push(web3_js_1.SystemProgram.transfer({
83
+ fromPubkey: senderPubkey,
84
+ toPubkey: referrer,
85
+ lamports: referrerFee.feeAmount,
86
+ }));
87
+ }
88
+ else {
89
+ const referrerAta = (0, spl_token_1.getAssociatedTokenAddressSync)(mint, referrer, true, tokenProgram);
90
+ const senderAta = (0, spl_token_1.getAssociatedTokenAddressSync)(mint, senderPubkey, true, tokenProgram);
91
+ const referrerAtaAccount = await this.connection.getAccountInfo(referrerAta);
92
+ if (!referrerAtaAccount) {
93
+ instructions.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(senderPubkey, referrerAta, referrer, mint, tokenProgram));
94
+ }
95
+ instructions.push((0, spl_token_1.createTransferInstruction)(senderAta, referrerAta, senderPubkey, referrerFee.feeAmount, undefined, tokenProgram));
96
+ }
97
+ }
98
+ const transferAmount = referrerFee ? referrerFee.remainingAmount : amount;
99
+ // Build transfer instruction data
100
+ const transferArgs = {
101
+ amount: new bn_js_1.default(transferAmount.toString()),
102
+ recipientChain: targetChain,
103
+ recipientAddress: Array.from(targetRecipient.toUint8Array()),
104
+ nonce: 0,
105
+ dstTransferRecipient: Array.from(dstTransferRecipient.toUint8Array()),
106
+ dstExecutionAddress: Array.from(dstExecutionAddress.toUint8Array()),
107
+ execAmount: new bn_js_1.default(estimatedCost.toString()),
108
+ signedQuoteBytes: Buffer.from(signedQuoteBytes),
109
+ relayInstructions: Buffer.from(relayInstructionsBytes),
110
+ };
111
+ if (!isWrappedAsset) {
112
+ instructions.push(await this.relayerProgram.methods
113
+ .transferNativeTokensWithRelay({
114
+ ...transferArgs,
115
+ wrapNative: (0, sdk_connect_1.isNative)(token),
116
+ })
117
+ .accountsStrict({
118
+ payer: senderPubkey,
119
+ config,
120
+ mint,
121
+ fromTokenAccount,
122
+ tmpTokenAccount,
123
+ tokenBridgeConfig,
124
+ tokenBridgeCustody,
125
+ tokenBridgeAuthoritySigner,
126
+ tokenBridgeCustodySigner,
127
+ wormholeBridge,
128
+ wormholeMessage: messageKeypair.publicKey,
129
+ tokenBridgeEmitter: tokenBridgeEmitterId,
130
+ tokenBridgeSequence,
131
+ wormholeFeeCollector,
132
+ payee: payeePubkey,
133
+ systemProgram: web3_js_1.SystemProgram.programId,
134
+ tokenProgram,
135
+ wormholeProgram: this.wormholeProgramId,
136
+ tokenBridgeProgram: this.tokenBridgeProgramId,
137
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
138
+ executorProgram: this.executorProgramId,
139
+ clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
140
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
141
+ })
142
+ .instruction());
143
+ }
144
+ else {
145
+ instructions.push(await this.relayerProgram.methods
146
+ .transferWrappedTokensWithRelay(transferArgs)
147
+ .accountsStrict({
148
+ payer: senderPubkey,
149
+ config,
150
+ tokenBridgeWrappedMint: mint,
151
+ fromTokenAccount,
152
+ tmpTokenAccount,
153
+ tokenBridgeWrappedMeta: (0, index_js_1.deriveWrappedMetaKey)(this.tokenBridgeProgramId, mint),
154
+ tokenBridgeConfig,
155
+ tokenBridgeAuthoritySigner,
156
+ wormholeBridge,
157
+ wormholeMessage: messageKeypair.publicKey,
158
+ tokenBridgeEmitter: tokenBridgeEmitterId,
159
+ tokenBridgeSequence,
160
+ wormholeFeeCollector,
161
+ payee: payeePubkey,
162
+ wormholeProgram: this.wormholeProgramId,
163
+ tokenBridgeProgram: this.tokenBridgeProgramId,
164
+ systemProgram: web3_js_1.SystemProgram.programId,
165
+ tokenProgram,
166
+ executorProgram: this.executorProgramId,
167
+ clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
168
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
169
+ })
170
+ .instruction());
171
+ }
172
+ // Build versioned transaction
173
+ const lut = await this.getAddressLookupTable();
174
+ const { blockhash } = await this.connection.getLatestBlockhash();
175
+ const messageV0 = new web3_js_1.TransactionMessage({
176
+ payerKey: senderPubkey,
177
+ instructions,
178
+ recentBlockhash: blockhash,
179
+ }).compileToV0Message(lut ? [lut] : []);
180
+ const transaction = new web3_js_1.VersionedTransaction(messageV0);
181
+ yield this.createUnsignedTx({ transaction, signers: [messageKeypair] }, 'ExecutorTokenBridge.transfer');
182
+ }
183
+ async *redeem(sender, vaa) {
184
+ const senderPubkey = new sdk_solana_1.SolanaAddress(sender).unwrap();
185
+ const recipientPubkey = new sdk_solana_1.SolanaAddress(vaa.payload.payload.targetRecipient).unwrap();
186
+ const tokenChain = vaa.payload.token.chain;
187
+ const tokenAddress = vaa.payload.token.address;
188
+ const isNativeToken = tokenChain === this.chain;
189
+ let mint;
190
+ if (isNativeToken) {
191
+ mint = new sdk_solana_1.SolanaAddress(tokenAddress).unwrap();
192
+ }
193
+ else {
194
+ // For wrapped tokens, derive the wrapped mint key using the token's origin chain
195
+ const tokenBridge = new tokenBridge_js_1.SolanaTokenBridge(this.network, this.chain, this.connection, this.contracts);
196
+ const wrappedAsset = await tokenBridge.getWrappedAsset({
197
+ chain: tokenChain,
198
+ address: tokenAddress,
199
+ });
200
+ mint = new sdk_solana_1.SolanaAddress(wrappedAsset).unwrap();
201
+ }
202
+ const tokenProgram = await sdk_solana_1.SolanaPlatform.getTokenProgramId(this.connection, mint);
203
+ const recipientTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(mint, recipientPubkey, true, tokenProgram);
204
+ // Post VAA if necessary
205
+ const postedVaaKey = sdk_solana_core_1.utils.derivePostedVaaKey(this.wormholeProgramId, Buffer.from(vaa.hash));
206
+ const isPosted = await this.connection.getAccountInfo(postedVaaKey);
207
+ if (!isPosted) {
208
+ const wormholeCore = new sdk_solana_core_1.SolanaWormholeCore(this.network, this.chain, this.connection, this.contracts);
209
+ yield* wormholeCore.postVaa(senderPubkey, vaa);
210
+ }
211
+ const dstRelayer = new sdk_solana_1.SolanaAddress(vaa.payload.to.address).unwrap();
212
+ const dstRelayerProgram = new anchor_1.Program(executorTokenBridgeTypes_js_1.ExecutorTokenBridgeRelayerIdl, dstRelayer, { connection: this.connection });
213
+ const config = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('redeemer')], dstRelayerProgram.programId)[0];
214
+ const tokenBridgeConfig = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('config')], this.tokenBridgeProgramId)[0];
215
+ const tmpTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('tmp'), mint.toBytes()], dstRelayerProgram.programId)[0];
216
+ const tokenBridgeClaim = sdk_solana_core_1.utils.deriveClaimKey(this.tokenBridgeProgramId, vaa.emitterAddress.toUint8Array(), (0, sdk_connect_1.toChainId)(vaa.emitterChain), vaa.sequence);
217
+ const tokenBridgeForeignEndpoint = (0, index_js_1.deriveEndpointKey)(this.tokenBridgeProgramId, (0, sdk_connect_1.toChainId)(vaa.emitterChain), vaa.emitterAddress.toUint8Array());
218
+ const tokenBridgeCustody = web3_js_1.PublicKey.findProgramAddressSync([mint.toBuffer()], this.tokenBridgeProgramId)[0];
219
+ const tokenBridgeCustodySigner = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('custody_signer')], this.tokenBridgeProgramId)[0];
220
+ let instruction;
221
+ const vaaHash = Array.from(vaa.hash);
222
+ if (isNativeToken) {
223
+ instruction = await dstRelayerProgram.methods
224
+ .completeNativeTransferWithRelay(vaaHash)
225
+ .accountsStrict({
226
+ payer: senderPubkey,
227
+ config,
228
+ mint,
229
+ recipientTokenAccount,
230
+ recipient: recipientPubkey,
231
+ tmpTokenAccount,
232
+ tokenBridgeConfig,
233
+ vaa: postedVaaKey,
234
+ tokenBridgeClaim,
235
+ tokenBridgeForeignEndpoint,
236
+ tokenBridgeCustody,
237
+ tokenBridgeCustodySigner,
238
+ wormholeProgram: this.wormholeProgramId,
239
+ tokenBridgeProgram: this.tokenBridgeProgramId,
240
+ tokenProgram,
241
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
242
+ systemProgram: web3_js_1.SystemProgram.programId,
243
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
244
+ })
245
+ .instruction();
246
+ }
247
+ else {
248
+ instruction = await dstRelayerProgram.methods
249
+ .completeWrappedTransferWithRelay(vaaHash)
250
+ .accountsStrict({
251
+ payer: senderPubkey,
252
+ config,
253
+ tokenBridgeWrappedMint: mint,
254
+ recipientTokenAccount,
255
+ recipient: recipientPubkey,
256
+ tmpTokenAccount,
257
+ tokenBridgeWrappedMeta: (0, index_js_1.deriveWrappedMetaKey)(this.tokenBridgeProgramId, mint),
258
+ tokenBridgeConfig,
259
+ vaa: postedVaaKey,
260
+ tokenBridgeClaim,
261
+ tokenBridgeForeignEndpoint,
262
+ tokenBridgeMintAuthority: (0, index_js_1.deriveMintAuthorityKey)(this.tokenBridgeProgramId),
263
+ wormholeProgram: this.wormholeProgramId,
264
+ tokenBridgeProgram: this.tokenBridgeProgramId,
265
+ tokenProgram,
266
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
267
+ systemProgram: web3_js_1.SystemProgram.programId,
268
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
269
+ })
270
+ .instruction();
271
+ }
272
+ const { blockhash } = await this.connection.getLatestBlockhash();
273
+ const messageV0 = new web3_js_1.TransactionMessage({
274
+ payerKey: senderPubkey,
275
+ instructions: [instruction],
276
+ recentBlockhash: blockhash,
277
+ }).compileToV0Message();
278
+ const transaction = new web3_js_1.VersionedTransaction(messageV0);
279
+ yield this.createUnsignedTx({ transaction, signers: [] }, 'ExecutorTokenBridge.redeem');
280
+ }
281
+ async getAddressLookupTable() {
282
+ const lutPointer = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('lut')], this.relayerProgramId)[0];
283
+ try {
284
+ const lutAddress = // @ts-ignore
285
+ (await this.relayerProgram.account.lut.fetch(lutPointer)).address;
286
+ const lut = await this.connection.getAddressLookupTable(lutAddress);
287
+ if (lut.value) {
288
+ return lut.value;
289
+ }
290
+ }
291
+ catch { }
292
+ return null;
293
+ }
294
+ static associatedTokenAccountMinRent = undefined;
295
+ async estimateMsgValueAndGasLimit(receivedToken, recipient) {
296
+ let msgValue = 0n;
297
+ // These are estimates with some padding, actual values may vary
298
+ msgValue += 2n * 5000n + 7n * 5000n + 1400000n; // post vaa, 2 sigs + 7 Secp256k1 SigVerify Precompile + 1 sig account rent (59 bytes)
299
+ msgValue += 2n * 5000n + 7n * 5000n; // post vaa, 2 signatures + 7 Secp256k1 SigVerify Precompile
300
+ msgValue += 5000n + 3200000n; // core bridge post vaa account
301
+ // complete transfer
302
+ if ((0, sdk_connect_1.isNative)(receivedToken.address) ||
303
+ (0, sdk_connect_1.canonicalAddress)(receivedToken) === spl_token_1.NATIVE_MINT.toString()) {
304
+ msgValue += 5000n + 5000000n;
305
+ }
306
+ else {
307
+ msgValue += 5000n + 1200000n;
308
+ }
309
+ if (recipient) {
310
+ const recipientPk = new web3_js_1.PublicKey(recipient.address.toString());
311
+ // The account creation cost is already accounted for when the mint is native
312
+ if (!(0, sdk_connect_1.isNative)(receivedToken.address)) {
313
+ const mint = new sdk_solana_1.SolanaAddress(receivedToken.address).unwrap();
314
+ const mintInfo = await this.connection.getAccountInfo(mint);
315
+ if (mintInfo === null)
316
+ throw new Error("Couldn't determine token program. Mint account is null.");
317
+ const ata = (0, spl_token_1.getAssociatedTokenAddressSync)(mint, recipientPk, true, mintInfo.owner);
318
+ if ((await this.connection.getAccountInfo(ata)) === null) {
319
+ if (!SolanaExecutorTokenBridge.associatedTokenAccountMinRent) {
320
+ SolanaExecutorTokenBridge.associatedTokenAccountMinRent = BigInt(await this.connection.getMinimumBalanceForRentExemption(165));
321
+ }
322
+ msgValue += SolanaExecutorTokenBridge.associatedTokenAccountMinRent;
323
+ }
324
+ }
325
+ }
326
+ return { msgValue, gasLimit: 310000n };
327
+ }
328
+ createUnsignedTx(txReq, description, parallelizable = false) {
329
+ return new sdk_solana_1.SolanaUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
330
+ }
331
+ }
332
+ exports.SolanaExecutorTokenBridge = SolanaExecutorTokenBridge;
333
+ //# sourceMappingURL=executorTokenBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executorTokenBridge.js","sourceRoot":"","sources":["../../src/executorTokenBridge.ts"],"names":[],"mappings":"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"}