@lifi/sdk-provider-tron 4.0.0-alpha.22 → 4.0.0-alpha.24

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.
Files changed (60) hide show
  1. package/dist/cjs/TronProvider.js +1 -1
  2. package/dist/cjs/TronProvider.js.map +1 -1
  3. package/dist/cjs/actions/getMulticallAddress.d.ts +2 -0
  4. package/dist/cjs/actions/getMulticallAddress.js +10 -0
  5. package/dist/cjs/actions/getMulticallAddress.js.map +1 -0
  6. package/dist/cjs/actions/getTronBalance.d.ts +1 -1
  7. package/dist/cjs/actions/getTronBalance.js +55 -10
  8. package/dist/cjs/actions/getTronBalance.js.map +1 -1
  9. package/dist/cjs/core/TronStepExecutor.js.map +1 -1
  10. package/dist/cjs/types.d.ts +1 -0
  11. package/dist/cjs/types.js.map +1 -1
  12. package/dist/cjs/utils/address.d.ts +2 -0
  13. package/dist/cjs/utils/address.js +13 -0
  14. package/dist/cjs/utils/address.js.map +1 -0
  15. package/dist/cjs/utils/multicall3Abi.d.ts +2 -0
  16. package/dist/cjs/utils/multicall3Abi.js +41 -0
  17. package/dist/cjs/utils/multicall3Abi.js.map +1 -0
  18. package/dist/cjs/version.d.ts +1 -1
  19. package/dist/cjs/version.js +1 -1
  20. package/dist/esm/TronProvider.js +1 -1
  21. package/dist/esm/TronProvider.js.map +1 -1
  22. package/dist/esm/actions/getMulticallAddress.d.ts +2 -0
  23. package/dist/esm/actions/getMulticallAddress.js +6 -0
  24. package/dist/esm/actions/getMulticallAddress.js.map +1 -0
  25. package/dist/esm/actions/getTronBalance.d.ts +1 -1
  26. package/dist/esm/actions/getTronBalance.js +58 -10
  27. package/dist/esm/actions/getTronBalance.js.map +1 -1
  28. package/dist/esm/core/TronStepExecutor.js.map +1 -1
  29. package/dist/esm/types.d.ts +1 -0
  30. package/dist/esm/types.js.map +1 -1
  31. package/dist/esm/utils/address.d.ts +2 -0
  32. package/dist/esm/utils/address.js +10 -0
  33. package/dist/esm/utils/address.js.map +1 -0
  34. package/dist/esm/utils/multicall3Abi.d.ts +2 -0
  35. package/dist/esm/utils/multicall3Abi.js +38 -0
  36. package/dist/esm/utils/multicall3Abi.js.map +1 -0
  37. package/dist/esm/version.d.ts +1 -1
  38. package/dist/esm/version.js +1 -1
  39. package/dist/types/TronProvider.d.ts.map +1 -1
  40. package/dist/types/actions/getMulticallAddress.d.ts +3 -0
  41. package/dist/types/actions/getMulticallAddress.d.ts.map +1 -0
  42. package/dist/types/actions/getTronBalance.d.ts +1 -1
  43. package/dist/types/actions/getTronBalance.d.ts.map +1 -1
  44. package/dist/types/core/TronStepExecutor.d.ts.map +1 -1
  45. package/dist/types/types.d.ts +1 -0
  46. package/dist/types/types.d.ts.map +1 -1
  47. package/dist/types/utils/address.d.ts +3 -0
  48. package/dist/types/utils/address.d.ts.map +1 -0
  49. package/dist/types/utils/multicall3Abi.d.ts +3 -0
  50. package/dist/types/utils/multicall3Abi.d.ts.map +1 -0
  51. package/dist/types/version.d.ts +1 -1
  52. package/package.json +2 -2
  53. package/src/TronProvider.ts +7 -1
  54. package/src/actions/getMulticallAddress.ts +11 -0
  55. package/src/actions/getTronBalance.ts +96 -10
  56. package/src/core/TronStepExecutor.ts +4 -2
  57. package/src/types.ts +1 -0
  58. package/src/utils/address.ts +14 -0
  59. package/src/utils/multicall3Abi.ts +39 -0
  60. package/src/version.ts +1 -1
@@ -14,7 +14,7 @@ function TronProvider(options) {
14
14
  },
15
15
  isAddress: (address) => tronweb_1.TronWeb.isAddress(address),
16
16
  resolveAddress: resolveTronAddress_js_1.resolveTronAddress,
