@layerzerolabs/lz-corekit-solana 3.0.53 → 3.0.56

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.
package/dist/index.mjs CHANGED
@@ -1,45 +1,55 @@
1
- import { Connection, PublicKey, Keypair, sendAndConfirmRawTransaction } from '@solana/web3.js';
1
+ import { createNullRpc, createSignerFromKeypair } from '@metaplex-foundation/umi';
2
+ import { base58 } from '@metaplex-foundation/umi/serializers';
3
+ import { createDefaultProgramRepository } from '@metaplex-foundation/umi-program-repository';
4
+ import { createWeb3JsRpc } from '@metaplex-foundation/umi-rpc-web3js';
5
+ import { createWeb3JsTransactionFactory } from '@metaplex-foundation/umi-transaction-factory-web3js';
6
+ import { Connection, PublicKey } from '@solana/web3.js';
2
7
  import { Block, TransactionResponse, TransactionReceipt, BlockWithTransactions, TransactionPending, SignedTransaction } from '@layerzerolabs/lz-core';
3
- import { arrayify } from '@layerzerolabs/lz-utilities';
8
+ import { createWeb3JsEddsa } from '@metaplex-foundation/umi-eddsa-web3js';
4
9
  import * as bip39 from 'bip39';
5
10
  import { derivePath } from 'ed25519-hd-key';
6
11
 
7
- // src/providers/solana.ts
8
- function toRawTransaction(transaction) {
9
- const retval = typeof transaction === "string" ? arrayify(transaction) : transaction.serialize();
10
- return retval;
11
- }
12
-
13
12
  // src/providers/solana.ts
