@cryptorubic/web3 0.15.0-alpha-rub-1045.0 → 1.0.0-alpha-rub-1044.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +1 -1
  2. package/package.json +3 -1
  3. package/src/index.d.ts +130 -22
  4. package/src/index.js +130 -20
  5. package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +38 -0
  6. package/src/lib/adapter/adapters/{bitcoin-adapter.js → adapter-bitcoin/bitcoin-adapter.js} +35 -13
  7. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params.d.ts +5 -0
  8. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.d.ts +5 -0
  9. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.js +2 -0
  10. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.d.ts +7 -0
  11. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.js +2 -0
  12. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.d.ts +6 -0
  13. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.js +2 -0
  14. package/src/lib/adapter/adapters/adapter-bitcoin/signer/bitcoin-adapter-signer.d.ts +17 -0
  15. package/src/lib/adapter/adapters/adapter-bitcoin/signer/bitcoin-adapter-signer.js +131 -0
  16. package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.d.ts +4 -0
  17. package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.js +705 -0
  18. package/src/lib/adapter/adapters/adapter-evm/evm-adapter.d.ts +120 -0
  19. package/src/lib/adapter/adapters/{evm-adapter.js → adapter-evm/evm-adapter.js} +215 -87
  20. package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.d.ts +38 -0
  21. package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.js +2 -0
  22. package/src/lib/adapter/adapters/adapter-evm/signer/evm-adapter-signer.d.ts +53 -0
  23. package/src/lib/adapter/adapters/adapter-evm/signer/evm-adapter-signer.js +268 -0
  24. package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.d.ts +12 -0
  25. package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.js +70 -0
  26. package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.d.ts +16 -0
  27. package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.js +2 -0
  28. package/src/lib/adapter/adapters/{utils → adapter-solana/services}/solana-tokens-service.d.ts +1 -1
  29. package/src/lib/adapter/adapters/{utils → adapter-solana/services}/solana-tokens-service.js +2 -2
  30. package/src/lib/adapter/adapters/adapter-solana/signer/solana-adapter-signer.d.ts +17 -0
  31. package/src/lib/adapter/adapters/adapter-solana/signer/solana-adapter-signer.js +87 -0
  32. package/src/lib/adapter/adapters/{solana-adapter.d.ts → adapter-solana/solana-adapter.d.ts} +25 -15
  33. package/src/lib/adapter/adapters/{solana-adapter.js → adapter-solana/solana-adapter.js} +60 -38
  34. package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.d.ts +8 -0
  35. package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.js +2 -0
  36. package/src/lib/adapter/adapters/adapter-sui/signer/sui-adapter-signer.d.ts +17 -0
  37. package/src/lib/adapter/adapters/adapter-sui/signer/sui-adapter-signer.js +55 -0
  38. package/src/lib/adapter/adapters/adapter-sui/sui-adapter.d.ts +32 -0
  39. package/src/lib/adapter/adapters/{sui-adapter.js → adapter-sui/sui-adapter.js} +45 -9
  40. package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.d.ts +26 -0
  41. package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.js +2 -0
  42. package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.d.ts +4 -4
  43. package/src/lib/adapter/adapters/adapter-ton/signer/ton-adapter-signer.d.ts +43 -0
  44. package/src/lib/adapter/adapters/adapter-ton/signer/ton-adapter-signer.js +166 -0
  45. package/src/lib/adapter/adapters/adapter-ton/ton-adapter.d.ts +32 -0
  46. package/src/lib/adapter/adapters/adapter-ton/ton-adapter.js +104 -0
  47. package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.d.ts +13 -0
  48. package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.js +2 -0
  49. package/src/lib/adapter/adapters/adapter-tron/models/tron-web-provider.d.ts +4 -0
  50. package/src/lib/adapter/adapters/adapter-tron/models/tron-web-provider.js +2 -0
  51. package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.d.ts +17 -0
  52. package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.js +57 -0
  53. package/src/lib/adapter/adapters/adapter-tron/tron-adapter.d.ts +57 -0
  54. package/src/lib/adapter/adapters/{tron-adapter.js → adapter-tron/tron-adapter.js} +131 -66
  55. package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.d.ts +2 -0
  56. package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.js +20 -0
  57. package/src/lib/adapter/adapters/common/abstract-adapter.d.ts +84 -0
  58. package/src/lib/adapter/adapters/common/abstract-adapter.js +82 -0
  59. package/src/lib/adapter/adapters/common/signer/abstract-adapter-signer.d.ts +22 -0
  60. package/src/lib/adapter/adapters/common/signer/abstract-adapter-signer.js +42 -0
  61. package/src/lib/adapter/adapters/models/approve-adapter.d.ts +12 -8
  62. package/src/lib/adapter/adapters/models/approve-adapter.js +1 -1
  63. package/src/lib/adapter/adapters/models/basic-transaction-options.d.ts +1 -1
  64. package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.d.ts +5 -0
  65. package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.js +2 -0
  66. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.d.ts +4 -0
  67. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.js +2 -0
  68. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.d.ts +4 -0
  69. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.js +2 -0
  70. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.d.ts +18 -0
  71. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.js +2 -0
  72. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price.js +2 -0
  73. package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.d.ts +10 -0
  74. package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.js +2 -0
  75. package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.d.ts +5 -0
  76. package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.js +2 -0
  77. package/src/lib/adapter/adapters/models/old-features-models/contract-params.d.ts +23 -0
  78. package/src/lib/adapter/adapters/models/old-features-models/contract-params.js +2 -0
  79. package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.d.ts +32 -0
  80. package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.js +2 -0
  81. package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.d.ts +6 -0
  82. package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.js +2 -0
  83. package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.d.ts +5 -0
  84. package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.js +2 -0
  85. package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.d.ts +65 -0
  86. package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.js +2 -0
  87. package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.d.ts +8 -0
  88. package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.js +2 -0
  89. package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.d.ts +5 -0
  90. package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.js +2 -0
  91. package/src/lib/adapter/adapters/models/web3-public-models/method-data.d.ts +4 -0
  92. package/src/lib/adapter/adapters/models/web3-public-models/method-data.js +2 -0
  93. package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.d.ts +1 -0
  94. package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.js +2 -0
  95. package/src/lib/adapter/adapters/models/web3-public-models/tx-status.d.ts +10 -0
  96. package/src/lib/adapter/adapters/models/web3-public-models/tx-status.js +12 -0
  97. package/src/lib/adapter/adapters/utils/errors.d.ts +2 -0
  98. package/src/lib/adapter/adapters/utils/errors.js +10 -0
  99. package/src/lib/adapter/adapters/utils/options.d.ts +10 -0
  100. package/src/lib/adapter/adapters/utils/options.js +59 -0
  101. package/src/lib/adapter/adapters/utils/waitFor.d.ts +1 -0
  102. package/src/lib/adapter/adapters/utils/waitFor.js +6 -0
  103. package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +15 -13
  104. package/src/lib/adapter/blockchain-adapter-factory.service.js +44 -61
  105. package/src/lib/adapter/constants/chain-configs/chain-configs.js +65 -56
  106. package/src/lib/adapter/constants/models/env-type.d.ts +1 -0
  107. package/src/lib/adapter/constants/models/env-type.js +2 -0
  108. package/src/lib/adapter/constants/models/solana-web3.d.ts +1 -1
  109. package/src/lib/adapter/constants/rubic-api-link-mapping.d.ts +2 -0
  110. package/src/lib/adapter/constants/rubic-api-link-mapping.js +16 -0
  111. package/src/lib/adapter/constants/viem-blockchain-mapping.js +2 -2
  112. package/src/lib/adapter/models/create-factory-params.d.ts +23 -0
  113. package/src/lib/adapter/models/create-factory-params.js +2 -0
  114. package/src/lib/errors/blockchain/deflation-token.error.d.ts +11 -0
  115. package/src/lib/errors/blockchain/deflation-token.error.js +16 -0
  116. package/src/lib/errors/blockchain/healthcheck.error.d.ts +8 -0
  117. package/src/lib/errors/blockchain/healthcheck.error.js +15 -0
  118. package/src/lib/errors/blockchain/invalid-address.error.d.ts +8 -0
  119. package/src/lib/errors/blockchain/invalid-address.error.js +15 -0
  120. package/src/lib/errors/blockchain/low-gas.error.d.ts +7 -0
  121. package/src/lib/errors/blockchain/low-gas.error.js +14 -0
  122. package/src/lib/errors/blockchain/transaction-reverted.error.d.ts +7 -0
  123. package/src/lib/errors/blockchain/transaction-reverted.error.js +14 -0
  124. package/src/lib/errors/blockchain/tron-insufficient-native-balance.d.ts +7 -0
  125. package/src/lib/errors/blockchain/tron-insufficient-native-balance.js +14 -0
  126. package/src/lib/errors/blockchain/tron-transaction-expired.d.ts +7 -0
  127. package/src/lib/errors/blockchain/tron-transaction-expired.js +14 -0
  128. package/src/lib/errors/blockchain/user-reject.error.d.ts +7 -0
  129. package/src/lib/errors/blockchain/user-reject.error.js +14 -0
  130. package/src/lib/errors/blockchain/wrong-from-address.error.d.ts +7 -0
  131. package/src/lib/errors/blockchain/wrong-from-address.error.js +14 -0
  132. package/src/lib/errors/blockchain/wrong-receiver-address.error.d.ts +7 -0
  133. package/src/lib/errors/blockchain/wrong-receiver-address.error.js +14 -0
  134. package/src/lib/errors/common/timeout.error.d.ts +4 -0
  135. package/src/lib/errors/common/timeout.error.js +12 -0
  136. package/src/lib/errors/common/tx-reverted-in-chain.error.d.ts +4 -0
  137. package/src/lib/errors/common/tx-reverted-in-chain.error.js +11 -0
  138. package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.d.ts +7 -0
  139. package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.js +14 -0
  140. package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.d.ts +7 -0
  141. package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.js +14 -0
  142. package/src/lib/errors/cross-chain/low-to-slippage.error.d.ts +6 -0
  143. package/src/lib/errors/cross-chain/low-to-slippage.error.js +10 -0
  144. package/src/lib/errors/cross-chain/max-gas-price-overflow.error.d.ts +8 -0
  145. package/src/lib/errors/cross-chain/max-gas-price-overflow.error.js +15 -0
  146. package/src/lib/errors/cross-chain/too-low-amount.error.d.ts +7 -0
  147. package/src/lib/errors/cross-chain/too-low-amount.error.js +14 -0
  148. package/src/lib/errors/cross-chain/unsupported-receiver-address.error.d.ts +4 -0
  149. package/src/lib/errors/cross-chain/unsupported-receiver-address.error.js +11 -0
  150. package/src/lib/errors/cross-chain/updated-rates-error.d.ts +10 -0
  151. package/src/lib/errors/cross-chain/updated-rates-error.js +17 -0
  152. package/src/lib/errors/models/rubic-api-error.d.ts +21 -0
  153. package/src/lib/errors/models/rubic-api-error.js +2 -0
  154. package/src/lib/errors/on-chain/on-chain-is-unavailable.error.d.ts +7 -0
  155. package/src/lib/errors/on-chain/on-chain-is-unavailable.error.js +14 -0
  156. package/src/lib/errors/proxy/unapproved-contract-error.d.ts +8 -0
  157. package/src/lib/errors/proxy/unapproved-contract-error.js +15 -0
  158. package/src/lib/errors/proxy/unapproved-method-error.d.ts +8 -0
  159. package/src/lib/errors/proxy/unapproved-method-error.js +15 -0
  160. package/src/lib/errors/proxy/unlisted-error.d.ts +9 -0
  161. package/src/lib/errors/proxy/unlisted-error.js +16 -0
  162. package/src/lib/errors/rubic-sdk.error.d.ts +6 -0
  163. package/src/lib/errors/rubic-sdk.error.js +13 -0
  164. package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.d.ts +7 -0
  165. package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.js +14 -0
  166. package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.d.ts +8 -0
  167. package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.js +15 -0
  168. package/src/lib/errors/swap/insufficient-funds-oneinch.error.d.ts +9 -0
  169. package/src/lib/errors/swap/insufficient-funds-oneinch.error.js +15 -0
  170. package/src/lib/errors/swap/insufficient-funds.error.d.ts +11 -0
  171. package/src/lib/errors/swap/insufficient-funds.error.js +18 -0
  172. package/src/lib/errors/swap/insufficient-liquidity.error.d.ts +7 -0
  173. package/src/lib/errors/swap/insufficient-liquidity.error.js +14 -0
  174. package/src/lib/errors/swap/lifi-pair-is-unavailable.error.d.ts +7 -0
  175. package/src/lib/errors/swap/lifi-pair-is-unavailable.error.js +14 -0
  176. package/src/lib/errors/swap/low-slippage-deflationary-token.error.d.ts +7 -0
  177. package/src/lib/errors/swap/low-slippage-deflationary-token.error.js +14 -0
  178. package/src/lib/errors/swap/low-slippage.error.d.ts +8 -0
  179. package/src/lib/errors/swap/low-slippage.error.js +15 -0
  180. package/src/lib/errors/swap/max-amount.error.d.ts +7 -0
  181. package/src/lib/errors/swap/max-amount.error.js +14 -0
  182. package/src/lib/errors/swap/max-decimals.error.d.ts +5 -0
  183. package/src/lib/errors/swap/max-decimals.error.js +12 -0
  184. package/src/lib/errors/swap/min-amount.error.d.ts +7 -0
  185. package/src/lib/errors/swap/min-amount.error.js +14 -0
  186. package/src/lib/errors/swap/no-linked-account-erros.d.ts +4 -0
  187. package/src/lib/errors/swap/no-linked-account-erros.js +11 -0
  188. package/src/lib/errors/swap/not-supported-blockchain.d.ts +8 -0
  189. package/src/lib/errors/swap/not-supported-blockchain.js +15 -0
  190. package/src/lib/errors/swap/not-supported-region.d.ts +7 -0
  191. package/src/lib/errors/swap/not-supported-region.js +14 -0
  192. package/src/lib/errors/swap/not-supported-tokens.error.d.ts +7 -0
  193. package/src/lib/errors/swap/not-supported-tokens.error.js +14 -0
  194. package/src/lib/errors/swap/not-whitelisted-provider.error.d.ts +10 -0
  195. package/src/lib/errors/swap/not-whitelisted-provider.error.js +17 -0
  196. package/src/lib/errors/swap/simulation-failed.error.d.ts +6 -0
  197. package/src/lib/errors/swap/simulation-failed.error.js +12 -0
  198. package/src/lib/errors/swap/swap-error-on-provider-side.d.ts +7 -0
  199. package/src/lib/errors/swap/swap-error-on-provider-side.js +14 -0
  200. package/src/lib/errors/swap/swap-request.error.d.ts +7 -0
  201. package/src/lib/errors/swap/swap-request.error.js +14 -0
  202. package/src/lib/errors/swap/trade-expired.error.d.ts +4 -0
  203. package/src/lib/errors/swap/trade-expired.error.js +11 -0
  204. package/src/lib/errors/swap/unnecessary-approve.error.d.ts +7 -0
  205. package/src/lib/errors/swap/unnecessary-approve.error.js +14 -0
  206. package/src/lib/errors/swap/wallet-not-connected.error.d.ts +8 -0
  207. package/src/lib/errors/swap/wallet-not-connected.error.js +15 -0
  208. package/src/lib/errors/swap/wrong-network.error.d.ts +10 -0
  209. package/src/lib/errors/swap/wrong-network.error.js +16 -0
  210. package/src/lib/utils/constants/web3-pure-store.js +10 -5
  211. package/src/lib/utils/models/evm-transaction-config.d.ts +2 -0
  212. package/src/lib/utils/web3-types/zcash-web3-pure.d.ts +5 -0
  213. package/src/lib/utils/web3-types/zcash-web3-pure.js +17 -0
  214. package/src/lib/adapter/adapters/abstract-adapter.d.ts +0 -23
  215. package/src/lib/adapter/adapters/abstract-adapter.js +0 -59
  216. package/src/lib/adapter/adapters/bitcoin-adapter.d.ts +0 -18
  217. package/src/lib/adapter/adapters/evm-adapter.d.ts +0 -59
  218. package/src/lib/adapter/adapters/sui-adapter.d.ts +0 -17
  219. package/src/lib/adapter/adapters/ton-adapter.d.ts +0 -22
  220. package/src/lib/adapter/adapters/ton-adapter.js +0 -100
  221. package/src/lib/adapter/adapters/tron-adapter.d.ts +0 -37
  222. /package/src/lib/adapter/adapters/{models/gas-price.js → adapter-bitcoin/models/btc-send-tx-params.js} +0 -0
  223. /package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.js +0 -0
  224. /package/src/lib/adapter/adapters/models/{gas-price.d.ts → evm-web3-public-models/gas-price.d.ts} +0 -0
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TonAdapter = void 0;
4
+ const core_1 = require("@cryptorubic/core");
5
+ const ton_api_service_1 = require("./services/ton-api.service");
6
+ const ton_1 = require("@ton/ton");
7
+ const bignumber_js_1 = require("bignumber.js");
8
+ const abstract_adapter_1 = require("../common/abstract-adapter");
9
+ const web3_pure_1 = require("../../../utils/web3-pure");
10
+ const ton_adapter_signer_1 = require("./signer/ton-adapter-signer");
11
+ const tx_status_1 = require("../models/web3-public-models/tx-status");
12
+ class TonAdapter extends abstract_adapter_1.AbstractAdapter {
13
+ constructor(httpClient, config, logger, clientParams) {
14
+ super(core_1.BLOCKCHAIN_NAME.TON, logger);
15
+ this.config = config;
16
+ this.tonApi = new ton_api_service_1.TonApiService(httpClient, config.tonApiConfig, logger);
17
+ this.signer = new ton_adapter_signer_1.TonAdapterSigner(this.tonApi, this.publicRef, httpClient, logger, clientParams);
18
+ }
19
+ initWeb3Client() {
20
+ this.public = new ton_1.TonClient(this.config.tonClientConfig);
21
+ }
22
+ async read() {
23
+ throw new Error('Method read is not supported');
24
+ }
25
+ async callContractMethod() {
26
+ throw new Error('Method call is not supported');
27
+ }
28
+ async getTransactionStatus(srcTxHash) {
29
+ const isCompleted = await this.tonApi.checkIsTxCompleted(srcTxHash);
30
+ if (isCompleted) {
31
+ return tx_status_1.TX_STATUS.SUCCESS;
32
+ }
33
+ return tx_status_1.TX_STATUS.PENDING;
34
+ }
35
+ async getTokensBalances(userAddress, tokensAddresses) {
36
+ const tokensWithBalance = await this.tonApi.fetchAllNonNullableTokensInfoForWallet(userAddress);
37
+ const nativeIndex = tokensAddresses.findIndex((tokenAddress) => web3_pure_1.Web3Pure.isNativeAddress('TON', tokenAddress));
38
+ if (!tokensWithBalance.length && nativeIndex === -1) {
39
+ return [];
40
+ }
41
+ const balances = tokensAddresses
42
+ .filter((tokenAddress) => !web3_pure_1.Web3Pure.isNativeAddress('TON', tokenAddress))
43
+ .map((address) => {
44
+ const tokenWithBalance = tokensWithBalance.find((token) => token.jetton.address.toLowerCase() === ton_1.Address.parse(address).toRawString().toLowerCase());
45
+ if (tokenWithBalance) {
46
+ return new bignumber_js_1.default(tokenWithBalance.balance);
47
+ }
48
+ return new bignumber_js_1.default(0);
49
+ });
50
+ if (nativeIndex !== -1) {
51
+ const acountInfo = await this.tonApi.fetchAccountInfo(userAddress);
52
+ const nativeBalance = new bignumber_js_1.default(acountInfo.balance);
53
+ balances.splice(nativeIndex, 0, nativeBalance);
54
+ }
55
+ return balances;
56
+ }
57
+ multicallContractsMethods() {
58
+ throw new Error('Method not implemented.');
59
+ }
60
+ async getBlockNumber() {
61
+ try {
62
+ const block = await this.tonApi.fetchLastBlockInfo();
63
+ return block.seqno;
64
+ }
65
+ catch {
66
+ return 0;
67
+ }
68
+ }
69
+ async callForTokensInfo(tokenAddresses) {
70
+ const info = await Promise.all(tokenAddresses.map((address) => {
71
+ if (web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.TON, address)) {
72
+ const nativeToken = core_1.nativeTokensList[core_1.BLOCKCHAIN_NAME.TON];
73
+ return nativeToken;
74
+ }
75
+ return this.tonApi.fetchTokenInfo(address);
76
+ }));
77
+ if (!info.length)
78
+ return [];
79
+ const necessaryInfo = info.map(({ decimals, name, symbol, address }) => new core_1.Token({
80
+ address,
81
+ blockchain: core_1.BLOCKCHAIN_NAME.TON,
82
+ decimals: Number(decimals),
83
+ name,
84
+ symbol
85
+ }));
86
+ return necessaryInfo;
87
+ }
88
+ async getAllFormatsOfAddress(walletAddress) {
89
+ return this.tonApi.getAllFormatsOfAddress(walletAddress);
90
+ }
91
+ async checkEnoughBalance(token, walletAddress) {
92
+ const weiBalance = await this.getBalance(walletAddress, token.address);
93
+ const balance = core_1.Token.fromWei(weiBalance, token.decimals);
94
+ return balance.gte(token.tokenAmount);
95
+ }
96
+ async getBalance(walletAddress, tokenAddress) {
97
+ const isNative = !tokenAddress || web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.TON, tokenAddress);
98
+ const tokenBalance = isNative
99
+ ? (await this.tonApi.fetchAccountInfo(walletAddress)).balance
100
+ : (await this.tonApi.fetchTokenInfoForWallet(walletAddress, tokenAddress)).balance;
101
+ return new bignumber_js_1.default(tokenBalance || 0);
102
+ }
103
+ }
104
+ exports.TonAdapter = TonAdapter;
@@ -0,0 +1,13 @@
1
+ import { TronParameters } from '../../../../utils/models/tron-parameters';
2
+ import { BasicSendTransactionOptions } from '../../models/basic-transaction-options';
3
+ export interface TronSendTxParams {
4
+ contractAddress: string;
5
+ methodSignature: string;
6
+ parameters: TronParameters;
7
+ txOptions: TronTransactionOptions;
8
+ }
9
+ export interface TronTransactionOptions extends BasicSendTransactionOptions {
10
+ feeLimit?: number;
11
+ callValue?: number;
12
+ rawParameter?: string;
13
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export interface TronWebProvider {
2
+ fullHost: string;
3
+ headers?: Record<string, string>;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,17 @@
1
+ import { TronWeb } from 'tronweb';
2
+ import { AbstractAdapterSigner } from '../../common/signer/abstract-adapter-signer';
3
+ import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
4
+ import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
5
+ import { TronSendTxParams } from '../models/tron-send-tx-params';
6
+ import { TronParameters } from '../../../../utils/models/tron-parameters';
7
+ export declare class TronAdapterSigner extends AbstractAdapterSigner<TronWeb, TronSendTxParams, string> {
8
+ private readonly publicRef;
9
+ get publicClient(): TronWeb;
10
+ constructor(publicRef: {
11
+ public: TronWeb | null;
12
+ }, httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
13
+ write(contractAddress: string, methodSignature: string, parameters: TronParameters): Promise<string>;
14
+ getBlockchainName(): Promise<BlockchainName>;
15
+ sendTransaction(params: TronSendTxParams): Promise<string>;
16
+ trySendTransaction(params: TronSendTxParams): Promise<string>;
17
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TronAdapterSigner = void 0;
4
+ const abstract_adapter_signer_1 = require("../../common/signer/abstract-adapter-signer");
5
+ const core_1 = require("@cryptorubic/core");
6
+ const parse_tron_error_1 = require("../utils/parse-tron-error");
7
+ class TronAdapterSigner extends abstract_adapter_signer_1.AbstractAdapterSigner {
8
+ get publicClient() {
9
+ if (!this.publicRef.public) {
10
+ const msg = `Trying to access undefined publicClient in TronAdapterSigner.`;
11
+ this.logger?.customLog(msg);
12
+ throw new Error(msg);
13
+ }
14
+ return this.publicRef.public;
15
+ }
16
+ constructor(publicRef, httpClient, logger, clientParams) {
17
+ super(httpClient, logger, clientParams);
18
+ this.publicRef = publicRef;
19
+ }
20
+ async write(contractAddress, methodSignature, parameters) {
21
+ const transaction = await this.wallet.transactionBuilder.triggerSmartContract(contractAddress, methodSignature, {}, parameters, this.walletAddress);
22
+ const signedTransaction = await this.wallet.trx.sign(transaction.transaction);
23
+ const receipt = await this.wallet.trx.sendRawTransaction(signedTransaction);
24
+ return receipt.transaction.txID;
25
+ }
26
+ getBlockchainName() {
27
+ return Promise.resolve(core_1.BLOCKCHAIN_NAME.TRON);
28
+ }
29
+ async sendTransaction(params) {
30
+ try {
31
+ const transaction = await this.wallet.transactionBuilder.triggerSmartContract(params.contractAddress, params.methodSignature, params.txOptions, params.parameters, this.walletAddress);
32
+ const signedTransaction = await this.wallet.trx.sign(transaction.transaction);
33
+ const receipt = await this.wallet.trx.sendRawTransaction(signedTransaction);
34
+ if (params.txOptions.onTransactionHash) {
35
+ params.txOptions.onTransactionHash(receipt.transaction.txID);
36
+ }
37
+ return receipt.transaction.txID;
38
+ }
39
+ catch (err) {
40
+ console.error('Method execution error: ', err);
41
+ throw (0, parse_tron_error_1.parseTronError)(err);
42
+ }
43
+ }
44
+ async trySendTransaction(params) {
45
+ try {
46
+ await this.wallet.transactionBuilder.estimateEnergy(params.contractAddress, params.methodSignature, {}, params.parameters, this.walletAddress);
47
+ }
48
+ catch (err) {
49
+ const errMessage = typeof err === 'object' ? err.message : err;
50
+ if (errMessage !== 'this node does not support estimate energy') {
51
+ throw new Error('Tron transaction simulation error');
52
+ }
53
+ }
54
+ return this.sendTransaction(params);
55
+ }
56
+ }
57
+ exports.TronAdapterSigner = TronAdapterSigner;
@@ -0,0 +1,57 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { AbstractAdapter } from '../common/abstract-adapter';
3
+ import { TronWeb } from 'tronweb';
4
+ import { HttpClient, ICustomLogger, PriceTokenAmount, Token, TokenAmount, TronBlockchainName } from '@cryptorubic/core';
5
+ import { TronTransactionConfig } from '../../../utils/models/tron-transaction-config';
6
+ import { TronParameters } from '../../../utils/models/tron-parameters';
7
+ import { Abi } from 'viem';
8
+ import { ContractMulticallResponse } from '../../../utils/models/contract-multicall-response';
9
+ import { TronWeb3PrimitiveType, Web3PrimitiveType } from '../../../utils/models/primitive-types';
10
+ import { MethodData } from '../../../utils/models/method-data';
11
+ import { ClientAdaptersFactoryParams } from '../../models/create-factory-params';
12
+ import { TronAdapterSigner } from './signer/tron-adapter-signer';
13
+ import { TronTransactionOptions } from './models/tron-send-tx-params';
14
+ import { AllowanceInfo } from '../models/common-types';
15
+ import { ApprovableAdapter } from '../models/approve-adapter';
16
+ import { TxStatus } from '../models/web3-public-models/tx-status';
17
+ export declare class TronAdapter extends AbstractAdapter<TronWeb, TronWeb, TronBlockchainName> implements ApprovableAdapter<TronTransactionConfig> {
18
+ private readonly rpcList;
19
+ readonly signer: TronAdapterSigner;
20
+ private readonly multicallAddress;
21
+ needPreswapAction(): Promise<boolean>;
22
+ constructor(rpcList: (string | {
23
+ fullHost: string;
24
+ })[], httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
25
+ initWeb3Client(): void;
26
+ callContractMethod<T extends Web3PrimitiveType = string>(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments?: unknown[]): Promise<T>;
27
+ getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
28
+ /**
29
+ * Gets mined transaction info.
30
+ * @param hash Transaction hash.
31
+ */
32
+ private getTransactionInfo;
33
+ getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
34
+ private batchMulticallTokenBalance;
35
+ multicallContractsMethods<Output extends TronWeb3PrimitiveType>(contractAbi: any, contractsData: {
36
+ contractAddress: string;
37
+ methodsData: MethodData[];
38
+ }[]): Promise<ContractMulticallResponse<any>[][]>;
39
+ getBlockNumber(): Promise<number | {
40
+ blockNumber: number;
41
+ workchain: number;
42
+ }>;
43
+ checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string): Promise<boolean>;
44
+ private multicall;
45
+ private multicallContractsMethodsByOne;
46
+ callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token[]>;
47
+ getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
48
+ getTokenBalance(userAddress: string, tokenAddress: string): Promise<BigNumber>;
49
+ convertTronAddressToHex(address: string): Promise<string>;
50
+ static encodeMethodCall(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments: TronParameters, callValue?: string, feeLimit?: number): TronTransactionConfig;
51
+ read<T>(contractAddress: string, contractAbi: any, methodName: string, methodArguments?: unknown[]): Promise<T>;
52
+ private static flattenTypesToString;
53
+ getAllowance(fromTokenAddress: string, ownerAddress: string, spenderAddress: string): Promise<AllowanceInfo>;
54
+ needApprove(from: TokenAmount, walletAddress: string, spender: string): Promise<boolean>;
55
+ approveTokens(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: TronTransactionOptions): Promise<string>;
56
+ encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): TronTransactionConfig;
57
+ }
@@ -2,26 +2,99 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TronAdapter = void 0;
4
4
  const bignumber_js_1 = require("bignumber.js");
5
- const trc_20_contract_abi_1 = require("./constants/trc-20-contract-abi");
6
- const tron_multicall_abi_1 = require("./constants/tron-multicall-abi");
7
- const abstract_adapter_1 = require("./abstract-adapter");
5
+ const trc_20_contract_abi_1 = require("../constants/trc-20-contract-abi");
6
+ const tron_multicall_abi_1 = require("../constants/tron-multicall-abi");
7
+ const abstract_adapter_1 = require("../common/abstract-adapter");
8
8
  const tronweb_1 = require("tronweb");
9
9
  const core_1 = require("@cryptorubic/core");
10
- const web3_pure_1 = require("../../utils/web3-pure");
11
- const tron_web3_pure_1 = require("../../utils/web3-types/tron-web3-pure");
10
+ const web3_pure_1 = require("../../../utils/web3-pure");
11
+ const tron_web3_pure_1 = require("../../../utils/web3-types/tron-web3-pure");
12
+ const tron_adapter_signer_1 = require("./signer/tron-adapter-signer");
13
+ const options_1 = require("../utils/options");
14
+ const parse_tron_error_1 = require("./utils/parse-tron-error");
15
+ const tx_status_1 = require("../models/web3-public-models/tx-status");
12
16
  class TronAdapter extends abstract_adapter_1.AbstractAdapter {
13
- async needPreswapAction(token, contractAddress, walletAddress, amount) {
14
- // return this.needApprove()
17
+ async needPreswapAction() {
15
18
  return false;
16
19
  }
17
- constructor(rpcList, logger) {
20
+ constructor(rpcList, httpClient, logger, clientParams) {
18
21
  super(core_1.BLOCKCHAIN_NAME.TRON, logger);
22
+ this.rpcList = rpcList;
19
23
  this.multicallAddress = 'T9ziQU4EBteJzjzMzhHELdhgWFqwzS5Vki';
20
- this.public = new tronweb_1.TronWeb({ fullHost: rpcList[0] });
24
+ this.signer = new tron_adapter_signer_1.TronAdapterSigner(this.publicRef, httpClient, logger, clientParams);
21
25
  }
22
- async checkEnoughBalance(token, walletAddress) {
23
- const balance = await this.getBalance(walletAddress, token.address);
24
- return balance.gte(token.tokenAmount);
26
+ initWeb3Client() {
27
+ const rpc = typeof this.rpcList[0] === 'string' ? this.rpcList[0] : this.rpcList[0].fullHost;
28
+ this.public = new tronweb_1.TronWeb({ fullHost: rpc });
29
+ }
30
+ async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = []) {
31
+ this.public.setAddress(contractAddress);
32
+ const contract = await this.public.contract(contractAbi, contractAddress);
33
+ const response = await contract[methodName](...methodArguments).call();
34
+ return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
35
+ }
36
+ async getTransactionStatus(srcTxHash) {
37
+ const txReceipt = await this.getTransactionInfo(srcTxHash);
38
+ if (txReceipt?.receipt) {
39
+ if (txReceipt.result === 'FAILED') {
40
+ return tx_status_1.TX_STATUS.FAIL;
41
+ }
42
+ return tx_status_1.TX_STATUS.SUCCESS;
43
+ }
44
+ return tx_status_1.TX_STATUS.PENDING;
45
+ }
46
+ /**
47
+ * Gets mined transaction info.
48
+ * @param hash Transaction hash.
49
+ */
50
+ async getTransactionInfo(hash) {
51
+ return this.public.trx.getTransactionInfo(hash);
52
+ }
53
+ async getTokensBalances(userAddress, tokensAddresses) {
54
+ const indexOfNativeCoin = tokensAddresses.findIndex((tokenAddress) => web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.TRON, tokenAddress));
55
+ const promises = [];
56
+ if (indexOfNativeCoin !== -1) {
57
+ tokensAddresses.splice(indexOfNativeCoin, 1);
58
+ promises[1] = this.getBalance(userAddress);
59
+ }
60
+ promises[0] = this.batchMulticallTokenBalance(userAddress, tokensAddresses, 50);
61
+ const results = await Promise.all(promises);
62
+ const tokensBalances = results[0].map((tokenResults) => {
63
+ const { success, output } = tokenResults[0];
64
+ return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
65
+ });
66
+ if (indexOfNativeCoin !== -1) {
67
+ tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
68
+ }
69
+ return tokensBalances;
70
+ }
71
+ async batchMulticallTokenBalance(userAddress, tokensAddresses, batchSize) {
72
+ if (tokensAddresses.length > 100) {
73
+ const balances = [];
74
+ for (let i = 0; i < tokensAddresses.length; i += batchSize) {
75
+ const batchRequest = tokensAddresses.slice(i, i + batchSize);
76
+ const batchResult = await this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, batchRequest.map((tokenAddress) => ({
77
+ contractAddress: tokenAddress,
78
+ methodsData: [
79
+ {
80
+ methodName: 'balanceOf',
81
+ methodArguments: [userAddress]
82
+ }
83
+ ]
84
+ })));
85
+ balances.push(...batchResult);
86
+ }
87
+ return balances;
88
+ }
89
+ return this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokensAddresses.map((tokenAddress) => ({
90
+ contractAddress: tokenAddress,
91
+ methodsData: [
92
+ {
93
+ methodName: 'balanceOf',
94
+ methodArguments: [userAddress]
95
+ }
96
+ ]
97
+ })));
25
98
  }
26
99
  async multicallContractsMethods(contractAbi, contractsData) {
27
100
  const calls = contractsData.map(({ contractAddress, methodsData }) => {
@@ -48,22 +121,26 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
48
121
  };
49
122
  }));
50
123
  }
51
- catch {
124
+ catch (err) {
125
+ this.logger
126
+ ? this.logger.customError('[TronAdapter_multicallContractsMethods] Error: ', err)
127
+ : console.debug('[TronAdapter_multicallContractsMethods] Error:', err);
52
128
  return this.multicallContractsMethodsByOne(contractAbi, contractsData);
53
129
  }
54
130
  }
131
+ async getBlockNumber() {
132
+ return (await this.public.trx.getCurrentBlock()).block_header.raw_data.number;
133
+ }
134
+ async checkEnoughBalance(token, walletAddress) {
135
+ const balance = await this.getBalance(walletAddress, token.address);
136
+ return balance.gte(token.tokenAmount);
137
+ }
55
138
  async multicall(calls) {
56
139
  this.public.setAddress(this.multicallAddress);
57
140
  const contract = await this.public.contract(tron_multicall_abi_1.TRON_MULTICALL_ABI, this.multicallAddress);
58
141
  // @ts-ignore
59
142
  return contract.aggregateViewCalls(calls).call();
60
143
  }
61
- async read(contractAddress, contractAbi, methodName, methodArguments = []) {
62
- this.public.setAddress(contractAddress);
63
- const contract = await this.public.contract(contractAbi, contractAddress);
64
- const response = await contract[methodName](...methodArguments).call();
65
- return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
66
- }
67
144
  multicallContractsMethodsByOne(contractAbi, contractsData) {
68
145
  return Promise.all(contractsData.map((contractData) => {
69
146
  return Promise.all(contractData.methodsData.map(async (methodData) => {
@@ -83,32 +160,6 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
83
160
  }));
84
161
  }));
85
162
  }
86
- async getTokensBalances(userAddress, tokensAddresses) {
87
- const indexOfNativeCoin = tokensAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
88
- const promises = [];
89
- if (indexOfNativeCoin !== -1) {
90
- tokensAddresses.splice(indexOfNativeCoin, 1);
91
- promises[1] = this.getBalance(userAddress);
92
- }
93
- promises[0] = this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokensAddresses.map((tokenAddress) => ({
94
- contractAddress: tokenAddress,
95
- methodsData: [
96
- {
97
- methodArguments: [userAddress],
98
- methodName: 'balanceOf'
99
- }
100
- ]
101
- })));
102
- const results = await Promise.all(promises);
103
- const tokensBalances = results[0].map((tokenResults) => {
104
- const { success, output } = tokenResults[0];
105
- return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
106
- });
107
- if (indexOfNativeCoin !== -1) {
108
- tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
109
- }
110
- return tokensBalances;
111
- }
112
163
  async callForTokensInfo(tokenAddresses) {
113
164
  const tokenFields = ['decimals', 'symbol', 'name'];
114
165
  const nativeTokenIndex = tokenAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
@@ -184,6 +235,12 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
184
235
  ...(feeLimit && { feeLimit })
185
236
  };
