@cryptorubic/web3 0.14.0-alpha.solana-gas.12 → 1.0.0-alpha.no-sdk.1

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 (218) hide show
  1. package/package.json +1 -1
  2. package/src/index.d.ts +4 -7
  3. package/src/index.js +4 -7
  4. package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +35 -0
  5. package/src/lib/adapter/adapters/{bitcoin-adapter.js → adapter-bitcoin/bitcoin-adapter.js} +16 -6
  6. package/src/lib/adapter/adapters/adapter-bitcoin/client/bitcoin-adapter-client.d.ts +16 -0
  7. package/src/lib/adapter/adapters/adapter-bitcoin/client/bitcoin-adapter-client.js +119 -0
  8. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params.d.ts +5 -0
  9. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.d.ts +5 -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-transfer-encoded-config.d.ts +6 -0
  12. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.js +2 -0
  13. package/src/lib/adapter/adapters/adapter-evm/client/evm-adapter-client.d.ts +80 -0
  14. package/src/lib/adapter/adapters/adapter-evm/client/evm-adapter-client.js +307 -0
  15. package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.d.ts +4 -0
  16. package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.js +705 -0
  17. package/src/lib/adapter/adapters/{evm-adapter.d.ts → adapter-evm/evm-adapter.d.ts} +25 -17
  18. package/src/lib/adapter/adapters/{evm-adapter.js → adapter-evm/evm-adapter.js} +155 -75
  19. package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.d.ts +38 -0
  20. package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.js +2 -0
  21. package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.d.ts +12 -0
  22. package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.js +70 -0
  23. package/src/lib/adapter/adapters/adapter-solana/client/solana-adapter-client.d.ts +15 -0
  24. package/src/lib/adapter/adapters/adapter-solana/client/solana-adapter-client.js +94 -0
  25. package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.d.ts +16 -0
  26. package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.js +2 -0
  27. package/src/lib/adapter/adapters/{utils/solana-utils → adapter-solana/services}/solana-tokens-service.js +8 -10
  28. package/src/lib/adapter/adapters/{solana-adapter.d.ts → adapter-solana/solana-adapter.d.ts} +23 -17
  29. package/src/lib/adapter/adapters/{solana-adapter.js → adapter-solana/solana-adapter.js} +36 -98
  30. package/src/lib/adapter/adapters/adapter-sui/client/sui-adapter-client.d.ts +15 -0
  31. package/src/lib/adapter/adapters/adapter-sui/client/sui-adapter-client.js +58 -0
  32. package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.d.ts +8 -0
  33. package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.js +2 -0
  34. package/src/lib/adapter/adapters/adapter-sui/sui-adapter.d.ts +29 -0
  35. package/src/lib/adapter/adapters/{sui-adapter.js → adapter-sui/sui-adapter.js} +25 -6
  36. package/src/lib/adapter/adapters/adapter-ton/client/ton-adapter-client.d.ts +41 -0
  37. package/src/lib/adapter/adapters/adapter-ton/client/ton-adapter-client.js +164 -0
  38. package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.d.ts +26 -0
  39. package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.js +2 -0
  40. package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.d.ts +4 -4
  41. package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.js +0 -5
  42. package/src/lib/adapter/adapters/adapter-ton/services/ton-client/ton-client.d.ts +6 -0
  43. package/src/lib/adapter/adapters/adapter-ton/services/ton-client/ton-client.js +18 -0
  44. package/src/lib/adapter/adapters/adapter-ton/ton-adapter.d.ts +29 -0
  45. package/src/lib/adapter/adapters/{ton-adapter.js → adapter-ton/ton-adapter.js} +40 -50
  46. package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.d.ts +27 -0
  47. package/src/lib/adapter/adapters/adapter-tron/client/tron-adapter-client.js +91 -0
  48. package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.d.ts +13 -0
  49. package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.js +2 -0
  50. package/src/lib/adapter/adapters/{tron-adapter.d.ts → adapter-tron/tron-adapter.d.ts} +21 -18
  51. package/src/lib/adapter/adapters/{tron-adapter.js → adapter-tron/tron-adapter.js} +45 -68
  52. package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.d.ts +2 -0
  53. package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.js +20 -0
  54. package/src/lib/adapter/adapters/common/abstract-adapter.d.ts +48 -0
  55. package/src/lib/adapter/adapters/common/abstract-adapter.js +67 -0
  56. package/src/lib/adapter/adapters/common/client/abstract-adapter-client.d.ts +24 -0
  57. package/src/lib/adapter/adapters/common/client/abstract-adapter-client.js +59 -0
  58. package/src/lib/adapter/adapters/models/approve-adapter.d.ts +4 -4
  59. package/src/lib/adapter/adapters/models/approve-adapter.js +3 -3
  60. package/src/lib/adapter/adapters/models/basic-transaction-options.d.ts +1 -1
  61. package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.d.ts +5 -0
  62. package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.js +2 -0
  63. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.d.ts +4 -0
  64. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.js +2 -0
  65. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.d.ts +4 -0
  66. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.js +2 -0
  67. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.d.ts +18 -0
  68. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.js +2 -0
  69. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price.js +2 -0
  70. package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.d.ts +10 -0
  71. package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.js +2 -0
  72. package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.d.ts +5 -0
  73. package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.js +2 -0
  74. package/src/lib/adapter/adapters/models/old-features-models/contract-params.d.ts +23 -0
  75. package/src/lib/adapter/adapters/models/old-features-models/contract-params.js +2 -0
  76. package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.d.ts +32 -0
  77. package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.js +2 -0
  78. package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.d.ts +6 -0
  79. package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.js +2 -0
  80. package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.d.ts +5 -0
  81. package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.js +2 -0
  82. package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.d.ts +61 -0
  83. package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.js +2 -0
  84. package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.d.ts +8 -0
  85. package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.js +2 -0
  86. package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.d.ts +5 -0
  87. package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.js +2 -0
  88. package/src/lib/adapter/adapters/models/web3-public-models/method-data.d.ts +4 -0
  89. package/src/lib/adapter/adapters/models/web3-public-models/method-data.js +2 -0
  90. package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.d.ts +1 -0
  91. package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.js +2 -0
  92. package/src/lib/adapter/adapters/models/web3-public-models/tx-status.d.ts +10 -0
  93. package/src/lib/adapter/adapters/models/web3-public-models/tx-status.js +12 -0
  94. package/src/lib/adapter/adapters/utils/errors.d.ts +2 -0
  95. package/src/lib/adapter/adapters/utils/errors.js +10 -0
  96. package/src/lib/adapter/adapters/utils/options.d.ts +10 -0
  97. package/src/lib/adapter/adapters/utils/options.js +59 -0
  98. package/src/lib/adapter/adapters/utils/waitFor.d.ts +1 -0
  99. package/src/lib/adapter/adapters/utils/waitFor.js +6 -0
  100. package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +18 -13
  101. package/src/lib/adapter/blockchain-adapter-factory.service.js +35 -66
  102. package/src/lib/adapter/constants/models/create-factory-params.d.ts +8 -0
  103. package/src/lib/adapter/constants/models/create-factory-params.js +2 -0
  104. package/src/lib/adapter/constants/models/env-type.d.ts +1 -0
  105. package/src/lib/adapter/constants/models/env-type.js +2 -0
  106. package/src/lib/adapter/constants/models/solana-web3.d.ts +1 -1
  107. package/src/lib/adapter/constants/rubic-api-link-mapping.d.ts +2 -0
  108. package/src/lib/adapter/constants/rubic-api-link-mapping.js +16 -0
  109. package/src/lib/errors/blockchain/deflation-token.error.d.ts +11 -0
  110. package/src/lib/errors/blockchain/deflation-token.error.js +16 -0
  111. package/src/lib/errors/blockchain/healthcheck.error.d.ts +8 -0
  112. package/src/lib/errors/blockchain/healthcheck.error.js +15 -0
  113. package/src/lib/errors/blockchain/invalid-address.error.d.ts +8 -0
  114. package/src/lib/errors/blockchain/invalid-address.error.js +15 -0
  115. package/src/lib/errors/blockchain/low-gas.error.d.ts +7 -0
  116. package/src/lib/errors/blockchain/low-gas.error.js +14 -0
  117. package/src/lib/errors/blockchain/transaction-reverted.error.d.ts +7 -0
  118. package/src/lib/errors/blockchain/transaction-reverted.error.js +14 -0
  119. package/src/lib/errors/blockchain/tron-insufficient-native-balance.d.ts +7 -0
  120. package/src/lib/errors/blockchain/tron-insufficient-native-balance.js +14 -0
  121. package/src/lib/errors/blockchain/tron-transaction-expired.d.ts +7 -0
  122. package/src/lib/errors/blockchain/tron-transaction-expired.js +14 -0
  123. package/src/lib/errors/blockchain/user-reject.error.d.ts +7 -0
  124. package/src/lib/errors/blockchain/user-reject.error.js +14 -0
  125. package/src/lib/errors/blockchain/wrong-from-address.error.d.ts +7 -0
  126. package/src/lib/errors/blockchain/wrong-from-address.error.js +14 -0
  127. package/src/lib/errors/blockchain/wrong-receiver-address.error.d.ts +7 -0
  128. package/src/lib/errors/blockchain/wrong-receiver-address.error.js +14 -0
  129. package/src/lib/errors/common/timeout.error.d.ts +4 -0
  130. package/src/lib/errors/common/timeout.error.js +12 -0
  131. package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.d.ts +7 -0
  132. package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.js +14 -0
  133. package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.d.ts +7 -0
  134. package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.js +14 -0
  135. package/src/lib/errors/cross-chain/low-to-slippage.error.d.ts +6 -0
  136. package/src/lib/errors/cross-chain/low-to-slippage.error.js +10 -0
  137. package/src/lib/errors/cross-chain/max-gas-price-overflow.error.d.ts +8 -0
  138. package/src/lib/errors/cross-chain/max-gas-price-overflow.error.js +15 -0
  139. package/src/lib/errors/cross-chain/too-low-amount.error.d.ts +7 -0
  140. package/src/lib/errors/cross-chain/too-low-amount.error.js +14 -0
  141. package/src/lib/errors/cross-chain/unsupported-receiver-address.error.d.ts +4 -0
  142. package/src/lib/errors/cross-chain/unsupported-receiver-address.error.js +11 -0
  143. package/src/lib/errors/cross-chain/updated-rates-error.d.ts +10 -0
  144. package/src/lib/errors/cross-chain/updated-rates-error.js +17 -0
  145. package/src/lib/errors/models/rubic-api-error.d.ts +21 -0
  146. package/src/lib/errors/models/rubic-api-error.js +2 -0
  147. package/src/lib/errors/on-chain/on-chain-is-unavailable.error.d.ts +7 -0
  148. package/src/lib/errors/on-chain/on-chain-is-unavailable.error.js +14 -0
  149. package/src/lib/errors/proxy/unapproved-contract-error.d.ts +8 -0
  150. package/src/lib/errors/proxy/unapproved-contract-error.js +15 -0
  151. package/src/lib/errors/proxy/unapproved-method-error.d.ts +8 -0
  152. package/src/lib/errors/proxy/unapproved-method-error.js +15 -0
  153. package/src/lib/errors/proxy/unlisted-error.d.ts +9 -0
  154. package/src/lib/errors/proxy/unlisted-error.js +16 -0
  155. package/src/lib/errors/rubic-sdk.error.d.ts +6 -0
  156. package/src/lib/errors/rubic-sdk.error.js +13 -0
  157. package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.d.ts +7 -0
  158. package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.js +14 -0
  159. package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.d.ts +8 -0
  160. package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.js +15 -0
  161. package/src/lib/errors/swap/insufficient-funds-oneinch.error.d.ts +9 -0
  162. package/src/lib/errors/swap/insufficient-funds-oneinch.error.js +15 -0
  163. package/src/lib/errors/swap/insufficient-funds.error.d.ts +11 -0
  164. package/src/lib/errors/swap/insufficient-funds.error.js +18 -0
  165. package/src/lib/errors/swap/insufficient-liquidity.error.d.ts +7 -0
  166. package/src/lib/errors/swap/insufficient-liquidity.error.js +14 -0
  167. package/src/lib/errors/swap/lifi-pair-is-unavailable.error.d.ts +7 -0
  168. package/src/lib/errors/swap/lifi-pair-is-unavailable.error.js +14 -0
  169. package/src/lib/errors/swap/low-slippage-deflationary-token.error.d.ts +7 -0
  170. package/src/lib/errors/swap/low-slippage-deflationary-token.error.js +14 -0
  171. package/src/lib/errors/swap/low-slippage.error.d.ts +8 -0
  172. package/src/lib/errors/swap/low-slippage.error.js +15 -0
  173. package/src/lib/errors/swap/max-amount.error.d.ts +7 -0
  174. package/src/lib/errors/swap/max-amount.error.js +14 -0
  175. package/src/lib/errors/swap/max-decimals.error.d.ts +5 -0
  176. package/src/lib/errors/swap/max-decimals.error.js +12 -0
  177. package/src/lib/errors/swap/min-amount.error.d.ts +7 -0
  178. package/src/lib/errors/swap/min-amount.error.js +14 -0
  179. package/src/lib/errors/swap/no-linked-account-erros.d.ts +4 -0
  180. package/src/lib/errors/swap/no-linked-account-erros.js +11 -0
  181. package/src/lib/errors/swap/not-supported-blockchain.d.ts +8 -0
  182. package/src/lib/errors/swap/not-supported-blockchain.js +15 -0
  183. package/src/lib/errors/swap/not-supported-region.d.ts +7 -0
  184. package/src/lib/errors/swap/not-supported-region.js +14 -0
  185. package/src/lib/errors/swap/not-supported-tokens.error.d.ts +7 -0
  186. package/src/lib/errors/swap/not-supported-tokens.error.js +14 -0
  187. package/src/lib/errors/swap/not-whitelisted-provider.error.d.ts +10 -0
  188. package/src/lib/errors/swap/not-whitelisted-provider.error.js +17 -0
  189. package/src/lib/errors/swap/simulation-failed.error.d.ts +6 -0
  190. package/src/lib/errors/swap/simulation-failed.error.js +12 -0
  191. package/src/lib/errors/swap/swap-error-on-provider-side.d.ts +7 -0
  192. package/src/lib/errors/swap/swap-error-on-provider-side.js +14 -0
  193. package/src/lib/errors/swap/swap-request.error.d.ts +7 -0
  194. package/src/lib/errors/swap/swap-request.error.js +14 -0
  195. package/src/lib/errors/swap/trade-expired.error.d.ts +4 -0
  196. package/src/lib/errors/swap/trade-expired.error.js +11 -0
  197. package/src/lib/errors/swap/unnecessary-approve.error.d.ts +7 -0
  198. package/src/lib/errors/swap/unnecessary-approve.error.js +14 -0
  199. package/src/lib/errors/swap/wallet-not-connected.error.d.ts +8 -0
  200. package/src/lib/errors/swap/wallet-not-connected.error.js +15 -0
  201. package/src/lib/errors/swap/wrong-network.error.d.ts +10 -0
  202. package/src/lib/errors/swap/wrong-network.error.js +16 -0
  203. package/src/lib/utils/web3-types/common-web3-pure.js +2 -4
  204. package/src/lib/utils/web3-types/near-web3-pure.js +1 -1
  205. package/src/lib/utils/web3-types/solana-web3-pure.js +1 -1
  206. package/src/lib/utils/web3-types/sui-web3-pure.js +2 -2
  207. package/src/lib/adapter/adapters/abstract-adapter.d.ts +0 -23
  208. package/src/lib/adapter/adapters/abstract-adapter.js +0 -61
  209. package/src/lib/adapter/adapters/bitcoin-adapter.d.ts +0 -18
  210. package/src/lib/adapter/adapters/models/adapter-factory-params.d.ts +0 -7
  211. package/src/lib/adapter/adapters/sui-adapter.d.ts +0 -17
  212. package/src/lib/adapter/adapters/ton-adapter.d.ts +0 -22
  213. package/src/lib/utils/models/solana-transaction-config.d.ts +0 -6
  214. /package/src/lib/adapter/adapters/{models/adapter-factory-params.js → adapter-bitcoin/models/btc-send-tx-params.js} +0 -0
  215. /package/src/lib/adapter/adapters/{models/gas-price.js → adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.js} +0 -0
  216. /package/src/lib/{utils/models/solana-transaction-config.js → adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.js} +0 -0
  217. /package/src/lib/adapter/adapters/{utils/solana-utils → adapter-solana/services}/solana-tokens-service.d.ts +0 -0
  218. /package/src/lib/adapter/adapters/models/{gas-price.d.ts → evm-web3-public-models/gas-price.d.ts} +0 -0
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EvmAdapterClient = void 0;
4
+ const core_1 = require("@cryptorubic/core");
5
+ const abstract_adapter_client_1 = require("../../common/client/abstract-adapter-client");
6
+ const waitForTransactionReceipt_1 = require("viem/_types/actions/public/waitForTransactionReceipt");
7
+ const options_1 = require("../../utils/options");
8
+ const viem_blockchain_mapping_1 = require("../../../constants/viem-blockchain-mapping");
9
+ const bignumber_js_1 = require("bignumber.js");
10
+ const uni_v3_permit_abi_1 = require("../../constants/uni-v3-permit-abi");
11
+ const erc20_token_abi_1 = require("../../constants/erc20-token-abi");
12
+ const parse_evm_error_1 = require("../utils/parse-evm-error");
13
+ const rubic_sdk_error_1 = require("packages/web3/src/lib/errors/rubic-sdk.error");
14
+ const evm_adapter_1 = require("../evm-adapter");
15
+ const tx_status_1 = require("../../models/web3-public-models/tx-status");
16
+ class EvmAdapterClient extends abstract_adapter_client_1.AbstractAdapterClient {
17
+ constructor(evmAdapter, httpClient, logger, rubicAppParams) {
18
+ super(httpClient, logger, rubicAppParams);
19
+ this.evmAdapter = evmAdapter;
20
+ }
21
+ async getBlockchainName() {
22
+ const userChainId = await this.clientWallet.getChainId();
23
+ return core_1.BlockchainsInfo.getBlockchainNameById(userChainId);
24
+ }
25
+ async getAllowance(fromTokenAddress, walletAddress, spenderAddress) {
26
+ const [decimals, allowance] = await Promise.all([
27
+ this.evmAdapter.read(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'decimals'),
28
+ this.evmAdapter.read(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'allowance', [walletAddress, spenderAddress])
29
+ ]);
30
+ const allowanceWeiBN = new bignumber_js_1.default(allowance);
31
+ const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
32
+ return { allowanceNonWei, allowanceWei: allowanceWeiBN };
33
+ }
34
+ async needApprove(token, contractAddress, walletAddress, amount) {
35
+ // Native coin in METIS can be Token required approve
36
+ if (token.isNative && token.blockchain !== core_1.BLOCKCHAIN_NAME.METIS) {
37
+ return false;
38
+ }
39
+ // Special native address for METIS native coin
40
+ const fromTokenAddress = token.isNative && token.blockchain === core_1.BLOCKCHAIN_NAME.METIS ? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000' : token.address;
41
+ const { allowanceWei } = await this.getAllowance(fromTokenAddress, walletAddress, contractAddress);
42
+ return allowanceWei.lt(token.weiAmount);
43
+ }
44
+ async approve(fromAddress, tokenAddress, spenderAddress, amount) {
45
+ const config = this.encodeApprove(tokenAddress, spenderAddress, amount);
46
+ return this.evmAdapter.write(fromAddress, config.to, config.value, config.data);
47
+ }
48
+ /**
49
+ * Build encoded approve transaction config.
50
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
51
+ * @param spenderAddress Wallet or contract address to approve.
52
+ * @param amount Amount of tokens in approval window in spending cap field
53
+ * @returns Encoded approve transaction config.
54
+ */
55
+ encodeApprove(tokenAddress, spenderAddress, amount) {
56
+ const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
57
+ const tx = evm_adapter_1.EvmAdapter.encodeMethodCall(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', [spenderAddress, amountWei]);
58
+ return {
59
+ data: tx.data,
60
+ to: tx.to,
61
+ value: tx.value
62
+ };
63
+ }
64
+ async needPermit2Approve(token, permit2Address, walletAddress, spenderAddress) {
65
+ const res = await this.evmAdapter.read(permit2Address, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'allowance', [
66
+ walletAddress,
67
+ token.address,
68
+ spenderAddress
69
+ ]);
70
+ const [amount, expiration, _nonce] = res;
71
+ return token.weiAmount.gt(amount) || new bignumber_js_1.default(Date.now()).gt(Number(expiration) * 1000);
72
+ }
73
+ /**
74
+ * @param tokenAddress Token address you want to approve for spending
75
+ * @param permit2Address Addres of permit2 contract
76
+ * @param spenderAddress Contract address spending your tokens
77
+ * @param amount Approved amount
78
+ * @param deadline Ms number added to current time (Date.now()) until approve expiration
79
+ */
80
+ async approveOnPermit2(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
81
+ const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
82
+ return this.executeContractMethod(tokenAddress, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'approve', [spenderAddress, BigInt(rawValue.toString())], options);
83
+ }
84
+ async getTransactionStatus(hash) {
85
+ const txReceipt = await this.getTransactionReceipt(hash);
86
+ if (txReceipt === null) {
87
+ return tx_status_1.TX_STATUS.PENDING;
88
+ }
89
+ if (txReceipt.status) {
90
+ return tx_status_1.TX_STATUS.SUCCESS;
91
+ }
92
+ return tx_status_1.TX_STATUS.FAIL;
93
+ }
94
+ /**
95
+ * Gets mined transaction receipt.
96
+ * @param hash Transaction hash
97
+ */
98
+ async getTransactionReceipt(hash) {
99
+ return this.evmAdapter.public.getTransactionReceipt({ hash: hash });
100
+ }
101
+ /**
102
+ * Sends Eth in transaction and resolve the promise when the transaction is included in the block.
103
+ * @param toAddress Eth receiver address.
104
+ * @param [options] Additional options.
105
+ * @returns Transaction receipt.
106
+ */
107
+ async sendTransaction(params) {
108
+ try {
109
+ const to = params.txOptions.to;
110
+ const value = BigInt(params.txOptions.value?.toString() || '0');
111
+ const { account, chain } = await this.getChainAndAccount();
112
+ const viemParams = {
113
+ value,
114
+ account,
115
+ to,
116
+ ...(0, options_1.getViemGasOptions)(params.txOptions),
117
+ ...(params.txOptions.data && { data: params.txOptions.data }),
118
+ ...(params.txOptions.gas && { gas: BigInt(params.txOptions.gas) }),
119
+ chain
120
+ };
121
+ // @ts-ignore
122
+ const hash = await this.web3.sendTransaction(viemParams);
123
+ params.txOptions?.onTransactionHash?.(hash);
124
+ return (0, waitForTransactionReceipt_1.waitForTransactionReceipt)(this.clientWallet, { hash });
125
+ }
126
+ catch (err) {
127
+ console.error('Send transaction error', err);
128
+ throw err;
129
+ }
130
+ }
131
+ /**
132
+ * Tries to send Eth in transaction and resolve the promise when the transaction is included in the block or rejects the error.
133
+ * @param toAddress Eth receiver address.
134
+ * @param [options] Additional options.
135
+ * @returns Transaction receipt.
136
+ */
137
+ async trySendTransaction(toAddress, options) {
138
+ try {
139
+ const gaslessParams = {
140
+ account: this.walletAddress,
141
+ to: toAddress,
142
+ value: BigInt(options.value?.toString() || '0'),
143
+ ...(options.data && { data: options.data })
144
+ };
145
+ const gas = await this.evmAdapter.public.estimateGas(gaslessParams);
146
+ const gasfulParams = {
147
+ ...gaslessParams,
148
+ ...(0, options_1.getGasOptions)(options),
149
+ gas: gas.toString()
150
+ };
151
+ const gasfulViemParams = {
152
+ ...gaslessParams,
153
+ ...(0, options_1.getViemGasOptions)(options),
154
+ gas
155
+ };
156
+ try {
157
+ await this.evmAdapter.public.estimateGas(gasfulViemParams);
158
+ }
159
+ catch {
160
+ throw new rubic_sdk_error_1.RubicSdkError('Low native value');
161
+ }
162
+ const sendParams = {
163
+ ...gasfulParams,
164
+ ...(options.onTransactionHash && {
165
+ onTransactionHash: options.onTransactionHash,
166
+ gasPriceOptions: options?.gasPriceOptions
167
+ })
168
+ };
169
+ const receipt = await this.sendTransaction({ txOptions: sendParams });
170
+ return receipt;
171
+ }
172
+ catch (err) {
173
+ console.debug('Call tokens transfer error', err);
174
+ const shouldIgnore = await this.shouldIgnoreError(err);
175
+ if (shouldIgnore) {
176
+ return this.sendTransaction({ txOptions: options });
177
+ }
178
+ throw (0, parse_evm_error_1.parseEvmError)(err);
179
+ }
180
+ }
181
+ /**
182
+ * Executes method of smart-contract and resolve the promise when the transaction is included in the block.
183
+ * @param contractAddress Address of smart-contract which method is to be executed.
184
+ * @param contractAbi Abi of smart-contract which method is to be executed.
185
+ * @param methodName Method name to execute.
186
+ * @param methodArguments Method arguments.
187
+ * @param [options] Additional options.
188
+ * @returns Smart-contract method returned value.
189
+ */
190
+ async executeContractMethod(contractAddress, contractAbi, methodName, methodArguments, options = {}) {
191
+ try {
192
+ const { account, chain } = await this.getChainAndAccount();
193
+ const sendParams = {
194
+ address: contractAddress,
195
+ abi: contractAbi,
196
+ functionName: methodName,
197
+ args: methodArguments,
198
+ ...(options.value && {
199
+ value: BigInt(options.value?.toString())
200
+ }),
201
+ ...(options.gas && {
202
+ gas: BigInt(options.gas)
203
+ }),
204
+ ...(0, options_1.getViemGasOptions)(options),
205
+ account: account,
206
+ chain: chain
207
+ };
208
+ const hash = await this.clientWallet.writeContract(sendParams);
209
+ options?.onTransactionHash?.(hash);
210
+ return (0, waitForTransactionReceipt_1.waitForTransactionReceipt)(this.clientWallet, { hash });
211
+ }
212
+ catch (err) {
213
+ console.error(`Method execution error. ${err}`);
214
+ throw (0, parse_evm_error_1.parseEvmError)(err);
215
+ }
216
+ }
217
+ /**
218
+ * Tries to execute method of smart-contract and resolve the promise when the transaction is included in the block or rejects the error.
219
+ * @param contractAddress Address of smart-contract which method is to be executed.
220
+ * @param contractAbi Abi of smart-contract which method is to be executed.
221
+ * @param methodName Method name to execute.
222
+ * @param methodArguments Method arguments.
223
+ * @param [options] Additional options.
224
+ * @param allowError Check error and decides to execute contact if error is allowed.
225
+ */
226
+ async tryExecuteContractMethod(contractAddress, contractAbi, methodName, methodArguments, options = {}, allowError) {
227
+ try {
228
+ const gaslessParams = {
229
+ address: contractAddress,
230
+ abi: contractAbi,
231
+ functionName: methodName,
232
+ args: methodArguments,
233
+ ...(options.value && {
234
+ value: BigInt(options.value?.toString())
235
+ }),
236
+ account: this.walletAddress
237
+ };
238
+ const gas = await this.evmAdapter.public.estimateContractGas(gaslessParams);
239
+ const gasfulParams = {
240
+ ...gaslessParams,
241
+ ...(0, options_1.getGasOptions)(options),
242
+ gas: gas.toString()
243
+ };
244
+ const gasfulViemParams = {
245
+ ...gaslessParams,
246
+ ...(0, options_1.getViemGasOptions)(options),
247
+ gas
248
+ };
249
+ try {
250
+ await this.evmAdapter.public.estimateContractGas(gasfulViemParams);
251
+ }
252
+ catch {
253
+ throw new rubic_sdk_error_1.RubicSdkError('Low native value');
254
+ }
255
+ const recepit = await this.executeContractMethod(contractAddress, contractAbi, methodName, methodArguments, {
256
+ ...gasfulParams,
257
+ ...(options.onTransactionHash && {
258
+ onTransactionHash: options.onTransactionHash,
259
+ gasPriceOptions: options?.gasPriceOptions
260
+ })
261
+ });
262
+ return recepit;
263
+ }
264
+ catch (err) {
265
+ if ((allowError && allowError(err)) || (await this.shouldIgnoreError(err))) {
266
+ return this.executeContractMethod(contractAddress, contractAbi, methodName, methodArguments, options);
267
+ }
268
+ console.error('Method execution error: ', err);
269
+ throw (0, parse_evm_error_1.parseEvmError)(err);
270
+ }
271
+ }
272
+ async shouldIgnoreError(error) {
273
+ if (error.message === 'Low native value' && (await this.getBlockchainName()) === core_1.BLOCKCHAIN_NAME.MANTLE) {
274
+ return true;
275
+ }
276
+ const ignoreCallErrors = [
277
+ 'STF',
278
+ 'execution reverted: ERC20: transfer amount exceeds allowance',
279
+ 'Anyswaperc20: request exceed allowance',
280
+ 'gas required exceeds allowance',
281
+ 'execution reverted: SafeERC20: low-level call failed'
282
+ ];
283
+ const test = ignoreCallErrors.some((err) => error?.message?.toLowerCase().includes(err.toLowerCase()));
284
+ console.debug(test);
285
+ return test;
286
+ }
287
+ async signMessage(message) {
288
+ return this.clientWallet.signMessage({
289
+ account: this.walletAddress,
290
+ message: message
291
+ });
292
+ }
293
+ async getChainAndAccount() {
294
+ const account = this.walletAddress;
295
+ const chainId = await this.clientWallet.getChainId();
296
+ const chainName = core_1.BlockchainsInfo.getBlockchainNameById(chainId);
297
+ if (!chainName) {
298
+ throw Error(`Unsupported chain ID: ${chainId}. Please provide a valid EVM blockchain ID`);
299
+ }
300
+ const chain = viem_blockchain_mapping_1.viemBlockchainMapping[chainName];
301
+ if (!chain) {
302
+ throw Error(`Unsupported chain ID: ${chainId}. Please provide a valid EVM blockchain ID`);
303
+ }
304
+ return { account, chain };
305
+ }
306
+ }
307
+ exports.EvmAdapterClient = EvmAdapterClient;
@@ -0,0 +1,4 @@
1
+ export declare const proxyHashErrors: {
2
+ text: string;
3
+ hash: string;
4
+ }[];