@layerzerolabs/lz-corekit-solana 3.0.16 → 3.0.17
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 +11 -0
- package/dist/index.cjs +1 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +0 -8
- package/dist/index.d.ts +0 -8
- package/dist/index.mjs +1 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @layerzerolabs/lz-corekit-solana
|
|
2
2
|
|
|
3
|
+
## 3.0.17
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 40f2269: islander mainnet
|
|
8
|
+
- 40f2269: testnets
|
|
9
|
+
- Updated dependencies [40f2269]
|
|
10
|
+
- Updated dependencies [40f2269]
|
|
11
|
+
- @layerzerolabs/lz-core@3.0.17
|
|
12
|
+
- @layerzerolabs/lz-utilities@3.0.17
|
|
13
|
+
|
|
3
14
|
## 3.0.16
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -384,16 +384,6 @@ var SolanaSigner = class {
|
|
|
384
384
|
}
|
|
385
385
|
return this.provider;
|
|
386
386
|
}
|
|
387
|
-
/**
|
|
388
|
-
* Builds a transaction.
|
|
389
|
-
*
|
|
390
|
-
* @param {unknown} buildTxRequest - The transaction request to build.
|
|
391
|
-
* @returns {Promise<TransactionRequest>} A promise that resolves to the built transaction request.
|
|
392
|
-
* @throws {Error} Method not implemented.
|
|
393
|
-
*/
|
|
394
|
-
async buildTransaction(buildTxRequest) {
|
|
395
|
-
return Promise.reject(new Error("Method not implemented."));
|
|
396
|
-
}
|
|
397
387
|
};
|
|
398
388
|
function getKeypair(mnemonic, path = "m/44'/501'/0'/0'") {
|
|
399
389
|
const seed = bip39__namespace.mnemonicToSeedSync(mnemonic, "");
|
|
@@ -407,5 +397,5 @@ var isVersionedTransaction = (tx) => {
|
|
|
407
397
|
exports.SolanaProvider = SolanaProvider;
|
|
408
398
|
exports.SolanaSigner = SolanaSigner;
|
|
409
399
|
exports.isVersionedTransaction = isVersionedTransaction;
|
|
410
|
-
//# sourceMappingURL=
|
|
400
|
+
//# sourceMappingURL=index.cjs.map
|
|
411
401
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/solana.ts","../src/utils.ts","../src/signers/solana.ts"],"names":["Connection","SignedTransaction","TransactionPending","TransactionReceipt"],"mappings":"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","sourcesContent":["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 { 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 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 * Builds a transaction.\n *\n * @param {unknown} buildTxRequest - The transaction request to build.\n * @returns {Promise<TransactionRequest>} A promise that resolves to the built transaction request.\n * @throws {Error} Method not implemented.\n */\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\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/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"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -236,14 +236,6 @@ declare class SolanaSigner implements Signer {
|
|
|
236
236
|
* @throws {Error} If the provider is not connected.
|
|
237
237
|
*/
|
|
238
238
|
private assertAndGetProvider;
|
|
239
|
-
/**
|
|
240
|
-
* Builds a transaction.
|
|
241
|
-
*
|
|
242
|
-
* @param {unknown} buildTxRequest - The transaction request to build.
|
|
243
|
-
* @returns {Promise<TransactionRequest>} A promise that resolves to the built transaction request.
|
|
244
|
-
* @throws {Error} Method not implemented.
|
|
245
|
-
*/
|
|
246
|
-
buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest>;
|
|
247
239
|
}
|
|
248
240
|
/**
|
|
249
241
|
* Check if a transaction object is a VersionedTransaction or not
|
package/dist/index.d.ts
CHANGED
|
@@ -236,14 +236,6 @@ declare class SolanaSigner implements Signer {
|
|
|
236
236
|
* @throws {Error} If the provider is not connected.
|
|
237
237
|
*/
|
|
238
238
|
private assertAndGetProvider;
|
|
239
|
-
/**
|
|
240
|
-
* Builds a transaction.
|
|
241
|
-
*
|
|
242
|
-
* @param {unknown} buildTxRequest - The transaction request to build.
|
|
243
|
-
* @returns {Promise<TransactionRequest>} A promise that resolves to the built transaction request.
|
|
244
|
-
* @throws {Error} Method not implemented.
|
|
245
|
-
*/
|
|
246
|
-
buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest>;
|
|
247
239
|
}
|
|
248
240
|
/**
|
|
249
241
|
* Check if a transaction object is a VersionedTransaction or not
|
package/dist/index.mjs
CHANGED
|
@@ -362,16 +362,6 @@ var SolanaSigner = class {
|
|
|
362
362
|
}
|
|
363
363
|
return this.provider;
|
|
364
364
|
}
|
|
365
|
-
/**
|
|
366
|
-
* Builds a transaction.
|
|
367
|
-
*
|
|
368
|
-
* @param {unknown} buildTxRequest - The transaction request to build.
|
|
369
|
-
* @returns {Promise<TransactionRequest>} A promise that resolves to the built transaction request.
|
|
370
|
-
* @throws {Error} Method not implemented.
|
|
371
|
-
*/
|
|
372
|
-
async buildTransaction(buildTxRequest) {
|
|
373
|
-
return Promise.reject(new Error("Method not implemented."));
|
|
374
|
-
}
|
|
375
365
|
};
|
|
376
366
|
function getKeypair(mnemonic, path = "m/44'/501'/0'/0'") {
|
|
377
367
|
const seed = bip39.mnemonicToSeedSync(mnemonic, "");
|
|
@@ -383,5 +373,5 @@ var isVersionedTransaction = (tx) => {
|
|
|
383
373
|
};
|
|
384
374
|
|
|
385
375
|
export { SolanaProvider, SolanaSigner, isVersionedTransaction };
|
|
386
|
-
//# sourceMappingURL=
|
|
376
|
+
//# sourceMappingURL=index.mjs.map
|
|
387
377
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/solana.ts","../src/utils.ts","../src/signers/solana.ts"],"names":["Connection","SignedTransaction","TransactionPending","TransactionReceipt"],"mappings":"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","sourcesContent":["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 { 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 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 * Builds a transaction.\n *\n * @param {unknown} buildTxRequest - The transaction request to build.\n * @returns {Promise<TransactionRequest>} A promise that resolves to the built transaction request.\n * @throws {Error} Method not implemented.\n */\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\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/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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/lz-corekit-solana",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.17",
|
|
4
4
|
"description": "LayerZero Core Library",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"exports": {
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"clean-prebuild": "rimraf dist"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@layerzerolabs/lz-core": "^3.0.
|
|
27
|
-
"@layerzerolabs/lz-utilities": "^3.0.
|
|
26
|
+
"@layerzerolabs/lz-core": "^3.0.17",
|
|
27
|
+
"@layerzerolabs/lz-utilities": "^3.0.17",
|
|
28
28
|
"@solana/web3.js": "^1.92.1",
|
|
29
29
|
"bip39": "^3.1.0",
|
|
30
30
|
"ed25519-hd-key": "^1.3.0",
|
|
@@ -32,14 +32,14 @@
|
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@jest/globals": "^29.7.0",
|
|
35
|
-
"@layerzerolabs/tsup-config-next": "^3.0.
|
|
36
|
-
"@layerzerolabs/typescript-config-next": "^3.0.
|
|
35
|
+
"@layerzerolabs/tsup-config-next": "^3.0.17",
|
|
36
|
+
"@layerzerolabs/typescript-config-next": "^3.0.17",
|
|
37
37
|
"@types/jest": "^29.5.10",
|
|
38
38
|
"jest": "^29.7.0",
|
|
39
39
|
"jest-extended": "^4.0.2",
|
|
40
40
|
"rimraf": "^5.0.5",
|
|
41
41
|
"ts-jest": "^29.1.1",
|
|
42
|
-
"tsup": "^8.
|
|
42
|
+
"tsup": "^8.3.5",
|
|
43
43
|
"typescript": "~5.2.2"
|
|
44
44
|
},
|
|
45
45
|
"publishConfig": {
|