186
237
  }
238
+ async read(contractAddress, contractAbi, methodName, methodArguments = []) {
239
+ this.public.setAddress(contractAddress);
240
+ const contract = await this.public.contract(contractAbi, contractAddress);
241
+ const response = await contract[methodName](...methodArguments).call();
242
+ return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
243
+ }
187
244
  static flattenTypesToString(abiInputs) {
188
245
  return (abiInputs?.map((abiInput) => {
189
246
  if (abiInput.type === 'tuple' || abiInput.type.includes('tuple')) {
@@ -195,38 +252,46 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
195
252
  return abiInput.type;
196
253
  }) || []);
197
254
  }
255
+ async getAllowance(fromTokenAddress, ownerAddress, spenderAddress) {
256
+ const [decimals, allowance] = await Promise.all([
257
+ this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals'),
258
+ this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'allowance', [ownerAddress, spenderAddress])
259
+ ]);
260
+ const allowanceWeiBN = new bignumber_js_1.default(allowance);
261
+ const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
262
+ return { allowanceNonWei, allowanceWei: allowanceWeiBN };
263
+ }
198
264
  async needApprove(from, walletAddress, spender) {
199
265
  if (from.isNative)
200
266
  return false;
201
267
  const { allowanceWei } = await this.getAllowance(from.address, walletAddress, spender);
202
268
  return allowanceWei.lt(from.weiAmount);
203
269
  }
