@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,253 @@
1
+ import { CIRCOM_MERKLE_LENGTH, MERKLE_LEVELS } from '../../constants/protocol.constants';
2
+ import { logError } from '../../error-handling/logError';
3
+ import { MerkleTreeIncompleteError } from './MerkleTreeIncompleteError';
4
+
5
+ export type MerkleTreeJson = {
6
+ tree: Record<string, string>;
7
+ reverseTree?: Record<string, string>;
8
+ count: string;
9
+ index: string;
10
+ };
11
+
12
+ /**
13
+ * Merkle tree implementation that allows the user to insert in specific places in the tree
14
+ *
15
+ */
16
+ export class MerkleTree<T> {
17
+ /**
18
+ * the map where the items are stored
19
+ */
20
+ private readonly tree;
21
+
22
+ /**
23
+ * amount of elements inserted inside the bottom row of the tree
24
+ */
25
+ private count: bigint;
26
+
27
+ /**
28
+ * the maximum index inserted into the tree
29
+ * used together with count to make sure that the merkle tree is complete.
30
+ * meaning that there aren't any missing elements between getStartIndex() and index
31
+ */
32
+ private index: bigint;
33
+
34
+ private reverseTree;
35
+
36
+ public static createWithData<T>(
37
+ tree: Map<bigint, T>,
38
+ reverseTree: Map<T, bigint> | undefined,
39
+ index: bigint,
40
+ count: bigint,
41
+ hashFunction: (a: T, b: T) => T,
42
+ levels: bigint,
43
+ defaultNodeValue: T,
44
+ ): MerkleTree<T> {
45
+ const merkleTree = new MerkleTree(hashFunction, levels, defaultNodeValue, tree, reverseTree, index, count);
46
+ return merkleTree;
47
+ }
48
+
49
+ /**
50
+ * @param hashFunction the hashFunction used to fill the upper layers of the merkle tree
51
+ * @param levels the amount of layers in the merkle tree
52
+ * @param defaultNodeValue the default value of an empty node in the merkle tree
53
+ */
54
+ public static create<T>(
55
+ hashFunction: (a: T, b: T) => T,
56
+ defaultNodeValue: T,
57
+ levels: bigint = MERKLE_LEVELS,
58
+ ): MerkleTree<T> {
59
+ return new MerkleTree<T>(hashFunction, levels, defaultNodeValue);
60
+ }
61
+
62
+ private createReverseTree() {
63
+ const reverseTree = new Map<T, bigint>();
64
+
65
+ for (let i = this.getStartIndex(); i < this.getStartIndex() + this.count; i += 1n) {
66
+ const item = this.tree.get(i);
67
+ if (item !== undefined) reverseTree.set(item, i);
68
+ }
69
+
70
+ return reverseTree;
71
+ }
72
+
73
+ private constructor(
74
+ private hashFunction: (a: T, b: T) => T,
75
+ private levels: bigint,
76
+ private defaultNodeValue: T,
77
+ tree?: Map<bigint, T>,
78
+ reverseTree?: Map<T, bigint>,
79
+ index?: bigint,
80
+ count?: bigint,
81
+ ) {
82
+ this.tree = tree ?? new Map<bigint, T>();
83
+ this.count = count ?? 0n;
84
+ this.index = index ?? 2n ** (levels - 1n);
85
+ if (reverseTree) this.reverseTree = reverseTree;
86
+ else this.reverseTree = this.createReverseTree();
87
+ }
88
+
89
+ /**
90
+ * get starting nodeIndex from which inserts are allowed
91
+ */
92
+ public getStartIndex() {
93
+ return 2n ** (this.levels - 1n);
94
+ }
95
+
96
+ /**
97
+ * implementation of logarithm2 function from merkle contract
98
+ */
99
+ logarithm2(a: bigint) {
100
+ let i = 0n;
101
+ while (2n ** i < a) i += 1n;
102
+ return i;
103
+ }
104
+
105
+ bigIntMax(a: bigint, b: bigint) {
106
+ return a > b ? a : b;
107
+ }
108
+
109
+ private forceInsert(value: T, nodeIndex: bigint) {
110
+ if (nodeIndex < this.getStartIndex()) {
111
+ throw new RangeError();
112
+ }
113
+
114
+ this.tree.set(nodeIndex, value);
115
+ this.reverseTree.set(value, nodeIndex);
116
+
117
+ const fullCount = this.index - this.getStartIndex();
118
+ const twoPower = this.logarithm2(fullCount);
119
+ let currentNodeIndex = nodeIndex;
120
+ for (let i = 1n; i <= twoPower; i += 1n) {
121
+ currentNodeIndex /= 2n;
122
+ const result = this.hashFunction(
123
+ this.tree.get(currentNodeIndex * 2n) || this.defaultNodeValue,
124
+ this.tree.get(currentNodeIndex * 2n + 1n) || this.defaultNodeValue,
125
+ );
126
+ this.tree.set(currentNodeIndex, result);
127
+ }
128
+ }
129
+
130
+ /**
131
+ * insert value into the merkle tree
132
+ * @param value the value to insert
133
+ * @param nodeIndex the index to insert the value, you can get starting index from getStartIndex()
134
+ * @return true - if added, false - if already exists
135
+ * @throws will throw RangeError if nodeIndex is less than getStartIndex()
136
+ */
137
+ insert(value: T, nodeIndex: bigint): boolean {
138
+ let hasIndex = false;
139
+ if (this.tree.has(nodeIndex)) {
140
+ hasIndex = true;
141
+ logError(`Editing commitment index: ${nodeIndex} `);
142
+ }
143
+ if (!hasIndex) {
144
+ this.count += 1n;
145
+ }
146
+ this.index = this.bigIntMax(this.index, nodeIndex + 1n); // if you plugged after index, update index, if you plugged before than keep index
147
+
148
+ this.forceInsert(value, nodeIndex);
149
+ return true;
150
+ }
151
+
152
+ remove(nodeIndex: bigint) {
153
+ this.forceInsert(this.defaultNodeValue, nodeIndex);
154
+ }
155
+
156
+ private completenessCheck() {
157
+ if (this.count !== this.index - this.getStartIndex()) {
158
+ throw new MerkleTreeIncompleteError();
159
+ }
160
+ }
161
+
162
+ /**
163
+ * get root hash of the merkle tree
164
+ * @returns the hash, if the merkle tree is empty, will return
165
+ * @throws will throw MerkleTreeIncompleteError if there are missing elements in the tree
166
+ */
167
+ getRootHash() {
168
+ this.completenessCheck();
169
+ for (let i = 1n; i < 2n ** this.levels; i *= 2n) {
170
+ if (this.tree.get(i)) {
171
+ return this.tree.get(i);
172
+ }
173
+ }
174
+ return this.defaultNodeValue;
175
+ }
176
+
177
+ getMerkleData() {
178
+ this.completenessCheck();
179
+ return new Map<bigint, T>(this.tree);
180
+ }
181
+
182
+ getSiblingIndex(index: bigint) {
183
+ if (index === 1n) return 1n;
184
+ return index % 2n === 1n ? index - 1n : index + 1n;
185
+ }
186
+
187
+ /**
188
+ * get sibling hashes needed by main.circom
189
+ * @throws will throw MerkleTreeIncompleteError if there are missing elements in the tree
190
+ */
191
+ getSiblingHashesForVerification(item: T) {
192
+ this.completenessCheck();
193
+ let index = this.reverseTree.get(item);
194
+
195
+ if (index === undefined) return new Array<bigint>(Number(CIRCOM_MERKLE_LENGTH)).fill(0n);
196
+
197
+ const hashes: T[] = [];
198
+
199
+ while (index !== 0n) {
200
+ hashes.push(this.tree.get(this.getSiblingIndex(index)) || this.defaultNodeValue);
201
+ index /= 2n;
202
+ }
203
+
204
+ return hashes.slice(0, CIRCOM_MERKLE_LENGTH);
205
+ }
206
+
207
+ /**
208
+ * get item's sibling hashes side
209
+ * @returns sibling's indexes
210
+ * @throws will throw MerkleTreeIncompleteError if there are missing elements in the tree
211
+ */
212
+ getSiblingSides(item: T) {
213
+ this.completenessCheck();
214
+ let index = this.reverseTree.get(item);
215
+
216
+ if (index === undefined) return new Array<bigint>(Number(CIRCOM_MERKLE_LENGTH)).fill(0n);
217
+
218
+ const siblingSides: bigint[] = [];
219
+
220
+ while (index !== 0n) {
221
+ const value = index % 2n === 0n ? 0n : 1n; // left = 0, right = 1
222
+ siblingSides.push(value);
223
+ index /= 2n;
224
+ }
225
+ return siblingSides.slice(0, CIRCOM_MERKLE_LENGTH);
226
+ }
227
+
228
+ public toJSON(): MerkleTreeJson {
229
+ const { tree, reverseTree, count, index } = this;
230
+ return {
231
+ tree: Object.fromEntries(tree),
232
+ reverseTree: Object.fromEntries(reverseTree),
233
+ count: count.toString(),
234
+ index: index.toString(),
235
+ };
236
+ }
237
+
238
+ public clone(): MerkleTree<T> {
239
+ return MerkleTree.createWithData(
240
+ new Map(this.tree),
241
+ new Map(this.reverseTree),
242
+ this.index,
243
+ this.count,
244
+ this.hashFunction,
245
+ this.levels,
246
+ this.defaultNodeValue,
247
+ );
248
+ }
249
+
250
+ public getIndex(): bigint {
251
+ return this.index;
252
+ }
253
+ }
@@ -0,0 +1,6 @@
1
+ export class MerkleTreeIncompleteError extends Error {
2
+ constructor() {
3
+ super('Merkle tree is incomplete');
4
+ this.name = 'MerkleTreeIncompleteError';
5
+ }
6
+ }
@@ -0,0 +1,24 @@
1
+ import { randomBigInt } from '../../functions/web3/etherFunctions';
2
+ import { poseidonFunction } from '../../crypto/poseidon';
3
+ import { UserKeys } from '../crypto-keys/keys';
4
+ import { MerkleTree } from './MerkleTree';
5
+
6
+ export const getPatchedAccessTokenMerkleTree = (
7
+ merkleTreeAccessToken: MerkleTree<bigint>,
8
+ userKeys: UserKeys,
9
+ patchAccessTokenMerkleTree: boolean,
10
+ kycRequired: boolean,
11
+ ) => {
12
+ if (!kycRequired || patchAccessTokenMerkleTree) {
13
+ const tree = MerkleTree.create(poseidonFunction, 0n);
14
+ tree.insert(BigInt(userKeys.getAccessKey()), tree.getStartIndex());
15
+ // insert additional element in merkle tree to obsfucate access key
16
+ // if we don't do this the transaction of users can be tracked very easily
17
+ // this shouldn't be done if kyc is required
18
+ if (!kycRequired) {
19
+ tree.insert(randomBigInt(31), tree.getStartIndex() + 1n);
20
+ }
21
+ return tree;
22
+ }
23
+ return merkleTreeAccessToken;
24
+ };
@@ -0,0 +1,3 @@
1
+ export * from './MerkleTree';
2
+ export * from './getPatchedAccessTokenMerkleTree';
3
+ export * from './MerkleTreeIncompleteError';
@@ -0,0 +1,80 @@
1
+ /* eslint-disable @typescript-eslint/dot-notation */
2
+ import { presaleABI, presaleContractInfoByChain } from '../../constants/presale.constants';
3
+ import { ERC20Token } from '../../types/token.types';
4
+ import { ethers } from 'ethers';
5
+
6
+ export class PresaleContractWrapper {
7
+ contract: ethers.Contract;
8
+
9
+ eventsFrom: number;
10
+
11
+ constructor(signerOrProvider: ethers.Signer | ethers.providers.Provider, chainId: number) {
12
+ const { address, eventsFrom } = presaleContractInfoByChain[chainId];
13
+ this.contract = new ethers.Contract(address, presaleABI, signerOrProvider);
14
+ this.eventsFrom = eventsFrom;
15
+ }
16
+
17
+ deposit(token: ERC20Token, amount: bigint, minHINK: bigint): Promise<ethers.ContractTransaction> {
18
+ return this.contract['deposit'](token.erc20TokenAddress, amount, minHINK);
19
+ }
20
+
21
+ withdraw(token: string, amount: bigint): Promise<ethers.ContractTransaction> {
22
+ return this.contract['withdraw'](token, amount);
23
+ }
24
+
25
+ moveToNextStage(overrides?: ethers.Overrides): Promise<ethers.ContractTransaction> {
26
+ return this.contract['moveToNextStage'](overrides || {});
27
+ }
28
+
29
+ async estimateMoveToNextStageGas(): Promise<bigint> {
30
+ return (await this.contract.estimateGas['moveToNextStage']()).toBigInt();
31
+ }
32
+
33
+ async getTotalDeposit(): Promise<bigint> {
34
+ const result: ethers.BigNumber = await this.contract['totalDeposit']();
35
+ return result.toBigInt();
36
+ }
37
+
38
+ async getDeposits(depositor: string, token: ERC20Token): Promise<bigint> {
39
+ const result: ethers.BigNumber = await this.contract['deposits'](depositor, token.erc20TokenAddress);
40
+ return result.toBigInt();
41
+ }
42
+
43
+ async getTotalHINK(depositor: string): Promise<bigint> {
44
+ const result: ethers.BigNumber = await this.contract['totalHINK'](depositor);
45
+ return result.toBigInt();
46
+ }
47
+
48
+ async getCurrentPresaleStageIndex(): Promise<number> {
49
+ const presaleStageIndex = await this.contract['currentPresaleStageIndex']();
50
+ return Number(presaleStageIndex);
51
+ }
52
+
53
+ async getCurrentMaxDepositAmount(): Promise<bigint> {
54
+ const currentMaxDepositAmount: ethers.BigNumber = await this.contract['currentMaxDepositAmount']();
55
+ return currentMaxDepositAmount.toBigInt();
56
+ }
57
+
58
+ async currentPresaleStage(): Promise<{
59
+ amountToRaise: bigint;
60
+ priceMultiplier: bigint;
61
+ }> {
62
+ const [amountToRaiseBN, priceMultiplierBN] = await this.contract['currentPresaleStage']();
63
+ const [amountToRaise, priceMultiplier] = [amountToRaiseBN, priceMultiplierBN].map(BigInt);
64
+ return { amountToRaise, priceMultiplier };
65
+ }
66
+
67
+ async calculateHINK(amount: bigint): Promise<bigint> {
68
+ const amountHINKBN: ethers.BigNumber = await this.contract['calculateHINK'](amount);
69
+ const amountHINK = amountHINKBN.toBigInt();
70
+ return amountHINK;
71
+ }
72
+
73
+ async queryDeposits() {
74
+ return this.contract.queryFilter(this.contract.filters['Deposit'](), this.eventsFrom);
75
+ }
76
+
77
+ onEvent(eventName: string, handleEvent: ethers.providers.Listener) {
78
+ this.contract.on(eventName, handleEvent);
79
+ }
80
+ }
@@ -0,0 +1 @@
1
+ export * from './PresaleContractWrapper';
@@ -0,0 +1,43 @@
1
+ import { TransactionRequest, TransactionResponse } from '@ethersproject/providers';
2
+ import { ContractMetadata, ContractType, EthereumNetwork } from '../../types/ethereum-network.types';
3
+ import { Contract, ethers, Signer } from 'ethers';
4
+
5
+ export interface ChainEventListener {
6
+ onAccountChanged(): void;
7
+ onChainChanged(chainId?: number): void;
8
+ }
9
+
10
+ export interface IProviderAdapter<ConnectorType = unknown> {
11
+ chainId: number | undefined;
12
+ initConnector(connector: ConnectorType): void;
13
+ getSigner(): Signer;
14
+ initSigner?(signer: Signer): void;
15
+ init(chainId?: number): Promise<void>;
16
+ initConfig?(config?: any): Promise<void> | void;
17
+ connectToConnector(connector: ConnectorType): Promise<number>;
18
+ disconnectFromConnector(): Promise<void>;
19
+ connectAndPatchProvider(connector: ConnectorType): Promise<number>;
20
+ waitForTransaction(transactionHash: string, confirmations: number): Promise<boolean>;
21
+ signMessage(message: string | Uint8Array): Promise<string>;
22
+ getAddress(): Promise<string>;
23
+ getSelectedNetwork(): EthereumNetwork | undefined;
24
+ setChainEventListener(chainEventListener: ChainEventListener): void;
25
+ release(): void;
26
+ getContractMetadata(contractType: ContractType, chainId?: number): ContractMetadata;
27
+ getContract(contractType: ContractType, contractAddress?: string, chainId?: number): ethers.Contract;
28
+ getContractWithSigner(contract: ContractType, contractAddress?: string): Contract;
29
+ getContractWithFetcher(contract: ContractType, contractAddress?: string): Contract;
30
+ getContractWithFetcherForEthereum(contract: ContractType, contractAddress?: string): Contract;
31
+ sendTransaction(tx: TransactionRequest): Promise<TransactionResponse>;
32
+ switchNetwork(network: EthereumNetwork): Promise<unknown>;
33
+ switchAccount(signer: ethers.Signer): Promise<void>;
34
+ onAccountChanged(): Promise<unknown>;
35
+ onChainChanged(chainId?: number): Promise<unknown>;
36
+ isPermitterAvailable(): boolean;
37
+ getGasPrice(): Promise<bigint>;
38
+ signTypedData(
39
+ domain: ethers.TypedDataDomain,
40
+ types: Record<string, ethers.TypedDataField[]>,
41
+ value: Record<string, unknown>,
42
+ ): Promise<string>;
43
+ }
@@ -0,0 +1,41 @@
1
+ import {
2
+ AbstractAccessTokenSnapshotService,
3
+ AccessTokenSerializedSnapshot,
4
+ BlockchainEventEmitter,
5
+ } from '../event-service';
6
+ import { SnapshotFetcherService } from './SnapshotFetcherService';
7
+
8
+ export class ClientAccessTokenSnapshotService extends AbstractAccessTokenSnapshotService {
9
+ private snapshotsService: SnapshotFetcherService;
10
+
11
+ constructor(accessTokenEventFetcher: BlockchainEventEmitter, snapshotFetcher: SnapshotFetcherService) {
12
+ super(accessTokenEventFetcher);
13
+ this.snapshotsService = snapshotFetcher;
14
+ }
15
+
16
+ protected async fetchSnapshot(): Promise<AccessTokenSerializedSnapshot> {
17
+ const { contract } = this.blockchainEventEmitter;
18
+ const { chainId } = await contract.provider.getNetwork();
19
+ if (!this.snapshotsService) {
20
+ this.snapshotsService = new SnapshotFetcherService(chainId, contract.address);
21
+ }
22
+
23
+ const accessTokenSnapshotData = await this.snapshotsService.getAccessTokens();
24
+ if (
25
+ accessTokenSnapshotData.accessTokenContractAddress !== contract.address ||
26
+ accessTokenSnapshotData.chainId !== chainId
27
+ )
28
+ throw Error('Commitment Snapshot: incorrect contract or chain id');
29
+ return {
30
+ latestBlockNumber: accessTokenSnapshotData.latestBlockNumber,
31
+ merkleTree: accessTokenSnapshotData.merkleTree,
32
+ senderAddresses: accessTokenSnapshotData.senderAddresses,
33
+ senderAddressIndexMap: accessTokenSnapshotData.senderAddressIndexMap,
34
+ };
35
+ }
36
+
37
+ protected persistSnapshot(_serializedSnapshot: AccessTokenSerializedSnapshot): Promise<unknown> {
38
+ // Do nothing
39
+ return Promise.resolve();
40
+ }
41
+ }
@@ -0,0 +1,36 @@
1
+ import {
2
+ AbstractApprovalsSnapshotService,
3
+ ApprovalsSerializedSnapshot,
4
+ } from '../event-service/AbstractApprovalsSnapshotService';
5
+ import { BlockchainEventEmitter, CommitmentsSerializedSnapshot } from '../event-service';
6
+ import { SnapshotFetcherService } from './SnapshotFetcherService';
7
+
8
+ export class ClientApprovalsSnapshotService extends AbstractApprovalsSnapshotService {
9
+ private snapshotsService: SnapshotFetcherService;
10
+
11
+ constructor(hinkalEventEmitter: BlockchainEventEmitter, snapshotFetcher: SnapshotFetcherService) {
12
+ super(hinkalEventEmitter);
13
+ this.snapshotsService = snapshotFetcher;
14
+ }
15
+
16
+ protected async fetchSnapshot(): Promise<ApprovalsSerializedSnapshot> {
17
+ const { contract } = this.blockchainEventEmitter;
18
+ const { chainId } = await contract.provider.getNetwork();
19
+
20
+ const approvalsSnapshotData = await this.snapshotsService.getApprovals();
21
+ if (approvalsSnapshotData.hinkalAddress !== contract.address || approvalsSnapshotData.chainId !== chainId) {
22
+ throw Error('approvalsSnapshotData Snapshot: incorrect contract or chain id');
23
+ }
24
+
25
+ return {
26
+ latestBlockNumber: approvalsSnapshotData.latestBlockNumber,
27
+ approvals: approvalsSnapshotData.approvals,
28
+ events: approvalsSnapshotData.events,
29
+ };
30
+ }
31
+
32
+ protected persistSnapshot(_serializedSnapshot: CommitmentsSerializedSnapshot): Promise<unknown> {
33
+ // Do nothing
34
+ return Promise.resolve();
35
+ }
36
+ }
@@ -0,0 +1,30 @@
1
+ import {
2
+ AbstractCommitmentsSnapshotService,
3
+ BlockchainEventEmitter,
4
+ CommitmentsSerializedSnapshot,
5
+ } from '../event-service';
6
+ import { SnapshotFetcherService } from './SnapshotFetcherService';
7
+
8
+ export class ClientCommitmentsSnapshotService extends AbstractCommitmentsSnapshotService {
9
+ private snapshotsService: SnapshotFetcherService;
10
+
11
+ constructor(hinkalEventEmitter: BlockchainEventEmitter, snapshotsFetcher: SnapshotFetcherService) {
12
+ super(hinkalEventEmitter);
13
+ this.snapshotsService = snapshotsFetcher;
14
+ }
15
+
16
+ protected async fetchSnapshot(): Promise<CommitmentsSerializedSnapshot> {
17
+ const commitmentsSnapshotData = await this.snapshotsService.getCommitments();
18
+
19
+ return {
20
+ latestBlockNumber: commitmentsSnapshotData.latestBlockNumber,
21
+ merkleTree: commitmentsSnapshotData.merkleTree,
22
+ encryptedOutputs: commitmentsSnapshotData.encryptedOutputs,
23
+ };
24
+ }
25
+
26
+ protected persistSnapshot(_serializedSnapshot: CommitmentsSerializedSnapshot): Promise<unknown> {
27
+ // Do nothing
28
+ return Promise.resolve();
29
+ }
30
+ }
@@ -0,0 +1,28 @@
1
+ import {
2
+ AbstractNullifierSnapshotService,
3
+ BlockchainEventEmitter,
4
+ NullifierSerializedSnapshot,
5
+ } from '../event-service';
6
+ import { SnapshotFetcherService } from './SnapshotFetcherService';
7
+
8
+ export class ClientNullifierSnapshotService extends AbstractNullifierSnapshotService {
9
+ private snapshotsService: SnapshotFetcherService;
10
+
11
+ constructor(hinkalEventEmitter: BlockchainEventEmitter, snapshotsFetcher: SnapshotFetcherService) {
12
+ super(hinkalEventEmitter);
13
+ this.snapshotsService = snapshotsFetcher;
14
+ }
15
+
16
+ protected async fetchSnapshot(): Promise<NullifierSerializedSnapshot> {
17
+ const nullifiersSnapshotData = await this.snapshotsService.getNullifiers();
18
+ return {
19
+ latestBlockNumber: nullifiersSnapshotData.latestBlockNumber,
20
+ nullifiers: nullifiersSnapshotData.nullifiers,
21
+ };
22
+ }
23
+
24
+ protected persistSnapshot(_serializedSnapshot: NullifierSerializedSnapshot): Promise<unknown> {
25
+ // Do nothing
26
+ return Promise.resolve();
27
+ }
28
+ }
@@ -0,0 +1,68 @@
1
+ import { caseInsensitiveEqual } from '../../functions/utils/caseInsensitive.utils';
2
+ import { fetchSnapshots, ISnapshotsResponse } from '../../API/fetchCommitmentsCache';
3
+
4
+ const FIVE_MINUTES_IN_MILLISECONDS = 5 * 60 * 1000;
5
+
6
+ export class SnapshotFetcherService {
7
+ private chainId: number;
8
+
9
+ private contractAddress: string;
10
+
11
+ private snapshotsPromise: Promise<ISnapshotsResponse> | undefined;
12
+
13
+ private lastFetchedAt: number | undefined;
14
+
15
+ private readonly cacheDurationMs: number;
16
+
17
+ constructor(chainId: number, contractAddress: string, cacheDurationMs = FIVE_MINUTES_IN_MILLISECONDS) {
18
+ this.chainId = chainId;
19
+ this.contractAddress = contractAddress;
20
+ this.cacheDurationMs = cacheDurationMs;
21
+ }
22
+
23
+ private async fetchSnapshots() {
24
+ this.lastFetchedAt = Date.now();
25
+ return fetchSnapshots(this.chainId);
26
+ }
27
+
28
+ private async ensureSnapshots(forceRefresh = false): Promise<ISnapshotsResponse> {
29
+ const now = Date.now();
30
+
31
+ const isExpired = !this.lastFetchedAt || now - this.lastFetchedAt > this.cacheDurationMs;
32
+
33
+ if (forceRefresh || !this.snapshotsPromise || isExpired) {
34
+ this.snapshotsPromise = this.fetchSnapshots();
35
+ }
36
+
37
+ const snapshots = await this.snapshotsPromise;
38
+
39
+ if (
40
+ !caseInsensitiveEqual(snapshots.commitments.hinkalAddress, this.contractAddress) ||
41
+ snapshots.commitments.chainId !== this.chainId
42
+ ) {
43
+ throw Error('Snapshots: incorrect contract or chain id');
44
+ }
45
+
46
+ return snapshots;
47
+ }
48
+
49
+ public async getAll(forceRefresh = false): Promise<ISnapshotsResponse> {
50
+ return this.ensureSnapshots(forceRefresh);
51
+ }
52
+
53
+ public async getCommitments(forceRefresh = false) {
54
+ return (await this.ensureSnapshots(forceRefresh)).commitments;
55
+ }
56
+
57
+ public async getAccessTokens(forceRefresh = false) {
58
+ return (await this.ensureSnapshots(forceRefresh)).accessTokens;
59
+ }
60
+
61
+ public async getNullifiers(forceRefresh = false) {
62
+ return (await this.ensureSnapshots(forceRefresh)).nullifiers;
63
+ }
64
+
65
+ public async getApprovals(forceRefresh = false) {
66
+ return (await this.ensureSnapshots(forceRefresh)).approvals;
67
+ }
68
+ }
@@ -0,0 +1 @@
1
+ export * from './SnapshotFetcherService';
@@ -0,0 +1,45 @@
1
+ import { ERC20Token } from '../../types/token.types';
2
+ import { zeroAddress } from '../../constants/protocol.constants';
3
+
4
+ export class TokenChecker {
5
+ public static isBeefyStakeToken = (token: ERC20Token) => {
6
+ return token.name.includes('-Boost') && token.symbol.includes('-Boost');
7
+ };
8
+
9
+ public static isStakeToken = (token: ERC20Token) => {
10
+ return this.isBeefyStakeToken(token);
11
+ };
12
+
13
+ public static isAaveToken = (token: ERC20Token) => {
14
+ return token.aaveToken;
15
+ };
16
+
17
+ public static isKinzaToken = (token: ERC20Token) => token.name.startsWith('Kinza');
18
+
19
+ public static isPotentiallyVolatile = (token: ERC20Token) => {
20
+ if (token.erc20TokenAddress === zeroAddress) return false;
21
+ return token.isVolatile || token.balanceStorageOffset === undefined || token.allowanceStorageOffset === undefined;
22
+ };
23
+
24
+ public static isPotentiallySpamToken(token: ERC20Token): boolean {
25
+ const { name, symbol } = token;
26
+ const combined = `${name} ${symbol}`;
27
+
28
+ const URL_REGEX = /(?:https?:\/\/|www\.)/i;
29
+ const TLD_REGEX =
30
+ /\.(?:com|io|app|org|net|co|xyz|link|site|top|in|ru|cn|me|biz|info|online|club|tech|to|cloud)(?=[^\w]|$)/i;
31
+ const SOCIAL_HOSTS_REGEX = /\b(?:t\.me|discord\.(?:gg|com)|twitter\.com|x\.com|telegram\.(?:me|org))\b/i;
32
+ const EMAIL_REGEX = /@[^\s]+\.[^\s]+/i;
33
+ const EMOJI_PICTO = /\p{Extended_Pictographic}/u;
34
+ const EMOJI_FLAG = /[\u{1F1E6}-\u{1F1FF}]{2}/u;
35
+ const EMOJI_KEYCAP = /[#*0-9]\uFE0F?\u20E3/u;
36
+
37
+ const isUrl = URL_REGEX.test(combined);
38
+ const isTld = TLD_REGEX.test(combined);
39
+ const isSocialHost = SOCIAL_HOSTS_REGEX.test(combined);
40
+ const isEmail = EMAIL_REGEX.test(combined);
41
+ const isEmoji = EMOJI_PICTO.test(combined) || EMOJI_FLAG.test(combined) || EMOJI_KEYCAP.test(combined);
42
+
43
+ return isUrl || isTld || isSocialHost || isEmail || isEmoji;
44
+ }
45
+ }
@@ -0,0 +1 @@
1
+ export * from './TokenChecker';