@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/CHANGELOG.md +29 -0
- package/dist/index.cjs +87 -97
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +35 -62
- package/dist/index.d.ts +35 -62
- package/dist/index.mjs +89 -98
- package/dist/index.mjs.map +1 -1
- package/package.json +12 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# @layerzerolabs/lz-corekit-solana
|
|
2
2
|
|
|
3
|
+
## 3.0.56
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 606996e: Refactor `lz-utilities` to make it easy to integrate into Vite/Next.js apps.
|
|
8
|
+
- Updated dependencies [606996e]
|
|
9
|
+
- @layerzerolabs/lz-core@3.0.56
|
|
10
|
+
- @layerzerolabs/lz-utilities@3.0.56
|
|
11
|
+
|
|
12
|
+
## 3.0.55
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- edaa731: Publish new TON packages with updated testnet deployments
|
|
17
|
+
- Updated dependencies [edaa731]
|
|
18
|
+
- @layerzerolabs/lz-core@3.0.55
|
|
19
|
+
- @layerzerolabs/lz-utilities@3.0.55
|
|
20
|
+
|
|
21
|
+
## 3.0.54
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- f000d0e: cronosevm dvn depoy
|
|
26
|
+
- 6192c6d: version bump
|
|
27
|
+
- Updated dependencies [f000d0e]
|
|
28
|
+
- Updated dependencies [6192c6d]
|
|
29
|
+
- @layerzerolabs/lz-core@3.0.54
|
|
30
|
+
- @layerzerolabs/lz-utilities@3.0.54
|
|
31
|
+
|
|
3
32
|
## 3.0.53
|
|
4
33
|
|
|
5
34
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var umi = require('@metaplex-foundation/umi');
|
|
4
|
+
var serializers = require('@metaplex-foundation/umi/serializers');
|
|
5
|
+
var umiProgramRepository = require('@metaplex-foundation/umi-program-repository');
|
|
6
|
+
var umiRpcWeb3js = require('@metaplex-foundation/umi-rpc-web3js');
|
|
7
|
+
var umiTransactionFactoryWeb3js = require('@metaplex-foundation/umi-transaction-factory-web3js');
|
|
3
8
|
var web3_js = require('@solana/web3.js');
|
|
4
9
|
var lzCore = require('@layerzerolabs/lz-core');
|
|
5
|
-
var
|
|
10
|
+
var umiEddsaWeb3js = require('@metaplex-foundation/umi-eddsa-web3js');
|
|
6
11
|
var bip39 = require('bip39');
|
|
7
12
|
var ed25519HdKey = require('ed25519-hd-key');
|
|
8
13
|
|
|
@@ -26,42 +31,47 @@ function _interopNamespace(e) {
|
|
|
26
31
|
|
|
27
32
|
var bip39__namespace = /*#__PURE__*/_interopNamespace(bip39);
|
|
28
33
|
|
|
29
|
-
// src/providers/solana.ts
|
|
30
|
-
function toRawTransaction(transaction) {
|
|
31
|
-
const retval = typeof transaction === "string" ? lzUtilities.arrayify(transaction) : transaction.serialize();
|
|
32
|
-
return retval;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
34
|
// src/providers/solana.ts
|
|
36
35
|
var SolanaProvider = class _SolanaProvider {
|
|
37
36
|
/**
|
|
38
37
|
* Creates an instance of SolanaProvider.
|
|
39
38
|
*
|
|
40
|
-
* @param {string} url - The URL of the Solana node.
|
|
39
|
+
* @param {string | Connection} url - The URL of the Solana node.
|
|
41
40
|
*/
|
|
42
41
|
constructor(url) {
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
if (url instanceof web3_js.Connection) {
|
|
43
|
+
const umi$1 = {
|
|
44
|
+
transactions: umiTransactionFactoryWeb3js.createWeb3JsTransactionFactory(),
|
|
45
|
+
programs: umiProgramRepository.createDefaultProgramRepository({ rpc: umi.createNullRpc() })
|
|
46
|
+
};
|
|
47
|
+
this.nativeProvider = umiRpcWeb3js.createWeb3JsRpc(umi$1, url);
|
|
48
|
+
this.url = url.rpcEndpoint;
|
|
49
|
+
} else {
|
|
50
|
+
const connection = new web3_js.Connection(url, "confirmed");
|
|
51
|
+
const umi$1 = {
|
|
52
|
+
transactions: umiTransactionFactoryWeb3js.createWeb3JsTransactionFactory(),
|
|
53
|
+
programs: umiProgramRepository.createDefaultProgramRepository({ rpc: umi.createNullRpc() })
|
|
54
|
+
};
|
|
55
|
+
this.nativeProvider = umiRpcWeb3js.createWeb3JsRpc(umi$1, connection);
|
|
56
|
+
this.url = url;
|
|
57
|
+
}
|
|
45
58
|
}
|
|
46
59
|
/**
|
|
47
|
-
* Creates an instance of SolanaProvider from the given
|
|
60
|
+
* Creates an instance of SolanaProvider from the given URL or Connection.
|
|
48
61
|
*
|
|
49
|
-
* @param {string} source - The
|
|
62
|
+
* @param {string | Connection} source - The URL of the Solana node.
|
|
50
63
|
* @returns {SolanaProvider} The created SolanaProvider instance.
|
|
51
|
-
* @throws {Error} If the
|
|
64
|
+
* @throws {Error} If the URL parameter is invalid.
|
|
52
65
|
*/
|
|
53
66
|
static from(source) {
|
|
54
67
|
if (typeof source === "string") {
|
|
55
68
|
return new _SolanaProvider(source);
|
|
69
|
+
} else if (source instanceof web3_js.Connection) {
|
|
70
|
+
return new _SolanaProvider(source);
|
|
56
71
|
} else {
|
|
57
72
|
throw new Error("Invalid parameters");
|
|
58
73
|
}
|
|
59
74
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Gets the native Solana provider instance.
|
|
62
|
-
*
|
|
63
|
-
* @returns {Connection} The native Solana provider instance.
|
|
64
|
-
*/
|
|
65
75
|
get native() {
|
|
66
76
|
return this.nativeProvider;
|
|
67
77
|
}
|
|
@@ -72,7 +82,7 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
72
82
|
* @returns {Promise<string>} A promise that resolves to the balance of the address.
|
|
73
83
|
*/
|
|
74
84
|
async getBalance(address) {
|
|
75
|
-
return this.nativeProvider.getBalance(new web3_js.PublicKey(address)).then((balance) => balance.toString());
|
|
85
|
+
return this.nativeProvider.connection.getBalance(new web3_js.PublicKey(address)).then((balance) => balance.toString());
|
|
76
86
|
}
|
|
77
87
|
/**
|
|
78
88
|
* Gets the block specified by slot.
|
|
@@ -81,7 +91,7 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
81
91
|
* @returns {Promise<Block>} A promise that resolves to the block.
|
|
82
92
|
*/
|
|
83
93
|
async getBlock(slot) {
|
|
84
|
-
const response = await this.nativeProvider.getParsedBlock(parseInt(slot.toString()), {
|
|
94
|
+
const response = await this.nativeProvider.connection.getParsedBlock(parseInt(slot.toString()), {
|
|
85
95
|
commitment: "confirmed"
|
|
86
96
|
});
|
|
87
97
|
return lzCore.Block.from(response);
|
|
@@ -92,7 +102,7 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
92
102
|
* @returns {Promise<number>} A promise that resolves to the current block number.
|
|
93
103
|
*/
|
|
94
104
|
async getBlockNumber() {
|
|
95
|
-
return this.nativeProvider.getBlockHeight({ commitment: "confirmed" });
|
|
105
|
+
return this.nativeProvider.connection.getBlockHeight({ commitment: "confirmed" });
|
|
96
106
|
}
|
|
97
107
|
/**
|
|
98
108
|
* Gets the current slot number for commitment.
|
|
@@ -101,7 +111,7 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
101
111
|
* @returns {Promise<number>} A promise that resolves to the current slot number.
|
|
102
112
|
*/
|
|
103
113
|
async getSlot(finality) {
|
|
104
|
-
return this.nativeProvider.getSlot(finality);
|
|
114
|
+
return this.nativeProvider.getSlot({ commitment: finality });
|
|
105
115
|
}
|
|
106
116
|
/**
|
|
107
117
|
* Gets the UNIX timestamp for the block identified by slot.
|
|
@@ -115,7 +125,7 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
115
125
|
if (t === null) {
|
|
116
126
|
throw new Error("Block timestamp not available");
|
|
117
127
|
}
|
|
118
|
-
return t;
|
|
128
|
+
return Number(t.toString());
|
|
119
129
|
}
|
|
120
130
|
/**
|
|
121
131
|
* Gets information about a transaction.
|
|
@@ -124,20 +134,25 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
124
134
|
* @returns {Promise<TransactionResponse>} A promise that resolves to the transaction response
|
|
125
135
|
*/
|
|
126
136
|
async getTransaction(txHash) {
|
|
127
|
-
const
|
|
137
|
+
const signature = typeof txHash === "string" ? serializers.base58.serialize(txHash) : txHash;
|
|
138
|
+
const response = await this.nativeProvider.getTransaction(signature, {
|
|
128
139
|
commitment: "confirmed"
|
|
129
140
|
});
|
|
141
|
+
if (response === null) {
|
|
142
|
+
throw new Error("Transaction not found");
|
|
143
|
+
}
|
|
130
144
|
return lzCore.TransactionResponse.from(response);
|
|
131
145
|
}
|
|
132
146
|
/**
|
|
133
147
|
* Gets the receipt of a transaction.
|
|
134
148
|
*
|
|
135
|
-
* @param {string} txHash - The transaction hash is TransactionSignature in Solana
|
|
149
|
+
* @param {string | Uint8Array} txHash - The transaction hash is TransactionSignature in Solana
|
|
136
150
|
* @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.
|
|
137
151
|
* @throws {Error} If the transaction is not found.
|
|
138
152
|
*/
|
|
139
153
|
async getTransactionReceipt(txHash) {
|
|
140
|
-
const
|
|
154
|
+
const signature = typeof txHash === "string" ? serializers.base58.serialize(txHash) : txHash;
|
|
155
|
+
const response = await this.nativeProvider.getTransaction(signature, {
|
|
141
156
|
commitment: "confirmed"
|
|
142
157
|
});
|
|
143
158
|
if (response === null) {
|
|
@@ -169,7 +184,7 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
169
184
|
if (typeof blockTag === "string") {
|
|
170
185
|
blockTag = parseInt(blockTag);
|
|
171
186
|
}
|
|
172
|
-
const response = await this.nativeProvider.getBlock(blockTag, { transactionDetails: "full" });
|
|
187
|
+
const response = await this.nativeProvider.connection.getBlock(blockTag, { transactionDetails: "full" });
|
|
173
188
|
if (response === null) {
|
|
174
189
|
throw new Error("Block not found");
|
|
175
190
|
}
|
|
@@ -179,14 +194,14 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
179
194
|
* Sends a signed transaction to the blockchain.
|
|
180
195
|
*
|
|
181
196
|
* @param {SignedTransaction} transaction - The signed transaction to send.
|
|
182
|
-
* @param {
|
|
197
|
+
* @param {RpcSendTransactionOptions} [options] - Optional parameters for sending the transaction.
|
|
183
198
|
* @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.
|
|
184
199
|
*/
|
|
185
|
-
async sendTransaction(transaction,
|
|
186
|
-
const
|
|
187
|
-
const
|
|
188
|
-
const
|
|
189
|
-
return lzCore.TransactionPending.from(
|
|
200
|
+
async sendTransaction(transaction, options) {
|
|
201
|
+
const signedTransaction = transaction.signed;
|
|
202
|
+
const signature = await this.nativeProvider.sendTransaction(signedTransaction, options);
|
|
203
|
+
const txHash = serializers.base58.deserialize(signature)[0];
|
|
204
|
+
return lzCore.TransactionPending.from(txHash);
|
|
190
205
|
}
|
|
191
206
|
/**
|
|
192
207
|
* Confirms a pending transaction.
|
|
@@ -196,21 +211,24 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
196
211
|
* @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.
|
|
197
212
|
* @throws {Error} If the transaction fails.
|
|
198
213
|
*/
|
|
199
|
-
async confirmTransaction(pending,
|
|
200
|
-
const strategy = opts ?? await (async () => {
|
|
201
|
-
const block = await this.nativeProvider.getLatestBlockhash("confirmed");
|
|
202
|
-
return {
|
|
203
|
-
blockhash: block.blockhash,
|
|
204
|
-
lastValidBlockHeight: block.lastValidBlockHeight
|
|
205
|
-
};
|
|
206
|
-
})();
|
|
214
|
+
async confirmTransaction(pending, options) {
|
|
207
215
|
const signature = pending.pending;
|
|
208
|
-
|
|
216
|
+
let strategy;
|
|
217
|
+
if (options?.strategy) {
|
|
218
|
+
strategy = options.strategy;
|
|
219
|
+
} else {
|
|
220
|
+
const blockhash = await this.native.getLatestBlockhash();
|
|
221
|
+
strategy = options?.strategy ?? { type: "blockhash", ...blockhash };
|
|
222
|
+
}
|
|
223
|
+
const result = await this.native.confirmTransaction(serializers.base58.serialize(signature), {
|
|
224
|
+
...options,
|
|
225
|
+
strategy
|
|
226
|
+
});
|
|
209
227
|
const status = result.value;
|
|
210
228
|
if (status.err !== null) {
|
|
211
229
|
throw new Error(`transaction ${signature} failed (${JSON.stringify(status)})`);
|
|
212
230
|
}
|
|
213
|
-
return
|
|
231
|
+
return this.getTransactionReceipt(signature);
|
|
214
232
|
}
|
|
215
233
|
/**
|
|
216
234
|
* Sends a signed transaction and waits for confirmation.
|
|
@@ -219,16 +237,16 @@ var SolanaProvider = class _SolanaProvider {
|
|
|
219
237
|
* @param {object} [opts] - Optional parameters for sending and confirming the transaction.
|
|
220
238
|
* @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.
|
|
221
239
|
*/
|
|
222
|
-
async sendAndConfirm(transaction,
|
|
223
|
-
const pending = await this.sendTransaction(transaction,
|
|
224
|
-
return this.confirmTransaction(pending,
|
|
240
|
+
async sendAndConfirm(transaction, options) {
|
|
241
|
+
const pending = await this.sendTransaction(transaction, options?.send);
|
|
242
|
+
return this.confirmTransaction(pending, options?.confirm);
|
|
225
243
|
}
|
|
226
244
|
};
|
|
227
245
|
var SolanaSigner = class {
|
|
228
246
|
/**
|
|
229
247
|
* Creates an instance of SolanaSigner.
|
|
230
248
|
*
|
|
231
|
-
* @param {
|
|
249
|
+
* @param {KeypairSigner} keypair - The Solana keypair to use as the signer.
|
|
232
250
|
*/
|
|
233
251
|
constructor(keypair) {
|
|
234
252
|
this.keypair = keypair;
|
|
@@ -236,13 +254,13 @@ var SolanaSigner = class {
|
|
|
236
254
|
/**
|
|
237
255
|
* Creates an instance of SolanaSigner from the given source.
|
|
238
256
|
*
|
|
239
|
-
* @param {
|
|
257
|
+
* @param {KeypairSigner | string} source - The source to create the signer from.
|
|
240
258
|
* @param {string} [path] - The derivation path (optional).
|
|
241
259
|
* @returns {SolanaSigner} The created SolanaSigner instance.
|
|
242
260
|
* @throws {Error} If the parameters are invalid.
|
|
243
261
|
*/
|
|
244
262
|
static from(source, path) {
|
|
245
|
-
if (source
|
|
263
|
+
if (typeof source === "object") {
|
|
246
264
|
return new this(source);
|
|
247
265
|
} else if (typeof source === "string") {
|
|
248
266
|
const keypair = getKeypair(source, path);
|
|
@@ -254,7 +272,7 @@ var SolanaSigner = class {
|
|
|
254
272
|
/**
|
|
255
273
|
* Gets the native Solana keypair instance.
|
|
256
274
|
*
|
|
257
|
-
* @returns {
|
|
275
|
+
* @returns {KeypairSigner} The native Solana keypair instance.
|
|
258
276
|
*/
|
|
259
277
|
get native() {
|
|
260
278
|
return this.keypair;
|
|
@@ -262,15 +280,18 @@ var SolanaSigner = class {
|
|
|
262
280
|
/**
|
|
263
281
|
* Connects the signer to a provider.
|
|
264
282
|
*
|
|
265
|
-
* @param {Provider} provider - The provider to connect to.
|
|
283
|
+
* @param {Provider | Connection} provider - The provider to connect to.
|
|
266
284
|
* @returns {this} The connected signer.
|
|
267
285
|
* @throws {Error} If the provider is not an instance of Connection.
|
|
268
286
|
*/
|
|
269
287
|
connect(provider) {
|
|
270
|
-
if (
|
|
271
|
-
|
|
288
|
+
if (provider instanceof web3_js.Connection) {
|
|
289
|
+
this.provider = SolanaProvider.from(provider);
|
|
290
|
+
} else if (provider instanceof SolanaProvider) {
|
|
291
|
+
this.provider = provider;
|
|
292
|
+
} else {
|
|
293
|
+
throw new Error("Invalid parameters");
|
|
272
294
|
}
|
|
273
|
-
this.provider = provider.native;
|
|
274
295
|
return this;
|
|
275
296
|
}
|
|
276
297
|
/**
|
|
@@ -279,7 +300,7 @@ var SolanaSigner = class {
|
|
|
279
300
|
* @returns {Promise<string>} A promise that resolves to the address of the signer.
|
|
280
301
|
*/
|
|
281
302
|
async getAddress() {
|
|
282
|
-
return Promise.resolve(this.keypair.publicKey
|
|
303
|
+
return Promise.resolve(this.keypair.publicKey);
|
|
283
304
|
}
|
|
284
305
|
/**
|
|
285
306
|
* Gets the address of the signer.
|
|
@@ -287,7 +308,7 @@ var SolanaSigner = class {
|
|
|
287
308
|
* @returns {string} The address of the signer.
|
|
288
309
|
*/
|
|
289
310
|
get address() {
|
|
290
|
-
return this.publicKey
|
|
311
|
+
return this.publicKey;
|
|
291
312
|
}
|
|
292
313
|
/**
|
|
293
314
|
* Gets the public key of the signer.
|
|
@@ -309,29 +330,23 @@ var SolanaSigner = class {
|
|
|
309
330
|
* Sends a signed transaction and waits for confirmation.
|
|
310
331
|
*
|
|
311
332
|
* @param {SignedTransaction} transaction - The signed transaction to send.
|
|
312
|
-
* @param {
|
|
333
|
+
* @param {TransactionBuilderSendAndConfirmOptions} [opts] - Optional parameters for sending and confirming the transaction.
|
|
313
334
|
* @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.
|
|
314
335
|
*/
|
|
315
336
|
async sendAndConfirm(transaction, opts) {
|
|
316
337
|
const provider = this.assertAndGetProvider();
|
|
317
|
-
|
|
318
|
-
const rawTransaction = toRawTransaction(_transaction);
|
|
319
|
-
const response = await web3_js.sendAndConfirmRawTransaction(provider, Buffer.from(rawTransaction), opts);
|
|
320
|
-
return lzCore.TransactionReceipt.from(response);
|
|
338
|
+
return provider.sendAndConfirm(transaction, opts);
|
|
321
339
|
}
|
|
322
340
|
/**
|
|
323
341
|
* Sends a signed transaction.
|
|
324
342
|
*
|
|
325
343
|
* @param {SignedTransaction} transaction - The signed transaction to send.
|
|
326
|
-
* @param {
|
|
344
|
+
* @param {RpcSendTransactionOptions} [opts] - Optional parameters for sending the transaction.
|
|
327
345
|
* @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.
|
|
328
346
|
*/
|
|
329
|
-
async sendTransaction(transaction,
|
|
347
|
+
async sendTransaction(transaction, opts) {
|
|
330
348
|
const provider = this.assertAndGetProvider();
|
|
331
|
-
|
|
332
|
-
const rawTransaction = toRawTransaction(_transaction);
|
|
333
|
-
const response = await provider.sendRawTransaction(rawTransaction, sendOptions);
|
|
334
|
-
return lzCore.TransactionPending.from(response);
|
|
349
|
+
return provider.sendTransaction(transaction, opts);
|
|
335
350
|
}
|
|
336
351
|
/**
|
|
337
352
|
* Signs a transaction.
|
|
@@ -340,14 +355,10 @@ var SolanaSigner = class {
|
|
|
340
355
|
* @param {Commitment | GetLatestBlockhashConfig} [opts] - Optional parameters for signing the transaction.
|
|
341
356
|
* @returns {Promise<SignedTransaction>} A promise that resolves to the signed transaction.
|
|
342
357
|
*/
|
|
343
|
-
async signTransaction(transaction
|
|
358
|
+
async signTransaction(transaction) {
|
|
344
359
|
const tx = transaction.request;
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
} else {
|
|
348
|
-
tx.partialSign(this.keypair);
|
|
349
|
-
}
|
|
350
|
-
return Promise.resolve(lzCore.SignedTransaction.from(tx));
|
|
360
|
+
const signedTransaction = await this.keypair.signTransaction(tx);
|
|
361
|
+
return lzCore.SignedTransaction.from(signedTransaction);
|
|
351
362
|
}
|
|
352
363
|
/**
|
|
353
364
|
* Signs a buffer (e.g., a message hash) using the native Solana signer.
|
|
@@ -360,24 +371,6 @@ var SolanaSigner = class {
|
|
|
360
371
|
await Promise.resolve();
|
|
361
372
|
throw new Error("Method not implemented.");
|
|
362
373
|
}
|
|
363
|
-
/**
|
|
364
|
-
* Partially signs a transaction.
|
|
365
|
-
*
|
|
366
|
-
* @param {Transaction | VersionedTransaction} tx - The transaction to partially sign.
|
|
367
|
-
*/
|
|
368
|
-
partialSign(tx) {
|
|
369
|
-
if (isVersionedTransaction(tx)) {
|
|
370
|
-
tx.sign([this.keypair]);
|
|
371
|
-
} else {
|
|
372
|
-
tx.partialSign(this.keypair);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Asserts that the provider is connected and returns it.
|
|
377
|
-
*
|
|
378
|
-
* @returns {Connection} The connected provider.
|
|
379
|
-
* @throws {Error} If the provider is not connected.
|
|
380
|
-
*/
|
|
381
374
|
assertAndGetProvider() {
|
|
382
375
|
if (!this.provider) {
|
|
383
376
|
throw new Error("Signer was not connected to a provider, did you forgot to connect to provider?");
|
|
@@ -386,16 +379,13 @@ var SolanaSigner = class {
|
|
|
386
379
|
}
|
|
387
380
|
};
|
|
388
381
|
function getKeypair(mnemonic, path = "m/44'/501'/0'/0'") {
|
|
382
|
+
const eddsa = umiEddsaWeb3js.createWeb3JsEddsa();
|
|
389
383
|
const seed = bip39__namespace.mnemonicToSeedSync(mnemonic, "");
|
|
390
384
|
const privateKey = ed25519HdKey.derivePath(path, seed.toString("hex")).key;
|
|
391
|
-
return
|
|
385
|
+
return umi.createSignerFromKeypair({ eddsa }, eddsa.createKeypairFromSeed(privateKey));
|
|
392
386
|
}
|
|
393
|
-
var isVersionedTransaction = (tx) => {
|
|
394
|
-
return "version" in tx;
|
|
395
|
-
};
|
|
396
387
|
|
|
397
388
|
exports.SolanaProvider = SolanaProvider;
|
|
398
389
|
exports.SolanaSigner = SolanaSigner;
|
|
399
|
-
exports.isVersionedTransaction = isVersionedTransaction;
|
|
400
390
|
//# sourceMappingURL=index.cjs.map
|
|
401
391
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/providers/solana.ts","../src/signers/solana.ts"],"names":["arrayify","Connection","PublicKey","Block","TransactionResponse","TransactionReceipt","BlockWithTransactions","TransactionPending","Keypair","sendAndConfirmRawTransaction","SignedTransaction","bip39","derivePath"],"mappings":"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","file":"index.cjs","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","umi","createWeb3JsTransactionFactory","createDefaultProgramRepository","createNullRpc","createWeb3JsRpc","PublicKey","Block","base58","TransactionResponse","TransactionReceipt","BlockWithTransactions","TransactionPending","SignedTransaction","createWeb3JsEddsa","bip39","derivePath","createSignerFromKeypair"],"mappings":"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","file":"index.cjs","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"]}
|