270
+ async approveTokens(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
271
+ try {
272
+ const contract = await this.signer.wallet.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokenAddress);
273
+ const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
274
+ const transactionHash = await contract.approve(spenderAddress, rawValue.toFixed(0)).send({
275
+ ...(options.feeLimit && {
276
+ feeLimit: (0, options_1.stringifyAmount)(options.feeLimit)
277
+ })
278
+ });
279
+ if (options.onTransactionHash) {
280
+ options.onTransactionHash(transactionHash);
281
+ }
282
+ return transactionHash;
283
+ }
284
+ catch (err) {
285
+ console.error('Approve execution error: ', err);
286
+ throw (0, parse_tron_error_1.parseTronError)(err);
287
+ }
288
+ }
204
289
  encodeApprove(tokenAddress, spenderAddress, amount) {
205
290
  const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
206
- return tron_web3_pure_1.TronWeb3Pure.encodeMethodCall(tokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [
291
+ return TronAdapter.encodeMethodCall(tokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [
207
292
  { type: 'address', value: spenderAddress },
208
293
  { type: 'uint256', value: amountWei }
209
294
  ]);
210
295
  }
211
- async getAllowance(fromTokenAddress, walletAddress, spender) {
212
- const [contract, decimals, allowance] = await Promise.all([
213
- this.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, fromTokenAddress),
214
- this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals'),
215
- this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'allowance', [spender])
216
- ]);
217
- const allowanceWeiBN = new bignumber_js_1.default(allowance);
218
- const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
219
- return { allowanceNonWei, allowanceWei: allowanceWeiBN };
220
- }
221
- async write(contractAddress, methodSignature, parameters) {
222
- const transaction = await this.wallet.transactionBuilder.triggerSmartContract(contractAddress, methodSignature, {}, parameters, this.walletAddress);
223
- const signedTransaction = await this.wallet.trx.sign(transaction.transaction);
224
- const receipt = await this.wallet.trx.sendRawTransaction(signedTransaction);
225
- return receipt.transaction.txID;
226
- }
227
- async approve(fromAddress, tokenAddress, spenderAddress, amount) {
228
- const config = this.encodeApprove(tokenAddress, spenderAddress, amount);
229
- return this.write(config.to, config.signature, config.arguments);
230
- }
231
296
  }
