@layerzerolabs/lz-corekit-tron 2.3.41 → 2.3.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -44,6 +44,7 @@ var TronProvider = class {
44
44
  * @param apiKey
45
45
  */
46
46
  constructor(url, apiKey) {
47
+ this.url = url;
47
48
  this.buildTronWebFrom = mem__default.default(
48
49
  (provider) => {
49
50
  if (provider instanceof ethers.ethers.providers.JsonRpcProvider) {
@@ -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(url: string, apiKey?: string) {\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 private 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","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"]}
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","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"]}
package/dist/index.d.mts CHANGED
@@ -7,6 +7,7 @@ import { Provider, Block, BlockWithTransactions, Finality, TransactionResponse,
7
7
  * It is implemented using ethers.js
8
8
  */
9
9
  declare class TronProvider implements Provider {
10
+ url: string;
10
11
  nativeProvider: ethers.providers.StaticJsonRpcProvider;
11
12
  /**
12
13
  *
@@ -43,7 +44,7 @@ declare class TronProvider implements Provider {
43
44
  * from that of the ethers provider.
44
45
  */
45
46
  declare class TronWebProvider implements Provider {
46
- private url;
47
+ url: string;
47
48
  private apiKey?;
48
49
  nativeProvider: TronWeb;
49
50
  /**
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ import { Provider, Block, BlockWithTransactions, Finality, TransactionResponse,
7
7
  * It is implemented using ethers.js
8
8
  */
9
9
  declare class TronProvider implements Provider {
10
+ url: string;
10
11
  nativeProvider: ethers.providers.StaticJsonRpcProvider;
11
12
  /**
12
13
  *
@@ -43,7 +44,7 @@ declare class TronProvider implements Provider {
43
44
  * from that of the ethers provider.
44
45
  */
45
46
  declare class TronWebProvider implements Provider {
46
- private url;
47
+ url: string;
47
48
  private apiKey?;
48
49
  nativeProvider: TronWeb;
49
50
  /**
package/dist/index.mjs CHANGED
@@ -37,6 +37,7 @@ var TronProvider = class {
37
37
  * @param apiKey
38
38
  */
39
39
  constructor(url, apiKey) {
40
+ this.url = url;
40
41
  this.buildTronWebFrom = mem(
41
42
  (provider) => {
42
43
  if (provider instanceof ethers.providers.JsonRpcProvider) {
@@ -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(url: string, apiKey?: string) {\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 private 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","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"]}
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","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/lz-corekit-tron",
3
- "version": "2.3.41",
3
+ "version": "2.3.43",
4
4
  "description": "LayerZero Core Library",
5
5
  "license": "BUSL-1.1",
6
6
  "exports": {
@@ -23,11 +23,10 @@
23
23
  "clean-prebuild": "rimraf dist"
24
24
  },
25
25
  "dependencies": {
26
- "@coral-xyz/anchor": "^0.29.0",
27
- "@layerzerolabs/lz-aptos-sdk-v1": "^2.3.41",
28
- "@layerzerolabs/lz-core": "^2.3.41",
29
- "@layerzerolabs/lz-utilities": "^2.3.41",
30
- "@layerzerolabs/tron-utilities": "^2.3.41",
26
+ "@layerzerolabs/lz-aptos-sdk-v1": "workspace:^",
27
+ "@layerzerolabs/lz-core": "workspace:^",
28
+ "@layerzerolabs/lz-utilities": "workspace:^",
29
+ "@layerzerolabs/tron-utilities": "workspace:^",
31
30
  "aptos": "^1.20.0",
32
31
  "bip39": "^3.1.0",
33
32
  "ed25519-hd-key": "^1.3.0",
@@ -38,9 +37,9 @@
38
37
  },
39
38
  "devDependencies": {
40
39
  "@jest/globals": "^29.7.0",
41
- "@layerzerolabs/tronweb-typescript": "^0.0.0",
42
- "@layerzerolabs/tsup-config-next": "^2.3.41",
43
- "@layerzerolabs/typescript-config-next": "^2.3.41",
40
+ "@layerzerolabs/tronweb-typescript": "workspace:^",
41
+ "@layerzerolabs/tsup-config-next": "workspace:^",
42
+ "@layerzerolabs/typescript-config-next": "workspace:^",
44
43
  "@types/jest": "^29.5.10",
45
44
  "@types/tronweb": "npm:@layerzerolabs/tronweb-typescript@workspace:^",
46
45
  "jest": "^29.7.0",
@@ -53,4 +52,4 @@
53
52
  "publishConfig": {
54
53
  "access": "public"
55
54
  }
56
- }
55
+ }
package/CHANGELOG.md DELETED
@@ -1,418 +0,0 @@
1
- # @layerzerolabs/lz-corekit-tron
2
-
3
- ## 2.3.41
4
-
5
- ### Patch Changes
6
-
7
- - b01c51c: mainnet: Reya
8
- - Updated dependencies [b01c51c]
9
- - @layerzerolabs/lz-core@2.3.41
10
- - @layerzerolabs/tron-utilities@2.3.41
11
- - @layerzerolabs/lz-utilities@2.3.41
12
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.41
13
-
14
- ## 2.3.40
15
-
16
- ### Patch Changes
17
-
18
- - c631c6e: mainnet: Ape chain endpoint
19
- - Updated dependencies [c631c6e]
20
- - @layerzerolabs/lz-core@2.3.40
21
- - @layerzerolabs/tron-utilities@2.3.40
22
- - @layerzerolabs/lz-utilities@2.3.40
23
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.40
24
-
25
- ## 2.3.39
26
-
27
- ### Patch Changes
28
-
29
- - 01a6cb7: testnets: bitlayer, dm2verse, story
30
- - Updated dependencies [01a6cb7]
31
- - @layerzerolabs/lz-core@2.3.39
32
- - @layerzerolabs/tron-utilities@2.3.39
33
- - @layerzerolabs/lz-utilities@2.3.39
34
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.39
35
-
36
- ## 2.3.38
37
-
38
- ### Patch Changes
39
-
40
- - 5ddfb3b: remove `OFT_DEFAULT_PROGRAM_ID` from soalan sdk
41
- - Updated dependencies [5ddfb3b]
42
- - @layerzerolabs/lz-core@2.3.38
43
- - @layerzerolabs/tron-utilities@2.3.38
44
- - @layerzerolabs/lz-utilities@2.3.38
45
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.38
46
-
47
- ## 2.3.37
48
-
49
- ### Patch Changes
50
-
51
- - 883c143: mainnet endpoints: Lyra, Codex, testnets: root redeploy, reya
52
- - Updated dependencies [883c143]
53
- - @layerzerolabs/lz-core@2.3.37
54
- - @layerzerolabs/tron-utilities@2.3.37
55
- - @layerzerolabs/lz-utilities@2.3.37
56
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.37
57
-
58
- ## 2.3.36
59
-
60
- ### Patch Changes
61
-
62
- - 291ef75: fix solana sdk
63
- - Updated dependencies [291ef75]
64
- - @layerzerolabs/lz-core@2.3.36
65
- - @layerzerolabs/tron-utilities@2.3.36
66
- - @layerzerolabs/lz-utilities@2.3.36
67
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.36
68
-
69
- ## 2.3.35
70
-
71
- ### Patch Changes
72
-
73
- - 9913f53: new endpoints
74
- - 21a267f: testnets: otherworld, abstract, root
75
- - Updated dependencies [9913f53]
76
- - Updated dependencies [21a267f]
77
- - @layerzerolabs/lz-core@2.3.35
78
- - @layerzerolabs/tron-utilities@2.3.35
79
- - @layerzerolabs/lz-utilities@2.3.35
80
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.35
81
-
82
- ## 2.3.35-aptos.0
83
-
84
- ### Patch Changes
85
-
86
- - 7744b25: Add Aptos v1 support in testify, all tests passed.
87
- - Updated dependencies [7744b25]
88
- - @layerzerolabs/lz-core@2.3.35-aptos.0
89
- - @layerzerolabs/tron-utilities@2.3.35-aptos.0
90
- - @layerzerolabs/lz-utilities@2.3.35-aptos.0
91
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.35-aptos.0
92
-
93
- ## 2.3.34
94
-
95
- ### Patch Changes
96
-
97
- - 5a99681: Fix an issue in Solana
98
- - Updated dependencies [5a99681]
99
- - @layerzerolabs/lz-core@2.3.34
100
- - @layerzerolabs/tron-utilities@2.3.34
101
- - @layerzerolabs/lz-utilities@2.3.34
102
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.34
103
-
104
- ## 2.3.33
105
-
106
- ### Patch Changes
107
-
108
- - d9c0c10: testnets: new solana devnet, codex(evm), bahamut (evm)
109
- - 1099b5f: testnets: lif3,iota,lyra,lightlink
110
- - Updated dependencies [d9c0c10]
111
- - Updated dependencies [1099b5f]
112
- - @layerzerolabs/lz-core@2.3.33
113
- - @layerzerolabs/tron-utilities@2.3.33
114
- - @layerzerolabs/lz-utilities@2.3.33
115
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.33
116
-
117
- ## 2.3.32
118
-
119
- ### Patch Changes
120
-
121
- - e846939: testnets: lif3,iota,lyra,lightlink
122
- - 334b51e: endpoints, including flare mainnet
123
- - 334b51e: zklink mainnet, and testnets
124
- - 334b51e: testnet endpoints
125
- - Updated dependencies [e846939]
126
- - Updated dependencies [334b51e]
127
- - Updated dependencies [334b51e]
128
- - Updated dependencies [334b51e]
129
- - @layerzerolabs/lz-core@2.3.32
130
- - @layerzerolabs/tron-utilities@2.3.32
131
- - @layerzerolabs/lz-utilities@2.3.32
132
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.32
133
-
134
- ## 2.3.31
135
-
136
- ### Patch Changes
137
-
138
- - 29fecfc: testnets: zksyncsep v2 redeploy, curtis
139
- - Updated dependencies [29fecfc]
140
- - @layerzerolabs/lz-core@2.3.31
141
- - @layerzerolabs/tron-utilities@2.3.31
142
- - @layerzerolabs/lz-utilities@2.3.31
143
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.31
144
-
145
- ## 2.3.30
146
-
147
- ### Patch Changes
148
-
149
- - 32f8ebd: peaq,zircuit mainnet, and plume testnet
150
- - b602b9f: peaq,zircuit mainnet, and plume testnet
151
- - Updated dependencies [32f8ebd]
152
- - Updated dependencies [b602b9f]
153
- - @layerzerolabs/lz-core@2.3.30
154
- - @layerzerolabs/tron-utilities@2.3.30
155
- - @layerzerolabs/lz-utilities@2.3.30
156
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.30
157
-
158
- ## 2.3.29
159
-
160
- ### Patch Changes
161
-
162
- - a42fff0: endpoints, including flare mainnet
163
- - a42fff0: zklink mainnet, and testnets
164
- - a42fff0: testnet endpoints
165
- - Updated dependencies [a42fff0]
166
- - Updated dependencies [a42fff0]
167
- - Updated dependencies [a42fff0]
168
- - @layerzerolabs/lz-core@2.3.29
169
- - @layerzerolabs/tron-utilities@2.3.29
170
- - @layerzerolabs/lz-utilities@2.3.29
171
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.29
172
-
173
- ## 2.3.28
174
-
175
- ### Patch Changes
176
-
177
- - 23d7ea0: endpoints, including flare mainnet
178
- - 23d7ea0: zklink mainnet, and testnets
179
- - 8a40261: Fix some known issues in Solana
180
- - 23d7ea0: testnet endpoints
181
- - Updated dependencies [23d7ea0]
182
- - Updated dependencies [23d7ea0]
183
- - Updated dependencies [8a40261]
184
- - Updated dependencies [23d7ea0]
185
- - @layerzerolabs/lz-core@2.3.28
186
- - @layerzerolabs/tron-utilities@2.3.28
187
- - @layerzerolabs/lz-utilities@2.3.28
188
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.28
189
-
190
- ## 2.3.27
191
-
192
- ### Patch Changes
193
-
194
- - e382bef: Update the access property of the `hardhat-tron` package
195
- - d41cbe9: endpoints, including flare mainnet
196
- - d41cbe9: testnet endpoints
197
- - Updated dependencies [e382bef]
198
- - Updated dependencies [d41cbe9]
199
- - Updated dependencies [d41cbe9]
200
- - @layerzerolabs/lz-core@2.3.27
201
- - @layerzerolabs/tron-utilities@2.3.27
202
- - @layerzerolabs/lz-utilities@2.3.27
203
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.27
204
-
205
- ## 2.3.26
206
-
207
- ### Patch Changes
208
-
209
- - 92a9a2e: upgrade solana mainnet executor/uln
210
- - Updated dependencies [92a9a2e]
211
- - @layerzerolabs/lz-core@2.3.26
212
- - @layerzerolabs/tron-utilities@2.3.26
213
- - @layerzerolabs/lz-utilities@2.3.26
214
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.26
215
-
216
- ## 2.3.25
217
-
218
- ### Patch Changes
219
-
220
- - 003371b: endpoints, including flare mainnet
221
- - 003371b: testnet endpoints
222
- - Updated dependencies [003371b]
223
- - Updated dependencies [003371b]
224
- - @layerzerolabs/lz-core@2.3.25
225
- - @layerzerolabs/tron-utilities@2.3.25
226
- - @layerzerolabs/lz-utilities@2.3.25
227
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.25
228
-
229
- ## 2.3.24
230
-
231
- ### Patch Changes
232
-
233
- - 255da39: Fix some known issues in the OFT SDK
234
- - Updated dependencies [255da39]
235
- - @layerzerolabs/lz-core@2.3.24
236
- - @layerzerolabs/tron-utilities@2.3.24
237
- - @layerzerolabs/lz-utilities@2.3.24
238
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.24
239
-
240
- ## 2.3.23
241
-
242
- ### Patch Changes
243
-
244
- - 1e42a63: bump version: default distribution tag is `latest`
245
- - 43c0e8f: endpoints: bouncebit, gravity ... testnet: bartio bera chain
246
- - Updated dependencies [1e42a63]
247
- - Updated dependencies [43c0e8f]
248
- - @layerzerolabs/lz-core@2.3.23
249
- - @layerzerolabs/tron-utilities@2.3.23
250
- - @layerzerolabs/lz-utilities@2.3.23
251
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.23
252
-
253
- ## 2.3.22
254
-
255
- ### Patch Changes
256
-
257
- - 571e2c2: update oft sdk
258
- - Updated dependencies [571e2c2]
259
- - @layerzerolabs/lz-core@2.3.22
260
- - @layerzerolabs/tron-utilities@2.3.22
261
- - @layerzerolabs/lz-utilities@2.3.22
262
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.22
263
-
264
- ## 2.3.21
265
-
266
- ### Patch Changes
267
-
268
- - 2a5e6c8: fix some bugs & public lz-solana-sdk-v2 & upgrade @solana/web3.js
269
- - Updated dependencies [2a5e6c8]
270
- - @layerzerolabs/lz-core@2.3.21
271
- - @layerzerolabs/tron-utilities@2.3.21
272
- - @layerzerolabs/lz-utilities@2.3.21
273
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.21
274
-
275
- ## 2.3.20
276
-
277
- ### Patch Changes
278
-
279
- - 1b332c1: endpoints: taiko,joc,xchain,etherlink, testnet:bouncebit
280
- - Updated dependencies [1b332c1]
281
- - @layerzerolabs/lz-core@2.3.20
282
- - @layerzerolabs/tron-utilities@2.3.20
283
- - @layerzerolabs/lz-utilities@2.3.20
284
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.20
285
-
286
- ## 2.3.19
287
-
288
- ### Patch Changes
289
-
290
- - 5fce234: minor update & fix some bugs
291
- - Updated dependencies [5fce234]
292
- - @layerzerolabs/lz-core@2.3.19
293
- - @layerzerolabs/tron-utilities@2.3.19
294
- - @layerzerolabs/lz-utilities@2.3.19
295
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.19
296
-
297
- ## 2.3.18
298
-
299
- ### Patch Changes
300
-
301
- - d7ddb1e: Make `solana-sdk` compatible with browsers
302
- - Updated dependencies [d7ddb1e]
303
- - @layerzerolabs/lz-core@2.3.18
304
- - @layerzerolabs/tron-utilities@2.3.18
305
- - @layerzerolabs/lz-utilities@2.3.18
306
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.18
307
-
308
- ## 2.3.17
309
-
310
- ### Patch Changes
311
-
312
- - 7e1d72a: minor update & fix some bugs
313
- - a255697: SEI mainnet
314
- - Updated dependencies [7e1d72a]
315
- - Updated dependencies [a255697]
316
- - @layerzerolabs/lz-core@2.3.17
317
- - @layerzerolabs/tron-utilities@2.3.17
318
- - @layerzerolabs/lz-utilities@2.3.17
319
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.17
320
-
321
- ## 2.3.16
322
-
323
- ### Patch Changes
324
-
325
- - b0ac3fe: deploy & config oft
326
- - Updated dependencies [b0ac3fe]
327
- - @layerzerolabs/lz-core@2.3.16
328
- - @layerzerolabs/tron-utilities@2.3.16
329
- - @layerzerolabs/lz-utilities@2.3.16
330
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.16
331
-
332
- ## 2.3.15
333
-
334
- ### Patch Changes
335
-
336
- - 66c554b: minor update & fix some bugs
337
- - Updated dependencies [66c554b]
338
- - @layerzerolabs/lz-core@2.3.15
339
- - @layerzerolabs/tron-utilities@2.3.15
340
- - @layerzerolabs/lz-utilities@2.3.15
341
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.15
342
-
343
- ## 2.3.14
344
-
345
- ### Patch Changes
346
-
347
- - minor update
348
- - Updated dependencies
349
- - @layerzerolabs/lz-core@2.3.14
350
- - @layerzerolabs/tron-utilities@2.3.14
351
- - @layerzerolabs/lz-utilities@2.3.14
352
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.14
353
-
354
- ## 2.3.13
355
-
356
- ### Patch Changes
357
-
358
- - c294e0e: add missing artifacts
359
- - Updated dependencies [c294e0e]
360
- - @layerzerolabs/lz-core@2.3.13
361
- - @layerzerolabs/tron-utilities@2.3.13
362
- - @layerzerolabs/lz-utilities@2.3.13
363
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.13
364
-
365
- ## 2.3.12
366
-
367
- ### Patch Changes
368
-
369
- - 2761d43: minor update & fix some bugs
370
- - Updated dependencies [2761d43]
371
- - @layerzerolabs/lz-core@2.3.12
372
- - @layerzerolabs/tron-utilities@2.3.12
373
- - @layerzerolabs/lz-utilities@2.3.12
374
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.12
375
-
376
- ## 2.3.11
377
-
378
- ### Patch Changes
379
-
380
- - a7ee3c1: mainnet endpoints, cyber, iota
381
- - Updated dependencies [a7ee3c1]
382
- - @layerzerolabs/lz-core@2.3.11
383
- - @layerzerolabs/tron-utilities@2.3.11
384
- - @layerzerolabs/lz-utilities@2.3.11
385
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.11
386
-
387
- ## 2.3.10
388
-
389
- ### Patch Changes
390
-
391
- - b9804e1: export tron and zksync artifacts to sdk
392
- - Updated dependencies [b9804e1]
393
- - @layerzerolabs/lz-core@2.3.10
394
- - @layerzerolabs/tron-utilities@2.3.10
395
- - @layerzerolabs/lz-utilities@2.3.10
396
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.10
397
-
398
- ## 2.3.9
399
-
400
- ### Patch Changes
401
-
402
- - c208955: minor update & fix some bugs
403
- - Updated dependencies [c208955]
404
- - @layerzerolabs/lz-core@2.3.9
405
- - @layerzerolabs/tron-utilities@2.3.9
406
- - @layerzerolabs/lz-utilities@2.3.9
407
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.9
408
-
409
- ## 2.3.8
410
-
411
- ### Patch Changes
412
-
413
- - e0f5d04: deploy contracts to Ebi mainnet
414
- - Updated dependencies [e0f5d04]
415
- - @layerzerolabs/lz-core@2.3.8
416
- - @layerzerolabs/tron-utilities@2.3.8
417
- - @layerzerolabs/lz-utilities@2.3.8
418
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.8