@cryptorubic/web3 0.0.34 → 0.0.37-alpha-1212.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 (293) hide show
  1. package/package.json +42 -15
  2. package/src/index.d.ts +130 -19
  3. package/src/index.js +130 -17
  4. package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +40 -0
  5. package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.js +177 -0
  6. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params.d.ts +5 -0
  7. package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params.js +2 -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/adapter-evm/evm-adapter.js +498 -0
  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 +263 -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/adapter-solana/services/solana-tokens-service.d.ts +22 -0
  29. package/src/lib/adapter/adapters/adapter-solana/services/solana-tokens-service.js +138 -0
  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/adapter-solana/solana-adapter.d.ts +49 -0
  33. package/src/lib/adapter/adapters/adapter-solana/solana-adapter.js +231 -0
  34. package/src/lib/adapter/adapters/adapter-stellar/constants/fake-stellar-wallet.d.ts +1 -0
  35. package/src/lib/adapter/adapters/adapter-stellar/constants/fake-stellar-wallet.js +4 -0
  36. package/src/lib/adapter/adapters/adapter-stellar/models/stellar-client.d.ts +2 -0
  37. package/src/lib/adapter/adapters/adapter-stellar/models/stellar-client.js +2 -0
  38. package/src/lib/adapter/adapters/adapter-stellar/models/stellar-rpc-provider.d.ts +6 -0
  39. package/src/lib/adapter/adapters/adapter-stellar/models/stellar-rpc-provider.js +2 -0
  40. package/src/lib/adapter/adapters/adapter-stellar/models/stellar-send-tx-params.d.ts +8 -0
  41. package/src/lib/adapter/adapters/adapter-stellar/models/stellar-send-tx-params.js +2 -0
  42. package/src/lib/adapter/adapters/adapter-stellar/models/stellar-wallet.d.ts +87 -0
  43. package/src/lib/adapter/adapters/adapter-stellar/models/stellar-wallet.js +2 -0
  44. package/src/lib/adapter/adapters/adapter-stellar/signer/stellar-adapter-signer.d.ts +18 -0
  45. package/src/lib/adapter/adapters/adapter-stellar/signer/stellar-adapter-signer.js +75 -0
  46. package/src/lib/adapter/adapters/adapter-stellar/stellar-adapter.d.ts +54 -0
  47. package/src/lib/adapter/adapters/adapter-stellar/stellar-adapter.js +253 -0
  48. package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.d.ts +8 -0
  49. package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.js +2 -0
  50. package/src/lib/adapter/adapters/adapter-sui/signer/sui-adapter-signer.d.ts +17 -0
  51. package/src/lib/adapter/adapters/adapter-sui/signer/sui-adapter-signer.js +55 -0
  52. package/src/lib/adapter/adapters/adapter-sui/sui-adapter.d.ts +32 -0
  53. package/src/lib/adapter/adapters/adapter-sui/sui-adapter.js +111 -0
  54. package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.d.ts +26 -0
  55. package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.js +2 -0
  56. package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.d.ts +8 -7
  57. package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.js +39 -56
  58. package/src/lib/adapter/adapters/adapter-ton/signer/ton-adapter-signer.d.ts +43 -0
  59. package/src/lib/adapter/adapters/adapter-ton/signer/ton-adapter-signer.js +166 -0
  60. package/src/lib/adapter/adapters/adapter-ton/ton-adapter.d.ts +32 -0
  61. package/src/lib/adapter/adapters/adapter-ton/ton-adapter.js +104 -0
  62. package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.d.ts +13 -0
  63. package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.js +2 -0
  64. package/src/lib/adapter/adapters/adapter-tron/models/tron-transfer-tx-params.d.ts +7 -0
  65. package/src/lib/adapter/adapters/adapter-tron/models/tron-transfer-tx-params.js +2 -0
  66. package/src/lib/adapter/adapters/adapter-tron/models/tron-web-provider.d.ts +4 -0
  67. package/src/lib/adapter/adapters/adapter-tron/models/tron-web-provider.js +2 -0
  68. package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.d.ts +19 -0
  69. package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.js +81 -0
  70. package/src/lib/adapter/adapters/adapter-tron/tron-adapter.d.ts +57 -0
  71. package/src/lib/adapter/adapters/{tron-adapter.js → adapter-tron/tron-adapter.js} +145 -70
  72. package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.d.ts +2 -0
  73. package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.js +20 -0
  74. package/src/lib/adapter/adapters/common/abstract-adapter.d.ts +84 -0
  75. package/src/lib/adapter/adapters/common/abstract-adapter.js +82 -0
  76. package/src/lib/adapter/adapters/common/signer/abstract-adapter-signer.d.ts +22 -0
  77. package/src/lib/adapter/adapters/common/signer/abstract-adapter-signer.js +42 -0
  78. package/src/lib/adapter/adapters/constants/possible-errors.d.ts +1 -0
  79. package/src/lib/adapter/adapters/constants/possible-errors.js +14 -0
  80. package/src/lib/adapter/adapters/constants/tron-multicall-abi.d.ts +1 -1
  81. package/src/lib/adapter/adapters/constants/uni-v3-permit-abi.d.ts +2 -0
  82. package/src/lib/adapter/adapters/constants/uni-v3-permit-abi.js +72 -0
  83. package/src/lib/adapter/adapters/models/approve-adapter.d.ts +20 -6
  84. package/src/lib/adapter/adapters/models/approve-adapter.js +4 -0
  85. package/src/lib/adapter/adapters/models/basic-transaction-options.d.ts +7 -0
  86. package/src/lib/adapter/adapters/models/basic-transaction-options.js +2 -0
  87. package/src/lib/adapter/adapters/models/bitcoin-user-address-info.d.ts +53 -0
  88. package/src/lib/adapter/adapters/models/bitcoin-user-address-info.js +2 -0
  89. package/src/lib/adapter/adapters/models/btc-wallet-provider.d.ts +10 -0
  90. package/src/lib/adapter/adapters/models/btc-wallet-provider.js +2 -0
  91. package/src/lib/adapter/adapters/models/evm-adapter-options.d.ts +1 -1
  92. package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.d.ts +5 -0
  93. package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.js +2 -0
  94. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.d.ts +4 -0
  95. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.js +2 -0
  96. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.d.ts +4 -0
  97. package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.js +2 -0
  98. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.d.ts +18 -0
  99. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.js +2 -0
  100. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price.d.ts +22 -0
  101. package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price.js +2 -0
  102. package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.d.ts +10 -0
  103. package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.js +2 -0
  104. package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.d.ts +5 -0
  105. package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.js +2 -0
  106. package/src/lib/adapter/adapters/models/old-features-models/contract-params.d.ts +23 -0
  107. package/src/lib/adapter/adapters/models/old-features-models/contract-params.js +2 -0
  108. package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.d.ts +32 -0
  109. package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.js +2 -0
  110. package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.d.ts +6 -0
  111. package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.js +2 -0
  112. package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.d.ts +5 -0
  113. package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.js +2 -0
  114. package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.d.ts +65 -0
  115. package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.js +2 -0
  116. package/src/lib/adapter/adapters/models/permit2-contract-types.d.ts +1 -0
  117. package/src/lib/adapter/adapters/models/permit2-contract-types.js +2 -0
  118. package/src/lib/adapter/adapters/models/solana-web3-types.d.ts +60 -0
  119. package/src/lib/adapter/adapters/models/solana-web3-types.js +2 -0
  120. package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.d.ts +8 -0
  121. package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.js +2 -0
  122. package/src/lib/adapter/adapters/models/token-models.d.ts +1 -0
  123. package/src/lib/adapter/adapters/models/token-models.js +2 -0
  124. package/src/lib/adapter/adapters/models/ton-adapter-config.d.ts +2 -2
  125. package/src/lib/adapter/adapters/models/ton-api-config.d.ts +1 -1
  126. package/src/lib/adapter/adapters/models/tonapi-models.d.ts +2 -2
  127. package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.d.ts +5 -0
  128. package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.js +2 -0
  129. package/src/lib/adapter/adapters/models/web3-public-models/method-data.d.ts +4 -0
  130. package/src/lib/adapter/adapters/models/web3-public-models/method-data.js +2 -0
  131. package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.d.ts +1 -0
  132. package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.js +2 -0
  133. package/src/lib/adapter/adapters/models/web3-public-models/tx-status.d.ts +13 -0
  134. package/src/lib/adapter/adapters/models/web3-public-models/tx-status.js +15 -0
  135. package/src/lib/adapter/adapters/utils/errors.d.ts +2 -0
  136. package/src/lib/adapter/adapters/utils/errors.js +10 -0
  137. package/src/lib/adapter/adapters/utils/options.d.ts +10 -0
  138. package/src/lib/adapter/adapters/utils/options.js +59 -0
  139. package/src/lib/adapter/adapters/utils/timeout.d.ts +1 -0
  140. package/src/lib/adapter/adapters/utils/timeout.js +15 -0
  141. package/src/lib/adapter/adapters/utils/waitFor.d.ts +1 -0
  142. package/src/lib/adapter/adapters/utils/waitFor.js +6 -0
  143. package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +20 -10
  144. package/src/lib/adapter/blockchain-adapter-factory.service.js +58 -53
  145. package/src/lib/adapter/constants/chain-configs/chain-configs.d.ts +1 -1
  146. package/src/lib/adapter/constants/chain-configs/chain-configs.js +603 -138
  147. package/src/lib/adapter/constants/models/env-type.d.ts +1 -0
  148. package/src/lib/adapter/constants/models/env-type.js +2 -0
  149. package/src/lib/adapter/constants/models/solana-web3.d.ts +1 -1
  150. package/src/lib/adapter/constants/models/wallet-provider.d.ts +9 -3
  151. package/src/lib/adapter/constants/rubic-api-link-mapping.d.ts +2 -0
  152. package/src/lib/adapter/constants/rubic-api-link-mapping.js +16 -0
  153. package/src/lib/adapter/constants/viem-blockchain-mapping.d.ts +1 -1
  154. package/src/lib/adapter/constants/viem-blockchain-mapping.js +16 -7
  155. package/src/lib/adapter/models/create-factory-params.d.ts +24 -0
  156. package/src/lib/adapter/models/create-factory-params.js +2 -0
  157. package/src/lib/errors/blockchain/deflation-token.error.d.ts +11 -0
  158. package/src/lib/errors/blockchain/deflation-token.error.js +16 -0
  159. package/src/lib/errors/blockchain/healthcheck.error.d.ts +8 -0
  160. package/src/lib/errors/blockchain/healthcheck.error.js +15 -0
  161. package/src/lib/errors/blockchain/inactive-account.error.d.ts +4 -0
  162. package/src/lib/errors/blockchain/inactive-account.error.js +11 -0
  163. package/src/lib/errors/blockchain/invalid-address.error.d.ts +8 -0
  164. package/src/lib/errors/blockchain/invalid-address.error.js +15 -0
  165. package/src/lib/errors/blockchain/low-gas.error.d.ts +7 -0
  166. package/src/lib/errors/blockchain/low-gas.error.js +14 -0
  167. package/src/lib/errors/blockchain/transaction-reverted.error.d.ts +7 -0
  168. package/src/lib/errors/blockchain/transaction-reverted.error.js +14 -0
  169. package/src/lib/errors/blockchain/tron-insufficient-native-balance.d.ts +7 -0
  170. package/src/lib/errors/blockchain/tron-insufficient-native-balance.js +14 -0
  171. package/src/lib/errors/blockchain/tron-transaction-expired.d.ts +7 -0
  172. package/src/lib/errors/blockchain/tron-transaction-expired.js +14 -0
  173. package/src/lib/errors/blockchain/user-reject.error.d.ts +7 -0
  174. package/src/lib/errors/blockchain/user-reject.error.js +14 -0
  175. package/src/lib/errors/blockchain/wrong-from-address.error.d.ts +7 -0
  176. package/src/lib/errors/blockchain/wrong-from-address.error.js +14 -0
  177. package/src/lib/errors/blockchain/wrong-receiver-address.error.d.ts +7 -0
  178. package/src/lib/errors/blockchain/wrong-receiver-address.error.js +14 -0
  179. package/src/lib/errors/common/timeout.error.d.ts +4 -0
  180. package/src/lib/errors/common/timeout.error.js +12 -0
  181. package/src/lib/errors/common/tx-reverted-in-chain.error.d.ts +4 -0
  182. package/src/lib/errors/common/tx-reverted-in-chain.error.js +11 -0
  183. package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.d.ts +7 -0
  184. package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.js +14 -0
  185. package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.d.ts +7 -0
  186. package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.js +14 -0
  187. package/src/lib/errors/cross-chain/low-to-slippage.error.d.ts +6 -0
  188. package/src/lib/errors/cross-chain/low-to-slippage.error.js +10 -0
  189. package/src/lib/errors/cross-chain/max-gas-price-overflow.error.d.ts +8 -0
  190. package/src/lib/errors/cross-chain/max-gas-price-overflow.error.js +15 -0
  191. package/src/lib/errors/cross-chain/too-low-amount.error.d.ts +7 -0
  192. package/src/lib/errors/cross-chain/too-low-amount.error.js +14 -0
  193. package/src/lib/errors/cross-chain/unsupported-receiver-address.error.d.ts +4 -0
  194. package/src/lib/errors/cross-chain/unsupported-receiver-address.error.js +11 -0
  195. package/src/lib/errors/cross-chain/updated-rates-error.d.ts +10 -0
  196. package/src/lib/errors/cross-chain/updated-rates-error.js +17 -0
  197. package/src/lib/errors/models/rubic-api-error.d.ts +21 -0
  198. package/src/lib/errors/models/rubic-api-error.js +2 -0
  199. package/src/lib/errors/on-chain/on-chain-is-unavailable.error.d.ts +7 -0
  200. package/src/lib/errors/on-chain/on-chain-is-unavailable.error.js +14 -0
  201. package/src/lib/errors/proxy/unapproved-contract-error.d.ts +8 -0
  202. package/src/lib/errors/proxy/unapproved-contract-error.js +15 -0
  203. package/src/lib/errors/proxy/unapproved-method-error.d.ts +8 -0
  204. package/src/lib/errors/proxy/unapproved-method-error.js +15 -0
  205. package/src/lib/errors/proxy/unlisted-error.d.ts +9 -0
  206. package/src/lib/errors/proxy/unlisted-error.js +16 -0
  207. package/src/lib/errors/rubic-sdk.error.d.ts +6 -0
  208. package/src/lib/errors/rubic-sdk.error.js +13 -0
  209. package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.d.ts +7 -0
  210. package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.js +14 -0
  211. package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.d.ts +8 -0
  212. package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.js +15 -0
  213. package/src/lib/errors/swap/insufficient-funds-oneinch.error.d.ts +9 -0
  214. package/src/lib/errors/swap/insufficient-funds-oneinch.error.js +15 -0
  215. package/src/lib/errors/swap/insufficient-funds.error.d.ts +11 -0
  216. package/src/lib/errors/swap/insufficient-funds.error.js +18 -0
  217. package/src/lib/errors/swap/insufficient-liquidity.error.d.ts +7 -0
  218. package/src/lib/errors/swap/insufficient-liquidity.error.js +14 -0
  219. package/src/lib/errors/swap/lifi-pair-is-unavailable.error.d.ts +7 -0
  220. package/src/lib/errors/swap/lifi-pair-is-unavailable.error.js +14 -0
  221. package/src/lib/errors/swap/low-slippage-deflationary-token.error.d.ts +7 -0
  222. package/src/lib/errors/swap/low-slippage-deflationary-token.error.js +14 -0
  223. package/src/lib/errors/swap/low-slippage.error.d.ts +8 -0
  224. package/src/lib/errors/swap/low-slippage.error.js +15 -0
  225. package/src/lib/errors/swap/max-amount.error.d.ts +7 -0
  226. package/src/lib/errors/swap/max-amount.error.js +14 -0
  227. package/src/lib/errors/swap/max-decimals.error.d.ts +5 -0
  228. package/src/lib/errors/swap/max-decimals.error.js +12 -0
  229. package/src/lib/errors/swap/min-amount.error.d.ts +7 -0
  230. package/src/lib/errors/swap/min-amount.error.js +14 -0
  231. package/src/lib/errors/swap/no-linked-account-erros.d.ts +4 -0
  232. package/src/lib/errors/swap/no-linked-account-erros.js +11 -0
  233. package/src/lib/errors/swap/not-supported-blockchain.d.ts +8 -0
  234. package/src/lib/errors/swap/not-supported-blockchain.js +15 -0
  235. package/src/lib/errors/swap/not-supported-region.d.ts +7 -0
  236. package/src/lib/errors/swap/not-supported-region.js +14 -0
  237. package/src/lib/errors/swap/not-supported-tokens.error.d.ts +7 -0
  238. package/src/lib/errors/swap/not-supported-tokens.error.js +14 -0
  239. package/src/lib/errors/swap/not-whitelisted-provider.error.d.ts +10 -0
  240. package/src/lib/errors/swap/not-whitelisted-provider.error.js +17 -0
  241. package/src/lib/errors/swap/simulation-failed.error.d.ts +6 -0
  242. package/src/lib/errors/swap/simulation-failed.error.js +12 -0
  243. package/src/lib/errors/swap/swap-error-on-provider-side.d.ts +7 -0
  244. package/src/lib/errors/swap/swap-error-on-provider-side.js +14 -0
  245. package/src/lib/errors/swap/swap-request.error.d.ts +7 -0
  246. package/src/lib/errors/swap/swap-request.error.js +14 -0
  247. package/src/lib/errors/swap/trade-expired.error.d.ts +4 -0
  248. package/src/lib/errors/swap/trade-expired.error.js +11 -0
  249. package/src/lib/errors/swap/unnecessary-approve.error.d.ts +7 -0
  250. package/src/lib/errors/swap/unnecessary-approve.error.js +14 -0
  251. package/src/lib/errors/swap/wallet-not-connected.error.d.ts +8 -0
  252. package/src/lib/errors/swap/wallet-not-connected.error.js +15 -0
  253. package/src/lib/errors/swap/wrong-network.error.d.ts +10 -0
  254. package/src/lib/errors/swap/wrong-network.error.js +16 -0
  255. package/src/lib/utils/constants/changenow-api-blockchain.d.ts +1 -2
  256. package/src/lib/utils/constants/changenow-api-blockchain.js +1 -1
  257. package/src/lib/utils/constants/web3-pure-store.d.ts +2 -2
  258. package/src/lib/utils/constants/web3-pure-store.js +20 -18
  259. package/src/lib/utils/models/contract-multicall-response.d.ts +1 -1
  260. package/src/lib/utils/models/evm-transaction-config.d.ts +2 -0
  261. package/src/lib/utils/models/primitive-types.d.ts +1 -1
  262. package/src/lib/utils/models/stellar-transaction-config.d.ts +3 -0
  263. package/src/lib/utils/models/stellar-transaction-config.js +2 -0
  264. package/src/lib/utils/models/tron-transaction-config.d.ts +1 -1
  265. package/src/lib/utils/web3-pure.d.ts +2 -2
  266. package/src/lib/utils/web3-pure.js +6 -7
  267. package/src/lib/utils/web3-types/bitcoin-web3-pure.d.ts +1 -1
  268. package/src/lib/utils/web3-types/common-web3-pure.js +0 -2
  269. package/src/lib/utils/web3-types/evm-web3-pure.d.ts +1 -1
  270. package/src/lib/utils/web3-types/icp-web3-pure.d.ts +1 -1
  271. package/src/lib/utils/web3-types/near-web3-pure.d.ts +6 -0
  272. package/src/lib/utils/web3-types/near-web3-pure.js +24 -0
  273. package/src/lib/utils/web3-types/solana-web3-pure.d.ts +2 -1
  274. package/src/lib/utils/web3-types/solana-web3-pure.js +11 -1
  275. package/src/lib/utils/web3-types/stellar-web3-pure.d.ts +5 -0
  276. package/src/lib/utils/web3-types/stellar-web3-pure.js +30 -0
  277. package/src/lib/utils/web3-types/sui-web3-pure.d.ts +8 -0
  278. package/src/lib/utils/web3-types/sui-web3-pure.js +27 -0
  279. package/src/lib/utils/web3-types/ton-web3-pure.d.ts +2 -1
  280. package/src/lib/utils/web3-types/ton-web3-pure.js +6 -0
  281. package/src/lib/utils/web3-types/tron-web3-pure.d.ts +8 -6
  282. package/src/lib/utils/web3-types/tron-web3-pure.js +18 -4
  283. package/src/lib/utils/web3-types/zcash-web3-pure.d.ts +5 -0
  284. package/src/lib/utils/web3-types/zcash-web3-pure.js +17 -0
  285. package/src/lib/adapter/adapters/abstract-adapter.d.ts +0 -19
  286. package/src/lib/adapter/adapters/abstract-adapter.js +0 -49
  287. package/src/lib/adapter/adapters/evm-adapter.d.ts +0 -34
  288. package/src/lib/adapter/adapters/evm-adapter.js +0 -247
  289. package/src/lib/adapter/adapters/solana-adapter.d.ts +0 -15
  290. package/src/lib/adapter/adapters/solana-adapter.js +0 -59
  291. package/src/lib/adapter/adapters/ton-adapter.d.ts +0 -22
  292. package/src/lib/adapter/adapters/ton-adapter.js +0 -100
  293. package/src/lib/adapter/adapters/tron-adapter.d.ts +0 -36
