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

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 (44) hide show
  1. package/dist/cjs/actions/getMulticallAddress.d.ts +2 -0
  2. package/dist/cjs/actions/getMulticallAddress.js +10 -0
  3. package/dist/cjs/actions/getMulticallAddress.js.map +1 -0
  4. package/dist/cjs/actions/getTronBalance.js +42 -9
  5. package/dist/cjs/actions/getTronBalance.js.map +1 -1
  6. package/dist/cjs/core/TronStepExecutor.js.map +1 -1
  7. package/dist/cjs/utils/address.d.ts +2 -0
  8. package/dist/cjs/utils/address.js +13 -0
  9. package/dist/cjs/utils/address.js.map +1 -0
  10. package/dist/cjs/utils/multicall3Abi.d.ts +2 -0
  11. package/dist/cjs/utils/multicall3Abi.js +41 -0
  12. package/dist/cjs/utils/multicall3Abi.js.map +1 -0
  13. package/dist/cjs/version.d.ts +1 -1
  14. package/dist/cjs/version.js +1 -1
  15. package/dist/esm/actions/getMulticallAddress.d.ts +2 -0
  16. package/dist/esm/actions/getMulticallAddress.js +6 -0
  17. package/dist/esm/actions/getMulticallAddress.js.map +1 -0
  18. package/dist/esm/actions/getTronBalance.js +44 -9
  19. package/dist/esm/actions/getTronBalance.js.map +1 -1
  20. package/dist/esm/core/TronStepExecutor.js.map +1 -1
  21. package/dist/esm/utils/address.d.ts +2 -0
  22. package/dist/esm/utils/address.js +10 -0
  23. package/dist/esm/utils/address.js.map +1 -0
  24. package/dist/esm/utils/multicall3Abi.d.ts +2 -0
  25. package/dist/esm/utils/multicall3Abi.js +38 -0
  26. package/dist/esm/utils/multicall3Abi.js.map +1 -0
  27. package/dist/esm/version.d.ts +1 -1
  28. package/dist/esm/version.js +1 -1
  29. package/dist/types/actions/getMulticallAddress.d.ts +3 -0
  30. package/dist/types/actions/getMulticallAddress.d.ts.map +1 -0
  31. package/dist/types/actions/getTronBalance.d.ts.map +1 -1
  32. package/dist/types/core/TronStepExecutor.d.ts.map +1 -1
  33. package/dist/types/utils/address.d.ts +3 -0
  34. package/dist/types/utils/address.d.ts.map +1 -0
  35. package/dist/types/utils/multicall3Abi.d.ts +3 -0
  36. package/dist/types/utils/multicall3Abi.d.ts.map +1 -0
  37. package/dist/types/version.d.ts +1 -1
  38. package/package.json +2 -2
  39. package/src/actions/getMulticallAddress.ts +11 -0
  40. package/src/actions/getTronBalance.ts +72 -9
  41. package/src/core/TronStepExecutor.ts +4 -2
  42. package/src/utils/address.ts +14 -0
  43. package/src/utils/multicall3Abi.ts +39 -0
  44. package/src/version.ts +1 -1
@@ -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"}
@@ -2,8 +2,14 @@
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");
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);
7
13
  const getTronBalance = async (client, walletAddress, tokens) => {
8
14
  if (tokens.length === 0) {
9
15
  return [];
@@ -14,9 +20,43 @@ const getTronBalance = async (client, walletAddress, tokens) => {
14
20
  console.warn('Requested tokens have to be on the same chain.');
15
21
  }
16
22
  }
23
+ const multicallAddress = await (0, getMulticallAddress_js_1.getMulticallAddress)(client, chainId);
24
+ if (multicallAddress && tokens.length > 1) {
25
+ return getTronBalanceMulticall(client, tokens, walletAddress, multicallAddress);
26
+ }
17
27
  return getTronBalanceDefault(client, tokens, walletAddress);
18
28
  };
19
29
  exports.getTronBalance = getTronBalance;
