@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,74 @@
|
|
|
1
|
+
import { CID } from 'multiformats';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Removes IPFS protocol prefix from input string.
|
|
5
|
+
*
|
|
6
|
+
* @param ipfsUrl - An IPFS url (e.g. ipfs://{content id})
|
|
7
|
+
* @returns IPFS content identifier and (possibly) path in a string
|
|
8
|
+
* @throws Will throw if the url passed is not IPFS.
|
|
9
|
+
*/
|
|
10
|
+
const removeIpfsProtocolPrefix = (ipfsUrl: string) => {
|
|
11
|
+
if (ipfsUrl.startsWith('ipfs://ipfs/')) {
|
|
12
|
+
return ipfsUrl.replace('ipfs://ipfs/', '');
|
|
13
|
+
} else if (ipfsUrl.startsWith('ipfs://')) {
|
|
14
|
+
return ipfsUrl.replace('ipfs://', '');
|
|
15
|
+
}
|
|
16
|
+
// this method should not be used with non-ipfs urls (i.e. startsWith('ipfs://') === true)
|
|
17
|
+
throw new Error('this method should not be used with non ipfs urls');
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Extracts content identifier and path from an input string.
|
|
22
|
+
*
|
|
23
|
+
* @param ipfsUrl - An IPFS URL minus the IPFS protocol prefix
|
|
24
|
+
* @returns IFPS content identifier (cid) and sub path as string.
|
|
25
|
+
* @throws Will throw if the url passed is not ipfs.
|
|
26
|
+
*/
|
|
27
|
+
const getIpfsCIDv1AndPath = (ipfsUrl: string) => {
|
|
28
|
+
const url = removeIpfsProtocolPrefix(ipfsUrl);
|
|
29
|
+
|
|
30
|
+
// check if there is a path
|
|
31
|
+
// (CID is everything preceding first forward slash, path is everything after)
|
|
32
|
+
const index = url.indexOf('/');
|
|
33
|
+
const cid = index !== -1 ? url.substring(0, index) : url;
|
|
34
|
+
const path = index !== -1 ? url.substring(index) : undefined;
|
|
35
|
+
|
|
36
|
+
// We want to ensure that the CID is v1 (https://docs.ipfs.io/concepts/content-addressing/#identifier-formats)
|
|
37
|
+
// because most cid v0s appear to be incompatible with IPFS subdomains
|
|
38
|
+
return {
|
|
39
|
+
cid: CID.parse(cid).toV1().toString(),
|
|
40
|
+
path,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Adds URL protocol prefix to input URL string if missing.
|
|
46
|
+
*
|
|
47
|
+
* @param urlString - An IPFS URL.
|
|
48
|
+
* @returns A URL with a https:// prepended.
|
|
49
|
+
*/
|
|
50
|
+
const addUrlProtocolPrefix = (urlString: string): string => {
|
|
51
|
+
if (!urlString.match(/(^http:\/\/)|(^https:\/\/)/u)) {
|
|
52
|
+
return `https://${urlString}`;
|
|
53
|
+
}
|
|
54
|
+
return urlString;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const IPFS_DEFAULT_GATEWAY_URL = 'https://ipfs.io/ipfs/';
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Formats URL correctly for use retrieving assets hosted on IPFS.
|
|
61
|
+
*
|
|
62
|
+
* @param ipfsUrl - The IFPS URL pointed at the asset.
|
|
63
|
+
* @param subdomainSupported - Boolean indicating whether the URL should be formatted with subdomains or not.
|
|
64
|
+
* @returns A formatted URL, with the user's preferred IPFS gateway and format (subdomain or not), pointing to an asset hosted on IPFS.
|
|
65
|
+
*/
|
|
66
|
+
export const getFormattedIpfsUrl = (ipfsUrl: string, subdomainSupported: boolean) => {
|
|
67
|
+
const { host, protocol, origin } = new URL(addUrlProtocolPrefix(IPFS_DEFAULT_GATEWAY_URL));
|
|
68
|
+
if (subdomainSupported) {
|
|
69
|
+
const { cid, path } = getIpfsCIDv1AndPath(ipfsUrl);
|
|
70
|
+
return `${protocol}//${cid}.ipfs.${host}${path ?? ''}`;
|
|
71
|
+
}
|
|
72
|
+
const cidAndPath = removeIpfsProtocolPrefix(ipfsUrl);
|
|
73
|
+
return `${origin}/ipfs/${cidAndPath}`;
|
|
74
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CustomJSONStringify } from './serialize.utils';
|
|
2
|
+
|
|
3
|
+
export const memoizeFunc = <T extends any[], R>(fn: (...args: T) => R) => {
|
|
4
|
+
const cache = new Map<string, R>();
|
|
5
|
+
|
|
6
|
+
return (...args: T) => {
|
|
7
|
+
const key = CustomJSONStringify(args);
|
|
8
|
+
if (cache.has(key)) {
|
|
9
|
+
// Uncomment to do equivalency check to make sure memoized values are correct
|
|
10
|
+
// =================================================================================
|
|
11
|
+
// const result = fn(...args);
|
|
12
|
+
// if (CustomJSONStringify(result) !== CustomJSONStringify(cache.get(key))) {
|
|
13
|
+
// throw Error('Memoized result do not equal compute result');
|
|
14
|
+
// }
|
|
15
|
+
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
17
|
+
return cache.get(key)!;
|
|
18
|
+
}
|
|
19
|
+
const result = fn(...args);
|
|
20
|
+
cache.set(key, result);
|
|
21
|
+
return result;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { MERKLE_LEVELS } from '../../constants/protocol.constants';
|
|
2
|
+
import { poseidonFunction } from '../../crypto/poseidon';
|
|
3
|
+
import { MerkleTree, MerkleTreeJson } from '../../data-structures/merkle-tree/MerkleTree';
|
|
4
|
+
|
|
5
|
+
const serializedTreeToMap = (tree: Record<string, string>): Map<bigint, bigint> => {
|
|
6
|
+
return new Map<bigint, bigint>(
|
|
7
|
+
Object.entries(tree).map(([key, value]: [string, string]) => [BigInt(key), BigInt(value)]),
|
|
8
|
+
);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const contructMerkleTreeFromSerialized = (merkleTreeSerialized: MerkleTreeJson) => {
|
|
12
|
+
const tree = serializedTreeToMap(merkleTreeSerialized.tree);
|
|
13
|
+
const reverseTree = merkleTreeSerialized.reverseTree
|
|
14
|
+
? serializedTreeToMap(merkleTreeSerialized.reverseTree)
|
|
15
|
+
: undefined;
|
|
16
|
+
|
|
17
|
+
const merkleTree = MerkleTree.createWithData(
|
|
18
|
+
tree,
|
|
19
|
+
reverseTree,
|
|
20
|
+
BigInt(merkleTreeSerialized.index),
|
|
21
|
+
BigInt(merkleTreeSerialized.count),
|
|
22
|
+
poseidonFunction,
|
|
23
|
+
MERKLE_LEVELS,
|
|
24
|
+
0n,
|
|
25
|
+
);
|
|
26
|
+
return merkleTree;
|
|
27
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Rank } from '../../types';
|
|
2
|
+
import { BOX_AUCTION_DURATIONS_MINUTES, BOX_ENDING_PRICES, BOX_STARTING_PRICES } from '../../constants';
|
|
3
|
+
import { getCurrentDayStart } from './time.utils';
|
|
4
|
+
|
|
5
|
+
const getAuctionTiming = (rank: Rank, utcOverride?: number) => {
|
|
6
|
+
const now = utcOverride ? new Date(utcOverride) : new Date();
|
|
7
|
+
const startOfDay = getCurrentDayStart().getTime();
|
|
8
|
+
const durationMs = BOX_AUCTION_DURATIONS_MINUTES[rank] * 60 * 1000;
|
|
9
|
+
const totalElapsed = now.getTime() - startOfDay;
|
|
10
|
+
const elapsedInInterval = totalElapsed % durationMs;
|
|
11
|
+
return { now: now.getTime(), startOfDay, durationMs, totalElapsed, elapsedInInterval };
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const getLinearPrice = (rank: Rank, utcOverride?: number): number => {
|
|
15
|
+
const { durationMs, elapsedInInterval } = getAuctionTiming(rank, utcOverride);
|
|
16
|
+
const startPrice = BOX_STARTING_PRICES[rank];
|
|
17
|
+
const endPrice = BOX_ENDING_PRICES[rank];
|
|
18
|
+
const priceDrop = startPrice - endPrice;
|
|
19
|
+
const price = startPrice - (elapsedInInterval / durationMs) * priceDrop;
|
|
20
|
+
return Math.ceil(Math.max(price, endPrice));
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const getAuctionTime = (rank: Rank, mode: 'remaining' | 'elapsed', utcOverride?: number): string => {
|
|
24
|
+
const { durationMs, elapsedInInterval } = getAuctionTiming(rank, utcOverride);
|
|
25
|
+
|
|
26
|
+
const remainingMs = durationMs - elapsedInInterval;
|
|
27
|
+
const targetMs = mode === 'remaining' ? remainingMs : elapsedInInterval;
|
|
28
|
+
|
|
29
|
+
const minutes = Math.floor(targetMs / 60000);
|
|
30
|
+
const seconds = Math.floor((targetMs % 60000) / 1000);
|
|
31
|
+
|
|
32
|
+
if (minutes === 0) return `${seconds}s`;
|
|
33
|
+
return `${minutes}m ${seconds}s`;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const getCurrentAuctionIntervalStartUTC = (rank: Rank): Date => {
|
|
37
|
+
const now = new Date();
|
|
38
|
+
const { elapsedInInterval } = getAuctionTiming(rank);
|
|
39
|
+
|
|
40
|
+
const intervalStart = new Date(now.getTime() - elapsedInInterval);
|
|
41
|
+
return new Date(
|
|
42
|
+
Date.UTC(
|
|
43
|
+
intervalStart.getUTCFullYear(),
|
|
44
|
+
intervalStart.getUTCMonth(),
|
|
45
|
+
intervalStart.getUTCDate(),
|
|
46
|
+
intervalStart.getUTCHours(),
|
|
47
|
+
intervalStart.getUTCMinutes(),
|
|
48
|
+
intervalStart.getUTCSeconds(),
|
|
49
|
+
intervalStart.getUTCMilliseconds(),
|
|
50
|
+
),
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const parseAuctionTime = (timeStr: string): { minutes: number; seconds: number } => {
|
|
55
|
+
const match = timeStr.match(/(?:(\d+)m)?\s*(\d+)?s?/);
|
|
56
|
+
if (!match) return { minutes: 0, seconds: 0 };
|
|
57
|
+
|
|
58
|
+
const minutes = match[1] ? parseInt(match[1], 10) : 0;
|
|
59
|
+
const seconds = match[2] ? parseInt(match[2], 10) : 0;
|
|
60
|
+
return { minutes, seconds };
|
|
61
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { NFT_TRANSACTION_TYPES } from '../../constants/protocol.constants';
|
|
2
|
+
import { Logger } from '../../error-handling';
|
|
3
|
+
import { RPCSimulationAssetChange } from '../../types/tenderly.api.types';
|
|
4
|
+
|
|
5
|
+
export const extractTokenIdsFromAssetChanges = (assetChanges: RPCSimulationAssetChange[]) => {
|
|
6
|
+
const nftTokenIds: Record<string, string[]> = {};
|
|
7
|
+
|
|
8
|
+
assetChanges.forEach(({ assetInfo, id }) => {
|
|
9
|
+
if (NFT_TRANSACTION_TYPES.includes(assetInfo.standard) && id) {
|
|
10
|
+
try {
|
|
11
|
+
if (assetInfo?.contractAddress) {
|
|
12
|
+
const contractAddress = assetInfo.contractAddress.toLowerCase();
|
|
13
|
+
if (!nftTokenIds[contractAddress]) {
|
|
14
|
+
nftTokenIds[contractAddress] = [];
|
|
15
|
+
}
|
|
16
|
+
nftTokenIds[contractAddress].push(BigInt(id).toString());
|
|
17
|
+
}
|
|
18
|
+
} catch (err) {
|
|
19
|
+
Logger.error(`Failed to parse tokenId: ${id}`, err);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return nftTokenIds;
|
|
25
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { ethers, Signer } from 'ethers';
|
|
2
|
+
import { preProcessing } from '../../crypto/preProcessing';
|
|
3
|
+
import ethersProvider from '../../providers/EthersProviderAdapter';
|
|
4
|
+
import { networkRegistry } from '../../constants/chains.constants';
|
|
5
|
+
import { IHinkal } from '../../data-structures/Hinkal/IHinkal';
|
|
6
|
+
import { UserKeys } from '../../data-structures/crypto-keys/keys';
|
|
7
|
+
import { createTorRpcProvider } from './create-provider';
|
|
8
|
+
|
|
9
|
+
export const createSigner = (privateKey: string, chainId: number) => {
|
|
10
|
+
const rpcUrl = networkRegistry[chainId].fetchRpcUrl;
|
|
11
|
+
if (!rpcUrl) throw new Error('RPC URL not found for the specified chain ID');
|
|
12
|
+
const provider = createTorRpcProvider(rpcUrl);
|
|
13
|
+
return new ethers.Wallet(privateKey, provider);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const createVoidSigner = (address: string, chainId: number) => {
|
|
17
|
+
const rpcUrl = networkRegistry[chainId].fetchRpcUrl;
|
|
18
|
+
if (!rpcUrl) throw new Error('RPC URL not found for the specified chain ID');
|
|
19
|
+
const provider = createTorRpcProvider(rpcUrl);
|
|
20
|
+
return new ethers.VoidSigner(address, provider);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const prepareHinkal = async (hinkal: IHinkal, signer: ethers.Wallet) => {
|
|
24
|
+
await preProcessing();
|
|
25
|
+
const providerAdapter = ethersProvider<Signer>();
|
|
26
|
+
providerAdapter.initSigner?.(signer);
|
|
27
|
+
await hinkal.initProviderAdapter(undefined, providerAdapter);
|
|
28
|
+
await hinkal.initUserKeys();
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// CASE: INIT WALLET WITH SIGNATURE
|
|
32
|
+
export const prepareHinkalWithSignature = async (
|
|
33
|
+
hinkal: IHinkal,
|
|
34
|
+
address: string,
|
|
35
|
+
chainId: number,
|
|
36
|
+
signature: string,
|
|
37
|
+
) => {
|
|
38
|
+
await preProcessing();
|
|
39
|
+
const providerAdapter = ethersProvider<Signer>();
|
|
40
|
+
const signer = createVoidSigner(address, chainId);
|
|
41
|
+
providerAdapter.initSigner?.(signer);
|
|
42
|
+
await hinkal.initProviderAdapter(undefined, providerAdapter);
|
|
43
|
+
await hinkal.initUserKeysWithPassword(signature);
|
|
44
|
+
return signer;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// CASE: CREATE NEW ACCOUNT IN WALLET
|
|
48
|
+
export const prepareToAccessNewWallet = async (hinkal: IHinkal, privateKey: string) => {
|
|
49
|
+
await preProcessing();
|
|
50
|
+
const chainId = hinkal.getSelectedNetwork()?.chainId;
|
|
51
|
+
if (!chainId) throw Error('chainId is undefined');
|
|
52
|
+
|
|
53
|
+
const signer = createSigner(privateKey, chainId);
|
|
54
|
+
|
|
55
|
+
// We init userKeys here to avoid concurrency issues, userKeys don't depend on Hinkal, requires signer only
|
|
56
|
+
const providerAdapter = ethersProvider<Signer>();
|
|
57
|
+
providerAdapter.initSigner?.(signer);
|
|
58
|
+
const userKeys = new UserKeys(await providerAdapter.signMessage(hinkal.signingMessage));
|
|
59
|
+
|
|
60
|
+
return { userKeys, signer };
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// CASE: SWITCH TO NEW ACCOUNT IN WALLET
|
|
64
|
+
export const prepareToAccessNewWalletWithSignature = async (hinkal: IHinkal, address: string, signature: string) => {
|
|
65
|
+
await preProcessing();
|
|
66
|
+
const chainId = hinkal.getSelectedNetwork()?.chainId;
|
|
67
|
+
if (!chainId) throw Error('chainId is undefined');
|
|
68
|
+
|
|
69
|
+
const signer = createVoidSigner(address, chainId);
|
|
70
|
+
// We init userKeys here to avoid concurrency issues, userKeys don't depend on Hinkal, requires signer only
|
|
71
|
+
const providerAdapter = ethersProvider<Signer>();
|
|
72
|
+
providerAdapter.initSigner?.(signer);
|
|
73
|
+
const userKeys = new UserKeys(signature);
|
|
74
|
+
|
|
75
|
+
await hinkal.switchAccount(signer);
|
|
76
|
+
|
|
77
|
+
return userKeys;
|
|
78
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** pause execution for a number of miliseconds */
|
|
2
|
+
export const wait = (miliseconds: number) =>
|
|
3
|
+
new Promise((r) => {
|
|
4
|
+
setTimeout(r, miliseconds);
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
/** only call function once with a given number of milliseconds
|
|
8
|
+
* Ex: let debounceMyFunc = debounce(myFunc, 1000);
|
|
9
|
+
* debounceMyFunc(); debounceMyFunc();
|
|
10
|
+
*/
|
|
11
|
+
export function debounce(func: (...args: any[]) => void, debounceForMs: number) {
|
|
12
|
+
let timeout: string | number | NodeJS.Timeout | undefined;
|
|
13
|
+
|
|
14
|
+
return function executedFunction(...args: any[]) {
|
|
15
|
+
const later = () => {
|
|
16
|
+
clearTimeout(timeout);
|
|
17
|
+
func(...args);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
clearTimeout(timeout);
|
|
21
|
+
timeout = setTimeout(later, debounceForMs);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { zeroAddress } from '../../constants/protocol.constants';
|
|
2
|
+
import { APPROVED_UTXO_CONVERSION_COUNT } from '../../constants/conversion.constants';
|
|
3
|
+
import { UseApprovalUTXOData } from '../../types/hinkal.types';
|
|
4
|
+
|
|
5
|
+
const padArray = <T>(arr: T[], padWith: T, targetLength: number) => {
|
|
6
|
+
const arrClone = [...arr];
|
|
7
|
+
while (arrClone.length < targetLength) arrClone.push(padWith);
|
|
8
|
+
return arrClone;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const padUseApprovalUtxoData = (useApprovalUtxoData: UseApprovalUTXOData) => {
|
|
12
|
+
const result = structuredClone(useApprovalUtxoData);
|
|
13
|
+
|
|
14
|
+
result.approvalChanges = padArray(result.approvalChanges, 0n, APPROVED_UTXO_CONVERSION_COUNT);
|
|
15
|
+
result.conversionInHinkalAddress = padArray(result.conversionInHinkalAddress, 0n, APPROVED_UTXO_CONVERSION_COUNT);
|
|
16
|
+
result.externalApprovalAddresses = padArray(
|
|
17
|
+
result.externalApprovalAddresses,
|
|
18
|
+
zeroAddress,
|
|
19
|
+
APPROVED_UTXO_CONVERSION_COUNT,
|
|
20
|
+
);
|
|
21
|
+
return result;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const isUseApprovalDataEmpty = (useApprovalUtxoData: UseApprovalUTXOData) => {
|
|
25
|
+
return useApprovalUtxoData.approvalChanges[0] === 0n;
|
|
26
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { networkRegistry } from '../../constants/chains.constants';
|
|
3
|
+
import { TokenType, zeroAddress } from '../../constants/protocol.constants';
|
|
4
|
+
import { ERC20Token, NFT, TokenBalance } from '../../types/token.types';
|
|
5
|
+
import { getErc20TokensForChain, isNFTToken } from './erc20tokenFunctions';
|
|
6
|
+
import { ERC20ABI } from '../../externalABIs/swapAbi';
|
|
7
|
+
import { Logger } from '../../error-handling/logger';
|
|
8
|
+
import { ERC1155ABI, ERC721ABI } from '../../externalABIs';
|
|
9
|
+
import { getFormattedIpfsUrl } from './ipfs';
|
|
10
|
+
import { createTorRpcProvider } from './create-provider';
|
|
11
|
+
import { httpClient } from '../../data-structures/tor';
|
|
12
|
+
|
|
13
|
+
const createProvider = (chainId: number): ethers.providers.Provider => {
|
|
14
|
+
const { fetchRpcUrl } = networkRegistry[chainId];
|
|
15
|
+
|
|
16
|
+
if (!fetchRpcUrl) {
|
|
17
|
+
throw new Error(`No RPC URL configured for chain ${chainId}`);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return createTorRpcProvider(fetchRpcUrl);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const getPublicBalance = async (
|
|
24
|
+
provider: ethers.providers.JsonRpcProvider,
|
|
25
|
+
ethereumAddress: string,
|
|
26
|
+
token: ERC20Token,
|
|
27
|
+
) => {
|
|
28
|
+
try {
|
|
29
|
+
const contractAddress = token.erc20TokenAddress;
|
|
30
|
+
let fetchedBalance;
|
|
31
|
+
|
|
32
|
+
const contract = new ethers.Contract(token.erc20TokenAddress, ERC20ABI, provider);
|
|
33
|
+
if (contractAddress !== zeroAddress) {
|
|
34
|
+
fetchedBalance = await contract?.['balanceOf'](ethereumAddress);
|
|
35
|
+
} else {
|
|
36
|
+
fetchedBalance = await contract.provider.getBalance(ethereumAddress);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const balance = fetchedBalance.toBigInt();
|
|
40
|
+
if (balance <= 0n) return null;
|
|
41
|
+
|
|
42
|
+
return { token, balance } as TokenBalance;
|
|
43
|
+
} catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const getNFTBalance = async (
|
|
49
|
+
provider: ethers.providers.JsonRpcProvider,
|
|
50
|
+
token: ERC20Token,
|
|
51
|
+
): Promise<TokenBalance | null> => {
|
|
52
|
+
const isERC721 = token.nftTokenType === TokenType.ERC721;
|
|
53
|
+
const nftContract = new ethers.Contract(token.erc20TokenAddress, isERC721 ? ERC721ABI : ERC1155ABI, provider);
|
|
54
|
+
const { tokenIds } = token;
|
|
55
|
+
if (!tokenIds?.length) return null;
|
|
56
|
+
|
|
57
|
+
const nfts: NFT[] = await Promise.all(
|
|
58
|
+
tokenIds.map(async (tokenId) => {
|
|
59
|
+
try {
|
|
60
|
+
const uri = await nftContract[isERC721 ? 'tokenURI' : 'uri'](tokenId);
|
|
61
|
+
const tokenURI = uri.startsWith('ipfs://') ? getFormattedIpfsUrl(uri, false) : uri;
|
|
62
|
+
const replacedUri = isERC721 ? tokenURI : tokenURI.replace('{id}', tokenId);
|
|
63
|
+
if (replacedUri) {
|
|
64
|
+
const metaData = await httpClient.get(replacedUri);
|
|
65
|
+
if (metaData?.image?.startsWith('ipfs://')) {
|
|
66
|
+
metaData.image = getFormattedIpfsUrl(metaData.image, false);
|
|
67
|
+
}
|
|
68
|
+
return { image: metaData.image, tokenId: Number(tokenId), name: metaData.name };
|
|
69
|
+
}
|
|
70
|
+
return { tokenId: Number(tokenId) };
|
|
71
|
+
} catch (e) {
|
|
72
|
+
return { tokenId: Number(tokenId) };
|
|
73
|
+
}
|
|
74
|
+
}),
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
token,
|
|
79
|
+
balance: tokenIds?.length ? BigInt(tokenIds.length) : 0n,
|
|
80
|
+
nfts,
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const getPublicBalancesOfTokens = async (
|
|
85
|
+
chainId: number,
|
|
86
|
+
ethereumAddress: string,
|
|
87
|
+
tokens?: ERC20Token[],
|
|
88
|
+
): Promise<TokenBalance[]> => {
|
|
89
|
+
const tokensList = tokens ?? getErc20TokensForChain(chainId);
|
|
90
|
+
const provider = createProvider(chainId);
|
|
91
|
+
|
|
92
|
+
const balances: (TokenBalance | null)[] = await Promise.all(
|
|
93
|
+
tokensList.map(async (token) => {
|
|
94
|
+
return isNFTToken(token)
|
|
95
|
+
? getNFTBalance(provider as any, token)
|
|
96
|
+
: getPublicBalance(provider as any, ethereumAddress, token);
|
|
97
|
+
}),
|
|
98
|
+
);
|
|
99
|
+
return balances.filter((token): token is TokenBalance => token !== null);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export const getPublicBalanceByTokenAddress = async (
|
|
103
|
+
chainId: number,
|
|
104
|
+
ethereumAddress: string,
|
|
105
|
+
tokenAddress: string,
|
|
106
|
+
): Promise<bigint | null> => {
|
|
107
|
+
try {
|
|
108
|
+
const provider = createProvider(chainId);
|
|
109
|
+
const contract = new ethers.Contract(tokenAddress, ERC20ABI, provider);
|
|
110
|
+
let fetchedBalance;
|
|
111
|
+
if (tokenAddress !== zeroAddress) {
|
|
112
|
+
fetchedBalance = await contract?.['balanceOf'](ethereumAddress);
|
|
113
|
+
} else {
|
|
114
|
+
fetchedBalance = await provider.getBalance(ethereumAddress);
|
|
115
|
+
}
|
|
116
|
+
return fetchedBalance.toBigInt();
|
|
117
|
+
} catch {
|
|
118
|
+
Logger.error(`Failed to fetch public balance for address ${ethereumAddress}`);
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export const getPublicTransactionCount = async (chainId: number, ethereumAddress: string): Promise<number | null> => {
|
|
124
|
+
try {
|
|
125
|
+
const provider = createProvider(chainId);
|
|
126
|
+
return await provider.getTransactionCount(ethereumAddress);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
Logger.error(`Failed to fetch transaction count for address ${ethereumAddress} on chain ${chainId}`, error);
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const reloadPage = () => window.location.reload();
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const replaceAddressesInCalldata = (callDataString: string, searchFor: string, replacement: string) => {
|
|
2
|
+
const searchForWithout0x = searchFor.slice(2);
|
|
3
|
+
const replacementWithout0x = replacement.slice(2);
|
|
4
|
+
|
|
5
|
+
return callDataString.toLowerCase().split(searchForWithout0x.toLowerCase()).join(replacementWithout0x.toLowerCase());
|
|
6
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const requireEnv = (environmentVariableName: string): string => {
|
|
2
|
+
const envVar = process.env[environmentVariableName];
|
|
3
|
+
if (envVar === undefined) {
|
|
4
|
+
console.log(`Error: ${environmentVariableName} environment variable not set`);
|
|
5
|
+
// TODO: Do not exit here
|
|
6
|
+
process.exitCode = 1;
|
|
7
|
+
process.exit();
|
|
8
|
+
}
|
|
9
|
+
return envVar;
|
|
10
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
|
+
export const resolveSync = (promiseFns: (() => Promise<any>)[]): Promise<void> =>
|
|
3
|
+
promiseFns.reduce((result, promise) => result.then(() => promise()), Promise.resolve());
|
|
4
|
+
|
|
5
|
+
export const getSequence = (
|
|
6
|
+
fromBlockNumber: number,
|
|
7
|
+
lastBlockNumber: number,
|
|
8
|
+
maxPageSize: number | undefined,
|
|
9
|
+
): { from: number; to: number }[] => {
|
|
10
|
+
const requestSequence: { from: number; to: number }[] = [];
|
|
11
|
+
if (maxPageSize) {
|
|
12
|
+
let nextFromBlockNumber = fromBlockNumber;
|
|
13
|
+
while (nextFromBlockNumber <= lastBlockNumber) {
|
|
14
|
+
const to = Math.min(nextFromBlockNumber + maxPageSize - 1, lastBlockNumber);
|
|
15
|
+
requestSequence.push({
|
|
16
|
+
from: nextFromBlockNumber,
|
|
17
|
+
to,
|
|
18
|
+
});
|
|
19
|
+
nextFromBlockNumber = to + 1;
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
requestSequence.push({
|
|
23
|
+
from: fromBlockNumber,
|
|
24
|
+
to: lastBlockNumber,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return requestSequence;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const promisify = (callback: () => Promise<any>, timeout = 100) =>
|
|
31
|
+
new Promise((resolve, reject) => {
|
|
32
|
+
setTimeout(async () => {
|
|
33
|
+
try {
|
|
34
|
+
await callback();
|
|
35
|
+
resolve(0);
|
|
36
|
+
} catch (err: unknown) {
|
|
37
|
+
reject(err);
|
|
38
|
+
}
|
|
39
|
+
}, timeout);
|
|
40
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const CustomJSONStringify = (args: any) => {
|
|
2
|
+
return JSON.stringify(args, (_, value) => (typeof value === 'bigint' ? `bigint:${value.toString()}` : value));
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
export const CustomJSONParse = (stringifiedJSON: string) => {
|
|
6
|
+
return JSON.parse(stringifiedJSON, (_, value) => {
|
|
7
|
+
if (typeof value === 'string' && value.startsWith('bigint:')) {
|
|
8
|
+
return BigInt(value.slice(7));
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
});
|
|
12
|
+
};
|