@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,47 @@
|
|
|
1
|
+
import { callOneInchAPI, OneInchRequest } from '../../API/callOneInchAPI';
|
|
2
|
+
import { oneInchZeroAddress, zeroAddress } from '../../constants';
|
|
3
|
+
import { Logger, transactionErrorCodes } from '../../error-handling';
|
|
4
|
+
import { ContractType, ERC20Token } from '../../types';
|
|
5
|
+
import { getAmountInWei } from './etherFunctions';
|
|
6
|
+
import { getContractMetadata } from './getContractMetadata';
|
|
7
|
+
|
|
8
|
+
export const getOneInchPrice = async (
|
|
9
|
+
chainId: number,
|
|
10
|
+
inSwapToken: ERC20Token,
|
|
11
|
+
outSwapToken: ERC20Token,
|
|
12
|
+
inSwapAmount: string,
|
|
13
|
+
slippagePercentage = 0.7,
|
|
14
|
+
) => {
|
|
15
|
+
try {
|
|
16
|
+
const request: OneInchRequest = {
|
|
17
|
+
fromTokenAddress:
|
|
18
|
+
inSwapToken.erc20TokenAddress !== zeroAddress ? inSwapToken.erc20TokenAddress : oneInchZeroAddress,
|
|
19
|
+
toTokenAddress:
|
|
20
|
+
outSwapToken.erc20TokenAddress !== zeroAddress ? outSwapToken.erc20TokenAddress : oneInchZeroAddress,
|
|
21
|
+
fromAddress: zeroAddress, // we user zero address here because this paramater is not relevant to us, only destReceiver is
|
|
22
|
+
destReceiver: getContractMetadata(ContractType.OneInchExternalActionContract, chainId).address,
|
|
23
|
+
amount: getAmountInWei(inSwapToken, inSwapAmount),
|
|
24
|
+
slippage: slippagePercentage,
|
|
25
|
+
disableEstimate: true, // disable gas estimation, we don't need it
|
|
26
|
+
// disable partial filling:
|
|
27
|
+
// if slippage tolerance isn't satisfied 1inch will try to swap less amount of input tokens
|
|
28
|
+
// and returning leftover tokens to fromAddress
|
|
29
|
+
// this is not what we want
|
|
30
|
+
allowPartialFill: false,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const response = await callOneInchAPI(chainId, request);
|
|
34
|
+
|
|
35
|
+
if (!response || !response.tx) {
|
|
36
|
+
throw Error('OneInch API price fetch error');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
outSwapAmountValue: BigInt(response.toAmount),
|
|
41
|
+
oneInchDataValue: response.tx.data, // calldata to use
|
|
42
|
+
};
|
|
43
|
+
} catch (error: unknown) {
|
|
44
|
+
Logger.log({ error });
|
|
45
|
+
throw Error(transactionErrorCodes.NO_ONEINCH_PRICE);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { BigNumber, ethers } from 'ethers';
|
|
2
|
+
import { getErrorMessage, transactionErrorCodes, UserFriendlyErrorCodes } from '../../error-handling';
|
|
3
|
+
|
|
4
|
+
const defaultWaitTime = 50000;
|
|
5
|
+
const defaultConfirmations = 1;
|
|
6
|
+
const initialGasPremium = 11;
|
|
7
|
+
const secondaryGasPremium = 15;
|
|
8
|
+
|
|
9
|
+
enum GasPremiumType {
|
|
10
|
+
Initial,
|
|
11
|
+
Secondary,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface IRunTransaction {
|
|
15
|
+
contractFunction: ethers.ContractFunction;
|
|
16
|
+
args: unknown[];
|
|
17
|
+
gasLimit?: number;
|
|
18
|
+
gasPrice?: BigNumber;
|
|
19
|
+
confirmations?: number;
|
|
20
|
+
waitTime?: number;
|
|
21
|
+
nonce?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface IRunContractFunction extends IRunTransaction {
|
|
25
|
+
provider: ethers.providers.Provider;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const getGasPrice = async (
|
|
29
|
+
provider: ethers.providers.Provider,
|
|
30
|
+
gasPremiumType: GasPremiumType,
|
|
31
|
+
): Promise<BigNumber | undefined> => {
|
|
32
|
+
try {
|
|
33
|
+
const feeData = await provider.getFeeData();
|
|
34
|
+
const gasPremium = gasPremiumType === GasPremiumType.Initial ? initialGasPremium : secondaryGasPremium;
|
|
35
|
+
const gasPrice = feeData.gasPrice?.mul(gasPremium).div(10) ?? undefined;
|
|
36
|
+
return gasPrice;
|
|
37
|
+
} catch (err: unknown) {
|
|
38
|
+
console.log('getGasPrice error: ', { err });
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const waitTransaction = (
|
|
44
|
+
transactionResponse: ethers.ContractTransaction,
|
|
45
|
+
confirmations: number,
|
|
46
|
+
waitTime: number,
|
|
47
|
+
): Promise<ethers.ContractReceipt> =>
|
|
48
|
+
new Promise((resolve, reject) => {
|
|
49
|
+
const timeoutId = setTimeout(() => {
|
|
50
|
+
reject(new Error(transactionErrorCodes.TRANSACTION_TIMEOUT));
|
|
51
|
+
}, waitTime);
|
|
52
|
+
|
|
53
|
+
transactionResponse
|
|
54
|
+
.wait(confirmations)
|
|
55
|
+
.then((tx) => {
|
|
56
|
+
clearTimeout(timeoutId);
|
|
57
|
+
resolve(tx);
|
|
58
|
+
})
|
|
59
|
+
.catch((err: unknown) => {
|
|
60
|
+
clearTimeout(timeoutId);
|
|
61
|
+
reject(err);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const runTransaction = async ({
|
|
66
|
+
contractFunction,
|
|
67
|
+
args,
|
|
68
|
+
gasPrice,
|
|
69
|
+
gasLimit,
|
|
70
|
+
nonce,
|
|
71
|
+
confirmations,
|
|
72
|
+
waitTime,
|
|
73
|
+
}: IRunTransaction) => {
|
|
74
|
+
const transactionResponse: ethers.ContractTransaction = await contractFunction(...args, {
|
|
75
|
+
type: 0,
|
|
76
|
+
gasLimit,
|
|
77
|
+
gasPrice,
|
|
78
|
+
nonce,
|
|
79
|
+
});
|
|
80
|
+
const tx = await waitTransaction(
|
|
81
|
+
transactionResponse,
|
|
82
|
+
confirmations ?? defaultConfirmations,
|
|
83
|
+
waitTime ?? defaultWaitTime,
|
|
84
|
+
);
|
|
85
|
+
return tx;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// Note: this function should only be used on the backend
|
|
89
|
+
export const runContractFunction = async ({
|
|
90
|
+
provider,
|
|
91
|
+
contractFunction,
|
|
92
|
+
args,
|
|
93
|
+
gasLimit,
|
|
94
|
+
nonce,
|
|
95
|
+
confirmations,
|
|
96
|
+
}: IRunContractFunction): Promise<ethers.ContractReceipt> => {
|
|
97
|
+
try {
|
|
98
|
+
const gasPrice = await getGasPrice(provider, GasPremiumType.Initial);
|
|
99
|
+
const tx = await runTransaction({ contractFunction, args, gasPrice, gasLimit, nonce, confirmations });
|
|
100
|
+
return tx;
|
|
101
|
+
} catch (err: any) {
|
|
102
|
+
const errMessage = getErrorMessage(err);
|
|
103
|
+
// Case 1. Transaction was underpriced
|
|
104
|
+
// Case 2. Transaction is stuck in the mem-pool and we need to replace it with higher gas price
|
|
105
|
+
if (
|
|
106
|
+
errMessage === UserFriendlyErrorCodes.MAX_FEE_GAS_ERROR ||
|
|
107
|
+
errMessage === transactionErrorCodes.TRANSACTION_TIMEOUT
|
|
108
|
+
) {
|
|
109
|
+
console.log('Timeout Hit: Increase gas');
|
|
110
|
+
const gasPrice = await getGasPrice(provider, GasPremiumType.Secondary);
|
|
111
|
+
const tx = await runTransaction({ contractFunction, args, gasPrice, gasLimit, nonce, confirmations });
|
|
112
|
+
return tx;
|
|
113
|
+
}
|
|
114
|
+
throw err;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/dot-notation */
|
|
2
|
+
import { Contract, utils } from 'ethers';
|
|
3
|
+
import { networkRegistry, zeroAddress } from '../../constants';
|
|
4
|
+
import { logError, transactionErrorCodes } from '../../error-handling';
|
|
5
|
+
import { ContractType, ERC20Token } from '../../types';
|
|
6
|
+
import { getAmountInWei } from './etherFunctions';
|
|
7
|
+
import { IHinkal } from '@hinkal/common/data-structures/Hinkal/IHinkal';
|
|
8
|
+
|
|
9
|
+
interface PoolAndFee {
|
|
10
|
+
poolAddress: string;
|
|
11
|
+
fee: number;
|
|
12
|
+
token1Balance: bigint;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const searchPoolAndFee = async (
|
|
16
|
+
token1Contract: Contract,
|
|
17
|
+
factory: Contract,
|
|
18
|
+
token0Address: string,
|
|
19
|
+
token1Address: string,
|
|
20
|
+
): Promise<PoolAndFee> => {
|
|
21
|
+
// Finding all the pools of given pair of tokens
|
|
22
|
+
const poolArray = (
|
|
23
|
+
await Promise.all(
|
|
24
|
+
[100, 500, 3000, 10000].map(async (fee) => {
|
|
25
|
+
return {
|
|
26
|
+
poolAddress: await factory['getPool'](token0Address, token1Address, fee),
|
|
27
|
+
fee,
|
|
28
|
+
};
|
|
29
|
+
}),
|
|
30
|
+
)
|
|
31
|
+
)
|
|
32
|
+
// intentionally filter out address(0), getPool returns zeroAddress when pool doesn't exist
|
|
33
|
+
// this may seem redundant since we check balances of the addresses below
|
|
34
|
+
// but some tokens do have balances for address(0), most notably WETH on mainnet
|
|
35
|
+
.filter(({ poolAddress }) => poolAddress !== zeroAddress);
|
|
36
|
+
|
|
37
|
+
// Finding maximum token1 balance
|
|
38
|
+
const poolsWithBalances = await Promise.all(
|
|
39
|
+
poolArray.map(async (pool) => ({
|
|
40
|
+
poolAddress: pool.poolAddress,
|
|
41
|
+
fee: pool.fee,
|
|
42
|
+
token1Balance: (await token1Contract['balanceOf'](pool.poolAddress)).toBigInt(),
|
|
43
|
+
})),
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const token1Balances = poolsWithBalances.map((pool) => pool.token1Balance);
|
|
47
|
+
const maxBalance: bigint = token1Balances.reduce((prevValue: bigint, currentValue: bigint) => {
|
|
48
|
+
if (currentValue >= prevValue) {
|
|
49
|
+
return currentValue;
|
|
50
|
+
}
|
|
51
|
+
return prevValue;
|
|
52
|
+
}, 0n);
|
|
53
|
+
|
|
54
|
+
if (maxBalance === 0n) {
|
|
55
|
+
throw new Error(transactionErrorCodes.UNISWAP_NOT_ENOUGH_LIQUIDITY);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const bestPool = poolsWithBalances.find((pool) => pool.token1Balance === maxBalance) as PoolAndFee;
|
|
59
|
+
return bestPool;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const getUniswapPriceHelper = async (
|
|
63
|
+
hinkal: IHinkal,
|
|
64
|
+
chainId: number,
|
|
65
|
+
token0: ERC20Token,
|
|
66
|
+
token1: ERC20Token,
|
|
67
|
+
fee: number,
|
|
68
|
+
inSwapAmount: bigint,
|
|
69
|
+
): Promise<bigint> => {
|
|
70
|
+
try {
|
|
71
|
+
if (!networkRegistry[chainId].quoterV2Address) throw Error('No Quoter Contract Provided');
|
|
72
|
+
const quoter = hinkal.getContractWithFetcherByChainId(
|
|
73
|
+
chainId,
|
|
74
|
+
ContractType.UniswapV3QuoterContract,
|
|
75
|
+
networkRegistry[chainId].quoterV2Address,
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
const price = (
|
|
79
|
+
await quoter.callStatic['quoteExactInputSingle']({
|
|
80
|
+
tokenIn: token0.wrappedErc20TokenAddress ?? token0.erc20TokenAddress,
|
|
81
|
+
tokenOut: token1.wrappedErc20TokenAddress ?? token1.erc20TokenAddress,
|
|
82
|
+
fee,
|
|
83
|
+
amountIn: inSwapAmount,
|
|
84
|
+
sqrtPriceLimitX96: 0,
|
|
85
|
+
})
|
|
86
|
+
).amountOut.toBigInt();
|
|
87
|
+
return price;
|
|
88
|
+
} catch (error) {
|
|
89
|
+
logError(error);
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const getUniswapFee = async (
|
|
95
|
+
hinkal: IHinkal,
|
|
96
|
+
chainId: number,
|
|
97
|
+
token0: ERC20Token,
|
|
98
|
+
token1: ERC20Token,
|
|
99
|
+
): Promise<number> => {
|
|
100
|
+
try {
|
|
101
|
+
const factory = hinkal.getContractWithFetcherByChainId(
|
|
102
|
+
chainId,
|
|
103
|
+
ContractType.UniswapV3FactoryContract,
|
|
104
|
+
networkRegistry[chainId].uniswapV3FactoryAddress,
|
|
105
|
+
); // as IUniswapV3Factory;
|
|
106
|
+
|
|
107
|
+
// 100 = 0.01%, 500 = 0.05%, 3000 = 0.3%, 100000 = 1% -> different fee structures
|
|
108
|
+
const token1Contract = hinkal.getContractWithFetcherByChainId(
|
|
109
|
+
chainId,
|
|
110
|
+
ContractType.ERC20Contract,
|
|
111
|
+
token1.wrappedErc20TokenAddress ?? token1.erc20TokenAddress,
|
|
112
|
+
); // as IERC20;
|
|
113
|
+
|
|
114
|
+
const { fee } = await searchPoolAndFee(
|
|
115
|
+
token1Contract,
|
|
116
|
+
factory,
|
|
117
|
+
token0.wrappedErc20TokenAddress ?? token0.erc20TokenAddress,
|
|
118
|
+
token1.wrappedErc20TokenAddress ?? token1.erc20TokenAddress,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
return fee;
|
|
122
|
+
} catch (err) {
|
|
123
|
+
console.log('Error in getUniswapFee', err);
|
|
124
|
+
throw err;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export const getUniswapPrice = async (
|
|
129
|
+
hinkal: IHinkal,
|
|
130
|
+
chainId: number,
|
|
131
|
+
inSwapAmount: string,
|
|
132
|
+
inSwapToken: ERC20Token,
|
|
133
|
+
outSwapToken: ERC20Token,
|
|
134
|
+
) => {
|
|
135
|
+
try {
|
|
136
|
+
// for some reason there are existing pools with aave tokens in them, despite the fact that
|
|
137
|
+
// volatile tokens aren't supported by uniswap
|
|
138
|
+
const feeNumber = await getUniswapFee(hinkal, chainId, inSwapToken, outSwapToken);
|
|
139
|
+
const poolFee = utils.defaultAbiCoder.encode(['uint24'], [feeNumber]);
|
|
140
|
+
const inSwapAmountInWei = getAmountInWei(inSwapToken, inSwapAmount);
|
|
141
|
+
|
|
142
|
+
// this is final price after fee deduction (does not include relayer fee)
|
|
143
|
+
const tokenPrice = await getUniswapPriceHelper(
|
|
144
|
+
hinkal,
|
|
145
|
+
chainId,
|
|
146
|
+
inSwapToken,
|
|
147
|
+
outSwapToken,
|
|
148
|
+
feeNumber,
|
|
149
|
+
inSwapAmountInWei,
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
return { tokenPrice, poolFee };
|
|
153
|
+
} catch (error: unknown) {
|
|
154
|
+
throw Error(transactionErrorCodes.NO_UNISWAP_PRICE);
|
|
155
|
+
}
|
|
156
|
+
};
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './API';
|
|
2
|
+
export * from './constants';
|
|
3
|
+
export * from './crypto';
|
|
4
|
+
export * from './data-structures';
|
|
5
|
+
export * from './error-handling';
|
|
6
|
+
export * from './externalABIs';
|
|
7
|
+
export * from './functions';
|
|
8
|
+
export * from './types';
|
|
9
|
+
export * from './mutexes';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './mutex';
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { ChainEventListener, IProviderAdapter } from '../data-structures/provider-adapter/IProviderAdapter';
|
|
2
|
+
import { chainIds, localhostNetwork, networkRegistry } from '../constants/chains.constants';
|
|
3
|
+
import { ContractMetadata, ContractType, EthereumNetwork } from '../types/ethereum-network.types';
|
|
4
|
+
import { transactionErrorCodes } from '../error-handling/error-codes.constants';
|
|
5
|
+
import { ethers, providers, Signer, utils } from 'ethers';
|
|
6
|
+
import {
|
|
7
|
+
getContract,
|
|
8
|
+
getContractMetadata,
|
|
9
|
+
getContractWithFetcherByChainId,
|
|
10
|
+
} from '../functions/web3/getContractMetadata';
|
|
11
|
+
import { createTorRpcProvider } from '../functions';
|
|
12
|
+
import { httpClient } from '../data-structures/tor';
|
|
13
|
+
|
|
14
|
+
export class EthersProviderAdapter implements IProviderAdapter<Signer> {
|
|
15
|
+
public signer: Signer | undefined;
|
|
16
|
+
|
|
17
|
+
public chainId: number | undefined;
|
|
18
|
+
|
|
19
|
+
private originalProvider: providers.Provider | undefined;
|
|
20
|
+
|
|
21
|
+
private fetchProvider: providers.Provider | undefined;
|
|
22
|
+
|
|
23
|
+
private chainEventListener?: ChainEventListener;
|
|
24
|
+
|
|
25
|
+
initConnector(): void {}
|
|
26
|
+
|
|
27
|
+
initSigner(signer: Signer): void {
|
|
28
|
+
this.signer = signer;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
getSigner(): Signer {
|
|
32
|
+
if (!this.signer) throw new Error('No Signer In Provider Adapter');
|
|
33
|
+
return this.signer;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
requireSigner() {
|
|
37
|
+
if (!this.signer) throw Error('No Connector In Provider Adapter');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async init(chainId?: number): Promise<void> {
|
|
41
|
+
this.requireSigner();
|
|
42
|
+
// init chainId
|
|
43
|
+
if (chainId) this.chainId = chainId;
|
|
44
|
+
// init providers
|
|
45
|
+
const signerProvider = this.signer!.provider;
|
|
46
|
+
|
|
47
|
+
const customFetchProvider = this.createFetchProvider();
|
|
48
|
+
|
|
49
|
+
const useTor = httpClient.getUseTor();
|
|
50
|
+
|
|
51
|
+
if (useTor && customFetchProvider) {
|
|
52
|
+
this.originalProvider = customFetchProvider;
|
|
53
|
+
this.fetchProvider = customFetchProvider;
|
|
54
|
+
} else {
|
|
55
|
+
this.originalProvider = signerProvider;
|
|
56
|
+
this.fetchProvider = customFetchProvider ?? signerProvider;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (this.fetchProvider === signerProvider && !useTor) {
|
|
60
|
+
console.warn('fetchProvider not available, falling back to signer provider');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async disconnectFromConnector(): Promise<void> {
|
|
65
|
+
// do nothing
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async connectToConnector(): Promise<number> {
|
|
69
|
+
// do nothing
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async waitForTransaction(transactionHash: string, confirmations: number): Promise<boolean> {
|
|
74
|
+
const txReceipt = await this.fetchProvider?.waitForTransaction(transactionHash, confirmations);
|
|
75
|
+
if (txReceipt?.status) return true;
|
|
76
|
+
throw Error(transactionErrorCodes.TRANSACTION_NOT_CONFIRMED);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async signMessage(message: string): Promise<string> {
|
|
80
|
+
this.requireSigner();
|
|
81
|
+
const signature = await this.signer!.signMessage(message);
|
|
82
|
+
if (!signature) throw new Error(transactionErrorCodes.SIGNING_FAILED); // coinbase wallet returns undefined in some cases.
|
|
83
|
+
if (signature.includes('error')) throw new Error(transactionErrorCodes.SIGNATURE_UNSUPPORTED_PERSONAL_SIGN);
|
|
84
|
+
return signature;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async signTypedData(
|
|
88
|
+
domain: ethers.TypedDataDomain,
|
|
89
|
+
types: Record<string, ethers.TypedDataField[]>,
|
|
90
|
+
value: Record<string, unknown>,
|
|
91
|
+
): Promise<string> {
|
|
92
|
+
// TODO: Avoid type casting
|
|
93
|
+
return (this.signer as providers.JsonRpcSigner)._signTypedData(domain, types, value);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
getSelectedNetwork = (): EthereumNetwork | undefined => {
|
|
97
|
+
if (!this.chainId) throw new Error('Illegal state: no chaindId');
|
|
98
|
+
return networkRegistry[this.chainId];
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
async switchNetwork(network: EthereumNetwork): Promise<void> {
|
|
102
|
+
this.originalProvider = this.createFetchProvider(network) ?? this.originalProvider;
|
|
103
|
+
if (!this.originalProvider) throw new Error('switchNetwork illegal state: no provider');
|
|
104
|
+
this.signer = this.signer?.connect(this.originalProvider);
|
|
105
|
+
this.chainEventListener?.onChainChanged(network.chainId);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async switchAccount(newSigner: Signer): Promise<void> {
|
|
109
|
+
const newProvider = this.createFetchProvider();
|
|
110
|
+
if (!newProvider) throw new Error("can't create new fetch provider");
|
|
111
|
+
this.signer = newSigner.connect(newProvider);
|
|
112
|
+
await this.onAccountChanged();
|
|
113
|
+
this.chainEventListener?.onAccountChanged();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
private createFetchProvider(network?: EthereumNetwork) {
|
|
117
|
+
try {
|
|
118
|
+
const finalNetwork = network ?? networkRegistry[this.chainId!];
|
|
119
|
+
const fetchRpcUrl = finalNetwork?.fetchRpcUrl;
|
|
120
|
+
|
|
121
|
+
if (!fetchRpcUrl) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return createTorRpcProvider(fetchRpcUrl);
|
|
126
|
+
} catch (err: any) {
|
|
127
|
+
console.log('create Fetch Provider error', err);
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async getAddress(): Promise<string> {
|
|
133
|
+
this.requireSigner();
|
|
134
|
+
const address = await this.signer!.getAddress();
|
|
135
|
+
if (!address) {
|
|
136
|
+
throw new Error('IllegalState');
|
|
137
|
+
}
|
|
138
|
+
return utils.getAddress(address);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
setChainEventListener(chainEventListener: ChainEventListener): void {
|
|
142
|
+
this.chainEventListener = chainEventListener;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
onAccountChanged(): Promise<unknown> {
|
|
146
|
+
return this.init();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
onChainChanged(chainId?: number): Promise<unknown> {
|
|
150
|
+
return this.init(chainId);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
release(): void {
|
|
154
|
+
this.removeListeners();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private removeListeners() {
|
|
158
|
+
this.chainEventListener = undefined;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private parseChainIdParam(chainId: number | undefined) {
|
|
162
|
+
const resultChainId = chainId ?? this.chainId;
|
|
163
|
+
|
|
164
|
+
if (!resultChainId) {
|
|
165
|
+
throw new Error('No chainId provided in context');
|
|
166
|
+
}
|
|
167
|
+
return resultChainId;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
getContractMetadata(contractType: ContractType, chainId?: number): ContractMetadata {
|
|
171
|
+
const resultChainId = this.parseChainIdParam(chainId);
|
|
172
|
+
|
|
173
|
+
return getContractMetadata(contractType, resultChainId);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
getContract(contractType: ContractType, contractAddress = undefined, chainId?: number): ethers.Contract {
|
|
177
|
+
const resultChainId = this.parseChainIdParam(chainId);
|
|
178
|
+
|
|
179
|
+
return getContract(contractType, resultChainId, contractAddress);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
getContractWithSigner(contract: ContractType, contractAddress = undefined): ethers.Contract {
|
|
183
|
+
if (!this.signer) throw new Error('IllegalState: no signer');
|
|
184
|
+
|
|
185
|
+
return this.getContract(contract, contractAddress).connect(this.signer);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
getContractWithFetcher(contract: ContractType, contractAddress = undefined): ethers.Contract {
|
|
189
|
+
if (!this.fetchProvider) throw new Error('fetchProvider not initialized');
|
|
190
|
+
|
|
191
|
+
return this.getContract(contract, contractAddress).connect(this.fetchProvider);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
getContractWithFetcherForEthereum(contract: ContractType, contractAddress = undefined): ethers.Contract {
|
|
195
|
+
const chainIdForRpcUrl =
|
|
196
|
+
this.chainId === chainIds.localhost && localhostNetwork === chainIds.ethMainnet
|
|
197
|
+
? chainIds.localhost
|
|
198
|
+
: chainIds.ethMainnet;
|
|
199
|
+
|
|
200
|
+
return getContractWithFetcherByChainId(chainIdForRpcUrl, contract, contractAddress);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
async sendTransaction(tx: ethers.providers.TransactionRequest): Promise<ethers.providers.TransactionResponse> {
|
|
204
|
+
if (!this.signer) throw new Error('IllegalState: no signer');
|
|
205
|
+
|
|
206
|
+
const resp = await this.signer.sendTransaction(tx);
|
|
207
|
+
|
|
208
|
+
return resp;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
async connectAndPatchProvider(): Promise<number> {
|
|
212
|
+
this.requireSigner();
|
|
213
|
+
const chainId = await this.signer!.getChainId();
|
|
214
|
+
return chainId;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
isPermitterAvailable(): boolean {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
async getGasPrice(): Promise<bigint> {
|
|
222
|
+
const price = await this.fetchProvider?.getGasPrice();
|
|
223
|
+
if (!price) throw Error('Could not fetch gas price in getGasPrice');
|
|
224
|
+
return price.toBigInt();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export const ethersProvierAdapter = new EthersProviderAdapter();
|
|
229
|
+
|
|
230
|
+
export default <T = unknown>() => new EthersProviderAdapter() as any as IProviderAdapter<T>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ExternalProvider } from '@ethersproject/providers';
|
|
2
|
+
import { httpClient } from '../data-structures/tor/HttpClient';
|
|
3
|
+
import { Logger } from '../error-handling/logger';
|
|
4
|
+
|
|
5
|
+
export class TorExternalProvider implements ExternalProvider {
|
|
6
|
+
private rpcUrl: string;
|
|
7
|
+
|
|
8
|
+
private nextId = 1;
|
|
9
|
+
|
|
10
|
+
constructor(rpcUrl: string) {
|
|
11
|
+
this.rpcUrl = rpcUrl;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async request(request: { method: string; params?: Array<any> }): Promise<any> {
|
|
15
|
+
const payload = {
|
|
16
|
+
jsonrpc: '2.0',
|
|
17
|
+
id: this.nextId,
|
|
18
|
+
method: request.method,
|
|
19
|
+
params: request.params || [],
|
|
20
|
+
};
|
|
21
|
+
this.nextId += 1;
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
const response = await httpClient.post(this.rpcUrl, payload);
|
|
25
|
+
|
|
26
|
+
if (response.error) {
|
|
27
|
+
throw new Error(response.error.message || 'RPC Error');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return response.result;
|
|
31
|
+
} catch (error) {
|
|
32
|
+
Logger.error('TorExternalProvider RPC error:', error);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|