@sabaaa1/common 0.0.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 (445) hide show
  1. package/.env.example +5 -0
  2. package/.eslintrc.json +18 -0
  3. package/README.md +164 -0
  4. package/copyPackageJson.js +81 -0
  5. package/handleCDNWorkers.js +92 -0
  6. package/jest.config.ts +10 -0
  7. package/package.json +101 -0
  8. package/polyfillWorker.ts +15 -0
  9. package/project.json +32 -0
  10. package/src/API/API.ts +203 -0
  11. package/src/API/admin-calls.ts +8 -0
  12. package/src/API/ai-calls.ts +48 -0
  13. package/src/API/brotherhoodCalls.ts +184 -0
  14. package/src/API/callLifiAPI.ts +41 -0
  15. package/src/API/callMonitor.ts +9 -0
  16. package/src/API/callOdosAPI.ts +89 -0
  17. package/src/API/callOneInchAPI.ts +47 -0
  18. package/src/API/callRelayer.ts +23 -0
  19. package/src/API/checkRisk.ts +7 -0
  20. package/src/API/duneAPI.ts +26 -0
  21. package/src/API/enclaveCalls.ts +23 -0
  22. package/src/API/fetchCommitmentsCache.ts +63 -0
  23. package/src/API/generate-trading-points.ts +77 -0
  24. package/src/API/get-token-data.ts +12 -0
  25. package/src/API/getBridgeProtocols.ts +16 -0
  26. package/src/API/getCoingeckoPrice.ts +59 -0
  27. package/src/API/getGasEstimates.ts +30 -0
  28. package/src/API/getLifiStatus.ts +35 -0
  29. package/src/API/getRelayerURL.ts +27 -0
  30. package/src/API/getServerURL.ts +116 -0
  31. package/src/API/getTokenPrice.ts +39 -0
  32. package/src/API/getWebsiteURL.ts +58 -0
  33. package/src/API/index.ts +19 -0
  34. package/src/API/is-tx-stateless.ts +32 -0
  35. package/src/API/kycCalls.ts +81 -0
  36. package/src/API/leaderboardCalls.ts +32 -0
  37. package/src/API/mysteryBoxesCalls.ts +141 -0
  38. package/src/API/passwordCalls.ts +34 -0
  39. package/src/API/proxyAccountsCalls.ts +40 -0
  40. package/src/API/referralsCalls.ts +52 -0
  41. package/src/API/relayCalls.ts +14 -0
  42. package/src/API/restoreSnapshots.ts +7 -0
  43. package/src/API/rewardsUserCalls.ts +124 -0
  44. package/src/API/send-telegram-callback.ts +17 -0
  45. package/src/API/simulate-batch-tx.ts +19 -0
  46. package/src/API/tenderly.api.ts +96 -0
  47. package/src/API/token-calls.ts +19 -0
  48. package/src/API/weeklyAnalyticCalls.ts +43 -0
  49. package/src/constants/activity.constants.ts +10 -0
  50. package/src/constants/addresses.constants.ts +74 -0
  51. package/src/constants/assets.constants.ts +15 -0
  52. package/src/constants/backend.constants.ts +16 -0
  53. package/src/constants/balance.constants.ts +1 -0
  54. package/src/constants/bridging.constants.ts +5 -0
  55. package/src/constants/chains.constants.ts +194 -0
  56. package/src/constants/coingecko.constants.ts +67 -0
  57. package/src/constants/contracts.constants.ts +106 -0
  58. package/src/constants/conversion.constants.ts +1 -0
  59. package/src/constants/deploy-data/deploy-data-arbMainnet.json +5685 -0
  60. package/src/constants/deploy-data/deploy-data-arcTestnet.json +6157 -0
  61. package/src/constants/deploy-data/deploy-data-avalanche.json +5921 -0
  62. package/src/constants/deploy-data/deploy-data-base.json +5695 -0
  63. package/src/constants/deploy-data/deploy-data-bnbMainnet.json +5921 -0
  64. package/src/constants/deploy-data/deploy-data-ethMainnet.json +5922 -0
  65. package/src/constants/deploy-data/deploy-data-localhost.json +5921 -0
  66. package/src/constants/deploy-data/deploy-data-optimism.json +5687 -0
  67. package/src/constants/deploy-data/deploy-data-polygon.json +5695 -0
  68. package/src/constants/deploy-data/index.ts +21 -0
  69. package/src/constants/events.constants.ts +10 -0
  70. package/src/constants/fees.constants.ts +4 -0
  71. package/src/constants/function-signatures.constants.ts +6 -0
  72. package/src/constants/index.ts +30 -0
  73. package/src/constants/kyc.constants.ts +202 -0
  74. package/src/constants/lifi.constants.ts +1 -0
  75. package/src/constants/mediaUrls.constants.ts +25 -0
  76. package/src/constants/mystery-boxes.constants.ts +402 -0
  77. package/src/constants/oauthUrls.constants.ts +7 -0
  78. package/src/constants/permit2.constants.ts +28 -0
  79. package/src/constants/presale.constants.ts +503 -0
  80. package/src/constants/protocol.constants.ts +65 -0
  81. package/src/constants/reorg-depths.constants.ts +13 -0
  82. package/src/constants/rewards.constants.ts +27 -0
  83. package/src/constants/save-depths.ts +13 -0
  84. package/src/constants/server.constants.ts +233 -0
  85. package/src/constants/tasks.constants.ts +205 -0
  86. package/src/constants/token-data/ERC20Registry.ts +90 -0
  87. package/src/constants/token-data/arbMainnetRegistry.json +1841 -0
  88. package/src/constants/token-data/arbMainnetRegistryFixed.json +1841 -0
  89. package/src/constants/token-data/arcTestnetRegistry.json +436 -0
  90. package/src/constants/token-data/avalancheRegistry.json +729 -0
  91. package/src/constants/token-data/avalancheRegistryFixed.json +729 -0
  92. package/src/constants/token-data/baseRegistry.json +1134 -0
  93. package/src/constants/token-data/baseRegistryFixed.json +1134 -0
  94. package/src/constants/token-data/bnbMainnetRegistry.json +900 -0
  95. package/src/constants/token-data/bnbMainnetRegistryFixed.json +900 -0
  96. package/src/constants/token-data/ethMainnetRegistry.json +4298 -0
  97. package/src/constants/token-data/ethMainnetRegistryFixed.json +4298 -0
  98. package/src/constants/token-data/index.ts +60 -0
  99. package/src/constants/token-data/localhostRegistry.json +2784 -0
  100. package/src/constants/token-data/optimismRegistry.json +701 -0
  101. package/src/constants/token-data/optimismRegistryFixed.json +701 -0
  102. package/src/constants/token-data/polygonRegistry.json +2309 -0
  103. package/src/constants/token-data/polygonRegistryFixed.json +2309 -0
  104. package/src/constants/token-data/popularTokens.constants.ts +11 -0
  105. package/src/constants/token-data/tokenPricing.consts.ts +2 -0
  106. package/src/constants/token.limits.constants.ts +31 -0
  107. package/src/constants/vite.constants.ts +74 -0
  108. package/src/constants/wallet.constants.ts +9 -0
  109. package/src/crypto/babyJub.ts +31 -0
  110. package/src/crypto/index.ts +3 -0
  111. package/src/crypto/poseidon.ts +36 -0
  112. package/src/crypto/preProcessing.ts +20 -0
  113. package/src/data-structures/ApprovalDBs/EventsPublicApprovalsDB.ts +288 -0
  114. package/src/data-structures/ApprovalDBs/index.ts +1 -0
  115. package/src/data-structures/Hinkal/Hinkal.ts +746 -0
  116. package/src/data-structures/Hinkal/IHinkal.ts +315 -0
  117. package/src/data-structures/Hinkal/handleAutoDepositBack.ts +138 -0
  118. package/src/data-structures/Hinkal/hinkalActionFundApproveAndTransact.ts +64 -0
  119. package/src/data-structures/Hinkal/hinkalActionReceive.ts +65 -0
  120. package/src/data-structures/Hinkal/hinkalActionStake.ts +152 -0
  121. package/src/data-structures/Hinkal/hinkalApprove.ts +170 -0
  122. package/src/data-structures/Hinkal/hinkalCheckTokenRegistry.ts +26 -0
  123. package/src/data-structures/Hinkal/hinkalDeposit.ts +199 -0
  124. package/src/data-structures/Hinkal/hinkalGetRecipientInfo.ts +12 -0
  125. package/src/data-structures/Hinkal/hinkalGetZkMeProvider.ts +31 -0
  126. package/src/data-structures/Hinkal/hinkalInsideTransact.ts +190 -0
  127. package/src/data-structures/Hinkal/hinkalMultiSend.ts +26 -0
  128. package/src/data-structures/Hinkal/hinkalPrivateWallet.ts +198 -0
  129. package/src/data-structures/Hinkal/hinkalProoflessDeposit.ts +91 -0
  130. package/src/data-structures/Hinkal/hinkalProxySwap.ts +91 -0
  131. package/src/data-structures/Hinkal/hinkalSignSubAccount.ts +28 -0
  132. package/src/data-structures/Hinkal/hinkalSwap.ts +157 -0
  133. package/src/data-structures/Hinkal/hinkalTransfer.ts +171 -0
  134. package/src/data-structures/Hinkal/hinkalWithdraw.ts +161 -0
  135. package/src/data-structures/Hinkal/index.ts +9 -0
  136. package/src/data-structures/Hinkal/resetMerkleTrees.ts +64 -0
  137. package/src/data-structures/IndexedDB/activity-db.ts +204 -0
  138. package/src/data-structures/IndexedDB/balances-db.ts +97 -0
  139. package/src/data-structures/IndexedDB/contact-db.ts +81 -0
  140. package/src/data-structures/IndexedDB/index.ts +6 -0
  141. package/src/data-structures/IndexedDB/prices-db.ts +89 -0
  142. package/src/data-structures/IndexedDB/private-balances-db.ts +31 -0
  143. package/src/data-structures/IndexedDB/signatures-db.ts +62 -0
  144. package/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.ts +152 -0
  145. package/src/data-structures/TokenDBs/AlchemyPublicTokensDB.ts +224 -0
  146. package/src/data-structures/TokenDBs/ArcPublicTokensDB.ts +198 -0
  147. package/src/data-structures/TokenDBs/EventsPublicTokensDB.ts +216 -0
  148. package/src/data-structures/TokenDBs/IPublicTokensDB.ts +7 -0
  149. package/src/data-structures/TokenDBs/PrivateTokensDB.ts +96 -0
  150. package/src/data-structures/TokenDBs/PublicTokensDB.ts +49 -0
  151. package/src/data-structures/TokenDBs/index.ts +4 -0
  152. package/src/data-structures/TokenDBs/token-visibility-db.ts +154 -0
  153. package/src/data-structures/ValueCache/ValueCache.ts +29 -0
  154. package/src/data-structures/ValueCache/index.ts +1 -0
  155. package/src/data-structures/cacheDevices/AttachableMemoryCacheDevice.ts +33 -0
  156. package/src/data-structures/cacheDevices/BaseCacheDevice.ts +30 -0
  157. package/src/data-structures/cacheDevices/FileCacheDevice.ts +59 -0
  158. package/src/data-structures/cacheDevices/LocalStorageCacheDevice.ts +36 -0
  159. package/src/data-structures/cacheDevices/index.ts +2 -0
  160. package/src/data-structures/crypto-keys/decodeUTXO.ts +60 -0
  161. package/src/data-structures/crypto-keys/encryptDecryptUtxo.ts +74 -0
  162. package/src/data-structures/crypto-keys/index.ts +4 -0
  163. package/src/data-structures/crypto-keys/keyUtils.ts +8 -0
  164. package/src/data-structures/crypto-keys/keys.ts +203 -0
  165. package/src/data-structures/custom-token-registry/CustomTokenRegistry.ts +49 -0
  166. package/src/data-structures/event-service/AbstractAccessTokenSnapshotService.ts +142 -0
  167. package/src/data-structures/event-service/AbstractApprovalsSnapshotService.ts +152 -0
  168. package/src/data-structures/event-service/AbstractCommitmentsSnapshotService.ts +116 -0
  169. package/src/data-structures/event-service/AbstractEventService.ts +44 -0
  170. package/src/data-structures/event-service/AbstractNullifierSnapshotService.ts +76 -0
  171. package/src/data-structures/event-service/AbstractSnapshotService.ts +63 -0
  172. package/src/data-structures/event-service/BlockchainEventEmitter.ts +132 -0
  173. package/src/data-structures/event-service/index.ts +7 -0
  174. package/src/data-structures/index.ts +18 -0
  175. package/src/data-structures/merkle-tree/MerkleTree.test.ts +77 -0
  176. package/src/data-structures/merkle-tree/MerkleTree.ts +253 -0
  177. package/src/data-structures/merkle-tree/MerkleTreeIncompleteError.ts +6 -0
  178. package/src/data-structures/merkle-tree/getPatchedAccessTokenMerkleTree.ts +24 -0
  179. package/src/data-structures/merkle-tree/index.ts +3 -0
  180. package/src/data-structures/presale/PresaleContractWrapper.ts +80 -0
  181. package/src/data-structures/presale/index.ts +1 -0
  182. package/src/data-structures/provider-adapter/IProviderAdapter.ts +43 -0
  183. package/src/data-structures/snapshot/ClientAccessTokenSnapshotService.ts +41 -0
  184. package/src/data-structures/snapshot/ClientApprovalsSnapshotService.ts +36 -0
  185. package/src/data-structures/snapshot/ClientCommitmentsSnapshotService.ts +30 -0
  186. package/src/data-structures/snapshot/ClientNullifierSnapshotService.ts +28 -0
  187. package/src/data-structures/snapshot/SnapshotFetcherService.ts +68 -0
  188. package/src/data-structures/snapshot/index.ts +1 -0
  189. package/src/data-structures/token-price-fetcher/TokenChecker.ts +45 -0
  190. package/src/data-structures/token-price-fetcher/index.ts +1 -0
  191. package/src/data-structures/tor/HttpClient.ts +118 -0
  192. package/src/data-structures/tor/TorAdapter.ts +94 -0
  193. package/src/data-structures/tor/TorClient.ts +283 -0
  194. package/src/data-structures/tor/WebSocketDuplex.ts +32 -0
  195. package/src/data-structures/tor/index.ts +3 -0
  196. package/src/data-structures/transactions-manager/history/history.types.ts +14 -0
  197. package/src/data-structures/transactions-manager/index.ts +1 -0
  198. package/src/data-structures/utxo/Utxo.ts +189 -0
  199. package/src/error-handling/customErrors/ErrorWithAmount.ts +8 -0
  200. package/src/error-handling/customErrors/ErrorWithTx.ts +10 -0
  201. package/src/error-handling/customErrors/FeeOverTransactionValueError.ts +16 -0
  202. package/src/error-handling/customErrors/SimulationFailureError.ts +9 -0
  203. package/src/error-handling/customErrors/customErrors.helpers.ts +39 -0
  204. package/src/error-handling/customErrors/index.ts +5 -0
  205. package/src/error-handling/error-codes.constants.ts +214 -0
  206. package/src/error-handling/get-error.message.ts +149 -0
  207. package/src/error-handling/handleErrorRestore.ts +25 -0
  208. package/src/error-handling/index.ts +7 -0
  209. package/src/error-handling/logError.ts +8 -0
  210. package/src/error-handling/logger.ts +21 -0
  211. package/src/error-handling/types.ts +10 -0
  212. package/src/externalABIs/BUSD.ts +516 -0
  213. package/src/externalABIs/BabPassport.json +24 -0
  214. package/src/externalABIs/DAI.ts +331 -0
  215. package/src/externalABIs/ERC1155.json +316 -0
  216. package/src/externalABIs/ERC20.json +297 -0
  217. package/src/externalABIs/ERC20.ts +1 -0
  218. package/src/externalABIs/ERC721.json +205 -0
  219. package/src/externalABIs/GalxePassport.json +23 -0
  220. package/src/externalABIs/IQuoterV2.json +211 -0
  221. package/src/externalABIs/ISwapRouter.json +568 -0
  222. package/src/externalABIs/IUniswapV3Factory.json +207 -0
  223. package/src/externalABIs/IUniswapV3Pool.json +999 -0
  224. package/src/externalABIs/NodeInterfaceABI.json +1 -0
  225. package/src/externalABIs/OptimismGasPriceOracle.json +1 -0
  226. package/src/externalABIs/PoLidoNftAbi.json +307 -0
  227. package/src/externalABIs/SanctionsList.ts +86 -0
  228. package/src/externalABIs/USDC.ts +718 -0
  229. package/src/externalABIs/USDR.ts +343 -0
  230. package/src/externalABIs/USDR3CRV.ts +539 -0
  231. package/src/externalABIs/USDT.ts +390 -0
  232. package/src/externalABIs/UniswapV2PoolAbi.json +66 -0
  233. package/src/externalABIs/WETH.ts +153 -0
  234. package/src/externalABIs/amToken.ts +347 -0
  235. package/src/externalABIs/index.ts +53 -0
  236. package/src/externalABIs/swapAbi.ts +442 -0
  237. package/src/externalABIs/transactionsProver.json +45 -0
  238. package/src/functions/index.ts +16 -0
  239. package/src/functions/kyc/aiPriseHelper.ts +0 -0
  240. package/src/functions/kyc/authentoHelper.ts +44 -0
  241. package/src/functions/kyc/index.ts +3 -0
  242. package/src/functions/kyc/openDefaultPassportWindow.ts +9 -0
  243. package/src/functions/kyc/passportHelper.ts +13 -0
  244. package/src/functions/kyc/zkMeHelper.ts +69 -0
  245. package/src/functions/pre-transaction/constructAdminData.ts +21 -0
  246. package/src/functions/pre-transaction/getExternalSwapAddress.ts +30 -0
  247. package/src/functions/pre-transaction/getFeeStructure.ts +44 -0
  248. package/src/functions/pre-transaction/getFlatFees.ts +88 -0
  249. package/src/functions/pre-transaction/getSignatureDataForTransact.ts +16 -0
  250. package/src/functions/pre-transaction/getVolatileTransferAmount.ts +56 -0
  251. package/src/functions/pre-transaction/index.ts +7 -0
  252. package/src/functions/pre-transaction/interaction-to-action.ts +17 -0
  253. package/src/functions/pre-transaction/merge-with-fee-structure-emporium.ts +50 -0
  254. package/src/functions/pre-transaction/merge-with-fee-structure.ts +35 -0
  255. package/src/functions/pre-transaction/outputApprovalDataProcessing.ts +95 -0
  256. package/src/functions/pre-transaction/outputUtxoProcessing.ts +52 -0
  257. package/src/functions/pre-transaction/process-gas-estimates.ts +36 -0
  258. package/src/functions/pre-transaction/shouldPatchAccessTokenMerkleTree.ts +15 -0
  259. package/src/functions/private-wallet/emporium.helpers.ts +296 -0
  260. package/src/functions/private-wallet/emporium.swap.helpers.ts +284 -0
  261. package/src/functions/private-wallet/index.ts +3 -0
  262. package/src/functions/private-wallet/opProducer.ts +33 -0
  263. package/src/functions/snarkjs/common.snarkjs.ts +377 -0
  264. package/src/functions/snarkjs/constant.ts +490 -0
  265. package/src/functions/snarkjs/constructEmporiumProof.ts +301 -0
  266. package/src/functions/snarkjs/constructGeneralZkProof.ts +281 -0
  267. package/src/functions/snarkjs/generateCircomData.ts +81 -0
  268. package/src/functions/snarkjs/generateZkProof.ts +21 -0
  269. package/src/functions/snarkjs/generateZkProofEnclave.ts +45 -0
  270. package/src/functions/snarkjs/generateZkProofSelf.ts +29 -0
  271. package/src/functions/snarkjs/getOriginalSender.ts +4 -0
  272. package/src/functions/snarkjs/getZKFiles.ts +29 -0
  273. package/src/functions/snarkjs/index.ts +4 -0
  274. package/src/functions/staking/index.ts +78 -0
  275. package/src/functions/utils/addresses.ts +37 -0
  276. package/src/functions/utils/amounts.utils.test.ts +91 -0
  277. package/src/functions/utils/amounts.utils.ts +119 -0
  278. package/src/functions/utils/arraysMatch.ts +4 -0
  279. package/src/functions/utils/cacheDevice.utils.ts +21 -0
  280. package/src/functions/utils/cacheFunctions.ts +154 -0
  281. package/src/functions/utils/caseInsensitive.utils.ts +10 -0
  282. package/src/functions/utils/convertEmporiumOpToCallInfo.ts +19 -0
  283. package/src/functions/utils/convertIntegrationProviderToExternalActionId.ts +14 -0
  284. package/src/functions/utils/create-provider.ts +11 -0
  285. package/src/functions/utils/encodeTokenWithId.ts +4 -0
  286. package/src/functions/utils/encryptInputForEnclave.ts +119 -0
  287. package/src/functions/utils/enum.utils.ts +30 -0
  288. package/src/functions/utils/erc20tokenFunctions.ts +110 -0
  289. package/src/functions/utils/ethers-formatter.utils.ts +32 -0
  290. package/src/functions/utils/evmNetworkFunctions.ts +9 -0
  291. package/src/functions/utils/external-action.utils.ts +15 -0
  292. package/src/functions/utils/fees.utils.ts +26 -0
  293. package/src/functions/utils/get-hinkal-approvals.ts +36 -0
  294. package/src/functions/utils/get-signature-header.ts +5 -0
  295. package/src/functions/utils/getBlockExplorerUrl.ts +14 -0
  296. package/src/functions/utils/getDataFromTransaction.ts +79 -0
  297. package/src/functions/utils/getRecipientInfoFromUserKeys.ts +28 -0
  298. package/src/functions/utils/inLogicMetadata.ts +9 -0
  299. package/src/functions/utils/index.ts +43 -0
  300. package/src/functions/utils/involves-permit2-op.ts +17 -0
  301. package/src/functions/utils/ipfs.ts +74 -0
  302. package/src/functions/utils/is-valid-url.ts +5 -0
  303. package/src/functions/utils/lifi.utils.ts +3 -0
  304. package/src/functions/utils/memoize.utils.ts +23 -0
  305. package/src/functions/utils/merkleTree.utils.ts +27 -0
  306. package/src/functions/utils/mutexes.utils.ts +3 -0
  307. package/src/functions/utils/mystery-box-auction.utils.ts +61 -0
  308. package/src/functions/utils/networks.utils.ts +6 -0
  309. package/src/functions/utils/nftTokenFunctions.ts +25 -0
  310. package/src/functions/utils/nickname.utils.ts +4 -0
  311. package/src/functions/utils/postToOffscreen.ts +6 -0
  312. package/src/functions/utils/prepareHinkal.ts +78 -0
  313. package/src/functions/utils/process.utils.ts +23 -0
  314. package/src/functions/utils/processUseApprovalUtxoData.ts +26 -0
  315. package/src/functions/utils/publicBalance.utils.ts +131 -0
  316. package/src/functions/utils/reloadPage.ts +1 -0
  317. package/src/functions/utils/replaceAddressInCalldata.ts +6 -0
  318. package/src/functions/utils/requireEnv.ts +10 -0
  319. package/src/functions/utils/resolve-sync.utils.ts +40 -0
  320. package/src/functions/utils/rpc-int-encode.ts +7 -0
  321. package/src/functions/utils/serialize.utils.ts +12 -0
  322. package/src/functions/utils/string.utils.ts +92 -0
  323. package/src/functions/utils/time.utils.ts +80 -0
  324. package/src/functions/utils/token-check.utils.ts +12 -0
  325. package/src/functions/utils/trimFieldValues.ts +24 -0
  326. package/src/functions/utils/upToDateState.ts +12 -0
  327. package/src/functions/utils/userAgent.ts +26 -0
  328. package/src/functions/utils/walletBalances.utils.ts +117 -0
  329. package/src/functions/web3/EIP-712.test.ts +302 -0
  330. package/src/functions/web3/EIP-712.ts +243 -0
  331. package/src/functions/web3/etherFunctions.test.ts +129 -0
  332. package/src/functions/web3/etherFunctions.ts +84 -0
  333. package/src/functions/web3/events/balanceChangedCustomHandler.ts +13 -0
  334. package/src/functions/web3/events/balanceChangedHandler.ts +10 -0
  335. package/src/functions/web3/events/getApprovedBalance.ts +154 -0
  336. package/src/functions/web3/events/getInputUtxoAndBalance.ts +305 -0
  337. package/src/functions/web3/events/getInputUtxosEnclave.ts +40 -0
  338. package/src/functions/web3/events/getShieldedBalance.ts +163 -0
  339. package/src/functions/web3/events/getTransactionLogEvents.ts +55 -0
  340. package/src/functions/web3/events/index.ts +7 -0
  341. package/src/functions/web3/events/web3RetrieveEvents.ts +33 -0
  342. package/src/functions/web3/functionCalls/accessTokenCalls.ts +27 -0
  343. package/src/functions/web3/functionCalls/approveToken.ts +180 -0
  344. package/src/functions/web3/functionCalls/approveTokensToHinkal.ts +21 -0
  345. package/src/functions/web3/functionCalls/estimateGasRelayer.ts +40 -0
  346. package/src/functions/web3/functionCalls/getRootHash.ts +7 -0
  347. package/src/functions/web3/functionCalls/inHinkalApprovalCalls.ts +60 -0
  348. package/src/functions/web3/functionCalls/relayFunctions.ts +12 -0
  349. package/src/functions/web3/functionCalls/transactCallDirect.ts +71 -0
  350. package/src/functions/web3/functionCalls/transactCallRelayer.ts +57 -0
  351. package/src/functions/web3/getContractMetadata.ts +43 -0
  352. package/src/functions/web3/getPublicAddressBalance.ts +17 -0
  353. package/src/functions/web3/getTokenHolder.ts +53 -0
  354. package/src/functions/web3/index.ts +9 -0
  355. package/src/functions/web3/lifiAPI.ts +41 -0
  356. package/src/functions/web3/odosAPI.ts +50 -0
  357. package/src/functions/web3/oneInchAPI.ts +47 -0
  358. package/src/functions/web3/runContractFunction.ts +116 -0
  359. package/src/functions/web3/uniswapAPI.ts +156 -0
  360. package/src/index.ts +9 -0
  361. package/src/mutexes/index.ts +1 -0
  362. package/src/mutexes/mutex.ts +3 -0
  363. package/src/providers/EthersProviderAdapter.ts +230 -0
  364. package/src/providers/TorExternalProvider.ts +36 -0
  365. package/src/providers/WagmiProviderAdapter.ts +311 -0
  366. package/src/providers/exportProviers.ts +11 -0
  367. package/src/providers/prepareEthersHinkal.ts +18 -0
  368. package/src/providers/prepareWagmiHinkal.ts +16 -0
  369. package/src/types/API.types.ts +23 -0
  370. package/src/types/ICacheDevice.ts +5 -0
  371. package/src/types/IMultiThreadedUtxoUtils.ts +16 -0
  372. package/src/types/RewardUserEnums.ts +12 -0
  373. package/src/types/TransactionSimulator.types.ts +30 -0
  374. package/src/types/WeeklyAnalytics.types.ts +44 -0
  375. package/src/types/activities.types.ts +90 -0
  376. package/src/types/admin.types.ts +30 -0
  377. package/src/types/all-points.types.ts +8 -0
  378. package/src/types/approvals.types.ts +45 -0
  379. package/src/types/balances.types.ts +20 -0
  380. package/src/types/big-intable.types.ts +3 -0
  381. package/src/types/bridging.types.ts +30 -0
  382. package/src/types/brotherhood-user.types.ts +13 -0
  383. package/src/types/cache.types.ts +42 -0
  384. package/src/types/circom-data.types.ts +120 -0
  385. package/src/types/coingecko.types.ts +216 -0
  386. package/src/types/commitments.types.ts +39 -0
  387. package/src/types/confirmation-request.types.ts +10 -0
  388. package/src/types/contacts.types.ts +6 -0
  389. package/src/types/crypto.types.ts +8 -0
  390. package/src/types/duneAPI.types.ts +9 -0
  391. package/src/types/eip5792.types.ts +31 -0
  392. package/src/types/ethereum-network.types.ts +70 -0
  393. package/src/types/external-action.types.ts +19 -0
  394. package/src/types/fee.types.ts +11 -0
  395. package/src/types/generatePoints.ts +14 -0
  396. package/src/types/hinkal.stake.types.ts +12 -0
  397. package/src/types/hinkal.types.ts +150 -0
  398. package/src/types/index.ts +50 -0
  399. package/src/types/kyc.types.ts +49 -0
  400. package/src/types/merch-order.types.ts +18 -0
  401. package/src/types/message.types.ts +6 -0
  402. package/src/types/mystery-boxes.types.ts +50 -0
  403. package/src/types/new-rewards.type.ts +181 -0
  404. package/src/types/offscreen.types.ts +8 -0
  405. package/src/types/presaleReferral.types.ts +4 -0
  406. package/src/types/proxy.types.ts +11 -0
  407. package/src/types/referral.types.ts +13 -0
  408. package/src/types/relayer.types.ts +16 -0
  409. package/src/types/remote-proof.types.ts +18 -0
  410. package/src/types/rewards.types.ts +53 -0
  411. package/src/types/routing.types.ts +7 -0
  412. package/src/types/sandbox.types.ts +246 -0
  413. package/src/types/session.types.ts +12 -0
  414. package/src/types/signature.types.ts +11 -0
  415. package/src/types/slippage.types.ts +3 -0
  416. package/src/types/snark.types.ts +43 -0
  417. package/src/types/tenderly.api.types.ts +200 -0
  418. package/src/types/token-prices.types.ts +8 -0
  419. package/src/types/token-with-id.types.ts +4 -0
  420. package/src/types/token.types.ts +86 -0
  421. package/src/types/transactions.types.ts +120 -0
  422. package/src/types/wc.types.ts +83 -0
  423. package/src/types/with-id.types.ts +1 -0
  424. package/src/webworker/performTaskWithWorker.ts +50 -0
  425. package/src/webworker/snarkjsWorker/snarkjs.d.ts +2 -0
  426. package/src/webworker/snarkjsWorker/snarkjsWorker.types.ts +18 -0
  427. package/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts +19 -0
  428. package/src/webworker/snarkjsWorker/snarkjsWorkerLogic.ts +90 -0
  429. package/src/webworker/utxoWorker/utxoWorker.types.ts +41 -0
  430. package/src/webworker/utxoWorker/utxoWorkerLauncher.ts +19 -0
  431. package/src/webworker/utxoWorker/utxoWorkerLogic.ts +107 -0
  432. package/src/webworker/viteWorkerURL.constant.ts +25 -0
  433. package/src/webworker/worker.registry.ts +11 -0
  434. package/src/webworker/worker.types.ts +35 -0
  435. package/src/webworker/workerErrorHandler.ts +10 -0
  436. package/src/webworker/workerFactory.ts +47 -0
  437. package/src/webworker/workerProxy.ts +88 -0
  438. package/src/webworker/zkProofWorker/zkProofWorker.types.ts +52 -0
  439. package/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts +19 -0
  440. package/src/webworker/zkProofWorker/zkProofWorkerLogic.ts +84 -0
  441. package/tsconfig.json +23 -0
  442. package/tsconfig.lib.json +10 -0
  443. package/tsconfig.spec.json +15 -0
  444. package/vite.config.ts +97 -0
  445. package/vite.config.workers.ts +51 -0
