@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.
- package/.env.example +5 -0
- package/.eslintrc.json +18 -0
- package/README.md +164 -0
- package/copyPackageJson.js +81 -0
- package/handleCDNWorkers.js +92 -0
- package/jest.config.ts +10 -0
- package/package.json +101 -0
- package/polyfillWorker.ts +15 -0
- package/project.json +32 -0
- package/src/API/API.ts +203 -0
- package/src/API/admin-calls.ts +8 -0
- package/src/API/ai-calls.ts +48 -0
- package/src/API/brotherhoodCalls.ts +184 -0
- package/src/API/callLifiAPI.ts +41 -0
- package/src/API/callMonitor.ts +9 -0
- package/src/API/callOdosAPI.ts +89 -0
- package/src/API/callOneInchAPI.ts +47 -0
- package/src/API/callRelayer.ts +23 -0
- package/src/API/checkRisk.ts +7 -0
- package/src/API/duneAPI.ts +26 -0
- package/src/API/enclaveCalls.ts +23 -0
- package/src/API/fetchCommitmentsCache.ts +63 -0
- package/src/API/generate-trading-points.ts +77 -0
- package/src/API/get-token-data.ts +12 -0
- package/src/API/getBridgeProtocols.ts +16 -0
- package/src/API/getCoingeckoPrice.ts +59 -0
- package/src/API/getGasEstimates.ts +30 -0
- package/src/API/getLifiStatus.ts +35 -0
- package/src/API/getRelayerURL.ts +27 -0
- package/src/API/getServerURL.ts +116 -0
- package/src/API/getTokenPrice.ts +39 -0
- package/src/API/getWebsiteURL.ts +58 -0
- package/src/API/index.ts +19 -0
- package/src/API/is-tx-stateless.ts +32 -0
- package/src/API/kycCalls.ts +81 -0
- package/src/API/leaderboardCalls.ts +32 -0
- package/src/API/mysteryBoxesCalls.ts +141 -0
- package/src/API/passwordCalls.ts +34 -0
- package/src/API/proxyAccountsCalls.ts +40 -0
- package/src/API/referralsCalls.ts +52 -0
- package/src/API/relayCalls.ts +14 -0
- package/src/API/restoreSnapshots.ts +7 -0
- package/src/API/rewardsUserCalls.ts +124 -0
- package/src/API/send-telegram-callback.ts +17 -0
- package/src/API/simulate-batch-tx.ts +19 -0
- package/src/API/tenderly.api.ts +96 -0
- package/src/API/token-calls.ts +19 -0
- package/src/API/weeklyAnalyticCalls.ts +43 -0
- package/src/constants/activity.constants.ts +10 -0
- package/src/constants/addresses.constants.ts +74 -0
- package/src/constants/assets.constants.ts +15 -0
- package/src/constants/backend.constants.ts +16 -0
- package/src/constants/balance.constants.ts +1 -0
- package/src/constants/bridging.constants.ts +5 -0
- package/src/constants/chains.constants.ts +194 -0
- package/src/constants/coingecko.constants.ts +67 -0
- package/src/constants/contracts.constants.ts +106 -0
- package/src/constants/conversion.constants.ts +1 -0
- package/src/constants/deploy-data/deploy-data-arbMainnet.json +5685 -0
- package/src/constants/deploy-data/deploy-data-arcTestnet.json +6157 -0
- package/src/constants/deploy-data/deploy-data-avalanche.json +5921 -0
- package/src/constants/deploy-data/deploy-data-base.json +5695 -0
- package/src/constants/deploy-data/deploy-data-bnbMainnet.json +5921 -0
- package/src/constants/deploy-data/deploy-data-ethMainnet.json +5922 -0
- package/src/constants/deploy-data/deploy-data-localhost.json +5921 -0
- package/src/constants/deploy-data/deploy-data-optimism.json +5687 -0
- package/src/constants/deploy-data/deploy-data-polygon.json +5695 -0
- package/src/constants/deploy-data/index.ts +21 -0
- package/src/constants/events.constants.ts +10 -0
- package/src/constants/fees.constants.ts +4 -0
- package/src/constants/function-signatures.constants.ts +6 -0
- package/src/constants/index.ts +30 -0
- package/src/constants/kyc.constants.ts +202 -0
- package/src/constants/lifi.constants.ts +1 -0
- package/src/constants/mediaUrls.constants.ts +25 -0
- package/src/constants/mystery-boxes.constants.ts +402 -0
- package/src/constants/oauthUrls.constants.ts +7 -0
- package/src/constants/permit2.constants.ts +28 -0
- package/src/constants/presale.constants.ts +503 -0
- package/src/constants/protocol.constants.ts +65 -0
- package/src/constants/reorg-depths.constants.ts +13 -0
- package/src/constants/rewards.constants.ts +27 -0
- package/src/constants/save-depths.ts +13 -0
- package/src/constants/server.constants.ts +233 -0
- package/src/constants/tasks.constants.ts +205 -0
- package/src/constants/token-data/ERC20Registry.ts +90 -0
- package/src/constants/token-data/arbMainnetRegistry.json +1841 -0
- package/src/constants/token-data/arbMainnetRegistryFixed.json +1841 -0
- package/src/constants/token-data/arcTestnetRegistry.json +436 -0
- package/src/constants/token-data/avalancheRegistry.json +729 -0
- package/src/constants/token-data/avalancheRegistryFixed.json +729 -0
- package/src/constants/token-data/baseRegistry.json +1134 -0
- package/src/constants/token-data/baseRegistryFixed.json +1134 -0
- package/src/constants/token-data/bnbMainnetRegistry.json +900 -0
- package/src/constants/token-data/bnbMainnetRegistryFixed.json +900 -0
- package/src/constants/token-data/ethMainnetRegistry.json +4298 -0
- package/src/constants/token-data/ethMainnetRegistryFixed.json +4298 -0
- package/src/constants/token-data/index.ts +60 -0
- package/src/constants/token-data/localhostRegistry.json +2784 -0
- package/src/constants/token-data/optimismRegistry.json +701 -0
- package/src/constants/token-data/optimismRegistryFixed.json +701 -0
- package/src/constants/token-data/polygonRegistry.json +2309 -0
- package/src/constants/token-data/polygonRegistryFixed.json +2309 -0
- package/src/constants/token-data/popularTokens.constants.ts +11 -0
- package/src/constants/token-data/tokenPricing.consts.ts +2 -0
- package/src/constants/token.limits.constants.ts +31 -0
- package/src/constants/vite.constants.ts +74 -0
- package/src/constants/wallet.constants.ts +9 -0
- package/src/crypto/babyJub.ts +31 -0
- package/src/crypto/index.ts +3 -0
- package/src/crypto/poseidon.ts +36 -0
- package/src/crypto/preProcessing.ts +20 -0
- package/src/data-structures/ApprovalDBs/EventsPublicApprovalsDB.ts +288 -0
- package/src/data-structures/ApprovalDBs/index.ts +1 -0
- package/src/data-structures/Hinkal/Hinkal.ts +746 -0
- package/src/data-structures/Hinkal/IHinkal.ts +315 -0
- package/src/data-structures/Hinkal/handleAutoDepositBack.ts +138 -0
- package/src/data-structures/Hinkal/hinkalActionFundApproveAndTransact.ts +64 -0
- package/src/data-structures/Hinkal/hinkalActionReceive.ts +65 -0
- package/src/data-structures/Hinkal/hinkalActionStake.ts +152 -0
- package/src/data-structures/Hinkal/hinkalApprove.ts +170 -0
- package/src/data-structures/Hinkal/hinkalCheckTokenRegistry.ts +26 -0
- package/src/data-structures/Hinkal/hinkalDeposit.ts +199 -0
- package/src/data-structures/Hinkal/hinkalGetRecipientInfo.ts +12 -0
- package/src/data-structures/Hinkal/hinkalGetZkMeProvider.ts +31 -0
- package/src/data-structures/Hinkal/hinkalInsideTransact.ts +190 -0
- package/src/data-structures/Hinkal/hinkalMultiSend.ts +26 -0
- package/src/data-structures/Hinkal/hinkalPrivateWallet.ts +198 -0
- package/src/data-structures/Hinkal/hinkalProoflessDeposit.ts +91 -0
- package/src/data-structures/Hinkal/hinkalProxySwap.ts +91 -0
- package/src/data-structures/Hinkal/hinkalSignSubAccount.ts +28 -0
- package/src/data-structures/Hinkal/hinkalSwap.ts +157 -0
- package/src/data-structures/Hinkal/hinkalTransfer.ts +171 -0
- package/src/data-structures/Hinkal/hinkalWithdraw.ts +161 -0
- package/src/data-structures/Hinkal/index.ts +9 -0
- package/src/data-structures/Hinkal/resetMerkleTrees.ts +64 -0
- package/src/data-structures/IndexedDB/activity-db.ts +204 -0
- package/src/data-structures/IndexedDB/balances-db.ts +97 -0
- package/src/data-structures/IndexedDB/contact-db.ts +81 -0
- package/src/data-structures/IndexedDB/index.ts +6 -0
- package/src/data-structures/IndexedDB/prices-db.ts +89 -0
- package/src/data-structures/IndexedDB/private-balances-db.ts +31 -0
- package/src/data-structures/IndexedDB/signatures-db.ts +62 -0
- package/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.ts +152 -0
- package/src/data-structures/TokenDBs/AlchemyPublicTokensDB.ts +224 -0
- package/src/data-structures/TokenDBs/ArcPublicTokensDB.ts +198 -0
- package/src/data-structures/TokenDBs/EventsPublicTokensDB.ts +216 -0
- package/src/data-structures/TokenDBs/IPublicTokensDB.ts +7 -0
- package/src/data-structures/TokenDBs/PrivateTokensDB.ts +96 -0
- package/src/data-structures/TokenDBs/PublicTokensDB.ts +49 -0
- package/src/data-structures/TokenDBs/index.ts +4 -0
- package/src/data-structures/TokenDBs/token-visibility-db.ts +154 -0
- package/src/data-structures/ValueCache/ValueCache.ts +29 -0
- package/src/data-structures/ValueCache/index.ts +1 -0
- package/src/data-structures/cacheDevices/AttachableMemoryCacheDevice.ts +33 -0
- package/src/data-structures/cacheDevices/BaseCacheDevice.ts +30 -0
- package/src/data-structures/cacheDevices/FileCacheDevice.ts +59 -0
- package/src/data-structures/cacheDevices/LocalStorageCacheDevice.ts +36 -0
- package/src/data-structures/cacheDevices/index.ts +2 -0
- package/src/data-structures/crypto-keys/decodeUTXO.ts +60 -0
- package/src/data-structures/crypto-keys/encryptDecryptUtxo.ts +74 -0
- package/src/data-structures/crypto-keys/index.ts +4 -0
- package/src/data-structures/crypto-keys/keyUtils.ts +8 -0
- package/src/data-structures/crypto-keys/keys.ts +203 -0
- package/src/data-structures/custom-token-registry/CustomTokenRegistry.ts +49 -0
- package/src/data-structures/event-service/AbstractAccessTokenSnapshotService.ts +142 -0
- package/src/data-structures/event-service/AbstractApprovalsSnapshotService.ts +152 -0
- package/src/data-structures/event-service/AbstractCommitmentsSnapshotService.ts +116 -0
- package/src/data-structures/event-service/AbstractEventService.ts +44 -0
- package/src/data-structures/event-service/AbstractNullifierSnapshotService.ts +76 -0
- package/src/data-structures/event-service/AbstractSnapshotService.ts +63 -0
- package/src/data-structures/event-service/BlockchainEventEmitter.ts +132 -0
- package/src/data-structures/event-service/index.ts +7 -0
- package/src/data-structures/index.ts +18 -0
- package/src/data-structures/merkle-tree/MerkleTree.test.ts +77 -0
- package/src/data-structures/merkle-tree/MerkleTree.ts +253 -0
- package/src/data-structures/merkle-tree/MerkleTreeIncompleteError.ts +6 -0
- package/src/data-structures/merkle-tree/getPatchedAccessTokenMerkleTree.ts +24 -0
- package/src/data-structures/merkle-tree/index.ts +3 -0
- package/src/data-structures/presale/PresaleContractWrapper.ts +80 -0
- package/src/data-structures/presale/index.ts +1 -0
- package/src/data-structures/provider-adapter/IProviderAdapter.ts +43 -0
- package/src/data-structures/snapshot/ClientAccessTokenSnapshotService.ts +41 -0
- package/src/data-structures/snapshot/ClientApprovalsSnapshotService.ts +36 -0
- package/src/data-structures/snapshot/ClientCommitmentsSnapshotService.ts +30 -0
- package/src/data-structures/snapshot/ClientNullifierSnapshotService.ts +28 -0
- package/src/data-structures/snapshot/SnapshotFetcherService.ts +68 -0
- package/src/data-structures/snapshot/index.ts +1 -0
- package/src/data-structures/token-price-fetcher/TokenChecker.ts +45 -0
- package/src/data-structures/token-price-fetcher/index.ts +1 -0
- package/src/data-structures/tor/HttpClient.ts +118 -0
- package/src/data-structures/tor/TorAdapter.ts +94 -0
- package/src/data-structures/tor/TorClient.ts +283 -0
- package/src/data-structures/tor/WebSocketDuplex.ts +32 -0
- package/src/data-structures/tor/index.ts +3 -0
- package/src/data-structures/transactions-manager/history/history.types.ts +14 -0
- package/src/data-structures/transactions-manager/index.ts +1 -0
- package/src/data-structures/utxo/Utxo.ts +189 -0
- package/src/error-handling/customErrors/ErrorWithAmount.ts +8 -0
- package/src/error-handling/customErrors/ErrorWithTx.ts +10 -0
- package/src/error-handling/customErrors/FeeOverTransactionValueError.ts +16 -0
- package/src/error-handling/customErrors/SimulationFailureError.ts +9 -0
- package/src/error-handling/customErrors/customErrors.helpers.ts +39 -0
- package/src/error-handling/customErrors/index.ts +5 -0
- package/src/error-handling/error-codes.constants.ts +214 -0
- package/src/error-handling/get-error.message.ts +149 -0
- package/src/error-handling/handleErrorRestore.ts +25 -0
- package/src/error-handling/index.ts +7 -0
- package/src/error-handling/logError.ts +8 -0
- package/src/error-handling/logger.ts +21 -0
- package/src/error-handling/types.ts +10 -0
- package/src/externalABIs/BUSD.ts +516 -0
- package/src/externalABIs/BabPassport.json +24 -0
- package/src/externalABIs/DAI.ts +331 -0
- package/src/externalABIs/ERC1155.json +316 -0
- package/src/externalABIs/ERC20.json +297 -0
- package/src/externalABIs/ERC20.ts +1 -0
- package/src/externalABIs/ERC721.json +205 -0
- package/src/externalABIs/GalxePassport.json +23 -0
- package/src/externalABIs/IQuoterV2.json +211 -0
- package/src/externalABIs/ISwapRouter.json +568 -0
- package/src/externalABIs/IUniswapV3Factory.json +207 -0
- package/src/externalABIs/IUniswapV3Pool.json +999 -0
- package/src/externalABIs/NodeInterfaceABI.json +1 -0
- package/src/externalABIs/OptimismGasPriceOracle.json +1 -0
- package/src/externalABIs/PoLidoNftAbi.json +307 -0
- package/src/externalABIs/SanctionsList.ts +86 -0
- package/src/externalABIs/USDC.ts +718 -0
- package/src/externalABIs/USDR.ts +343 -0
- package/src/externalABIs/USDR3CRV.ts +539 -0
- package/src/externalABIs/USDT.ts +390 -0
- package/src/externalABIs/UniswapV2PoolAbi.json +66 -0
- package/src/externalABIs/WETH.ts +153 -0
- package/src/externalABIs/amToken.ts +347 -0
- package/src/externalABIs/index.ts +53 -0
- package/src/externalABIs/swapAbi.ts +442 -0
- package/src/externalABIs/transactionsProver.json +45 -0
- package/src/functions/index.ts +16 -0
- package/src/functions/kyc/aiPriseHelper.ts +0 -0
- package/src/functions/kyc/authentoHelper.ts +44 -0
- package/src/functions/kyc/index.ts +3 -0
- package/src/functions/kyc/openDefaultPassportWindow.ts +9 -0
- package/src/functions/kyc/passportHelper.ts +13 -0
- package/src/functions/kyc/zkMeHelper.ts +69 -0
- package/src/functions/pre-transaction/constructAdminData.ts +21 -0
- package/src/functions/pre-transaction/getExternalSwapAddress.ts +30 -0
- package/src/functions/pre-transaction/getFeeStructure.ts +44 -0
- package/src/functions/pre-transaction/getFlatFees.ts +88 -0
- package/src/functions/pre-transaction/getSignatureDataForTransact.ts +16 -0
- package/src/functions/pre-transaction/getVolatileTransferAmount.ts +56 -0
- package/src/functions/pre-transaction/index.ts +7 -0
- package/src/functions/pre-transaction/interaction-to-action.ts +17 -0
- package/src/functions/pre-transaction/merge-with-fee-structure-emporium.ts +50 -0
- package/src/functions/pre-transaction/merge-with-fee-structure.ts +35 -0
- package/src/functions/pre-transaction/outputApprovalDataProcessing.ts +95 -0
- package/src/functions/pre-transaction/outputUtxoProcessing.ts +52 -0
- package/src/functions/pre-transaction/process-gas-estimates.ts +36 -0
- package/src/functions/pre-transaction/shouldPatchAccessTokenMerkleTree.ts +15 -0
- package/src/functions/private-wallet/emporium.helpers.ts +296 -0
- package/src/functions/private-wallet/emporium.swap.helpers.ts +284 -0
- package/src/functions/private-wallet/index.ts +3 -0
- package/src/functions/private-wallet/opProducer.ts +33 -0
- package/src/functions/snarkjs/common.snarkjs.ts +377 -0
- package/src/functions/snarkjs/constant.ts +490 -0
- package/src/functions/snarkjs/constructEmporiumProof.ts +301 -0
- package/src/functions/snarkjs/constructGeneralZkProof.ts +281 -0
- package/src/functions/snarkjs/generateCircomData.ts +81 -0
- package/src/functions/snarkjs/generateZkProof.ts +21 -0
- package/src/functions/snarkjs/generateZkProofEnclave.ts +45 -0
- package/src/functions/snarkjs/generateZkProofSelf.ts +29 -0
- package/src/functions/snarkjs/getOriginalSender.ts +4 -0
- package/src/functions/snarkjs/getZKFiles.ts +29 -0
- package/src/functions/snarkjs/index.ts +4 -0
- package/src/functions/staking/index.ts +78 -0
- package/src/functions/utils/addresses.ts +37 -0
- package/src/functions/utils/amounts.utils.test.ts +91 -0
- package/src/functions/utils/amounts.utils.ts +119 -0
- package/src/functions/utils/arraysMatch.ts +4 -0
- package/src/functions/utils/cacheDevice.utils.ts +21 -0
- package/src/functions/utils/cacheFunctions.ts +154 -0
- package/src/functions/utils/caseInsensitive.utils.ts +10 -0
- package/src/functions/utils/convertEmporiumOpToCallInfo.ts +19 -0
- package/src/functions/utils/convertIntegrationProviderToExternalActionId.ts +14 -0
- package/src/functions/utils/create-provider.ts +11 -0
- package/src/functions/utils/encodeTokenWithId.ts +4 -0
- package/src/functions/utils/encryptInputForEnclave.ts +119 -0
- package/src/functions/utils/enum.utils.ts +30 -0
- package/src/functions/utils/erc20tokenFunctions.ts +110 -0
- package/src/functions/utils/ethers-formatter.utils.ts +32 -0
- package/src/functions/utils/evmNetworkFunctions.ts +9 -0
- package/src/functions/utils/external-action.utils.ts +15 -0
- package/src/functions/utils/fees.utils.ts +26 -0
- package/src/functions/utils/get-hinkal-approvals.ts +36 -0
- package/src/functions/utils/get-signature-header.ts +5 -0
- package/src/functions/utils/getBlockExplorerUrl.ts +14 -0
- package/src/functions/utils/getDataFromTransaction.ts +79 -0
- package/src/functions/utils/getRecipientInfoFromUserKeys.ts +28 -0
- package/src/functions/utils/inLogicMetadata.ts +9 -0
- package/src/functions/utils/index.ts +43 -0
- package/src/functions/utils/involves-permit2-op.ts +17 -0
- package/src/functions/utils/ipfs.ts +74 -0
- package/src/functions/utils/is-valid-url.ts +5 -0
- package/src/functions/utils/lifi.utils.ts +3 -0
- package/src/functions/utils/memoize.utils.ts +23 -0
- package/src/functions/utils/merkleTree.utils.ts +27 -0
- package/src/functions/utils/mutexes.utils.ts +3 -0
- package/src/functions/utils/mystery-box-auction.utils.ts +61 -0
- package/src/functions/utils/networks.utils.ts +6 -0
- package/src/functions/utils/nftTokenFunctions.ts +25 -0
- package/src/functions/utils/nickname.utils.ts +4 -0
- package/src/functions/utils/postToOffscreen.ts +6 -0
- package/src/functions/utils/prepareHinkal.ts +78 -0
- package/src/functions/utils/process.utils.ts +23 -0
- package/src/functions/utils/processUseApprovalUtxoData.ts +26 -0
- package/src/functions/utils/publicBalance.utils.ts +131 -0
- package/src/functions/utils/reloadPage.ts +1 -0
- package/src/functions/utils/replaceAddressInCalldata.ts +6 -0
- package/src/functions/utils/requireEnv.ts +10 -0
- package/src/functions/utils/resolve-sync.utils.ts +40 -0
- package/src/functions/utils/rpc-int-encode.ts +7 -0
- package/src/functions/utils/serialize.utils.ts +12 -0
- package/src/functions/utils/string.utils.ts +92 -0
- package/src/functions/utils/time.utils.ts +80 -0
- package/src/functions/utils/token-check.utils.ts +12 -0
- package/src/functions/utils/trimFieldValues.ts +24 -0
- package/src/functions/utils/upToDateState.ts +12 -0
- package/src/functions/utils/userAgent.ts +26 -0
- package/src/functions/utils/walletBalances.utils.ts +117 -0
- package/src/functions/web3/EIP-712.test.ts +302 -0
- package/src/functions/web3/EIP-712.ts +243 -0
- package/src/functions/web3/etherFunctions.test.ts +129 -0
- package/src/functions/web3/etherFunctions.ts +84 -0
- package/src/functions/web3/events/balanceChangedCustomHandler.ts +13 -0
- package/src/functions/web3/events/balanceChangedHandler.ts +10 -0
- package/src/functions/web3/events/getApprovedBalance.ts +154 -0
- package/src/functions/web3/events/getInputUtxoAndBalance.ts +305 -0
- package/src/functions/web3/events/getInputUtxosEnclave.ts +40 -0
- package/src/functions/web3/events/getShieldedBalance.ts +163 -0
- package/src/functions/web3/events/getTransactionLogEvents.ts +55 -0
- package/src/functions/web3/events/index.ts +7 -0
- package/src/functions/web3/events/web3RetrieveEvents.ts +33 -0
- package/src/functions/web3/functionCalls/accessTokenCalls.ts +27 -0
- package/src/functions/web3/functionCalls/approveToken.ts +180 -0
- package/src/functions/web3/functionCalls/approveTokensToHinkal.ts +21 -0
- package/src/functions/web3/functionCalls/estimateGasRelayer.ts +40 -0
- package/src/functions/web3/functionCalls/getRootHash.ts +7 -0
- package/src/functions/web3/functionCalls/inHinkalApprovalCalls.ts +60 -0
- package/src/functions/web3/functionCalls/relayFunctions.ts +12 -0
- package/src/functions/web3/functionCalls/transactCallDirect.ts +71 -0
- package/src/functions/web3/functionCalls/transactCallRelayer.ts +57 -0
- package/src/functions/web3/getContractMetadata.ts +43 -0
- package/src/functions/web3/getPublicAddressBalance.ts +17 -0
- package/src/functions/web3/getTokenHolder.ts +53 -0
- package/src/functions/web3/index.ts +9 -0
- package/src/functions/web3/lifiAPI.ts +41 -0
- package/src/functions/web3/odosAPI.ts +50 -0
- package/src/functions/web3/oneInchAPI.ts +47 -0
- package/src/functions/web3/runContractFunction.ts +116 -0
- package/src/functions/web3/uniswapAPI.ts +156 -0
- package/src/index.ts +9 -0
- package/src/mutexes/index.ts +1 -0
- package/src/mutexes/mutex.ts +3 -0
- package/src/providers/EthersProviderAdapter.ts +230 -0
- package/src/providers/TorExternalProvider.ts +36 -0
- package/src/providers/WagmiProviderAdapter.ts +311 -0
- package/src/providers/exportProviers.ts +11 -0
- package/src/providers/prepareEthersHinkal.ts +18 -0
- package/src/providers/prepareWagmiHinkal.ts +16 -0
- package/src/types/API.types.ts +23 -0
- package/src/types/ICacheDevice.ts +5 -0
- package/src/types/IMultiThreadedUtxoUtils.ts +16 -0
- package/src/types/RewardUserEnums.ts +12 -0
- package/src/types/TransactionSimulator.types.ts +30 -0
- package/src/types/WeeklyAnalytics.types.ts +44 -0
- package/src/types/activities.types.ts +90 -0
- package/src/types/admin.types.ts +30 -0
- package/src/types/all-points.types.ts +8 -0
- package/src/types/approvals.types.ts +45 -0
- package/src/types/balances.types.ts +20 -0
- package/src/types/big-intable.types.ts +3 -0
- package/src/types/bridging.types.ts +30 -0
- package/src/types/brotherhood-user.types.ts +13 -0
- package/src/types/cache.types.ts +42 -0
- package/src/types/circom-data.types.ts +120 -0
- package/src/types/coingecko.types.ts +216 -0
- package/src/types/commitments.types.ts +39 -0
- package/src/types/confirmation-request.types.ts +10 -0
- package/src/types/contacts.types.ts +6 -0
- package/src/types/crypto.types.ts +8 -0
- package/src/types/duneAPI.types.ts +9 -0
- package/src/types/eip5792.types.ts +31 -0
- package/src/types/ethereum-network.types.ts +70 -0
- package/src/types/external-action.types.ts +19 -0
- package/src/types/fee.types.ts +11 -0
- package/src/types/generatePoints.ts +14 -0
- package/src/types/hinkal.stake.types.ts +12 -0
- package/src/types/hinkal.types.ts +150 -0
- package/src/types/index.ts +50 -0
- package/src/types/kyc.types.ts +49 -0
- package/src/types/merch-order.types.ts +18 -0
- package/src/types/message.types.ts +6 -0
- package/src/types/mystery-boxes.types.ts +50 -0
- package/src/types/new-rewards.type.ts +181 -0
- package/src/types/offscreen.types.ts +8 -0
- package/src/types/presaleReferral.types.ts +4 -0
- package/src/types/proxy.types.ts +11 -0
- package/src/types/referral.types.ts +13 -0
- package/src/types/relayer.types.ts +16 -0
- package/src/types/remote-proof.types.ts +18 -0
- package/src/types/rewards.types.ts +53 -0
- package/src/types/routing.types.ts +7 -0
- package/src/types/sandbox.types.ts +246 -0
- package/src/types/session.types.ts +12 -0
- package/src/types/signature.types.ts +11 -0
- package/src/types/slippage.types.ts +3 -0
- package/src/types/snark.types.ts +43 -0
- package/src/types/tenderly.api.types.ts +200 -0
- package/src/types/token-prices.types.ts +8 -0
- package/src/types/token-with-id.types.ts +4 -0
- package/src/types/token.types.ts +86 -0
- package/src/types/transactions.types.ts +120 -0
- package/src/types/wc.types.ts +83 -0
- package/src/types/with-id.types.ts +1 -0
- package/src/webworker/performTaskWithWorker.ts +50 -0
- package/src/webworker/snarkjsWorker/snarkjs.d.ts +2 -0
- package/src/webworker/snarkjsWorker/snarkjsWorker.types.ts +18 -0
- package/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts +19 -0
- package/src/webworker/snarkjsWorker/snarkjsWorkerLogic.ts +90 -0
- package/src/webworker/utxoWorker/utxoWorker.types.ts +41 -0
- package/src/webworker/utxoWorker/utxoWorkerLauncher.ts +19 -0
- package/src/webworker/utxoWorker/utxoWorkerLogic.ts +107 -0
- package/src/webworker/viteWorkerURL.constant.ts +25 -0
- package/src/webworker/worker.registry.ts +11 -0
- package/src/webworker/worker.types.ts +35 -0
- package/src/webworker/workerErrorHandler.ts +10 -0
- package/src/webworker/workerFactory.ts +47 -0
- package/src/webworker/workerProxy.ts +88 -0
- package/src/webworker/zkProofWorker/zkProofWorker.types.ts +52 -0
- package/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts +19 -0
- package/src/webworker/zkProofWorker/zkProofWorkerLogic.ts +84 -0
- package/tsconfig.json +23 -0
- package/tsconfig.lib.json +10 -0
- package/tsconfig.spec.json +15 -0
- package/vite.config.ts +97 -0
- 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,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
|
+
};
|