@layerzerolabs/lz-corekit-evm 3.0.149 → 3.0.151

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 CHANGED
@@ -1,5 +1,29 @@
1
1
  # @layerzerolabs/lz-corekit-evm
2
2
 
3
+ ## 3.0.151
4
+
5
+ ### Patch Changes
6
+
7
+ - 8a4e161: rise-testnet
8
+ - Updated dependencies [8a4e161]
9
+ - @layerzerolabs/lz-core@3.0.151
10
+ - @layerzerolabs/lz-utilities@3.0.151
11
+
12
+ ## 3.0.150
13
+
14
+ ### Patch Changes
15
+
16
+ - 33e4fb8: testnets, Flow ReadLib1002
17
+ - 33e4fb8: megaeth mainnet
18
+ - 33e4fb8: testnets and mainnets
19
+ - 33e4fb8: sagaevm redeployt (altendpoint), horizen testnet
20
+ - Updated dependencies [33e4fb8]
21
+ - Updated dependencies [33e4fb8]
22
+ - Updated dependencies [33e4fb8]
23
+ - Updated dependencies [33e4fb8]
24
+ - @layerzerolabs/lz-core@3.0.150
25
+ - @layerzerolabs/lz-utilities@3.0.150
26
+
3
27
  ## 3.0.149
4
28
 
5
29
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -16,10 +16,24 @@ var EvmProvider = class _EvmProvider {
16
16
  this.url = url;
17
17
  this.authField = authField;
18
18
  this.authValue = authValue;
19
+ let finalUrl = url;
20
+ let finalAuthField = authField;
21
+ let finalAuthValue = authValue;
22
+ try {
23
+ const parsedUrl = new URL(url);
24
+ if (parsedUrl.username !== "" && parsedUrl.password !== "" && (authField === void 0 || authField === "") && (authValue === void 0 || authValue === "")) {
25
+ finalAuthField = "Authorization";
26
+ finalAuthValue = `Basic ${Buffer.from(`${parsedUrl.username}:${parsedUrl.password}`).toString("base64")}`;
27
+ finalUrl = `${parsedUrl.protocol}//${parsedUrl.host}${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`;
28
+ console.log("EvmProvider: Extracted credentials from URL, using clean URL:", finalUrl);
29
+ }
30
+ } catch (error) {
31
+ console.warn("EvmProvider: Failed to parse URL, using as-is:", error);
32
+ }
19
33
  this.nativeProvider = new ethers.ethers.providers.JsonRpcProvider({
20
- url,
34
+ url: finalUrl,
21
35
  headers: {
22
- ...authField !== void 0 && authValue !== void 0 ? { [authField]: authValue } : {}
36
+ ...finalAuthField !== void 0 && finalAuthValue !== void 0 ? { [finalAuthField]: finalAuthValue } : {}
23
37
  }
24
38
  });
25
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/providers/evm.ts","../src/signers/evm.ts"],"names":["ethers","Block","BlockWithTransactions","TransactionResponse","TransactionReceipt","TransactionPending","SignedTransaction"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ethers } from 'ethers'\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\n/**\n * Represents an EVM (Ethereum Virtual Machine) blockchain provider.\n * Implements the Provider interface for interacting with EVM-compatible blockchains.\n */\nexport class EvmProvider implements Provider {\n nativeProvider: ethers.providers.JsonRpcProvider\n\n /**\n * Creates an instance of EvmProvider.\n *\n * @param {string} url - The URL of the EVM node.\n * @param {string} [authField] - The authentication field (optional). for example: 'Authorization'.\n * @param {string} [authValue] - The authentication value (optional). for example: 'Bearer <token>'.\n */\n constructor(\n public url: string,\n protected authField?: string,\n protected authValue?: string\n ) {\n this.nativeProvider = new ethers.providers.JsonRpcProvider({\n url,\n headers: {\n ...(authField !== undefined && authValue !== undefined ? { [authField]: authValue } : {}),\n },\n })\n }\n\n /**\n * Creates an instance of EvmProvider from the given URL.\n *\n * @param {string} url - The URL of the EVM node.\n * @returns {EvmProvider} The created EvmProvider instance.\n */\n static from(url: string, authField?: string, authValue?: string): EvmProvider\n\n /**\n * Creates an instance of EvmProvider from the given source.\n *\n * @param {string} source - The source to create the provider from.\n * @returns {EvmProvider} The created EvmProvider instance.\n * @throws {Error} If the source parameter is not a string.\n */\n static from(source: string, authField?: string, authValue?: string): EvmProvider {\n return new EvmProvider(source, authField, authValue)\n }\n\n /**\n * Gets the native EVM provider instance.\n *\n * @returns {ethers.providers.JsonRpcProvider} The native EVM provider instance.\n */\n get native(): ethers.providers.JsonRpcProvider {\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 (await this.nativeProvider.getBalance(address)).toString()\n }\n\n /**\n * Gets the block specified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<Block>} A promise that resolves to the block.\n */\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.getBlock(blockTag)\n return Block.from(response)\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 */\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.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.getBlockNumber()\n }\n\n /**\n * Gets the current slot number for commitment, not suitable for EVM.\n *\n * @param {Finality} [finality] - The commitment level (optional).\n * @returns {Promise<number>} A promise that resolves to the current slot number.\n * @throws {Error} Method not implemented.\n */\n // eslint-disable-next-line @typescript-eslint/require-await\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n /**\n * Gets the UNIX timestamp for the block identified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<number>} A promise that resolves to the UNIX timestamp of the block.\n */\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n /**\n * Gets information about a transaction.\n *\n * @param {string} txHash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} A promise that resolves to the transaction response.\n */\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n /**\n * Gets the receipt of a transaction.\n *\n * @param {string} txHash - The hash of the transaction.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(txHash)\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 */\n async getTransactionCount(\n addressOrName: string | Promise<string>,\n blockTag?: BlockTag | Promise<BlockTag>\n ): Promise<number> {\n return this.nativeProvider.getTransactionCount(addressOrName, blockTag)\n }\n\n /**\n * Sends a signed transaction to the blockchain.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {object} [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?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.sendTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const response = await this.nativeProvider.sendTransaction(stx)\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 {object} [opts] - Optional parameters for the confirmation.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async confirmTransaction(\n pending: TransactionPending,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n let response: ethers.providers.TransactionReceipt\n if (typeof pending.pending === 'string') {\n const nativePending = pending.pending\n response = await this.nativeProvider.waitForTransaction(nativePending, opts?.confirmations)\n } else if (\n typeof pending.pending === 'object' &&\n pending.pending !== null &&\n 'wait' in pending.pending &&\n typeof pending.pending.wait === 'function'\n ) {\n const nativePending = pending.pending as ethers.providers.TransactionResponse\n response = await nativePending.wait(opts?.confirmations)\n } else {\n throw new Error('Invalid pending transaction')\n }\n if (response.status === 0) {\n throw new Error(`Transaction failed: ${response.transactionHash}`)\n }\n return TransactionReceipt.from(response)\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?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction, opts)\n return this.confirmTransaction(pending, opts)\n }\n}\n","import { ethers } from 'ethers'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\n\n/**\n * Represents an EVM (Ethereum Virtual Machine) blockchain signer.\n * Implements the Signer interface for interacting with EVM-compatible blockchains.\n */\nexport class EvmSigner implements Signer {\n private nativeSigner: ethers.Signer\n\n /**\n * Creates an instance of EvmSigner.\n *\n * @param {ethers.Signer} signer - The EVM signer to use.\n */\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n /**\n * Creates an instance of EvmSigner from the given source.\n *\n * @param {ethers.Signer | string} source - The source to create the signer from.\n * @param {string} [path] - The derivation path (optional).\n * @returns {EvmSigner} The created EvmSigner instance.\n * @throws {Error} If the source parameter is invalid.\n */\n static from(source: ethers.Signer | string, path?: string): EvmSigner {\n if (source instanceof ethers.Signer) {\n return new this(source)\n }\n if (path === undefined) {\n return new this(new ethers.Wallet(source))\n } else {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n }\n }\n\n /**\n * Gets the native EVM signer instance.\n *\n * @returns {ethers.Signer} The native EVM signer instance.\n */\n get native(): ethers.Signer {\n return this.nativeSigner\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 ethers.providers.Provider.\n */\n connect(provider: Provider): this {\n if (!(provider.native instanceof ethers.providers.Provider)) {\n throw new Error('Only ethers.providers.Provider is supported.')\n }\n\n this.nativeSigner = this.nativeSigner.connect(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 this.nativeSigner.getAddress()\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.nativeSigner as ethers.Signer & { address: string }).address\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?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction)\n const response = pending.pending as ethers.providers.TransactionResponse\n const receipt = await response.wait(opts?.confirmations)\n return TransactionReceipt.from(receipt)\n }\n\n /**\n * Sends a signed transaction.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.\n * @throws {Error} If no provider is attached to the signer.\n */\n async sendTransaction(transaction: SignedTransaction): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<ethers.providers.Provider['sendTransaction']>[0]\n const stx = transaction.signed as NativeSignedTransaction\n if (this.nativeSigner.provider === undefined) {\n throw new Error('No provider attached to the signer')\n }\n\n const response = await this.nativeSigner.provider.sendTransaction(stx)\n return TransactionPending.from(response)\n }\n\n /**\n * Signs a transaction.\n *\n * @param {TransactionRequest} transaction - The transaction request to sign.\n * @returns {Promise<SignedTransaction>} A promise that resolves to the signed transaction.\n */\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeTransactionRequest = Parameters<ethers.Signer['populateTransaction']>[0]\n const tx = transaction.request as NativeTransactionRequest\n\n const populatedTransaction = await this.nativeSigner.populateTransaction(tx)\n const response = await this.nativeSigner.signTransaction(populatedTransaction)\n return SignedTransaction.from(response)\n }\n\n /**\n * Signs a buffer (e.g., a message hash) using the native EVM 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 */\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/providers/evm.ts","../src/signers/evm.ts"],"names":["ethers","Block","BlockWithTransactions","TransactionResponse","TransactionReceipt","TransactionPending","SignedTransaction"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ethers } from 'ethers'\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\n/**\n * Represents an EVM (Ethereum Virtual Machine) blockchain provider.\n * Implements the Provider interface for interacting with EVM-compatible blockchains.\n */\nexport class EvmProvider implements Provider {\n nativeProvider: ethers.providers.JsonRpcProvider\n\n /**\n * Creates an instance of EvmProvider.\n *\n * @param {string} url - The URL of the EVM node.\n * @param {string} [authField] - The authentication field (optional). for example: 'Authorization'.\n * @param {string} [authValue] - The authentication value (optional). for example: 'Bearer <token>'.\n */\n constructor(\n public url: string,\n protected authField?: string,\n protected authValue?: string\n ) {\n // Parse URL to extract embedded credentials\n let finalUrl = url\n let finalAuthField = authField\n let finalAuthValue = authValue\n\n try {\n const parsedUrl = new URL(url)\n // If URL contains credentials and no explicit auth is provided\n if (\n parsedUrl.username !== '' &&\n parsedUrl.password !== '' &&\n (authField === undefined || authField === '') &&\n (authValue === undefined || authValue === '')\n ) {\n finalAuthField = 'Authorization'\n finalAuthValue = `Basic ${Buffer.from(`${parsedUrl.username}:${parsedUrl.password}`).toString('base64')}`\n finalUrl = `${parsedUrl.protocol}//${parsedUrl.host}${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`\n console.log('EvmProvider: Extracted credentials from URL, using clean URL:', finalUrl)\n }\n } catch (error) {\n console.warn('EvmProvider: Failed to parse URL, using as-is:', error)\n }\n\n this.nativeProvider = new ethers.providers.JsonRpcProvider({\n url: finalUrl,\n headers: {\n ...(finalAuthField !== undefined && finalAuthValue !== undefined\n ? { [finalAuthField]: finalAuthValue }\n : {}),\n },\n })\n }\n\n /**\n * Creates an instance of EvmProvider from the given URL.\n *\n * @param {string} url - The URL of the EVM node.\n * @returns {EvmProvider} The created EvmProvider instance.\n */\n static from(url: string, authField?: string, authValue?: string): EvmProvider\n\n /**\n * Creates an instance of EvmProvider from the given source.\n *\n * @param {string} source - The source to create the provider from.\n * @returns {EvmProvider} The created EvmProvider instance.\n * @throws {Error} If the source parameter is not a string.\n */\n static from(source: string, authField?: string, authValue?: string): EvmProvider {\n return new EvmProvider(source, authField, authValue)\n }\n\n /**\n * Gets the native EVM provider instance.\n *\n * @returns {ethers.providers.JsonRpcProvider} The native EVM provider instance.\n */\n get native(): ethers.providers.JsonRpcProvider {\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 (await this.nativeProvider.getBalance(address)).toString()\n }\n\n /**\n * Gets the block specified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<Block>} A promise that resolves to the block.\n */\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.getBlock(blockTag)\n return Block.from(response)\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 */\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.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.getBlockNumber()\n }\n\n /**\n * Gets the current slot number for commitment, not suitable for EVM.\n *\n * @param {Finality} [finality] - The commitment level (optional).\n * @returns {Promise<number>} A promise that resolves to the current slot number.\n * @throws {Error} Method not implemented.\n */\n // eslint-disable-next-line @typescript-eslint/require-await\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n /**\n * Gets the UNIX timestamp for the block identified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<number>} A promise that resolves to the UNIX timestamp of the block.\n */\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n /**\n * Gets information about a transaction.\n *\n * @param {string} txHash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} A promise that resolves to the transaction response.\n */\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n /**\n * Gets the receipt of a transaction.\n *\n * @param {string} txHash - The hash of the transaction.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(txHash)\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 */\n async getTransactionCount(\n addressOrName: string | Promise<string>,\n blockTag?: BlockTag | Promise<BlockTag>\n ): Promise<number> {\n return this.nativeProvider.getTransactionCount(addressOrName, blockTag)\n }\n\n /**\n * Sends a signed transaction to the blockchain.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {object} [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?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.sendTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const response = await this.nativeProvider.sendTransaction(stx)\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 {object} [opts] - Optional parameters for the confirmation.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async confirmTransaction(\n pending: TransactionPending,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n let response: ethers.providers.TransactionReceipt\n if (typeof pending.pending === 'string') {\n const nativePending = pending.pending\n response = await this.nativeProvider.waitForTransaction(nativePending, opts?.confirmations)\n } else if (\n typeof pending.pending === 'object' &&\n pending.pending !== null &&\n 'wait' in pending.pending &&\n typeof pending.pending.wait === 'function'\n ) {\n const nativePending = pending.pending as ethers.providers.TransactionResponse\n response = await nativePending.wait(opts?.confirmations)\n } else {\n throw new Error('Invalid pending transaction')\n }\n if (response.status === 0) {\n throw new Error(`Transaction failed: ${response.transactionHash}`)\n }\n return TransactionReceipt.from(response)\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?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction, opts)\n return this.confirmTransaction(pending, opts)\n }\n}\n","import { ethers } from 'ethers'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\n\n/**\n * Represents an EVM (Ethereum Virtual Machine) blockchain signer.\n * Implements the Signer interface for interacting with EVM-compatible blockchains.\n */\nexport class EvmSigner implements Signer {\n private nativeSigner: ethers.Signer\n\n /**\n * Creates an instance of EvmSigner.\n *\n * @param {ethers.Signer} signer - The EVM signer to use.\n */\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n /**\n * Creates an instance of EvmSigner from the given source.\n *\n * @param {ethers.Signer | string} source - The source to create the signer from.\n * @param {string} [path] - The derivation path (optional).\n * @returns {EvmSigner} The created EvmSigner instance.\n * @throws {Error} If the source parameter is invalid.\n */\n static from(source: ethers.Signer | string, path?: string): EvmSigner {\n if (source instanceof ethers.Signer) {\n return new this(source)\n }\n if (path === undefined) {\n return new this(new ethers.Wallet(source))\n } else {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n }\n }\n\n /**\n * Gets the native EVM signer instance.\n *\n * @returns {ethers.Signer} The native EVM signer instance.\n */\n get native(): ethers.Signer {\n return this.nativeSigner\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 ethers.providers.Provider.\n */\n connect(provider: Provider): this {\n if (!(provider.native instanceof ethers.providers.Provider)) {\n throw new Error('Only ethers.providers.Provider is supported.')\n }\n\n this.nativeSigner = this.nativeSigner.connect(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 this.nativeSigner.getAddress()\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.nativeSigner as ethers.Signer & { address: string }).address\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?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction)\n const response = pending.pending as ethers.providers.TransactionResponse\n const receipt = await response.wait(opts?.confirmations)\n return TransactionReceipt.from(receipt)\n }\n\n /**\n * Sends a signed transaction.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.\n * @throws {Error} If no provider is attached to the signer.\n */\n async sendTransaction(transaction: SignedTransaction): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<ethers.providers.Provider['sendTransaction']>[0]\n const stx = transaction.signed as NativeSignedTransaction\n if (this.nativeSigner.provider === undefined) {\n throw new Error('No provider attached to the signer')\n }\n\n const response = await this.nativeSigner.provider.sendTransaction(stx)\n return TransactionPending.from(response)\n }\n\n /**\n * Signs a transaction.\n *\n * @param {TransactionRequest} transaction - The transaction request to sign.\n * @returns {Promise<SignedTransaction>} A promise that resolves to the signed transaction.\n */\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeTransactionRequest = Parameters<ethers.Signer['populateTransaction']>[0]\n const tx = transaction.request as NativeTransactionRequest\n\n const populatedTransaction = await this.nativeSigner.populateTransaction(tx)\n const response = await this.nativeSigner.signTransaction(populatedTransaction)\n return SignedTransaction.from(response)\n }\n\n /**\n * Signs a buffer (e.g., a message hash) using the native EVM 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 */\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -14,10 +14,24 @@ var EvmProvider = class _EvmProvider {
14
14
  this.url = url;
15
15
  this.authField = authField;
16
16
  this.authValue = authValue;
17
+ let finalUrl = url;
18
+ let finalAuthField = authField;
19
+ let finalAuthValue = authValue;
20
+ try {
21
+ const parsedUrl = new URL(url);
22
+ if (parsedUrl.username !== "" && parsedUrl.password !== "" && (authField === void 0 || authField === "") && (authValue === void 0 || authValue === "")) {
23
+ finalAuthField = "Authorization";
24
+ finalAuthValue = `Basic ${Buffer.from(`${parsedUrl.username}:${parsedUrl.password}`).toString("base64")}`;
25
+ finalUrl = `${parsedUrl.protocol}//${parsedUrl.host}${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`;
26
+ console.log("EvmProvider: Extracted credentials from URL, using clean URL:", finalUrl);
27
+ }
28
+ } catch (error) {
29
+ console.warn("EvmProvider: Failed to parse URL, using as-is:", error);
30
+ }
17
31
  this.nativeProvider = new ethers.providers.JsonRpcProvider({
18
- url,
32
+ url: finalUrl,
19
33
  headers: {
20
- ...authField !== void 0 && authValue !== void 0 ? { [authField]: authValue } : {}
34
+ ...finalAuthField !== void 0 && finalAuthValue !== void 0 ? { [finalAuthField]: finalAuthValue } : {}
21
35
  }
22
36
  });
23
37
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/providers/evm.ts","../src/signers/evm.ts"],"names":["ethers","TransactionReceipt","TransactionPending","SignedTransaction"],"mappings":"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","file":"index.mjs","sourcesContent":["import { ethers } from 'ethers'\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\n/**\n * Represents an EVM (Ethereum Virtual Machine) blockchain provider.\n * Implements the Provider interface for interacting with EVM-compatible blockchains.\n */\nexport class EvmProvider implements Provider {\n nativeProvider: ethers.providers.JsonRpcProvider\n\n /**\n * Creates an instance of EvmProvider.\n *\n * @param {string} url - The URL of the EVM node.\n * @param {string} [authField] - The authentication field (optional). for example: 'Authorization'.\n * @param {string} [authValue] - The authentication value (optional). for example: 'Bearer <token>'.\n */\n constructor(\n public url: string,\n protected authField?: string,\n protected authValue?: string\n ) {\n this.nativeProvider = new ethers.providers.JsonRpcProvider({\n url,\n headers: {\n ...(authField !== undefined && authValue !== undefined ? { [authField]: authValue } : {}),\n },\n })\n }\n\n /**\n * Creates an instance of EvmProvider from the given URL.\n *\n * @param {string} url - The URL of the EVM node.\n * @returns {EvmProvider} The created EvmProvider instance.\n */\n static from(url: string, authField?: string, authValue?: string): EvmProvider\n\n /**\n * Creates an instance of EvmProvider from the given source.\n *\n * @param {string} source - The source to create the provider from.\n * @returns {EvmProvider} The created EvmProvider instance.\n * @throws {Error} If the source parameter is not a string.\n */\n static from(source: string, authField?: string, authValue?: string): EvmProvider {\n return new EvmProvider(source, authField, authValue)\n }\n\n /**\n * Gets the native EVM provider instance.\n *\n * @returns {ethers.providers.JsonRpcProvider} The native EVM provider instance.\n */\n get native(): ethers.providers.JsonRpcProvider {\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 (await this.nativeProvider.getBalance(address)).toString()\n }\n\n /**\n * Gets the block specified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<Block>} A promise that resolves to the block.\n */\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.getBlock(blockTag)\n return Block.from(response)\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 */\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.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.getBlockNumber()\n }\n\n /**\n * Gets the current slot number for commitment, not suitable for EVM.\n *\n * @param {Finality} [finality] - The commitment level (optional).\n * @returns {Promise<number>} A promise that resolves to the current slot number.\n * @throws {Error} Method not implemented.\n */\n // eslint-disable-next-line @typescript-eslint/require-await\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n /**\n * Gets the UNIX timestamp for the block identified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<number>} A promise that resolves to the UNIX timestamp of the block.\n */\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n /**\n * Gets information about a transaction.\n *\n * @param {string} txHash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} A promise that resolves to the transaction response.\n */\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n /**\n * Gets the receipt of a transaction.\n *\n * @param {string} txHash - The hash of the transaction.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(txHash)\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 */\n async getTransactionCount(\n addressOrName: string | Promise<string>,\n blockTag?: BlockTag | Promise<BlockTag>\n ): Promise<number> {\n return this.nativeProvider.getTransactionCount(addressOrName, blockTag)\n }\n\n /**\n * Sends a signed transaction to the blockchain.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {object} [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?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.sendTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const response = await this.nativeProvider.sendTransaction(stx)\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 {object} [opts] - Optional parameters for the confirmation.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async confirmTransaction(\n pending: TransactionPending,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n let response: ethers.providers.TransactionReceipt\n if (typeof pending.pending === 'string') {\n const nativePending = pending.pending\n response = await this.nativeProvider.waitForTransaction(nativePending, opts?.confirmations)\n } else if (\n typeof pending.pending === 'object' &&\n pending.pending !== null &&\n 'wait' in pending.pending &&\n typeof pending.pending.wait === 'function'\n ) {\n const nativePending = pending.pending as ethers.providers.TransactionResponse\n response = await nativePending.wait(opts?.confirmations)\n } else {\n throw new Error('Invalid pending transaction')\n }\n if (response.status === 0) {\n throw new Error(`Transaction failed: ${response.transactionHash}`)\n }\n return TransactionReceipt.from(response)\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?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction, opts)\n return this.confirmTransaction(pending, opts)\n }\n}\n","import { ethers } from 'ethers'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\n\n/**\n * Represents an EVM (Ethereum Virtual Machine) blockchain signer.\n * Implements the Signer interface for interacting with EVM-compatible blockchains.\n */\nexport class EvmSigner implements Signer {\n private nativeSigner: ethers.Signer\n\n /**\n * Creates an instance of EvmSigner.\n *\n * @param {ethers.Signer} signer - The EVM signer to use.\n */\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n /**\n * Creates an instance of EvmSigner from the given source.\n *\n * @param {ethers.Signer | string} source - The source to create the signer from.\n * @param {string} [path] - The derivation path (optional).\n * @returns {EvmSigner} The created EvmSigner instance.\n * @throws {Error} If the source parameter is invalid.\n */\n static from(source: ethers.Signer | string, path?: string): EvmSigner {\n if (source instanceof ethers.Signer) {\n return new this(source)\n }\n if (path === undefined) {\n return new this(new ethers.Wallet(source))\n } else {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n }\n }\n\n /**\n * Gets the native EVM signer instance.\n *\n * @returns {ethers.Signer} The native EVM signer instance.\n */\n get native(): ethers.Signer {\n return this.nativeSigner\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 ethers.providers.Provider.\n */\n connect(provider: Provider): this {\n if (!(provider.native instanceof ethers.providers.Provider)) {\n throw new Error('Only ethers.providers.Provider is supported.')\n }\n\n this.nativeSigner = this.nativeSigner.connect(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 this.nativeSigner.getAddress()\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.nativeSigner as ethers.Signer & { address: string }).address\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?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction)\n const response = pending.pending as ethers.providers.TransactionResponse\n const receipt = await response.wait(opts?.confirmations)\n return TransactionReceipt.from(receipt)\n }\n\n /**\n * Sends a signed transaction.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.\n * @throws {Error} If no provider is attached to the signer.\n */\n async sendTransaction(transaction: SignedTransaction): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<ethers.providers.Provider['sendTransaction']>[0]\n const stx = transaction.signed as NativeSignedTransaction\n if (this.nativeSigner.provider === undefined) {\n throw new Error('No provider attached to the signer')\n }\n\n const response = await this.nativeSigner.provider.sendTransaction(stx)\n return TransactionPending.from(response)\n }\n\n /**\n * Signs a transaction.\n *\n * @param {TransactionRequest} transaction - The transaction request to sign.\n * @returns {Promise<SignedTransaction>} A promise that resolves to the signed transaction.\n */\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeTransactionRequest = Parameters<ethers.Signer['populateTransaction']>[0]\n const tx = transaction.request as NativeTransactionRequest\n\n const populatedTransaction = await this.nativeSigner.populateTransaction(tx)\n const response = await this.nativeSigner.signTransaction(populatedTransaction)\n return SignedTransaction.from(response)\n }\n\n /**\n * Signs a buffer (e.g., a message hash) using the native EVM 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 */\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/providers/evm.ts","../src/signers/evm.ts"],"names":["ethers","TransactionReceipt","TransactionPending","SignedTransaction"],"mappings":"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","file":"index.mjs","sourcesContent":["import { ethers } from 'ethers'\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\n/**\n * Represents an EVM (Ethereum Virtual Machine) blockchain provider.\n * Implements the Provider interface for interacting with EVM-compatible blockchains.\n */\nexport class EvmProvider implements Provider {\n nativeProvider: ethers.providers.JsonRpcProvider\n\n /**\n * Creates an instance of EvmProvider.\n *\n * @param {string} url - The URL of the EVM node.\n * @param {string} [authField] - The authentication field (optional). for example: 'Authorization'.\n * @param {string} [authValue] - The authentication value (optional). for example: 'Bearer <token>'.\n */\n constructor(\n public url: string,\n protected authField?: string,\n protected authValue?: string\n ) {\n // Parse URL to extract embedded credentials\n let finalUrl = url\n let finalAuthField = authField\n let finalAuthValue = authValue\n\n try {\n const parsedUrl = new URL(url)\n // If URL contains credentials and no explicit auth is provided\n if (\n parsedUrl.username !== '' &&\n parsedUrl.password !== '' &&\n (authField === undefined || authField === '') &&\n (authValue === undefined || authValue === '')\n ) {\n finalAuthField = 'Authorization'\n finalAuthValue = `Basic ${Buffer.from(`${parsedUrl.username}:${parsedUrl.password}`).toString('base64')}`\n finalUrl = `${parsedUrl.protocol}//${parsedUrl.host}${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`\n console.log('EvmProvider: Extracted credentials from URL, using clean URL:', finalUrl)\n }\n } catch (error) {\n console.warn('EvmProvider: Failed to parse URL, using as-is:', error)\n }\n\n this.nativeProvider = new ethers.providers.JsonRpcProvider({\n url: finalUrl,\n headers: {\n ...(finalAuthField !== undefined && finalAuthValue !== undefined\n ? { [finalAuthField]: finalAuthValue }\n : {}),\n },\n })\n }\n\n /**\n * Creates an instance of EvmProvider from the given URL.\n *\n * @param {string} url - The URL of the EVM node.\n * @returns {EvmProvider} The created EvmProvider instance.\n */\n static from(url: string, authField?: string, authValue?: string): EvmProvider\n\n /**\n * Creates an instance of EvmProvider from the given source.\n *\n * @param {string} source - The source to create the provider from.\n * @returns {EvmProvider} The created EvmProvider instance.\n * @throws {Error} If the source parameter is not a string.\n */\n static from(source: string, authField?: string, authValue?: string): EvmProvider {\n return new EvmProvider(source, authField, authValue)\n }\n\n /**\n * Gets the native EVM provider instance.\n *\n * @returns {ethers.providers.JsonRpcProvider} The native EVM provider instance.\n */\n get native(): ethers.providers.JsonRpcProvider {\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 (await this.nativeProvider.getBalance(address)).toString()\n }\n\n /**\n * Gets the block specified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<Block>} A promise that resolves to the block.\n */\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.getBlock(blockTag)\n return Block.from(response)\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 */\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.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.getBlockNumber()\n }\n\n /**\n * Gets the current slot number for commitment, not suitable for EVM.\n *\n * @param {Finality} [finality] - The commitment level (optional).\n * @returns {Promise<number>} A promise that resolves to the current slot number.\n * @throws {Error} Method not implemented.\n */\n // eslint-disable-next-line @typescript-eslint/require-await\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n /**\n * Gets the UNIX timestamp for the block identified by blockTag.\n *\n * @param {BlockTag} blockTag - The block tag to specify the block.\n * @returns {Promise<number>} A promise that resolves to the UNIX timestamp of the block.\n */\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n /**\n * Gets information about a transaction.\n *\n * @param {string} txHash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} A promise that resolves to the transaction response.\n */\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n /**\n * Gets the receipt of a transaction.\n *\n * @param {string} txHash - The hash of the transaction.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(txHash)\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 */\n async getTransactionCount(\n addressOrName: string | Promise<string>,\n blockTag?: BlockTag | Promise<BlockTag>\n ): Promise<number> {\n return this.nativeProvider.getTransactionCount(addressOrName, blockTag)\n }\n\n /**\n * Sends a signed transaction to the blockchain.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @param {object} [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?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.sendTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const response = await this.nativeProvider.sendTransaction(stx)\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 {object} [opts] - Optional parameters for the confirmation.\n * @returns {Promise<TransactionReceipt>} A promise that resolves to the transaction receipt.\n */\n async confirmTransaction(\n pending: TransactionPending,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n let response: ethers.providers.TransactionReceipt\n if (typeof pending.pending === 'string') {\n const nativePending = pending.pending\n response = await this.nativeProvider.waitForTransaction(nativePending, opts?.confirmations)\n } else if (\n typeof pending.pending === 'object' &&\n pending.pending !== null &&\n 'wait' in pending.pending &&\n typeof pending.pending.wait === 'function'\n ) {\n const nativePending = pending.pending as ethers.providers.TransactionResponse\n response = await nativePending.wait(opts?.confirmations)\n } else {\n throw new Error('Invalid pending transaction')\n }\n if (response.status === 0) {\n throw new Error(`Transaction failed: ${response.transactionHash}`)\n }\n return TransactionReceipt.from(response)\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?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction, opts)\n return this.confirmTransaction(pending, opts)\n }\n}\n","import { ethers } from 'ethers'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\n\n/**\n * Represents an EVM (Ethereum Virtual Machine) blockchain signer.\n * Implements the Signer interface for interacting with EVM-compatible blockchains.\n */\nexport class EvmSigner implements Signer {\n private nativeSigner: ethers.Signer\n\n /**\n * Creates an instance of EvmSigner.\n *\n * @param {ethers.Signer} signer - The EVM signer to use.\n */\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n /**\n * Creates an instance of EvmSigner from the given source.\n *\n * @param {ethers.Signer | string} source - The source to create the signer from.\n * @param {string} [path] - The derivation path (optional).\n * @returns {EvmSigner} The created EvmSigner instance.\n * @throws {Error} If the source parameter is invalid.\n */\n static from(source: ethers.Signer | string, path?: string): EvmSigner {\n if (source instanceof ethers.Signer) {\n return new this(source)\n }\n if (path === undefined) {\n return new this(new ethers.Wallet(source))\n } else {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n }\n }\n\n /**\n * Gets the native EVM signer instance.\n *\n * @returns {ethers.Signer} The native EVM signer instance.\n */\n get native(): ethers.Signer {\n return this.nativeSigner\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 ethers.providers.Provider.\n */\n connect(provider: Provider): this {\n if (!(provider.native instanceof ethers.providers.Provider)) {\n throw new Error('Only ethers.providers.Provider is supported.')\n }\n\n this.nativeSigner = this.nativeSigner.connect(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 this.nativeSigner.getAddress()\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.nativeSigner as ethers.Signer & { address: string }).address\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?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction)\n const response = pending.pending as ethers.providers.TransactionResponse\n const receipt = await response.wait(opts?.confirmations)\n return TransactionReceipt.from(receipt)\n }\n\n /**\n * Sends a signed transaction.\n *\n * @param {SignedTransaction} transaction - The signed transaction to send.\n * @returns {Promise<TransactionPending>} A promise that resolves to the pending transaction.\n * @throws {Error} If no provider is attached to the signer.\n */\n async sendTransaction(transaction: SignedTransaction): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<ethers.providers.Provider['sendTransaction']>[0]\n const stx = transaction.signed as NativeSignedTransaction\n if (this.nativeSigner.provider === undefined) {\n throw new Error('No provider attached to the signer')\n }\n\n const response = await this.nativeSigner.provider.sendTransaction(stx)\n return TransactionPending.from(response)\n }\n\n /**\n * Signs a transaction.\n *\n * @param {TransactionRequest} transaction - The transaction request to sign.\n * @returns {Promise<SignedTransaction>} A promise that resolves to the signed transaction.\n */\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeTransactionRequest = Parameters<ethers.Signer['populateTransaction']>[0]\n const tx = transaction.request as NativeTransactionRequest\n\n const populatedTransaction = await this.nativeSigner.populateTransaction(tx)\n const response = await this.nativeSigner.signTransaction(populatedTransaction)\n return SignedTransaction.from(response)\n }\n\n /**\n * Signs a buffer (e.g., a message hash) using the native EVM 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 */\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/lz-corekit-evm",
3
- "version": "3.0.149",
3
+ "version": "3.0.151",
4
4
  "description": "LayerZero Core Library",
5
5
  "license": "BUSL-1.1",
6
6
  "exports": {
@@ -23,15 +23,15 @@
23
23
  "clean-prebuild": "rm -rf dist"
24
24
  },
25
25
  "dependencies": {
26
- "@layerzerolabs/lz-core": "^3.0.149",
27
- "@layerzerolabs/lz-utilities": "^3.0.149",
26
+ "@layerzerolabs/lz-core": "^3.0.151",
27
+ "@layerzerolabs/lz-utilities": "^3.0.151",
28
28
  "ethers": "^5.8.0",
29
29
  "memoizee": "^0.4.17"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@jest/globals": "^29.7.0",
33
- "@layerzerolabs/tsup-config-next": "^3.0.149",
34
- "@layerzerolabs/typescript-config-next": "^3.0.149",
33
+ "@layerzerolabs/tsup-config-next": "^3.0.151",
34
+ "@layerzerolabs/typescript-config-next": "^3.0.151",
35
35
  "@types/jest": "^29.5.10",
36
36
  "jest": "^29.7.0",
37
37
  "jest-extended": "^4.0.2",