@dynamic-labs-sdk/tron 1.2.0 → 1.3.0
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/addTronWalletAdaptersExtension-Br5QlcMM.cjs +139 -0
- package/dist/addTronWalletAdaptersExtension-Br5QlcMM.cjs.map +1 -0
- package/dist/addTronWalletAdaptersExtension-Bv-FsxVZ.esm.js +134 -0
- package/dist/addTronWalletAdaptersExtension-Bv-FsxVZ.esm.js.map +1 -0
- package/dist/exports/waas.d.ts +3 -0
- package/dist/exports/waas.d.ts.map +1 -0
- package/dist/index.cjs +6 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +2 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/{addTronWalletAdaptersExtension-CRT78LW9.cjs → tronTransferAmount-BkKNm0yq.cjs} +26 -135
- package/dist/tronTransferAmount-BkKNm0yq.cjs.map +1 -0
- package/dist/{addTronWalletAdaptersExtension-C-aTCl8A.esm.js → tronTransferAmount-YysbSWMI.esm.js} +5 -132
- package/dist/tronTransferAmount-YysbSWMI.esm.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/waas/WaasTronWalletProvider.types.d.ts +10 -0
- package/dist/waas/WaasTronWalletProvider.types.d.ts.map +1 -0
- package/dist/waas/addWaasTronExtension/addWaasTronExtension.d.ts +12 -0
- package/dist/waas/addWaasTronExtension/addWaasTronExtension.d.ts.map +1 -0
- package/dist/waas/addWaasTronExtension/index.d.ts +2 -0
- package/dist/waas/addWaasTronExtension/index.d.ts.map +1 -0
- package/dist/waas/utils/createWalletProviderForWaasTron/createWalletProviderForWaasTron.d.ts +9 -0
- package/dist/waas/utils/createWalletProviderForWaasTron/createWalletProviderForWaasTron.d.ts.map +1 -0
- package/dist/waas/utils/createWalletProviderForWaasTron/index.d.ts +2 -0
- package/dist/waas/utils/createWalletProviderForWaasTron/index.d.ts.map +1 -0
- package/dist/waas.cjs +116 -0
- package/dist/waas.cjs.map +1 -0
- package/dist/waas.esm.js +116 -0
- package/dist/waas.esm.js.map +1 -0
- package/dist/walletAdapters.cjs +3 -2
- package/dist/walletAdapters.cjs.map +1 -1
- package/dist/walletAdapters.esm.js +2 -1
- package/dist/walletAdapters.esm.js.map +1 -1
- package/package.json +9 -4
- package/dist/addTronWalletAdaptersExtension-C-aTCl8A.esm.js.map +0 -1
- package/dist/addTronWalletAdaptersExtension-CRT78LW9.cjs.map +0 -1
package/dist/{addTronWalletAdaptersExtension-CRT78LW9.cjs → tronTransferAmount-BkKNm0yq.cjs}
RENAMED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
|
|
2
|
-
let _tronweb3_tronwallet_adapters = require("@tronweb3/tronwallet-adapters");
|
|
3
2
|
let tronweb = require("tronweb");
|
|
4
3
|
let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
|
|
5
|
-
let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
|
|
6
|
-
let _tronweb3_tronwallet_abstract_adapter = require("@tronweb3/tronwallet-abstract-adapter");
|
|
7
4
|
|
|
8
5
|
//#region package.json
|
|
9
6
|
var name = "@dynamic-labs-sdk/tron";
|
|
10
|
-
var version = "1.
|
|
7
|
+
var version = "1.3.0";
|
|
11
8
|
|
|
12
9
|
//#endregion
|
|
13
10
|
//#region src/utils/constants.ts
|
|
@@ -44,11 +41,6 @@ const registerTronNetworkProviderBuilder = (client) => {
|
|
|
44
41
|
});
|
|
45
42
|
};
|
|
46
43
|
|
|
47
|
-
//#endregion
|
|
48
|
-
//#region src/utils/convertChainIdToDecimal/convertChainIdToDecimal.ts
|
|
49
|
-
/** @not-instrumented */
|
|
50
|
-
const convertChainIdToDecimal = (chainId) => chainId.startsWith("0x") ? parseInt(chainId, 16).toString() : chainId;
|
|
51
|
-
|
|
52
44
|
//#endregion
|
|
53
45
|
//#region src/isTronWalletAccount/isTronWalletAccount.ts
|
|
54
46
|
/** @not-instrumented */
|
|
@@ -162,125 +154,6 @@ const tronTransferAmount = async ({ amount, recipient, token, walletAccount }, c
|
|
|
162
154
|
return { transactionHash: (await tronWeb.trx.sendTransaction(recipient, Number(sunAmount), { address: walletAccount.address })).txid };
|
|
163
155
|
};
|
|
164
156
|
|
|
165
|
-
//#endregion
|
|
166
|
-
//#region src/walletAdapters/utils/createWalletProviderForTronWalletAdapter/createWalletProviderForTronWalletAdapter.ts
|
|
167
|
-
/** @not-instrumented */
|
|
168
|
-
const createWalletProviderForTronWalletAdapter = ({ dynamicClient, adapter }) => {
|
|
169
|
-
const chain = "TRON";
|
|
170
|
-
const tronAdapter = adapter;
|
|
171
|
-
if (tronAdapter.readyState !== _tronweb3_tronwallet_abstract_adapter.WalletReadyState.Found) return;
|
|
172
|
-
const metadata = {
|
|
173
|
-
displayName: tronAdapter.name,
|
|
174
|
-
icon: tronAdapter.icon
|
|
175
|
-
};
|
|
176
|
-
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
177
|
-
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
178
|
-
chain,
|
|
179
|
-
displayName: metadata.displayName,
|
|
180
|
-
walletProviderType
|
|
181
|
-
});
|
|
182
|
-
const connect = async () => {
|
|
183
|
-
await tronAdapter.connect();
|
|
184
|
-
const startTime = Date.now();
|
|
185
|
-
while (!tronAdapter.address?.length && Date.now() - startTime < 1e3) await new Promise((resolve) => setTimeout(resolve, 50));
|
|
186
|
-
return { addresses: tronAdapter.address ? [{ address: tronAdapter.address }] : [] };
|
|
187
|
-
};
|
|
188
|
-
const destroy = async () => {
|
|
189
|
-
try {
|
|
190
|
-
await tronAdapter.disconnect();
|
|
191
|
-
} catch (err) {
|
|
192
|
-
(0, _dynamic_labs_sdk_client_core.getCore)(dynamicClient).logger.error(`[${key}] destroy: remote signal failed`, err);
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
const getActiveNetworkId = async () => {
|
|
196
|
-
return { networkId: convertChainIdToDecimal((await tronAdapter.network()).chainId) };
|
|
197
|
-
};
|
|
198
|
-
const getConnectedAddresses = async () => {
|
|
199
|
-
return { addresses: tronAdapter.address ? [tronAdapter.address] : [] };
|
|
200
|
-
};
|
|
201
|
-
const signMessage = async ({ message, walletAccount }) => {
|
|
202
|
-
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
203
|
-
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
204
|
-
return { signature: await tronAdapter.signMessage(message) };
|
|
205
|
-
};
|
|
206
|
-
const getTronWeb = async ({ walletAccount }) => {
|
|
207
|
-
const tronWeb = tronAdapter._wallet?.tronWeb || tronAdapter._wallet?.tron?.tronWeb;
|
|
208
|
-
if (tronWeb) return tronWeb;
|
|
209
|
-
const activeNetworkData = await (0, _dynamic_labs_sdk_client.getActiveNetworkData)({ walletAccount }, dynamicClient);
|
|
210
|
-
(0, _dynamic_labs_sdk_client_core.assertDefined)(activeNetworkData, "No active network data found");
|
|
211
|
-
const url = activeNetworkData.networkData?.rpcUrls.http[0];
|
|
212
|
-
(0, _dynamic_labs_sdk_client_core.assertDefined)(url, "No RPC URL found for active network");
|
|
213
|
-
return new tronweb.TronWeb({ fullHost: url });
|
|
214
|
-
};
|
|
215
|
-
return {
|
|
216
|
-
chain,
|
|
217
|
-
confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),
|
|
218
|
-
connect,
|
|
219
|
-
destroy,
|
|
220
|
-
executeSwapTransaction: (args) => tronExecuteSwapTransaction(args, dynamicClient),
|
|
221
|
-
getActiveNetworkId,
|
|
222
|
-
getConnectedAddresses,
|
|
223
|
-
getTronWeb,
|
|
224
|
-
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(metadata.displayName),
|
|
225
|
-
key,
|
|
226
|
-
metadata,
|
|
227
|
-
signMessage,
|
|
228
|
-
transferAmount: (args) => tronTransferAmount(args, dynamicClient),
|
|
229
|
-
walletProviderType
|
|
230
|
-
};
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
//#endregion
|
|
234
|
-
//#region src/walletAdapters/addTronWalletAdaptersExtension/addTronWalletAdaptersExtension.ts
|
|
235
|
-
const TRON_WALLET_ADAPTERS_EXTENSION_KEY = "tronWalletAdapters";
|
|
236
|
-
/**
|
|
237
|
-
* Adds the Tron Wallet Adapters extension to the Dynamic client.
|
|
238
|
-
*
|
|
239
|
-
* This extension enables integration with wallets that have related Tron Wallet Adapters ('@tronweb3/tronwallet-adapters'),
|
|
240
|
-
* automatically registering compatible wallets for use with the Dynamic SDK.
|
|
241
|
-
*
|
|
242
|
-
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
243
|
-
* @not-instrumented
|
|
244
|
-
*/
|
|
245
|
-
const addTronWalletAdaptersExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
|
|
246
|
-
if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY }, client)) return;
|
|
247
|
-
(0, _dynamic_labs_sdk_client_core.registerExtension)({ extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY }, client);
|
|
248
|
-
registerTronNetworkProviderBuilder(client);
|
|
249
|
-
const walletProviderRegistry = (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client);
|
|
250
|
-
const tronWalletProviders = [];
|
|
251
|
-
const okxWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
252
|
-
adapter: new _tronweb3_tronwallet_adapters.OkxWalletAdapter(),
|
|
253
|
-
dynamicClient: client
|
|
254
|
-
});
|
|
255
|
-
if (okxWalletProvider) tronWalletProviders.push(okxWalletProvider);
|
|
256
|
-
const tronLinkWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
257
|
-
adapter: new _tronweb3_tronwallet_adapters.TronLinkAdapter(),
|
|
258
|
-
dynamicClient: client
|
|
259
|
-
});
|
|
260
|
-
if (tronLinkWalletProvider) tronWalletProviders.push(tronLinkWalletProvider);
|
|
261
|
-
const trustWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
262
|
-
adapter: new _tronweb3_tronwallet_adapters.TrustAdapter(),
|
|
263
|
-
dynamicClient: client
|
|
264
|
-
});
|
|
265
|
-
if (trustWalletProvider) tronWalletProviders.push(trustWalletProvider);
|
|
266
|
-
const tokenPocketWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
267
|
-
adapter: new _tronweb3_tronwallet_adapters.TokenPocketAdapter(),
|
|
268
|
-
dynamicClient: client
|
|
269
|
-
});
|
|
270
|
-
if (tokenPocketWalletProvider) tronWalletProviders.push(tokenPocketWalletProvider);
|
|
271
|
-
const bitgetWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
272
|
-
adapter: new _tronweb3_tronwallet_adapters.BitKeepAdapter(),
|
|
273
|
-
dynamicClient: client
|
|
274
|
-
});
|
|
275
|
-
if (bitgetWalletProvider) tronWalletProviders.push(bitgetWalletProvider);
|
|
276
|
-
tronWalletProviders.forEach((walletProvider) => {
|
|
277
|
-
walletProviderRegistry.register({
|
|
278
|
-
priority: _dynamic_labs_sdk_client_core.WalletProviderPriority.WINDOW_INJECT,
|
|
279
|
-
walletProvider
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
};
|
|
283
|
-
|
|
284
157
|
//#endregion
|
|
285
158
|
Object.defineProperty(exports, 'NotTronProviderError', {
|
|
286
159
|
enumerable: true,
|
|
@@ -288,12 +161,6 @@ Object.defineProperty(exports, 'NotTronProviderError', {
|
|
|
288
161
|
return NotTronProviderError;
|
|
289
162
|
}
|
|
290
163
|
});
|
|
291
|
-
Object.defineProperty(exports, 'addTronWalletAdaptersExtension', {
|
|
292
|
-
enumerable: true,
|
|
293
|
-
get: function () {
|
|
294
|
-
return addTronWalletAdaptersExtension;
|
|
295
|
-
}
|
|
296
|
-
});
|
|
297
164
|
Object.defineProperty(exports, 'isTronWalletAccount', {
|
|
298
165
|
enumerable: true,
|
|
299
166
|
get: function () {
|
|
@@ -312,10 +179,34 @@ Object.defineProperty(exports, 'name', {
|
|
|
312
179
|
return name;
|
|
313
180
|
}
|
|
314
181
|
});
|
|
182
|
+
Object.defineProperty(exports, 'registerTronNetworkProviderBuilder', {
|
|
183
|
+
enumerable: true,
|
|
184
|
+
get: function () {
|
|
185
|
+
return registerTronNetworkProviderBuilder;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
Object.defineProperty(exports, 'tronConfirmTransaction', {
|
|
189
|
+
enumerable: true,
|
|
190
|
+
get: function () {
|
|
191
|
+
return tronConfirmTransaction;
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
Object.defineProperty(exports, 'tronExecuteSwapTransaction', {
|
|
195
|
+
enumerable: true,
|
|
196
|
+
get: function () {
|
|
197
|
+
return tronExecuteSwapTransaction;
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
Object.defineProperty(exports, 'tronTransferAmount', {
|
|
201
|
+
enumerable: true,
|
|
202
|
+
get: function () {
|
|
203
|
+
return tronTransferAmount;
|
|
204
|
+
}
|
|
205
|
+
});
|
|
315
206
|
Object.defineProperty(exports, 'version', {
|
|
316
207
|
enumerable: true,
|
|
317
208
|
get: function () {
|
|
318
209
|
return version;
|
|
319
210
|
}
|
|
320
211
|
});
|
|
321
|
-
//# sourceMappingURL=
|
|
212
|
+
//# sourceMappingURL=tronTransferAmount-BkKNm0yq.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tronTransferAmount-BkKNm0yq.cjs","names":["TronWeb","InvalidParamError","InvalidParamError","BaseError","InvalidParamError"],"sources":["../package.json","../src/utils/constants.ts","../src/utils/fetchTronBalance/fetchTronBalance.ts","../src/utils/createTronNetworkProvider/createTronNetworkProvider.ts","../src/registerTronNetworkProviderBuilder/registerTronNetworkProviderBuilder.ts","../src/isTronWalletAccount/isTronWalletAccount.ts","../src/isTronWalletProvider/isTronWalletProvider.ts","../src/utils/tronConfirmTransaction/tronConfirmTransaction.ts","../src/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.ts","../src/errors/NotTronProviderError/NotTronProviderError.ts","../src/utils/tronTransferAmount/tronTransferAmount.ts"],"sourcesContent":["","// 1 TRX = 10^6 SUN (similar to wei for Ethereum)\nexport const SUN_PER_TRX = 1e6;\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { TronWeb } from 'tronweb';\n\nimport { SUN_PER_TRX } from '../constants';\n\ntype FetchTronBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @not-instrumented */\nexport const fetchTronBalance = async ({\n address,\n networkData,\n}: FetchTronBalanceParams): Promise<string | null> => {\n const tronWeb = new TronWeb({\n fullHost: networkData.rpcUrls.http[0],\n });\n\n const balanceInSun = await tronWeb.trx.getBalance(address);\n\n return (Number(balanceInSun) / SUN_PER_TRX).toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronNetworkProvider } from '../../TronNetworkProvider.types';\nimport { fetchTronBalance } from '../fetchTronBalance';\n\n/** @not-instrumented */\nexport const createTronNetworkProvider = (\n networkData: NetworkData\n): TronNetworkProvider => ({\n ...createBaseNetworkProvider('TRON', networkData),\n getBalance: async ({ address }) => ({\n balance: await fetchTronBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTronNetworkProvider } from '../utils/createTronNetworkProvider';\n\n/** @not-instrumented */\nexport const registerTronNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Tron network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('TRON')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createTronNetworkProvider,\n chain: 'TRON',\n });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TronWalletAccount } from '../TronWalletAccount.types';\n\n/** @not-instrumented */\nexport const isTronWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is TronWalletAccount => walletAccount.chain === 'TRON';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronWalletProvider } from '../TronWalletProvider.types';\n\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isTronWalletProvider = (\n provider: WalletProvider | TronWalletProvider\n): provider is TronWalletProvider => {\n return provider.chain === 'TRON';\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst POLLING_INTERVAL_MS = 3_000;\nconst MAX_POLLING_ATTEMPTS = 300;\n\n/**\n * Polls TronWeb until the transaction is included in a block (blockNumber is set).\n *\n * @param params.transactionHash - The transaction ID to confirm.\n * @param params.walletAccount - The wallet account used to retrieve TronWeb.\n * @param client - The Dynamic client instance.\n * @throws InvalidParamError if the wallet account or provider is not Tron.\n * @throws InvalidParamError if the transaction is not confirmed within the max attempts.\n * @not-instrumented\n */\nexport const tronConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n for (let attempt = 0; attempt < MAX_POLLING_ATTEMPTS; attempt++) {\n const txInfo = await tronWeb.trx.getTransactionInfo(transactionHash);\n\n if (txInfo.blockNumber) {\n return;\n }\n\n if (attempt < MAX_POLLING_ATTEMPTS - 1) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, POLLING_INTERVAL_MS)\n );\n }\n }\n\n throw new InvalidParamError(\n `Transaction ${transactionHash} was not confirmed after ${MAX_POLLING_ATTEMPTS} attempts`\n );\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\n/**\n * Executes a Tron checkout transaction by deserializing the transaction from\n * the signing payload, signing it with TronWeb, and broadcasting it.\n *\n * 1. Validates that the wallet account is a Tron wallet account\n * 2. Extracts the serialized transaction from the signing payload\n * 3. Parses, signs, and broadcasts via TronWeb\n *\n * @param params.signingPayload - The chain-aware signing payload containing `serializedTransaction`.\n * @param params.walletAccount - The wallet account used to sign and send the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the signing step begins.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash from the broadcast result.\n * @not-instrumented\n */\nexport const tronExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletAccount(walletAccount) || !isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const serializedTransactionData = signingPayload.serializedTransaction;\n\n if (!serializedTransactionData) {\n throw new InvalidParamError(\n 'Signing payload is missing serialized transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n const unsignedTransaction = JSON.parse(serializedTransactionData);\n\n const signedTransaction = await tronWeb.trx.sign(unsignedTransaction);\n const broadcastResult = await tronWeb.trx.sendRawTransaction(\n signedTransaction\n );\n\n return { transactionHash: broadcastResult.txid };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotTronProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_tron_provider_error',\n docsUrl: null,\n name: 'NotTronProviderError',\n shortMessage: 'Provider is not a Tron wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n getWalletProviderFromWalletAccount,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { NotTronProviderError } from '../../errors/NotTronProviderError';\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst TRX_DECIMALS = 6;\n\n/**\n * Transfers native TRX or TRC20 tokens from one wallet to another.\n *\n * Converts the human-readable amount string to the smallest unit (SUN for TRX,\n * or the appropriate unit for TRC20 tokens) using string-based arithmetic\n * to avoid floating-point precision issues.\n * @not-instrumented\n */\nexport const tronTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Tron wallet account'\n );\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new NotTronProviderError({ providerKey: provider.key });\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n if (token?.address) {\n const decimals = token.decimals ?? TRX_DECIMALS;\n const smallestUnitAmount = parseAmountToSmallestUnit({\n amount,\n decimals,\n });\n\n const contract = await tronWeb.contract().at(token.address);\n const result = await contract.transfer(recipient, smallestUnitAmount).send();\n\n return { transactionHash: result };\n }\n\n const sunAmount = parseAmountToSmallestUnit({\n amount,\n decimals: TRX_DECIMALS,\n });\n\n const result = await tronWeb.trx.sendTransaction(\n recipient,\n Number(sunAmount),\n { address: walletAccount.address }\n );\n\n return { transactionHash: result.txid };\n};\n"],"mappings":"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"}
|
package/dist/{addTronWalletAdaptersExtension-C-aTCl8A.esm.js → tronTransferAmount-YysbSWMI.esm.js}
RENAMED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { BitKeepAdapter, OkxWalletAdapter, TokenPocketAdapter, TronLinkAdapter, TrustAdapter } from "@tronweb3/tronwallet-adapters";
|
|
1
|
+
import { createBaseNetworkProvider, getNetworkProviderBuilderRegistry, getWalletProviderFromWalletAccount, parseAmountToSmallestUnit } from "@dynamic-labs-sdk/client/core";
|
|
3
2
|
import { TronWeb } from "tronweb";
|
|
4
|
-
import { BaseError, InvalidParamError
|
|
5
|
-
import { WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
|
|
6
|
-
import { WalletReadyState } from "@tronweb3/tronwallet-abstract-adapter";
|
|
3
|
+
import { BaseError, InvalidParamError } from "@dynamic-labs-sdk/client";
|
|
7
4
|
|
|
8
5
|
//#region package.json
|
|
9
6
|
var name = "@dynamic-labs-sdk/tron";
|
|
10
|
-
var version = "1.
|
|
7
|
+
var version = "1.3.0";
|
|
11
8
|
|
|
12
9
|
//#endregion
|
|
13
10
|
//#region src/utils/constants.ts
|
|
@@ -44,11 +41,6 @@ const registerTronNetworkProviderBuilder = (client) => {
|
|
|
44
41
|
});
|
|
45
42
|
};
|
|
46
43
|
|
|
47
|
-
//#endregion
|
|
48
|
-
//#region src/utils/convertChainIdToDecimal/convertChainIdToDecimal.ts
|
|
49
|
-
/** @not-instrumented */
|
|
50
|
-
const convertChainIdToDecimal = (chainId) => chainId.startsWith("0x") ? parseInt(chainId, 16).toString() : chainId;
|
|
51
|
-
|
|
52
44
|
//#endregion
|
|
53
45
|
//#region src/isTronWalletAccount/isTronWalletAccount.ts
|
|
54
46
|
/** @not-instrumented */
|
|
@@ -163,124 +155,5 @@ const tronTransferAmount = async ({ amount, recipient, token, walletAccount }, c
|
|
|
163
155
|
};
|
|
164
156
|
|
|
165
157
|
//#endregion
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const createWalletProviderForTronWalletAdapter = ({ dynamicClient, adapter }) => {
|
|
169
|
-
const chain = "TRON";
|
|
170
|
-
const tronAdapter = adapter;
|
|
171
|
-
if (tronAdapter.readyState !== WalletReadyState.Found) return;
|
|
172
|
-
const metadata = {
|
|
173
|
-
displayName: tronAdapter.name,
|
|
174
|
-
icon: tronAdapter.icon
|
|
175
|
-
};
|
|
176
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
177
|
-
const key = formatWalletProviderKey({
|
|
178
|
-
chain,
|
|
179
|
-
displayName: metadata.displayName,
|
|
180
|
-
walletProviderType
|
|
181
|
-
});
|
|
182
|
-
const connect = async () => {
|
|
183
|
-
await tronAdapter.connect();
|
|
184
|
-
const startTime = Date.now();
|
|
185
|
-
while (!tronAdapter.address?.length && Date.now() - startTime < 1e3) await new Promise((resolve) => setTimeout(resolve, 50));
|
|
186
|
-
return { addresses: tronAdapter.address ? [{ address: tronAdapter.address }] : [] };
|
|
187
|
-
};
|
|
188
|
-
const destroy = async () => {
|
|
189
|
-
try {
|
|
190
|
-
await tronAdapter.disconnect();
|
|
191
|
-
} catch (err) {
|
|
192
|
-
getCore(dynamicClient).logger.error(`[${key}] destroy: remote signal failed`, err);
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
const getActiveNetworkId = async () => {
|
|
196
|
-
return { networkId: convertChainIdToDecimal((await tronAdapter.network()).chainId) };
|
|
197
|
-
};
|
|
198
|
-
const getConnectedAddresses = async () => {
|
|
199
|
-
return { addresses: tronAdapter.address ? [tronAdapter.address] : [] };
|
|
200
|
-
};
|
|
201
|
-
const signMessage = async ({ message, walletAccount }) => {
|
|
202
|
-
assertDefined(walletAccount, "Wallet account not found");
|
|
203
|
-
await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
|
|
204
|
-
return { signature: await tronAdapter.signMessage(message) };
|
|
205
|
-
};
|
|
206
|
-
const getTronWeb = async ({ walletAccount }) => {
|
|
207
|
-
const tronWeb = tronAdapter._wallet?.tronWeb || tronAdapter._wallet?.tron?.tronWeb;
|
|
208
|
-
if (tronWeb) return tronWeb;
|
|
209
|
-
const activeNetworkData = await getActiveNetworkData({ walletAccount }, dynamicClient);
|
|
210
|
-
assertDefined(activeNetworkData, "No active network data found");
|
|
211
|
-
const url = activeNetworkData.networkData?.rpcUrls.http[0];
|
|
212
|
-
assertDefined(url, "No RPC URL found for active network");
|
|
213
|
-
return new TronWeb({ fullHost: url });
|
|
214
|
-
};
|
|
215
|
-
return {
|
|
216
|
-
chain,
|
|
217
|
-
confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),
|
|
218
|
-
connect,
|
|
219
|
-
destroy,
|
|
220
|
-
executeSwapTransaction: (args) => tronExecuteSwapTransaction(args, dynamicClient),
|
|
221
|
-
getActiveNetworkId,
|
|
222
|
-
getConnectedAddresses,
|
|
223
|
-
getTronWeb,
|
|
224
|
-
groupKey: formatWalletProviderGroupKey(metadata.displayName),
|
|
225
|
-
key,
|
|
226
|
-
metadata,
|
|
227
|
-
signMessage,
|
|
228
|
-
transferAmount: (args) => tronTransferAmount(args, dynamicClient),
|
|
229
|
-
walletProviderType
|
|
230
|
-
};
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
//#endregion
|
|
234
|
-
//#region src/walletAdapters/addTronWalletAdaptersExtension/addTronWalletAdaptersExtension.ts
|
|
235
|
-
const TRON_WALLET_ADAPTERS_EXTENSION_KEY = "tronWalletAdapters";
|
|
236
|
-
/**
|
|
237
|
-
* Adds the Tron Wallet Adapters extension to the Dynamic client.
|
|
238
|
-
*
|
|
239
|
-
* This extension enables integration with wallets that have related Tron Wallet Adapters ('@tronweb3/tronwallet-adapters'),
|
|
240
|
-
* automatically registering compatible wallets for use with the Dynamic SDK.
|
|
241
|
-
*
|
|
242
|
-
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
243
|
-
* @not-instrumented
|
|
244
|
-
*/
|
|
245
|
-
const addTronWalletAdaptersExtension = (client = getDefaultClient()) => {
|
|
246
|
-
if (hasExtension({ extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY }, client)) return;
|
|
247
|
-
registerExtension({ extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY }, client);
|
|
248
|
-
registerTronNetworkProviderBuilder(client);
|
|
249
|
-
const walletProviderRegistry = getWalletProviderRegistry(client);
|
|
250
|
-
const tronWalletProviders = [];
|
|
251
|
-
const okxWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
252
|
-
adapter: new OkxWalletAdapter(),
|
|
253
|
-
dynamicClient: client
|
|
254
|
-
});
|
|
255
|
-
if (okxWalletProvider) tronWalletProviders.push(okxWalletProvider);
|
|
256
|
-
const tronLinkWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
257
|
-
adapter: new TronLinkAdapter(),
|
|
258
|
-
dynamicClient: client
|
|
259
|
-
});
|
|
260
|
-
if (tronLinkWalletProvider) tronWalletProviders.push(tronLinkWalletProvider);
|
|
261
|
-
const trustWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
262
|
-
adapter: new TrustAdapter(),
|
|
263
|
-
dynamicClient: client
|
|
264
|
-
});
|
|
265
|
-
if (trustWalletProvider) tronWalletProviders.push(trustWalletProvider);
|
|
266
|
-
const tokenPocketWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
267
|
-
adapter: new TokenPocketAdapter(),
|
|
268
|
-
dynamicClient: client
|
|
269
|
-
});
|
|
270
|
-
if (tokenPocketWalletProvider) tronWalletProviders.push(tokenPocketWalletProvider);
|
|
271
|
-
const bitgetWalletProvider = createWalletProviderForTronWalletAdapter({
|
|
272
|
-
adapter: new BitKeepAdapter(),
|
|
273
|
-
dynamicClient: client
|
|
274
|
-
});
|
|
275
|
-
if (bitgetWalletProvider) tronWalletProviders.push(bitgetWalletProvider);
|
|
276
|
-
tronWalletProviders.forEach((walletProvider) => {
|
|
277
|
-
walletProviderRegistry.register({
|
|
278
|
-
priority: WalletProviderPriority.WINDOW_INJECT,
|
|
279
|
-
walletProvider
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
//#endregion
|
|
285
|
-
export { name as a, isTronWalletAccount as i, NotTronProviderError as n, version as o, isTronWalletProvider as r, addTronWalletAdaptersExtension as t };
|
|
286
|
-
//# sourceMappingURL=addTronWalletAdaptersExtension-C-aTCl8A.esm.js.map
|
|
158
|
+
export { isTronWalletProvider as a, name as c, tronConfirmTransaction as i, version as l, NotTronProviderError as n, isTronWalletAccount as o, tronExecuteSwapTransaction as r, registerTronNetworkProviderBuilder as s, tronTransferAmount as t };
|
|
159
|
+
//# sourceMappingURL=tronTransferAmount-YysbSWMI.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tronTransferAmount-YysbSWMI.esm.js","names":[],"sources":["../package.json","../src/utils/constants.ts","../src/utils/fetchTronBalance/fetchTronBalance.ts","../src/utils/createTronNetworkProvider/createTronNetworkProvider.ts","../src/registerTronNetworkProviderBuilder/registerTronNetworkProviderBuilder.ts","../src/isTronWalletAccount/isTronWalletAccount.ts","../src/isTronWalletProvider/isTronWalletProvider.ts","../src/utils/tronConfirmTransaction/tronConfirmTransaction.ts","../src/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.ts","../src/errors/NotTronProviderError/NotTronProviderError.ts","../src/utils/tronTransferAmount/tronTransferAmount.ts"],"sourcesContent":["","// 1 TRX = 10^6 SUN (similar to wei for Ethereum)\nexport const SUN_PER_TRX = 1e6;\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { TronWeb } from 'tronweb';\n\nimport { SUN_PER_TRX } from '../constants';\n\ntype FetchTronBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @not-instrumented */\nexport const fetchTronBalance = async ({\n address,\n networkData,\n}: FetchTronBalanceParams): Promise<string | null> => {\n const tronWeb = new TronWeb({\n fullHost: networkData.rpcUrls.http[0],\n });\n\n const balanceInSun = await tronWeb.trx.getBalance(address);\n\n return (Number(balanceInSun) / SUN_PER_TRX).toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronNetworkProvider } from '../../TronNetworkProvider.types';\nimport { fetchTronBalance } from '../fetchTronBalance';\n\n/** @not-instrumented */\nexport const createTronNetworkProvider = (\n networkData: NetworkData\n): TronNetworkProvider => ({\n ...createBaseNetworkProvider('TRON', networkData),\n getBalance: async ({ address }) => ({\n balance: await fetchTronBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTronNetworkProvider } from '../utils/createTronNetworkProvider';\n\n/** @not-instrumented */\nexport const registerTronNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Tron network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('TRON')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createTronNetworkProvider,\n chain: 'TRON',\n });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TronWalletAccount } from '../TronWalletAccount.types';\n\n/** @not-instrumented */\nexport const isTronWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is TronWalletAccount => walletAccount.chain === 'TRON';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronWalletProvider } from '../TronWalletProvider.types';\n\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isTronWalletProvider = (\n provider: WalletProvider | TronWalletProvider\n): provider is TronWalletProvider => {\n return provider.chain === 'TRON';\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst POLLING_INTERVAL_MS = 3_000;\nconst MAX_POLLING_ATTEMPTS = 300;\n\n/**\n * Polls TronWeb until the transaction is included in a block (blockNumber is set).\n *\n * @param params.transactionHash - The transaction ID to confirm.\n * @param params.walletAccount - The wallet account used to retrieve TronWeb.\n * @param client - The Dynamic client instance.\n * @throws InvalidParamError if the wallet account or provider is not Tron.\n * @throws InvalidParamError if the transaction is not confirmed within the max attempts.\n * @not-instrumented\n */\nexport const tronConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n for (let attempt = 0; attempt < MAX_POLLING_ATTEMPTS; attempt++) {\n const txInfo = await tronWeb.trx.getTransactionInfo(transactionHash);\n\n if (txInfo.blockNumber) {\n return;\n }\n\n if (attempt < MAX_POLLING_ATTEMPTS - 1) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, POLLING_INTERVAL_MS)\n );\n }\n }\n\n throw new InvalidParamError(\n `Transaction ${transactionHash} was not confirmed after ${MAX_POLLING_ATTEMPTS} attempts`\n );\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\n/**\n * Executes a Tron checkout transaction by deserializing the transaction from\n * the signing payload, signing it with TronWeb, and broadcasting it.\n *\n * 1. Validates that the wallet account is a Tron wallet account\n * 2. Extracts the serialized transaction from the signing payload\n * 3. Parses, signs, and broadcasts via TronWeb\n *\n * @param params.signingPayload - The chain-aware signing payload containing `serializedTransaction`.\n * @param params.walletAccount - The wallet account used to sign and send the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the signing step begins.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash from the broadcast result.\n * @not-instrumented\n */\nexport const tronExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletAccount(walletAccount) || !isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const serializedTransactionData = signingPayload.serializedTransaction;\n\n if (!serializedTransactionData) {\n throw new InvalidParamError(\n 'Signing payload is missing serialized transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n const unsignedTransaction = JSON.parse(serializedTransactionData);\n\n const signedTransaction = await tronWeb.trx.sign(unsignedTransaction);\n const broadcastResult = await tronWeb.trx.sendRawTransaction(\n signedTransaction\n );\n\n return { transactionHash: broadcastResult.txid };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotTronProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_tron_provider_error',\n docsUrl: null,\n name: 'NotTronProviderError',\n shortMessage: 'Provider is not a Tron wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n getWalletProviderFromWalletAccount,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { NotTronProviderError } from '../../errors/NotTronProviderError';\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst TRX_DECIMALS = 6;\n\n/**\n * Transfers native TRX or TRC20 tokens from one wallet to another.\n *\n * Converts the human-readable amount string to the smallest unit (SUN for TRX,\n * or the appropriate unit for TRC20 tokens) using string-based arithmetic\n * to avoid floating-point precision issues.\n * @not-instrumented\n */\nexport const tronTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Tron wallet account'\n );\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new NotTronProviderError({ providerKey: provider.key });\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n if (token?.address) {\n const decimals = token.decimals ?? TRX_DECIMALS;\n const smallestUnitAmount = parseAmountToSmallestUnit({\n amount,\n decimals,\n });\n\n const contract = await tronWeb.contract().at(token.address);\n const result = await contract.transfer(recipient, smallestUnitAmount).send();\n\n return { transactionHash: result };\n }\n\n const sunAmount = parseAmountToSmallestUnit({\n amount,\n decimals: TRX_DECIMALS,\n });\n\n const result = await tronWeb.trx.sendTransaction(\n recipient,\n Number(sunAmount),\n { address: walletAccount.address }\n );\n\n return { transactionHash: result.txid };\n};\n"],"mappings":"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"}
|