@layerzerolabs/lz-corekit-tron 3.0.11 → 3.0.12

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,16 @@
1
1
  # @layerzerolabs/lz-corekit-tron
2
2
 
3
+ ## 3.0.12
4
+
5
+ ### Patch Changes
6
+
7
+ - 1f77709: endpoints: superposition mainnet and some testnets
8
+ - Updated dependencies [1f77709]
9
+ - @layerzerolabs/lz-core@3.0.12
10
+ - @layerzerolabs/tron-utilities@3.0.12
11
+ - @layerzerolabs/lz-utilities@3.0.12
12
+ - @layerzerolabs/lz-aptos-sdk-v1@3.0.12
13
+
3
14
  ## 3.0.11
4
15
 
5
16
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -133,11 +133,15 @@ var TronProvider = class {
133
133
  const response = await tronUtilities.sendTronTransaction(stx, client);
134
134
  return lzCore.TransactionPending.from(response);
135
135
  }
136
- async sendAndConfirm(transaction, opts) {
137
- const pending = (await this.sendTransaction(transaction, opts)).pending;
138
- const response = await pending.wait();
136
+ async confirmTransaction(pending, _opts) {
137
+ const nativePending = pending.pending;
138
+ const response = await nativePending.wait();
139
139
  return lzCore.TransactionReceipt.from(response);
140
140
  }
141
+ async sendAndConfirm(transaction, opts) {
142
+ const pending = await this.sendTransaction(transaction, opts);
143
+ return this.confirmTransaction(pending, opts);
144
+ }
141
145
  };