@@ -0,0 +1,120 @@
1
+ import { Abi, MulticallResponse, MulticallParameters, PublicActions, PublicClient, WalletClient, WalletActions, BlockNumber, BlockTag, GetBlockReturnType, TransactionReceipt } from 'viem';
2
+ import { AbstractAdapter } from '../common/abstract-adapter';
3
+ import { EvmBlockchainName, ICustomLogger, Token, TokenAmount, PriceTokenAmount, HttpClient } from '@cryptorubic/core';
4
+ import BigNumber from 'bignumber.js';
5
+ import { EvmAdapterOptions } from '../models/evm-adapter-options';
6
+ import { EvmTransactionConfig } from '../../../utils/models/evm-transaction-config';
7
+ import { EvmAdapterSigner } from './signer/evm-adapter-signer';
8
+ import { ClientAdaptersFactoryParams } from '../../models/create-factory-params';
9
+ import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
10
+ import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
11
+ import { MethodData } from '../models/web3-public-models/method-data';
12
+ import { GasPrice } from '../models/evm-web3-public-models/gas-price';
13
+ import { EvmTransactionOptions } from './models/evm-send-tx-params';
14
+ import { ApprovableAdapter } from '../models/approve-adapter';
15
+ import { AllowanceInfo } from '../models/common-types';
16
+ import { TxStatus } from '../models/web3-public-models/tx-status';
17
+ export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicClient, WalletClient & WalletActions, EvmBlockchainName> implements ApprovableAdapter<EvmTransactionConfig> {
18
+ private readonly adapterOptions;
19
+ private readonly clientParams?;
20
+ readonly signer: EvmAdapterSigner;
21
+ needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
22
+ handlePreswap(contractAddress: string, walletAddress: string, tokenAmount: TokenAmount): Promise<void>;
23
+ constructor(httpClient: HttpClient, adapterOptions: EvmAdapterOptions, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams | undefined);
24
+ initWeb3Client(): void;
25
+ callContractMethod<T extends Web3PrimitiveType = string>(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments?: unknown[], options?: {
26
+ from?: string;
27
+ value?: string;
28
+ gasPrice?: string;
29
+ gas?: string;
30
+ }): Promise<T>;
31
+ getTransactionStatus(hash: string): Promise<TxStatus>;
32
+ /**
33
+ * Gets mined transaction receipt.
34
+ * @param hash Transaction hash
35
+ */
36
+ private getTransactionReceipt;
37
+ getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
38
+ multicallContractsMethods<Output extends Web3PrimitiveType>(contractAbi: Abi, contractsData: {
39
+ contractAddress: string;
40
+ methodsData: MethodData[];
41
+ }[]): Promise<ContractMulticallResponse<Output>[][]>;
42
+ getBlockNumber(): Promise<number | {
43
+ blockNumber: number;
44
+ workchain: number;
45
+ }>;
46
+ private createPublicClient;
47
+ multicallByContract<T>(contracts: MulticallParameters, allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
48
+ multicallByAddress<T>(address: string, abi: Abi, method: string, methodArgs?: unknown[][], allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
49
+ static encodeMethodCall(contractAddress: string, contractAbi: Abi, method: string, parameters?: unknown[], value?: string): EvmTransactionConfig;
50
+ read<T>(address: string, abi: Abi, method: string, methodArgs?: unknown[]): Promise<T>;
51
+ /**
52
+ * Generate random HEX strings from a given byte size.
53
+ * @param size byte size.
54
+ */
55
+ static randomHex(size: number): string;
56
+ /**
57
+ * Converts address to checksum format.
58
+ * @param address Address to convert.
59
+ */
60
+ static toChecksumAddress(address: string): string;
61
+ simulateTransaction(config: EvmTransactionConfig, from: string, timeout?: number): Promise<string>;
62
+ callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<EvmBlockchainName>[]>;
63
+ getGasPrice(): Promise<string>;
64
+ checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string, amount?: BigNumber): Promise<boolean>;
65
+ /**
66
+ * @param walletAddress
67
+ * @param tokenAddress
68
+ * @returns wei amount
69
+ */
70
+ getBalance(walletAddress: string, tokenAddress?: string): Promise<BigNumber>;
71
+ getTransactionCount(walletAddress: string): Promise<number>;
72
+ getAllowance(fromTokenAddress: string, walletAddress: string, spenderAddress: string): Promise<AllowanceInfo>;
73
+ needApprove(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
74
+ /**
75
+ * Executes approve method in ERC-20 token contract.
76
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
77
+ * @param spenderAddress Wallet or contract address to approve.
78
+ * @param amount Token amount to approve in wei.
79
+ * @param [options] Additional options.
80
+ * @returns Approval transaction hash.
81
+ */
82
+ approveTokens(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: EvmTransactionOptions): Promise<string>;
83
+ /**
84
+ * Build encoded approve transaction config.
85
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
86
+ * @param spenderAddress Wallet or contract address to approve.
87
+ * @param amount wei amount of tokens in approval window in spending cap field
88
+ * @returns Encoded approve transaction config.
89
+ */
90
+ encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): EvmTransactionConfig;
91
+ needPermit2Approve(token: TokenAmount, permit2Address: string, walletAddress: string, spenderAddress: string): Promise<boolean>;
92
+ /**
93
+ * @param tokenAddress Token address you want to approve for spending
94
+ * @param permit2Address Addres of permit2 contract
95
+ * @param spenderAddress Contract address spending your tokens
96
+ * @param amount Approved amount
97
+ * @param deadline Ms number added to current time (Date.now()) until approve expiration
98
+ */
99
+ approveOnPermit2(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: EvmTransactionOptions): Promise<TransactionReceipt>;
100
+ /**
101
+ * Calculates EIP-1559 specific gas details.
102
+ * @see {@link https://github.com/ethers-io/ethers.js/blob/master/packages/abstract-provider/src.ts/index.ts#L235}
103
+ * @returns block baseFee, average maxPriorityFeePerGas, and maxFeePerGas.
104
+ */
105
+ getPriorityFeeGas(): Promise<GasPrice>;
106
+ /**
107
+ * Gets block by block id.
108
+ * @param [blockId] Block id: hash, number ... Default is 'latest'.
109
+ * @returns Block by blockId parameter.
110
+ */
111
+ getBlock(blockType?: BlockNumber | BlockTag): Promise<GetBlockReturnType>;
112
+ /**
113
+ * Estimates average maxPriorityFeePerGas for EIP-1559 transactions based on last 20 blocks.
114
+ * @see {@link https://docs.alchemy.com/docs/how-to-build-a-gas-fee-estimator-using-eip-1559}
115
+ * @returns Average maxPriorityFeePerGas in wei
116
+ */
117
+ getMaxPriorityFeePerGas(): Promise<number>;
118
+ getBaseFeePerGas(blockNumber: bigint): Promise<number>;
119
+ private handlePossibleError;
120
+ }
@@ -0,0 +1,498 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EvmAdapter = void 0;
4
+ const viem_1 = require("viem");
5
+ const viem_blockchain_mapping_1 = require("../../constants/viem-blockchain-mapping");
6
+ const erc20_token_abi_1 = require("../constants/erc20-token-abi");
7
+ const abstract_adapter_1 = require("../common/abstract-adapter");
8
+ const core_1 = require("@cryptorubic/core");
9
+ const bignumber_js_1 = require("bignumber.js");
10
+ const web3_pure_1 = require("../../../utils/web3-pure");
11
+ const possible_errors_1 = require("../constants/possible-errors");
12
+ const evm_adapter_signer_1 = require("./signer/evm-adapter-signer");
13
+ const rubic_sdk_error_1 = require("../../../errors/rubic-sdk.error");
14
+ const uni_v3_permit_abi_1 = require("../constants/uni-v3-permit-abi");
15
+ const insufficient_funds_gas_price_value_error_1 = require("../../../errors/cross-chain/insufficient-funds-gas-price-value.error");
16
+ const options_1 = require("../utils/options");
17
+ const tx_status_1 = require("../models/web3-public-models/tx-status");
18
+ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
19
+ async needPreswapAction(token, contractAddress, walletAddress, amount) {
20
+ return this.needApprove(token, contractAddress, walletAddress, amount);
21
+ }
22
+ async handlePreswap(contractAddress, walletAddress, tokenAmount) {
23
+ const approveAmount = this.blockchain === core_1.BLOCKCHAIN_NAME.GNOSIS || this.blockchain === core_1.BLOCKCHAIN_NAME.CRONOS
24
+ ? tokenAmount.stringWeiAmount
25
+ : tokenAmount.stringTokenAmount;
26
+ const isNative = web3_pure_1.Web3Pure.isNativeAddress(this.blockchain, tokenAmount.address);
27
+ const fromTokenAddress = isNative && tokenAmount.blockchain === core_1.BLOCKCHAIN_NAME.METIS
28
+ ? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000'
29
+ : tokenAmount.blockchain;
30
+ await this.signer.writeContract(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', '0', [approveAmount]);
31
+ }
32
+ constructor(httpClient, adapterOptions, logger, clientParams) {
33
+ super(adapterOptions.blockchain, logger);
34
+ this.adapterOptions = adapterOptions;
35
+ this.clientParams = clientParams;
36
+ this.signer = new evm_adapter_signer_1.EvmAdapterSigner(this.publicRef, httpClient, logger, clientParams);
37
+ }
38
+ initWeb3Client() {
39
+ this.public = this.createPublicClient(this.adapterOptions.rpcList);
40
+ }
41
+ async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = [], options = {}) {
42
+ return this.public.readContract({
43
+ abi: contractAbi,
44
+ address: contractAddress,
45
+ functionName: methodName,
46
+ args: methodArguments,
47
+ ...(options.from && { account: options.from })
48
+ });
49
+ }
50
+ async getTransactionStatus(hash) {
51
+ const txReceipt = await this.getTransactionReceipt(hash);
52
+ if (txReceipt === null) {
53
+ return tx_status_1.TX_STATUS.PENDING;
54
+ }
55
+ if (txReceipt.status) {
56
+ return tx_status_1.TX_STATUS.SUCCESS;
57
+ }
58
+ return tx_status_1.TX_STATUS.FAIL;
59
+ }
60
+ /**
61
+ * Gets mined transaction receipt.
62
+ * @param hash Transaction hash
63
+ */
64
+ async getTransactionReceipt(hash) {
65
+ return this.public.getTransactionReceipt({ hash: hash });
66
+ }
67
+ async getTokensBalances(userAddress, tokensAddresses) {
68
+ const indexOfNativeCoin = tokensAddresses.findIndex((tokenAddress) => web3_pure_1.Web3Pure.isNativeAddress('ETH', tokenAddress));
69
+ const promises = [];
70
+ if (indexOfNativeCoin !== -1) {
71
+ tokensAddresses.splice(indexOfNativeCoin, 1);
72
+ promises[1] = this.getBalance(userAddress);
73
+ }
74
+ promises[0] = this.multicallContractsMethods(erc20_token_abi_1.erc20TokenAbi, tokensAddresses.map((tokenAddress) => ({
75
+ contractAddress: tokenAddress,
76
+ methodsData: [
77
+ {
78
+ methodName: 'balanceOf',
79
+ methodArguments: [userAddress]
80
+ }
81
+ ]
82
+ })));
83
+ const results = await Promise.all(promises);
84
+ const tokensBalances = results[0].map((tokenResults) => {
85
+ const { success, output } = tokenResults[0];
86
+ return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
87
+ });
88
+ if (indexOfNativeCoin !== -1) {
89
+ tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
90
+ }
91
+ return tokensBalances;
92
+ }
93
+ async multicallContractsMethods(contractAbi, contractsData) {
94
+ const contracts = contractsData
95
+ .map(({ contractAddress, methodsData }) => {
96
+ const wagmiContract = {
97
+ address: contractAddress,
98
+ abi: contractAbi
99
+ };
100
+ return methodsData.map(({ methodName, methodArguments }) => ({
101
+ ...wagmiContract,
102
+ functionName: methodName,
103
+ args: methodArguments
104
+ }));
105
+ })
106
+ .flat();
107
+ const outputs = await this.public.multicall({ contracts });
108
+ let outputIndex = 0;
109
+ return contractsData.map((contractData) => {
110
+ return contractData.methodsData.map(() => {
111
+ const output = outputs[outputIndex];
112
+ if (!output) {
113
+ throw new rubic_sdk_error_1.RubicSdkError('Output has to be defined');
114
+ }
115
+ outputIndex++;
116
+ return {
117
+ success: output.status === 'success',
118
+ output: output?.error ? null : output.result
119
+ };
120
+ });
121
+ });
122
+ }
123
+ async getBlockNumber() {
124
+ const blockNumber = await this.public.getBlockNumber();
125
+ return Number(blockNumber);
126
+ }
127
+ createPublicClient(rpcList) {
128
+ if (!rpcList?.[0]) {
129
+ this.logger?.customError('RPC list is empty');
130
+ return null;
131
+ }
132
+ const customViemConfig = this.clientParams?.viemConfig?.[this.blockchain];
133
+ const defaultTransportConfig = {
134
+ batch: { batchSize: 2000, wait: 16 },
135
+ onFetchResponse: (response) => this.handlePossibleError(response),
136
+ retryCount: 2,
137
+ retryDelay: 100,
138
+ timeout: 5000
139
+ };
140
+ const defaultFallbackConfig = {
141
+ rank: {
142
+ interval: 1800000
143
+ }
144
+ };
145
+ const transports = rpcList.map((rpc) => {
146
+ return (0, viem_1.http)(rpc, customViemConfig?.transportConfig ? customViemConfig.transportConfig : defaultTransportConfig);
147
+ });
148
+ const fallbackConfig = customViemConfig?.fallbackConfig ? customViemConfig?.fallbackConfig : defaultFallbackConfig;
149
+ const chain = viem_blockchain_mapping_1.viemBlockchainMapping[this.blockchain];
150
+ return (0, viem_1.createPublicClient)({
151
+ // @ts-ignore
152
+ chain,
153
+ transport: (0, viem_1.fallback)(transports, fallbackConfig)
154
+ });
155
+ }
156
+ async multicallByContract(contracts, allowErrors = true) {
157
+ const results = await this.public.multicall(contracts);
158
+ const rpcRequestFail = results.every((result) => result?.status === 'failure');
159
+ if (rpcRequestFail) {
160
+ // @ts-ignore
161
+ if (rpcRequestFail?.[0]?.stats === 'failure') {
162
+ // @ts-ignore
163
+ throw new Error(rpcRequestFail?.[0]?.error);
164
+ }
165
+ }
166
+ const hasErrors = results.find((result) => {
167
+ if (result?.error || result.status !== 'success') {
168
+ this.logger?.customWarn('Multicall error', result?.error?.data || result?.error?.message || result?.error);
169
+ return true;
170
+ }
171
+ return false;
172
+ });
173
+ if (hasErrors && !allowErrors) {
174
+ throw new Error('Multicall error');
175
+ }
176
+ return results;
177
+ }
178
+ async multicallByAddress(address, abi, method, methodArgs = [], allowErrors = true) {
179
+ const contract = {
180
+ abi,
181
+ address: address,
182
+ functionName: method
183
+ };
184
+ const contracts = methodArgs.map((multicallArguments) => ({
185
+ ...contract,
186
+ args: multicallArguments
187
+ }));
188
+ return this.multicallByContract({ contracts }, allowErrors);
189
+ }
190
+ static encodeMethodCall(contractAddress, contractAbi, method, parameters = [], value) {
191
+ try {
192
+ const data = (0, viem_1.encodeFunctionData)({
193
+ abi: contractAbi,
194
+ args: parameters,
195
+ functionName: method
196
+ });
197
+ return {
198
+ data: data,
199
+ to: contractAddress,
200
+ value: value || '0'
201
+ };
202
+ }
203
+ catch (err) {
204
+ throw err;
205
+ }
206
+ }
207
+ async read(address, abi, method, methodArgs = []) {
208
+ const result = await this.public.readContract({
209
+ abi,
210
+ address: address,
211
+ args: methodArgs,
212
+ functionName: method
213
+ });
214
+ return result;
215
+ }
216
+ /**
217
+ * Generate random HEX strings from a given byte size.
218
+ * @param size byte size.
219
+ */
220
+ static randomHex(size) {
221
+ const bytes = new Uint8Array(size);
222
+ crypto.getRandomValues(bytes);
223
+ return (0, viem_1.toHex)(bytes);
224
+ }
225
+ /**
226
+ * Converts address to checksum format.
227
+ * @param address Address to convert.
228
+ */
229
+ static toChecksumAddress(address) {
230
+ return (0, viem_1.getAddress)(address);
231
+ }
232
+ async simulateTransaction(config, from, timeout = 15000) {
233
+ try {
234
+ const callParams = {
235
+ account: from,
236
+ data: config.data,
237
+ to: config.to,
238
+ ...(config.value && { value: BigInt(config.value) })
239
+ };
240
+ const gasLimitWei = await Promise.race([
241
+ this.public.estimateGas(callParams),
242
+ new Promise((_, reject) => setTimeout(() => reject('Timeout'), timeout))
243
+ ]);
244
+ return gasLimitWei?.toString();
245
+ }
246
+ catch (err) {
247
+ this.logger?.customError('Error while simulating transaction', err);
248
+ throw err;
249
+ }
250
+ }
251
+ async callForTokensInfo(tokenAddresses) {
252
+ const nativeTokenIndex = tokenAddresses.findIndex((address) => (0, core_1.compareAddresses)(address, '0x0000000000000000000000000000000000000000'));
253
+ const filteredTokenAddresses = tokenAddresses.filter((_, index) => index !== nativeTokenIndex);
254
+ const contracts = filteredTokenAddresses.flatMap((contractAddress) => {
255
+ const contract = {
256
+ abi: erc20_token_abi_1.erc20TokenAbi,
257
+ address: contractAddress
258
+ };
259
+ return ['decimals', 'symbol', 'name'].map((method) => ({ ...contract, functionName: method }));
260
+ });
261
+ const results = contracts.length
262
+ ? (await this.multicallByContract({ contracts }, false))
263
+ : [];
264
+ const tokens = [];
265
+ for (let i = 0; i < results.length; i += 3) {
266
+ try {
267
+ const decimals = Number(results[i].result);
268
+ const symbol = results[i + 1].result;
269
+ const name = results[i + 2].result;
270
+ const token = new core_1.Token({
271
+ address: filteredTokenAddresses[i / 3],
272
+ blockchain: this.blockchain,
273
+ decimals,
274
+ name,
275
+ symbol
276
+ });
277
+ tokens.push(token);
278
+ }
279
+ catch (err) {
280
+ this.logger?.customError('Error while loading token', err);
281
+ tokens.push(null);
282
+ }
283
+ }
284
+ if (nativeTokenIndex === -1) {
285
+ return tokens.filter(Boolean);
286
+ }
287
+ const blockchainNativeToken = core_1.nativeTokensList[this.blockchain];
288
+ tokens.splice(nativeTokenIndex, 0, blockchainNativeToken);
289
+ return tokens.filter(Boolean);
290
+ }
291
+ async getGasPrice() {
292
+ const bigIntGas = await this.public.getGasPrice();
293
+ return String(bigIntGas);
294
+ }
295
+ async checkEnoughBalance(token, walletAddress, amount = token.tokenAmount) {
296
+ const weiBalance = await this.getBalance(walletAddress, token.isNative ? undefined : token.address);
297
+ const balance = core_1.Token.fromWei(weiBalance, token.decimals);
298
+ return balance.gte(amount);
299
+ }
300
+ /**
301
+ * @param walletAddress
302
+ * @param tokenAddress
303
+ * @returns wei amount
304
+ */
305
+ async getBalance(walletAddress, tokenAddress) {
306
+ const isToken = tokenAddress && !web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.EVM, tokenAddress);
307
+ if (isToken) {
308
+ const tokenBalance = await this.read(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'balanceOf', [walletAddress]);
309
+ return new bignumber_js_1.default(tokenBalance);
310
+ }
311
+ const nativeBalance = await this.public.getBalance({
312
+ address: walletAddress
313
+ });
314
+ return new bignumber_js_1.default(nativeBalance.toString());
315
+ }
316
+ async getTransactionCount(walletAddress) {
317
+ const transactionCount = await this.public?.getTransactionCount({
318
+ address: walletAddress
319
+ });
320
+ return transactionCount ?? 0;
321
+ }
322
+ async getAllowance(fromTokenAddress, walletAddress, spenderAddress) {
323
+ const [decimals, allowance] = await Promise.all([
324
+ this.read(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'decimals'),
325
+ this.read(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'allowance', [walletAddress, spenderAddress])
326
+ ]);
327
+ const allowanceWeiBN = new bignumber_js_1.default(allowance);
328
+ const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
329
+ return { allowanceNonWei, allowanceWei: allowanceWeiBN };
330
+ }
331
+ async needApprove(token, contractAddress, walletAddress, amount) {
332
+ // Native coin in METIS can be Token required approve
333
+ if (token.isNative && token.blockchain !== core_1.BLOCKCHAIN_NAME.METIS) {
334
+ return false;
335
+ }
336
+ // Special native address for METIS native coin
337
+ const fromTokenAddress = token.isNative && token.blockchain === core_1.BLOCKCHAIN_NAME.METIS ? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000' : token.address;
338
+ const { allowanceWei } = await this.getAllowance(fromTokenAddress, walletAddress, contractAddress);
339
+ return allowanceWei.lt(token.weiAmount);
340
+ }
341
+ /**
342
+ * Executes approve method in ERC-20 token contract.
343
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
344
+ * @param spenderAddress Wallet or contract address to approve.
345
+ * @param amount Token amount to approve in wei.
346
+ * @param [options] Additional options.
347
+ * @returns Approval transaction hash.
348
+ */
349
+ async approveTokens(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
350
+ try {
351
+ const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
352
+ const encodedApprove = this.encodeApprove(tokenAddress, spenderAddress, rawValue.toFixed(0));
353
+ const gaslessParams = {
354
+ account: this.signer.walletAddress,
355
+ to: tokenAddress,
356
+ value: BigInt('0'),
357
+ data: encodedApprove.data
358
+ };
359
+ const gas = await this.public.estimateGas({
360
+ ...gaslessParams,
361
+ ...(0, options_1.getViemGasOptions)(options)
362
+ });
363
+ const gasfulViemOptions = {
364
+ ...gaslessParams,
365
+ ...(0, options_1.getViemGasOptions)(options),
366
+ gas: gas.toString()
367
+ };
368
+ const receipt = await this.signer.executeContractMethod(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', [spenderAddress, BigInt(rawValue.toFixed(0))], gasfulViemOptions);
369
+ return receipt.transactionHash;
370
+ }
371
+ catch (err) {
372
+ if (err?.message?.includes('gas required exceeds allowance') || err?.message?.includes('insufficient balance to pay for gas')) {
373
+ throw new insufficient_funds_gas_price_value_error_1.InsufficientFundsGasPriceValueError();
374
+ }
375
+ console.debug(err);
376
+ throw err;
377
+ }
378
+ }
379
+ /**
380
+ * Build encoded approve transaction config.
381
+ * @param tokenAddress Address of the smart-contract corresponding to the token.
382
+ * @param spenderAddress Wallet or contract address to approve.
383
+ * @param amount wei amount of tokens in approval window in spending cap field
384
+ * @returns Encoded approve transaction config.
385
+ */
386
+ encodeApprove(tokenAddress, spenderAddress, amount) {
387
+ const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
388
+ const tx = EvmAdapter.encodeMethodCall(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', [spenderAddress, amountWei]);
389
+ return {
390
+ data: tx.data,
391
+ to: tx.to,
392
+ value: tx.value
393
+ };
394
+ }
395
+ async needPermit2Approve(token, permit2Address, walletAddress, spenderAddress) {
396
+ const res = await this.read(permit2Address, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'allowance', [
397
+ walletAddress,
398
+ token.address,
399
+ spenderAddress
400
+ ]);
401
+ const [amount, expiration, _nonce] = res;
402
+ return token.weiAmount.gt(amount) || new bignumber_js_1.default(Date.now()).gt(Number(expiration) * 1000);
403
+ }
404
+ /**
405
+ * @param tokenAddress Token address you want to approve for spending
406
+ * @param permit2Address Addres of permit2 contract
407
+ * @param spenderAddress Contract address spending your tokens
408
+ * @param amount Approved amount
409
+ * @param deadline Ms number added to current time (Date.now()) until approve expiration
410
+ */
411
+ async approveOnPermit2(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
412
+ const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
413
+ return this.signer.executeContractMethod(tokenAddress, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'approve', [spenderAddress, BigInt(rawValue.toString())], options);
414
+ }
415
+ /**
416
+ * Calculates EIP-1559 specific gas details.
417
+ * @see {@link https://github.com/ethers-io/ethers.js/blob/master/packages/abstract-provider/src.ts/index.ts#L235}
418
+ * @returns block baseFee, average maxPriorityFeePerGas, and maxFeePerGas.
419
+ */
420
+ async getPriorityFeeGas() {
421
+ const block = await this.getBlock('latest');
422
+ let lastBaseFeePerGas = null;
423
+ let maxFeePerGas = null;
424
+ let maxPriorityFeePerGas = null;
425
+ if (block && block.baseFeePerGas) {
426
+ const baseFeePerGas = await this.getBaseFeePerGas(block.number);
427
+ try {
428
+ lastBaseFeePerGas = baseFeePerGas;
429
+ maxPriorityFeePerGas = await this.getMaxPriorityFeePerGas();
430
+ maxFeePerGas = baseFeePerGas * 2 + maxPriorityFeePerGas;
431
+ }
432
+ catch (err) {
433
+ console.debug(err);
434
+ }
435
+ }
436
+ return {
437
+ baseFee: lastBaseFeePerGas?.toFixed(),
438
+ maxFeePerGas: maxFeePerGas?.toFixed(),
439
+ maxPriorityFeePerGas: maxPriorityFeePerGas?.toFixed()
440
+ };
441
+ }
442
+ /**
443
+ * Gets block by block id.
444
+ * @param [blockId] Block id: hash, number ... Default is 'latest'.
445
+ * @returns Block by blockId parameter.
446
+ */
447
+ getBlock(blockType = 'latest') {
448
+ if (typeof blockType === 'string') {
449
+ // @TODO FIX TYPE
450
+ return this.public.getBlock({ blockTag: blockType });
451
+ }
452
+ return this.public.getBlock({ blockNumber: blockType });
453
+ }
454
+ /**
455
+ * Estimates average maxPriorityFeePerGas for EIP-1559 transactions based on last 20 blocks.
456
+ * @see {@link https://docs.alchemy.com/docs/how-to-build-a-gas-fee-estimator-using-eip-1559}
457
+ * @returns Average maxPriorityFeePerGas in wei
458
+ */
459
+ async getMaxPriorityFeePerGas() {
460
+ const HISTORICAL_BLOCKS = 20;
461
+ const feeHistory = await this.public.getFeeHistory({
462
+ blockCount: HISTORICAL_BLOCKS,
463
+ rewardPercentiles: [50],
464
+ blockTag: 'pending'
465
+ });
466
+ if (!feeHistory?.reward) {
467
+ throw new Error('No fee history found');
468
+ }
469
+ const blocks = feeHistory.reward.map((x) => x.map((reward) => Number(reward)));
470
+ const rewardSum = blocks.map((x) => x[0]).reduce((acc, v) => acc + (v || 0), 0);
471
+ return Math.round(rewardSum / blocks.length);
472
+ }
473
+ async getBaseFeePerGas(blockNumber) {
474
+ const feeHistory = await this.public.getFeeHistory({
475
+ blockCount: 1,
476
+ rewardPercentiles: [50],
477
+ // blockTag: 'pending',
478
+ blockNumber: blockNumber
479
+ });
480
+ if (!feeHistory?.baseFeePerGas.length) {
481
+ throw new Error('No fee history found');
482
+ }
483
+ const feedSum = feeHistory.baseFeePerGas.reduce((acc, v) => acc.plus(v.toString() || 0), new bignumber_js_1.default(0));
484
+ return feedSum.dividedBy(feeHistory.baseFeePerGas.length).toNumber();
485
+ }
486
+ async handlePossibleError(response) {
487
+ const body = JSON.stringify(response.body);
488
+ const isError = !response.ok || 'error' in response || possible_errors_1.possibleErrors.some((error) => body.includes(error));
489
+ if (isError) {
490
+ this.logger?.customError('Rpc fetch error', {
491
+ blockchain: this.blockchain,
492
+ text: await response.text(),
493
+ url: response.url
494
+ });
495
+ }
496
+ }
497
+ }
498
+ exports.EvmAdapter = EvmAdapter;
@@ -0,0 +1,38 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { BasicSendTransactionOptions } from '../../models/basic-transaction-options';
3
+ import { EIP1559Gas, SingleGasPrice } from '../../models/evm-web3-public-models/gas-price';
4
+ export interface EvmSendTxParams {
5
+ txOptions: EvmTransactionOptions;
6
+ }
7
+ export interface EvmTransactionOptions extends EvmBasicTransactionOptions {
8
+ /**
9
+ * Encoded data, which will be executed in transaction.
10
+ */
11
+ data?: string;
12
+ /**
13
+ * Native token amount in wei.
14
+ */
15
+ value?: BigNumber | string | bigint;
16
+ /**
17
+ * Use in case of eip-155
18
+ */
19
+ chainId?: string;
20
+ /**
21
+ * gasLimit multiplier (to change ratio for specific chain)
22
+ */
23
+ gasLimitRatio?: number;
24
+ /**
25
+ * Address send transaction to
26
+ */
27
+ to?: string;
28
+ }
29
+ export interface EvmBasicTransactionOptions extends BasicSendTransactionOptions {
30
+ /**
31
+ * Transaction gas limit.
32
+ */
33
+ gas?: string;
34
+ /**
35
+ * Transaction gas price options.
36
+ */
37
+ gasPriceOptions?: EIP1559Gas | SingleGasPrice;
38
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });