@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,120 @@
1
+ import { BigNumber } from 'ethers';
2
+ import { HookDataType, StealthAddressStructure } from './circom-data.types';
3
+
4
+ export interface RawTx {
5
+ blockNumber: number;
6
+ timeStamp: number;
7
+ isError: string;
8
+ methodId: string;
9
+ input: string;
10
+ logs: Log[];
11
+ hash: string;
12
+ gas: number;
13
+ gasPrice: number;
14
+ contract?: string;
15
+ }
16
+
17
+ type Log = {
18
+ topics: string[];
19
+ data: string;
20
+ };
21
+
22
+ export interface EventLog {
23
+ address: string;
24
+ topics: string[];
25
+ data: string;
26
+ blockNumber: string;
27
+ blockHash: string;
28
+ timeStamp: string;
29
+ gasPrice: string;
30
+ gasUsed: string;
31
+ logIndex: string;
32
+ transactionHash: string;
33
+ transactionIndex: string;
34
+ }
35
+
36
+ export interface DecodedTx<T = bigint, K = BigNumber> extends RawTx {
37
+ decodedInput: {
38
+ erc20TokenAddresses: string[];
39
+ amountChanges: K[];
40
+ flatFees: K[];
41
+ externalActionId: K;
42
+ externalActionMetadata: string;
43
+ encryptedOutputs: string[];
44
+ hookData: HookDataType;
45
+ stealthAddressStructure: StealthAddressStructure<T>;
46
+ };
47
+ status: string;
48
+ }
49
+
50
+ export interface DecodedTxWithUtxos<T = bigint, K = BigNumber> extends DecodedTx<T, K> {
51
+ utxosArray?: OnChainUtxo<T>[];
52
+ }
53
+
54
+ export type OnChainUtxo<AmountType = bigint> = {
55
+ amount: AmountType;
56
+ erc20TokenAddress: string;
57
+ timeStamp: string;
58
+ tokenId: number;
59
+ };
60
+
61
+ const zeroBigNumber = BigNumber.from(0);
62
+
63
+ export const emptyDecodedTx: DecodedTx = {
64
+ blockNumber: 0,
65
+ timeStamp: 0,
66
+ methodId: '',
67
+ input: '',
68
+ decodedInput: {
69
+ erc20TokenAddresses: [],
70
+ amountChanges: [],
71
+ flatFees: [0n, 0n].map((item) => BigNumber.from(item)),
72
+ externalActionId: zeroBigNumber,
73
+ externalActionMetadata: '',
74
+ encryptedOutputs: [],
75
+ hookData: {
76
+ hookContract: '',
77
+ preHookContract: '',
78
+ preHookMetadata: '',
79
+ postHookMetadata: '',
80
+ },
81
+ stealthAddressStructure: {
82
+ extraRandomization: 0n,
83
+ stealthAddress: 0n,
84
+ H0: 0n,
85
+ H1: 0n,
86
+ },
87
+ },
88
+ logs: [],
89
+ hash: '',
90
+ gas: 0,
91
+ gasPrice: 0,
92
+ isError: '',
93
+ status: '',
94
+ };
95
+
96
+ // Added to prevent circular dependencies from hinkal react hooks
97
+ export enum TransactionStatus {
98
+ NotStarted,
99
+ Loading,
100
+ Confirmed,
101
+ Failed,
102
+ }
103
+
104
+ export enum TransactionAction {
105
+ None,
106
+ Deposit,
107
+ Mint,
108
+ PoolAdd,
109
+ PoolRemove,
110
+ Redeem,
111
+ Swap,
112
+ Bridge,
113
+ Transfer,
114
+ Withdraw,
115
+ Send,
116
+ HinkalStake,
117
+ HinkalUnstake,
118
+ Fund,
119
+ Receive,
120
+ }
@@ -0,0 +1,83 @@
1
+ import { BuildApprovedNamespacesParams } from '@walletconnect/utils';
2
+ import { SessionMetadata } from './session.types';
3
+
4
+ export interface VerifyContextOptions {
5
+ verified: {
6
+ origin: string;
7
+ validation: string;
8
+ verifyUrl: string;
9
+ };
10
+ }
11
+
12
+ export type WCSessionProposalOptions = {
13
+ id: number;
14
+ params: BuildApprovedNamespacesParams['proposal'];
15
+ verifyContext: VerifyContextOptions;
16
+ };
17
+
18
+ export type WCSessionRequestOptions = {
19
+ id: number;
20
+ topic: string;
21
+ params: { chainId: string; request: { method: string; params: unknown[] } };
22
+ verifyContext: VerifyContextOptions;
23
+ };
24
+
25
+ export interface TxParametersBase {
26
+ from: string; // "0x53a1eeb0c182144b27ca0a2010939da33ebc207d"
27
+ to: string; // "0x4200000000000000000000000000000000000042"
28
+ gas?: string; // "0xd5b8"
29
+ gasPrice?: string; // "0x16e666"
30
+ value: string; // "0x0"
31
+ data?: string; // "0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
32
+ }
33
+
34
+ export interface WCTransactionParameters<T = number> extends TxParametersBase {
35
+ chainId: T; // "0xa"
36
+ }
37
+
38
+ type BaseNamespace = {
39
+ chains?: string[];
40
+ accounts: string[];
41
+ methods: string[];
42
+ events: string[];
43
+ };
44
+
45
+ export type Namespaces = Record<string, BaseNamespace>;
46
+
47
+ export type WCSession = {
48
+ topic: string;
49
+ pairingTopic: string;
50
+ acknowledged: boolean;
51
+ controller: string;
52
+ self: {
53
+ publicKey: string;
54
+ };
55
+ peer: {
56
+ publicKey: string;
57
+ metadata: SessionMetadata;
58
+ };
59
+ namespaces: Namespaces;
60
+ };
61
+
62
+ export interface WCErrorResponse {
63
+ id: number;
64
+ error: {
65
+ code: number;
66
+ message: string;
67
+ };
68
+ jsonrpc: string;
69
+ }
70
+
71
+ export interface WCSuccessResponse {
72
+ id: number;
73
+ result: string | null | object;
74
+ jsonrpc: string;
75
+ }
76
+
77
+ export type WCResponse = WCErrorResponse | WCSuccessResponse;
78
+
79
+ export type AppMetaData = {
80
+ url?: string;
81
+ icon: string;
82
+ name: string;
83
+ };
@@ -0,0 +1 @@
1
+ export type WithId<T> = T & { id: number };
@@ -0,0 +1,50 @@
1
+ import { chainIds } from '../constants/chains.constants';
2
+ import { isDevelopment } from '../constants/vite.constants';
3
+ import { WorkerVariant } from './worker.registry';
4
+ import { WorkerParams } from './worker.types';
5
+ import { WorkerFactory } from './workerFactory';
6
+
7
+ // OPTIMIZE: allow for keeping worker alive and reusing
8
+ export const performTaskWithWorker = async <P, T>(workerData: { type: WorkerVariant; payload: P }) => {
9
+ const worker = await WorkerFactory.getWebWorker(workerData.type);
10
+
11
+ return new Promise<T>((resolve, reject) => {
12
+ let hostLocation = {};
13
+ if (typeof window !== 'undefined' && window.location) {
14
+ const { origin, protocol, host, port, hostname, href } = window.location;
15
+ hostLocation = {
16
+ origin,
17
+ protocol,
18
+ host,
19
+ port,
20
+ hostname,
21
+ href,
22
+ };
23
+ }
24
+
25
+ worker.onmessage = (result: { data: T | PromiseLike<T> }) => {
26
+ resolve(result.data);
27
+ worker.terminate();
28
+ };
29
+
30
+ worker.onerror = (err: unknown) => {
31
+ reject(err);
32
+ worker.terminate();
33
+ };
34
+
35
+ const message: WorkerParams<unknown> = {
36
+ payload: workerData.payload,
37
+ metadata: {
38
+ hostLocation,
39
+ constants: {
40
+ chains: {
41
+ chainIds,
42
+ },
43
+ isDevelopment,
44
+ },
45
+ },
46
+ };
47
+
48
+ worker.postMessage(message);
49
+ });
50
+ };
@@ -0,0 +1,2 @@
1
+ // The min snarkjs version that has type is 0.7; we are using 0.6.x so we need to manually declare module here.
2
+ declare module 'snarkjs';
@@ -0,0 +1,18 @@
1
+ import { WorkerParams, WorkerPayload } from '../worker.types';
2
+
3
+ export enum SnarkJSWorkerActionType {
4
+ FULL_PROVE,
5
+ }
6
+
7
+ export interface SnarkJSWorkerFullProvePayload
8
+ extends WorkerPayload<{
9
+ input: any;
10
+ chainId: number;
11
+ wasmFilePath: string;
12
+ zKeyFilePath: string;
13
+ }> {
14
+ type: SnarkJSWorkerActionType.FULL_PROVE;
15
+ }
16
+
17
+ export type SnarkJSPayload = SnarkJSWorkerFullProvePayload;
18
+ export type SnarkJSParams = WorkerParams<SnarkJSPayload>;
@@ -0,0 +1,19 @@
1
+ import { Buffer } from 'buffer';
2
+ import process from 'process';
3
+ import { addWorkerErrorHandler } from '../workerErrorHandler';
4
+ import { SnarkJSParams } from './snarkjsWorker.types';
5
+
6
+ globalThis.process = process;
7
+ globalThis.Buffer = Buffer;
8
+
9
+ // This set up is needed because imports in logic file need
10
+ // globalThis.process and globalThis.Buffer to be declared first.
11
+ const snarkjsWorker = import('./snarkjsWorkerLogic');
12
+
13
+ // eslint-disable-next-line no-restricted-globals
14
+ addEventListener('message', async (e: MessageEvent<unknown>) => {
15
+ const { onWorkerMessage } = await snarkjsWorker;
16
+ onWorkerMessage(e.data as SnarkJSParams);
17
+ });
18
+
19
+ addWorkerErrorHandler();
@@ -0,0 +1,90 @@
1
+ /* eslint-disable @typescript-eslint/dot-notation */
2
+ /**
3
+ * This Web Worker only handle snarkjs operation.
4
+ * If possible, avoid importing modules form main project and instead pass data along with message
5
+ * to ensure this worker stay lean.
6
+ */
7
+ import { WorkerProxy } from '../workerProxy';
8
+ import { SnarkJSParams } from './snarkjsWorker.types';
9
+ import { isNode, isWebpack } from '../../constants/vite.constants';
10
+
11
+ // DO NOT install @types for this, else hardhat will pick up the wrong file and fail (our version is older than oldest @types)
12
+ // eslint-disable-next-line
13
+ // @ts-ignore
14
+ import * as snarkjs from 'snarkjs';
15
+ import { httpClient } from '../../data-structures/tor';
16
+
17
+ const workerProxy = new WorkerProxy();
18
+
19
+ const fetchUint8Array = async (fileUrl: string) => {
20
+ return new Uint8Array(await httpClient.get<ArrayBuffer>(fileUrl, { responseType: 'arraybuffer' }));
21
+ };
22
+
23
+ export const onWorkerMessage = async (data: SnarkJSParams) => {
24
+ try {
25
+ const { input, wasmFilePath, zKeyFilePath, chainId } = data.payload.data;
26
+ const {
27
+ hostLocation: { origin },
28
+ constants: {
29
+ isDevelopment,
30
+ chains: { chainIds },
31
+ },
32
+ } = data.metadata;
33
+
34
+ // DEFAULT CASE: browser and production, so we access verifiers with remote links
35
+ let wasmFullFilePath = wasmFilePath;
36
+ let zKeyFullFilePath = zKeyFilePath;
37
+
38
+ let wasmFileBuffer: Uint8Array | undefined;
39
+ let zKeyFileBuffer: Uint8Array | undefined;
40
+
41
+ const isOnline = wasmFullFilePath.startsWith('https://');
42
+
43
+ // CASE 1: nodejs accessign files localy
44
+ if (isNode && !isOnline) {
45
+ // subcase 1: when nodejs code is bundled
46
+ if (isWebpack) {
47
+ wasmFullFilePath = `libs/hardhat/test/circuits/${wasmFilePath}`;
48
+ zKeyFullFilePath = `libs/hardhat/test/circuits/${zKeyFilePath}`;
49
+ }
50
+ // subcase 2: when nodejs code is not bundled
51
+ else if (!isWebpack && isDevelopment) {
52
+ wasmFullFilePath = `test/circuits/${wasmFilePath}`;
53
+ zKeyFullFilePath = `test/circuits/${zKeyFilePath}`;
54
+ }
55
+ // else if case: !isWebpack && !isDevelopment
56
+ // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
57
+ const path = require('path');
58
+ wasmFullFilePath = path.resolve(wasmFullFilePath);
59
+ zKeyFullFilePath = path.resolve(zKeyFullFilePath);
60
+ // CASE 2: nodejs accessing files remotely
61
+ }
62
+ if (isNode && isOnline) {
63
+ // In case, we have node enviroment that uses @hinkal/common as a library, snarkjs tries to read "https://..." from local, that's why we put here download operation. Otherwise, file is not found
64
+ // snarkjs uses fastfile to manage verifiers. We want to download file and provide it to snarkjs and do it in one line.
65
+ // @ts-ignore Here:https://github.com/iden3/fastfile/blob/master/src/fastfile.js Line 59, they use this variable to indicate to download file first and then to process. We need it even if we run in node enviroment.
66
+ wasmFileBuffer = await fetchUint8Array(wasmFullFilePath);
67
+ zKeyFileBuffer = await fetchUint8Array(zKeyFullFilePath);
68
+ }
69
+ // CASE 3: local developement and we access files localy
70
+ else if (chainId === chainIds['localhost'] && !isNode) {
71
+ wasmFullFilePath = `${origin}/${wasmFilePath}`;
72
+ zKeyFullFilePath = `${origin}/${zKeyFilePath}`;
73
+ }
74
+ const { proof, publicSignals } = await snarkjs.groth16.fullProve(
75
+ input,
76
+ wasmFileBuffer ?? wasmFullFilePath,
77
+ zKeyFileBuffer ?? zKeyFullFilePath,
78
+ );
79
+ const zkCallDataRaw = await snarkjs.groth16.exportSolidityCallData(proof, publicSignals);
80
+ const zkCallData = JSON.parse(`[${zkCallDataRaw}]`);
81
+
82
+ workerProxy.postMessageToMainThread({ zkCallData, proof, publicSignals });
83
+ } catch (err) {
84
+ console.error(err);
85
+ workerProxy.postErrorToMainThread(err);
86
+ }
87
+ };
88
+
89
+ workerProxy.attachWorkerSideOnMessage(onWorkerMessage);
90
+ export default workerProxy;
@@ -0,0 +1,41 @@
1
+ import { EncryptedOutputWithSign } from '../../types/commitments.types';
2
+ import { WorkerParams, WorkerPayload } from '../worker.types';
3
+ import { IUtxoConstructor } from '../../data-structures/utxo/Utxo';
4
+
5
+ export enum UtxoWorkerActionType {
6
+ BATCH_FILTER_UTXOS_WITH_NULLIFIER,
7
+ BUILD_UTXOS,
8
+ DECIPHER_OUTPUTS,
9
+ }
10
+
11
+ export interface BatchFilterUtxosWithNullifierPayload
12
+ extends WorkerPayload<{
13
+ utxos: IUtxoConstructor[];
14
+ nullifiers: Set<string>;
15
+ }> {
16
+ type: UtxoWorkerActionType.BATCH_FILTER_UTXOS_WITH_NULLIFIER;
17
+ }
18
+
19
+ export interface BuildBatchProcessPayload
20
+ extends WorkerPayload<{
21
+ signature: string;
22
+ encryptedOutputs: EncryptedOutputWithSign[];
23
+ }> {
24
+ type: UtxoWorkerActionType.BUILD_UTXOS;
25
+ }
26
+
27
+ export interface DecipherProcessPayload
28
+ extends WorkerPayload<{
29
+ encryptedOutputs: EncryptedOutputWithSign[];
30
+ lastOutput: string;
31
+ signature: string;
32
+ }> {
33
+ type: UtxoWorkerActionType.DECIPHER_OUTPUTS;
34
+ }
35
+
36
+ export type UtxoWorkerPayload =
37
+ | BuildBatchProcessPayload
38
+ | BatchFilterUtxosWithNullifierPayload
39
+ | DecipherProcessPayload;
40
+
41
+ export type UtxoWorkerParams = WorkerParams<UtxoWorkerPayload>;
@@ -0,0 +1,19 @@
1
+ import { Buffer } from 'buffer';
2
+ import process from 'process';
3
+ import { addWorkerErrorHandler } from '../workerErrorHandler';
4
+ import { UtxoWorkerParams } from './utxoWorker.types';
5
+
6
+ globalThis.process = process;
7
+ globalThis.Buffer = Buffer;
8
+
9
+ // This set up is needed because imports in logic file need
10
+ // globalThis.process and globalThis.Buffer to be declared first.
11
+ const utxoWorker = import('./utxoWorkerLogic');
12
+
13
+ // eslint-disable-next-line no-restricted-globals
14
+ addEventListener('message', async (e: MessageEvent<unknown>) => {
15
+ const { onWorkerMessage } = await utxoWorker;
16
+ onWorkerMessage(e.data as UtxoWorkerParams);
17
+ });
18
+
19
+ addWorkerErrorHandler();
@@ -0,0 +1,107 @@
1
+ import { preProcessing } from '../../crypto/preProcessing';
2
+ import { stealthAddressCacheDevice, stealthPairCacheDevice, UserKeys } from '../../data-structures/crypto-keys/keys';
3
+ import { Utxo } from '../../data-structures/utxo/Utxo';
4
+ import { decryptUtxo, decryptUtxoConstructorArgs } from '../../data-structures/crypto-keys/encryptDecryptUtxo';
5
+ import { checkUtxoSignature, decodeUtxoConstructorArgs } from '../../data-structures/crypto-keys/decodeUTXO';
6
+ import { WorkerProxy } from '../workerProxy';
7
+ import {
8
+ BatchFilterUtxosWithNullifierPayload,
9
+ BuildBatchProcessPayload,
10
+ DecipherProcessPayload,
11
+ UtxoWorkerActionType,
12
+ UtxoWorkerParams,
13
+ } from './utxoWorker.types';
14
+
15
+ const workerProxy = new WorkerProxy();
16
+
17
+ export const handleFilterUtxosWithNullifier = async ({ data }: BatchFilterUtxosWithNullifierPayload) => {
18
+ const { utxos, nullifiers } = data;
19
+
20
+ const filteredUtxos = utxos.filter((serializedUtxo) => {
21
+ const utxo = new Utxo(serializedUtxo);
22
+ return !nullifiers.has(utxo.getNullifier());
23
+ });
24
+
25
+ workerProxy.postMessageToMainThread({
26
+ utxoConstructors: filteredUtxos,
27
+ stealthPairCache: stealthPairCacheDevice.serialize(),
28
+ stealthAddressCache: stealthAddressCacheDevice.serialize(),
29
+ });
30
+ };
31
+
32
+ export const handleBuildUtxosMessage = async ({ data }: BuildBatchProcessPayload) => {
33
+ const userKeys = new UserKeys(data.signature);
34
+ const shieldedPrivateKey = userKeys.getShieldedPrivateKey();
35
+ const decrypted = data.encryptedOutputs
36
+ .map((encryptedOutput) => {
37
+ try {
38
+ if (encryptedOutput.isPositive)
39
+ return decryptUtxoConstructorArgs(Buffer.from(encryptedOutput.value.slice(2), 'hex'), userKeys);
40
+ return decodeUtxoConstructorArgs(encryptedOutput.value, shieldedPrivateKey);
41
+ } catch {
42
+ return undefined;
43
+ }
44
+ })
45
+ .filter((val) => val !== undefined && val.amount !== 0n);
46
+ workerProxy.postMessageToMainThread(decrypted);
47
+ };
48
+
49
+ export const handleDecipherMessage = async ({ data }: DecipherProcessPayload) => {
50
+ const userKeys = new UserKeys(data.signature);
51
+ const additionalEncryptedOutputs = [];
52
+ const { encryptedOutputs } = data;
53
+ let { lastOutput } = data;
54
+ const shieldedPrivateKey = userKeys.getShieldedPrivateKey();
55
+ for (let i = 0; i < encryptedOutputs.length; i += 1) {
56
+ const output = encryptedOutputs[i];
57
+ lastOutput = output.value;
58
+ if (output.isPositive) {
59
+ try {
60
+ const decryptedUtxo = decryptUtxo(Buffer.from(lastOutput.slice(2), 'hex'), userKeys);
61
+
62
+ if (!decryptedUtxo.erc20TokenAddress || !decryptedUtxo.amount || !decryptedUtxo.stealthAddress)
63
+ throw Error('bruh');
64
+
65
+ additionalEncryptedOutputs.push(output);
66
+ } catch (error: unknown) {
67
+ // logError('Utxo not decrypted');
68
+ }
69
+ } else {
70
+ try {
71
+ const checked = checkUtxoSignature(lastOutput, shieldedPrivateKey);
72
+ if (checked) {
73
+ additionalEncryptedOutputs.push(output);
74
+ }
75
+ } catch (error: unknown) {
76
+ // logError('Utxo not decoded');
77
+ }
78
+ }
79
+ }
80
+ workerProxy.postMessageToMainThread({ additionalEncryptedOutputs, lastOutput });
81
+ };
82
+
83
+ export const onWorkerMessage = async (data: UtxoWorkerParams) => {
84
+ try {
85
+ await preProcessing();
86
+ const { type } = data.payload;
87
+ switch (type) {
88
+ case UtxoWorkerActionType.BATCH_FILTER_UTXOS_WITH_NULLIFIER:
89
+ await handleFilterUtxosWithNullifier(data.payload);
90
+ return;
91
+ case UtxoWorkerActionType.BUILD_UTXOS:
92
+ await handleBuildUtxosMessage(data.payload);
93
+ return;
94
+ case UtxoWorkerActionType.DECIPHER_OUTPUTS:
95
+ await handleDecipherMessage(data.payload);
96
+ return;
97
+ default:
98
+ throw Error(`Unknown worker message type ${type}`);
99
+ }
100
+ } catch (err) {
101
+ console.error(err);
102
+ workerProxy.postErrorToMainThread(err);
103
+ }
104
+ };
105
+
106
+ workerProxy.attachWorkerSideOnMessage(onWorkerMessage);
107
+ export default workerProxy;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * These imports tell vite to generate and bundle worker file.
3
+ * These are import conditionally because we do not have vite when running on node.
4
+ */
5
+
6
+ // eslint-disable-next-line
7
+ // @ts-ignore
8
+ import zkProofWorkerURL from './zkProofWorker/zkProofWorkerLauncher?worker&url';
9
+
10
+ // eslint-disable-next-line
11
+ // @ts-ignore
12
+ import snarkjsWorkerURL from './snarkjsWorker/snarkjsWorkerLauncher?worker&url';
13
+
14
+ // eslint-disable-next-line
15
+ // @ts-ignore
16
+ import utxoWorkerURL from './utxoWorker/utxoWorkerLauncher?worker&url';
17
+
18
+ import { WorkerVariant } from './worker.registry';
19
+
20
+ // Should be implemented as function for correct prebuild for CDN work
21
+ export const getWorkerViteURL = async () => ({
22
+ [WorkerVariant.ZKProof]: zkProofWorkerURL,
23
+ [WorkerVariant.SnarkJS]: snarkjsWorkerURL,
24
+ [WorkerVariant.UTXO]: utxoWorkerURL,
25
+ });
@@ -0,0 +1,11 @@
1
+ export enum WorkerVariant {
2
+ ZKProof = 'ZKProof',
3
+ SnarkJS = 'SnarkJS',
4
+ UTXO = 'UTXO',
5
+ }
6
+
7
+ export const workerNodeURL = {
8
+ [WorkerVariant.ZKProof]: './zkProofWorker/zkProofWorkerLogic.ts',
9
+ [WorkerVariant.SnarkJS]: './snarkjsWorker/snarkjsWorkerLogic.ts',
10
+ [WorkerVariant.UTXO]: './utxoWorker/utxoWorkerLogic.ts',
11
+ };
@@ -0,0 +1,35 @@
1
+ export interface WorkerPayload<T> {
2
+ data: T;
3
+ }
4
+
5
+ export interface WorkerMetadata {
6
+ hostLocation: {
7
+ origin?: string;
8
+ protocol?: string;
9
+ host?: string;
10
+ port?: string;
11
+ hostname?: string;
12
+ href?: string;
13
+ };
14
+ /**
15
+ * Importing these in worker script will executed the whole constant script in worker env,
16
+ * which could resolve into different values, as well as, result in many unnecessary imports
17
+ */
18
+ constants: {
19
+ chains: {
20
+ chainIds: {
21
+ [key: string]: number;
22
+ };
23
+ };
24
+ /**
25
+ * Worker do not have access to window.location -> so this will always be false if import
26
+ * directly from vite constant file.
27
+ */
28
+ isDevelopment: boolean;
29
+ };
30
+ }
31
+
32
+ export interface WorkerParams<T = WorkerPayload<unknown>> {
33
+ payload: T;
34
+ metadata: WorkerMetadata;
35
+ }
@@ -0,0 +1,10 @@
1
+ /* eslint-disable no-restricted-globals */
2
+ // this function adds an event listener for unhandledrejection error
3
+ // unhandledrejection error happens when there was a promise error that wasn't handled
4
+ // this is done because unhandled rejections aren't reported back
5
+ // to the parent webworker instance's onerror callback function
6
+ export const addWorkerErrorHandler = () => {
7
+ self.addEventListener('unhandledrejection', (event) => {
8
+ throw new Error(event.reason);
9
+ });
10
+ };