17
- getBalance: getTronBalance_js_1.getTronBalance,
17
+ getBalance: (client, walletAddress, tokens) => (0, getTronBalance_js_1.getTronBalance)(client, walletAddress, tokens, _options.multicallBatchSize),
18
18
  async getStepExecutor(options) {
19
19
  if (!_options.getWallet) {
20
20
  throw new sdk_1.ProviderError(sdk_1.LiFiErrorCode.ProviderUnavailable, 'TronProvider requires a getWallet function.');
@@ -1 +1 @@
1
- {"version":3,"file":"TronProvider.js","sourceRoot":"","sources":["../../src/TronProvider.ts"],"names":[],"mappings":";;AAYA,oCAmCC;AA/CD,mCAKkB;AAClB,qCAAiC;AACjC,mEAA4D;AAC5D,2EAAoE;AACpE,oEAA6D;AAG7D,SAAgB,YAAY,CAAC,OAA6B;IACxD,MAAM,QAAQ,GAAwB,OAAO,IAAI,EAAE,CAAA;IACnD,OAAO;QACL,IAAI,IAAI;YACN,OAAO,eAAS,CAAC,GAAG,CAAA;QACtB,CAAC;QACD,SAAS,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,iBAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC1D,cAAc,EAAE,0CAAkB;QAClC,UAAU,EAAE,kCAAc;QAC1B,KAAK,CAAC,eAAe,CACnB,OAA4B;YAE5B,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,mBAAa,CACrB,mBAAa,CAAC,mBAAmB,EACjC,6CAA6C,CAC9C,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAA;YAEzC,MAAM,QAAQ,GAAG,IAAI,sCAAgB,CAAC;gBACpC,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,gBAAgB,EAAE;oBAChB,GAAG,OAAO,CAAC,gBAAgB;iBAC5B;aACF,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,UAAU,CAAC,OAA4B;YACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"TronProvider.js","sourceRoot":"","sources":["../../src/TronProvider.ts"],"names":[],"mappings":";;AAYA,oCAyCC;AArDD,mCAKkB;AAClB,qCAAiC;AACjC,mEAA4D;AAC5D,2EAAoE;AACpE,oEAA6D;AAG7D,SAAgB,YAAY,CAAC,OAA6B;IACxD,MAAM,QAAQ,GAAwB,OAAO,IAAI,EAAE,CAAA;IACnD,OAAO;QACL,IAAI,IAAI;YACN,OAAO,eAAS,CAAC,GAAG,CAAA;QACtB,CAAC;QACD,SAAS,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,iBAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC1D,cAAc,EAAE,0CAAkB;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,CAC5C,IAAA,kCAAc,EACZ,MAAM,EACN,aAAa,EACb,MAAM,EACN,QAAQ,CAAC,kBAAkB,CAC5B;QACH,KAAK,CAAC,eAAe,CACnB,OAA4B;YAE5B,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,mBAAa,CACrB,mBAAa,CAAC,mBAAmB,EACjC,6CAA6C,CAC9C,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAA;YAEzC,MAAM,QAAQ,GAAG,IAAI,sCAAgB,CAAC;gBACpC,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,gBAAgB,EAAE;oBAChB,GAAG,OAAO,CAAC,gBAAgB;iBAC5B;aACF,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,UAAU,CAAC,OAA4B;YACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type ChainId, type SDKClient } from '@lifi/sdk';
2
+ export declare const getMulticallAddress: (client: SDKClient, chainId: ChainId) => Promise<string | undefined>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMulticallAddress = void 0;
4
+ const sdk_1 = require("@lifi/sdk");
5
+ const getMulticallAddress = async (client, chainId) => {
6
+ const chains = await client.getChains();
7
+ return chains?.find((chain) => chain.id === chainId && chain.chainType === sdk_1.ChainType.TVM)?.multicallAddress;
8
+ };
9
+ exports.getMulticallAddress = getMulticallAddress;
10
+ //# sourceMappingURL=getMulticallAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMulticallAddress.js","sourceRoot":"","sources":["../../../src/actions/getMulticallAddress.ts"],"names":[],"mappings":";;;AAAA,mCAAmE;AAE5D,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAiB,EACjB,OAAgB,EACa,EAAE;IAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;IACvC,OAAO,MAAM,EAAE,IAAI,CACjB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,IAAI,KAAK,CAAC,SAAS,KAAK,eAAS,CAAC,GAAG,CACrE,EAAE,gBAAgB,CAAA;AACrB,CAAC,CAAA;AARY,QAAA,mBAAmB,uBAQ/B"}
@@ -1,2 +1,2 @@
1
1
  import type { SDKClient, Token, TokenAmount } from '@lifi/sdk';
2
- export declare const getTronBalance: (client: SDKClient, walletAddress: string, tokens: Token[]) => Promise<TokenAmount[]>;
2
+ export declare const getTronBalance: (client: SDKClient, walletAddress: string, tokens: Token[], multicallBatchSize?: number) => Promise<TokenAmount[]>;
@@ -2,9 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTronBalance = void 0;
4
4
  const sdk_1 = require("@lifi/sdk");
5
+ const tronweb_1 = require("tronweb");
5
6
  const callTronRpcsWithRetry_js_1 = require("../rpc/callTronRpcsWithRetry.js");
7
+ const address_js_1 = require("../utils/address.js");
6
8
  const isZeroAddress_js_1 = require("../utils/isZeroAddress.js");
7
- const getTronBalance = async (client, walletAddress, tokens) => {
9
+ const multicall3Abi_js_1 = require("../utils/multicall3Abi.js");
10
+ const getMulticallAddress_js_1 = require("./getMulticallAddress.js");
11
+ const BALANCE_OF_SELECTOR = tronweb_1.TronWeb.sha3('balanceOf(address)').slice(2, 10);
12
+ const GET_ETH_BALANCE_SELECTOR = tronweb_1.TronWeb.sha3('getEthBalance(address)').slice(2, 10);
13
+ const DEFAULT_MULTICALL_BATCH_SIZE = 50;
14
+ const getTronBalance = async (client, walletAddress, tokens, multicallBatchSize = DEFAULT_MULTICALL_BATCH_SIZE) => {
8
15
  if (tokens.length === 0) {
9
16
  return [];
10
17
  }
@@ -14,9 +21,54 @@ const getTronBalance = async (client, walletAddress, tokens) => {
14
21
  console.warn('Requested tokens have to be on the same chain.');
15
22
  }
16
23
  }
24
+ const multicallAddress = await (0, getMulticallAddress_js_1.getMulticallAddress)(client, chainId);
25
+ if (multicallAddress && tokens.length > 1) {
26
+ return getTronBalanceMulticall(client, tokens, walletAddress, multicallAddress, multicallBatchSize);
27
+ }
17
28
  return getTronBalanceDefault(client, tokens, walletAddress);
18
29
  };
19
30
  exports.getTronBalance = getTronBalance;
31
+ const getTronBalanceMulticall = async (client, tokens, walletAddress, multicallAddress, batchSize) => {
32
+ const walletHex = (0, address_js_1.toEvmHex)(walletAddress);
33
+ const multicallHex = (0, address_js_1.toEvmHex)(multicallAddress);
34
+ const [blockNumber, results] = await (0, callTronRpcsWithRetry_js_1.callTronRpcsWithRetry)(client, async (tronWeb) => {
35
+ const contract = tronWeb.contract(multicall3Abi_js_1.multicall3Abi, multicallAddress);
36
+ const allCalls = tokens.map((token) => {
37
+ const isNative = (0, isZeroAddress_js_1.isZeroAddress)(token.address);
38
+ return [
39
+ isNative ? multicallHex : (0, address_js_1.toEvmHex)(token.address),
40
+ true,
41
+ (0, address_js_1.encodeAddressCalldata)(isNative ? GET_ETH_BALANCE_SELECTOR : BALANCE_OF_SELECTOR, walletHex),
42
+ ];
43
+ });
44
+ const batches = [];
45
+ for (let i = 0; i < allCalls.length; i += batchSize) {
46
+ batches.push(allCalls.slice(i, i + batchSize));
47
+ }
48
+ const [block, ...batchResults] = await Promise.all([
49
+ tronWeb.trx.getCurrentBlock(),
50
+ ...batches.map((batch, idx) => contract
51
+ .aggregate3(batch)
52
+ .call({ from: walletAddress })
53
+ .then((r) => r[0])
54
+ .catch((error) => {
55
+ console.warn(`[getTronBalance] batch ${idx + 1}/${batches.length} failed:`, error.message);
56
+ return batch.map(() => [false, '0x']);
57
+ })),
58
+ ]);
59
+ return [
60
+ BigInt(block.block_header?.raw_data?.number ?? 0),
61
+ batchResults.flat(),
62
+ ];
63
+ });
64
+ return tokens.map((token, i) => {
65
+ const [success, returnData] = results[i];
66
+ if (!success) {
67
+ return { ...token, blockNumber };
68
+ }
69
+ return { ...token, amount: BigInt(returnData), blockNumber };
70
+ });
71
+ };
20
72
  const getTronBalanceDefault = async (client, tokens, walletAddress) => {
21
73
  const [blockNumber, results] = await (0, callTronRpcsWithRetry_js_1.callTronRpcsWithRetry)(client, async (tronWeb) => {
22
74
  const host = tronWeb.fullNode.host;
@@ -45,16 +97,9 @@ const getTronBalanceDefault = async (client, tokens, walletAddress) => {
45
97
  const tokenAmounts = tokens.map((token, index) => {
46
98
  const result = results[index];
47
99
  if (result.status === 'rejected') {
48
- return {
49
- ...token,
50
- blockNumber,
51
- };
100
+ return { ...token, blockNumber };
52
101
  }
53
- return {
54
- ...token,
55
- amount: result.value,
56
- blockNumber,
57
- };
102
+ return { ...token, amount: result.value, blockNumber };
58
103
  });
59
104
  return tokenAmounts;
60
105
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getTronBalance.js","sourceRoot":"","sources":["../../../src/actions/getTronBalance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getTronBalance.js","sourceRoot":"","sources":["../../../src/actions/getTronBalance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TronStepExecutor.js","sourceRoot":"","sources":["../../../src/core/TronStepExecutor.ts"],"names":[],"mappings":";;;AAAA,mCAYkB;AAElB,qEAA8D;AAK9D,gEAAyD;AACzD,iFAA0E;AAC1E,6EAAsE;AACtE,iFAA0E;AAC1E,yFAAkF;AAElF,MAAa,gBAAiB,SAAQ,sBAAgB;IAC5C,MAAM,CAAS;IAEvB,YAAY,OAAgC;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC9B,CAAC;IAED,WAAW,GAAG,CAAC,IAAsB,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACnC,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,IAAI,sBAAgB,CACxB,mBAAa,CAAC,4BAA4B,EAC1C,mHAAmH,CACpH,CAAA;QACH,CAAC;IACH,CAAC,CAAA;IAEQ,WAAW,GAAG,CACrB,KAAY,EACZ,IAAuB,EACvB,MAAwB,EACL,EAAE,CAAC,IAAA,oCAAe,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAEnD,aAAa,GAAG,KAAK,EAC5B,WAAoC,EACF,EAAE;QACpC,OAAO;YACL,GAAG,WAAW;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAA;IACH,CAAC,CAAA;IAEQ,cAAc,GAAG,CAAC,OAAgC,EAAE,EAAE;QAC7D,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAA;QAE3C,MAAM,iBAAiB,GAAG,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAEtE,MAAM,KAAK,GAAG;YACZ,IAAI,kDAAsB,EAAE;YAC5B,IAAI,8CAAoB,EAAE;YAC1B,IAAI,sBAAgB,EAAE;YACtB,IAAI,4BAAsB,EAAE;YAC5B,IAAI,kDAAsB,EAAE;YAC5B,IAAI,0DAA0B,EAAE;YAChC,IAAI,kCAA4B,CAC9B,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAC/C;SACF,CAAA;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CACtD,IAAI,EACJ,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAC3C,CAAA;QAED,MAAM,gBAAgB,GACpB,CAAC,kBAAkB,EAAE,MAAM;YAC3B,CAAC,iBAAiB;YAClB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe;YAC/B,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAA;QAE7B,IAAI,QAAgB,CAAA;QACpB,IAAI,gBAAgB,EAAE,CAAC;YACrB,QAAQ,GAAG,kDAAsB,CAAC,IAAI,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,QAAQ;gBACN,kBAAkB,EAAE,MAAM,IAAI,kBAAkB,EAAE,MAAM,KAAK,MAAM;oBACjE,CAAC,CAAC,kCAA4B,CAAC,IAAI;oBACnC,CAAC,CAAC,sBAAgB,CAAC,IAAI,CAAA;QAC7B,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,CAC7C,CAAA;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAE9C,OAAO,IAAI,kBAAY,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC,CAAA;CACF;AAhFD,4CAgFC"}
1
+ {"version":3,"file":"TronStepExecutor.js","sourceRoot":"","sources":["../../../src/core/TronStepExecutor.ts"],"names":[],"mappings":";;;AAAA,mCAYkB;AAElB,qEAA8D;AAK9D,gEAAyD;AACzD,iFAA0E;AAC1E,6EAAsE;AACtE,iFAA0E;AAC1E,yFAAkF;AAElF,MAAa,gBAAiB,SAAQ,sBAAgB;IAC5C,MAAM,CAAS;IAEvB,YAAY,OAAgC;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC9B,CAAC;IAED,WAAW,GAAG,CAAC,IAAsB,EAAQ,EAAE;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACnC,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,IAAI,sBAAgB,CACxB,mBAAa,CAAC,4BAA4B,EAC1C,mHAAmH,CACpH,CAAA;QACH,CAAC;IACH,CAAC,CAAA;IAEQ,WAAW,GAAG,CACrB,KAAY,EACZ,IAAuB,EACvB,MAAwB,EACL,EAAE,CAAC,IAAA,oCAAe,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAEnD,aAAa,GAAG,KAAK,EAC5B,WAAoC,EACF,EAAE;QACpC,OAAO;YACL,GAAG,WAAW;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAA;IACH,CAAC,CAAA;IAEQ,cAAc,GAAG,CACxB,OAAgC,EAClB,EAAE;QAChB,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAA;QAE3C,MAAM,iBAAiB,GAAG,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAEtE,MAAM,KAAK,GAAG;YACZ,IAAI,kDAAsB,EAAE;YAC5B,IAAI,8CAAoB,EAAE;YAC1B,IAAI,sBAAgB,EAAE;YACtB,IAAI,4BAAsB,EAAE;YAC5B,IAAI,kDAAsB,EAAE;YAC5B,IAAI,0DAA0B,EAAE;YAChC,IAAI,kCAA4B,CAC9B,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAC/C;SACF,CAAA;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CACtD,IAAI,EACJ,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAC3C,CAAA;QAED,MAAM,gBAAgB,GACpB,CAAC,kBAAkB,EAAE,MAAM;YAC3B,CAAC,iBAAiB;YAClB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe;YAC/B,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAA;QAE7B,IAAI,QAAgB,CAAA;QACpB,IAAI,gBAAgB,EAAE,CAAC;YACrB,QAAQ,GAAG,kDAAsB,CAAC,IAAI,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,QAAQ;gBACN,kBAAkB,EAAE,MAAM,IAAI,kBAAkB,EAAE,MAAM,KAAK,MAAM;oBACjE,CAAC,CAAC,kCAA4B,CAAC,IAAI;oBACnC,CAAC,CAAC,sBAAgB,CAAC,IAAI,CAAA;QAC7B,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,CAC7C,CAAA;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAE9C,OAAO,IAAI,kBAAY,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC,CAAA;CACF;AAlFD,4CAkFC"}
@@ -2,6 +2,7 @@ import { type LiFiStepExtended, type SDKProvider, type StepExecutorContext, type
2
2
  import type { Adapter, SignedTransaction } from '@tronweb3/tronwallet-abstract-adapter';
3
3
  export interface TronProviderOptions {
4
4
  getWallet?: () => Promise<Adapter>;
5
+ multicallBatchSize?: number;
5
6
  }
6
7
  export interface TronTaskContext {
7
8
  signedTransaction?: SignedTransaction;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AAgCA,wCAIC;AApCD,mCAMkB;AA0BlB,SAAgB,cAAc,CAC5B,QAAqB;IAErB,OAAO,QAAQ,CAAC,IAAI,KAAK,eAAS,CAAC,GAAG,CAAA;AACxC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AAiCA,wCAIC;AArCD,mCAMkB;AA2BlB,SAAgB,cAAc,CAC5B,QAAqB;IAErB,OAAO,QAAQ,CAAC,IAAI,KAAK,eAAS,CAAC,GAAG,CAAA;AACxC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function toEvmHex(tronAddress: string): string;
2
+ export declare function encodeAddressCalldata(selector: string, address: string): string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toEvmHex = toEvmHex;
4
+ exports.encodeAddressCalldata = encodeAddressCalldata;
5
+ const tronweb_1 = require("tronweb");
6
+ function toEvmHex(tronAddress) {
7
+ return tronweb_1.TronWeb.address.toHex(tronAddress).replace(/^41/, '0x');
8
+ }
9
+ function encodeAddressCalldata(selector, address) {
10
+ const addr = address.replace(/^0x/, '').padStart(64, '0');
11
+ return `0x${selector}${addr}`;
12
+ }
13
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/utils/address.ts"],"names":[],"mappings":";;AAEA,4BAEC;AAED,sDAOC;AAbD,qCAAiC;AAEjC,SAAgB,QAAQ,CAAC,WAAmB;IAC1C,OAAO,iBAAO,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC;AAED,SAAgB,qBAAqB,CACnC,QAAgB,EAChB,OAAe;IAGf,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACzD,OAAO,KAAK,QAAQ,GAAG,IAAI,EAAE,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Types } from 'tronweb';
2
+ export declare const multicall3Abi: Types.ContractAbiInterface;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.multicall3Abi = void 0;
4
+ exports.multicall3Abi = [
5
+ {
6
+ inputs: [
7
+ {
8
+ components: [
9
+ { internalType: 'address', name: 'target', type: 'address' },
10
+ { internalType: 'bool', name: 'allowFailure', type: 'bool' },
11
+ { internalType: 'bytes', name: 'callData', type: 'bytes' },
12
+ ],
13
+ internalType: 'struct Multicall3.Call3[]',
14
+ name: 'calls',
15
+ type: 'tuple[]',
16
+ },
17
+ ],
18
+ name: 'aggregate3',
19
+ outputs: [
20
+ {
21
+ components: [
22
+ { internalType: 'bool', name: 'success', type: 'bool' },
23
+ { internalType: 'bytes', name: 'returnData', type: 'bytes' },
24
+ ],
25
+ internalType: 'struct Multicall3.Result[]',
26
+ name: 'returnData',
27
+ type: 'tuple[]',
28
+ },
29
+ ],
30
+ stateMutability: 'view',
31
+ type: 'function',
32
+ },
33
+ {
34
+ inputs: [{ internalType: 'address', name: 'addr', type: 'address' }],
35
+ name: 'getEthBalance',
36
+ outputs: [{ internalType: 'uint256', name: 'balance', type: 'uint256' }],
37
+ stateMutability: 'view',
38
+ type: 'function',
39
+ },
40
+ ];
41
+ //# sourceMappingURL=multicall3Abi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multicall3Abi.js","sourceRoot":"","sources":["../../../src/utils/multicall3Abi.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAA+B;IACvD;QACE,MAAM,EAAE;YACN;gBACE,UAAU,EAAE;oBACV,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC5D,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;oBAC5D,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;iBAC3D;gBACD,YAAY,EAAE,2BAA2B;gBACzC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;aAChB;SACF;QACD,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP;gBACE,UAAU,EAAE;oBACV,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;oBACvD,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE;iBAC7D;gBACD,YAAY,EAAE,4BAA4B;gBAC1C,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,SAAS;aAChB;SACF;QACD,eAAe,EAAE,MAAM;QACvB,IAAI,EAAE,UAAU;KACjB;IACD;QACE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACpE,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxE,eAAe,EAAE,MAAM;QACvB,IAAI,EAAE,UAAU;KACjB;CACF,CAAA"}
@@ -1,2 +1,2 @@
1
1
  export declare const name = "@lifi/sdk-provider-tron";
2
- export declare const version = "4.0.0-alpha.22";
2
+ export declare const version = "4.0.0-alpha.24";
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = exports.name = void 0;
4
4
  exports.name = '@lifi/sdk-provider-tron';
5
- exports.version = '4.0.0-alpha.22';
5
+ exports.version = '4.0.0-alpha.24';
6
6
  //# sourceMappingURL=version.js.map
@@ -11,7 +11,7 @@ export function TronProvider(options) {
11
11
  },
12
12
  isAddress: (address) => TronWeb.isAddress(address),
13
13
  resolveAddress: resolveTronAddress,
14
- getBalance: getTronBalance,
14
+ getBalance: (client, walletAddress, tokens) => getTronBalance(client, walletAddress, tokens, _options.multicallBatchSize),
15
15
  async getStepExecutor(options) {
16
16
  if (!_options.getWallet) {
17
17
  throw new ProviderError(LiFiErrorCode.ProviderUnavailable, 'TronProvider requires a getWallet function.');
@@ -1 +1 @@
1
- {"version":3,"file":"TronProvider.js","sourceRoot":"","sources":["../../src/TronProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,EACb,aAAa,GAEd,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAG7D,MAAM,UAAU,YAAY,CAAC,OAA6B;IACxD,MAAM,QAAQ,GAAwB,OAAO,IAAI,EAAE,CAAA;IACnD,OAAO;QACL,IAAI,IAAI;YACN,OAAO,SAAS,CAAC,GAAG,CAAA;QACtB,CAAC;QACD,SAAS,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC1D,cAAc,EAAE,kBAAkB;QAClC,UAAU,EAAE,cAAc;QAC1B,KAAK,CAAC,eAAe,CACnB,OAA4B;YAE5B,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,aAAa,CACrB,aAAa,CAAC,mBAAmB,EACjC,6CAA6C,CAC9C,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAA;YAEzC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;gBACpC,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,gBAAgB,EAAE;oBAChB,GAAG,OAAO,CAAC,gBAAgB;iBAC5B;aACF,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,UAAU,CAAC,OAA4B;YACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"TronProvider.js","sourceRoot":"","sources":["../../src/TronProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,EACb,aAAa,GAEd,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAG7D,MAAM,UAAU,YAAY,CAAC,OAA6B;IACxD,MAAM,QAAQ,GAAwB,OAAO,IAAI,EAAE,CAAA;IACnD,OAAO;QACL,IAAI,IAAI;YACN,OAAO,SAAS,CAAC,GAAG,CAAA;QACtB,CAAC;QACD,SAAS,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC1D,cAAc,EAAE,kBAAkB;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,CAC5C,cAAc,CACZ,MAAM,EACN,aAAa,EACb,MAAM,EACN,QAAQ,CAAC,kBAAkB,CAC5B;QACH,KAAK,CAAC,eAAe,CACnB,OAA4B;YAE5B,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,aAAa,CACrB,aAAa,CAAC,mBAAmB,EACjC,6CAA6C,CAC9C,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAA;YAEzC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;gBACpC,MAAM;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,gBAAgB,EAAE;oBAChB,GAAG,OAAO,CAAC,gBAAgB;iBAC5B;aACF,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,UAAU,CAAC,OAA4B;YACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type ChainId, type SDKClient } from '@lifi/sdk';
2
+ export declare const getMulticallAddress: (client: SDKClient, chainId: ChainId) => Promise<string | undefined>;
@@ -0,0 +1,6 @@
1
+ import { ChainType } from '@lifi/sdk';
2
+ export const getMulticallAddress = async (client, chainId) => {
3
+ const chains = await client.getChains();
4
+ return chains?.find((chain) => chain.id === chainId && chain.chainType === ChainType.TVM)?.multicallAddress;
5
+ };
6
+ //# sourceMappingURL=getMulticallAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMulticallAddress.js","sourceRoot":"","sources":["../../../src/actions/getMulticallAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAkB,MAAM,WAAW,CAAA;AAEnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAiB,EACjB,OAAgB,EACa,EAAE;IAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;IACvC,OAAO,MAAM,EAAE,IAAI,CACjB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,GAAG,CACrE,EAAE,gBAAgB,CAAA;AACrB,CAAC,CAAA"}
@@ -1,2 +1,2 @@
1
1
  import type { SDKClient, Token, TokenAmount } from '@lifi/sdk';
2
- export declare const getTronBalance: (client: SDKClient, walletAddress: string, tokens: Token[]) => Promise<TokenAmount[]>;
2
+ export declare const getTronBalance: (client: SDKClient, walletAddress: string, tokens: Token[], multicallBatchSize?: number) => Promise<TokenAmount[]>;
@@ -1,7 +1,14 @@
1
1
  import { withDedupe } from '@lifi/sdk';
2
+ import { TronWeb } from 'tronweb';
2
3
  import { callTronRpcsWithRetry } from '../rpc/callTronRpcsWithRetry.js';
4
+ import { encodeAddressCalldata, toEvmHex } from '../utils/address.js';
3
5
  import { isZeroAddress } from '../utils/isZeroAddress.js';
4
- export const getTronBalance = async (client, walletAddress, tokens) => {
6
+ import { multicall3Abi } from '../utils/multicall3Abi.js';
7
+ import { getMulticallAddress } from './getMulticallAddress.js';
8
+ const BALANCE_OF_SELECTOR = TronWeb.sha3('balanceOf(address)').slice(2, 10);
9
+ const GET_ETH_BALANCE_SELECTOR = TronWeb.sha3('getEthBalance(address)').slice(2, 10);
10
+ const DEFAULT_MULTICALL_BATCH_SIZE = 50;
11
+ export const getTronBalance = async (client, walletAddress, tokens, multicallBatchSize = DEFAULT_MULTICALL_BATCH_SIZE) => {
5
12
  if (tokens.length === 0) {
6
13
  return [];
7
14
  }
@@ -11,8 +18,56 @@ export const getTronBalance = async (client, walletAddress, tokens) => {
11
18
  console.warn('Requested tokens have to be on the same chain.');
12
19
  }
13
20
  }
21
+ const multicallAddress = await getMulticallAddress(client, chainId);
22
+ if (multicallAddress && tokens.length > 1) {
23
+ return getTronBalanceMulticall(client, tokens, walletAddress, multicallAddress, multicallBatchSize);
24
+ }
14
25
  return getTronBalanceDefault(client, tokens, walletAddress);
15
26
  };
27
+ const getTronBalanceMulticall = async (client, tokens, walletAddress, multicallAddress, batchSize) => {
28
+ const walletHex = toEvmHex(walletAddress);
29
+ const multicallHex = toEvmHex(multicallAddress);
30
+ const [blockNumber, results] = await callTronRpcsWithRetry(client, async (tronWeb) => {
31
+ const contract = tronWeb.contract(multicall3Abi, multicallAddress);
32
+ // TronWeb encodes tuples positionally: [target, allowFailure, callData]
33
+ const allCalls = tokens.map((token) => {
34
+ const isNative = isZeroAddress(token.address);
35
+ return [
36
+ isNative ? multicallHex : toEvmHex(token.address),
37
+ true,
38
+ encodeAddressCalldata(isNative ? GET_ETH_BALANCE_SELECTOR : BALANCE_OF_SELECTOR, walletHex),
39
+ ];
40
+ });
41
+ // Chunk calls to avoid CPU timeout on Tron nodes
42
+ const batches = [];
43
+ for (let i = 0; i < allCalls.length; i += batchSize) {
44
+ batches.push(allCalls.slice(i, i + batchSize));
45
+ }
46
+ const [block, ...batchResults] = await Promise.all([
47
+ tronWeb.trx.getCurrentBlock(),
48
+ ...batches.map((batch, idx) => contract
49
+ .aggregate3(batch)
50
+ .call({ from: walletAddress })
51
+ // TronWeb wraps the single return value in an extra array
52
+ .then((r) => r[0])
53
+ .catch((error) => {
54
+ console.warn(`[getTronBalance] batch ${idx + 1}/${batches.length} failed:`, error.message);
55
+ return batch.map(() => [false, '0x']);
56
+ })),
57
+ ]);
58
+ return [
59
+ BigInt(block.block_header?.raw_data?.number ?? 0),
60
+ batchResults.flat(),
61
+ ];
62
+ });
63
+ return tokens.map((token, i) => {
64
+ const [success, returnData] = results[i];
65
+ if (!success) {
66
+ return { ...token, blockNumber };
67
+ }
68
+ return { ...token, amount: BigInt(returnData), blockNumber };
69
+ });
70
+ };
16
71
  const getTronBalanceDefault = async (client, tokens, walletAddress) => {
17
72
  const [blockNumber, results] = await callTronRpcsWithRetry(client, async (tronWeb) => {
18
73
  const host = tronWeb.fullNode.host;
@@ -41,16 +96,9 @@ const getTronBalanceDefault = async (client, tokens, walletAddress) => {
41
96
  const tokenAmounts = tokens.map((token, index) => {
42
97
  const result = results[index];
43
98
  if (result.status === 'rejected') {
44
- return {
45
- ...token,
46
- blockNumber,
47
- };
99
+ return { ...token, blockNumber };
48
100
  }
49
- return {
50
- ...token,
51
- amount: result.value,
52
- blockNumber,
53
- };
101
+ return { ...token, amount: result.value, blockNumber };
54
102
  });
55
103
  return tokenAmounts;
56
104
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getTronBalance.js","sourceRoot":"","sources":["../../../src/actions/getTronBalance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getTronBalance.js","sourceRoot":"","sources":["../../../src/actions/getTronBalance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TronStepExecutor.js","sourceRoot":"","sources":["../../../src/core/TronStepExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TronStepExecutor.js","sourceRoot":"","sources":["../../../src/core/TronStepExecutor.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { type LiFiStepExtended, type SDKProvider, type StepExecutorContext, type
2
2
  import type { Adapter, SignedTransaction } from '@tronweb3/tronwallet-abstract-adapter';
3
3
  export interface TronProviderOptions {
4
4
  getWallet?: () => Promise<Adapter>;
5
+ multicallBatchSize?: number;
5
6
  }
6
7
  export interface TronTaskContext {
7
8
  signedTransaction?: SignedTransaction;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GAKV,MAAM,WAAW,CAAA;AA0BlB,MAAM,UAAU,cAAc,CAC5B,QAAqB;IAErB,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,CAAA;AACxC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GAKV,MAAM,WAAW,CAAA;AA2BlB,MAAM,UAAU,cAAc,CAC5B,QAAqB;IAErB,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,CAAA;AACxC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function toEvmHex(tronAddress: string): string;
2
+ export declare function encodeAddressCalldata(selector: string, address: string): string;
@@ -0,0 +1,10 @@
1
+ import { TronWeb } from 'tronweb';
2
+ export function toEvmHex(tronAddress) {
3
+ return TronWeb.address.toHex(tronAddress).replace(/^41/, '0x');
4
+ }
5
+ export function encodeAddressCalldata(selector, address) {
6
+ // Pad 20-byte address to 32 bytes, left-padded with zeros
7
+ const addr = address.replace(/^0x/, '').padStart(64, '0');
8
+ return `0x${selector}${addr}`;
9
+ }
10
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/utils/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,OAAe;IAEf,0DAA0D;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACzD,OAAO,KAAK,QAAQ,GAAG,IAAI,EAAE,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Types } from 'tronweb';
2
+ export declare const multicall3Abi: Types.ContractAbiInterface;
@@ -0,0 +1,38 @@
1
+ export const multicall3Abi = [
2
+ {
3
+ inputs: [
4
+ {
5
+ components: [
6
+ { internalType: 'address', name: 'target', type: 'address' },
7
+ { internalType: 'bool', name: 'allowFailure', type: 'bool' },
8
+ { internalType: 'bytes', name: 'callData', type: 'bytes' },
9
+ ],
10
+ internalType: 'struct Multicall3.Call3[]',
11
+ name: 'calls',
12
+ type: 'tuple[]',
13
+ },
14
+ ],
15
+ name: 'aggregate3',
16
+ outputs: [
17
+ {
18
+ components: [
19
+ { internalType: 'bool', name: 'success', type: 'bool' },
20
+ { internalType: 'bytes', name: 'returnData', type: 'bytes' },
21
+ ],
22
+ internalType: 'struct Multicall3.Result[]',
23
+ name: 'returnData',
24
+ type: 'tuple[]',
25
+ },
26
+ ],
27
+ stateMutability: 'view',
28
+ type: 'function',
29
+ },
30
+ {
31
+ inputs: [{ internalType: 'address', name: 'addr', type: 'address' }],
32
+ name: 'getEthBalance',
33
+ outputs: [{ internalType: 'uint256', name: 'balance', type: 'uint256' }],
34
+ stateMutability: 'view',
35
+ type: 'function',
36
+ },
37
+ ];
38
+ //# sourceMappingURL=multicall3Abi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multicall3Abi.js","sourceRoot":"","sources":["../../../src/utils/multicall3Abi.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAA+B;IACvD;QACE,MAAM,EAAE;YACN;gBACE,UAAU,EAAE;oBACV,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC5D,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;oBAC5D,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;iBAC3D;gBACD,YAAY,EAAE,2BAA2B;gBACzC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;aAChB;SACF;QACD,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP;gBACE,UAAU,EAAE;oBACV,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;oBACvD,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE;iBAC7D;gBACD,YAAY,EAAE,4BAA4B;gBAC1C,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,SAAS;aAChB;SACF;QACD,eAAe,EAAE,MAAM;QACvB,IAAI,EAAE,UAAU;KACjB;IACD;QACE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACpE,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxE,eAAe,EAAE,MAAM;QACvB,IAAI,EAAE,UAAU;KACjB;CACF,CAAA"}
@@ -1,2 +1,2 @@
1
1
  export declare const name = "@lifi/sdk-provider-tron";
2
- export declare const version = "4.0.0-alpha.22";
2
+ export declare const version = "4.0.0-alpha.24";
@@ -1,3 +1,3 @@
1
1
  export const name = '@lifi/sdk-provider-tron';
2
- export const version = '4.0.0-alpha.22';
2
+ export const version = '4.0.0-alpha.24';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TronProvider.d.ts","sourceRoot":"","sources":["../../src/TronProvider.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEtE,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAmC3E"}
1
+ {"version":3,"file":"TronProvider.d.ts","sourceRoot":"","sources":["../../src/TronProvider.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEtE,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAyC3E"}
@@ -0,0 +1,3 @@
1
+ import { type ChainId, type SDKClient } from '@lifi/sdk';
2
+ export declare const getMulticallAddress: (client: SDKClient, chainId: ChainId) => Promise<string | undefined>;
3
+ //# sourceMappingURL=getMulticallAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMulticallAddress.d.ts","sourceRoot":"","sources":["../../../src/actions/getMulticallAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAEnE,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,SAAS,EACjB,SAAS,OAAO,KACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAK5B,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import type { SDKClient, Token, TokenAmount } from '@lifi/sdk';
2
- export declare const getTronBalance: (client: SDKClient, walletAddress: string, tokens: Token[]) => Promise<TokenAmount[]>;
2
+ export declare const getTronBalance: (client: SDKClient, walletAddress: string, tokens: Token[], multicallBatchSize?: number) => Promise<TokenAmount[]>;
3
3
  //# sourceMappingURL=getTronBalance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getTronBalance.d.ts","sourceRoot":"","sources":["../../../src/actions/getTronBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAK9D,eAAO,MAAM,cAAc,GACzB,QAAQ,SAAS,EACjB,eAAe,MAAM,EACrB,QAAQ,KAAK,EAAE,KACd,OAAO,CAAC,WAAW,EAAE,CAYvB,CAAA"}
1
+ {"version":3,"file":"getTronBalance.d.ts","sourceRoot":"","sources":["../../../src/actions/getTronBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAiB9D,eAAO,MAAM,cAAc,GACzB,QAAQ,SAAS,EACjB,eAAe,MAAM,EACrB,QAAQ,KAAK,EAAE,EACf,qBAAoB,MAAqC,KACxD,OAAO,CAAC,WAAW,EAAE,CAwBvB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TronStepExecutor.d.ts","sourceRoot":"","sources":["../../../src/core/TronStepExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEhB,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EAErB,KAAK,QAAQ,EACb,KAAK,uBAAuB,EAC5B,YAAY,EAGb,MAAM,WAAW,CAAA;AAGlB,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,aAAa,CAAA;AAOpB,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,uBAAuB;IAK5C,WAAW,GAAI,MAAM,gBAAgB,UAQpC;IAEQ,WAAW,GAClB,OAAO,KAAK,EACZ,OAAO,gBAAgB,EACvB,SAAS,eAAe,KACvB,OAAO,CAAC,QAAQ,CAAC,CAAwC;IAEnD,aAAa,GACpB,aAAa,uBAAuB,KACnC,OAAO,CAAC,uBAAuB,CAAC,CAMlC;IAEQ,cAAc,GAAI,SAAS,uBAAuB,kBA6C1D;CACF"}
1
+ {"version":3,"file":"TronStepExecutor.d.ts","sourceRoot":"","sources":["../../../src/core/TronStepExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEhB,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EAErB,KAAK,QAAQ,EACb,KAAK,uBAAuB,EAC5B,YAAY,EAGb,MAAM,WAAW,CAAA;AAGlB,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,aAAa,CAAA;AAOpB,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,uBAAuB;IAK5C,WAAW,GAAI,MAAM,gBAAgB,KAAG,IAAI,CAQ3C;IAEQ,WAAW,GAClB,OAAO,KAAK,EACZ,OAAO,gBAAgB,EACvB,SAAS,eAAe,KACvB,OAAO,CAAC,QAAQ,CAAC,CAAwC;IAEnD,aAAa,GACpB,aAAa,uBAAuB,KACnC,OAAO,CAAC,uBAAuB,CAAC,CAMlC;IAEQ,cAAc,GACrB,SAAS,uBAAuB,KAC/B,YAAY,CA6Cd;CACF"}
@@ -2,6 +2,7 @@ import { type LiFiStepExtended, type SDKProvider, type StepExecutorContext, type
2
2
  import type { Adapter, SignedTransaction } from '@tronweb3/tronwallet-abstract-adapter';
3
3
  export interface TronProviderOptions {
4
4
  getWallet?: () => Promise<Adapter>;
5
+ multicallBatchSize?: number;
5
6
  }
6
7
  export interface TronTaskContext {
7
8
  signedTransaction?: SignedTransaction;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EAClB,MAAM,uCAAuC,CAAA;AAE9C,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED,MAAM,WAAW,uBACf,SAAQ,mBAAmB,EACzB,eAAe;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;CAC/C;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,WAAW,GACpB,QAAQ,IAAI,eAAe,CAE7B;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,MAAM,EAAE,OAAO,CAAA;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EAClB,MAAM,uCAAuC,CAAA;AAE9C,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED,MAAM,WAAW,uBACf,SAAQ,mBAAmB,EACzB,eAAe;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;CAC/C;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,WAAW,GACpB,QAAQ,IAAI,eAAe,CAE7B;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,MAAM,EAAE,OAAO,CAAA;CAChB"}
@@ -0,0 +1,3 @@
1
+ export declare function toEvmHex(tronAddress: string): string;
2
+ export declare function encodeAddressCalldata(selector: string, address: string): string;
3
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../src/utils/address.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAIR"}
@@ -0,0 +1,3 @@
1
+ import type { Types } from 'tronweb';
2
+ export declare const multicall3Abi: Types.ContractAbiInterface;
3
+ //# sourceMappingURL=multicall3Abi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multicall3Abi.d.ts","sourceRoot":"","sources":["../../../src/utils/multicall3Abi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,oBAoCjC,CAAA"}
@@ -1,3 +1,3 @@
1
1
  export declare const name = "@lifi/sdk-provider-tron";
2
- export declare const version = "4.0.0-alpha.22";
2
+ export declare const version = "4.0.0-alpha.24";
3
3
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/sdk-provider-tron",
3
- "version": "4.0.0-alpha.22",
3
+ "version": "4.0.0-alpha.24",
4
4
  "description": "LI.FI Tron SDK Provider for Any-to-Any Cross-Chain-Swap",
5
5
  "homepage": "https://github.com/lifinance/sdk",
6
6
  "bugs": {
@@ -30,7 +30,7 @@
30
30
  "dependencies": {
31
31
  "@tronweb3/tronwallet-abstract-adapter": "^1.1.10",
32
32
  "tronweb": "^6.0.4",
33
- "@lifi/sdk": "4.0.0-alpha.22"
33
+ "@lifi/sdk": "4.0.0-alpha.24"
34
34
  },
35
35
  "publishConfig": {
36
36
  "access": "public"
@@ -18,7 +18,13 @@ export function TronProvider(options?: TronProviderOptions): TronSDKProvider {
18
18
  },
19
19
  isAddress: (address: string) => TronWeb.isAddress(address),
20
20
  resolveAddress: resolveTronAddress,
21
- getBalance: getTronBalance,
21
+ getBalance: (client, walletAddress, tokens) =>
22
+ getTronBalance(
23
+ client,
24
+ walletAddress,
25
+ tokens,
26
+ _options.multicallBatchSize
27
+ ),
22
28
  async getStepExecutor(
23
29
  options: StepExecutorOptions
24
30
  ): Promise<TronStepExecutor> {
@@ -0,0 +1,11 @@
1
+ import { type ChainId, ChainType, type SDKClient } from '@lifi/sdk'
2
+
3
+ export const getMulticallAddress = async (
4
+ client: SDKClient,
5
+ chainId: ChainId
6
+ ): Promise<string | undefined> => {
7
+ const chains = await client.getChains()
8
+ return chains?.find(
9
+ (chain) => chain.id === chainId && chain.chainType === ChainType.TVM
10
+ )?.multicallAddress
11
+ }
@@ -1,12 +1,25 @@
1
1
  import type { SDKClient, Token, TokenAmount } from '@lifi/sdk'
2
2
  import { withDedupe } from '@lifi/sdk'
3
+ import { TronWeb } from 'tronweb'
3
4
  import { callTronRpcsWithRetry } from '../rpc/callTronRpcsWithRetry.js'
5
+ import { encodeAddressCalldata, toEvmHex } from '../utils/address.js'
4
6
  import { isZeroAddress } from '../utils/isZeroAddress.js'
7
+ import { multicall3Abi } from '../utils/multicall3Abi.js'
8
+ import { getMulticallAddress } from './getMulticallAddress.js'
9
+
10
+ const BALANCE_OF_SELECTOR = TronWeb.sha3('balanceOf(address)').slice(2, 10)
11
+ const GET_ETH_BALANCE_SELECTOR = TronWeb.sha3('getEthBalance(address)').slice(
12
+ 2,
13
+ 10
14
+ )
15
+
16
+ const DEFAULT_MULTICALL_BATCH_SIZE = 50
5
17
 
6
18
  export const getTronBalance = async (
7
19
  client: SDKClient,
8
20
  walletAddress: string,
9
- tokens: Token[]
21
+ tokens: Token[],
22
+ multicallBatchSize: number = DEFAULT_MULTICALL_BATCH_SIZE
10
23
  ): Promise<TokenAmount[]> => {
11
24
  if (tokens.length === 0) {
12
25
  return []
@@ -18,9 +31,89 @@ export const getTronBalance = async (
18
31
  }
19
32
  }
20
33
 
34
+ const multicallAddress = await getMulticallAddress(client, chainId)
35
+
36
+ if (multicallAddress && tokens.length > 1) {
37
+ return getTronBalanceMulticall(
38
+ client,
39
+ tokens,
40
+ walletAddress,
41
+ multicallAddress,
42
+ multicallBatchSize
43
+ )
44
+ }
45
+
21
46
  return getTronBalanceDefault(client, tokens, walletAddress)
22
47
  }
23
48
 
49
+ const getTronBalanceMulticall = async (
50
+ client: SDKClient,
51
+ tokens: Token[],
52
+ walletAddress: string,
53
+ multicallAddress: string,
54
+ batchSize: number
55
+ ): Promise<TokenAmount[]> => {
56
+ const walletHex = toEvmHex(walletAddress)
57
+ const multicallHex = toEvmHex(multicallAddress)
58
+
59
+ const [blockNumber, results] = await callTronRpcsWithRetry(
60
+ client,
61
+ async (tronWeb) => {
62
+ const contract = tronWeb.contract(multicall3Abi, multicallAddress)
63
+
64
+ // TronWeb encodes tuples positionally: [target, allowFailure, callData]
65
+ const allCalls = tokens.map((token) => {
66
+ const isNative = isZeroAddress(token.address)
67
+ return [
68
+ isNative ? multicallHex : toEvmHex(token.address),
69
+ true,
70
+ encodeAddressCalldata(
71
+ isNative ? GET_ETH_BALANCE_SELECTOR : BALANCE_OF_SELECTOR,
72
+ walletHex
73
+ ),
74
+ ]
75
+ })
76
+
77
+ // Chunk calls to avoid CPU timeout on Tron nodes
78
+ const batches: (typeof allCalls)[] = []
79
+ for (let i = 0; i < allCalls.length; i += batchSize) {
80
+ batches.push(allCalls.slice(i, i + batchSize))
81
+ }
82
+
83
+ const [block, ...batchResults] = await Promise.all([
84
+ tronWeb.trx.getCurrentBlock(),
85
+ ...batches.map((batch, idx) =>
86
+ contract
87
+ .aggregate3(batch)
88
+ .call({ from: walletAddress })
89
+ // TronWeb wraps the single return value in an extra array
90
+ .then((r: unknown[]) => r[0] as Array<[boolean, string]>)
91
+ .catch((error: Error) => {
92
+ console.warn(
93
+ `[getTronBalance] batch ${idx + 1}/${batches.length} failed:`,
94
+ error.message
95
+ )
96
+ return batch.map(() => [false, '0x'] as [boolean, string])
97
+ })
98
+ ),
99
+ ])
100
+
101
+ return [
102
+ BigInt(block.block_header?.raw_data?.number ?? 0),
103
+ batchResults.flat(),
104
+ ]
105
+ }
106
+ )
107
+
108
+ return tokens.map((token, i) => {
109
+ const [success, returnData] = results[i] as [boolean, string]
110
+ if (!success) {
111
+ return { ...token, blockNumber }
112
+ }
113
+ return { ...token, amount: BigInt(returnData), blockNumber }
114
+ })
115
+ }
116
+
24
117
  const getTronBalanceDefault = async (
25
118
  client: SDKClient,
26
119
  tokens: Token[],
@@ -67,16 +160,9 @@ const getTronBalanceDefault = async (
67
160
  const tokenAmounts: TokenAmount[] = tokens.map((token, index) => {
68
161
  const result = results[index]
69
162
  if (result.status === 'rejected') {
70
- return {
71
- ...token,
72
- blockNumber,
73
- }
74
- }
75
- return {
76
- ...token,
77
- amount: result.value,
78
- blockNumber,
163
+ return { ...token, blockNumber }
79
164
  }
165
+ return { ...token, amount: result.value, blockNumber }
80
166
  })
81
167
 
82
168
  return tokenAmounts
@@ -31,7 +31,7 @@ export class TronStepExecutor extends BaseStepExecutor {
31
31
  this.wallet = options.wallet
32
32
  }
33
33
 
34
- checkWallet = (step: LiFiStepExtended) => {
34
+ checkWallet = (step: LiFiStepExtended): void => {
35
35
  const address = this.wallet.address
36
36
  if (address && address !== step.action.fromAddress) {
37
37
  throw new TransactionError(
@@ -57,7 +57,9 @@ export class TronStepExecutor extends BaseStepExecutor {
57
57
  }
58
58
  }
59
59
 
60
- override createPipeline = (context: TronStepExecutorContext) => {
60
+ override createPipeline = (
61
+ context: TronStepExecutorContext
62
+ ): TaskPipeline => {
61
63
  const { step, isBridgeExecution } = context
62
64
 
63
65
  const isFromNativeToken = isZeroAddress(step.action.fromToken.address)
package/src/types.ts CHANGED
@@ -12,6 +12,7 @@ import type {
12
12
 
13
13
  export interface TronProviderOptions {
14
14
  getWallet?: () => Promise<Adapter>
15
+ multicallBatchSize?: number
15
16
  }
16
17
 
17
18
  export interface TronTaskContext {
@@ -0,0 +1,14 @@
1
+ import { TronWeb } from 'tronweb'
2
+
3
+ export function toEvmHex(tronAddress: string): string {
4
+ return TronWeb.address.toHex(tronAddress).replace(/^41/, '0x')
5
+ }
6
+
7
+ export function encodeAddressCalldata(
8
+ selector: string,
9
+ address: string
10
+ ): string {
11
+ // Pad 20-byte address to 32 bytes, left-padded with zeros
12
+ const addr = address.replace(/^0x/, '').padStart(64, '0')
13
+ return `0x${selector}${addr}`
14
+ }
@@ -0,0 +1,39 @@
1
+ import type { Types } from 'tronweb'
2
+
3
+ export const multicall3Abi: Types.ContractAbiInterface = [
4
+ {
5
+ inputs: [
6
+ {
7
+ components: [
8
+ { internalType: 'address', name: 'target', type: 'address' },
9
+ { internalType: 'bool', name: 'allowFailure', type: 'bool' },
10
+ { internalType: 'bytes', name: 'callData', type: 'bytes' },
11
+ ],
12
+ internalType: 'struct Multicall3.Call3[]',
13
+ name: 'calls',
14
+ type: 'tuple[]',
15
+ },
16
+ ],
17
+ name: 'aggregate3',
18
+ outputs: [
19
+ {
20
+ components: [
21
+ { internalType: 'bool', name: 'success', type: 'bool' },
22
+ { internalType: 'bytes', name: 'returnData', type: 'bytes' },
23
+ ],
24
+ internalType: 'struct Multicall3.Result[]',
25
+ name: 'returnData',
26
+ type: 'tuple[]',
27
+ },
28
+ ],
29
+ stateMutability: 'view',
30
+ type: 'function',
31
+ },
32
+ {
33
+ inputs: [{ internalType: 'address', name: 'addr', type: 'address' }],
34
+ name: 'getEthBalance',
35
+ outputs: [{ internalType: 'uint256', name: 'balance', type: 'uint256' }],
36
+ stateMutability: 'view',
37
+ type: 'function',
38
+ },
39
+ ]
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/sdk-provider-tron'
2
- export const version = '4.0.0-alpha.22'
2
+ export const version = '4.0.0-alpha.24'