14
13
  var SolanaProvider = class _SolanaProvider {
15
14
  /**
16
15
  * Creates an instance of SolanaProvider.
17
16
  *
18
- * @param {string} url - The URL of the Solana node.
17
+ * @param {string | Connection} url - The URL of the Solana node.
19
18
  */
20
19
  constructor(url) {
21
- this.url = url;
22
- this.nativeProvider = new Connection(url, "confirmed");
20
+ if (url instanceof Connection) {
21
+ const umi = {
22
+ transactions: createWeb3JsTransactionFactory(),
23
+ programs: createDefaultProgramRepository({ rpc: createNullRpc() })
24
+ };
25
+ this.nativeProvider = createWeb3JsRpc(umi, url);
26
+ this.url = url.rpcEndpoint;
27
+ } else {
28
+ const connection = new Connection(url, "confirmed");
29
+ const umi = {
30
+ transactions: createWeb3JsTransactionFactory(),
31
+ programs: createDefaultProgramRepository({ rpc: createNullRpc() })
32
+ };
33
+ this.nativeProvider = createWeb3JsRpc(umi, connection);
34
+ this.url = url;
35
+ }
23
36
  }
24
37
  /**
25
- * Creates an instance of SolanaProvider from the given source.
38
+ * Creates an instance of SolanaProvider from the given URL or Connection.
26
39
  *
27
- * @param {string} source - The source to create the provider from.
40
+ * @param {string | Connection} source - The URL of the Solana node.
28
41
  * @returns {SolanaProvider} The created SolanaProvider instance.
29
- * @throws {Error} If the source parameter is invalid.
42
+ * @throws {Error} If the URL parameter is invalid.
30
43
  */
31
44
  static from(source) {
32
45
  if (typeof source === "string") {
33
46
  return new _SolanaProvider(source);
47
+ } else if (source instanceof Connection) {
48
+ return new _SolanaProvider(source);
34
49
  } else {
35
50
  throw new Error("Invalid parameters");
36
51
  }
37
52
  }
38
- /**
39
- * Gets the native Solana provider instance.
40
- *
41
- * @returns {Connection} The native Solana provider instance.
42
- */
43
53
  get native() {
44
54
  return this.nativeProvider;
45
55
  }
@@ -50,7 +60,7 @@ var SolanaProvider = class _SolanaProvider {
50
60
  * @returns {Promise<string>} A promise that resolves to the balance of the address.
51
61
  */
52
62
  async getBalance(address) {
53
- return this.nativeProvider.getBalance(new PublicKey(address)).then((balance) => balance.toString());
63
+ return this.nativeProvider.connection.getBalance(new PublicKey(address)).then((balance) => balance.toString());
54
64
  }
55
65
  /**
56
66
  * Gets the block specified by slot.
@@ -59,7 +69,7 @@ var SolanaProvider = class _SolanaProvider {
59
69
  * @returns {Promise<Block>} A promise that resolves to the block.
60
70
  */
61
71
  async getBlock(slot) {
62
- const response = await this.nativeProvider.getParsedBlock(parseInt(slot.toString()), {
72
+ const response = await this.nativeProvider.connection.getParsedBlock(parseInt(slot.toString()), {
63
73
  commitment: "confirmed"
64
74
  });
65
75
  return Block.from(response);
@@ -70,7 +80,7 @@ var SolanaProvider = class _SolanaProvider {
70
80
  * @returns {Promise<number>} A promise that resolves to the current block number.
71
81
  */
72
82
  async getBlockNumber() {
73
- return this.nativeProvider.getBlockHeight({ commitment: "confirmed" });
83
+ return this.nativeProvider.connection.getBlockHeight({ commitment: "confirmed" });
74
84
  }
75
85
  /**
76
86
  * Gets the current slot number for commitment.
@@ -79,7 +89,7 @@ var SolanaProvider = class _SolanaProvider {
79
89
  * @returns {Promise<number>} A promise that resolves to the current slot number.
80
90
  */
81
91
  async getSlot(finality) {
82
- return this.nativeProvider.getSlot(finality);
92
+ return this.nativeProvider.getSlot({ commitment: finality });
83
93
  }
84
94
  /**
85
95
  * Gets the UNIX timestamp for the block identified by slot.
@@ -93,7 +103,7 @@ var SolanaProvider = class _SolanaProvider {
93
103
  if (t === null) {
94
104
  throw new Error("Block timestamp not available");
95
105
  }
96
- return t;
106
+ return Number(t.toString());
97
107
  }
98
108
  /**
99
109
  * Gets information about a transaction.
@@ -102,20 +112,25 @@ var SolanaProvider = class _SolanaProvider {
102
112
  * @returns {Promise<TransactionResponse>} A promise that resolves to the transaction response
103
113
  */
104
114
  async getTransaction(txHash) {
105
- const response = await this.nativeProvider.getParsedTransaction(txHash, {
115
+ const signature = typeof txHash === "string" ? base58.serialize(txHash) : txHash;
116
+ const response = await this.nativeProvider.getTransaction(signature, {
106
117
  commitment: "confirmed"
107
118
  });
119
+ if (response === null) {
120
+ throw new Error("Transaction not found");
121
+ }
108
122
  return TransactionResponse.from(response);
109
123
  }
110
124
  /**
111
125
  * Gets the receipt of a transaction.
112
126
  *
113
- * @param {string} txHash - The transaction hash is TransactionSignature in Solana
127
+ * @param {string | Uint8Array} txHash - The transaction hash is TransactionSignature in Solana
114
128
  * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.
115
129
  * @throws {Error} If the transaction is not found.
116
130
  */
117
131
  async getTransactionReceipt(txHash) {
118
- const response = await this.nativeProvider.getParsedTransaction(txHash, {
132
+ const signature = typeof txHash === "string" ? base58.serialize(txHash) : txHash;
133
+ const response = await this.nativeProvider.getTransaction(signature, {
119
134
  commitment: "confirmed"
120
135
  });
121
136
  if (response === null) {
@@ -147,7 +162,7 @@ var SolanaProvider = class _SolanaProvider {
147
162
  if (typeof blockTag === "string") {
148
163
  blockTag = parseInt(blockTag);
149
164
  }
150
- const response = await this.nativeProvider.getBlock(blockTag, { transactionDetails: "full" });
165
+ const response = await this.nativeProvider.connection.getBlock(blockTag, { transactionDetails: "full" });
151
166
  if (response === null) {
152
167
  throw new Error("Block not found");
153
168
  }
@@ -157,14 +172,14 @@ var SolanaProvider = class _SolanaProvider {
157
172
  * Sends a signed transaction to the blockchain.
158
173
  *
159
174
  * @param {SignedTransaction} transaction - The signed transaction to send.
160
- * @param {SendOptions} [sendOptions] - Optional parameters for sending the transaction.
175
+ * @param {RpcSendTransactionOptions} [options] - Optional parameters for sending the transaction.
161
176
  * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.
162
177
  */
163
- async sendTransaction(transaction, sendOptions) {
164
- const _transaction = transaction.signed;
165
- const rawTransaction = toRawTransaction(_transaction);
166
- const response = await this.nativeProvider.sendRawTransaction(rawTransaction, sendOptions);
167
- return TransactionPending.from(response);
178
+ async sendTransaction(transaction, options) {
179
+ const signedTransaction = transaction.signed;
180
+ const signature = await this.nativeProvider.sendTransaction(signedTransaction, options);
181
+ const txHash = base58.deserialize(signature)[0];
182
+ return TransactionPending.from(txHash);
168
183
  }
169
184
  /**
170
185
  * Confirms a pending transaction.
@@ -174,21 +189,24 @@ var SolanaProvider = class _SolanaProvider {
174
189
  * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.
175
190
  * @throws {Error} If the transaction fails.
176
191
  */
177
- async confirmTransaction(pending, opts) {
178
- const strategy = opts ?? await (async () => {
179
- const block = await this.nativeProvider.getLatestBlockhash("confirmed");
180
- return {
181
- blockhash: block.blockhash,
182
- lastValidBlockHeight: block.lastValidBlockHeight
183
- };
184
- })();
192
+ async confirmTransaction(pending, options) {
185
193
  const signature = pending.pending;
186
- const result = await this.nativeProvider.confirmTransaction({ ...strategy, signature }, "confirmed");
194
+ let strategy;
195
+ if (options?.strategy) {
196
+ strategy = options.strategy;
197
+ } else {
198
+ const blockhash = await this.native.getLatestBlockhash();
199
+ strategy = options?.strategy ?? { type: "blockhash", ...blockhash };
200
+ }
201
+ const result = await this.native.confirmTransaction(base58.serialize(signature), {
202
+ ...options,
203
+ strategy
204
+ });
187
205
  const status = result.value;
188
206
  if (status.err !== null) {
189
207
  throw new Error(`transaction ${signature} failed (${JSON.stringify(status)})`);
190
208
  }
191
- return Promise.resolve(TransactionReceipt.from(signature));
209
+ return this.getTransactionReceipt(signature);
192
210
  }
193
211
  /**
194
212
  * Sends a signed transaction and waits for confirmation.
@@ -197,16 +215,16 @@ var SolanaProvider = class _SolanaProvider {
197
215
  * @param {object} [opts] - Optional parameters for sending and confirming the transaction.
198
216
  * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.
199
217
  */
200
- async sendAndConfirm(transaction, opts) {
201
- const pending = await this.sendTransaction(transaction, opts?.send);
202
- return this.confirmTransaction(pending, opts?.confirm);
218
+ async sendAndConfirm(transaction, options) {
219
+ const pending = await this.sendTransaction(transaction, options?.send);
220
+ return this.confirmTransaction(pending, options?.confirm);
203
221
  }
204
222
  };
205
223
  var SolanaSigner = class {
206
224
  /**
207
225
  * Creates an instance of SolanaSigner.
208
226
  *
209
- * @param {Keypair} keypair - The Solana keypair to use as the signer.
227
+ * @param {KeypairSigner} keypair - The Solana keypair to use as the signer.
210
228
  */
211
229
  constructor(keypair) {
212
230
  this.keypair = keypair;
@@ -214,13 +232,13 @@ var SolanaSigner = class {
214
232
  /**
215
233
  * Creates an instance of SolanaSigner from the given source.
216
234
  *
217
- * @param {Keypair | string} source - The source to create the signer from.
235
+ * @param {KeypairSigner | string} source - The source to create the signer from.
218
236
  * @param {string} [path] - The derivation path (optional).
219
237
  * @returns {SolanaSigner} The created SolanaSigner instance.
220
238
  * @throws {Error} If the parameters are invalid.
221
239
  */
222
240
  static from(source, path) {
223
- if (source instanceof Keypair) {
241
+ if (typeof source === "object") {
224
242
  return new this(source);
225
243
  } else if (typeof source === "string") {
226
244
  const keypair = getKeypair(source, path);
@@ -232,7 +250,7 @@ var SolanaSigner = class {
232
250
  /**
233
251
  * Gets the native Solana keypair instance.
234
252
  *
235
- * @returns {Keypair} The native Solana keypair instance.
253
+ * @returns {KeypairSigner} The native Solana keypair instance.
236
254
  */
237
255
  get native() {
238
256
  return this.keypair;
@@ -240,15 +258,18 @@ var SolanaSigner = class {
240
258
  /**
241
259
  * Connects the signer to a provider.
242
260
  *
243
- * @param {Provider} provider - The provider to connect to.
261
+ * @param {Provider | Connection} provider - The provider to connect to.
244
262
  * @returns {this} The connected signer.
245
263
  * @throws {Error} If the provider is not an instance of Connection.
246
264
  */
247
265
  connect(provider) {
248
- if (!(provider.native instanceof Connection)) {
249
- throw new Error("Only @solana/web3.js Connection is supported.");
266
+ if (provider instanceof Connection) {
267
+ this.provider = SolanaProvider.from(provider);
268
+ } else if (provider instanceof SolanaProvider) {
269
+ this.provider = provider;
270
+ } else {
271
+ throw new Error("Invalid parameters");
250
272
  }
251
- this.provider = provider.native;
252
273
  return this;
253
274
  }
254
275
  /**
@@ -257,7 +278,7 @@ var SolanaSigner = class {
257
278
  * @returns {Promise<string>} A promise that resolves to the address of the signer.
258
279
  */
259
280
  async getAddress() {
260
- return Promise.resolve(this.keypair.publicKey.toBase58());
281
+ return Promise.resolve(this.keypair.publicKey);
261
282
  }
262
283
  /**
263
284
  * Gets the address of the signer.
@@ -265,7 +286,7 @@ var SolanaSigner = class {
265
286
  * @returns {string} The address of the signer.
266
287
  */
267
288
  get address() {
268
- return this.publicKey.toBase58();
289
+ return this.publicKey;
269
290
  }
270
291
  /**
271
292
  * Gets the public key of the signer.
@@ -287,29 +308,23 @@ var SolanaSigner = class {
287
308
  * Sends a signed transaction and waits for confirmation.
288
309
  *
289
310
  * @param {SignedTransaction} transaction - The signed transaction to send.
290
- * @param {ConfirmOptions} [opts] - Optional parameters for sending and confirming the transaction.
311
+ * @param {TransactionBuilderSendAndConfirmOptions} [opts] - Optional parameters for sending and confirming the transaction.
291
312
  * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.
292
313
  */
293
314
  async sendAndConfirm(transaction, opts) {
294
315
  const provider = this.assertAndGetProvider();
295
- const _transaction = transaction.signed;
296
- const rawTransaction = toRawTransaction(_transaction);
297
- const response = await sendAndConfirmRawTransaction(provider, Buffer.from(rawTransaction), opts);
298
- return TransactionReceipt.from(response);
316
+ return provider.sendAndConfirm(transaction, opts);
299
317
  }
300
318
  /**
301
319
  * Sends a signed transaction.
302
320
  *
303
321
  * @param {SignedTransaction} transaction - The signed transaction to send.
304
- * @param {SendOptions} [sendOptions] - Optional parameters for sending the transaction.
322
+ * @param {RpcSendTransactionOptions} [opts] - Optional parameters for sending the transaction.
305
323
  * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.
306
324
  */
307
- async sendTransaction(transaction, sendOptions) {
325
+ async sendTransaction(transaction, opts) {
308
326
  const provider = this.assertAndGetProvider();
309
- const _transaction = transaction.signed;
310
- const rawTransaction = toRawTransaction(_transaction);
311
- const response = await provider.sendRawTransaction(rawTransaction, sendOptions);
312
- return TransactionPending.from(response);
327
+ return provider.sendTransaction(transaction, opts);
313
328
  }
314
329
  /**
315
330
  * Signs a transaction.
@@ -318,14 +333,10 @@ var SolanaSigner = class {
318
333
  * @param {Commitment | GetLatestBlockhashConfig} [opts] - Optional parameters for signing the transaction.
319
334
  * @returns {Promise<SignedTransaction>} A promise that resolves to the signed transaction.
320
335
  */
321
- async signTransaction(transaction, opts) {
336
+ async signTransaction(transaction) {
322
337
  const tx = transaction.request;
323
- if (isVersionedTransaction(tx)) {
324
- tx.sign([this.keypair]);
325
- } else {
326
- tx.partialSign(this.keypair);
327
- }
328
- return Promise.resolve(SignedTransaction.from(tx));
338
+ const signedTransaction = await this.keypair.signTransaction(tx);
339
+ return SignedTransaction.from(signedTransaction);
329
340
  }
330
341
  /**
331
342
  * Signs a buffer (e.g., a message hash) using the native Solana signer.
@@ -338,24 +349,6 @@ var SolanaSigner = class {
338
349
  await Promise.resolve();
339
350
  throw new Error("Method not implemented.");
340
351
  }
341
- /**
342
- * Partially signs a transaction.
343
- *
344
- * @param {Transaction | VersionedTransaction} tx - The transaction to partially sign.
345
- */
346
- partialSign(tx) {
347
- if (isVersionedTransaction(tx)) {
348
- tx.sign([this.keypair]);
349
- } else {
350
- tx.partialSign(this.keypair);
351
- }
352
- }
353
- /**
354
- * Asserts that the provider is connected and returns it.
355
- *
356
- * @returns {Connection} The connected provider.
357
- * @throws {Error} If the provider is not connected.
358
- */
359
352
  assertAndGetProvider() {
360
353
  if (!this.provider) {
361
354
  throw new Error("Signer was not connected to a provider, did you forgot to connect to provider?");
@@ -364,14 +357,12 @@ var SolanaSigner = class {
364
357
  }
365
358
  };
366
359
  function getKeypair(mnemonic, path = "m/44'/501'/0'/0'") {
360
+ const eddsa = createWeb3JsEddsa();
367
361
  const seed = bip39.mnemonicToSeedSync(mnemonic, "");
368
362
  const privateKey = derivePath(path, seed.toString("hex")).key;
369
- return Keypair.fromSeed(privateKey);
363
+ return createSignerFromKeypair({ eddsa }, eddsa.createKeypairFromSeed(privateKey));
370
364
  }
371
- var isVersionedTransaction = (tx) => {
372
- return "version" in tx;
373
- };
374
365
 
375
- export { SolanaProvider, SolanaSigner, isVersionedTransaction };
366
+ export { SolanaProvider, SolanaSigner };
376
367
  //# sourceMappingURL=index.mjs.map
377
368
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/providers/solana.ts","../src/signers/solana.ts"],"names":["Connection","TransactionReceipt","TransactionPending","SignedTransaction"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Transaction, VersionedTransaction } from '@solana/web3.js'\n\nimport { arrayify } from '@layerzerolabs/lz-utilities'\n\n/**\n * Converts a transaction to a raw transaction format.\n *\n * @param {Transaction | VersionedTransaction | string} transaction - The transaction to convert.\n * @returns {Uint8Array} The raw transaction as a Uint8Array.\n */\nexport function toRawTransaction(transaction: Transaction | VersionedTransaction | string): Uint8Array {\n const retval = typeof transaction === 'string' ? arrayify(transaction) : transaction.serialize()\n return retval\n}\n","import {\n BlockhashWithExpiryBlockHeight,\n Connection,\n GetVersionedTransactionConfig,\n ParsedTransactionWithMeta,\n PublicKey,\n SendOptions,\n Transaction,\n TransactionConfirmationStrategy,\n TransactionSignature,\n VersionedTransaction,\n} from '@solana/web3.js'\n\nimport {\n Block,\n BlockTag,\n BlockWithTransactions,\n Finality,\n Provider,\n SignedTransaction,\n TransactionPending,\n TransactionReceipt,\n TransactionResponse,\n} from '@layerzerolabs/lz-core'\n\nimport { toRawTransaction } from '../utils'\n\n/**\n * Represents a Solana blockchain provider.\n * Implements the Provider interface for interacting with Solana-compatible blockchains.\n */\nexport class SolanaProvider implements Provider {\n nativeProvider: Connection\n\n /**\n * Creates an instance of SolanaProvider.\n *\n * @param {string} url - The URL of the Solana node.\n */\n constructor(public url: string) {\n this.nativeProvider = new Connection(url, 'confirmed')\n }\n\n /**\n * Creates an instance of SolanaProvider from the given URL.\n *\n * @param {string} url - The URL of the Solana node.\n * @returns {SolanaProvider} The created SolanaProvider instance.\n * @throws {Error} If the URL parameter is invalid.\n */\n static from(url: string): SolanaProvider\n\n /**\n * Creates an instance of SolanaProvider from the given source.\n *\n * @param {string} source - The source to create the provider from.\n * @returns {SolanaProvider} The created SolanaProvider instance.\n * @throws {Error} If the source parameter is invalid.\n */\n static from(source: string): SolanaProvider {\n if (typeof source === 'string') {\n return new SolanaProvider(source)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n /**\n * Gets the native Solana provider instance.\n *\n * @returns {Connection} The native Solana provider instance.\n */\n get native(): Connection {\n return this.nativeProvider\n }\n\n /**\n * Gets the balance of the specified address.\n *\n * @param {string} address - The address to get the balance of.\n * @returns {Promise<string>} A promise that resolves to the balance of the address.\n */\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.getBalance(new PublicKey(address)).then((balance) => balance.toString())\n }\n\n /**\n * Gets the block specified by slot.\n *\n * @param {BlockTag} slot - The slot to specify the block.\n * @returns {Promise<Block>} A promise that resolves to the block.\n */\n async getBlock(slot: string | number): Promise<Block> {\n const response = await this.nativeProvider.getParsedBlock(parseInt(slot.toString()), {\n commitment: 'confirmed',\n })\n return Block.from(response)\n }\n\n /**\n * Gets the current block number.\n *\n * @returns {Promise<number>} A promise that resolves to the current block number.\n */\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.getBlockHeight({ commitment: 'confirmed' })\n }\n\n /**\n * Gets the current slot number for commitment.\n *\n * @param {Finality} [finality] - The commitment level (optional).\n * @returns {Promise<number>} A promise that resolves to the current slot number.\n */\n async getSlot(finality?: Finality): Promise<number> {\n return this.nativeProvider.getSlot(finality)\n }\n\n /**\n * Gets the UNIX timestamp for the block identified by slot.\n *\n * @param {BlockTag} slot - The slot to specify the block.\n * @returns {Promise<number>} A promise that resolves to the UNIX timestamp of the block.\n * @throws {Error} If the block timestamp is not available.\n */\n async getBlockTimestamp(slot: string | number): Promise<number> {\n const t = await this.nativeProvider.getBlockTime(parseInt(slot.toString()))\n if (t === null) {\n throw new Error('Block timestamp not available')\n }\n return t\n }\n\n /**\n * Gets information about a transaction.\n *\n * @param {string} txHash - The transaction hash is TransactionSignature in Solana\n * @returns {Promise<TransactionResponse>} A promise that resolves to the transaction response\n */\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response: ParsedTransactionWithMeta | null = await this.nativeProvider.getParsedTransaction(txHash, {\n commitment: 'confirmed',\n })\n return TransactionResponse.from(response)\n }\n\n /**\n * Gets the receipt of a transaction.\n *\n * @param {string} txHash - The transaction hash is TransactionSignature in Solana\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n * @throws {Error} If the transaction is not found.\n */\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response: ParsedTransactionWithMeta | null = await this.nativeProvider.getParsedTransaction(txHash, {\n commitment: 'confirmed',\n } satisfies GetVersionedTransactionConfig)\n if (response === null) {\n throw new Error('Transaction not found')\n }\n return TransactionReceipt.from(response)\n }\n\n /**\n * Gets the number of transactions sent from the specified address.\n *\n * @param {string | Promise<string>} _addressOrName - The address to get the number of transactions from.\n * @param {BlockTag | Promise<BlockTag>} [_blockTag] - The block tag to get the number of transactions from (optional).\n * @returns {Promise<number>} A promise that resolves to the number of transactions sent from the address.\n * @throws {Error} Method not implemented.\n */\n // eslint-disable-next-line @typescript-eslint/require-await\n async getTransactionCount(\n _addressOrName: string | Promise<string>,\n _blockTag?: BlockTag | Promise<BlockTag>\n ): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n /**\n * Gets the block with transactions specified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<BlockWithTransactions>} A promise that resolves to the block with transactions.\n * @throws {Error} If the block is not found.\n */\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n if (typeof blockTag === 'string') {\n blockTag = parseInt(blockTag)\n }\n const response = await this.nativeProvider.getBlock(blockTag, { transactionDetails: 'full' })\n if (response === null) {\n throw new Error('Block not found')\n }\n return BlockWithTransactions.from(response)\n }\n\n /**\n * Sends a signed transaction to the blockchain.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {SendOptions} [sendOptions] - Optional parameters for sending the transaction.\n * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.\n */\n async sendTransaction(transaction: SignedTransaction, sendOptions?: SendOptions): Promise<TransactionPending> {\n const _transaction = transaction.signed as Transaction | VersionedTransaction | string\n const rawTransaction = toRawTransaction(_transaction)\n\n const response = await this.nativeProvider.sendRawTransaction(rawTransaction, sendOptions)\n return TransactionPending.from(response)\n }\n\n /**\n * Confirms a pending transaction.\n *\n * @param {TransactionPending} pending - The pending transaction to confirm.\n * @param {TransactionConfirmationStrategy} [opts] - Optional parameters for the confirmation.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n * @throws {Error} If the transaction fails.\n */\n async confirmTransaction(\n pending: TransactionPending,\n opts?: TransactionConfirmationStrategy\n ): Promise<TransactionReceipt> {\n const strategy =\n opts ??\n (await (async (): Promise<BlockhashWithExpiryBlockHeight> => {\n const block = await this.nativeProvider.getLatestBlockhash('confirmed')\n return {\n blockhash: block.blockhash,\n lastValidBlockHeight: block.lastValidBlockHeight,\n }\n })())\n\n const signature = pending.pending as TransactionSignature\n const result = await this.nativeProvider.confirmTransaction({ ...strategy, signature }, 'confirmed')\n const status = result.value\n if (status.err !== null) {\n throw new Error(`transaction ${signature} failed (${JSON.stringify(status)})`)\n }\n return Promise.resolve(TransactionReceipt.from(signature))\n }\n\n /**\n * Sends a signed transaction and waits for confirmation.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {object} [opts] - Optional parameters for sending and confirming the transaction.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async sendAndConfirm(\n transaction: SignedTransaction,\n opts?: {\n confirm?: TransactionConfirmationStrategy\n send?: SendOptions\n }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction, opts?.send)\n return this.confirmTransaction(pending, opts?.confirm)\n }\n}\n","import {\n Commitment,\n ConfirmOptions,\n Connection,\n GetLatestBlockhashConfig,\n Keypair,\n PublicKey,\n SendOptions,\n Transaction,\n VersionedTransaction,\n sendAndConfirmRawTransaction,\n} from '@solana/web3.js'\nimport * as bip39 from 'bip39'\nimport { derivePath } from 'ed25519-hd-key'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\n\nimport { toRawTransaction } from '../utils'\n\n/**\n * Represents a Solana blockchain signer.\n * Implements the Signer interface for interacting with Solana-compatible blockchains.\n */\nexport class SolanaSigner implements Signer {\n private readonly keypair: Keypair\n private provider?: Connection\n\n /**\n * Creates an instance of SolanaSigner.\n *\n * @param {Keypair} keypair - The Solana keypair to use as the signer.\n */\n private constructor(keypair: Keypair) {\n this.keypair = keypair\n }\n\n /**\n * Creates an instance of SolanaSigner from a Keypair.\n *\n * @param {Keypair} source - The Solana keypair to create the signer from.\n * @returns {SolanaSigner} The created SolanaSigner instance.\n */\n static from(source: Keypair): SolanaSigner\n /**\n * Creates an instance of SolanaSigner from a mnemonic and derivation path.\n *\n * @param {string} mnemonic - The mnemonic to create the signer from.\n * @param {string} path - The derivation path (e.g., m/44'/501'/0'/0').\n * @returns {SolanaSigner} The created SolanaSigner instance.\n */\n static from(mnemonic: string, path: string): SolanaSigner\n\n /**\n * Creates an instance of SolanaSigner from the given source.\n *\n * @param {Keypair | string} source - The source to create the signer from.\n * @param {string} [path] - The derivation path (optional).\n * @returns {SolanaSigner} The created SolanaSigner instance.\n * @throws {Error} If the parameters are invalid.\n */\n static from(source: Keypair | string, path?: string): SolanaSigner {\n if (source instanceof Keypair) {\n return new this(source)\n } else if (typeof source === 'string') {\n const keypair = getKeypair(source, path)\n return new this(keypair)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n /**\n * Gets the native Solana keypair instance.\n *\n * @returns {Keypair} The native Solana keypair instance.\n */\n get native(): unknown {\n return this.keypair\n }\n\n /**\n * Connects the signer to a provider.\n *\n * @param {Provider} provider - The provider to connect to.\n * @returns {this} The connected signer.\n * @throws {Error} If the provider is not an instance of Connection.\n */\n connect(provider: Provider): this {\n if (!(provider.native instanceof Connection)) {\n throw new Error('Only @solana/web3.js Connection is supported.')\n }\n this.provider = provider.native\n return this\n }\n\n /**\n * Gets the address of the signer.\n *\n * @returns {Promise<string>} A promise that resolves to the address of the signer.\n */\n async getAddress(): Promise<string> {\n return Promise.resolve(this.keypair.publicKey.toBase58())\n }\n\n /**\n * Gets the address of the signer.\n *\n * @returns {string} The address of the signer.\n */\n get address(): string {\n return this.publicKey.toBase58()\n }\n\n /**\n * Gets the public key of the signer.\n *\n * @returns {PublicKey} The public key of the signer.\n */\n get publicKey(): PublicKey {\n return this.keypair.publicKey\n }\n\n /**\n * Gets the secret key of the signer.\n *\n * @returns {Uint8Array} The secret key of the signer.\n */\n get secretKey(): Uint8Array {\n return this.keypair.secretKey\n }\n\n /**\n * Sends a signed transaction and waits for confirmation.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {ConfirmOptions} [opts] - Optional parameters for sending and confirming the transaction.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async sendAndConfirm(transaction: SignedTransaction, opts?: ConfirmOptions): Promise<TransactionReceipt> {\n const provider = this.assertAndGetProvider()\n const _transaction = transaction.signed as Transaction | VersionedTransaction | string\n const rawTransaction = toRawTransaction(_transaction)\n const response = await sendAndConfirmRawTransaction(provider, Buffer.from(rawTransaction), opts)\n return TransactionReceipt.from(response)\n }\n\n /**\n * Sends a signed transaction.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {SendOptions} [sendOptions] - Optional parameters for sending the transaction.\n * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.\n */\n async sendTransaction(transaction: SignedTransaction, sendOptions?: SendOptions): Promise<TransactionPending> {\n const provider = this.assertAndGetProvider()\n const _transaction = transaction.signed as Transaction | VersionedTransaction | string\n const rawTransaction = toRawTransaction(_transaction)\n const response = await provider.sendRawTransaction(rawTransaction, sendOptions)\n return TransactionPending.from(response)\n }\n\n /**\n * Signs a transaction.\n *\n * @param {TransactionRequest} transaction - The transaction request to sign.\n * @param {Commitment | GetLatestBlockhashConfig} [opts] - Optional parameters for signing the transaction.\n * @returns {Promise<SignedTransaction>} A promise that resolves to the signed transaction.\n */\n async signTransaction(\n transaction: TransactionRequest,\n opts?: Commitment | GetLatestBlockhashConfig\n ): Promise<SignedTransaction> {\n const tx = transaction.request as Transaction | VersionedTransaction\n if (isVersionedTransaction(tx)) {\n tx.sign([this.keypair])\n } else {\n tx.partialSign(this.keypair)\n }\n\n return Promise.resolve(SignedTransaction.from(tx))\n }\n\n /**\n * Signs a buffer (e.g., a message hash) using the native Solana signer.\n *\n * @param {Uint8Array} _buffer - The buffer to sign.\n * @returns {Promise<Uint8Array>} A promise that resolves to the signed buffer as a Uint8Array.\n * @throws {Error} Method not implemented.\n */\n async signBuffer(_buffer: Uint8Array): Promise<Uint8Array> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n /**\n * Partially signs a transaction.\n *\n * @param {Transaction | VersionedTransaction} tx - The transaction to partially sign.\n */\n partialSign(tx: Transaction | VersionedTransaction): void {\n if (isVersionedTransaction(tx)) {\n tx.sign([this.keypair])\n } else {\n tx.partialSign(this.keypair)\n }\n }\n\n /**\n * Asserts that the provider is connected and returns it.\n *\n * @returns {Connection} The connected provider.\n * @throws {Error} If the provider is not connected.\n */\n private assertAndGetProvider(): Connection {\n if (!this.provider) {\n throw new Error('Signer was not connected to a provider, did you forgot to connect to provider?')\n }\n return this.provider\n }\n}\n\n/**\n * Generates a Keypair from a mnemonic and derivation path.\n *\n * @param {string} mnemonic - The mnemonic to generate the keypair from.\n * @param {string} [path=\"m/44'/501'/0'/0'\"] - The derivation path (optional).\n * @returns {Keypair} The generated Keypair.\n */\nfunction getKeypair(mnemonic: string, path = \"m/44'/501'/0'/0'\"): Keypair {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const privateKey = derivePath(path, seed.toString('hex')).key\n return Keypair.fromSeed(privateKey)\n}\n\n/**\n * Check if a transaction object is a VersionedTransaction or not\n * This function is not exported from @coral-xyz/anchor currently.\n *\n * @param {Transaction | VersionedTransaction} tx - The transaction to check.\n * @returns {boolean} True if the transaction is a VersionedTransaction, false otherwise.\n */\nexport const isVersionedTransaction = (tx: Transaction | VersionedTransaction): tx is VersionedTransaction => {\n return 'version' in tx\n}\n"]}
1
+ {"version":3,"sources":["../src/providers/solana.ts","../src/signers/solana.ts"],"names":["Connection","SignedTransaction"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n RpcConfirmTransactionOptions,\n RpcConfirmTransactionResult,\n RpcConfirmTransactionStrategy,\n RpcInterface,\n RpcSendTransactionOptions,\n Transaction,\n TransactionBuilderSendAndConfirmOptions,\n TransactionWithMeta,\n createNullRpc,\n} from '@metaplex-foundation/umi'\nimport { base58 } from '@metaplex-foundation/umi/serializers'\nimport { createDefaultProgramRepository } from '@metaplex-foundation/umi-program-repository'\nimport { createWeb3JsRpc } from '@metaplex-foundation/umi-rpc-web3js'\nimport { createWeb3JsTransactionFactory } from '@metaplex-foundation/umi-transaction-factory-web3js'\nimport { Connection, PublicKey } from '@solana/web3.js'\n\nimport {\n Block,\n BlockTag,\n BlockWithTransactions,\n Finality,\n Provider,\n SignedTransaction,\n TransactionPending,\n TransactionReceipt,\n TransactionResponse,\n} from '@layerzerolabs/lz-core'\n\nexport class SolanaProvider implements Provider {\n public readonly url: string\n\n public readonly nativeProvider: RpcInterface & {\n connection: Connection\n }\n\n /**\n * Creates an instance of SolanaProvider.\n *\n * @param {string | Connection} url - The URL of the Solana node.\n */\n constructor(url: string | Connection) {\n if (url instanceof Connection) {\n const umi = {\n transactions: createWeb3JsTransactionFactory(),\n programs: createDefaultProgramRepository({ rpc: createNullRpc() }),\n }\n this.nativeProvider = createWeb3JsRpc(umi, url)\n this.url = url.rpcEndpoint\n } else {\n const connection = new Connection(url, 'confirmed')\n const umi = {\n transactions: createWeb3JsTransactionFactory(),\n programs: createDefaultProgramRepository({ rpc: createNullRpc() }),\n }\n this.nativeProvider = createWeb3JsRpc(umi, connection)\n this.url = url\n }\n }\n\n /**\n * Creates an instance of SolanaProvider from the given URL or Connection.\n *\n * @param {string | Connection} source - The URL of the Solana node.\n * @returns {SolanaProvider} The created SolanaProvider instance.\n * @throws {Error} If the URL parameter is invalid.\n */\n static from(source: string | Connection): SolanaProvider {\n if (typeof source === 'string') {\n return new SolanaProvider(source)\n } else if (source instanceof Connection) {\n return new SolanaProvider(source)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): RpcInterface & { connection: Connection } {\n return this.nativeProvider\n }\n\n /**\n * Gets the balance of the specified address.\n *\n * @param {string} address - The address to get the balance of.\n * @returns {Promise<string>} A promise that resolves to the balance of the address.\n */\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.connection.getBalance(new PublicKey(address)).then((balance) => balance.toString())\n }\n\n /**\n * Gets the block specified by slot.\n *\n * @param {BlockTag} slot - The slot to specify the block.\n * @returns {Promise<Block>} A promise that resolves to the block.\n */\n async getBlock(slot: string | number): Promise<Block> {\n const response = await this.nativeProvider.connection.getParsedBlock(parseInt(slot.toString()), {\n commitment: 'confirmed',\n })\n return Block.from(response)\n }\n\n /**\n * Gets the current block number.\n *\n * @returns {Promise<number>} A promise that resolves to the current block number.\n */\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.connection.getBlockHeight({ commitment: 'confirmed' })\n }\n\n /**\n * Gets the current slot number for commitment.\n *\n * @param {Finality} [finality] - The commitment level (optional).\n * @returns {Promise<number>} A promise that resolves to the current slot number.\n */\n async getSlot(finality?: Finality): Promise<number> {\n return this.nativeProvider.getSlot({ commitment: finality })\n }\n\n /**\n * Gets the UNIX timestamp for the block identified by slot.\n *\n * @param {BlockTag} slot - The slot to specify the block.\n * @returns {Promise<number>} A promise that resolves to the UNIX timestamp of the block.\n * @throws {Error} If the block timestamp is not available.\n */\n async getBlockTimestamp(slot: string | number): Promise<number> {\n const t = await this.nativeProvider.getBlockTime(parseInt(slot.toString()))\n if (t === null) {\n throw new Error('Block timestamp not available')\n }\n return Number(t.toString())\n }\n\n /**\n * Gets information about a transaction.\n *\n * @param {string} txHash - The transaction hash is TransactionSignature in Solana\n * @returns {Promise<TransactionResponse>} A promise that resolves to the transaction response\n */\n async getTransaction(txHash: string | Uint8Array): Promise<TransactionResponse> {\n const signature: Uint8Array = typeof txHash === 'string' ? base58.serialize(txHash) : txHash\n const response: TransactionWithMeta | null = await this.nativeProvider.getTransaction(signature, {\n commitment: 'confirmed',\n })\n if (response === null) {\n throw new Error('Transaction not found')\n }\n return TransactionResponse.from(response)\n }\n\n /**\n * Gets the receipt of a transaction.\n *\n * @param {string | Uint8Array} txHash - The transaction hash is TransactionSignature in Solana\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n * @throws {Error} If the transaction is not found.\n */\n async getTransactionReceipt(txHash: string | Uint8Array): Promise<TransactionReceipt> {\n const signature: Uint8Array = typeof txHash === 'string' ? base58.serialize(txHash) : txHash\n const response: TransactionWithMeta | null = await this.nativeProvider.getTransaction(signature, {\n commitment: 'confirmed',\n })\n if (response === null) {\n throw new Error('Transaction not found')\n }\n return TransactionReceipt.from(response)\n }\n\n /**\n * Gets the number of transactions sent from the specified address.\n *\n * @param {string | Promise<string>} _addressOrName - The address to get the number of transactions from.\n * @param {BlockTag | Promise<BlockTag>} [_blockTag] - The block tag to get the number of transactions from (optional).\n * @returns {Promise<number>} A promise that resolves to the number of transactions sent from the address.\n * @throws {Error} Method not implemented.\n */\n // eslint-disable-next-line @typescript-eslint/require-await\n async getTransactionCount(\n _addressOrName: string | Promise<string>,\n _blockTag?: BlockTag | Promise<BlockTag>\n ): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n /**\n * Gets the block with transactions specified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<BlockWithTransactions>} A promise that resolves to the block with transactions.\n * @throws {Error} If the block is not found.\n */\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n if (typeof blockTag === 'string') {\n blockTag = parseInt(blockTag)\n }\n const response = await this.nativeProvider.connection.getBlock(blockTag, { transactionDetails: 'full' })\n if (response === null) {\n throw new Error('Block not found')\n }\n return BlockWithTransactions.from(response)\n }\n\n /**\n * Sends a signed transaction to the blockchain.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {RpcSendTransactionOptions} [options] - Optional parameters for sending the transaction.\n * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.\n */\n async sendTransaction(\n transaction: SignedTransaction,\n options?: RpcSendTransactionOptions\n ): Promise<TransactionPending> {\n const signedTransaction = transaction.signed as Transaction\n const signature = await this.nativeProvider.sendTransaction(signedTransaction, options)\n const txHash: string = base58.deserialize(signature)[0]\n return TransactionPending.from(txHash)\n }\n\n /**\n * Confirms a pending transaction.\n *\n * @param {TransactionPending} pending - The pending transaction to confirm.\n * @param {TransactionConfirmationStrategy} [opts] - Optional parameters for the confirmation.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n * @throws {Error} If the transaction fails.\n */\n async confirmTransaction(\n pending: TransactionPending,\n options?: Partial<RpcConfirmTransactionOptions>\n ): Promise<TransactionReceipt> {\n const signature = pending.pending as string\n let strategy: RpcConfirmTransactionStrategy\n if (options?.strategy) {\n // eslint-disable-next-line @typescript-eslint/prefer-destructuring\n strategy = options.strategy\n } else {\n const blockhash = await this.native.getLatestBlockhash()\n strategy = options?.strategy ?? { type: 'blockhash', ...blockhash }\n }\n const result: RpcConfirmTransactionResult = await this.native.confirmTransaction(base58.serialize(signature), {\n ...options,\n strategy,\n })\n const status = result.value\n if (status.err !== null) {\n throw new Error(`transaction ${signature} failed (${JSON.stringify(status)})`)\n }\n return this.getTransactionReceipt(signature)\n }\n\n /**\n * Sends a signed transaction and waits for confirmation.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {object} [opts] - Optional parameters for sending and confirming the transaction.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async sendAndConfirm(\n transaction: SignedTransaction,\n options?: TransactionBuilderSendAndConfirmOptions\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction, options?.send)\n return this.confirmTransaction(pending, options?.confirm)\n }\n}\n","import {\n KeypairSigner,\n PublicKey,\n RpcSendTransactionOptions,\n Transaction,\n TransactionBuilderSendAndConfirmOptions,\n createSignerFromKeypair,\n} from '@metaplex-foundation/umi'\nimport { createWeb3JsEddsa } from '@metaplex-foundation/umi-eddsa-web3js'\nimport { Connection } from '@solana/web3.js'\nimport * as bip39 from 'bip39'\nimport { derivePath } from 'ed25519-hd-key'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\n\nimport { SolanaProvider } from '../providers'\n\n/**\n * Represents a Solana blockchain signer.\n * Implements the Signer interface for interacting with Solana-compatible blockchains.\n */\nexport class SolanaSigner implements Signer {\n private readonly keypair: KeypairSigner\n private provider?: SolanaProvider\n\n /**\n * Creates an instance of SolanaSigner.\n *\n * @param {KeypairSigner} keypair - The Solana keypair to use as the signer.\n */\n private constructor(keypair: KeypairSigner) {\n this.keypair = keypair\n }\n\n /**\n * Creates an instance of SolanaSigner from a KeypairSigner.\n *\n * @param {KeypairSigner} source - The Solana keypair to create the signer from.\n * @returns {SolanaSigner} The created SolanaSigner instance.\n */\n static from(source: KeypairSigner): SolanaSigner\n\n /**\n * Creates an instance of SolanaSigner from a mnemonic and derivation path.\n *\n * @param {string} mnemonic - The mnemonic to create the signer from.\n * @param {string} path - The derivation path (e.g., m/44'/501'/0'/0').\n * @returns {SolanaSigner} The created SolanaSigner instance.\n */\n static from(mnemonic: string, path: string): SolanaSigner\n\n /**\n * Creates an instance of SolanaSigner from the given source.\n *\n * @param {KeypairSigner | string} source - The source to create the signer from.\n * @param {string} [path] - The derivation path (optional).\n * @returns {SolanaSigner} The created SolanaSigner instance.\n * @throws {Error} If the parameters are invalid.\n */\n static from(source: KeypairSigner | string, path?: string): SolanaSigner {\n if (typeof source === 'object') {\n return new this(source)\n } else if (typeof source === 'string') {\n const keypair = getKeypair(source, path)\n return new this(keypair)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n /**\n * Gets the native Solana keypair instance.\n *\n * @returns {KeypairSigner} The native Solana keypair instance.\n */\n get native(): KeypairSigner {\n return this.keypair\n }\n\n /**\n * Connects the signer to a provider.\n *\n * @param {Provider | Connection} provider - The provider to connect to.\n * @returns {this} The connected signer.\n * @throws {Error} If the provider is not an instance of Connection.\n */\n connect(provider: Connection | Provider): this {\n if (provider instanceof Connection) {\n this.provider = SolanaProvider.from(provider)\n } else if (provider instanceof SolanaProvider) {\n this.provider = provider\n } else {\n throw new Error('Invalid parameters')\n }\n return this\n }\n\n /**\n * Gets the address of the signer.\n *\n * @returns {Promise<string>} A promise that resolves to the address of the signer.\n */\n async getAddress(): Promise<string> {\n return Promise.resolve(this.keypair.publicKey)\n }\n\n /**\n * Gets the address of the signer.\n *\n * @returns {string} The address of the signer.\n */\n get address(): string {\n return this.publicKey\n }\n\n /**\n * Gets the public key of the signer.\n *\n * @returns {PublicKey} The public key of the signer.\n */\n get publicKey(): PublicKey {\n return this.keypair.publicKey\n }\n\n /**\n * Gets the secret key of the signer.\n *\n * @returns {Uint8Array} The secret key of the signer.\n */\n get secretKey(): Uint8Array {\n return this.keypair.secretKey\n }\n\n /**\n * Sends a signed transaction and waits for confirmation.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {TransactionBuilderSendAndConfirmOptions} [opts] - Optional parameters for sending and confirming the transaction.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async sendAndConfirm(\n transaction: SignedTransaction,\n opts?: TransactionBuilderSendAndConfirmOptions\n ): Promise<TransactionReceipt> {\n const provider = this.assertAndGetProvider()\n return provider.sendAndConfirm(transaction, opts)\n }\n\n /**\n * Sends a signed transaction.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {RpcSendTransactionOptions} [opts] - Optional parameters for sending the transaction.\n * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.\n */\n async sendTransaction(\n transaction: SignedTransaction,\n opts?: RpcSendTransactionOptions\n ): Promise<TransactionPending> {\n const provider = this.assertAndGetProvider()\n return provider.sendTransaction(transaction, opts)\n }\n\n /**\n * Signs a transaction.\n *\n * @param {TransactionRequest} transaction - The transaction request to sign.\n * @param {Commitment | GetLatestBlockhashConfig} [opts] - Optional parameters for signing the transaction.\n * @returns {Promise<SignedTransaction>} A promise that resolves to the signed transaction.\n */\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n const tx = transaction.request as Transaction\n const signedTransaction: Transaction = await this.keypair.signTransaction(tx)\n return SignedTransaction.from(signedTransaction)\n }\n\n /**\n * Signs a buffer (e.g., a message hash) using the native Solana signer.\n *\n * @param {Uint8Array} _buffer - The buffer to sign.\n * @returns {Promise<Uint8Array>} A promise that resolves to the signed buffer as a Uint8Array.\n * @throws {Error} Method not implemented.\n */\n async signBuffer(_buffer: Uint8Array): Promise<Uint8Array> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n private assertAndGetProvider(): SolanaProvider {\n if (!this.provider) {\n throw new Error('Signer was not connected to a provider, did you forgot to connect to provider?')\n }\n return this.provider\n }\n}\n\n/**\n * Generates a Keypair from a mnemonic and derivation path.\n *\n * @param {string} mnemonic - The mnemonic to generate the keypair from.\n * @param {string} [path=\"m/44'/501'/0'/0'\"] - The derivation path (optional).\n * @returns {KeypairSigner} The generated Keypair.\n */\nfunction getKeypair(mnemonic: string, path = \"m/44'/501'/0'/0'\"): KeypairSigner {\n const eddsa = createWeb3JsEddsa()\n\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const privateKey = derivePath(path, seed.toString('hex')).key\n return createSignerFromKeypair({ eddsa }, eddsa.createKeypairFromSeed(privateKey))\n}\n\n// /**\n// * Check if a transaction object is a VersionedTransaction or not\n// * This function is not exported from @coral-xyz/anchor currently.\n// *\n// * @param {Transaction | VersionedTransaction} tx - The transaction to check.\n// * @returns {boolean} True if the transaction is a VersionedTransaction, false otherwise.\n// */\n// export const isVersionedTransaction = (tx: Transaction | VersionedTransaction): tx is VersionedTransaction => {\n// return 'version' in tx\n// }\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/lz-corekit-solana",
3
- "version": "3.0.53",
3
+ "version": "3.0.56",
4
4
  "description": "LayerZero Core Library",
5
5
  "license": "BUSL-1.1",
6
6
  "exports": {
@@ -23,8 +23,15 @@
23
23
  "clean-prebuild": "rimraf dist"
24
24
  },
25
25
  "dependencies": {
26
- "@layerzerolabs/lz-core": "^3.0.53",
27
- "@layerzerolabs/lz-utilities": "^3.0.53",
26
+ "@layerzerolabs/lz-core": "^3.0.56",
27
+ "@layerzerolabs/lz-utilities": "^3.0.56",
28
+ "@metaplex-foundation/umi": "^0.9.2",
29
+ "@metaplex-foundation/umi-eddsa-web3js": "^0.9.2",
30
+ "@metaplex-foundation/umi-program-repository": "^0.9.2",
31
+ "@metaplex-foundation/umi-rpc-web3js": "^0.9.2",
32
+ "@metaplex-foundation/umi-transaction-factory-web3js": "^0.9.2",
33
+ "@noble/hashes": "^1.3.2",
34
+ "@noble/secp256k1": "^1.7.1",
28
35
  "@solana/web3.js": "1.95.8",
29
36
  "bip39": "^3.1.0",
30
37
  "ed25519-hd-key": "^1.3.0",
@@ -32,8 +39,8 @@
32
39
  },
33
40
  "devDependencies": {
34
41
  "@jest/globals": "^29.7.0",
35
- "@layerzerolabs/tsup-config-next": "^3.0.53",
36
- "@layerzerolabs/typescript-config-next": "^3.0.53",
42
+ "@layerzerolabs/tsup-config-next": "^3.0.56",
43
+ "@layerzerolabs/typescript-config-next": "^3.0.56",
37
44
  "@types/jest": "^29.5.10",
38
45
  "jest": "^29.7.0",
39
46
  "jest-extended": "^4.0.2",