142
146
  var TronWebProvider = class {
143
147
  /**
@@ -224,7 +228,10 @@ var TronWebProvider = class {
224
228
  }
225
229
  return lzCore.TransactionPending.from(response);
226
230
  }
227
- async waitTransaction(txHash, confirmations) {
231
+ async confirmTransaction(pending, opts) {
232
+ const nativePending = pending.pending;
233
+ const txHash = nativePending.txid;
234
+ const confirmations = opts?.confirmations;
228
235
  let tries = 0;
229
236
  while (tries++ < (confirmations ?? 20)) {
230
237
  const receipt = await this.getTransactionReceipt(txHash);
@@ -248,14 +255,13 @@ var TronWebProvider = class {
248
255
  };
249
256
  throw new Error(JSON.stringify(error, null, 2));
250
257
  }
251
- return response;
258
+ return lzCore.TransactionReceipt.from(response);
252
259
  }
253
- return void 0;
260
+ throw new Error(`Transaction not confirmed, txHash: ${txHash}`);
254
261
  }
255
262
  async sendAndConfirm(transaction, opts) {
256
- const pending = (await this.sendTransaction(transaction, opts)).pending;
257
- const response = await this.waitTransaction(pending.txid, opts?.confirmations);
258
- return lzCore.TransactionReceipt.from(response);
263
+ const pending = await this.sendTransaction(transaction, opts);
264
+ return this.confirmTransaction(pending, opts);
259
265
  }
260
266
  };
261
267
  var _TronSigner = class _TronSigner {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/providers/tron.ts","../src/utils/tron.ts","../src/providers/tronweb.ts","../src/signers/tron.ts","../src/signers/tronweb.ts"],"names":["ethers","TronWeb","Block","BlockWithTransactions","TransactionPending","TransactionReceipt","TransactionResponse","mem","SignedTransaction","sendTronTransaction","trim0x","signTronTx"],"mappings":"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","sourcesContent":["import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\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'\nimport { StrategyFactory, sendTronTransaction } from '@layerzerolabs/tron-utilities'\n\nimport { toEtherFormat, toValidHash } from '../utils/tron'\n\n/**\n * TronProvider is a wrapper around TronWeb that implements the Provider interface\n * It is implemented using ethers.js\n */\nexport class TronProvider implements Provider {\n nativeProvider: ethers.providers.StaticJsonRpcProvider\n\n /**\n *\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n private constructor(\n public url: string,\n apiKey?: string\n ) {\n this.nativeProvider = new ethers.providers.StaticJsonRpcProvider({\n url: StrategyFactory.get(url).asJSONRPC(url),\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronProvider\n static from(client: TronWeb): TronProvider\n\n static from(source: string | TronWeb, apiKey?: string): TronProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else if (source instanceof TronWeb) {\n const { host, headers } = source.fullNode\n return this.from(host, headers['TRON-PRO-API-KEY'])\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n /**\n * Returns the native provider\n */\n get native(): unknown {\n return this.nativeProvider\n }\n\n private buildTronWebFrom = mem(\n (provider: ethers.providers.Provider): TronWeb => {\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n\n return new TronWeb({\n privateKey: undefined,\n fullHost: StrategyFactory.get(url).asREST(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n }\n\n throw new Error(`The nativeSigner is not supported.`)\n },\n {\n cacheKey: (arguments_: [ethers.providers.Provider]): string => {\n const provider = arguments_[0]\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return JSON.stringify({ url, apiKey })\n }\n return JSON.stringify(provider)\n },\n }\n )\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.getBalance(toEtherFormat(address)).then((balance) => balance.toString())\n }\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 async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.getBlockNumber()\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(toValidHash(txHash))\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(toValidHash(txHash))\n return TransactionReceipt.from(response)\n }\n\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 supported in Tron.')\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/json-rpc-api-overview\n // eth_sendRawTransaction is not supported in the JSON-RPC API of the TRON network\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const client = this.buildTronWebFrom(this.nativeProvider)\n const response = await sendTronTransaction(stx, client)\n\n return TransactionPending.from(response)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, opts?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction, opts)).pending as {\n txId: string\n result: unknown\n wait: () => Promise<unknown>\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await pending.wait()\n return TransactionReceipt.from(response)\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n/**\n * ensureJsonRpcUrlPostfix ensures that the URL conforms to the TronGrid API convention by appending /jsonrpc if necessary.\n * @param url\n * @returns\n */\nexport function ensureJsonRpcUrlPostfix(url: string): string {\n // reference: https://developers.tron.network/docs/networks#mainnet\n // TronGrid API:https://api.trongrid.io\n // TronGrid JSON-RPC API: https://api.trongrid.io/jsonrpc\n // so that /jsonrpc is required to connect the JSON-RPC API endpoint\n const value = url.trim().replace(/\\/*$/, '')\n if (!value.endsWith('/jsonrpc')) {\n return value + '/jsonrpc'\n }\n return value\n}\n\n/**\n * removeJsonRpcUrlPostfix removes the /jsonrpc postfix from the URL\n */\nexport function removeJsonRpcUrlPostfix(url: string): string {\n return url.replace(/\\/jsonrpc$/, '')\n}\n\n/**\n * Convert a Tron address to a ethereum hex address\n * reference: https://developers.tron.network/docs/account#account-address-format\n * the TRON network account address can be a Hex format and Base58 format.\n * - The hex format is 42 characters long, removing the leading 41 from Hex format to get the Ethereum address.\n * - The Base58 format is 34 characters long, all Base58 addresses begin with T.\n * @param address\n * @returns\n */\nexport function toEtherFormat(address: string): string {\n if (address.startsWith('T') && address.length === 34) {\n return TronWeb.address.toHex(address).slice(2)\n } else if (address.startsWith('41') && address.length === 42) {\n return address.slice(2)\n } else {\n return address\n }\n}\n\n/**\n * Convert a transaction hash to a valid hash\n * reference: https://developers.tron.network/reference/eth_gettransactionbyhash\n * txHash should be a hex string with 0x, otherwise it will throw an error \"invalid hash\" - INVALID_ARGUMENT\n * @param txHash\n * @returns\n */\nexport function toValidHash(txHash: string): string {\n return ethers.utils.hexlify(txHash, { allowMissingPrefix: true })\n}\n","import TronWeb from 'tronweb'\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'\nimport { sleep } from '@layerzerolabs/lz-utilities'\n\nimport type { TransactionInfo } from 'tronweb'\n\n/**\n * TronWebProvider is a wrapper around TronWeb that implements the Provider interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The format of the response from sendTransaction and the receipt from getTransactionReceipt differs\n * from that of the ethers provider.\n */\nexport class TronWebProvider implements Provider {\n nativeProvider: TronWeb\n\n /**\n * Create a new TronProvider\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n constructor(\n public url: string,\n private apiKey?: string\n ) {\n this.nativeProvider = new TronWeb({\n fullHost: url,\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronWebProvider\n\n static from(source: string, apiKey?: string): TronWebProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeProvider\n }\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.trx.getBalance(address).then((balance: number) => balance.toString())\n }\n\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return Block.from(response)\n }\n\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.trx\n .getBlock('latest')\n .then((block: { block_header: { raw_data: { number?: number } } }) => {\n if (block.block_header.raw_data.number === undefined) {\n throw new Error('Invalid block, block_header.raw_data.number is undefined')\n }\n return block.block_header.raw_data.number\n })\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.trx\n .getBlock(blockTag)\n .then((block: { block_header: { raw_data: { timestamp?: number } } }) => {\n if (block.block_header.raw_data.timestamp === undefined) {\n throw new Error('Invalid block, block_header.raw_data.timestamp is undefined')\n }\n return block.block_header.raw_data.timestamp\n })\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.trx.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/gettransactioninfobyid-1\n const response = await this.nativeProvider.trx.getTransactionInfo(txHash)\n return TransactionReceipt.from(response)\n }\n\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 supported in Tron.')\n }\n\n async sendTransaction(\n transaction: SignedTransaction,\n sendOptions?: { confirmations?: number }\n ): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.trx.sendRawTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const response = await this.nativeProvider.trx.sendRawTransaction(stx, sendOptions)\n\n if (response.code !== undefined) {\n const error = {\n error: response.code,\n message: response.message !== undefined ? TronWeb.toUtf8(response.message) : response.code,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (response.txid === undefined) {\n throw new Error('Invalid response, txid is undefined')\n }\n\n return TransactionPending.from(response)\n }\n\n async waitTransaction(txHash: string, confirmations?: number): Promise<TransactionInfo | undefined> {\n let tries = 0\n while (tries++ < (confirmations ?? 20)) {\n // FIXME: not fully implemented\n const receipt = await this.getTransactionReceipt(txHash)\n const response = receipt.receipt as TransactionInfo\n if (!Object.keys(response).length) {\n // reference: https://developers.tron.network/page/faq\n // Within current testing environment, one block is produced every 3 seconds.\n // But for the local environment, it may take 1 minute to produce a block.\n await sleep(1200)\n continue\n }\n\n if (response.result !== undefined && response.result === 'FAILED') {\n const error = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n error: TronWeb.toUtf8(response.resMessage ?? ''),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (!('contractResult' in response)) {\n const error = {\n error: 'Failed to execute: ' + JSON.stringify(response, null, 2),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n return response\n }\n return undefined\n }\n\n async sendAndConfirm(\n transaction: SignedTransaction,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n const pending = (await this.sendTransaction(transaction, opts)).pending as {\n result: boolean\n txid: string\n code: string\n message: string\n transaction: unknown\n wait: (confirmations?: number) => Promise<unknown>\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await this.waitTransaction(pending.txid, opts?.confirmations)\n return TransactionReceipt.from(response)\n }\n}\n","import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\nimport { ensureJsonRpcUrlPostfix, removeJsonRpcUrlPostfix, toValidHash } from '../utils/tron'\n\n/**\n * TronSigner is a wrapper around TronWeb that implements the Signer interface\n * It is implemented using ethers.js\n */\nexport class TronSigner implements Signer {\n private readonly nativeSigner: ethers.Signer\n\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n static from(source: ethers.Signer): Signer\n static from(client: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path: string): Signer\n\n static from(source: ethers.Signer | TronWeb | string, path?: string): Signer {\n if (source instanceof ethers.Signer) {\n return new this(source)\n } else if (source instanceof TronWeb) {\n const apiKey = source.fullNode.headers['TRON-PRO-API-KEY']\n const provider = new ethers.providers.JsonRpcProvider({\n url: ensureJsonRpcUrlPostfix(source.fullNode.host),\n headers: { ...(typeof apiKey !== 'undefined' ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n\n return new this(new ethers.Wallet(source.defaultPrivateKey as string, provider))\n } else if (typeof source === 'string' && path === undefined) {\n return new this(new ethers.Wallet(source))\n } else if (typeof source === 'string' && path !== undefined) {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n if (!(provider.native instanceof ethers.providers.JsonRpcProvider)) {\n throw new Error('Only JsonRpcProvider is supported.')\n }\n\n const signer = this.nativeSigner.connect(provider.native as ethers.providers.Provider)\n // hack: ethers.utils.defineReadOnly does not work with private properties\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n ethers.utils.defineReadOnly(this, 'nativeSigner' as keyof this, signer as any)\n\n return this\n }\n\n static buildTronWebFrom(signer: ethers.Signer): TronWeb {\n if (signer instanceof ethers.Wallet) {\n if (signer.provider instanceof ethers.providers.JsonRpcProvider) {\n const apiKey = signer.provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return this.createTronWeb(signer.provider.connection.url, signer.privateKey, apiKey)\n }\n }\n throw new Error(`The nativeSigner is not supported.`)\n }\n\n static createTronWeb = mem(\n (url: string, privateKey: string, apiKey?: string): TronWeb => {\n return new TronWeb({\n privateKey: trim0x(privateKey),\n fullHost: removeJsonRpcUrlPostfix(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n },\n { cacheKey: (arguments_) => JSON.stringify(arguments_) }\n )\n\n async getAddress(): Promise<string> {\n // reference: https://developers.tron.network/docs/tvm#differences-from-evm\n return this.nativeSigner.getAddress()\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _opts?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n await pending.wait()\n const response = await this.nativeSigner.provider?.getTransactionReceipt(toValidHash(pending.txId))\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronSigner.validateTransaction(tx)\n const client = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // TODO: add energyFactor\n },\n client\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const tronWeb = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await sendTronTransaction(stx, tronWeb)\n return TransactionPending.from(response)\n }\n\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32' in TronWeb,\n // which will cause the signature to be different from ethers.js if the message length is not 32 bytes\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\n/**\n * TronWebSigner is a wrapper around TronWeb that implements the Signer interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The signature produced by signBuffer is different from the ethers signer\n * when the message length is not 32 bytes\n * - The format of the response from sendTransaction differs from that of the ethers signer.\n */\nexport class TronWebSigner implements Signer {\n private readonly nativeSigner: TronWeb\n\n private constructor(signer: TronWeb) {\n this.nativeSigner = signer\n }\n\n static from(signer: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path?: string): Signer\n\n static from(source: TronWeb | string, path?: string): Signer {\n const fullHost = 'https://api.trongrid.io'\n if (source instanceof TronWeb) {\n return new this(source)\n } else if (typeof source === 'string' && path === undefined) {\n const privateKey = trim0x(source)\n return new this(new TronWeb({ privateKey, fullHost }))\n } else if (typeof source === 'string' && path !== undefined) {\n const privateKey = trim0x(TronWeb.fromMnemonic(source, path).privateKey)\n return new this(new TronWeb({ privateKey, fullHost }))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n const nativeProvider = provider.native as TronWeb\n const { fullNode, solidityNode, eventServer } = nativeProvider.currentProviders() as {\n fullNode: unknown\n solidityNode: unknown\n eventServer: unknown\n }\n this.nativeSigner.setFullNode(fullNode)\n this.nativeSigner.setSolidityNode(solidityNode)\n this.nativeSigner.setEventServer(eventServer)\n return this\n }\n\n async getAddress(): Promise<string> {\n if (typeof this.nativeSigner.defaultAddress.hex !== 'string') {\n throw new Error('Invalid address')\n }\n const retval = this.nativeSigner.defaultAddress.hex.replace(/^41/, '0x')\n return Promise.resolve(retval)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await pending.wait()\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronWebSigner.validateTransaction(tx)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // FIXME: add energyFactor\n },\n this.nativeSigner\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const response = await sendTronTransaction(stx, this.nativeSigner)\n return TransactionPending.from(response)\n }\n\n /**\n * signBuffer signs a buffer using the native signer\n * but the signString function of native signer is different from the ethers signer,\n * TronWeb uses a message header with a fixed 32 bytes length, which means that only if\n * the message length is 32 bytes, the signature will be the same as the ethereum signature.\n * you can find the signString function here:\n * https://github.com/tronprotocol/tronweb/blob/master/src/lib/trx.js\n * @param buffer\n * @returns\n */\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32',\n // so that the signature will be the same as the ethereum signature only if\n // the message length is 32 bytes.\n if (typeof this.nativeSigner.defaultPrivateKey !== 'string') {\n throw new Error('Invalid private key')\n }\n const signedMessage = await TronWeb.Trx.signString(\n ethers.utils.hexlify(buffer),\n this.nativeSigner.defaultPrivateKey,\n false\n )\n const retval = ethers.utils.arrayify(signedMessage)\n return Promise.resolve(retval)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/providers/tron.ts","../src/utils/tron.ts","../src/providers/tronweb.ts","../src/signers/tron.ts","../src/signers/tronweb.ts"],"names":["ethers","TronWeb","Block","BlockWithTransactions","TransactionPending","TransactionReceipt","TransactionResponse","mem","SignedTransaction","sendTronTransaction","trim0x","signTronTx"],"mappings":"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","sourcesContent":["import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\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'\nimport { StrategyFactory, sendTronTransaction } from '@layerzerolabs/tron-utilities'\n\nimport { toEtherFormat, toValidHash } from '../utils/tron'\n\n/**\n * TronProvider is a wrapper around TronWeb that implements the Provider interface\n * It is implemented using ethers.js\n */\nexport class TronProvider implements Provider {\n nativeProvider: ethers.providers.StaticJsonRpcProvider\n\n /**\n *\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n private constructor(\n public url: string,\n apiKey?: string\n ) {\n this.nativeProvider = new ethers.providers.StaticJsonRpcProvider({\n url: StrategyFactory.get(url).asJSONRPC(url),\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronProvider\n static from(client: TronWeb): TronProvider\n\n static from(source: string | TronWeb, apiKey?: string): TronProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else if (source instanceof TronWeb) {\n const { host, headers } = source.fullNode\n return this.from(host, headers['TRON-PRO-API-KEY'])\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n /**\n * Returns the native provider\n */\n get native(): unknown {\n return this.nativeProvider\n }\n\n private buildTronWebFrom = mem(\n (provider: ethers.providers.Provider): TronWeb => {\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n\n return new TronWeb({\n privateKey: undefined,\n fullHost: StrategyFactory.get(url).asREST(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n }\n\n throw new Error(`The nativeSigner is not supported.`)\n },\n {\n cacheKey: (arguments_: [ethers.providers.Provider]): string => {\n const provider = arguments_[0]\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return JSON.stringify({ url, apiKey })\n }\n return JSON.stringify(provider)\n },\n }\n )\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.getBalance(toEtherFormat(address)).then((balance) => balance.toString())\n }\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 async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.getBlockNumber()\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(toValidHash(txHash))\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(toValidHash(txHash))\n return TransactionReceipt.from(response)\n }\n\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 supported in Tron.')\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/json-rpc-api-overview\n // eth_sendRawTransaction is not supported in the JSON-RPC API of the TRON network\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const client = this.buildTronWebFrom(this.nativeProvider)\n const response = await sendTronTransaction(stx, client)\n\n return TransactionPending.from(response)\n }\n\n async confirmTransaction(pending: TransactionPending, _opts?: object): Promise<TransactionReceipt> {\n const nativePending = pending.pending as {\n txId: string\n result: unknown\n wait: () => Promise<unknown>\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await nativePending.wait()\n return TransactionReceipt.from(response)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, opts?: object): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction, opts)\n return this.confirmTransaction(pending, opts)\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n/**\n * ensureJsonRpcUrlPostfix ensures that the URL conforms to the TronGrid API convention by appending /jsonrpc if necessary.\n * @param url\n * @returns\n */\nexport function ensureJsonRpcUrlPostfix(url: string): string {\n // reference: https://developers.tron.network/docs/networks#mainnet\n // TronGrid API:https://api.trongrid.io\n // TronGrid JSON-RPC API: https://api.trongrid.io/jsonrpc\n // so that /jsonrpc is required to connect the JSON-RPC API endpoint\n const value = url.trim().replace(/\\/*$/, '')\n if (!value.endsWith('/jsonrpc')) {\n return value + '/jsonrpc'\n }\n return value\n}\n\n/**\n * removeJsonRpcUrlPostfix removes the /jsonrpc postfix from the URL\n */\nexport function removeJsonRpcUrlPostfix(url: string): string {\n return url.replace(/\\/jsonrpc$/, '')\n}\n\n/**\n * Convert a Tron address to a ethereum hex address\n * reference: https://developers.tron.network/docs/account#account-address-format\n * the TRON network account address can be a Hex format and Base58 format.\n * - The hex format is 42 characters long, removing the leading 41 from Hex format to get the Ethereum address.\n * - The Base58 format is 34 characters long, all Base58 addresses begin with T.\n * @param address\n * @returns\n */\nexport function toEtherFormat(address: string): string {\n if (address.startsWith('T') && address.length === 34) {\n return TronWeb.address.toHex(address).slice(2)\n } else if (address.startsWith('41') && address.length === 42) {\n return address.slice(2)\n } else {\n return address\n }\n}\n\n/**\n * Convert a transaction hash to a valid hash\n * reference: https://developers.tron.network/reference/eth_gettransactionbyhash\n * txHash should be a hex string with 0x, otherwise it will throw an error \"invalid hash\" - INVALID_ARGUMENT\n * @param txHash\n * @returns\n */\nexport function toValidHash(txHash: string): string {\n return ethers.utils.hexlify(txHash, { allowMissingPrefix: true })\n}\n","import TronWeb from 'tronweb'\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'\nimport { sleep } from '@layerzerolabs/lz-utilities'\n\nimport type { TransactionInfo } from 'tronweb'\n\n/**\n * TronWebProvider is a wrapper around TronWeb that implements the Provider interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The format of the response from sendTransaction and the receipt from getTransactionReceipt differs\n * from that of the ethers provider.\n */\nexport class TronWebProvider implements Provider {\n nativeProvider: TronWeb\n\n /**\n * Create a new TronProvider\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n constructor(\n public url: string,\n private apiKey?: string\n ) {\n this.nativeProvider = new TronWeb({\n fullHost: url,\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronWebProvider\n\n static from(source: string, apiKey?: string): TronWebProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeProvider\n }\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.trx.getBalance(address).then((balance: number) => balance.toString())\n }\n\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return Block.from(response)\n }\n\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.trx\n .getBlock('latest')\n .then((block: { block_header: { raw_data: { number?: number } } }) => {\n if (block.block_header.raw_data.number === undefined) {\n throw new Error('Invalid block, block_header.raw_data.number is undefined')\n }\n return block.block_header.raw_data.number\n })\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.trx\n .getBlock(blockTag)\n .then((block: { block_header: { raw_data: { timestamp?: number } } }) => {\n if (block.block_header.raw_data.timestamp === undefined) {\n throw new Error('Invalid block, block_header.raw_data.timestamp is undefined')\n }\n return block.block_header.raw_data.timestamp\n })\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.trx.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/gettransactioninfobyid-1\n const response = await this.nativeProvider.trx.getTransactionInfo(txHash)\n return TransactionReceipt.from(response)\n }\n\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 supported in Tron.')\n }\n\n async sendTransaction(\n transaction: SignedTransaction,\n sendOptions?: { confirmations?: number }\n ): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.trx.sendRawTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const response = await this.nativeProvider.trx.sendRawTransaction(stx, sendOptions)\n\n if (response.code !== undefined) {\n const error = {\n error: response.code,\n message: response.message !== undefined ? TronWeb.toUtf8(response.message) : response.code,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (response.txid === undefined) {\n throw new Error('Invalid response, txid is undefined')\n }\n\n return TransactionPending.from(response)\n }\n\n async confirmTransaction(\n pending: TransactionPending,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const nativePending = pending.pending as {\n result: boolean\n txid: string\n code: string\n message: string\n transaction: unknown\n wait: (confirmations?: number) => Promise<unknown>\n }\n const txHash = nativePending.txid\n const confirmations = opts?.confirmations\n let tries = 0\n while (tries++ < (confirmations ?? 20)) {\n // FIXME: not fully implemented\n const receipt = await this.getTransactionReceipt(txHash)\n const response = receipt.receipt as TransactionInfo\n if (!Object.keys(response).length) {\n // reference: https://developers.tron.network/page/faq\n // Within current testing environment, one block is produced every 3 seconds.\n // But for the local environment, it may take 1 minute to produce a block.\n await sleep(1200)\n continue\n }\n\n if (response.result !== undefined && response.result === 'FAILED') {\n const error = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n error: TronWeb.toUtf8(response.resMessage ?? ''),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (!('contractResult' in response)) {\n const error = {\n error: 'Failed to execute: ' + JSON.stringify(response, null, 2),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n return TransactionReceipt.from(response)\n }\n throw new Error(`Transaction not confirmed, txHash: ${txHash}`)\n }\n\n async sendAndConfirm(\n transaction: SignedTransaction,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n const pending = await this.sendTransaction(transaction, opts)\n return this.confirmTransaction(pending, opts)\n }\n}\n","import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\nimport { ensureJsonRpcUrlPostfix, removeJsonRpcUrlPostfix, toValidHash } from '../utils/tron'\n\n/**\n * TronSigner is a wrapper around TronWeb that implements the Signer interface\n * It is implemented using ethers.js\n */\nexport class TronSigner implements Signer {\n private readonly nativeSigner: ethers.Signer\n\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n static from(source: ethers.Signer): Signer\n static from(client: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path: string): Signer\n\n static from(source: ethers.Signer | TronWeb | string, path?: string): Signer {\n if (source instanceof ethers.Signer) {\n return new this(source)\n } else if (source instanceof TronWeb) {\n const apiKey = source.fullNode.headers['TRON-PRO-API-KEY']\n const provider = new ethers.providers.JsonRpcProvider({\n url: ensureJsonRpcUrlPostfix(source.fullNode.host),\n headers: { ...(typeof apiKey !== 'undefined' ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n\n return new this(new ethers.Wallet(source.defaultPrivateKey as string, provider))\n } else if (typeof source === 'string' && path === undefined) {\n return new this(new ethers.Wallet(source))\n } else if (typeof source === 'string' && path !== undefined) {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n if (!(provider.native instanceof ethers.providers.JsonRpcProvider)) {\n throw new Error('Only JsonRpcProvider is supported.')\n }\n\n const signer = this.nativeSigner.connect(provider.native as ethers.providers.Provider)\n // hack: ethers.utils.defineReadOnly does not work with private properties\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n ethers.utils.defineReadOnly(this, 'nativeSigner' as keyof this, signer as any)\n\n return this\n }\n\n static buildTronWebFrom(signer: ethers.Signer): TronWeb {\n if (signer instanceof ethers.Wallet) {\n if (signer.provider instanceof ethers.providers.JsonRpcProvider) {\n const apiKey = signer.provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return this.createTronWeb(signer.provider.connection.url, signer.privateKey, apiKey)\n }\n }\n throw new Error(`The nativeSigner is not supported.`)\n }\n\n static createTronWeb = mem(\n (url: string, privateKey: string, apiKey?: string): TronWeb => {\n return new TronWeb({\n privateKey: trim0x(privateKey),\n fullHost: removeJsonRpcUrlPostfix(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n },\n { cacheKey: (arguments_) => JSON.stringify(arguments_) }\n )\n\n async getAddress(): Promise<string> {\n // reference: https://developers.tron.network/docs/tvm#differences-from-evm\n return this.nativeSigner.getAddress()\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _opts?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n await pending.wait()\n const response = await this.nativeSigner.provider?.getTransactionReceipt(toValidHash(pending.txId))\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronSigner.validateTransaction(tx)\n const client = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // TODO: add energyFactor\n },\n client\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const tronWeb = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await sendTronTransaction(stx, tronWeb)\n return TransactionPending.from(response)\n }\n\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32' in TronWeb,\n // which will cause the signature to be different from ethers.js if the message length is not 32 bytes\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\n/**\n * TronWebSigner is a wrapper around TronWeb that implements the Signer interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The signature produced by signBuffer is different from the ethers signer\n * when the message length is not 32 bytes\n * - The format of the response from sendTransaction differs from that of the ethers signer.\n */\nexport class TronWebSigner implements Signer {\n private readonly nativeSigner: TronWeb\n\n private constructor(signer: TronWeb) {\n this.nativeSigner = signer\n }\n\n static from(signer: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path?: string): Signer\n\n static from(source: TronWeb | string, path?: string): Signer {\n const fullHost = 'https://api.trongrid.io'\n if (source instanceof TronWeb) {\n return new this(source)\n } else if (typeof source === 'string' && path === undefined) {\n const privateKey = trim0x(source)\n return new this(new TronWeb({ privateKey, fullHost }))\n } else if (typeof source === 'string' && path !== undefined) {\n const privateKey = trim0x(TronWeb.fromMnemonic(source, path).privateKey)\n return new this(new TronWeb({ privateKey, fullHost }))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n const nativeProvider = provider.native as TronWeb\n const { fullNode, solidityNode, eventServer } = nativeProvider.currentProviders() as {\n fullNode: unknown\n solidityNode: unknown\n eventServer: unknown\n }\n this.nativeSigner.setFullNode(fullNode)\n this.nativeSigner.setSolidityNode(solidityNode)\n this.nativeSigner.setEventServer(eventServer)\n return this\n }\n\n async getAddress(): Promise<string> {\n if (typeof this.nativeSigner.defaultAddress.hex !== 'string') {\n throw new Error('Invalid address')\n }\n const retval = this.nativeSigner.defaultAddress.hex.replace(/^41/, '0x')\n return Promise.resolve(retval)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await pending.wait()\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronWebSigner.validateTransaction(tx)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // FIXME: add energyFactor\n },\n this.nativeSigner\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const response = await sendTronTransaction(stx, this.nativeSigner)\n return TransactionPending.from(response)\n }\n\n /**\n * signBuffer signs a buffer using the native signer\n * but the signString function of native signer is different from the ethers signer,\n * TronWeb uses a message header with a fixed 32 bytes length, which means that only if\n * the message length is 32 bytes, the signature will be the same as the ethereum signature.\n * you can find the signString function here:\n * https://github.com/tronprotocol/tronweb/blob/master/src/lib/trx.js\n * @param buffer\n * @returns\n */\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32',\n // so that the signature will be the same as the ethereum signature only if\n // the message length is 32 bytes.\n if (typeof this.nativeSigner.defaultPrivateKey !== 'string') {\n throw new Error('Invalid private key')\n }\n const signedMessage = await TronWeb.Trx.signString(\n ethers.utils.hexlify(buffer),\n this.nativeSigner.defaultPrivateKey,\n false\n )\n const retval = ethers.utils.arrayify(signedMessage)\n return Promise.resolve(retval)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\n }\n}\n"]}
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ethers } from 'ethers';
2
- import TronWeb, { TransactionInfo } from 'tronweb';
2
+ import TronWeb from 'tronweb';
3
3
  import { Provider, Block, BlockWithTransactions, Finality, TransactionResponse, TransactionReceipt, BlockTag, SignedTransaction, TransactionPending, Signer, TransactionRequest } from '@layerzerolabs/lz-core';
4
4
 
5
5
  /**
@@ -32,6 +32,7 @@ declare class TronProvider implements Provider {
32
32
  getTransactionReceipt(txHash: string): Promise<TransactionReceipt>;
33
33
  getTransactionCount(_addressOrName: string | Promise<string>, _blockTag?: BlockTag | Promise<BlockTag>): Promise<number>;
34
34
  sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending>;
35
+ confirmTransaction(pending: TransactionPending, _opts?: object): Promise<TransactionReceipt>;
35
36
  sendAndConfirm(transaction: SignedTransaction, opts?: object): Promise<TransactionReceipt>;
36
37
  }
37
38
 
@@ -67,7 +68,9 @@ declare class TronWebProvider implements Provider {
67
68
  sendTransaction(transaction: SignedTransaction, sendOptions?: {
68
69
  confirmations?: number;
69
70
  }): Promise<TransactionPending>;
70
- waitTransaction(txHash: string, confirmations?: number): Promise<TransactionInfo | undefined>;
71
+ confirmTransaction(pending: TransactionPending, opts?: {
72
+ confirmations?: number;
73
+ }): Promise<TransactionReceipt>;
71
74
  sendAndConfirm(transaction: SignedTransaction, opts?: {
72
75
  confirmations?: number;
73
76
  }): Promise<TransactionReceipt>;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ethers } from 'ethers';
2
- import TronWeb, { TransactionInfo } from 'tronweb';
2
+ import TronWeb from 'tronweb';
3
3
  import { Provider, Block, BlockWithTransactions, Finality, TransactionResponse, TransactionReceipt, BlockTag, SignedTransaction, TransactionPending, Signer, TransactionRequest } from '@layerzerolabs/lz-core';
4
4
 
5
5
  /**
@@ -32,6 +32,7 @@ declare class TronProvider implements Provider {
32
32
  getTransactionReceipt(txHash: string): Promise<TransactionReceipt>;
33
33
  getTransactionCount(_addressOrName: string | Promise<string>, _blockTag?: BlockTag | Promise<BlockTag>): Promise<number>;
34
34
  sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending>;
35
+ confirmTransaction(pending: TransactionPending, _opts?: object): Promise<TransactionReceipt>;
35
36
  sendAndConfirm(transaction: SignedTransaction, opts?: object): Promise<TransactionReceipt>;
36
37
  }
37
38
 
@@ -67,7 +68,9 @@ declare class TronWebProvider implements Provider {
67
68
  sendTransaction(transaction: SignedTransaction, sendOptions?: {
68
69
  confirmations?: number;
69
70
  }): Promise<TransactionPending>;
70
- waitTransaction(txHash: string, confirmations?: number): Promise<TransactionInfo | undefined>;
71
+ confirmTransaction(pending: TransactionPending, opts?: {
72
+ confirmations?: number;
73
+ }): Promise<TransactionReceipt>;
71
74
  sendAndConfirm(transaction: SignedTransaction, opts?: {
72
75
  confirmations?: number;
73
76
  }): Promise<TransactionReceipt>;
package/dist/index.mjs CHANGED
@@ -126,11 +126,15 @@ var TronProvider = class {
126
126
  const response = await sendTronTransaction(stx, client);
127
127
  return TransactionPending.from(response);
128
128
  }
129
- async sendAndConfirm(transaction, opts) {
130
- const pending = (await this.sendTransaction(transaction, opts)).pending;
131
- const response = await pending.wait();
129
+ async confirmTransaction(pending, _opts) {
130
+ const nativePending = pending.pending;
131
+ const response = await nativePending.wait();
132
132
  return TransactionReceipt.from(response);
133
133
  }
134
+ async sendAndConfirm(transaction, opts) {
135
+ const pending = await this.sendTransaction(transaction, opts);
136
+ return this.confirmTransaction(pending, opts);
137
+ }
134
138
  };
135
139
  var TronWebProvider = class {
136
140
  /**
@@ -217,7 +221,10 @@ var TronWebProvider = class {
217
221
  }
218
222
  return TransactionPending.from(response);
219
223
  }
220
- async waitTransaction(txHash, confirmations) {
224
+ async confirmTransaction(pending, opts) {
225
+ const nativePending = pending.pending;
226
+ const txHash = nativePending.txid;
227
+ const confirmations = opts?.confirmations;
221
228
  let tries = 0;
222
229
  while (tries++ < (confirmations ?? 20)) {
223
230
  const receipt = await this.getTransactionReceipt(txHash);
@@ -241,14 +248,13 @@ var TronWebProvider = class {
241
248
  };
242
249
  throw new Error(JSON.stringify(error, null, 2));
243
250
  }
244
- return response;
251
+ return TransactionReceipt.from(response);
245
252
  }
246
- return void 0;
253
+ throw new Error(`Transaction not confirmed, txHash: ${txHash}`);
247
254
  }
248
255
  async sendAndConfirm(transaction, opts) {
249
- const pending = (await this.sendTransaction(transaction, opts)).pending;
250
- const response = await this.waitTransaction(pending.txid, opts?.confirmations);
251
- return TransactionReceipt.from(response);
256
+ const pending = await this.sendTransaction(transaction, opts);
257
+ return this.confirmTransaction(pending, opts);
252
258
  }
253
259
  };
254
260
  var _TronSigner = class _TronSigner {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/providers/tron.ts","../src/utils/tron.ts","../src/providers/tronweb.ts","../src/signers/tron.ts","../src/signers/tronweb.ts"],"names":["ethers","TronWeb","Block","BlockWithTransactions","TransactionPending","TransactionReceipt","TransactionResponse","mem","SignedTransaction","sendTronTransaction","trim0x","signTronTx"],"mappings":";AAAA,SAAS,UAAAA,eAAc;AACvB,OAAO,SAAS;AAChB,OAAOC,cAAa;AAEpB;AAAA,EACI;AAAA,EAEA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,iBAAiB,2BAA2B;;;ACfrD,SAAS,cAAc;AACvB,OAAO,aAAa;AAMb,SAAS,wBAAwB,KAAqB;AAKzD,QAAM,QAAQ,IAAI,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAC3C,MAAI,CAAC,MAAM,SAAS,UAAU,GAAG;AAC7B,WAAO,QAAQ;AAAA,EACnB;AACA,SAAO;AACX;AAKO,SAAS,wBAAwB,KAAqB;AACzD,SAAO,IAAI,QAAQ,cAAc,EAAE;AACvC;AAWO,SAAS,cAAc,SAAyB;AACnD,MAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,IAAI;AAClD,WAAO,QAAQ,QAAQ,MAAM,OAAO,EAAE,MAAM,CAAC;AAAA,EACjD,WAAW,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW,IAAI;AAC1D,WAAO,QAAQ,MAAM,CAAC;AAAA,EAC1B,OAAO;AACH,WAAO;AAAA,EACX;AACJ;AASO,SAAS,YAAY,QAAwB;AAChD,SAAO,OAAO,MAAM,QAAQ,QAAQ,EAAE,oBAAoB,KAAK,CAAC;AACpE;;;AD/BO,IAAM,eAAN,MAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,YACG,KACP,QACF;AAFS;AAiCX,SAAQ,mBAAmB;AAAA,MACvB,CAAC,aAAiD;AAC9C,YAAI,oBAAoBD,QAAO,UAAU,iBAAiB;AACtD,gBAAM,EAAE,IAAI,IAAI,SAAS;AACzB,gBAAM,SAAS,SAAS,WAAW,UAAU,kBAAkB;AAE/D,iBAAO,IAAIC,SAAQ;AAAA,YACf,YAAY;AAAA,YACZ,UAAU,gBAAgB,IAAI,GAAG,EAAE,OAAO,GAAG;AAAA,YAC7C,SAAS,EAAE,GAAI,WAAW,SAAY,EAAE,oBAAoB,OAAO,IAAI,CAAC,EAAG;AAAA,UAC/E,CAAC;AAAA,QACL;AAEA,cAAM,IAAI,MAAM,oCAAoC;AAAA,MACxD;AAAA,MACA;AAAA,QACI,UAAU,CAAC,eAAoD;AAC3D,gBAAM,WAAW,WAAW,CAAC;AAC7B,cAAI,oBAAoBD,QAAO,UAAU,iBAAiB;AACtD,kBAAM,EAAE,IAAI,IAAI,SAAS;AACzB,kBAAM,SAAS,SAAS,WAAW,UAAU,kBAAkB;AAC/D,mBAAO,KAAK,UAAU,EAAE,KAAK,OAAO,CAAC;AAAA,UACzC;AACA,iBAAO,KAAK,UAAU,QAAQ;AAAA,QAClC;AAAA,MACJ;AAAA,IACJ;AAxDI,SAAK,iBAAiB,IAAIA,QAAO,UAAU,sBAAsB;AAAA,MAC7D,KAAK,gBAAgB,IAAI,GAAG,EAAE,UAAU,GAAG;AAAA,MAC3C,SAAS;AAAA;AAAA,QAEL,GAAI,WAAW,SAAY,EAAE,oBAAoB,OAAO,IAAI,CAAC;AAAA,MACjE;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAKA,OAAO,KAAK,QAA0B,QAA+B;AACjE,QAAI,OAAO,WAAW,UAAU;AAC5B,aAAO,IAAI,KAAK,QAAQ,MAAM;AAAA,IAClC,WAAW,kBAAkBC,UAAS;AAClC,YAAM,EAAE,MAAM,QAAQ,IAAI,OAAO;AACjC,aAAO,KAAK,KAAK,MAAM,QAAQ,kBAAkB,CAAC;AAAA,IACtD,OAAO;AACH,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EA8BA,MAAM,WAAW,SAAkC;AAC/C,WAAO,KAAK,eAAe,WAAW,cAAc,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,QAAQ,SAAS,CAAC;AAAA,EACtG;AAAA,EAEA,MAAM,SAAS,UAA2C;AACtD,UAAM,WAAW,MAAM,KAAK,eAAe,SAAS,QAAQ;AAC5D,WAAO,MAAM,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEA,MAAM,yBAAyB,UAA2D;AACtF,UAAM,WAAW,MAAM,KAAK,eAAe,yBAAyB,QAAQ;AAC5E,WAAO,sBAAsB,KAAK,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAM,iBAAkC;AACpC,WAAO,KAAK,eAAe,eAAe;AAAA,EAC9C;AAAA,EAEA,MAAM,kBAAkB,UAA4C;AAChE,WAAO,KAAK,eAAe,SAAS,QAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,SAAS;AAAA,EACjF;AAAA,EAEA,MAAM,QAAQ,WAAuC;AACjD,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AAAA,EAEA,MAAM,eAAe,QAA8C;AAC/D,UAAM,WAAW,MAAM,KAAK,eAAe,eAAe,YAAY,MAAM,CAAC;AAC7E,WAAO,oBAAoB,KAAK,QAAQ;AAAA,EAC5C;AAAA,EAEA,MAAM,sBAAsB,QAA6C;AACrE,UAAM,WAAW,MAAM,KAAK,eAAe,sBAAsB,YAAY,MAAM,CAAC;AACpF,WAAO,mBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,oBACF,gBACA,WACe;AACf,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AAAA,EAEA,MAAM,gBAAgB,aAAgC,cAAoD;AAItG,UAAM,MAAM,YAAY;AACxB,UAAM,SAAS,KAAK,iBAAiB,KAAK,cAAc;AACxD,UAAM,WAAW,MAAM,oBAAoB,KAAK,MAAM;AAEtD,WAAO,mBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,eAAe,aAAgC,MAA4C;AAC7F,UAAM,WAAW,MAAM,KAAK,gBAAgB,aAAa,IAAI,GAAG;AAMhE,UAAM,WAAW,MAAM,QAAQ,KAAK;AACpC,WAAO,mBAAmB,KAAK,QAAQ;AAAA,EAC3C;AACJ;;;AE/JA,OAAOA,cAAa;AAEpB;AAAA,EACI,SAAAC;AAAA,EAEA,yBAAAC;AAAA,EAIA,sBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,uBAAAC;AAAA,OACG;AACP,SAAS,aAAa;AAYf,IAAM,kBAAN,MAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ7C,YACW,KACC,QACV;AAFS;AACC;AAER,SAAK,iBAAiB,IAAIL,SAAQ;AAAA,MAC9B,UAAU;AAAA,MACV,SAAS;AAAA;AAAA,QAEL,GAAI,WAAW,SAAY,EAAE,oBAAoB,OAAO,IAAI,CAAC;AAAA,MACjE;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAIA,OAAO,KAAK,QAAgB,QAAkC;AAC1D,QAAI,OAAO,WAAW,UAAU;AAC5B,aAAO,IAAI,KAAK,QAAQ,MAAM;AAAA,IAClC,OAAO;AACH,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,IAAI,SAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,WAAW,SAAkC;AAC/C,WAAO,KAAK,eAAe,IAAI,WAAW,OAAO,EAAE,KAAK,CAAC,YAAoB,QAAQ,SAAS,CAAC;AAAA,EACnG;AAAA,EAEA,MAAM,SAAS,UAA2C;AACtD,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,SAAS,QAAQ;AAChE,WAAOC,OAAM,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEA,MAAM,yBAAyB,UAA2D;AACtF,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,SAAS,QAAQ;AAChE,WAAOC,uBAAsB,KAAK,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAM,iBAAkC;AACpC,WAAO,KAAK,eAAe,IACtB,SAAS,QAAQ,EACjB,KAAK,CAAC,UAA+D;AAClE,UAAI,MAAM,aAAa,SAAS,WAAW,QAAW;AAClD,cAAM,IAAI,MAAM,0DAA0D;AAAA,MAC9E;AACA,aAAO,MAAM,aAAa,SAAS;AAAA,IACvC,CAAC;AAAA,EACT;AAAA,EAEA,MAAM,kBAAkB,UAA4C;AAChE,WAAO,KAAK,eAAe,IACtB,SAAS,QAAQ,EACjB,KAAK,CAAC,UAAkE;AACrE,UAAI,MAAM,aAAa,SAAS,cAAc,QAAW;AACrD,cAAM,IAAI,MAAM,6DAA6D;AAAA,MACjF;AACA,aAAO,MAAM,aAAa,SAAS;AAAA,IACvC,CAAC;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,WAAuC;AACjD,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AAAA,EAEA,MAAM,eAAe,QAA8C;AAC/D,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,eAAe,MAAM;AACpE,WAAOG,qBAAoB,KAAK,QAAQ;AAAA,EAC5C;AAAA,EAEA,MAAM,sBAAsB,QAA6C;AAErE,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,mBAAmB,MAAM;AACxE,WAAOD,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,oBACF,gBACA,WACe;AACf,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AAAA,EAEA,MAAM,gBACF,aACA,aAC2B;AAG3B,UAAM,MAAM,YAAY;AACxB,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,mBAAmB,KAAK,WAAW;AAElF,QAAI,SAAS,SAAS,QAAW;AAC7B,YAAM,QAAQ;AAAA,QACV,OAAO,SAAS;AAAA,QAChB,SAAS,SAAS,YAAY,SAAYJ,SAAQ,OAAO,SAAS,OAAO,IAAI,SAAS;AAAA,MAC1F;AACA,YAAM,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,IAClD;AAEA,QAAI,SAAS,SAAS,QAAW;AAC7B,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACzD;AAEA,WAAOG,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,gBAAgB,QAAgB,eAA8D;AAChG,QAAI,QAAQ;AACZ,WAAO,WAAW,iBAAiB,KAAK;AAEpC,YAAM,UAAU,MAAM,KAAK,sBAAsB,MAAM;AACvD,YAAM,WAAW,QAAQ;AACzB,UAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,QAAQ;AAI/B,cAAM,MAAM,IAAI;AAChB;AAAA,MACJ;AAEA,UAAI,SAAS,WAAW,UAAa,SAAS,WAAW,UAAU;AAC/D,cAAM,QAAQ;AAAA;AAAA,UAEV,OAAOH,SAAQ,OAAO,SAAS,cAAc,EAAE;AAAA,UAC/C;AAAA,QACJ;AACA,cAAM,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,MAClD;AAEA,UAAI,EAAE,oBAAoB,WAAW;AACjC,cAAM,QAAQ;AAAA,UACV,OAAO,wBAAwB,KAAK,UAAU,UAAU,MAAM,CAAC;AAAA,UAC/D;AAAA,QACJ;AACA,cAAM,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,MAClD;AAEA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,eACF,aACA,MAC2B;AAE3B,UAAM,WAAW,MAAM,KAAK,gBAAgB,aAAa,IAAI,GAAG;AAUhE,UAAM,WAAW,MAAM,KAAK,gBAAgB,QAAQ,MAAM,MAAM,aAAa;AAC7E,WAAOI,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AACJ;;;ACtMA,SAAS,UAAAL,eAAc;AACvB,OAAOO,UAAS;AAChB,OAAON,cAAa;AAEpB;AAAA,EAEI,qBAAAO;AAAA,EAEA,sBAAAJ;AAAA,EACA,sBAAAC;AAAA,OAEG;AACP,SAAS,cAAc;AACvB,SAAS,uBAAAI,sBAAqB,kBAAkB;AAQzC,IAAM,cAAN,MAAM,YAA6B;AAAA,EAG9B,YAAY,QAAuB;AACvC,SAAK,eAAe;AAAA,EACxB;AAAA,EAOA,OAAO,KAAK,QAA0C,MAAuB;AACzE,QAAI,kBAAkBT,QAAO,QAAQ;AACjC,aAAO,IAAI,KAAK,MAAM;AAAA,IAC1B,WAAW,kBAAkBC,UAAS;AAClC,YAAM,SAAS,OAAO,SAAS,QAAQ,kBAAkB;AACzD,YAAM,WAAW,IAAID,QAAO,UAAU,gBAAgB;AAAA,QAClD,KAAK,wBAAwB,OAAO,SAAS,IAAI;AAAA,QACjD,SAAS,EAAE,GAAI,OAAO,WAAW,cAAc,EAAE,oBAAoB,OAAO,IAAI,CAAC,EAAG;AAAA,MACxF,CAAC;AAED,aAAO,IAAI,KAAK,IAAIA,QAAO,OAAO,OAAO,mBAA6B,QAAQ,CAAC;AAAA,IACnF,WAAW,OAAO,WAAW,YAAY,SAAS,QAAW;AACzD,aAAO,IAAI,KAAK,IAAIA,QAAO,OAAO,MAAM,CAAC;AAAA,IAC7C,WAAW,OAAO,WAAW,YAAY,SAAS,QAAW;AACzD,aAAO,IAAI,KAAKA,QAAO,OAAO,aAAa,QAAQ,IAAI,CAAC;AAAA,IAC5D,OAAO;AACH,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,IAAI,SAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,QAAQ,UAA4B;AAChC,QAAI,EAAE,SAAS,kBAAkBA,QAAO,UAAU,kBAAkB;AAChE,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACxD;AAEA,UAAM,SAAS,KAAK,aAAa,QAAQ,SAAS,MAAmC;AAGrF,IAAAA,QAAO,MAAM,eAAe,MAAM,gBAA8B,MAAa;AAE7E,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,iBAAiB,QAAgC;AACpD,QAAI,kBAAkBA,QAAO,QAAQ;AACjC,UAAI,OAAO,oBAAoBA,QAAO,UAAU,iBAAiB;AAC7D,cAAM,SAAS,OAAO,SAAS,WAAW,UAAU,kBAAkB;AACtE,eAAO,KAAK,cAAc,OAAO,SAAS,WAAW,KAAK,OAAO,YAAY,MAAM;AAAA,MACvF;AAAA,IACJ;AACA,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACxD;AAAA,EAaA,MAAM,aAA8B;AAEhC,WAAO,KAAK,aAAa,WAAW;AAAA,EACxC;AAAA,EAEA,MAAM,eAAe,aAAgC,OAA6C;AAC9F,UAAM,WAAW,MAAM,KAAK,gBAAgB,WAAW,GAAG;AAK1D,UAAM,QAAQ,KAAK;AACnB,UAAM,WAAW,MAAM,KAAK,aAAa,UAAU,sBAAsB,YAAY,QAAQ,IAAI,CAAC;AAClG,WAAOK,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,gBAAgB,aAA6D;AAE/E,UAAM,KAAK,YAAY;AACvB,QAAI,GAAG,SAAS,UAAa,GAAG,OAAO,QAAW;AAC9C,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AAEA,gBAAW,oBAAoB,EAAE;AACjC,UAAM,SAAS,YAAW,iBAAiB,KAAK,YAAY;AAC5D,UAAM,WAAW,MAAM;AAAA,MACnB;AAAA,QACI,MAAM,GAAG;AAAA,QACT,IAAI,GAAG;AAAA,QACP,UAAU,GAAG,UAAU,SAAS;AAAA,QAChC,UAAU,GAAG,UAAU,SAAS;AAAA,QAChC,OAAO,GAAG,OAAO,SAAS;AAAA;AAAA,MAE9B;AAAA,MACA;AAAA,IACJ;AACA,WAAOG,mBAAkB,KAAK,QAAQ;AAAA,EAC1C;AAAA,EAEA,MAAM,gBAAgB,aAAgC,cAAoD;AAEtG,UAAM,MAAM,YAAY;AAExB,UAAM,UAAU,YAAW,iBAAiB,KAAK,YAAY;AAC7D,UAAM,WAAW,MAAMC,qBAAoB,KAAK,OAAO;AACvD,WAAOL,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,WAAW,QAAyC;AAGtD,UAAM,gBAAgB,MAAM,KAAK,aAAa,YAAY,MAAM;AAChE,WAAOJ,QAAO,MAAM,SAAS,aAAa;AAAA,EAC9C;AAAA,EAEA,OAAO,oBAAoB,aAAmD;AAC1E,QAAI,YAAY,SAAS,UAAa,YAAY,OAAO,QAAW;AAChE,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,iBAAiB,gBAAsD;AACzE,WAAO,QAAQ,OAAO,IAAI,MAAM,yBAAyB,CAAC;AAAA,EAC9D;AACJ;AAvIa,YA2DF,gBAAgBO;AAAA,EACnB,CAAC,KAAa,YAAoB,WAA6B;AAC3D,WAAO,IAAIN,SAAQ;AAAA,MACf,YAAY,OAAO,UAAU;AAAA,MAC7B,UAAU,wBAAwB,GAAG;AAAA,MACrC,SAAS,EAAE,GAAI,WAAW,SAAY,EAAE,oBAAoB,OAAO,IAAI,CAAC,EAAG;AAAA,IAC/E,CAAC;AAAA,EACL;AAAA,EACA,EAAE,UAAU,CAAC,eAAe,KAAK,UAAU,UAAU,EAAE;AAC3D;AApEG,IAAM,aAAN;;;ACrBP,SAAS,UAAAD,eAAc;AACvB,OAAOC,cAAa;AAEpB;AAAA,EAEI,qBAAAO;AAAA,EAEA,sBAAAJ;AAAA,EACA,sBAAAC;AAAA,OAEG;AACP,SAAS,UAAAK,eAAc;AACvB,SAAS,uBAAAD,sBAAqB,cAAAE,mBAAkB;AAWzC,IAAM,gBAAN,MAAM,eAAgC;AAAA,EAGjC,YAAY,QAAiB;AACjC,SAAK,eAAe;AAAA,EACxB;AAAA,EAMA,OAAO,KAAK,QAA0B,MAAuB;AACzD,UAAM,WAAW;AACjB,QAAI,kBAAkBV,UAAS;AAC3B,aAAO,IAAI,KAAK,MAAM;AAAA,IAC1B,WAAW,OAAO,WAAW,YAAY,SAAS,QAAW;AACzD,YAAM,aAAaS,QAAO,MAAM;AAChC,aAAO,IAAI,KAAK,IAAIT,SAAQ,EAAE,YAAY,SAAS,CAAC,CAAC;AAAA,IACzD,WAAW,OAAO,WAAW,YAAY,SAAS,QAAW;AACzD,YAAM,aAAaS,QAAOT,SAAQ,aAAa,QAAQ,IAAI,EAAE,UAAU;AACvE,aAAO,IAAI,KAAK,IAAIA,SAAQ,EAAE,YAAY,SAAS,CAAC,CAAC;AAAA,IACzD,OAAO;AACH,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,IAAI,SAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,QAAQ,UAA4B;AAChC,UAAM,iBAAiB,SAAS;AAChC,UAAM,EAAE,UAAU,cAAc,YAAY,IAAI,eAAe,iBAAiB;AAKhF,SAAK,aAAa,YAAY,QAAQ;AACtC,SAAK,aAAa,gBAAgB,YAAY;AAC9C,SAAK,aAAa,eAAe,WAAW;AAC5C,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,aAA8B;AAChC,QAAI,OAAO,KAAK,aAAa,eAAe,QAAQ,UAAU;AAC1D,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACrC;AACA,UAAM,SAAS,KAAK,aAAa,eAAe,IAAI,QAAQ,OAAO,IAAI;AACvE,WAAO,QAAQ,QAAQ,MAAM;AAAA,EACjC;AAAA,EAEA,MAAM,eAAe,aAAgC,cAAoD;AACrG,UAAM,WAAW,MAAM,KAAK,gBAAgB,WAAW,GAAG;AAK1D,UAAM,WAAW,MAAM,QAAQ,KAAK;AACpC,WAAOI,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,gBAAgB,aAA6D;AAE/E,UAAM,KAAK,YAAY;AACvB,QAAI,GAAG,SAAS,UAAa,GAAG,OAAO,QAAW;AAC9C,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AAEA,mBAAc,oBAAoB,EAAE;AACpC,UAAM,WAAW,MAAMM;AAAA,MACnB;AAAA,QACI,MAAM,GAAG;AAAA,QACT,IAAI,GAAG;AAAA,QACP,UAAU,GAAG,UAAU,SAAS;AAAA,QAChC,UAAU,GAAG,UAAU,SAAS;AAAA,QAChC,OAAO,GAAG,OAAO,SAAS;AAAA;AAAA,MAE9B;AAAA,MACA,KAAK;AAAA,IACT;AACA,WAAOH,mBAAkB,KAAK,QAAQ;AAAA,EAC1C;AAAA,EAEA,MAAM,gBAAgB,aAAgC,cAAoD;AAEtG,UAAM,MAAM,YAAY;AAExB,UAAM,WAAW,MAAMC,qBAAoB,KAAK,KAAK,YAAY;AACjE,WAAOL,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,WAAW,QAAyC;AAItD,QAAI,OAAO,KAAK,aAAa,sBAAsB,UAAU;AACzD,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACzC;AACA,UAAM,gBAAgB,MAAMH,SAAQ,IAAI;AAAA,MACpCD,QAAO,MAAM,QAAQ,MAAM;AAAA,MAC3B,KAAK,aAAa;AAAA,MAClB;AAAA,IACJ;AACA,UAAM,SAASA,QAAO,MAAM,SAAS,aAAa;AAClD,WAAO,QAAQ,QAAQ,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,oBAAoB,aAAmD;AAC1E,QAAI,YAAY,SAAS,UAAa,YAAY,OAAO,QAAW;AAChE,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,iBAAiB,gBAAsD;AACzE,WAAO,QAAQ,OAAO,IAAI,MAAM,yBAAyB,CAAC;AAAA,EAC9D;AACJ","sourcesContent":["import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\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'\nimport { StrategyFactory, sendTronTransaction } from '@layerzerolabs/tron-utilities'\n\nimport { toEtherFormat, toValidHash } from '../utils/tron'\n\n/**\n * TronProvider is a wrapper around TronWeb that implements the Provider interface\n * It is implemented using ethers.js\n */\nexport class TronProvider implements Provider {\n nativeProvider: ethers.providers.StaticJsonRpcProvider\n\n /**\n *\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n private constructor(\n public url: string,\n apiKey?: string\n ) {\n this.nativeProvider = new ethers.providers.StaticJsonRpcProvider({\n url: StrategyFactory.get(url).asJSONRPC(url),\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronProvider\n static from(client: TronWeb): TronProvider\n\n static from(source: string | TronWeb, apiKey?: string): TronProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else if (source instanceof TronWeb) {\n const { host, headers } = source.fullNode\n return this.from(host, headers['TRON-PRO-API-KEY'])\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n /**\n * Returns the native provider\n */\n get native(): unknown {\n return this.nativeProvider\n }\n\n private buildTronWebFrom = mem(\n (provider: ethers.providers.Provider): TronWeb => {\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n\n return new TronWeb({\n privateKey: undefined,\n fullHost: StrategyFactory.get(url).asREST(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n }\n\n throw new Error(`The nativeSigner is not supported.`)\n },\n {\n cacheKey: (arguments_: [ethers.providers.Provider]): string => {\n const provider = arguments_[0]\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return JSON.stringify({ url, apiKey })\n }\n return JSON.stringify(provider)\n },\n }\n )\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.getBalance(toEtherFormat(address)).then((balance) => balance.toString())\n }\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 async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.getBlockNumber()\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(toValidHash(txHash))\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(toValidHash(txHash))\n return TransactionReceipt.from(response)\n }\n\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 supported in Tron.')\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/json-rpc-api-overview\n // eth_sendRawTransaction is not supported in the JSON-RPC API of the TRON network\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const client = this.buildTronWebFrom(this.nativeProvider)\n const response = await sendTronTransaction(stx, client)\n\n return TransactionPending.from(response)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, opts?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction, opts)).pending as {\n txId: string\n result: unknown\n wait: () => Promise<unknown>\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await pending.wait()\n return TransactionReceipt.from(response)\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n/**\n * ensureJsonRpcUrlPostfix ensures that the URL conforms to the TronGrid API convention by appending /jsonrpc if necessary.\n * @param url\n * @returns\n */\nexport function ensureJsonRpcUrlPostfix(url: string): string {\n // reference: https://developers.tron.network/docs/networks#mainnet\n // TronGrid API:https://api.trongrid.io\n // TronGrid JSON-RPC API: https://api.trongrid.io/jsonrpc\n // so that /jsonrpc is required to connect the JSON-RPC API endpoint\n const value = url.trim().replace(/\\/*$/, '')\n if (!value.endsWith('/jsonrpc')) {\n return value + '/jsonrpc'\n }\n return value\n}\n\n/**\n * removeJsonRpcUrlPostfix removes the /jsonrpc postfix from the URL\n */\nexport function removeJsonRpcUrlPostfix(url: string): string {\n return url.replace(/\\/jsonrpc$/, '')\n}\n\n/**\n * Convert a Tron address to a ethereum hex address\n * reference: https://developers.tron.network/docs/account#account-address-format\n * the TRON network account address can be a Hex format and Base58 format.\n * - The hex format is 42 characters long, removing the leading 41 from Hex format to get the Ethereum address.\n * - The Base58 format is 34 characters long, all Base58 addresses begin with T.\n * @param address\n * @returns\n */\nexport function toEtherFormat(address: string): string {\n if (address.startsWith('T') && address.length === 34) {\n return TronWeb.address.toHex(address).slice(2)\n } else if (address.startsWith('41') && address.length === 42) {\n return address.slice(2)\n } else {\n return address\n }\n}\n\n/**\n * Convert a transaction hash to a valid hash\n * reference: https://developers.tron.network/reference/eth_gettransactionbyhash\n * txHash should be a hex string with 0x, otherwise it will throw an error \"invalid hash\" - INVALID_ARGUMENT\n * @param txHash\n * @returns\n */\nexport function toValidHash(txHash: string): string {\n return ethers.utils.hexlify(txHash, { allowMissingPrefix: true })\n}\n","import TronWeb from 'tronweb'\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'\nimport { sleep } from '@layerzerolabs/lz-utilities'\n\nimport type { TransactionInfo } from 'tronweb'\n\n/**\n * TronWebProvider is a wrapper around TronWeb that implements the Provider interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The format of the response from sendTransaction and the receipt from getTransactionReceipt differs\n * from that of the ethers provider.\n */\nexport class TronWebProvider implements Provider {\n nativeProvider: TronWeb\n\n /**\n * Create a new TronProvider\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n constructor(\n public url: string,\n private apiKey?: string\n ) {\n this.nativeProvider = new TronWeb({\n fullHost: url,\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronWebProvider\n\n static from(source: string, apiKey?: string): TronWebProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeProvider\n }\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.trx.getBalance(address).then((balance: number) => balance.toString())\n }\n\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return Block.from(response)\n }\n\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.trx\n .getBlock('latest')\n .then((block: { block_header: { raw_data: { number?: number } } }) => {\n if (block.block_header.raw_data.number === undefined) {\n throw new Error('Invalid block, block_header.raw_data.number is undefined')\n }\n return block.block_header.raw_data.number\n })\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.trx\n .getBlock(blockTag)\n .then((block: { block_header: { raw_data: { timestamp?: number } } }) => {\n if (block.block_header.raw_data.timestamp === undefined) {\n throw new Error('Invalid block, block_header.raw_data.timestamp is undefined')\n }\n return block.block_header.raw_data.timestamp\n })\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.trx.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/gettransactioninfobyid-1\n const response = await this.nativeProvider.trx.getTransactionInfo(txHash)\n return TransactionReceipt.from(response)\n }\n\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 supported in Tron.')\n }\n\n async sendTransaction(\n transaction: SignedTransaction,\n sendOptions?: { confirmations?: number }\n ): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.trx.sendRawTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const response = await this.nativeProvider.trx.sendRawTransaction(stx, sendOptions)\n\n if (response.code !== undefined) {\n const error = {\n error: response.code,\n message: response.message !== undefined ? TronWeb.toUtf8(response.message) : response.code,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (response.txid === undefined) {\n throw new Error('Invalid response, txid is undefined')\n }\n\n return TransactionPending.from(response)\n }\n\n async waitTransaction(txHash: string, confirmations?: number): Promise<TransactionInfo | undefined> {\n let tries = 0\n while (tries++ < (confirmations ?? 20)) {\n // FIXME: not fully implemented\n const receipt = await this.getTransactionReceipt(txHash)\n const response = receipt.receipt as TransactionInfo\n if (!Object.keys(response).length) {\n // reference: https://developers.tron.network/page/faq\n // Within current testing environment, one block is produced every 3 seconds.\n // But for the local environment, it may take 1 minute to produce a block.\n await sleep(1200)\n continue\n }\n\n if (response.result !== undefined && response.result === 'FAILED') {\n const error = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n error: TronWeb.toUtf8(response.resMessage ?? ''),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (!('contractResult' in response)) {\n const error = {\n error: 'Failed to execute: ' + JSON.stringify(response, null, 2),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n return response\n }\n return undefined\n }\n\n async sendAndConfirm(\n transaction: SignedTransaction,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n const pending = (await this.sendTransaction(transaction, opts)).pending as {\n result: boolean\n txid: string\n code: string\n message: string\n transaction: unknown\n wait: (confirmations?: number) => Promise<unknown>\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await this.waitTransaction(pending.txid, opts?.confirmations)\n return TransactionReceipt.from(response)\n }\n}\n","import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\nimport { ensureJsonRpcUrlPostfix, removeJsonRpcUrlPostfix, toValidHash } from '../utils/tron'\n\n/**\n * TronSigner is a wrapper around TronWeb that implements the Signer interface\n * It is implemented using ethers.js\n */\nexport class TronSigner implements Signer {\n private readonly nativeSigner: ethers.Signer\n\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n static from(source: ethers.Signer): Signer\n static from(client: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path: string): Signer\n\n static from(source: ethers.Signer | TronWeb | string, path?: string): Signer {\n if (source instanceof ethers.Signer) {\n return new this(source)\n } else if (source instanceof TronWeb) {\n const apiKey = source.fullNode.headers['TRON-PRO-API-KEY']\n const provider = new ethers.providers.JsonRpcProvider({\n url: ensureJsonRpcUrlPostfix(source.fullNode.host),\n headers: { ...(typeof apiKey !== 'undefined' ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n\n return new this(new ethers.Wallet(source.defaultPrivateKey as string, provider))\n } else if (typeof source === 'string' && path === undefined) {\n return new this(new ethers.Wallet(source))\n } else if (typeof source === 'string' && path !== undefined) {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n if (!(provider.native instanceof ethers.providers.JsonRpcProvider)) {\n throw new Error('Only JsonRpcProvider is supported.')\n }\n\n const signer = this.nativeSigner.connect(provider.native as ethers.providers.Provider)\n // hack: ethers.utils.defineReadOnly does not work with private properties\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n ethers.utils.defineReadOnly(this, 'nativeSigner' as keyof this, signer as any)\n\n return this\n }\n\n static buildTronWebFrom(signer: ethers.Signer): TronWeb {\n if (signer instanceof ethers.Wallet) {\n if (signer.provider instanceof ethers.providers.JsonRpcProvider) {\n const apiKey = signer.provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return this.createTronWeb(signer.provider.connection.url, signer.privateKey, apiKey)\n }\n }\n throw new Error(`The nativeSigner is not supported.`)\n }\n\n static createTronWeb = mem(\n (url: string, privateKey: string, apiKey?: string): TronWeb => {\n return new TronWeb({\n privateKey: trim0x(privateKey),\n fullHost: removeJsonRpcUrlPostfix(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n },\n { cacheKey: (arguments_) => JSON.stringify(arguments_) }\n )\n\n async getAddress(): Promise<string> {\n // reference: https://developers.tron.network/docs/tvm#differences-from-evm\n return this.nativeSigner.getAddress()\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _opts?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n await pending.wait()\n const response = await this.nativeSigner.provider?.getTransactionReceipt(toValidHash(pending.txId))\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronSigner.validateTransaction(tx)\n const client = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // TODO: add energyFactor\n },\n client\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const tronWeb = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await sendTronTransaction(stx, tronWeb)\n return TransactionPending.from(response)\n }\n\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32' in TronWeb,\n // which will cause the signature to be different from ethers.js if the message length is not 32 bytes\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\n/**\n * TronWebSigner is a wrapper around TronWeb that implements the Signer interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The signature produced by signBuffer is different from the ethers signer\n * when the message length is not 32 bytes\n * - The format of the response from sendTransaction differs from that of the ethers signer.\n */\nexport class TronWebSigner implements Signer {\n private readonly nativeSigner: TronWeb\n\n private constructor(signer: TronWeb) {\n this.nativeSigner = signer\n }\n\n static from(signer: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path?: string): Signer\n\n static from(source: TronWeb | string, path?: string): Signer {\n const fullHost = 'https://api.trongrid.io'\n if (source instanceof TronWeb) {\n return new this(source)\n } else if (typeof source === 'string' && path === undefined) {\n const privateKey = trim0x(source)\n return new this(new TronWeb({ privateKey, fullHost }))\n } else if (typeof source === 'string' && path !== undefined) {\n const privateKey = trim0x(TronWeb.fromMnemonic(source, path).privateKey)\n return new this(new TronWeb({ privateKey, fullHost }))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n const nativeProvider = provider.native as TronWeb\n const { fullNode, solidityNode, eventServer } = nativeProvider.currentProviders() as {\n fullNode: unknown\n solidityNode: unknown\n eventServer: unknown\n }\n this.nativeSigner.setFullNode(fullNode)\n this.nativeSigner.setSolidityNode(solidityNode)\n this.nativeSigner.setEventServer(eventServer)\n return this\n }\n\n async getAddress(): Promise<string> {\n if (typeof this.nativeSigner.defaultAddress.hex !== 'string') {\n throw new Error('Invalid address')\n }\n const retval = this.nativeSigner.defaultAddress.hex.replace(/^41/, '0x')\n return Promise.resolve(retval)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await pending.wait()\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronWebSigner.validateTransaction(tx)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // FIXME: add energyFactor\n },\n this.nativeSigner\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const response = await sendTronTransaction(stx, this.nativeSigner)\n return TransactionPending.from(response)\n }\n\n /**\n * signBuffer signs a buffer using the native signer\n * but the signString function of native signer is different from the ethers signer,\n * TronWeb uses a message header with a fixed 32 bytes length, which means that only if\n * the message length is 32 bytes, the signature will be the same as the ethereum signature.\n * you can find the signString function here:\n * https://github.com/tronprotocol/tronweb/blob/master/src/lib/trx.js\n * @param buffer\n * @returns\n */\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32',\n // so that the signature will be the same as the ethereum signature only if\n // the message length is 32 bytes.\n if (typeof this.nativeSigner.defaultPrivateKey !== 'string') {\n throw new Error('Invalid private key')\n }\n const signedMessage = await TronWeb.Trx.signString(\n ethers.utils.hexlify(buffer),\n this.nativeSigner.defaultPrivateKey,\n false\n )\n const retval = ethers.utils.arrayify(signedMessage)\n return Promise.resolve(retval)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/providers/tron.ts","../src/utils/tron.ts","../src/providers/tronweb.ts","../src/signers/tron.ts","../src/signers/tronweb.ts"],"names":["ethers","TronWeb","Block","BlockWithTransactions","TransactionPending","TransactionReceipt","TransactionResponse","mem","SignedTransaction","sendTronTransaction","trim0x","signTronTx"],"mappings":"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","sourcesContent":["import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\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'\nimport { StrategyFactory, sendTronTransaction } from '@layerzerolabs/tron-utilities'\n\nimport { toEtherFormat, toValidHash } from '../utils/tron'\n\n/**\n * TronProvider is a wrapper around TronWeb that implements the Provider interface\n * It is implemented using ethers.js\n */\nexport class TronProvider implements Provider {\n nativeProvider: ethers.providers.StaticJsonRpcProvider\n\n /**\n *\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n private constructor(\n public url: string,\n apiKey?: string\n ) {\n this.nativeProvider = new ethers.providers.StaticJsonRpcProvider({\n url: StrategyFactory.get(url).asJSONRPC(url),\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronProvider\n static from(client: TronWeb): TronProvider\n\n static from(source: string | TronWeb, apiKey?: string): TronProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else if (source instanceof TronWeb) {\n const { host, headers } = source.fullNode\n return this.from(host, headers['TRON-PRO-API-KEY'])\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n /**\n * Returns the native provider\n */\n get native(): unknown {\n return this.nativeProvider\n }\n\n private buildTronWebFrom = mem(\n (provider: ethers.providers.Provider): TronWeb => {\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n\n return new TronWeb({\n privateKey: undefined,\n fullHost: StrategyFactory.get(url).asREST(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n }\n\n throw new Error(`The nativeSigner is not supported.`)\n },\n {\n cacheKey: (arguments_: [ethers.providers.Provider]): string => {\n const provider = arguments_[0]\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return JSON.stringify({ url, apiKey })\n }\n return JSON.stringify(provider)\n },\n }\n )\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.getBalance(toEtherFormat(address)).then((balance) => balance.toString())\n }\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 async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.getBlockNumber()\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(toValidHash(txHash))\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(toValidHash(txHash))\n return TransactionReceipt.from(response)\n }\n\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 supported in Tron.')\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/json-rpc-api-overview\n // eth_sendRawTransaction is not supported in the JSON-RPC API of the TRON network\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const client = this.buildTronWebFrom(this.nativeProvider)\n const response = await sendTronTransaction(stx, client)\n\n return TransactionPending.from(response)\n }\n\n async confirmTransaction(pending: TransactionPending, _opts?: object): Promise<TransactionReceipt> {\n const nativePending = pending.pending as {\n txId: string\n result: unknown\n wait: () => Promise<unknown>\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await nativePending.wait()\n return TransactionReceipt.from(response)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, opts?: object): Promise<TransactionReceipt> {\n const pending = await this.sendTransaction(transaction, opts)\n return this.confirmTransaction(pending, opts)\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n/**\n * ensureJsonRpcUrlPostfix ensures that the URL conforms to the TronGrid API convention by appending /jsonrpc if necessary.\n * @param url\n * @returns\n */\nexport function ensureJsonRpcUrlPostfix(url: string): string {\n // reference: https://developers.tron.network/docs/networks#mainnet\n // TronGrid API:https://api.trongrid.io\n // TronGrid JSON-RPC API: https://api.trongrid.io/jsonrpc\n // so that /jsonrpc is required to connect the JSON-RPC API endpoint\n const value = url.trim().replace(/\\/*$/, '')\n if (!value.endsWith('/jsonrpc')) {\n return value + '/jsonrpc'\n }\n return value\n}\n\n/**\n * removeJsonRpcUrlPostfix removes the /jsonrpc postfix from the URL\n */\nexport function removeJsonRpcUrlPostfix(url: string): string {\n return url.replace(/\\/jsonrpc$/, '')\n}\n\n/**\n * Convert a Tron address to a ethereum hex address\n * reference: https://developers.tron.network/docs/account#account-address-format\n * the TRON network account address can be a Hex format and Base58 format.\n * - The hex format is 42 characters long, removing the leading 41 from Hex format to get the Ethereum address.\n * - The Base58 format is 34 characters long, all Base58 addresses begin with T.\n * @param address\n * @returns\n */\nexport function toEtherFormat(address: string): string {\n if (address.startsWith('T') && address.length === 34) {\n return TronWeb.address.toHex(address).slice(2)\n } else if (address.startsWith('41') && address.length === 42) {\n return address.slice(2)\n } else {\n return address\n }\n}\n\n/**\n * Convert a transaction hash to a valid hash\n * reference: https://developers.tron.network/reference/eth_gettransactionbyhash\n * txHash should be a hex string with 0x, otherwise it will throw an error \"invalid hash\" - INVALID_ARGUMENT\n * @param txHash\n * @returns\n */\nexport function toValidHash(txHash: string): string {\n return ethers.utils.hexlify(txHash, { allowMissingPrefix: true })\n}\n","import TronWeb from 'tronweb'\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'\nimport { sleep } from '@layerzerolabs/lz-utilities'\n\nimport type { TransactionInfo } from 'tronweb'\n\n/**\n * TronWebProvider is a wrapper around TronWeb that implements the Provider interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The format of the response from sendTransaction and the receipt from getTransactionReceipt differs\n * from that of the ethers provider.\n */\nexport class TronWebProvider implements Provider {\n nativeProvider: TronWeb\n\n /**\n * Create a new TronProvider\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n constructor(\n public url: string,\n private apiKey?: string\n ) {\n this.nativeProvider = new TronWeb({\n fullHost: url,\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronWebProvider\n\n static from(source: string, apiKey?: string): TronWebProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeProvider\n }\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.trx.getBalance(address).then((balance: number) => balance.toString())\n }\n\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return Block.from(response)\n }\n\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.trx\n .getBlock('latest')\n .then((block: { block_header: { raw_data: { number?: number } } }) => {\n if (block.block_header.raw_data.number === undefined) {\n throw new Error('Invalid block, block_header.raw_data.number is undefined')\n }\n return block.block_header.raw_data.number\n })\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.trx\n .getBlock(blockTag)\n .then((block: { block_header: { raw_data: { timestamp?: number } } }) => {\n if (block.block_header.raw_data.timestamp === undefined) {\n throw new Error('Invalid block, block_header.raw_data.timestamp is undefined')\n }\n return block.block_header.raw_data.timestamp\n })\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.trx.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/gettransactioninfobyid-1\n const response = await this.nativeProvider.trx.getTransactionInfo(txHash)\n return TransactionReceipt.from(response)\n }\n\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 supported in Tron.')\n }\n\n async sendTransaction(\n transaction: SignedTransaction,\n sendOptions?: { confirmations?: number }\n ): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.trx.sendRawTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const response = await this.nativeProvider.trx.sendRawTransaction(stx, sendOptions)\n\n if (response.code !== undefined) {\n const error = {\n error: response.code,\n message: response.message !== undefined ? TronWeb.toUtf8(response.message) : response.code,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (response.txid === undefined) {\n throw new Error('Invalid response, txid is undefined')\n }\n\n return TransactionPending.from(response)\n }\n\n async confirmTransaction(\n pending: TransactionPending,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n const nativePending = pending.pending as {\n result: boolean\n txid: string\n code: string\n message: string\n transaction: unknown\n wait: (confirmations?: number) => Promise<unknown>\n }\n const txHash = nativePending.txid\n const confirmations = opts?.confirmations\n let tries = 0\n while (tries++ < (confirmations ?? 20)) {\n // FIXME: not fully implemented\n const receipt = await this.getTransactionReceipt(txHash)\n const response = receipt.receipt as TransactionInfo\n if (!Object.keys(response).length) {\n // reference: https://developers.tron.network/page/faq\n // Within current testing environment, one block is produced every 3 seconds.\n // But for the local environment, it may take 1 minute to produce a block.\n await sleep(1200)\n continue\n }\n\n if (response.result !== undefined && response.result === 'FAILED') {\n const error = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n error: TronWeb.toUtf8(response.resMessage ?? ''),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (!('contractResult' in response)) {\n const error = {\n error: 'Failed to execute: ' + JSON.stringify(response, null, 2),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n return TransactionReceipt.from(response)\n }\n throw new Error(`Transaction not confirmed, txHash: ${txHash}`)\n }\n\n async sendAndConfirm(\n transaction: SignedTransaction,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n const pending = await this.sendTransaction(transaction, opts)\n return this.confirmTransaction(pending, opts)\n }\n}\n","import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\nimport { ensureJsonRpcUrlPostfix, removeJsonRpcUrlPostfix, toValidHash } from '../utils/tron'\n\n/**\n * TronSigner is a wrapper around TronWeb that implements the Signer interface\n * It is implemented using ethers.js\n */\nexport class TronSigner implements Signer {\n private readonly nativeSigner: ethers.Signer\n\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n static from(source: ethers.Signer): Signer\n static from(client: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path: string): Signer\n\n static from(source: ethers.Signer | TronWeb | string, path?: string): Signer {\n if (source instanceof ethers.Signer) {\n return new this(source)\n } else if (source instanceof TronWeb) {\n const apiKey = source.fullNode.headers['TRON-PRO-API-KEY']\n const provider = new ethers.providers.JsonRpcProvider({\n url: ensureJsonRpcUrlPostfix(source.fullNode.host),\n headers: { ...(typeof apiKey !== 'undefined' ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n\n return new this(new ethers.Wallet(source.defaultPrivateKey as string, provider))\n } else if (typeof source === 'string' && path === undefined) {\n return new this(new ethers.Wallet(source))\n } else if (typeof source === 'string' && path !== undefined) {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n if (!(provider.native instanceof ethers.providers.JsonRpcProvider)) {\n throw new Error('Only JsonRpcProvider is supported.')\n }\n\n const signer = this.nativeSigner.connect(provider.native as ethers.providers.Provider)\n // hack: ethers.utils.defineReadOnly does not work with private properties\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n ethers.utils.defineReadOnly(this, 'nativeSigner' as keyof this, signer as any)\n\n return this\n }\n\n static buildTronWebFrom(signer: ethers.Signer): TronWeb {\n if (signer instanceof ethers.Wallet) {\n if (signer.provider instanceof ethers.providers.JsonRpcProvider) {\n const apiKey = signer.provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return this.createTronWeb(signer.provider.connection.url, signer.privateKey, apiKey)\n }\n }\n throw new Error(`The nativeSigner is not supported.`)\n }\n\n static createTronWeb = mem(\n (url: string, privateKey: string, apiKey?: string): TronWeb => {\n return new TronWeb({\n privateKey: trim0x(privateKey),\n fullHost: removeJsonRpcUrlPostfix(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n },\n { cacheKey: (arguments_) => JSON.stringify(arguments_) }\n )\n\n async getAddress(): Promise<string> {\n // reference: https://developers.tron.network/docs/tvm#differences-from-evm\n return this.nativeSigner.getAddress()\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _opts?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n await pending.wait()\n const response = await this.nativeSigner.provider?.getTransactionReceipt(toValidHash(pending.txId))\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronSigner.validateTransaction(tx)\n const client = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // TODO: add energyFactor\n },\n client\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const tronWeb = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await sendTronTransaction(stx, tronWeb)\n return TransactionPending.from(response)\n }\n\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32' in TronWeb,\n // which will cause the signature to be different from ethers.js if the message length is not 32 bytes\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\n/**\n * TronWebSigner is a wrapper around TronWeb that implements the Signer interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The signature produced by signBuffer is different from the ethers signer\n * when the message length is not 32 bytes\n * - The format of the response from sendTransaction differs from that of the ethers signer.\n */\nexport class TronWebSigner implements Signer {\n private readonly nativeSigner: TronWeb\n\n private constructor(signer: TronWeb) {\n this.nativeSigner = signer\n }\n\n static from(signer: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path?: string): Signer\n\n static from(source: TronWeb | string, path?: string): Signer {\n const fullHost = 'https://api.trongrid.io'\n if (source instanceof TronWeb) {\n return new this(source)\n } else if (typeof source === 'string' && path === undefined) {\n const privateKey = trim0x(source)\n return new this(new TronWeb({ privateKey, fullHost }))\n } else if (typeof source === 'string' && path !== undefined) {\n const privateKey = trim0x(TronWeb.fromMnemonic(source, path).privateKey)\n return new this(new TronWeb({ privateKey, fullHost }))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n const nativeProvider = provider.native as TronWeb\n const { fullNode, solidityNode, eventServer } = nativeProvider.currentProviders() as {\n fullNode: unknown\n solidityNode: unknown\n eventServer: unknown\n }\n this.nativeSigner.setFullNode(fullNode)\n this.nativeSigner.setSolidityNode(solidityNode)\n this.nativeSigner.setEventServer(eventServer)\n return this\n }\n\n async getAddress(): Promise<string> {\n if (typeof this.nativeSigner.defaultAddress.hex !== 'string') {\n throw new Error('Invalid address')\n }\n const retval = this.nativeSigner.defaultAddress.hex.replace(/^41/, '0x')\n return Promise.resolve(retval)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await pending.wait()\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronWebSigner.validateTransaction(tx)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // FIXME: add energyFactor\n },\n this.nativeSigner\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const response = await sendTronTransaction(stx, this.nativeSigner)\n return TransactionPending.from(response)\n }\n\n /**\n * signBuffer signs a buffer using the native signer\n * but the signString function of native signer is different from the ethers signer,\n * TronWeb uses a message header with a fixed 32 bytes length, which means that only if\n * the message length is 32 bytes, the signature will be the same as the ethereum signature.\n * you can find the signString function here:\n * https://github.com/tronprotocol/tronweb/blob/master/src/lib/trx.js\n * @param buffer\n * @returns\n */\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32',\n // so that the signature will be the same as the ethereum signature only if\n // the message length is 32 bytes.\n if (typeof this.nativeSigner.defaultPrivateKey !== 'string') {\n throw new Error('Invalid private key')\n }\n const signedMessage = await TronWeb.Trx.signString(\n ethers.utils.hexlify(buffer),\n this.nativeSigner.defaultPrivateKey,\n false\n )\n const retval = ethers.utils.arrayify(signedMessage)\n return Promise.resolve(retval)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n\n async buildTransaction(buildTxRequest: unknown): Promise<TransactionRequest> {\n return Promise.reject(new Error('Method not implemented.'))\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/lz-corekit-tron",
3
- "version": "3.0.11",
3
+ "version": "3.0.12",
4
4
  "description": "LayerZero Core Library",
5
5
  "license": "BUSL-1.1",
6
6
  "exports": {
@@ -23,10 +23,10 @@
23
23
  "clean-prebuild": "rimraf dist"
24
24
  },
25
25
  "dependencies": {
26
- "@layerzerolabs/lz-aptos-sdk-v1": "^3.0.11",
27
- "@layerzerolabs/lz-core": "^3.0.11",
28
- "@layerzerolabs/lz-utilities": "^3.0.11",
29
- "@layerzerolabs/tron-utilities": "^3.0.11",
26
+ "@layerzerolabs/lz-aptos-sdk-v1": "^3.0.12",
27
+ "@layerzerolabs/lz-core": "^3.0.12",
28
+ "@layerzerolabs/lz-utilities": "^3.0.12",
29
+ "@layerzerolabs/tron-utilities": "^3.0.12",
30
30
  "aptos": "^1.20.0",
31
31
  "bip39": "^3.1.0",
32
32
  "ed25519-hd-key": "^1.3.0",
@@ -38,8 +38,8 @@
38
38
  "devDependencies": {
39
39
  "@jest/globals": "^29.7.0",
40
40
  "@layerzerolabs/tronweb-typescript": "^0.0.0",
41
- "@layerzerolabs/tsup-config-next": "^3.0.11",
42
- "@layerzerolabs/typescript-config-next": "^3.0.11",
41
+ "@layerzerolabs/tsup-config-next": "^3.0.12",
42
+ "@layerzerolabs/typescript-config-next": "^3.0.12",
43
43
  "@types/jest": "^29.5.10",
44
44
  "@types/tronweb": "npm:@layerzerolabs/tronweb-typescript@workspace:^",
45
45
  "jest": "^29.7.0",