@@ -0,0 +1,746 @@
1
+ import { BigNumber, ethers } from 'ethers';
2
+ import {
3
+ type ApprovedUtxo,
4
+ ApprovedUtxoWithInteractionAddress,
5
+ EventType,
6
+ FeeStructure,
7
+ HinkalConfig,
8
+ type ParsedInLogicMetadata,
9
+ } from '../../types/hinkal.types';
10
+ import { type ContractMetadata, ContractType, EthereumNetwork } from '../../types/ethereum-network.types';
11
+ import type { EncryptedOutputWithSign } from '../../types/commitments.types';
12
+ import { ExternalActionId } from '../../types/external-action.types';
13
+ import { type IMultiThreadedUtxoUtils } from '../../types/IMultiThreadedUtxoUtils';
14
+ import { type RelayerTransaction } from '../../types/relayer.types';
15
+ import { type SignatureData } from '../../types/crypto.types';
16
+ import type { ERC20Token, TokenBalance, TokenChanges } from '../../types/token.types';
17
+
18
+ import { checkHinkalAccessToken, mintAccessToken } from '../../functions/web3/functionCalls/accessTokenCalls';
19
+ import { getShieldedBalance } from '../../functions/web3/events/getShieldedBalance';
20
+ import { UserKeys } from '../crypto-keys/keys';
21
+ import { type ClientAccessTokenSnapshotService } from '../snapshot/ClientAccessTokenSnapshotService';
22
+ import { type ClientCommitmentsSnapshotService } from '../snapshot/ClientCommitmentsSnapshotService';
23
+ import { type ClientNullifierSnapshotService } from '../snapshot/ClientNullifierSnapshotService';
24
+ import { type ClientApprovalsSnapshotService } from '../snapshot/ClientApprovalsSnapshotService';
25
+ import { type IProviderAdapter } from '../provider-adapter/IProviderAdapter';
26
+ import { hinkalDeposit, hinkalDepositForOther } from './hinkalDeposit';
27
+ import { hinkalSwap } from './hinkalSwap';
28
+ import { hinkalWithdraw } from './hinkalWithdraw';
29
+ import { type IHinkal } from './IHinkal';
30
+ import { resetMerkleTrees } from './resetMerkleTrees';
31
+ import { MerkleTree } from '../merkle-tree';
32
+ import { poseidonFunction } from '../../crypto';
33
+
34
+ import { networkRegistry } from '../../constants/chains.constants';
35
+ import { transactionErrorCodes } from '../../error-handling/error-codes.constants';
36
+ import { API, IAPI } from '../../API';
37
+ import { reloadPage } from '../../functions/utils/reloadPage';
38
+ import { MultiThreadedUtxoUtils } from '../MultiThreadedUtxoUtils/MultiThreadedUtxoUtils';
39
+ import { hinkalPrivateWallet } from './hinkalPrivateWallet';
40
+
41
+ // TODO: review and fix circular in kyc constants
42
+ import { supportedPassportLinks } from '../../constants/kyc.constants';
43
+ import { resetCache } from '../../functions/utils/cacheFunctions';
44
+ import { type ICacheDevice } from '../../types/ICacheDevice';
45
+ import { createCacheDevice } from '../../functions/utils/cacheDevice.utils';
46
+ import { getContractWithFetcherByChainId } from '../../functions/web3/getContractMetadata';
47
+ import { getRecipientInfo } from './hinkalGetRecipientInfo';
48
+ import { hinkalApprove } from './hinkalApprove';
49
+ import { hinkalInsideTransact } from './hinkalInsideTransact';
50
+ import {
51
+ getApprovedBalance,
52
+ getApprovedUtxos,
53
+ getApprovedUtxosForToken,
54
+ getMyApprovalAmountForInteraction,
55
+ } from '../../functions/web3/events/getApprovedBalance';
56
+ import {
57
+ checkExistingApprovalFromHinkal,
58
+ getBufferEntry,
59
+ getInteractionApprovals,
60
+ } from '../../functions/web3/functionCalls/inHinkalApprovalCalls';
61
+ import { hinkalSignSubAccount } from './hinkalSignSubAccount';
62
+ import { hinkalCheckTokenRegistry } from './hinkalCheckTokenRegistry';
63
+ import { hinkalActionReceive } from './hinkalActionReceive';
64
+ import { hinkalActionFundApproveAndTransact } from './hinkalActionFundApproveAndTransact';
65
+ import { privateTokensDB } from '../TokenDBs';
66
+ import { hinkalProoflessDeposit } from './hinkalProoflessDeposit';
67
+ import type { StealthAddressStructure, TypedData } from '../../types/circom-data.types';
68
+ import { hinkalProxySwap } from './hinkalProxySwap';
69
+ import { hinkalMultiSendPrivateRecipients } from './hinkalMultiSend';
70
+ import { isExtension } from '../../constants/vite.constants';
71
+ import { getErc20TokensForChain } from '../../functions/utils/erc20tokenFunctions';
72
+ import { hinkalTransfer } from './hinkalTransfer';
73
+ import { SubAccount } from '../../types/proxy.types';
74
+ import { AdminTransactionType } from '../../types/admin.types';
75
+
76
+ export class Hinkal<ConnectorType> implements IHinkal {
77
+ private providerAdapter?: IProviderAdapter<ConnectorType>;
78
+
79
+ public userKeys: UserKeys;
80
+
81
+ public readonly signingMessage: string = 'Login to Hinkal Protocol';
82
+
83
+ public merkleTreeHinkal: MerkleTree<bigint>;
84
+
85
+ public merkleTreeAccessToken: MerkleTree<bigint>;
86
+
87
+ public nullifiers: Set<string>;
88
+
89
+ public encryptedOutputs: EncryptedOutputWithSign[];
90
+
91
+ public approvals: Map<string, ApprovedUtxo[]>;
92
+
93
+ public commitmentsSnapshotService?: ClientCommitmentsSnapshotService;
94
+
95
+ public nullifierSnapshotService?: ClientNullifierSnapshotService;
96
+
97
+ public accessTokenSnapshotService?: ClientAccessTokenSnapshotService;
98
+
99
+ public approvalsSnapshotService?: ClientApprovalsSnapshotService;
100
+
101
+ public utxoUtils: IMultiThreadedUtxoUtils;
102
+
103
+ public cacheDevice: ICacheDevice;
104
+
105
+ public generateProofRemotely: boolean;
106
+
107
+ private disableMerkleTreeUpdates: boolean;
108
+
109
+ constructor(hinkalConfig?: HinkalConfig) {
110
+ this.userKeys = new UserKeys(undefined);
111
+ this.merkleTreeHinkal = MerkleTree.create(poseidonFunction, 0n);
112
+ this.merkleTreeAccessToken = MerkleTree.create(poseidonFunction, 0n);
113
+ this.nullifiers = new Set<string>();
114
+ this.encryptedOutputs = [];
115
+ this.approvals = new Map<string, ApprovedUtxo[]>();
116
+ this.generateProofRemotely = hinkalConfig?.generateProofRemotely ?? false;
117
+ this.utxoUtils = new MultiThreadedUtxoUtils();
118
+ this.cacheDevice = createCacheDevice(hinkalConfig);
119
+ this.disableMerkleTreeUpdates = hinkalConfig?.disableMerkleTreeUpdates ?? false;
120
+ }
121
+
122
+ public async initProviderAdapter(connector: ConnectorType, providerAdapter: IProviderAdapter<ConnectorType>) {
123
+ await this.updateProviderAdapter(providerAdapter); // 1) clean previous and set new hinkal provider 2) set listeners on it
124
+ this.providerAdapter?.initConnector(connector);
125
+ const chainId = await this.connectAndPatchProvider(connector); // 1) disconnect and release if connected 2)re-connect
126
+ await providerAdapter.init(chainId);
127
+ await this.setListeners();
128
+ }
129
+
130
+ public async initUserKeys(): Promise<void> {
131
+ this.userKeys = new UserKeys(await this.getProviderAdapter().signMessage(this.signingMessage));
132
+ }
133
+
134
+ public async initUserKeysWithPassword(password: string): Promise<void> {
135
+ this.userKeys = new UserKeys(password);
136
+ }
137
+
138
+ public async resetMerkle() {
139
+ if (this.disableMerkleTreeUpdates) return;
140
+ if (this.isSelectedNetworkSupported()) {
141
+ await resetMerkleTrees(this);
142
+ }
143
+ }
144
+
145
+ public getProviderAdapter() {
146
+ if (!this.providerAdapter) {
147
+ throw new Error('ProviderAdapter is not initialized');
148
+ }
149
+ return this.providerAdapter;
150
+ }
151
+
152
+ async waitForTransaction(transactionHash: string, confirmations = 1): Promise<boolean> {
153
+ const response = await this.providerAdapter?.waitForTransaction(transactionHash, confirmations);
154
+ return !!response;
155
+ }
156
+
157
+ getContractMetadata(contractType: ContractType, chainId?: number): ContractMetadata {
158
+ return this.getProviderAdapter().getContractMetadata(contractType, chainId);
159
+ }
160
+
161
+ getContract(contractType: ContractType, contractAddress = undefined, chainId?: number): ethers.Contract {
162
+ return this.getProviderAdapter().getContract(contractType, contractAddress, chainId);
163
+ }
164
+
165
+ getContractWithFetcherByChainId(
166
+ chainId: number,
167
+ contractType: ContractType,
168
+ contractAddress = undefined,
169
+ ): ethers.Contract {
170
+ return getContractWithFetcherByChainId(chainId, contractType, contractAddress);
171
+ }
172
+
173
+ async signMessage(message: string): Promise<string> {
174
+ const sig = await this.getProviderAdapter().signMessage(message);
175
+ return sig;
176
+ }
177
+
178
+ async signTypedData(
179
+ domain: ethers.TypedDataDomain,
180
+ types: Record<string, ethers.TypedDataField[]>,
181
+ value: Record<string, unknown>,
182
+ ): Promise<string> {
183
+ const sig = await this.getProviderAdapter().signTypedData(domain, types, value);
184
+ return sig;
185
+ }
186
+
187
+ async signWithSubAccount(
188
+ messageToSign: string | undefined,
189
+ typedData: TypedData | undefined,
190
+ subAccount: SubAccount,
191
+ ): Promise<string> {
192
+ return hinkalSignSubAccount(this, messageToSign, typedData, subAccount);
193
+ }
194
+
195
+ getContractWithSigner(contract: ContractType, contractAddress = ''): ethers.Contract {
196
+ return this.getProviderAdapter().getContractWithSigner(contract, contractAddress);
197
+ }
198
+
199
+ getContractWithFetcher(contract: ContractType, contractAddress = ''): ethers.Contract {
200
+ return this.getProviderAdapter().getContractWithFetcher(contract, contractAddress);
201
+ }
202
+
203
+ getContractWithFetcherForEthereum(contract: ContractType, address: string): ethers.Contract {
204
+ return this.getProviderAdapter().getContractWithFetcherForEthereum(contract, address);
205
+ }
206
+
207
+ isSelectedNetworkSupported(): boolean {
208
+ return !!networkRegistry[this.getCurrentChainId()];
209
+ }
210
+
211
+ async switchNetwork(network: EthereumNetwork) {
212
+ try {
213
+ await this.getProviderAdapter().switchNetwork(network);
214
+ } catch {
215
+ throw new Error(transactionErrorCodes.FAILED_TO_SWITCH_NETWORKS);
216
+ }
217
+ }
218
+
219
+ async switchAccount(signer: ethers.Signer) {
220
+ await this.getProviderAdapter().switchAccount(signer);
221
+ }
222
+
223
+ getCurrentChainId(): number {
224
+ const { chainId } = this.getProviderAdapter();
225
+ if (!chainId) throw new Error('Illegal State: no chainId');
226
+
227
+ return chainId;
228
+ }
229
+
230
+ getSelectedNetwork(): EthereumNetwork | undefined {
231
+ return this.providerAdapter?.getSelectedNetwork();
232
+ }
233
+
234
+ isPermitterAvailable(): boolean {
235
+ return this.getProviderAdapter().isPermitterAvailable();
236
+ }
237
+
238
+ async connectAndPatchProvider(connector: ConnectorType): Promise<number> {
239
+ const chainId = await this.getProviderAdapter().connectAndPatchProvider(connector);
240
+ return chainId;
241
+ }
242
+
243
+ async disconnectFromConnector() {
244
+ await this.getProviderAdapter().disconnectFromConnector();
245
+ }
246
+
247
+ async updateProviderAdapter(providerAdapter: IProviderAdapter): Promise<void> {
248
+ try {
249
+ if (this.providerAdapter) this.providerAdapter.release();
250
+ this.providerAdapter = providerAdapter;
251
+ } catch (err) {
252
+ console.error(err);
253
+ throw Error('updateProviderAdapter failed, please try again.');
254
+ }
255
+ }
256
+
257
+ async setListeners(): Promise<void> {
258
+ this.providerAdapter?.setChainEventListener({
259
+ onAccountChanged: () => {
260
+ this.onAccountChanged();
261
+ },
262
+ onChainChanged: (chainId?: number) => {
263
+ this.onChainChanged(chainId);
264
+ },
265
+ });
266
+ }
267
+
268
+ private async onAccountChanged() {
269
+ await this.getProviderAdapter().onAccountChanged();
270
+ const eventType = EventType.AccountChanged;
271
+ if (typeof document !== 'undefined') {
272
+ document?.dispatchEvent(new Event(eventType));
273
+ } else {
274
+ process?.emit('message', eventType, undefined);
275
+ }
276
+ }
277
+
278
+ private async onChainChanged(chainId?: number) {
279
+ // case of network switch
280
+ if (chainId) {
281
+ await this.getProviderAdapter().onChainChanged(chainId);
282
+ const eventType = EventType.NetworkChange;
283
+ if (typeof document !== 'undefined') {
284
+ document.dispatchEvent(new Event(eventType));
285
+ } else {
286
+ process?.emit('message', eventType, undefined);
287
+ }
288
+ } // case of disconnect
289
+ else {
290
+ await this.disconnectFromConnector();
291
+ reloadPage();
292
+ }
293
+ }
294
+
295
+ public async monitorConnectedAddress(): Promise<void> {
296
+ await API.monitor(await this.getEthereumAddress(), this.getCurrentChainId());
297
+ }
298
+
299
+ async getBalances(
300
+ chainId: number,
301
+ passedShieldedPrivateKey: string,
302
+ passedShieldedPublicKey: string,
303
+ ethAddress: string,
304
+ resetCacheBefore = false,
305
+ updateTokensListBefore?: boolean,
306
+ ): Promise<Map<string, TokenBalance>> {
307
+ return getShieldedBalance(
308
+ this,
309
+ chainId,
310
+ passedShieldedPrivateKey,
311
+ passedShieldedPublicKey,
312
+ ethAddress,
313
+ resetCacheBefore,
314
+ this.generateProofRemotely,
315
+ updateTokensListBefore,
316
+ );
317
+ }
318
+
319
+ async getApprovedBalances(
320
+ resetCacheBefore = false,
321
+ updateTokensListBefore = false,
322
+ ): Promise<Map<string, TokenBalance>> {
323
+ return getApprovedBalance(this, resetCacheBefore, updateTokensListBefore);
324
+ }
325
+
326
+ async getTotalBalance(
327
+ _chainId?: number,
328
+ _userKeys?: UserKeys,
329
+ _ethAddress?: string,
330
+ resetCacheBefore = false,
331
+ updateTokensListBefore?: boolean,
332
+ ): Promise<TokenBalance[]> {
333
+ const chainId = _chainId ?? this.getCurrentChainId();
334
+ const ethAddress = _ethAddress ?? (await this.getEthereumAddress());
335
+ const userKeys = _userKeys ?? this.userKeys;
336
+
337
+ const shieldedBalances = await this.getBalances(
338
+ chainId,
339
+ userKeys.getShieldedPrivateKey(),
340
+ userKeys.getShieldedPublicKey(),
341
+ ethAddress,
342
+ resetCacheBefore,
343
+ updateTokensListBefore,
344
+ );
345
+ // TODO: use the same mechanism as getBalances for handling race conditions
346
+ const approvedBalances = await this.getApprovedBalances(resetCacheBefore, updateTokensListBefore);
347
+
348
+ const tokenRegistry = isExtension
349
+ ? await privateTokensDB.getPrivateTokens(chainId, ethAddress)
350
+ : getErc20TokensForChain(chainId);
351
+ const totalBalances: TokenBalance[] = [];
352
+
353
+ tokenRegistry.forEach((token) => {
354
+ const tokenAddress = token.erc20TokenAddress.toLowerCase();
355
+ const shieldedBalance = shieldedBalances.get(tokenAddress);
356
+ const approvedBalance = approvedBalances.get(tokenAddress);
357
+
358
+ const combinedBalance: TokenBalance = {
359
+ token,
360
+ balance: (shieldedBalance?.balance ?? 0n) + (approvedBalance?.balance ?? 0n),
361
+ timestamp: shieldedBalance?.timestamp || approvedBalance?.timestamp || '0',
362
+ nfts: shieldedBalance?.nfts || [],
363
+ };
364
+
365
+ totalBalances.push(combinedBalance);
366
+ });
367
+
368
+ return totalBalances;
369
+ }
370
+
371
+ getSupportedPassportLinks(): string[] {
372
+ return supportedPassportLinks;
373
+ }
374
+
375
+ checkAccessToken(): Promise<boolean> {
376
+ return checkHinkalAccessToken(this);
377
+ }
378
+
379
+ async mintHinkalAccessToken(signatureData: SignatureData, fromWallet?: boolean): Promise<ethers.ContractTransaction> {
380
+ return mintAccessToken(this, signatureData, fromWallet);
381
+ }
382
+
383
+ async getHinkalTreeRootHash() {
384
+ const hinkalContract = this.getContractWithFetcher(ContractType.HinkalContract);
385
+ // eslint-disable-next-line @typescript-eslint/dot-notation
386
+ return hinkalContract['getRootHash']();
387
+ }
388
+
389
+ async getAccessTokenTreeRootHash() {
390
+ const accessToken = this.getContractWithFetcher(ContractType.AccessTokenContract);
391
+ // eslint-disable-next-line @typescript-eslint/dot-notation
392
+ return accessToken['getRootHash']();
393
+ }
394
+
395
+ async resetMerkleTreesIfNecessary() {
396
+ if (!this.isSelectedNetworkSupported()) throw new Error(transactionErrorCodes.UNSUPPORTED_NETWORK);
397
+ const [hinkalRootHash, accessTokenRootHash] = await Promise.all([
398
+ this.getHinkalTreeRootHash(),
399
+ this.getAccessTokenTreeRootHash(),
400
+ ]);
401
+ if (
402
+ (hinkalRootHash as BigNumber).toBigInt() !== this.merkleTreeHinkal.getRootHash() ||
403
+ (accessTokenRootHash as BigNumber).toBigInt() !== this.merkleTreeAccessToken.getRootHash()
404
+ ) {
405
+ console.log('resetting merkle tree in resetMerkleTreesIfNecessary');
406
+ await this.resetMerkle();
407
+ }
408
+ }
409
+
410
+ async getEventsFromHinkal() {
411
+ await Promise.all([
412
+ this.accessTokenSnapshotService?.retrieveEventsFromLatestBlock(),
413
+ this.commitmentsSnapshotService?.retrieveEventsFromLatestBlock(),
414
+ this.nullifierSnapshotService?.retrieveEventsFromLatestBlock(),
415
+ this.approvalsSnapshotService?.retrieveEventsFromLatestBlock(),
416
+ ]);
417
+ }
418
+
419
+ getEthereumAddress() {
420
+ return this.getProviderAdapter().getAddress();
421
+ }
422
+
423
+ async getRandomRelay(markAsPending = false) {
424
+ const relayObject = await API.getIdleRelay(this.getCurrentChainId(), markAsPending);
425
+ return relayObject.relay;
426
+ }
427
+
428
+ getGasPrice(): Promise<bigint> {
429
+ if (!this.providerAdapter?.chainId) throw new Error('Illegal State of providerAdapter in Hinkal: no chainId');
430
+ return this.providerAdapter.getGasPrice();
431
+ }
432
+
433
+ public getAPI(): IAPI {
434
+ return API;
435
+ }
436
+
437
+ public resetCache() {
438
+ resetCache(this, this.getCurrentChainId(), this.userKeys.getShieldedPublicKey());
439
+ }
440
+
441
+ public snapshotsClearInterval() {
442
+ this.commitmentsSnapshotService?.intervalClear();
443
+ this.accessTokenSnapshotService?.intervalClear();
444
+ this.nullifierSnapshotService?.intervalClear();
445
+ this.approvalsSnapshotService?.intervalClear();
446
+ }
447
+
448
+ public checkTokenRegistry(erc20Addresses: string[], amountChanges: bigint[]): Promise<boolean> {
449
+ const hinkalHelper = this.getContractWithFetcher(ContractType.HinkalHelperContract);
450
+ return hinkalCheckTokenRegistry(hinkalHelper, erc20Addresses, amountChanges);
451
+ }
452
+
453
+ public getRecipientInfo(extendedInfo = false): string {
454
+ return getRecipientInfo(this, extendedInfo);
455
+ }
456
+
457
+ public async getInteractionApprovals(interactionAddress: string): Promise<ApprovedUtxo[]> {
458
+ const approvedUtxos = await getInteractionApprovals(this, interactionAddress);
459
+ return approvedUtxos;
460
+ }
461
+
462
+ public getApprovedUtxos(resetCacheBefore = false): ApprovedUtxoWithInteractionAddress[] {
463
+ return getApprovedUtxos(this, resetCacheBefore);
464
+ }
465
+
466
+ public getApprovedUtxosForToken(
467
+ erc20Address: string,
468
+ resetCacheBefore = false,
469
+ ): ApprovedUtxoWithInteractionAddress[] {
470
+ return getApprovedUtxosForToken(this, erc20Address, resetCacheBefore);
471
+ }
472
+
473
+ public getMyApprovalAmountForInteraction(interactionAddress: string, tokenAddress: string): bigint {
474
+ const approvedAmount = getMyApprovalAmountForInteraction(this, interactionAddress, tokenAddress);
475
+ return approvedAmount;
476
+ }
477
+
478
+ public async checkExistingApprovalFromHinkal(erc20Address: string, interactionAddress: string): Promise<bigint> {
479
+ const approvalAmount = await checkExistingApprovalFromHinkal(this, erc20Address, interactionAddress);
480
+ return approvalAmount;
481
+ }
482
+
483
+ public async getBufferEntry(approveTo: string, tokenAddress: string, inHinkalAddress: bigint): Promise<bigint> {
484
+ const amount = getBufferEntry(this, approveTo, tokenAddress, inHinkalAddress);
485
+ return amount;
486
+ }
487
+
488
+ async deposit(erc20Tokens: ERC20Token[], amountChanges: bigint[]): Promise<ethers.ContractTransaction> {
489
+ return hinkalDeposit(this, erc20Tokens, amountChanges);
490
+ }
491
+
492
+ async depositForOther(
493
+ erc20Tokens: ERC20Token[],
494
+ amountChanges: bigint[],
495
+ recipientInfo: string,
496
+ ): Promise<ethers.ContractTransaction> {
497
+ return hinkalDepositForOther(this, erc20Tokens, amountChanges, recipientInfo);
498
+ }
499
+
500
+ async prooflessDeposit(
501
+ erc20Tokens: ERC20Token[],
502
+ amountChanges: bigint[],
503
+ stealthAddressStructures?: StealthAddressStructure[],
504
+ ): Promise<ethers.ContractTransaction> {
505
+ return hinkalProoflessDeposit(this, erc20Tokens, amountChanges, stealthAddressStructures);
506
+ }
507
+
508
+ async transfer(
509
+ erc20Tokens: ERC20Token[],
510
+ amountChanges: bigint[],
511
+ recipientAddress: string,
512
+ feeToken?: string,
513
+ feeStructureOverride?: FeeStructure,
514
+ action?: AdminTransactionType,
515
+ onlyGasEstimate = false,
516
+ ): Promise<RelayerTransaction | bigint> {
517
+ return hinkalTransfer(
518
+ this,
519
+ erc20Tokens,
520
+ amountChanges,
521
+ recipientAddress,
522
+ feeToken,
523
+ feeStructureOverride,
524
+ action,
525
+ onlyGasEstimate,
526
+ );
527
+ }
528
+
529
+ async withdraw(
530
+ erc20Tokens: ERC20Token[],
531
+ deltaAmounts: bigint[],
532
+ recipientAddress: string,
533
+ isRelayerOff: boolean,
534
+ feeToken?: string,
535
+ feeStructureOverride?: FeeStructure,
536
+ action?: AdminTransactionType,
537
+ onlyGasEstimate = false,
538
+ ): Promise<ethers.ContractTransaction | RelayerTransaction | bigint> {
539
+ return hinkalWithdraw(
540
+ this,
541
+ erc20Tokens,
542
+ deltaAmounts,
543
+ recipientAddress,
544
+ isRelayerOff,
545
+ feeToken,
546
+ feeStructureOverride,
547
+ action,
548
+ onlyGasEstimate,
549
+ );
550
+ }
551
+
552
+ async swap(
553
+ erc20Tokens: ERC20Token[],
554
+ deltaAmounts: bigint[],
555
+ externalActionId: ExternalActionId,
556
+ swapData: string,
557
+ feeToken?: string,
558
+ feeStructureOverride?: FeeStructure,
559
+ action?: AdminTransactionType,
560
+ onlyGasEstimate = false,
561
+ withPrivateMempool = false,
562
+ ): Promise<RelayerTransaction | bigint> {
563
+ return hinkalSwap(
564
+ this,
565
+ erc20Tokens,
566
+ deltaAmounts,
567
+ externalActionId,
568
+ swapData,
569
+ feeToken,
570
+ feeStructureOverride,
571
+ action,
572
+ onlyGasEstimate,
573
+ withPrivateMempool,
574
+ );
575
+ }
576
+
577
+ async actionReceive(
578
+ erc20Tokens: ERC20Token[],
579
+ deltaAmounts: bigint[],
580
+ feeToken?: string,
581
+ feeStructureOverride?: FeeStructure,
582
+ subAccount?: SubAccount,
583
+ action?: AdminTransactionType,
584
+ onlyGasEstimate = false,
585
+ ): Promise<RelayerTransaction | bigint> {
586
+ return hinkalActionReceive(
587
+ this,
588
+ erc20Tokens,
589
+ deltaAmounts,
590
+ feeToken,
591
+ feeStructureOverride,
592
+ subAccount,
593
+ action,
594
+ onlyGasEstimate,
595
+ );
596
+ }
597
+
598
+ async actionFundApproveAndTransact(
599
+ tokenChanges: TokenChanges<bigint>[],
600
+ subAccount: SubAccount,
601
+ spenderAddress?: string,
602
+ to?: string,
603
+ callDataString?: string,
604
+ value?: bigint,
605
+ feeToken?: string,
606
+ feeStructureOverride?: FeeStructure,
607
+ autoDepositBack = false,
608
+ maxGasInDollar?: string,
609
+ action?: AdminTransactionType,
610
+ onlyGasEstimate?: boolean,
611
+ ): Promise<RelayerTransaction | bigint> {
612
+ return hinkalActionFundApproveAndTransact(
613
+ this,
614
+ tokenChanges,
615
+ subAccount,
616
+ spenderAddress,
617
+ to,
618
+ callDataString,
619
+ value,
620
+ feeToken,
621
+ feeStructureOverride,
622
+ autoDepositBack,
623
+ maxGasInDollar,
624
+ action,
625
+ onlyGasEstimate,
626
+ );
627
+ }
628
+
629
+ async actionPrivateWallet(
630
+ erc20Addresses: string[],
631
+ deltaAmounts: bigint[],
632
+ onChainCreation: boolean[],
633
+ ops: string[],
634
+ emporiumTokenChanges: TokenChanges<bigint>[],
635
+ subAccount: SubAccount,
636
+ feeToken?: string,
637
+ feeStructureOverride?: FeeStructure,
638
+ relayOverride?: string,
639
+ autoDepositBack = false,
640
+ maxGasInDollar?: string,
641
+ action?: AdminTransactionType,
642
+ onlyGasEstimate = false,
643
+ ): Promise<RelayerTransaction | bigint> {
644
+ return hinkalPrivateWallet(
645
+ this,
646
+ erc20Addresses,
647
+ deltaAmounts,
648
+ onChainCreation,
649
+ ops,
650
+ emporiumTokenChanges,
651
+ subAccount,
652
+ feeToken,
653
+ feeStructureOverride,
654
+ relayOverride,
655
+ autoDepositBack,
656
+ maxGasInDollar,
657
+ action,
658
+ onlyGasEstimate,
659
+ );
660
+ }
661
+
662
+ async approve(
663
+ erc20Addresses: string[],
664
+ amount: bigint,
665
+ approveTo: string,
666
+ feeToken?: string,
667
+ feeStructureOverride?: FeeStructure,
668
+ onlyGasEstimate = false,
669
+ ): Promise<RelayerTransaction | bigint> {
670
+ return hinkalApprove(this, erc20Addresses, amount, approveTo, feeToken, feeStructureOverride, onlyGasEstimate);
671
+ }
672
+
673
+ async hinkalInsideTransact(
674
+ erc20Addresses: string[],
675
+ deltaChanges: bigint[],
676
+ approvalChanges: bigint[],
677
+ externalAddress: string,
678
+ externalActionMetadata: string,
679
+ parsedInLogicMetadata: ParsedInLogicMetadata,
680
+ feeToken?: string,
681
+ feeStructureOverride?: FeeStructure,
682
+ action?: AdminTransactionType,
683
+ onlyGasEstimate = false,
684
+ ): Promise<RelayerTransaction | bigint> {
685
+ return hinkalInsideTransact(
686
+ this,
687
+ erc20Addresses,
688
+ deltaChanges,
689
+ approvalChanges,
690
+ externalAddress,
691
+ externalActionMetadata,
692
+ parsedInLogicMetadata,
693
+ feeToken,
694
+ feeStructureOverride,
695
+ action,
696
+ onlyGasEstimate,
697
+ );
698
+ }
699
+
700
+ async proxySwap(
701
+ erc20Tokens: ERC20Token[],
702
+ deltaAmounts: bigint[],
703
+ externalActionId: ExternalActionId,
704
+ swapData: string,
705
+ isTheSameChainSwap: boolean,
706
+ subAccount: SubAccount,
707
+ feeToken?: string,
708
+ feeStructureOverride?: FeeStructure,
709
+ autoDepositBack = false,
710
+ maxGasInDollar?: string,
711
+ action?: AdminTransactionType,
712
+ onlyGasEstimate = false,
713
+ ): Promise<RelayerTransaction | bigint> {
714
+ return hinkalProxySwap(
715
+ this,
716
+ erc20Tokens,
717
+ deltaAmounts,
718
+ externalActionId,
719
+ swapData,
720
+ isTheSameChainSwap,
721
+ subAccount,
722
+ feeToken,
723
+ feeStructureOverride,
724
+ autoDepositBack,
725
+ maxGasInDollar,
726
+ action,
727
+ onlyGasEstimate,
728
+ );
729
+ }
730
+
731
+ async multiSendPrivateRecipients(
732
+ erc20Tokens: ERC20Token[],
733
+ amounts: bigint[],
734
+ extendedRecipientInfos?: string[],
735
+ ): Promise<ethers.ContractTransaction> {
736
+ return hinkalMultiSendPrivateRecipients(this, erc20Tokens, amounts, extendedRecipientInfos);
737
+ }
738
+
739
+ public areMerkleTreeUpdatesDisabled() {
740
+ return this.disableMerkleTreeUpdates;
741
+ }
742
+
743
+ public updateMerkleTreeUpdates(value: boolean) {
744
+ this.disableMerkleTreeUpdates = value;
745
+ }
746
+ }