232
297
  exports.TronAdapter = TronAdapter;
@@ -0,0 +1,2 @@
1
+ import { RubicSdkError } from '../../../../errors/rubic-sdk.error';
2
+ export declare function parseTronError(err: unknown): RubicSdkError;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseTronError = parseTronError;
4
+ const tron_insufficient_native_balance_1 = require("../../../../errors/blockchain/tron-insufficient-native-balance");
5
+ const tron_transaction_expired_1 = require("../../../../errors/blockchain/tron-transaction-expired");
6
+ const user_reject_error_1 = require("../../../../errors/blockchain/user-reject.error");
7
+ const errors_1 = require("../../utils/errors");
8
+ function parseTronError(err) {
9
+ if (err?.includes?.('Confirmation declined by user')) {
10
+ throw new user_reject_error_1.UserRejectError();
11
+ }
12
+ const message = err?.message;
13
+ if (message?.includes('balance is not sufficient')) {
14
+ throw new tron_insufficient_native_balance_1.TronInsufficientNativeBalance();
15
+ }
16
+ if (message?.includes('Transaction expired')) {
17
+ throw new tron_transaction_expired_1.TronTransactionExpired();
18
+ }
19
+ return (0, errors_1.parseError)(err);
20
+ }
@@ -0,0 +1,84 @@
1
+ import { Abi } from 'viem';
2
+ import BigNumber from 'bignumber.js';
3
+ import { ICustomLogger, Token, TokenAmount, BlockchainName } from '@cryptorubic/core';
4
+ import { AbstractAdapterSigner } from './signer/abstract-adapter-signer';
5
+ import { MethodData } from '../models/web3-public-models/method-data';
6
+ import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
7
+ import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
8
+ import { TxStatus } from '../models/web3-public-models/tx-status';
9
+ export declare abstract class AbstractAdapter<P, W, B extends BlockchainName, SendTxParams extends object = {}, SendTxResponse = {}> {
10
+ abstract signer: AbstractAdapterSigner<W, SendTxParams, SendTxResponse>;
11
+ protected readonly logger?: ICustomLogger;
12
+ readonly blockchain: B;
13
+ /**
14
+ * used to pass public pointer in signer constructor
15
+ */
16
+ private _publicRef;
17
+ protected set public(value: P | null);
18
+ get public(): P;
19
+ get publicRef(): {
20
+ public: P | null;
21
+ };
22
+ get connected(): boolean;
23
+ protected constructor(blockchain: B, logger?: ICustomLogger);
24
+ /**
25
+ * Used to set this.public property, if it's not set - you can't send rpc requests to blockchain.
26
+ * Mostly you need to instantiate it at the same time as BlockchainAdapterFactoryService.createAdapter() called.
27
+ * In rubic-app it's called on wallet connection to prevent unnecessary rpc requests `net_listening` from viem library.
28
+ */
29
+ abstract initWeb3Client(): void;
30
+ /**
31
+ * Gets account native or token balance in wei.
32
+ * @param userAddress Wallet address, whose balance you want to find out.
33
+ * @param tokenAddress Address of the smart-contract corresponding to the token,
34
+ */
35
+ abstract getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
36
+ abstract getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
37
+ abstract checkEnoughBalance(token: TokenAmount, walletAddress: string): Promise<boolean>;
38
+ abstract callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<BlockchainName>[]>;
39
+ /**
40
+ * Calls pure method of smart-contract and returns its output value.
41
+ * @param contractAddress Address of smart-contract which method is to be executed.
42
+ * @param contractAbi Abi of smart-contract which method is to be executed.
43
+ * @param methodName Called method name.
44
+ * @param methodArguments Method arguments.
45
+ * @param options Transaction options.
46
+ */
47
+ abstract callContractMethod<T extends Web3PrimitiveType = string>(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments?: unknown[], options?: object): Promise<T>;
48
+ /**
49
+ * Gets token info by address.
50
+ * @param tokenAddress Address of token.
51
+ * @param tokenFields Token's fields to get.
52
+ */
53
+ callForTokenInfo(tokenAddress: string): Promise<Token<BlockchainName>>;
54
+ /**
55
+ * Checks that user has enough balance.
56
+ * @param userAddress Wallet address, which contains tokens.
57
+ * @param token Token to check balance of.
58
+ * @param requiredAmount Required user balance in Eth units.
59
+ */
60
+ checkBalance(token: Token, requiredAmount: BigNumber, userAddress: string): Promise<void | never>;
61
+ /**
62
+ * Uses multicall to make many methods calls in several contracts.
63
+ * @param contractAbi Target contract abi.
64
+ * @param contractsData Contract addresses and methods data, containing methods' names and arguments.
65
+ */
66
+ abstract multicallContractsMethods<Output extends Web3PrimitiveType>(contractAbi: Abi, contractsData: {
67
+ contractAddress: string;
68
+ methodsData: MethodData[];
69
+ }[]): Promise<ContractMulticallResponse<Output>[][]>;
70
+ /**
71
+ * Gets last block number.
72
+ * @returns Block number.
73
+ */
74
+ abstract getBlockNumber(): Promise<number | {
75
+ blockNumber: number;
76
+ workchain: number;
77
+ }>;
78
+ needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string | BigNumber): Promise<boolean>;
79
+ handlePreswap(contractAddress: string, walletAddress: string, tokenAmount: TokenAmount): Promise<void>;
80
+ static getRandomBytes(bytes: number): string;
81
+ abstract read<T>(...args: unknown[]): Promise<T>;
82
+ abstract getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
83
+ getSrcTxStatus(blockchain: BlockchainName, srcTxHash: string): Promise<TxStatus>;
84
+ }