@layerzerolabs/lz-corekit-tron 2.3.42 → 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":";AAAA,SAAS,UAAAA,eAAc;AACvB,OAAO,SAAS;AAChB,OAAOC,cAAa;AAEpB;AAAA,EACI;AAAA,EAEA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,iBAAiB,2BAA2B;;;ACfrD,SAAS,cAAc;AACvB,OAAO,aAAa;AAMb,SAAS,wBAAwB,KAAqB;AAKzD,QAAM,QAAQ,IAAI,KAAK,EAAE,QAAQ,QAAQ,EAAE;AAC3C,MAAI,CAAC,MAAM,SAAS,UAAU,GAAG;AAC7B,WAAO,QAAQ;AAAA,EACnB;AACA,SAAO;AACX;AAKO,SAAS,wBAAwB,KAAqB;AACzD,SAAO,IAAI,QAAQ,cAAc,EAAE;AACvC;AAWO,SAAS,cAAc,SAAyB;AACnD,MAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,IAAI;AAClD,WAAO,QAAQ,QAAQ,MAAM,OAAO,EAAE,MAAM,CAAC;AAAA,EACjD,WAAW,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW,IAAI;AAC1D,WAAO,QAAQ,MAAM,CAAC;AAAA,EAC1B,OAAO;AACH,WAAO;AAAA,EACX;AACJ;AASO,SAAS,YAAY,QAAwB;AAChD,SAAO,OAAO,MAAM,QAAQ,QAAQ,EAAE,oBAAoB,KAAK,CAAC;AACpE;;;AD/BO,IAAM,eAAN,MAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,YACG,KACP,QACF;AAFS;AAiCX,SAAQ,mBAAmB;AAAA,MACvB,CAAC,aAAiD;AAC9C,YAAI,oBAAoBD,QAAO,UAAU,iBAAiB;AACtD,gBAAM,EAAE,IAAI,IAAI,SAAS;AACzB,gBAAM,SAAS,SAAS,WAAW,UAAU,kBAAkB;AAE/D,iBAAO,IAAIC,SAAQ;AAAA,YACf,YAAY;AAAA,YACZ,UAAU,gBAAgB,IAAI,GAAG,EAAE,OAAO,GAAG;AAAA,YAC7C,SAAS,EAAE,GAAI,WAAW,SAAY,EAAE,oBAAoB,OAAO,IAAI,CAAC,EAAG;AAAA,UAC/E,CAAC;AAAA,QACL;AAEA,cAAM,IAAI,MAAM,oCAAoC;AAAA,MACxD;AAAA,MACA;AAAA,QACI,UAAU,CAAC,eAAoD;AAC3D,gBAAM,WAAW,WAAW,CAAC;AAC7B,cAAI,oBAAoBD,QAAO,UAAU,iBAAiB;AACtD,kBAAM,EAAE,IAAI,IAAI,SAAS;AACzB,kBAAM,SAAS,SAAS,WAAW,UAAU,kBAAkB;AAC/D,mBAAO,KAAK,UAAU,EAAE,KAAK,OAAO,CAAC;AAAA,UACzC;AACA,iBAAO,KAAK,UAAU,QAAQ;AAAA,QAClC;AAAA,MACJ;AAAA,IACJ;AAxDI,SAAK,iBAAiB,IAAIA,QAAO,UAAU,sBAAsB;AAAA,MAC7D,KAAK,gBAAgB,IAAI,GAAG,EAAE,UAAU,GAAG;AAAA,MAC3C,SAAS;AAAA;AAAA,QAEL,GAAI,WAAW,SAAY,EAAE,oBAAoB,OAAO,IAAI,CAAC;AAAA,MACjE;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAKA,OAAO,KAAK,QAA0B,QAA+B;AACjE,QAAI,OAAO,WAAW,UAAU;AAC5B,aAAO,IAAI,KAAK,QAAQ,MAAM;AAAA,IAClC,WAAW,kBAAkBC,UAAS;AAClC,YAAM,EAAE,MAAM,QAAQ,IAAI,OAAO;AACjC,aAAO,KAAK,KAAK,MAAM,QAAQ,kBAAkB,CAAC;AAAA,IACtD,OAAO;AACH,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EA8BA,MAAM,WAAW,SAAkC;AAC/C,WAAO,KAAK,eAAe,WAAW,cAAc,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,QAAQ,SAAS,CAAC;AAAA,EACtG;AAAA,EAEA,MAAM,SAAS,UAA2C;AACtD,UAAM,WAAW,MAAM,KAAK,eAAe,SAAS,QAAQ;AAC5D,WAAO,MAAM,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEA,MAAM,yBAAyB,UAA2D;AACtF,UAAM,WAAW,MAAM,KAAK,eAAe,yBAAyB,QAAQ;AAC5E,WAAO,sBAAsB,KAAK,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAM,iBAAkC;AACpC,WAAO,KAAK,eAAe,eAAe;AAAA,EAC9C;AAAA,EAEA,MAAM,kBAAkB,UAA4C;AAChE,WAAO,KAAK,eAAe,SAAS,QAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,SAAS;AAAA,EACjF;AAAA,EAEA,MAAM,QAAQ,WAAuC;AACjD,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AAAA,EAEA,MAAM,eAAe,QAA8C;AAC/D,UAAM,WAAW,MAAM,KAAK,eAAe,eAAe,YAAY,MAAM,CAAC;AAC7E,WAAO,oBAAoB,KAAK,QAAQ;AAAA,EAC5C;AAAA,EAEA,MAAM,sBAAsB,QAA6C;AACrE,UAAM,WAAW,MAAM,KAAK,eAAe,sBAAsB,YAAY,MAAM,CAAC;AACpF,WAAO,mBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,oBACF,gBACA,WACe;AACf,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AAAA,EAEA,MAAM,gBAAgB,aAAgC,cAAoD;AAItG,UAAM,MAAM,YAAY;AACxB,UAAM,SAAS,KAAK,iBAAiB,KAAK,cAAc;AACxD,UAAM,WAAW,MAAM,oBAAoB,KAAK,MAAM;AAEtD,WAAO,mBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,eAAe,aAAgC,MAA4C;AAC7F,UAAM,WAAW,MAAM,KAAK,gBAAgB,aAAa,IAAI,GAAG;AAMhE,UAAM,WAAW,MAAM,QAAQ,KAAK;AACpC,WAAO,mBAAmB,KAAK,QAAQ;AAAA,EAC3C;AACJ;;;AE/JA,OAAOA,cAAa;AAEpB;AAAA,EACI,SAAAC;AAAA,EAEA,yBAAAC;AAAA,EAIA,sBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,uBAAAC;AAAA,OACG;AACP,SAAS,aAAa;AAYf,IAAM,kBAAN,MAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ7C,YACW,KACC,QACV;AAFS;AACC;AAER,SAAK,iBAAiB,IAAIL,SAAQ;AAAA,MAC9B,UAAU;AAAA,MACV,SAAS;AAAA;AAAA,QAEL,GAAI,WAAW,SAAY,EAAE,oBAAoB,OAAO,IAAI,CAAC;AAAA,MACjE;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAIA,OAAO,KAAK,QAAgB,QAAkC;AAC1D,QAAI,OAAO,WAAW,UAAU;AAC5B,aAAO,IAAI,KAAK,QAAQ,MAAM;AAAA,IAClC,OAAO;AACH,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,IAAI,SAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,WAAW,SAAkC;AAC/C,WAAO,KAAK,eAAe,IAAI,WAAW,OAAO,EAAE,KAAK,CAAC,YAAoB,QAAQ,SAAS,CAAC;AAAA,EACnG;AAAA,EAEA,MAAM,SAAS,UAA2C;AACtD,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,SAAS,QAAQ;AAChE,WAAOC,OAAM,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEA,MAAM,yBAAyB,UAA2D;AACtF,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,SAAS,QAAQ;AAChE,WAAOC,uBAAsB,KAAK,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAM,iBAAkC;AACpC,WAAO,KAAK,eAAe,IACtB,SAAS,QAAQ,EACjB,KAAK,CAAC,UAA+D;AAClE,UAAI,MAAM,aAAa,SAAS,WAAW,QAAW;AAClD,cAAM,IAAI,MAAM,0DAA0D;AAAA,MAC9E;AACA,aAAO,MAAM,aAAa,SAAS;AAAA,IACvC,CAAC;AAAA,EACT;AAAA,EAEA,MAAM,kBAAkB,UAA4C;AAChE,WAAO,KAAK,eAAe,IACtB,SAAS,QAAQ,EACjB,KAAK,CAAC,UAAkE;AACrE,UAAI,MAAM,aAAa,SAAS,cAAc,QAAW;AACrD,cAAM,IAAI,MAAM,6DAA6D;AAAA,MACjF;AACA,aAAO,MAAM,aAAa,SAAS;AAAA,IACvC,CAAC;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,WAAuC;AACjD,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AAAA,EAEA,MAAM,eAAe,QAA8C;AAC/D,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,eAAe,MAAM;AACpE,WAAOG,qBAAoB,KAAK,QAAQ;AAAA,EAC5C;AAAA,EAEA,MAAM,sBAAsB,QAA6C;AAErE,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,mBAAmB,MAAM;AACxE,WAAOD,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,oBACF,gBACA,WACe;AACf,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AAAA,EAEA,MAAM,gBACF,aACA,aAC2B;AAG3B,UAAM,MAAM,YAAY;AACxB,UAAM,WAAW,MAAM,KAAK,eAAe,IAAI,mBAAmB,KAAK,WAAW;AAElF,QAAI,SAAS,SAAS,QAAW;AAC7B,YAAM,QAAQ;AAAA,QACV,OAAO,SAAS;AAAA,QAChB,SAAS,SAAS,YAAY,SAAYJ,SAAQ,OAAO,SAAS,OAAO,IAAI,SAAS;AAAA,MAC1F;AACA,YAAM,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,IAClD;AAEA,QAAI,SAAS,SAAS,QAAW;AAC7B,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACzD;AAEA,WAAOG,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,gBAAgB,QAAgB,eAA8D;AAChG,QAAI,QAAQ;AACZ,WAAO,WAAW,iBAAiB,KAAK;AAEpC,YAAM,UAAU,MAAM,KAAK,sBAAsB,MAAM;AACvD,YAAM,WAAW,QAAQ;AACzB,UAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,QAAQ;AAI/B,cAAM,MAAM,IAAI;AAChB;AAAA,MACJ;AAEA,UAAI,SAAS,WAAW,UAAa,SAAS,WAAW,UAAU;AAC/D,cAAM,QAAQ;AAAA;AAAA,UAEV,OAAOH,SAAQ,OAAO,SAAS,cAAc,EAAE;AAAA,UAC/C;AAAA,QACJ;AACA,cAAM,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,MAClD;AAEA,UAAI,EAAE,oBAAoB,WAAW;AACjC,cAAM,QAAQ;AAAA,UACV,OAAO,wBAAwB,KAAK,UAAU,UAAU,MAAM,CAAC;AAAA,UAC/D;AAAA,QACJ;AACA,cAAM,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,MAClD;AAEA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,eACF,aACA,MAC2B;AAE3B,UAAM,WAAW,MAAM,KAAK,gBAAgB,aAAa,IAAI,GAAG;AAUhE,UAAM,WAAW,MAAM,KAAK,gBAAgB,QAAQ,MAAM,MAAM,aAAa;AAC7E,WAAOI,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AACJ;;;ACtMA,SAAS,UAAAL,eAAc;AACvB,OAAOO,UAAS;AAChB,OAAON,cAAa;AAEpB;AAAA,EAEI,qBAAAO;AAAA,EAEA,sBAAAJ;AAAA,EACA,sBAAAC;AAAA,OAEG;AACP,SAAS,cAAc;AACvB,SAAS,uBAAAI,sBAAqB,kBAAkB;AAQzC,IAAM,cAAN,MAAM,YAA6B;AAAA,EAG9B,YAAY,QAAuB;AACvC,SAAK,eAAe;AAAA,EACxB;AAAA,EAOA,OAAO,KAAK,QAA0C,MAAuB;AACzE,QAAI,kBAAkBT,QAAO,QAAQ;AACjC,aAAO,IAAI,KAAK,MAAM;AAAA,IAC1B,WAAW,kBAAkBC,UAAS;AAClC,YAAM,SAAS,OAAO,SAAS,QAAQ,kBAAkB;AACzD,YAAM,WAAW,IAAID,QAAO,UAAU,gBAAgB;AAAA,QAClD,KAAK,wBAAwB,OAAO,SAAS,IAAI;AAAA,QACjD,SAAS,EAAE,GAAI,OAAO,WAAW,cAAc,EAAE,oBAAoB,OAAO,IAAI,CAAC,EAAG;AAAA,MACxF,CAAC;AAED,aAAO,IAAI,KAAK,IAAIA,QAAO,OAAO,OAAO,mBAA6B,QAAQ,CAAC;AAAA,IACnF,WAAW,OAAO,WAAW,YAAY,SAAS,QAAW;AACzD,aAAO,IAAI,KAAK,IAAIA,QAAO,OAAO,MAAM,CAAC;AAAA,IAC7C,WAAW,OAAO,WAAW,YAAY,SAAS,QAAW;AACzD,aAAO,IAAI,KAAKA,QAAO,OAAO,aAAa,QAAQ,IAAI,CAAC;AAAA,IAC5D,OAAO;AACH,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,IAAI,SAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,QAAQ,UAA4B;AAChC,QAAI,EAAE,SAAS,kBAAkBA,QAAO,UAAU,kBAAkB;AAChE,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACxD;AAEA,UAAM,SAAS,KAAK,aAAa,QAAQ,SAAS,MAAmC;AAGrF,IAAAA,QAAO,MAAM,eAAe,MAAM,gBAA8B,MAAa;AAE7E,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,iBAAiB,QAAgC;AACpD,QAAI,kBAAkBA,QAAO,QAAQ;AACjC,UAAI,OAAO,oBAAoBA,QAAO,UAAU,iBAAiB;AAC7D,cAAM,SAAS,OAAO,SAAS,WAAW,UAAU,kBAAkB;AACtE,eAAO,KAAK,cAAc,OAAO,SAAS,WAAW,KAAK,OAAO,YAAY,MAAM;AAAA,MACvF;AAAA,IACJ;AACA,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACxD;AAAA,EAaA,MAAM,aAA8B;AAEhC,WAAO,KAAK,aAAa,WAAW;AAAA,EACxC;AAAA,EAEA,MAAM,eAAe,aAAgC,OAA6C;AAC9F,UAAM,WAAW,MAAM,KAAK,gBAAgB,WAAW,GAAG;AAK1D,UAAM,QAAQ,KAAK;AACnB,UAAM,WAAW,MAAM,KAAK,aAAa,UAAU,sBAAsB,YAAY,QAAQ,IAAI,CAAC;AAClG,WAAOK,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,gBAAgB,aAA6D;AAE/E,UAAM,KAAK,YAAY;AACvB,QAAI,GAAG,SAAS,UAAa,GAAG,OAAO,QAAW;AAC9C,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AAEA,gBAAW,oBAAoB,EAAE;AACjC,UAAM,SAAS,YAAW,iBAAiB,KAAK,YAAY;AAC5D,UAAM,WAAW,MAAM;AAAA,MACnB;AAAA,QACI,MAAM,GAAG;AAAA,QACT,IAAI,GAAG;AAAA,QACP,UAAU,GAAG,UAAU,SAAS;AAAA,QAChC,UAAU,GAAG,UAAU,SAAS;AAAA,QAChC,OAAO,GAAG,OAAO,SAAS;AAAA;AAAA,MAE9B;AAAA,MACA;AAAA,IACJ;AACA,WAAOG,mBAAkB,KAAK,QAAQ;AAAA,EAC1C;AAAA,EAEA,MAAM,gBAAgB,aAAgC,cAAoD;AAEtG,UAAM,MAAM,YAAY;AAExB,UAAM,UAAU,YAAW,iBAAiB,KAAK,YAAY;AAC7D,UAAM,WAAW,MAAMC,qBAAoB,KAAK,OAAO;AACvD,WAAOL,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,WAAW,QAAyC;AAGtD,UAAM,gBAAgB,MAAM,KAAK,aAAa,YAAY,MAAM;AAChE,WAAOJ,QAAO,MAAM,SAAS,aAAa;AAAA,EAC9C;AAAA,EAEA,OAAO,oBAAoB,aAAmD;AAC1E,QAAI,YAAY,SAAS,UAAa,YAAY,OAAO,QAAW;AAChE,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AACJ;AAnIa,YA2DF,gBAAgBO;AAAA,EACnB,CAAC,KAAa,YAAoB,WAA6B;AAC3D,WAAO,IAAIN,SAAQ;AAAA,MACf,YAAY,OAAO,UAAU;AAAA,MAC7B,UAAU,wBAAwB,GAAG;AAAA,MACrC,SAAS,EAAE,GAAI,WAAW,SAAY,EAAE,oBAAoB,OAAO,IAAI,CAAC,EAAG;AAAA,IAC/E,CAAC;AAAA,EACL;AAAA,EACA,EAAE,UAAU,CAAC,eAAe,KAAK,UAAU,UAAU,EAAE;AAC3D;AApEG,IAAM,aAAN;;;ACrBP,SAAS,UAAAD,eAAc;AACvB,OAAOC,cAAa;AAEpB;AAAA,EAEI,qBAAAO;AAAA,EAEA,sBAAAJ;AAAA,EACA,sBAAAC;AAAA,OAEG;AACP,SAAS,UAAAK,eAAc;AACvB,SAAS,uBAAAD,sBAAqB,cAAAE,mBAAkB;AAWzC,IAAM,gBAAN,MAAM,eAAgC;AAAA,EAGjC,YAAY,QAAiB;AACjC,SAAK,eAAe;AAAA,EACxB;AAAA,EAMA,OAAO,KAAK,QAA0B,MAAuB;AACzD,UAAM,WAAW;AACjB,QAAI,kBAAkBV,UAAS;AAC3B,aAAO,IAAI,KAAK,MAAM;AAAA,IAC1B,WAAW,OAAO,WAAW,YAAY,SAAS,QAAW;AACzD,YAAM,aAAaS,QAAO,MAAM;AAChC,aAAO,IAAI,KAAK,IAAIT,SAAQ,EAAE,YAAY,SAAS,CAAC,CAAC;AAAA,IACzD,WAAW,OAAO,WAAW,YAAY,SAAS,QAAW;AACzD,YAAM,aAAaS,QAAOT,SAAQ,aAAa,QAAQ,IAAI,EAAE,UAAU;AACvE,aAAO,IAAI,KAAK,IAAIA,SAAQ,EAAE,YAAY,SAAS,CAAC,CAAC;AAAA,IACzD,OAAO;AACH,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,IAAI,SAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,QAAQ,UAA4B;AAChC,UAAM,iBAAiB,SAAS;AAChC,UAAM,EAAE,UAAU,cAAc,YAAY,IAAI,eAAe,iBAAiB;AAKhF,SAAK,aAAa,YAAY,QAAQ;AACtC,SAAK,aAAa,gBAAgB,YAAY;AAC9C,SAAK,aAAa,eAAe,WAAW;AAC5C,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,aAA8B;AAChC,QAAI,OAAO,KAAK,aAAa,eAAe,QAAQ,UAAU;AAC1D,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACrC;AACA,UAAM,SAAS,KAAK,aAAa,eAAe,IAAI,QAAQ,OAAO,IAAI;AACvE,WAAO,QAAQ,QAAQ,MAAM;AAAA,EACjC;AAAA,EAEA,MAAM,eAAe,aAAgC,cAAoD;AACrG,UAAM,WAAW,MAAM,KAAK,gBAAgB,WAAW,GAAG;AAK1D,UAAM,WAAW,MAAM,QAAQ,KAAK;AACpC,WAAOI,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAM,gBAAgB,aAA6D;AAE/E,UAAM,KAAK,YAAY;AACvB,QAAI,GAAG,SAAS,UAAa,GAAG,OAAO,QAAW;AAC9C,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AAEA,mBAAc,oBAAoB,EAAE;AACpC,UAAM,WAAW,MAAMM;AAAA,MACnB;AAAA,QACI,MAAM,GAAG;AAAA,QACT,IAAI,GAAG;AAAA,QACP,UAAU,GAAG,UAAU,SAAS;AAAA,QAChC,UAAU,GAAG,UAAU,SAAS;AAAA,QAChC,OAAO,GAAG,OAAO,SAAS;AAAA;AAAA,MAE9B;AAAA,MACA,KAAK;AAAA,IACT;AACA,WAAOH,mBAAkB,KAAK,QAAQ;AAAA,EAC1C;AAAA,EAEA,MAAM,gBAAgB,aAAgC,cAAoD;AAEtG,UAAM,MAAM,YAAY;AAExB,UAAM,WAAW,MAAMC,qBAAoB,KAAK,KAAK,YAAY;AACjE,WAAOL,oBAAmB,KAAK,QAAQ;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,WAAW,QAAyC;AAItD,QAAI,OAAO,KAAK,aAAa,sBAAsB,UAAU;AACzD,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACzC;AACA,UAAM,gBAAgB,MAAMH,SAAQ,IAAI;AAAA,MACpCD,QAAO,MAAM,QAAQ,MAAM;AAAA,MAC3B,KAAK,aAAa;AAAA,MAClB;AAAA,IACJ;AACA,UAAM,SAASA,QAAO,MAAM,SAAS,aAAa;AAClD,WAAO,QAAQ,QAAQ,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,oBAAoB,aAAmD;AAC1E,QAAI,YAAY,SAAS,UAAa,YAAY,OAAO,QAAW;AAChE,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AACJ","sourcesContent":["import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\n\nimport {\n Block,\n BlockTag,\n BlockWithTransactions,\n Finality,\n Provider,\n SignedTransaction,\n TransactionPending,\n TransactionReceipt,\n TransactionResponse,\n} from '@layerzerolabs/lz-core'\nimport { StrategyFactory, sendTronTransaction } from '@layerzerolabs/tron-utilities'\n\nimport { toEtherFormat, toValidHash } from '../utils/tron'\n\n/**\n * TronProvider is a wrapper around TronWeb that implements the Provider interface\n * It is implemented using ethers.js\n */\nexport class TronProvider implements Provider {\n nativeProvider: ethers.providers.StaticJsonRpcProvider\n\n /**\n *\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n private constructor(\n public url: string,\n apiKey?: string\n ) {\n this.nativeProvider = new ethers.providers.StaticJsonRpcProvider({\n url: StrategyFactory.get(url).asJSONRPC(url),\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronProvider\n static from(client: TronWeb): TronProvider\n\n static from(source: string | TronWeb, apiKey?: string): TronProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else if (source instanceof TronWeb) {\n const { host, headers } = source.fullNode\n return this.from(host, headers['TRON-PRO-API-KEY'])\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n /**\n * Returns the native provider\n */\n get native(): unknown {\n return this.nativeProvider\n }\n\n private buildTronWebFrom = mem(\n (provider: ethers.providers.Provider): TronWeb => {\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n\n return new TronWeb({\n privateKey: undefined,\n fullHost: StrategyFactory.get(url).asREST(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n }\n\n throw new Error(`The nativeSigner is not supported.`)\n },\n {\n cacheKey: (arguments_: [ethers.providers.Provider]): string => {\n const provider = arguments_[0]\n if (provider instanceof ethers.providers.JsonRpcProvider) {\n const { url } = provider.connection\n const apiKey = provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return JSON.stringify({ url, apiKey })\n }\n return JSON.stringify(provider)\n },\n }\n )\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.getBalance(toEtherFormat(address)).then((balance) => balance.toString())\n }\n\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.getBlock(blockTag)\n return Block.from(response)\n }\n\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.getBlockWithTransactions(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.getBlockNumber()\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.getBlock(blockTag).then((block) => block.timestamp)\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.getTransaction(toValidHash(txHash))\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n const response = await this.nativeProvider.getTransactionReceipt(toValidHash(txHash))\n return TransactionReceipt.from(response)\n }\n\n async getTransactionCount(\n _addressOrName: string | Promise<string>,\n _blockTag?: BlockTag | Promise<BlockTag>\n ): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not supported in Tron.')\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/json-rpc-api-overview\n // eth_sendRawTransaction is not supported in the JSON-RPC API of the TRON network\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const client = this.buildTronWebFrom(this.nativeProvider)\n const response = await sendTronTransaction(stx, client)\n\n return TransactionPending.from(response)\n }\n\n async sendAndConfirm(transaction: SignedTransaction, opts?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction, opts)).pending as {\n txId: string\n result: unknown\n wait: () => Promise<unknown>\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await pending.wait()\n return TransactionReceipt.from(response)\n }\n}\n","import { ethers } from 'ethers'\nimport TronWeb from 'tronweb'\n/**\n * ensureJsonRpcUrlPostfix ensures that the URL conforms to the TronGrid API convention by appending /jsonrpc if necessary.\n * @param url\n * @returns\n */\nexport function ensureJsonRpcUrlPostfix(url: string): string {\n // reference: https://developers.tron.network/docs/networks#mainnet\n // TronGrid API:https://api.trongrid.io\n // TronGrid JSON-RPC API: https://api.trongrid.io/jsonrpc\n // so that /jsonrpc is required to connect the JSON-RPC API endpoint\n const value = url.trim().replace(/\\/*$/, '')\n if (!value.endsWith('/jsonrpc')) {\n return value + '/jsonrpc'\n }\n return value\n}\n\n/**\n * removeJsonRpcUrlPostfix removes the /jsonrpc postfix from the URL\n */\nexport function removeJsonRpcUrlPostfix(url: string): string {\n return url.replace(/\\/jsonrpc$/, '')\n}\n\n/**\n * Convert a Tron address to a ethereum hex address\n * reference: https://developers.tron.network/docs/account#account-address-format\n * the TRON network account address can be a Hex format and Base58 format.\n * - The hex format is 42 characters long, removing the leading 41 from Hex format to get the Ethereum address.\n * - The Base58 format is 34 characters long, all Base58 addresses begin with T.\n * @param address\n * @returns\n */\nexport function toEtherFormat(address: string): string {\n if (address.startsWith('T') && address.length === 34) {\n return TronWeb.address.toHex(address).slice(2)\n } else if (address.startsWith('41') && address.length === 42) {\n return address.slice(2)\n } else {\n return address\n }\n}\n\n/**\n * Convert a transaction hash to a valid hash\n * reference: https://developers.tron.network/reference/eth_gettransactionbyhash\n * txHash should be a hex string with 0x, otherwise it will throw an error \"invalid hash\" - INVALID_ARGUMENT\n * @param txHash\n * @returns\n */\nexport function toValidHash(txHash: string): string {\n return ethers.utils.hexlify(txHash, { allowMissingPrefix: true })\n}\n","import TronWeb from 'tronweb'\n\nimport {\n Block,\n BlockTag,\n BlockWithTransactions,\n Finality,\n Provider,\n SignedTransaction,\n TransactionPending,\n TransactionReceipt,\n TransactionResponse,\n} from '@layerzerolabs/lz-core'\nimport { sleep } from '@layerzerolabs/lz-utilities'\n\nimport type { TransactionInfo } from 'tronweb'\n\n/**\n * TronWebProvider is a wrapper around TronWeb that implements the Provider interface\n *\n * PITFALL:\n * - This class is not compatible with ethers.js and is not fully tested.\n * - The format of the response from sendTransaction and the receipt from getTransactionReceipt differs\n * from that of the ethers provider.\n */\nexport class TronWebProvider implements Provider {\n nativeProvider: TronWeb\n\n /**\n * Create a new TronProvider\n * @param url RPC endpoint of the Tron full node, e.g. 'https://api.trongrid.io'\n * @param apiKey\n */\n constructor(\n public url: string,\n private apiKey?: string\n ) {\n this.nativeProvider = new TronWeb({\n fullHost: url,\n headers: {\n // use object destructuring to conditionally add header\n ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}),\n },\n })\n }\n\n static from(url: string, apiKey?: string): TronWebProvider\n\n static from(source: string, apiKey?: string): TronWebProvider {\n if (typeof source === 'string') {\n return new this(source, apiKey)\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeProvider\n }\n\n async getBalance(address: string): Promise<string> {\n return this.nativeProvider.trx.getBalance(address).then((balance: number) => balance.toString())\n }\n\n async getBlock(blockTag: string | number): Promise<Block> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return Block.from(response)\n }\n\n async getBlockWithTransactions(blockTag: string | number): Promise<BlockWithTransactions> {\n const response = await this.nativeProvider.trx.getBlock(blockTag)\n return BlockWithTransactions.from(response)\n }\n\n async getBlockNumber(): Promise<number> {\n return this.nativeProvider.trx\n .getBlock('latest')\n .then((block: { block_header: { raw_data: { number?: number } } }) => {\n if (block.block_header.raw_data.number === undefined) {\n throw new Error('Invalid block, block_header.raw_data.number is undefined')\n }\n return block.block_header.raw_data.number\n })\n }\n\n async getBlockTimestamp(blockTag: string | number): Promise<number> {\n return this.nativeProvider.trx\n .getBlock(blockTag)\n .then((block: { block_header: { raw_data: { timestamp?: number } } }) => {\n if (block.block_header.raw_data.timestamp === undefined) {\n throw new Error('Invalid block, block_header.raw_data.timestamp is undefined')\n }\n return block.block_header.raw_data.timestamp\n })\n }\n\n async getSlot(_finality?: Finality): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not implemented.')\n }\n\n async getTransaction(txHash: string): Promise<TransactionResponse> {\n const response = await this.nativeProvider.trx.getTransaction(txHash)\n return TransactionResponse.from(response)\n }\n\n async getTransactionReceipt(txHash: string): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/gettransactioninfobyid-1\n const response = await this.nativeProvider.trx.getTransactionInfo(txHash)\n return TransactionReceipt.from(response)\n }\n\n async getTransactionCount(\n _addressOrName: string | Promise<string>,\n _blockTag?: BlockTag | Promise<BlockTag>\n ): Promise<number> {\n await Promise.resolve()\n throw new Error('Method not supported in Tron.')\n }\n\n async sendTransaction(\n transaction: SignedTransaction,\n sendOptions?: { confirmations?: number }\n ): Promise<TransactionPending> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n type NativeSignedTransaction = Parameters<typeof this.nativeProvider.trx.sendRawTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n const response = await this.nativeProvider.trx.sendRawTransaction(stx, sendOptions)\n\n if (response.code !== undefined) {\n const error = {\n error: response.code,\n message: response.message !== undefined ? TronWeb.toUtf8(response.message) : response.code,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (response.txid === undefined) {\n throw new Error('Invalid response, txid is undefined')\n }\n\n return TransactionPending.from(response)\n }\n\n async waitTransaction(txHash: string, confirmations?: number): Promise<TransactionInfo | undefined> {\n let tries = 0\n while (tries++ < (confirmations ?? 20)) {\n // FIXME: not fully implemented\n const receipt = await this.getTransactionReceipt(txHash)\n const response = receipt.receipt as TransactionInfo\n if (!Object.keys(response).length) {\n // reference: https://developers.tron.network/page/faq\n // Within current testing environment, one block is produced every 3 seconds.\n // But for the local environment, it may take 1 minute to produce a block.\n await sleep(1200)\n continue\n }\n\n if (response.result !== undefined && response.result === 'FAILED') {\n const error = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n error: TronWeb.toUtf8(response.resMessage ?? ''),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n if (!('contractResult' in response)) {\n const error = {\n error: 'Failed to execute: ' + JSON.stringify(response, null, 2),\n response: response,\n }\n throw new Error(JSON.stringify(error, null, 2))\n }\n\n return response\n }\n return undefined\n }\n\n async sendAndConfirm(\n transaction: SignedTransaction,\n opts?: { confirmations?: number }\n ): Promise<TransactionReceipt> {\n // reference: https://developers.tron.network/reference/broadcasttransaction\n const pending = (await this.sendTransaction(transaction, opts)).pending as {\n result: boolean\n txid: string\n code: string\n message: string\n transaction: unknown\n wait: (confirmations?: number) => Promise<unknown>\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const response = await this.waitTransaction(pending.txid, opts?.confirmations)\n return TransactionReceipt.from(response)\n }\n}\n","import { ethers } from 'ethers'\nimport mem from 'mem'\nimport TronWeb from 'tronweb'\n\nimport {\n Provider,\n SignedTransaction,\n Signer,\n TransactionPending,\n TransactionReceipt,\n TransactionRequest,\n} from '@layerzerolabs/lz-core'\nimport { trim0x } from '@layerzerolabs/lz-utilities'\nimport { sendTronTransaction, signTronTx } from '@layerzerolabs/tron-utilities'\n\nimport { ensureJsonRpcUrlPostfix, removeJsonRpcUrlPostfix, toValidHash } from '../utils/tron'\n\n/**\n * TronSigner is a wrapper around TronWeb that implements the Signer interface\n * It is implemented using ethers.js\n */\nexport class TronSigner implements Signer {\n private readonly nativeSigner: ethers.Signer\n\n private constructor(signer: ethers.Signer) {\n this.nativeSigner = signer\n }\n\n static from(source: ethers.Signer): Signer\n static from(client: TronWeb): Signer\n static from(privKey: string): Signer\n static from(mnemonic: string, path: string): Signer\n\n static from(source: ethers.Signer | TronWeb | string, path?: string): Signer {\n if (source instanceof ethers.Signer) {\n return new this(source)\n } else if (source instanceof TronWeb) {\n const apiKey = source.fullNode.headers['TRON-PRO-API-KEY']\n const provider = new ethers.providers.JsonRpcProvider({\n url: ensureJsonRpcUrlPostfix(source.fullNode.host),\n headers: { ...(typeof apiKey !== 'undefined' ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n\n return new this(new ethers.Wallet(source.defaultPrivateKey as string, provider))\n } else if (typeof source === 'string' && path === undefined) {\n return new this(new ethers.Wallet(source))\n } else if (typeof source === 'string' && path !== undefined) {\n return new this(ethers.Wallet.fromMnemonic(source, path))\n } else {\n throw new Error('Invalid parameters')\n }\n }\n\n get native(): unknown {\n return this.nativeSigner\n }\n\n connect(provider: Provider): Signer {\n if (!(provider.native instanceof ethers.providers.JsonRpcProvider)) {\n throw new Error('Only JsonRpcProvider is supported.')\n }\n\n const signer = this.nativeSigner.connect(provider.native as ethers.providers.Provider)\n // hack: ethers.utils.defineReadOnly does not work with private properties\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n ethers.utils.defineReadOnly(this, 'nativeSigner' as keyof this, signer as any)\n\n return this\n }\n\n static buildTronWebFrom(signer: ethers.Signer): TronWeb {\n if (signer instanceof ethers.Wallet) {\n if (signer.provider instanceof ethers.providers.JsonRpcProvider) {\n const apiKey = signer.provider.connection.headers?.['TRON-PRO-API-KEY'] as string | undefined\n return this.createTronWeb(signer.provider.connection.url, signer.privateKey, apiKey)\n }\n }\n throw new Error(`The nativeSigner is not supported.`)\n }\n\n static createTronWeb = mem(\n (url: string, privateKey: string, apiKey?: string): TronWeb => {\n return new TronWeb({\n privateKey: trim0x(privateKey),\n fullHost: removeJsonRpcUrlPostfix(url),\n headers: { ...(apiKey !== undefined ? { 'TRON-PRO-API-KEY': apiKey } : {}) },\n })\n },\n { cacheKey: (arguments_) => JSON.stringify(arguments_) }\n )\n\n async getAddress(): Promise<string> {\n // reference: https://developers.tron.network/docs/tvm#differences-from-evm\n return this.nativeSigner.getAddress()\n }\n\n async sendAndConfirm(transaction: SignedTransaction, _opts?: object): Promise<TransactionReceipt> {\n const pending = (await this.sendTransaction(transaction)).pending as {\n txId: string\n wait: () => unknown\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n await pending.wait()\n const response = await this.nativeSigner.provider?.getTransactionReceipt(toValidHash(pending.txId))\n return TransactionReceipt.from(response)\n }\n\n async signTransaction(transaction: TransactionRequest): Promise<SignedTransaction> {\n type NativeSignedTransaction = ethers.PopulatedTransaction\n const tx = transaction.request as NativeSignedTransaction\n if (tx.data === undefined || tx.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n\n TronSigner.validateTransaction(tx)\n const client = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await signTronTx(\n {\n data: tx.data,\n to: tx.to,\n gasLimit: tx.gasLimit?.toNumber(),\n gasPrice: tx.gasPrice?.toNumber(),\n value: tx.value?.toNumber(),\n // energyFactor: transaction.energyFactor, // TODO: add energyFactor\n },\n client\n )\n return SignedTransaction.from(response)\n }\n\n async sendTransaction(transaction: SignedTransaction, _sendOptions?: object): Promise<TransactionPending> {\n type NativeSignedTransaction = Parameters<typeof sendTronTransaction>[0]\n const stx = transaction.signed as NativeSignedTransaction\n\n const tronWeb = TronSigner.buildTronWebFrom(this.nativeSigner)\n const response = await sendTronTransaction(stx, tronWeb)\n return TransactionPending.from(response)\n }\n\n async signBuffer(buffer: Uint8Array): Promise<Uint8Array> {\n // ETH_MESSAGE_HEADER is defined as '\\x19Ethereum Signed Message:\\n32' in TronWeb,\n // which will cause the signature to be different from ethers.js if the message length is not 32 bytes\n const signedMessage = await this.nativeSigner.signMessage(buffer)\n return ethers.utils.arrayify(signedMessage)\n }\n\n static validateTransaction(transaction: ethers.PopulatedTransaction): boolean {\n if (transaction.data === undefined || transaction.to === undefined) {\n throw new Error('Invalid transaction, missing data or to')\n }\n return true\n }\n}\n","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.42",
3
+ "version": "2.3.43",
4
4
  "description": "LayerZero Core Library",
5
5
  "license": "BUSL-1.1",
6
6
  "exports": {
@@ -23,10 +23,10 @@
23
23
  "clean-prebuild": "rimraf dist"
24
24
  },
25
25
  "dependencies": {
26
- "@layerzerolabs/lz-aptos-sdk-v1": "^2.3.42",
27
- "@layerzerolabs/lz-core": "^2.3.42",
28
- "@layerzerolabs/lz-utilities": "^2.3.42",
29
- "@layerzerolabs/tron-utilities": "^2.3.42",
26
+ "@layerzerolabs/lz-aptos-sdk-v1": "workspace:^",
27
+ "@layerzerolabs/lz-core": "workspace:^",
28
+ "@layerzerolabs/lz-utilities": "workspace:^",
29
+ "@layerzerolabs/tron-utilities": "workspace:^",
30
30
  "aptos": "^1.20.0",
31
31
  "bip39": "^3.1.0",
32
32
  "ed25519-hd-key": "^1.3.0",
@@ -37,9 +37,9 @@
37
37
  },
38
38
  "devDependencies": {
39
39
  "@jest/globals": "^29.7.0",
40
- "@layerzerolabs/tronweb-typescript": "^0.0.0",
41
- "@layerzerolabs/tsup-config-next": "^2.3.42",
42
- "@layerzerolabs/typescript-config-next": "^2.3.42",
40
+ "@layerzerolabs/tronweb-typescript": "workspace:^",
41
+ "@layerzerolabs/tsup-config-next": "workspace:^",
42
+ "@layerzerolabs/typescript-config-next": "workspace:^",
43
43
  "@types/jest": "^29.5.10",
44
44
  "@types/tronweb": "npm:@layerzerolabs/tronweb-typescript@workspace:^",
45
45
  "jest": "^29.7.0",
@@ -52,4 +52,4 @@
52
52
  "publishConfig": {
53
53
  "access": "public"
54
54
  }
55
- }
55
+ }
package/CHANGELOG.md DELETED
@@ -1,429 +0,0 @@
1
- # @layerzerolabs/lz-corekit-tron
2
-
3
- ## 2.3.42
4
-
5
- ### Patch Changes
6
-
7
- - 515ca0a: mainnets: Bitlayer, DM2Verse. testnets: morph, ozean
8
- - Updated dependencies [515ca0a]
9
- - @layerzerolabs/lz-core@2.3.42
10
- - @layerzerolabs/tron-utilities@2.3.42
11
- - @layerzerolabs/lz-utilities@2.3.42
12
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.42
13
-
14
- ## 2.3.41
15
-
16
- ### Patch Changes
17
-
18
- - b01c51c: mainnet: Reya
19
- - Updated dependencies [b01c51c]
20
- - @layerzerolabs/lz-core@2.3.41
21
- - @layerzerolabs/tron-utilities@2.3.41
22
- - @layerzerolabs/lz-utilities@2.3.41
23
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.41
24
-
25
- ## 2.3.40
26
-
27
- ### Patch Changes
28
-
29
- - c631c6e: mainnet: Ape chain endpoint
30
- - Updated dependencies [c631c6e]
31
- - @layerzerolabs/lz-core@2.3.40
32
- - @layerzerolabs/tron-utilities@2.3.40
33
- - @layerzerolabs/lz-utilities@2.3.40
34
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.40
35
-
36
- ## 2.3.39
37
-
38
- ### Patch Changes
39
-
40
- - 01a6cb7: testnets: bitlayer, dm2verse, story
41
- - Updated dependencies [01a6cb7]
42
- - @layerzerolabs/lz-core@2.3.39
43
- - @layerzerolabs/tron-utilities@2.3.39
44
- - @layerzerolabs/lz-utilities@2.3.39
45
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.39
46
-
47
- ## 2.3.38
48
-
49
- ### Patch Changes
50
-
51
- - 5ddfb3b: remove `OFT_DEFAULT_PROGRAM_ID` from soalan sdk
52
- - Updated dependencies [5ddfb3b]
53
- - @layerzerolabs/lz-core@2.3.38
54
- - @layerzerolabs/tron-utilities@2.3.38
55
- - @layerzerolabs/lz-utilities@2.3.38
56
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.38
57
-
58
- ## 2.3.37
59
-
60
- ### Patch Changes
61
-
62
- - 883c143: mainnet endpoints: Lyra, Codex, testnets: root redeploy, reya
63
- - Updated dependencies [883c143]
64
- - @layerzerolabs/lz-core@2.3.37
65
- - @layerzerolabs/tron-utilities@2.3.37
66
- - @layerzerolabs/lz-utilities@2.3.37
67
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.37
68
-
69
- ## 2.3.36
70
-
71
- ### Patch Changes
72
-
73
- - 291ef75: fix solana sdk
74
- - Updated dependencies [291ef75]
75
- - @layerzerolabs/lz-core@2.3.36
76
- - @layerzerolabs/tron-utilities@2.3.36
77
- - @layerzerolabs/lz-utilities@2.3.36
78
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.36
79
-
80
- ## 2.3.35
81
-
82
- ### Patch Changes
83
-
84
- - 9913f53: new endpoints
85
- - 21a267f: testnets: otherworld, abstract, root
86
- - Updated dependencies [9913f53]
87
- - Updated dependencies [21a267f]
88
- - @layerzerolabs/lz-core@2.3.35
89
- - @layerzerolabs/tron-utilities@2.3.35
90
- - @layerzerolabs/lz-utilities@2.3.35
91
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.35
92
-
93
- ## 2.3.35-aptos.0
94
-
95
- ### Patch Changes
96
-
97
- - 7744b25: Add Aptos v1 support in testify, all tests passed.
98
- - Updated dependencies [7744b25]
99
- - @layerzerolabs/lz-core@2.3.35-aptos.0
100
- - @layerzerolabs/tron-utilities@2.3.35-aptos.0
101
- - @layerzerolabs/lz-utilities@2.3.35-aptos.0
102
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.35-aptos.0
103
-
104
- ## 2.3.34
105
-
106
- ### Patch Changes
107
-
108
- - 5a99681: Fix an issue in Solana
109
- - Updated dependencies [5a99681]
110
- - @layerzerolabs/lz-core@2.3.34
111
- - @layerzerolabs/tron-utilities@2.3.34
112
- - @layerzerolabs/lz-utilities@2.3.34
113
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.34
114
-
115
- ## 2.3.33
116
-
117
- ### Patch Changes
118
-
119
- - d9c0c10: testnets: new solana devnet, codex(evm), bahamut (evm)
120
- - 1099b5f: testnets: lif3,iota,lyra,lightlink
121
- - Updated dependencies [d9c0c10]
122
- - Updated dependencies [1099b5f]
123
- - @layerzerolabs/lz-core@2.3.33
124
- - @layerzerolabs/tron-utilities@2.3.33
125
- - @layerzerolabs/lz-utilities@2.3.33
126
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.33
127
-
128
- ## 2.3.32
129
-
130
- ### Patch Changes
131
-
132
- - e846939: testnets: lif3,iota,lyra,lightlink
133
- - 334b51e: endpoints, including flare mainnet
134
- - 334b51e: zklink mainnet, and testnets
135
- - 334b51e: testnet endpoints
136
- - Updated dependencies [e846939]
137
- - Updated dependencies [334b51e]
138
- - Updated dependencies [334b51e]
139
- - Updated dependencies [334b51e]
140
- - @layerzerolabs/lz-core@2.3.32
141
- - @layerzerolabs/tron-utilities@2.3.32
142
- - @layerzerolabs/lz-utilities@2.3.32
143
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.32
144
-
145
- ## 2.3.31
146
-
147
- ### Patch Changes
148
-
149
- - 29fecfc: testnets: zksyncsep v2 redeploy, curtis
150
- - Updated dependencies [29fecfc]
151
- - @layerzerolabs/lz-core@2.3.31
152
- - @layerzerolabs/tron-utilities@2.3.31
153
- - @layerzerolabs/lz-utilities@2.3.31
154
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.31
155
-
156
- ## 2.3.30
157
-
158
- ### Patch Changes
159
-
160
- - 32f8ebd: peaq,zircuit mainnet, and plume testnet
161
- - b602b9f: peaq,zircuit mainnet, and plume testnet
162
- - Updated dependencies [32f8ebd]
163
- - Updated dependencies [b602b9f]
164
- - @layerzerolabs/lz-core@2.3.30
165
- - @layerzerolabs/tron-utilities@2.3.30
166
- - @layerzerolabs/lz-utilities@2.3.30
167
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.30
168
-
169
- ## 2.3.29
170
-
171
- ### Patch Changes
172
-
173
- - a42fff0: endpoints, including flare mainnet
174
- - a42fff0: zklink mainnet, and testnets
175
- - a42fff0: testnet endpoints
176
- - Updated dependencies [a42fff0]
177
- - Updated dependencies [a42fff0]
178
- - Updated dependencies [a42fff0]
179
- - @layerzerolabs/lz-core@2.3.29
180
- - @layerzerolabs/tron-utilities@2.3.29
181
- - @layerzerolabs/lz-utilities@2.3.29
182
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.29
183
-
184
- ## 2.3.28
185
-
186
- ### Patch Changes
187
-
188
- - 23d7ea0: endpoints, including flare mainnet
189
- - 23d7ea0: zklink mainnet, and testnets
190
- - 8a40261: Fix some known issues in Solana
191
- - 23d7ea0: testnet endpoints
192
- - Updated dependencies [23d7ea0]
193
- - Updated dependencies [23d7ea0]
194
- - Updated dependencies [8a40261]
195
- - Updated dependencies [23d7ea0]
196
- - @layerzerolabs/lz-core@2.3.28
197
- - @layerzerolabs/tron-utilities@2.3.28
198
- - @layerzerolabs/lz-utilities@2.3.28
199
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.28
200
-
201
- ## 2.3.27
202
-
203
- ### Patch Changes
204
-
205
- - e382bef: Update the access property of the `hardhat-tron` package
206
- - d41cbe9: endpoints, including flare mainnet
207
- - d41cbe9: testnet endpoints
208
- - Updated dependencies [e382bef]
209
- - Updated dependencies [d41cbe9]
210
- - Updated dependencies [d41cbe9]
211
- - @layerzerolabs/lz-core@2.3.27
212
- - @layerzerolabs/tron-utilities@2.3.27
213
- - @layerzerolabs/lz-utilities@2.3.27
214
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.27
215
-
216
- ## 2.3.26
217
-
218
- ### Patch Changes
219
-
220
- - 92a9a2e: upgrade solana mainnet executor/uln
221
- - Updated dependencies [92a9a2e]
222
- - @layerzerolabs/lz-core@2.3.26
223
- - @layerzerolabs/tron-utilities@2.3.26
224
- - @layerzerolabs/lz-utilities@2.3.26
225
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.26
226
-
227
- ## 2.3.25
228
-
229
- ### Patch Changes
230
-
231
- - 003371b: endpoints, including flare mainnet
232
- - 003371b: testnet endpoints
233
- - Updated dependencies [003371b]
234
- - Updated dependencies [003371b]
235
- - @layerzerolabs/lz-core@2.3.25
236
- - @layerzerolabs/tron-utilities@2.3.25
237
- - @layerzerolabs/lz-utilities@2.3.25
238
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.25
239
-
240
- ## 2.3.24
241
-
242
- ### Patch Changes
243
-
244
- - 255da39: Fix some known issues in the OFT SDK
245
- - Updated dependencies [255da39]
246
- - @layerzerolabs/lz-core@2.3.24
247
- - @layerzerolabs/tron-utilities@2.3.24
248
- - @layerzerolabs/lz-utilities@2.3.24
249
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.24
250
-
251
- ## 2.3.23
252
-
253
- ### Patch Changes
254
-
255
- - 1e42a63: bump version: default distribution tag is `latest`
256
- - 43c0e8f: endpoints: bouncebit, gravity ... testnet: bartio bera chain
257
- - Updated dependencies [1e42a63]
258
- - Updated dependencies [43c0e8f]
259
- - @layerzerolabs/lz-core@2.3.23
260
- - @layerzerolabs/tron-utilities@2.3.23
261
- - @layerzerolabs/lz-utilities@2.3.23
262
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.23
263
-
264
- ## 2.3.22
265
-
266
- ### Patch Changes
267
-
268
- - 571e2c2: update oft sdk
269
- - Updated dependencies [571e2c2]
270
- - @layerzerolabs/lz-core@2.3.22
271
- - @layerzerolabs/tron-utilities@2.3.22
272
- - @layerzerolabs/lz-utilities@2.3.22
273
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.22
274
-
275
- ## 2.3.21
276
-
277
- ### Patch Changes
278
-
279
- - 2a5e6c8: fix some bugs & public lz-solana-sdk-v2 & upgrade @solana/web3.js
280
- - Updated dependencies [2a5e6c8]
281
- - @layerzerolabs/lz-core@2.3.21
282
- - @layerzerolabs/tron-utilities@2.3.21
283
- - @layerzerolabs/lz-utilities@2.3.21
284
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.21
285
-
286
- ## 2.3.20
287
-
288
- ### Patch Changes
289
-
290
- - 1b332c1: endpoints: taiko,joc,xchain,etherlink, testnet:bouncebit
291
- - Updated dependencies [1b332c1]
292
- - @layerzerolabs/lz-core@2.3.20
293
- - @layerzerolabs/tron-utilities@2.3.20
294
- - @layerzerolabs/lz-utilities@2.3.20
295
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.20
296
-
297
- ## 2.3.19
298
-
299
- ### Patch Changes
300
-
301
- - 5fce234: minor update & fix some bugs
302
- - Updated dependencies [5fce234]
303
- - @layerzerolabs/lz-core@2.3.19
304
- - @layerzerolabs/tron-utilities@2.3.19
305
- - @layerzerolabs/lz-utilities@2.3.19
306
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.19
307
-
308
- ## 2.3.18
309
-
310
- ### Patch Changes
311
-
312
- - d7ddb1e: Make `solana-sdk` compatible with browsers
313
- - Updated dependencies [d7ddb1e]
314
- - @layerzerolabs/lz-core@2.3.18
315
- - @layerzerolabs/tron-utilities@2.3.18
316
- - @layerzerolabs/lz-utilities@2.3.18
317
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.18
318
-
319
- ## 2.3.17
320
-
321
- ### Patch Changes
322
-
323
- - 7e1d72a: minor update & fix some bugs
324
- - a255697: SEI mainnet
325
- - Updated dependencies [7e1d72a]
326
- - Updated dependencies [a255697]
327
- - @layerzerolabs/lz-core@2.3.17
328
- - @layerzerolabs/tron-utilities@2.3.17
329
- - @layerzerolabs/lz-utilities@2.3.17
330
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.17
331
-
332
- ## 2.3.16
333
-
334
- ### Patch Changes
335
-
336
- - b0ac3fe: deploy & config oft
337
- - Updated dependencies [b0ac3fe]
338
- - @layerzerolabs/lz-core@2.3.16
339
- - @layerzerolabs/tron-utilities@2.3.16
340
- - @layerzerolabs/lz-utilities@2.3.16
341
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.16
342
-
343
- ## 2.3.15
344
-
345
- ### Patch Changes
346
-
347
- - 66c554b: minor update & fix some bugs
348
- - Updated dependencies [66c554b]
349
- - @layerzerolabs/lz-core@2.3.15
350
- - @layerzerolabs/tron-utilities@2.3.15
351
- - @layerzerolabs/lz-utilities@2.3.15
352
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.15
353
-
354
- ## 2.3.14
355
-
356
- ### Patch Changes
357
-
358
- - minor update
359
- - Updated dependencies
360
- - @layerzerolabs/lz-core@2.3.14
361
- - @layerzerolabs/tron-utilities@2.3.14
362
- - @layerzerolabs/lz-utilities@2.3.14
363
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.14
364
-
365
- ## 2.3.13
366
-
367
- ### Patch Changes
368
-
369
- - c294e0e: add missing artifacts
370
- - Updated dependencies [c294e0e]
371
- - @layerzerolabs/lz-core@2.3.13
372
- - @layerzerolabs/tron-utilities@2.3.13
373
- - @layerzerolabs/lz-utilities@2.3.13
374
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.13
375
-
376
- ## 2.3.12
377
-
378
- ### Patch Changes
379
-
380
- - 2761d43: minor update & fix some bugs
381
- - Updated dependencies [2761d43]
382
- - @layerzerolabs/lz-core@2.3.12
383
- - @layerzerolabs/tron-utilities@2.3.12
384
- - @layerzerolabs/lz-utilities@2.3.12
385
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.12
386
-
387
- ## 2.3.11
388
-
389
- ### Patch Changes
390
-
391
- - a7ee3c1: mainnet endpoints, cyber, iota
392
- - Updated dependencies [a7ee3c1]
393
- - @layerzerolabs/lz-core@2.3.11
394
- - @layerzerolabs/tron-utilities@2.3.11
395
- - @layerzerolabs/lz-utilities@2.3.11
396
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.11
397
-
398
- ## 2.3.10
399
-
400
- ### Patch Changes
401
-
402
- - b9804e1: export tron and zksync artifacts to sdk
403
- - Updated dependencies [b9804e1]
404
- - @layerzerolabs/lz-core@2.3.10
405
- - @layerzerolabs/tron-utilities@2.3.10
406
- - @layerzerolabs/lz-utilities@2.3.10
407
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.10
408
-
409
- ## 2.3.9
410
-
411
- ### Patch Changes
412
-
413
- - c208955: minor update & fix some bugs
414
- - Updated dependencies [c208955]
415
- - @layerzerolabs/lz-core@2.3.9
416
- - @layerzerolabs/tron-utilities@2.3.9
417
- - @layerzerolabs/lz-utilities@2.3.9
418
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.9
419
-
420
- ## 2.3.8
421
-
422
- ### Patch Changes
423
-
424
- - e0f5d04: deploy contracts to Ebi mainnet
425
- - Updated dependencies [e0f5d04]
426
- - @layerzerolabs/lz-core@2.3.8
427
- - @layerzerolabs/tron-utilities@2.3.8
428
- - @layerzerolabs/lz-utilities@2.3.8
429
- - @layerzerolabs/lz-aptos-sdk-v1@2.3.8