30
+ const getTronBalanceMulticall = async (client, tokens, walletAddress, multicallAddress) => {
31
+ const walletHex = (0, address_js_1.toEvmHex)(walletAddress);
32
+ const multicallHex = (0, address_js_1.toEvmHex)(multicallAddress);
33
+ const [blockNumber, results] = await (0, callTronRpcsWithRetry_js_1.callTronRpcsWithRetry)(client, async (tronWeb) => {
34
+ const contract = tronWeb.contract(multicall3Abi_js_1.multicall3Abi, multicallAddress);
35
+ const calls = tokens.map((token) => {
36
+ const isNative = (0, isZeroAddress_js_1.isZeroAddress)(token.address);
37
+ return [
38
+ isNative ? multicallHex : (0, address_js_1.toEvmHex)(token.address),
39
+ true,
40
+ (0, address_js_1.encodeAddressCalldata)(isNative ? GET_ETH_BALANCE_SELECTOR : BALANCE_OF_SELECTOR, walletHex),
41
+ ];
42
+ });
43
+ const [block, aggregateResult] = await Promise.all([
44
+ tronWeb.trx.getCurrentBlock(),
45
+ contract.aggregate3(calls).call({ from: walletAddress }),
46
+ ]);
47
+ return [
48
+ BigInt(block.block_header?.raw_data?.number ?? 0),
49
+ aggregateResult[0],
50
+ ];
51
+ });
52
+ return tokens.map((token, i) => {
53
+ const [success, returnData] = results[i];
54
+ if (!success) {
55
+ return { ...token, blockNumber };
56
+ }
57
+ return { ...token, amount: BigInt(returnData), blockNumber };
58
+ });
59
+ };
20
60
  const getTronBalanceDefault = async (client, tokens, walletAddress) => {
21
61
  const [blockNumber, results] = await (0, callTronRpcsWithRetry_js_1.callTronRpcsWithRetry)(client, async (tronWeb) => {
22
62
  const host = tronWeb.fullNode.host;
@@ -45,16 +85,9 @@ const getTronBalanceDefault = async (client, tokens, walletAddress) => {
45
85
  const tokenAmounts = tokens.map((token, index) => {
46
86
  const result = results[index];
47
87
  if (result.status === 'rejected') {
48
- return {
49
- ...token,
50
- blockNumber,
51
- };
88
+ return { ...token, blockNumber };
52
89
  }
53
- return {
54
- ...token,
55
- amount: result.value,
56
- blockNumber,
57
- };
90
+ return { ...token, amount: result.value, blockNumber };
58
91
  });
59
92
  return tokenAmounts;
60
93
  };
@@ -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"}
@@ -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.23";
@@ -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.23';
6
6
  //# sourceMappingURL=version.js.map
@@ -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,6 +1,12 @@
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';
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);
4
10
  export const getTronBalance = async (client, walletAddress, tokens) => {
5
11
  if (tokens.length === 0) {
6
12
  return [];
@@ -11,8 +17,44 @@ export const getTronBalance = async (client, walletAddress, tokens) => {
11
17
  console.warn('Requested tokens have to be on the same chain.');
12
18
  }
13
19
  }
20
+ const multicallAddress = await getMulticallAddress(client, chainId);
21
+ if (multicallAddress && tokens.length > 1) {
22
+ return getTronBalanceMulticall(client, tokens, walletAddress, multicallAddress);
23
+ }
14
24
  return getTronBalanceDefault(client, tokens, walletAddress);
15
25
  };
26
+ const getTronBalanceMulticall = async (client, tokens, walletAddress, multicallAddress) => {
27
+ const walletHex = toEvmHex(walletAddress);
28
+ const multicallHex = toEvmHex(multicallAddress);
29
+ const [blockNumber, results] = await callTronRpcsWithRetry(client, async (tronWeb) => {
30
+ const contract = tronWeb.contract(multicall3Abi, multicallAddress);
31
+ // TronWeb encodes tuples positionally: [target, allowFailure, callData]
32
+ const calls = tokens.map((token) => {
33
+ const isNative = isZeroAddress(token.address);
34
+ return [
35
+ isNative ? multicallHex : toEvmHex(token.address),
36
+ true,
37
+ encodeAddressCalldata(isNative ? GET_ETH_BALANCE_SELECTOR : BALANCE_OF_SELECTOR, walletHex),
38
+ ];
39
+ });
40
+ const [block, aggregateResult] = await Promise.all([
41
+ tronWeb.trx.getCurrentBlock(),
42
+ contract.aggregate3(calls).call({ from: walletAddress }),
43
+ ]);
44
+ return [
45
+ BigInt(block.block_header?.raw_data?.number ?? 0),
46
+ // TronWeb wraps the single return value in an extra array
47
+ aggregateResult[0],
48
+ ];
49
+ });
50
+ return tokens.map((token, i) => {
51
+ const [success, returnData] = results[i];
52
+ if (!success) {
53
+ return { ...token, blockNumber };
54
+ }
55
+ return { ...token, amount: BigInt(returnData), blockNumber };
56
+ });
57
+ };
16
58
  const getTronBalanceDefault = async (client, tokens, walletAddress) => {
17
59
  const [blockNumber, results] = await callTronRpcsWithRetry(client, async (tronWeb) => {
18
60
  const host = tronWeb.fullNode.host;
@@ -41,16 +83,9 @@ const getTronBalanceDefault = async (client, tokens, walletAddress) => {
41
83
  const tokenAmounts = tokens.map((token, index) => {
42
84
  const result = results[index];
43
85
  if (result.status === 'rejected') {
44
- return {
45
- ...token,
46
- blockNumber,
47
- };
86
+ return { ...token, blockNumber };
48
87
  }
49
- return {
50
- ...token,
51
- amount: result.value,
52
- blockNumber,
53
- };
88
+ return { ...token, amount: result.value, blockNumber };
54
89
  });
55
90
  return tokenAmounts;
56
91
  };
@@ -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":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAC3E,MAAM,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAC3E,CAAC,EACD,EAAE,CACH,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,MAAiB,EACjB,aAAqB,EACrB,MAAe,EACS,EAAE;IAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEnE,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,uBAAuB,CAC5B,MAAM,EACN,MAAM,EACN,aAAa,EACb,gBAAgB,CACjB,CAAA;IACH,CAAC;IAED,OAAO,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAA;AAC7D,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,KAAK,EACnC,MAAiB,EACjB,MAAe,EACf,aAAqB,EACrB,gBAAwB,EACA,EAAE;IAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;IACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IAE/C,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,qBAAqB,CACxD,MAAM,EACN,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAA;QAElE,wEAAwE;QACxE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACjC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC7C,OAAO;gBACL,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjD,IAAI;gBACJ,qBAAqB,CACnB,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,mBAAmB,EACzD,SAAS,CACV;aACF,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;YAC7B,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;SACzD,CAAC,CAAA;QAEF,OAAO;YACL,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;YACjD,0DAA0D;YAC1D,eAAe,CAAC,CAAC,CAAC;SACnB,CAAA;IACH,CAAC,CACF,CAAA;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAA;QAClC,CAAC;QACD,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,KAAK,EACjC,MAAiB,EACjB,MAAe,EACf,aAAqB,EACG,EAAE;IAC1B,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,qBAAqB,CACxD,MAAM,EACN,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA;QAClC,MAAM,KAAK,GAAsB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACpD,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,OAAO,UAAU,CACf,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EAC/D,EAAE,EAAE,EAAE,GAAG,qBAAqB,CAAC,IAAI,eAAe,IAAI,EAAE,EAAE,CAC3D,CAAA;YACH,CAAC;YACD,OAAO,UAAU,CACf,KAAK,IAAI,EAAE;gBACT,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ;qBAC3B,SAAS,CAAC,aAAa,CAAC;qBACxB,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA;gBAChC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;YACnC,CAAC,EACD;gBACE,EAAE,EAAE,GAAG,qBAAqB,CAAC,IAAI,cAAc,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;aACvE,CACF,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC;YACjB,UAAU,CACR,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAA;gBACjD,OAAO,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAA;YAC1D,CAAC,EACD,EAAE,EAAE,EAAE,GAAG,qBAAqB,CAAC,IAAI,oBAAoB,IAAI,EAAE,EAAE,CAChE;YACD,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;SAC1B,CAAC,CAAA;IACJ,CAAC,CACF,CAAA;IAED,MAAM,YAAY,GAAkB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAA;QAClC,CAAC;QACD,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TronStepExecutor.js","sourceRoot":"","sources":["../../../src/core/TronStepExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAEhB,aAAa,EAEb,sBAAsB,EAGtB,YAAY,EACZ,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAK9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAElF,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;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,gBAAgB,CACxB,aAAa,CAAC,4BAA4B,EAC1C,mHAAmH,CACpH,CAAA;QACH,CAAC;IACH,CAAC,CAAA;IAEQ,WAAW,GAAG,CACrB,KAAY,EACZ,IAAuB,EACvB,MAAwB,EACL,EAAE,CAAC,eAAe,CAAC,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,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAEtE,MAAM,KAAK,GAAG;YACZ,IAAI,sBAAsB,EAAE;YAC5B,IAAI,oBAAoB,EAAE;YAC1B,IAAI,gBAAgB,EAAE;YACtB,IAAI,sBAAsB,EAAE;YAC5B,IAAI,sBAAsB,EAAE;YAC5B,IAAI,0BAA0B,EAAE;YAChC,IAAI,4BAA4B,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,sBAAsB,CAAC,IAAI,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,QAAQ;gBACN,kBAAkB,EAAE,MAAM,IAAI,kBAAkB,EAAE,MAAM,KAAK,MAAM;oBACjE,CAAC,CAAC,4BAA4B,CAAC,IAAI;oBACnC,CAAC,CAAC,gBAAgB,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,YAAY,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC,CAAA;CACF"}
1
+ {"version":3,"file":"TronStepExecutor.js","sourceRoot":"","sources":["../../../src/core/TronStepExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAEhB,aAAa,EAEb,sBAAsB,EAGtB,YAAY,EACZ,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAK9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAElF,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;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,gBAAgB,CACxB,aAAa,CAAC,4BAA4B,EAC1C,mHAAmH,CACpH,CAAA;QACH,CAAC;IACH,CAAC,CAAA;IAEQ,WAAW,GAAG,CACrB,KAAY,EACZ,IAAuB,EACvB,MAAwB,EACL,EAAE,CAAC,eAAe,CAAC,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,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAEtE,MAAM,KAAK,GAAG;YACZ,IAAI,sBAAsB,EAAE;YAC5B,IAAI,oBAAoB,EAAE;YAC1B,IAAI,gBAAgB,EAAE;YACtB,IAAI,sBAAsB,EAAE;YAC5B,IAAI,sBAAsB,EAAE;YAC5B,IAAI,0BAA0B,EAAE;YAChC,IAAI,4BAA4B,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,sBAAsB,CAAC,IAAI,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,QAAQ;gBACN,kBAAkB,EAAE,MAAM,IAAI,kBAAkB,EAAE,MAAM,KAAK,MAAM;oBACjE,CAAC,CAAC,4BAA4B,CAAC,IAAI;oBACnC,CAAC,CAAC,gBAAgB,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,YAAY,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC,CAAA;CACF"}
@@ -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.23";
@@ -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.23';
3
3
  //# sourceMappingURL=version.js.map
@@ -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 +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;AAe9D,eAAO,MAAM,cAAc,GACzB,QAAQ,SAAS,EACjB,eAAe,MAAM,EACrB,QAAQ,KAAK,EAAE,KACd,OAAO,CAAC,WAAW,EAAE,CAuBvB,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"}
@@ -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.23";
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.23",
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.23"
34
34
  },
35
35
  "publishConfig": {
36
36
  "access": "public"
@@ -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,7 +1,17 @@
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
+ )
5
15
 
6
16
  export const getTronBalance = async (
7
17
  client: SDKClient,
@@ -18,9 +28,69 @@ export const getTronBalance = async (
18
28
  }
19
29
  }
20
30
 
31
+ const multicallAddress = await getMulticallAddress(client, chainId)
32
+
33
+ if (multicallAddress && tokens.length > 1) {
34
+ return getTronBalanceMulticall(
35
+ client,
36
+ tokens,
37
+ walletAddress,
38
+ multicallAddress
39
+ )
40
+ }
41
+
21
42
  return getTronBalanceDefault(client, tokens, walletAddress)
22
43
  }
23
44
 
45
+ const getTronBalanceMulticall = async (
46
+ client: SDKClient,
47
+ tokens: Token[],
48
+ walletAddress: string,
49
+ multicallAddress: string
50
+ ): Promise<TokenAmount[]> => {
51
+ const walletHex = toEvmHex(walletAddress)
52
+ const multicallHex = toEvmHex(multicallAddress)
53
+
54
+ const [blockNumber, results] = await callTronRpcsWithRetry(
55
+ client,
56
+ async (tronWeb) => {
57
+ const contract = tronWeb.contract(multicall3Abi, multicallAddress)
58
+
59
+ // TronWeb encodes tuples positionally: [target, allowFailure, callData]
60
+ const calls = tokens.map((token) => {
61
+ const isNative = isZeroAddress(token.address)
62
+ return [
63
+ isNative ? multicallHex : toEvmHex(token.address),
64
+ true,
65
+ encodeAddressCalldata(
66
+ isNative ? GET_ETH_BALANCE_SELECTOR : BALANCE_OF_SELECTOR,
67
+ walletHex
68
+ ),
69
+ ]
70
+ })
71
+
72
+ const [block, aggregateResult] = await Promise.all([
73
+ tronWeb.trx.getCurrentBlock(),
74
+ contract.aggregate3(calls).call({ from: walletAddress }),
75
+ ])
76
+
77
+ return [
78
+ BigInt(block.block_header?.raw_data?.number ?? 0),
79
+ // TronWeb wraps the single return value in an extra array
80
+ aggregateResult[0],
81
+ ]
82
+ }
83
+ )
84
+
85
+ return tokens.map((token, i) => {
86
+ const [success, returnData] = results[i]
87
+ if (!success) {
88
+ return { ...token, blockNumber }
89
+ }
90
+ return { ...token, amount: BigInt(returnData), blockNumber }
91
+ })
92
+ }
93
+
24
94
  const getTronBalanceDefault = async (
25
95
  client: SDKClient,
26
96
  tokens: Token[],
@@ -67,16 +137,9 @@ const getTronBalanceDefault = async (
67
137
  const tokenAmounts: TokenAmount[] = tokens.map((token, index) => {
68
138
  const result = results[index]
69
139
  if (result.status === 'rejected') {
70
- return {
71
- ...token,
72
- blockNumber,
73
- }
74
- }
75
- return {
76
- ...token,
77
- amount: result.value,
78
- blockNumber,
140
+ return { ...token, blockNumber }
79
141
  }
142
+ return { ...token, amount: result.value, blockNumber }
80
143
  })
81
144
 
82
145
  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)
@@ -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.23'