@lifi/sdk-provider-tron 4.0.0-alpha.21 → 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 (134) 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 +69 -50
  5. package/dist/cjs/actions/getTronBalance.js.map +1 -1
  6. package/dist/cjs/actions/resolveTronAddress.d.ts +1 -1
  7. package/dist/cjs/actions/resolveTronAddress.js +2 -2
  8. package/dist/cjs/actions/resolveTronAddress.js.map +1 -1
  9. package/dist/cjs/core/TronStepExecutor.js +20 -3
  10. package/dist/cjs/core/TronStepExecutor.js.map +1 -1
  11. package/dist/cjs/core/constants.d.ts +2 -0
  12. package/dist/cjs/core/constants.js +6 -0
  13. package/dist/cjs/core/constants.js.map +1 -0
  14. package/dist/cjs/core/tasks/TronCheckAllowanceTask.d.ts +6 -0
  15. package/dist/cjs/core/tasks/TronCheckAllowanceTask.js +45 -0
  16. package/dist/cjs/core/tasks/TronCheckAllowanceTask.js.map +1 -0
  17. package/dist/cjs/core/tasks/TronSetAllowanceTask.d.ts +6 -0
  18. package/dist/cjs/core/tasks/TronSetAllowanceTask.js +78 -0
  19. package/dist/cjs/core/tasks/TronSetAllowanceTask.js.map +1 -0
  20. package/dist/cjs/core/tasks/TronSignAndExecuteTask.js +22 -4
  21. package/dist/cjs/core/tasks/TronSignAndExecuteTask.js.map +1 -1
  22. package/dist/cjs/core/tasks/TronWaitForTransactionTask.js +14 -12
  23. package/dist/cjs/core/tasks/TronWaitForTransactionTask.js.map +1 -1
  24. package/dist/cjs/errors/parseTronErrors.js +8 -0
  25. package/dist/cjs/errors/parseTronErrors.js.map +1 -1
  26. package/dist/cjs/rpc/callTronRpcsWithRetry.d.ts +3 -0
  27. package/dist/cjs/rpc/callTronRpcsWithRetry.js +22 -0
  28. package/dist/cjs/rpc/callTronRpcsWithRetry.js.map +1 -0
  29. package/dist/cjs/types.d.ts +2 -2
  30. package/dist/cjs/types.js.map +1 -1
  31. package/dist/cjs/utils/address.d.ts +2 -0
  32. package/dist/cjs/utils/address.js +13 -0
  33. package/dist/cjs/utils/address.js.map +1 -0
  34. package/dist/cjs/utils/isZeroAddress.d.ts +3 -0
  35. package/dist/cjs/utils/isZeroAddress.js +8 -0
  36. package/dist/cjs/utils/isZeroAddress.js.map +1 -0
  37. package/dist/cjs/utils/multicall3Abi.d.ts +2 -0
  38. package/dist/cjs/utils/multicall3Abi.js +41 -0
  39. package/dist/cjs/utils/multicall3Abi.js.map +1 -0
  40. package/dist/cjs/utils/stripHexPrefix.d.ts +1 -0
  41. package/dist/cjs/utils/stripHexPrefix.js +6 -0
  42. package/dist/cjs/utils/stripHexPrefix.js.map +1 -0
  43. package/dist/cjs/version.d.ts +1 -1
  44. package/dist/cjs/version.js +1 -1
  45. package/dist/esm/actions/getMulticallAddress.d.ts +2 -0
  46. package/dist/esm/actions/getMulticallAddress.js +6 -0
  47. package/dist/esm/actions/getMulticallAddress.js.map +1 -0
  48. package/dist/esm/actions/getTronBalance.js +71 -51
  49. package/dist/esm/actions/getTronBalance.js.map +1 -1
  50. package/dist/esm/actions/resolveTronAddress.d.ts +1 -1
  51. package/dist/esm/actions/resolveTronAddress.js +3 -3
  52. package/dist/esm/actions/resolveTronAddress.js.map +1 -1
  53. package/dist/esm/core/TronStepExecutor.js +20 -3
  54. package/dist/esm/core/TronStepExecutor.js.map +1 -1
  55. package/dist/esm/core/constants.d.ts +2 -0
  56. package/dist/esm/core/constants.js +3 -0
  57. package/dist/esm/core/constants.js.map +1 -0
  58. package/dist/esm/core/tasks/TronCheckAllowanceTask.d.ts +6 -0
  59. package/dist/esm/core/tasks/TronCheckAllowanceTask.js +41 -0
  60. package/dist/esm/core/tasks/TronCheckAllowanceTask.js.map +1 -0
  61. package/dist/esm/core/tasks/TronSetAllowanceTask.d.ts +6 -0
  62. package/dist/esm/core/tasks/TronSetAllowanceTask.js +75 -0
  63. package/dist/esm/core/tasks/TronSetAllowanceTask.js.map +1 -0
  64. package/dist/esm/core/tasks/TronSignAndExecuteTask.js +23 -5
  65. package/dist/esm/core/tasks/TronSignAndExecuteTask.js.map +1 -1
  66. package/dist/esm/core/tasks/TronWaitForTransactionTask.js +14 -12
  67. package/dist/esm/core/tasks/TronWaitForTransactionTask.js.map +1 -1
  68. package/dist/esm/errors/parseTronErrors.js +9 -0
  69. package/dist/esm/errors/parseTronErrors.js.map +1 -1
  70. package/dist/esm/rpc/callTronRpcsWithRetry.d.ts +3 -0
  71. package/dist/esm/rpc/callTronRpcsWithRetry.js +19 -0
  72. package/dist/esm/rpc/callTronRpcsWithRetry.js.map +1 -0
  73. package/dist/esm/types.d.ts +2 -2
  74. package/dist/esm/types.js.map +1 -1
  75. package/dist/esm/utils/address.d.ts +2 -0
  76. package/dist/esm/utils/address.js +10 -0
  77. package/dist/esm/utils/address.js.map +1 -0
  78. package/dist/esm/utils/isZeroAddress.d.ts +3 -0
  79. package/dist/esm/utils/isZeroAddress.js +4 -0
  80. package/dist/esm/utils/isZeroAddress.js.map +1 -0
  81. package/dist/esm/utils/multicall3Abi.d.ts +2 -0
  82. package/dist/esm/utils/multicall3Abi.js +38 -0
  83. package/dist/esm/utils/multicall3Abi.js.map +1 -0
  84. package/dist/esm/utils/stripHexPrefix.d.ts +1 -0
  85. package/dist/esm/utils/stripHexPrefix.js +2 -0
  86. package/dist/esm/utils/stripHexPrefix.js.map +1 -0
  87. package/dist/esm/version.d.ts +1 -1
  88. package/dist/esm/version.js +1 -1
  89. package/dist/types/actions/getMulticallAddress.d.ts +3 -0
  90. package/dist/types/actions/getMulticallAddress.d.ts.map +1 -0
  91. package/dist/types/actions/getTronBalance.d.ts.map +1 -1
  92. package/dist/types/actions/resolveTronAddress.d.ts +1 -1
  93. package/dist/types/actions/resolveTronAddress.d.ts.map +1 -1
  94. package/dist/types/core/TronStepExecutor.d.ts.map +1 -1
  95. package/dist/types/core/constants.d.ts +3 -0
  96. package/dist/types/core/constants.d.ts.map +1 -0
  97. package/dist/types/core/tasks/TronCheckAllowanceTask.d.ts +7 -0
  98. package/dist/types/core/tasks/TronCheckAllowanceTask.d.ts.map +1 -0
  99. package/dist/types/core/tasks/TronSetAllowanceTask.d.ts +7 -0
  100. package/dist/types/core/tasks/TronSetAllowanceTask.d.ts.map +1 -0
  101. package/dist/types/core/tasks/TronSignAndExecuteTask.d.ts.map +1 -1
  102. package/dist/types/core/tasks/TronWaitForTransactionTask.d.ts.map +1 -1
  103. package/dist/types/errors/parseTronErrors.d.ts.map +1 -1
  104. package/dist/types/rpc/callTronRpcsWithRetry.d.ts +4 -0
  105. package/dist/types/rpc/callTronRpcsWithRetry.d.ts.map +1 -0
  106. package/dist/types/types.d.ts +2 -2
  107. package/dist/types/types.d.ts.map +1 -1
  108. package/dist/types/utils/address.d.ts +3 -0
  109. package/dist/types/utils/address.d.ts.map +1 -0
  110. package/dist/types/utils/isZeroAddress.d.ts +4 -0
  111. package/dist/types/utils/isZeroAddress.d.ts.map +1 -0
  112. package/dist/types/utils/multicall3Abi.d.ts +3 -0
  113. package/dist/types/utils/multicall3Abi.d.ts.map +1 -0
  114. package/dist/types/utils/stripHexPrefix.d.ts +2 -0
  115. package/dist/types/utils/stripHexPrefix.d.ts.map +1 -0
  116. package/dist/types/version.d.ts +1 -1
  117. package/package.json +2 -2
  118. package/src/actions/getMulticallAddress.ts +11 -0
  119. package/src/actions/getTronBalance.ts +100 -62
  120. package/src/actions/resolveTronAddress.ts +3 -5
  121. package/src/core/TronStepExecutor.ts +26 -6
  122. package/src/core/constants.ts +2 -0
  123. package/src/core/tasks/TronCheckAllowanceTask.ts +61 -0
  124. package/src/core/tasks/TronSetAllowanceTask.ts +131 -0
  125. package/src/core/tasks/TronSignAndExecuteTask.ts +35 -15
  126. package/src/core/tasks/TronWaitForTransactionTask.ts +28 -18
  127. package/src/errors/parseTronErrors.ts +20 -0
  128. package/src/rpc/callTronRpcsWithRetry.ts +24 -0
  129. package/src/types.ts +5 -2
  130. package/src/utils/address.ts +14 -0
  131. package/src/utils/isZeroAddress.ts +5 -0
  132. package/src/utils/multicall3Abi.ts +39 -0
  133. package/src/utils/stripHexPrefix.ts +2 -0
  134. package/src/version.ts +1 -1
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.callTronRpcsWithRetry = callTronRpcsWithRetry;
4
+ const sdk_1 = require("@lifi/sdk");
5
+ const tronweb_1 = require("tronweb");
6
+ async function callTronRpcsWithRetry(client, fn) {
7
+ const urls = await client.getRpcUrlsByChainId(sdk_1.ChainId.TRN);
8
+ if (!urls.length) {
9
+ throw new Error('No Tron RPC URLs available');
10
+ }
11
+ const errors = [];
12
+ for (const url of urls) {
13
+ try {
14
+ return await fn(new tronweb_1.TronWeb({ fullHost: url }));
15
+ }
16
+ catch (error) {
17
+ errors.push(error instanceof Error ? error : new Error(String(error)));
18
+ }
19
+ }
20
+ throw new AggregateError(errors, `All ${urls.length} Tron RPCs failed`);
21
+ }
22
+ //# sourceMappingURL=callTronRpcsWithRetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callTronRpcsWithRetry.js","sourceRoot":"","sources":["../../../src/rpc/callTronRpcsWithRetry.ts"],"names":[],"mappings":";;AAGA,sDAoBC;AAvBD,mCAAmD;AACnD,qCAAiC;AAE1B,KAAK,UAAU,qBAAqB,CACzC,MAAiB,EACjB,EAAoC;IAEpC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,aAAO,CAAC,GAAG,CAAC,CAAA;IAE1D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,IAAI,iBAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAED,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAA;AACzE,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { type LiFiStepExtended, type SDKProvider, type StepExecutorContext, type StepExecutorOptions } from '@lifi/sdk';
2
- import type { Adapter } from '@tronweb3/tronwallet-abstract-adapter';
3
- import type { SignedTransaction } from 'tronweb/lib/esm/types/Transaction';
2
+ import type { Adapter, SignedTransaction } from '@tronweb3/tronwallet-abstract-adapter';
4
3
  export interface TronProviderOptions {
5
4
  getWallet?: () => Promise<Adapter>;
6
5
  }
7
6
  export interface TronTaskContext {
8
7
  signedTransaction?: SignedTransaction;
8
+ hasSufficientAllowance?: boolean;
9
9
  }
10
10
  export interface TronStepExecutorContext extends StepExecutorContext, TronTaskContext {
11
11
  wallet: Adapter;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA6BA,wCAIC;AAjCD,mCAMkB;AAuBlB,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":";;AAgCA,wCAIC;AApCD,mCAMkB;AA0BlB,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,3 @@
1
+ export declare const AddressZero = "0x0000000000000000000000000000000000000000";
2
+ export declare const TronAddressZero = "T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb";
3
+ export declare const isZeroAddress: (address: string) => boolean;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isZeroAddress = exports.TronAddressZero = exports.AddressZero = void 0;
4
+ exports.AddressZero = '0x0000000000000000000000000000000000000000';
5
+ exports.TronAddressZero = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
6
+ const isZeroAddress = (address) => address === exports.AddressZero || address === exports.TronAddressZero;
7
+ exports.isZeroAddress = isZeroAddress;
8
+ //# sourceMappingURL=isZeroAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isZeroAddress.js","sourceRoot":"","sources":["../../../src/utils/isZeroAddress.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,4CAA4C,CAAA;AAC1D,QAAA,eAAe,GAAG,oCAAoC,CAAA;AAE5D,MAAM,aAAa,GAAG,CAAC,OAAe,EAAW,EAAE,CACxD,OAAO,KAAK,mBAAW,IAAI,OAAO,KAAK,uBAAe,CAAA;AAD3C,QAAA,aAAa,iBAC8B"}
@@ -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"}
@@ -0,0 +1 @@
1
+ export declare const stripHexPrefix: (value: string) => string;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripHexPrefix = void 0;
4
+ const stripHexPrefix = (value) => value.replace(/^0x/, '');
5
+ exports.stripHexPrefix = stripHexPrefix;
6
+ //# sourceMappingURL=stripHexPrefix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripHexPrefix.js","sourceRoot":"","sources":["../../../src/utils/stripHexPrefix.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAAC,KAAa,EAAU,EAAE,CACtD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AADb,QAAA,cAAc,kBACD"}
@@ -1,2 +1,2 @@
1
1
  export declare const name = "@lifi/sdk-provider-tron";
2
- export declare const version = "4.0.0-alpha.21";
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.21';
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,5 +1,12 @@
1
1
  import { withDedupe } from '@lifi/sdk';
2
2
  import { TronWeb } from 'tronweb';
3
+ import { callTronRpcsWithRetry } from '../rpc/callTronRpcsWithRetry.js';
4
+ import { encodeAddressCalldata, toEvmHex } from '../utils/address.js';
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);
3
10
  export const getTronBalance = async (client, walletAddress, tokens) => {
4
11
  if (tokens.length === 0) {
5
12
  return [];
@@ -10,62 +17,75 @@ export const getTronBalance = async (client, walletAddress, tokens) => {
10
17
  console.warn('Requested tokens have to be on the same chain.');
11
18
  }
12
19
  }
20
+ const multicallAddress = await getMulticallAddress(client, chainId);
21
+ if (multicallAddress && tokens.length > 1) {
22
+ return getTronBalanceMulticall(client, tokens, walletAddress, multicallAddress);
23
+ }
13
24
  return getTronBalanceDefault(client, tokens, walletAddress);
14
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
+ };
15
58
  const getTronBalanceDefault = async (client, tokens, walletAddress) => {
16
- const rpcUrls = await client.getRpcUrlsByChainId(tokens[0].chainId);
17
- const fullHost = rpcUrls[0] || 'https://api.trongrid.io';
18
- const tronWeb = new TronWeb({ fullHost });
19
- const [trxBalance, currentBlock] = await Promise.allSettled([
20
- withDedupe(() => tronWeb.trx.getBalance(walletAddress), {
21
- id: `${getTronBalanceDefault.name}.getBalance`,
22
- }),
23
- withDedupe(() => tronWeb.trx.getCurrentBlock(), {
24
- id: `${getTronBalanceDefault.name}.getCurrentBlock`,
25
- }),
26
- ]);
27
- const nativeBalance = trxBalance.status === 'fulfilled' ? BigInt(trxBalance.value) : 0n;
28
- const blockNumber = currentBlock.status === 'fulfilled'
29
- ? BigInt(currentBlock.value.block_header?.raw_data?.number ?? 0)
30
- : 0n;
31
- const walletTokenAmounts = {};
32
- // Identify native TRX tokens by checking for the zero address pattern
33
- const nativeTokens = tokens.filter((token) => token.address === 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb' ||
34
- token.address === '0x0000000000000000000000000000000000000000');
35
- const trc20Tokens = tokens.filter((token) => token.address !== 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb' &&
36
- token.address !== '0x0000000000000000000000000000000000000000');
37
- for (const token of nativeTokens) {
38
- walletTokenAmounts[token.address] = nativeBalance;
39
- }
40
- if (trc20Tokens.length > 0) {
41
- const trc20Balances = await Promise.allSettled(trc20Tokens.map((token) => withDedupe(async () => {
42
- const contract = await tronWeb.contract().at(token.address);
43
- const balance = await contract.balanceOf(walletAddress).call();
44
- return {
45
- address: token.address,
46
- balance: BigInt(balance.toString()),
47
- };
48
- }, {
49
- id: `${getTronBalanceDefault.name}.balanceOf.${token.address}`,
50
- })));
51
- for (const result of trc20Balances) {
52
- if (result.status === 'fulfilled' && result.value.balance > 0n) {
53
- walletTokenAmounts[result.value.address] = result.value.balance;
59
+ const [blockNumber, results] = await callTronRpcsWithRetry(client, async (tronWeb) => {
60
+ const host = tronWeb.fullNode.host;
61
+ const queue = tokens.map((token) => {
62
+ if (isZeroAddress(token.address)) {
63
+ return withDedupe(async () => BigInt(await tronWeb.trx.getBalance(walletAddress)), { id: `${getTronBalanceDefault.name}.getBalance.${host}` });
54
64
  }
65
+ return withDedupe(async () => {
66
+ const contract = await tronWeb.contract().at(token.address);
67
+ const balance = await contract
68
+ .balanceOf(walletAddress)
69
+ .call({ from: walletAddress });
70
+ return BigInt(balance.toString());
71
+ }, {
72
+ id: `${getTronBalanceDefault.name}.balanceOf.${token.address}.${host}`,
73
+ });
74
+ });
75
+ return Promise.all([
76
+ withDedupe(async () => {
77
+ const block = await tronWeb.trx.getCurrentBlock();
78
+ return BigInt(block.block_header?.raw_data?.number ?? 0);
79
+ }, { id: `${getTronBalanceDefault.name}.getCurrentBlock.${host}` }),
80
+ Promise.allSettled(queue),
81
+ ]);
82
+ });
83
+ const tokenAmounts = tokens.map((token, index) => {
84
+ const result = results[index];
85
+ if (result.status === 'rejected') {
86
+ return { ...token, blockNumber };
55
87
  }
56
- }
57
- const tokenAmounts = tokens.map((token) => {
58
- if (walletTokenAmounts[token.address]) {
59
- return {
60
- ...token,
61
- amount: walletTokenAmounts[token.address],
62
- blockNumber,
63
- };
64
- }
65
- return {
66
- ...token,
67
- blockNumber,
68
- };
88
+ return { ...token, amount: result.value, blockNumber };
69
89
  });
70
90
  return tokenAmounts;
71
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":"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"}
@@ -1 +1 @@
1
- export declare function resolveTronAddress(_name: string): Promise<string | undefined>;
1
+ export declare function resolveTronAddress(name: string): Promise<string>;
@@ -1,5 +1,5 @@
1
- export async function resolveTronAddress(_name) {
2
- // Tron does not have a widely-adopted name service
3
- return undefined;
1
+ export async function resolveTronAddress(name) {
2
+ // Tron does not have a name service, return the address as-is
3
+ return name;
4
4
  }
5
5
  //# sourceMappingURL=resolveTronAddress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveTronAddress.js","sourceRoot":"","sources":["../../../src/actions/resolveTronAddress.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAa;IAEb,mDAAmD;IACnD,OAAO,SAAS,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"resolveTronAddress.js","sourceRoot":"","sources":["../../../src/actions/resolveTronAddress.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,8DAA8D;IAC9D,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,5 +1,8 @@
1
1
  import { BaseStepExecutor, CheckBalanceTask, LiFiErrorCode, PrepareTransactionTask, TaskPipeline, TransactionError, WaitForTransactionStatusTask, } from '@lifi/sdk';
2
2
  import { parseTronErrors } from '../errors/parseTronErrors.js';
3
+ import { isZeroAddress } from '../utils/isZeroAddress.js';
4
+ import { TronCheckAllowanceTask } from './tasks/TronCheckAllowanceTask.js';
5
+ import { TronSetAllowanceTask } from './tasks/TronSetAllowanceTask.js';
3
6
  import { TronSignAndExecuteTask } from './tasks/TronSignAndExecuteTask.js';
4
7
  import { TronWaitForTransactionTask } from './tasks/TronWaitForTransactionTask.js';
5
8
  export class TronStepExecutor extends BaseStepExecutor {
@@ -24,7 +27,10 @@ export class TronStepExecutor extends BaseStepExecutor {
24
27
  };
25
28
  createPipeline = (context) => {
26
29
  const { step, isBridgeExecution } = context;
30
+ const isFromNativeToken = isZeroAddress(step.action.fromToken.address);
27
31
  const tasks = [
32
+ new TronCheckAllowanceTask(),
33
+ new TronSetAllowanceTask(),
28
34
  new CheckBalanceTask(),
29
35
  new PrepareTransactionTask(),
30
36
  new TronSignAndExecuteTask(),
@@ -32,9 +38,20 @@ export class TronStepExecutor extends BaseStepExecutor {
32
38
  new WaitForTransactionStatusTask(isBridgeExecution ? 'RECEIVING_CHAIN' : 'SWAP'),
33
39
  ];
34
40
  const swapOrBridgeAction = this.statusManager.findAction(step, isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP');
35
- const taskName = swapOrBridgeAction?.txHash && swapOrBridgeAction?.status === 'DONE'
36
- ? WaitForTransactionStatusTask.name
37
- : CheckBalanceTask.name;
41
+ const doCheckAllowance = !swapOrBridgeAction?.txHash &&
42
+ !isFromNativeToken &&
43
+ !!step.estimate.approvalAddress &&
44
+ !step.estimate.skipApproval;
45
+ let taskName;
46
+ if (doCheckAllowance) {
47
+ taskName = TronCheckAllowanceTask.name;
48
+ }
49
+ else {
50
+ taskName =
51
+ swapOrBridgeAction?.txHash && swapOrBridgeAction?.status === 'DONE'
52
+ ? WaitForTransactionStatusTask.name
53
+ : CheckBalanceTask.name;
54
+ }
38
55
  const firstTaskIndex = tasks.findIndex((task) => task.constructor.name === taskName);
39
56
  const tasksToRun = tasks.slice(firstTaskIndex);
40
57
  return new TaskPipeline(tasksToRun);
@@ -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,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,KAAK,GAAG;YACZ,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,QAAQ,GACZ,kBAAkB,EAAE,MAAM,IAAI,kBAAkB,EAAE,MAAM,KAAK,MAAM;YACjE,CAAC,CAAC,4BAA4B,CAAC,IAAI;YACnC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAA;QAE3B,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":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const TRON_POLL_INTERVAL_MS = 3000;
2
+ export declare const TRON_POLL_MAX_RETRIES = 20;
@@ -0,0 +1,3 @@
1
+ export const TRON_POLL_INTERVAL_MS = 3000;
2
+ export const TRON_POLL_MAX_RETRIES = 20;
3
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAA;AACzC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { BaseStepExecutionTask, type TaskResult } from '@lifi/sdk';
2
+ import type { TronStepExecutorContext } from '../../types.js';
3
+ export declare class TronCheckAllowanceTask extends BaseStepExecutionTask {
4
+ shouldRun(context: TronStepExecutorContext): Promise<boolean>;
5
+ run(context: TronStepExecutorContext): Promise<TaskResult>;
6
+ }
@@ -0,0 +1,41 @@
1
+ import { BaseStepExecutionTask, LiFiErrorCode, TransactionError, } from '@lifi/sdk';
2
+ import { callTronRpcsWithRetry } from '../../rpc/callTronRpcsWithRetry.js';
3
+ export class TronCheckAllowanceTask extends BaseStepExecutionTask {
4
+ async shouldRun(context) {
5
+ return !context.hasSufficientAllowance;
6
+ }
7
+ async run(context) {
8
+ const { step, client, wallet, statusManager } = context;
9
+ const action = statusManager.initializeAction({
10
+ step,
11
+ type: 'CHECK_ALLOWANCE',
12
+ chainId: step.action.fromChainId,
13
+ status: 'STARTED',
14
+ });
15
+ if (!wallet.address) {
16
+ throw new TransactionError(LiFiErrorCode.WalletChangedDuringExecution, 'Wallet address is not available. Wallet may have been disconnected.');
17
+ }
18
+ if (!step.estimate.approvalAddress) {
19
+ throw new TransactionError(LiFiErrorCode.TransactionUnprepared, 'Approval address is not available.');
20
+ }
21
+ const ownerAddress = wallet.address;
22
+ const tokenAddress = step.action.fromToken.address;
23
+ const spenderAddress = step.estimate.approvalAddress;
24
+ const fromAmount = BigInt(step.action.fromAmount);
25
+ const allowance = await callTronRpcsWithRetry(client, async (tronWeb) => {
26
+ const contract = await tronWeb.contract().at(tokenAddress);
27
+ const result = await contract
28
+ .allowance(ownerAddress, spenderAddress)
29
+ .call({ from: ownerAddress });
30
+ return BigInt(result.toString());
31
+ });
32
+ statusManager.updateAction(step, action.type, 'DONE');
33
+ return {
34
+ status: 'COMPLETED',
35
+ context: {
36
+ hasSufficientAllowance: fromAmount <= allowance,
37
+ },
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=TronCheckAllowanceTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TronCheckAllowanceTask.js","sourceRoot":"","sources":["../../../../src/core/tasks/TronCheckAllowanceTask.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,aAAa,EAEb,gBAAgB,GACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAG1E,MAAM,OAAO,sBAAuB,SAAQ,qBAAqB;IACtD,KAAK,CAAC,SAAS,CAAC,OAAgC;QACvD,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAgC;QACxC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;QAEvD,MAAM,MAAM,GAAG,aAAa,CAAC,gBAAgB,CAAC;YAC5C,IAAI;YACJ,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YAChC,MAAM,EAAE,SAAS;SAClB,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,gBAAgB,CACxB,aAAa,CAAC,4BAA4B,EAC1C,qEAAqE,CACtE,CAAA;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YACnC,MAAM,IAAI,gBAAgB,CACxB,aAAa,CAAC,qBAAqB,EACnC,oCAAoC,CACrC,CAAA;QACH,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAA;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAA;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAA;QACpD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAEjD,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAA;YAC1D,MAAM,MAAM,GAAG,MAAM,QAAQ;iBAC1B,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC;iBACvC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;YAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAErD,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE;gBACP,sBAAsB,EAAE,UAAU,IAAI,SAAS;aAChD;SACF,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { BaseStepExecutionTask, type TaskResult } from '@lifi/sdk';
2
+ import type { TronStepExecutorContext } from '../../types.js';
3
+ export declare class TronSetAllowanceTask extends BaseStepExecutionTask {
4
+ shouldRun(context: TronStepExecutorContext): Promise<boolean>;
5
+ run(context: TronStepExecutorContext): Promise<TaskResult>;
6
+ }
@@ -0,0 +1,75 @@
1
+ import { BaseStepExecutionTask, LiFiErrorCode, TransactionError, waitForResult, } from '@lifi/sdk';
2
+ import { callTronRpcsWithRetry } from '../../rpc/callTronRpcsWithRetry.js';
3
+ import { stripHexPrefix } from '../../utils/stripHexPrefix.js';
4
+ import { TRON_POLL_INTERVAL_MS, TRON_POLL_MAX_RETRIES } from '../constants.js';
5
+ const DEFAULT_APPROVE_FEE_LIMIT = 100_000_000;
6
+ export class TronSetAllowanceTask extends BaseStepExecutionTask {
7
+ async shouldRun(context) {
8
+ return !context.hasSufficientAllowance;
9
+ }
10
+ async run(context) {
11
+ const { step, client, wallet, statusManager, fromChain } = context;
12
+ const action = statusManager.initializeAction({
13
+ step,
14
+ type: 'SET_ALLOWANCE',
15
+ chainId: step.action.fromChainId,
16
+ status: 'STARTED',
17
+ });
18
+ statusManager.updateAction(step, action.type, 'ACTION_REQUIRED');
19
+ if (!wallet.address) {
20
+ throw new TransactionError(LiFiErrorCode.WalletChangedDuringExecution, 'Wallet address is not available. Wallet may have been disconnected.');
21
+ }
22
+ if (!step.estimate.approvalAddress) {
23
+ throw new TransactionError(LiFiErrorCode.TransactionUnprepared, 'Approval address is not available.');
24
+ }
25
+ const tokenAddress = step.action.fromToken.address;
26
+ const spenderAddress = step.estimate.approvalAddress;
27
+ const ownerAddress = wallet.address;
28
+ const approveAmount = BigInt(step.action.fromAmount).toString();
29
+ const approveGasCost = step.estimate.gasCosts?.find((gc) => gc.type === 'APPROVE');
30
+ const feeLimit = approveGasCost?.limit
31
+ ? parseInt(approveGasCost.limit, 10)
32
+ : DEFAULT_APPROVE_FEE_LIMIT;
33
+ const transaction = await callTronRpcsWithRetry(client, async (tronWeb) => {
34
+ const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(tokenAddress, 'approve(address,uint256)', { feeLimit }, [
35
+ { type: 'address', value: spenderAddress },
36
+ { type: 'uint256', value: approveAmount },
37
+ ], ownerAddress);
38
+ return transaction;
39
+ });
40
+ const signedTransaction = await wallet.signTransaction(transaction);
41
+ statusManager.updateAction(step, action.type, 'PENDING');
42
+ const broadcastResult = await callTronRpcsWithRetry(client, async (tronWeb) => {
43
+ const result = await tronWeb.trx.sendRawTransaction(signedTransaction);
44
+ if (!result.result && String(result.code) !== 'DUP_TRANSACTION_ERROR') {
45
+ throw new TransactionError(LiFiErrorCode.TransactionFailed, `Approval broadcast failed: ${result.code || 'Unknown error'}`);
46
+ }
47
+ return result;
48
+ });
49
+ const txHash = stripHexPrefix(broadcastResult.transaction.txID);
50
+ statusManager.updateAction(step, action.type, 'PENDING', {
51
+ txHash,
52
+ txLink: `${fromChain.metamask.blockExplorerUrls[0]}#/transaction/${txHash}`,
53
+ });
54
+ // Wait for confirmation
55
+ await waitForResult(async () => {
56
+ const txInfo = await callTronRpcsWithRetry(client, (tronWeb) => tronWeb.trx.getTransactionInfo(txHash));
57
+ if (txInfo?.id) {
58
+ if (txInfo.receipt?.result === 'FAILED') {
59
+ throw new TransactionError(LiFiErrorCode.TransactionFailed, 'Approval transaction failed on-chain.');
60
+ }
61
+ return txInfo;
62
+ }
63
+ return undefined;
64
+ }, TRON_POLL_INTERVAL_MS, TRON_POLL_MAX_RETRIES);
65
+ statusManager.updateAction(step, action.type, 'DONE', {
66
+ txHash,
67
+ txLink: `${fromChain.metamask.blockExplorerUrls[0]}#/transaction/${txHash}`,
68
+ });
69
+ return {
70
+ status: 'COMPLETED',
71
+ context: { hasSufficientAllowance: true },
72
+ };
73
+ }
74
+ }
75
+ //# sourceMappingURL=TronSetAllowanceTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TronSetAllowanceTask.js","sourceRoot":"","sources":["../../../../src/core/tasks/TronSetAllowanceTask.ts"],"names":[],"mappings":"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"}