@sabaaa1/common 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/.env.example +5 -0
  2. package/.eslintrc.json +18 -0
  3. package/README.md +164 -0
  4. package/copyPackageJson.js +81 -0
  5. package/handleCDNWorkers.js +92 -0
  6. package/jest.config.ts +10 -0
  7. package/package.json +101 -0
  8. package/polyfillWorker.ts +15 -0
  9. package/project.json +32 -0
  10. package/src/API/API.ts +203 -0
  11. package/src/API/admin-calls.ts +8 -0
  12. package/src/API/ai-calls.ts +48 -0
  13. package/src/API/brotherhoodCalls.ts +184 -0
  14. package/src/API/callLifiAPI.ts +41 -0
  15. package/src/API/callMonitor.ts +9 -0
  16. package/src/API/callOdosAPI.ts +89 -0
  17. package/src/API/callOneInchAPI.ts +47 -0
  18. package/src/API/callRelayer.ts +23 -0
  19. package/src/API/checkRisk.ts +7 -0
  20. package/src/API/duneAPI.ts +26 -0
  21. package/src/API/enclaveCalls.ts +23 -0
  22. package/src/API/fetchCommitmentsCache.ts +63 -0
  23. package/src/API/generate-trading-points.ts +77 -0
  24. package/src/API/get-token-data.ts +12 -0
  25. package/src/API/getBridgeProtocols.ts +16 -0
  26. package/src/API/getCoingeckoPrice.ts +59 -0
  27. package/src/API/getGasEstimates.ts +30 -0
  28. package/src/API/getLifiStatus.ts +35 -0
  29. package/src/API/getRelayerURL.ts +27 -0
  30. package/src/API/getServerURL.ts +116 -0
  31. package/src/API/getTokenPrice.ts +39 -0
  32. package/src/API/getWebsiteURL.ts +58 -0
  33. package/src/API/index.ts +19 -0
  34. package/src/API/is-tx-stateless.ts +32 -0
  35. package/src/API/kycCalls.ts +81 -0
  36. package/src/API/leaderboardCalls.ts +32 -0
  37. package/src/API/mysteryBoxesCalls.ts +141 -0
  38. package/src/API/passwordCalls.ts +34 -0
  39. package/src/API/proxyAccountsCalls.ts +40 -0
  40. package/src/API/referralsCalls.ts +52 -0
  41. package/src/API/relayCalls.ts +14 -0
  42. package/src/API/restoreSnapshots.ts +7 -0
  43. package/src/API/rewardsUserCalls.ts +124 -0
  44. package/src/API/send-telegram-callback.ts +17 -0
  45. package/src/API/simulate-batch-tx.ts +19 -0
  46. package/src/API/tenderly.api.ts +96 -0
  47. package/src/API/token-calls.ts +19 -0
  48. package/src/API/weeklyAnalyticCalls.ts +43 -0
  49. package/src/constants/activity.constants.ts +10 -0
  50. package/src/constants/addresses.constants.ts +74 -0
  51. package/src/constants/assets.constants.ts +15 -0
  52. package/src/constants/backend.constants.ts +16 -0
  53. package/src/constants/balance.constants.ts +1 -0
  54. package/src/constants/bridging.constants.ts +5 -0
  55. package/src/constants/chains.constants.ts +194 -0
  56. package/src/constants/coingecko.constants.ts +67 -0
  57. package/src/constants/contracts.constants.ts +106 -0
  58. package/src/constants/conversion.constants.ts +1 -0
  59. package/src/constants/deploy-data/deploy-data-arbMainnet.json +5685 -0
  60. package/src/constants/deploy-data/deploy-data-arcTestnet.json +6157 -0
  61. package/src/constants/deploy-data/deploy-data-avalanche.json +5921 -0
  62. package/src/constants/deploy-data/deploy-data-base.json +5695 -0
  63. package/src/constants/deploy-data/deploy-data-bnbMainnet.json +5921 -0
  64. package/src/constants/deploy-data/deploy-data-ethMainnet.json +5922 -0
  65. package/src/constants/deploy-data/deploy-data-localhost.json +5921 -0
  66. package/src/constants/deploy-data/deploy-data-optimism.json +5687 -0
  67. package/src/constants/deploy-data/deploy-data-polygon.json +5695 -0
  68. package/src/constants/deploy-data/index.ts +21 -0
  69. package/src/constants/events.constants.ts +10 -0
  70. package/src/constants/fees.constants.ts +4 -0
  71. package/src/constants/function-signatures.constants.ts +6 -0
  72. package/src/constants/index.ts +30 -0
  73. package/src/constants/kyc.constants.ts +202 -0
  74. package/src/constants/lifi.constants.ts +1 -0
  75. package/src/constants/mediaUrls.constants.ts +25 -0
  76. package/src/constants/mystery-boxes.constants.ts +402 -0
  77. package/src/constants/oauthUrls.constants.ts +7 -0
  78. package/src/constants/permit2.constants.ts +28 -0
  79. package/src/constants/presale.constants.ts +503 -0
  80. package/src/constants/protocol.constants.ts +65 -0
  81. package/src/constants/reorg-depths.constants.ts +13 -0
  82. package/src/constants/rewards.constants.ts +27 -0
  83. package/src/constants/save-depths.ts +13 -0
  84. package/src/constants/server.constants.ts +233 -0
  85. package/src/constants/tasks.constants.ts +205 -0
  86. package/src/constants/token-data/ERC20Registry.ts +90 -0
  87. package/src/constants/token-data/arbMainnetRegistry.json +1841 -0
  88. package/src/constants/token-data/arbMainnetRegistryFixed.json +1841 -0
  89. package/src/constants/token-data/arcTestnetRegistry.json +436 -0
  90. package/src/constants/token-data/avalancheRegistry.json +729 -0
  91. package/src/constants/token-data/avalancheRegistryFixed.json +729 -0
  92. package/src/constants/token-data/baseRegistry.json +1134 -0
  93. package/src/constants/token-data/baseRegistryFixed.json +1134 -0
  94. package/src/constants/token-data/bnbMainnetRegistry.json +900 -0
  95. package/src/constants/token-data/bnbMainnetRegistryFixed.json +900 -0
  96. package/src/constants/token-data/ethMainnetRegistry.json +4298 -0
  97. package/src/constants/token-data/ethMainnetRegistryFixed.json +4298 -0
  98. package/src/constants/token-data/index.ts +60 -0
  99. package/src/constants/token-data/localhostRegistry.json +2784 -0
  100. package/src/constants/token-data/optimismRegistry.json +701 -0
  101. package/src/constants/token-data/optimismRegistryFixed.json +701 -0
  102. package/src/constants/token-data/polygonRegistry.json +2309 -0
  103. package/src/constants/token-data/polygonRegistryFixed.json +2309 -0
  104. package/src/constants/token-data/popularTokens.constants.ts +11 -0
  105. package/src/constants/token-data/tokenPricing.consts.ts +2 -0
  106. package/src/constants/token.limits.constants.ts +31 -0
  107. package/src/constants/vite.constants.ts +74 -0
  108. package/src/constants/wallet.constants.ts +9 -0
  109. package/src/crypto/babyJub.ts +31 -0
  110. package/src/crypto/index.ts +3 -0
  111. package/src/crypto/poseidon.ts +36 -0
  112. package/src/crypto/preProcessing.ts +20 -0
  113. package/src/data-structures/ApprovalDBs/EventsPublicApprovalsDB.ts +288 -0
  114. package/src/data-structures/ApprovalDBs/index.ts +1 -0
  115. package/src/data-structures/Hinkal/Hinkal.ts +746 -0
  116. package/src/data-structures/Hinkal/IHinkal.ts +315 -0
  117. package/src/data-structures/Hinkal/handleAutoDepositBack.ts +138 -0
  118. package/src/data-structures/Hinkal/hinkalActionFundApproveAndTransact.ts +64 -0
  119. package/src/data-structures/Hinkal/hinkalActionReceive.ts +65 -0
  120. package/src/data-structures/Hinkal/hinkalActionStake.ts +152 -0
  121. package/src/data-structures/Hinkal/hinkalApprove.ts +170 -0
  122. package/src/data-structures/Hinkal/hinkalCheckTokenRegistry.ts +26 -0
  123. package/src/data-structures/Hinkal/hinkalDeposit.ts +199 -0
  124. package/src/data-structures/Hinkal/hinkalGetRecipientInfo.ts +12 -0
  125. package/src/data-structures/Hinkal/hinkalGetZkMeProvider.ts +31 -0
  126. package/src/data-structures/Hinkal/hinkalInsideTransact.ts +190 -0
  127. package/src/data-structures/Hinkal/hinkalMultiSend.ts +26 -0
  128. package/src/data-structures/Hinkal/hinkalPrivateWallet.ts +198 -0
  129. package/src/data-structures/Hinkal/hinkalProoflessDeposit.ts +91 -0
  130. package/src/data-structures/Hinkal/hinkalProxySwap.ts +91 -0
  131. package/src/data-structures/Hinkal/hinkalSignSubAccount.ts +28 -0
  132. package/src/data-structures/Hinkal/hinkalSwap.ts +157 -0
  133. package/src/data-structures/Hinkal/hinkalTransfer.ts +171 -0
  134. package/src/data-structures/Hinkal/hinkalWithdraw.ts +161 -0
  135. package/src/data-structures/Hinkal/index.ts +9 -0
  136. package/src/data-structures/Hinkal/resetMerkleTrees.ts +64 -0
  137. package/src/data-structures/IndexedDB/activity-db.ts +204 -0
  138. package/src/data-structures/IndexedDB/balances-db.ts +97 -0
  139. package/src/data-structures/IndexedDB/contact-db.ts +81 -0
  140. package/src/data-structures/IndexedDB/index.ts +6 -0
  141. package/src/data-structures/IndexedDB/prices-db.ts +89 -0
  142. package/src/data-structures/IndexedDB/private-balances-db.ts +31 -0
  143. package/src/data-structures/IndexedDB/signatures-db.ts +62 -0
  144. package/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.ts +152 -0
  145. package/src/data-structures/TokenDBs/AlchemyPublicTokensDB.ts +224 -0
  146. package/src/data-structures/TokenDBs/ArcPublicTokensDB.ts +198 -0
  147. package/src/data-structures/TokenDBs/EventsPublicTokensDB.ts +216 -0
  148. package/src/data-structures/TokenDBs/IPublicTokensDB.ts +7 -0
  149. package/src/data-structures/TokenDBs/PrivateTokensDB.ts +96 -0
  150. package/src/data-structures/TokenDBs/PublicTokensDB.ts +49 -0
  151. package/src/data-structures/TokenDBs/index.ts +4 -0
  152. package/src/data-structures/TokenDBs/token-visibility-db.ts +154 -0
  153. package/src/data-structures/ValueCache/ValueCache.ts +29 -0
  154. package/src/data-structures/ValueCache/index.ts +1 -0
  155. package/src/data-structures/cacheDevices/AttachableMemoryCacheDevice.ts +33 -0
  156. package/src/data-structures/cacheDevices/BaseCacheDevice.ts +30 -0
  157. package/src/data-structures/cacheDevices/FileCacheDevice.ts +59 -0
  158. package/src/data-structures/cacheDevices/LocalStorageCacheDevice.ts +36 -0
  159. package/src/data-structures/cacheDevices/index.ts +2 -0
  160. package/src/data-structures/crypto-keys/decodeUTXO.ts +60 -0
  161. package/src/data-structures/crypto-keys/encryptDecryptUtxo.ts +74 -0
  162. package/src/data-structures/crypto-keys/index.ts +4 -0
  163. package/src/data-structures/crypto-keys/keyUtils.ts +8 -0
  164. package/src/data-structures/crypto-keys/keys.ts +203 -0
  165. package/src/data-structures/custom-token-registry/CustomTokenRegistry.ts +49 -0
  166. package/src/data-structures/event-service/AbstractAccessTokenSnapshotService.ts +142 -0
  167. package/src/data-structures/event-service/AbstractApprovalsSnapshotService.ts +152 -0
  168. package/src/data-structures/event-service/AbstractCommitmentsSnapshotService.ts +116 -0
  169. package/src/data-structures/event-service/AbstractEventService.ts +44 -0
  170. package/src/data-structures/event-service/AbstractNullifierSnapshotService.ts +76 -0
  171. package/src/data-structures/event-service/AbstractSnapshotService.ts +63 -0
  172. package/src/data-structures/event-service/BlockchainEventEmitter.ts +132 -0
  173. package/src/data-structures/event-service/index.ts +7 -0
  174. package/src/data-structures/index.ts +18 -0
  175. package/src/data-structures/merkle-tree/MerkleTree.test.ts +77 -0
  176. package/src/data-structures/merkle-tree/MerkleTree.ts +253 -0
  177. package/src/data-structures/merkle-tree/MerkleTreeIncompleteError.ts +6 -0
  178. package/src/data-structures/merkle-tree/getPatchedAccessTokenMerkleTree.ts +24 -0
  179. package/src/data-structures/merkle-tree/index.ts +3 -0
  180. package/src/data-structures/presale/PresaleContractWrapper.ts +80 -0
  181. package/src/data-structures/presale/index.ts +1 -0
  182. package/src/data-structures/provider-adapter/IProviderAdapter.ts +43 -0
  183. package/src/data-structures/snapshot/ClientAccessTokenSnapshotService.ts +41 -0
  184. package/src/data-structures/snapshot/ClientApprovalsSnapshotService.ts +36 -0
  185. package/src/data-structures/snapshot/ClientCommitmentsSnapshotService.ts +30 -0
  186. package/src/data-structures/snapshot/ClientNullifierSnapshotService.ts +28 -0
  187. package/src/data-structures/snapshot/SnapshotFetcherService.ts +68 -0
  188. package/src/data-structures/snapshot/index.ts +1 -0
  189. package/src/data-structures/token-price-fetcher/TokenChecker.ts +45 -0
  190. package/src/data-structures/token-price-fetcher/index.ts +1 -0
  191. package/src/data-structures/tor/HttpClient.ts +118 -0
  192. package/src/data-structures/tor/TorAdapter.ts +94 -0
  193. package/src/data-structures/tor/TorClient.ts +283 -0
  194. package/src/data-structures/tor/WebSocketDuplex.ts +32 -0
  195. package/src/data-structures/tor/index.ts +3 -0
  196. package/src/data-structures/transactions-manager/history/history.types.ts +14 -0
  197. package/src/data-structures/transactions-manager/index.ts +1 -0
  198. package/src/data-structures/utxo/Utxo.ts +189 -0
  199. package/src/error-handling/customErrors/ErrorWithAmount.ts +8 -0
  200. package/src/error-handling/customErrors/ErrorWithTx.ts +10 -0
  201. package/src/error-handling/customErrors/FeeOverTransactionValueError.ts +16 -0
  202. package/src/error-handling/customErrors/SimulationFailureError.ts +9 -0
  203. package/src/error-handling/customErrors/customErrors.helpers.ts +39 -0
  204. package/src/error-handling/customErrors/index.ts +5 -0
  205. package/src/error-handling/error-codes.constants.ts +214 -0
  206. package/src/error-handling/get-error.message.ts +149 -0
  207. package/src/error-handling/handleErrorRestore.ts +25 -0
  208. package/src/error-handling/index.ts +7 -0
  209. package/src/error-handling/logError.ts +8 -0
  210. package/src/error-handling/logger.ts +21 -0
  211. package/src/error-handling/types.ts +10 -0
  212. package/src/externalABIs/BUSD.ts +516 -0
  213. package/src/externalABIs/BabPassport.json +24 -0
  214. package/src/externalABIs/DAI.ts +331 -0
  215. package/src/externalABIs/ERC1155.json +316 -0
  216. package/src/externalABIs/ERC20.json +297 -0
  217. package/src/externalABIs/ERC20.ts +1 -0
  218. package/src/externalABIs/ERC721.json +205 -0
  219. package/src/externalABIs/GalxePassport.json +23 -0
  220. package/src/externalABIs/IQuoterV2.json +211 -0
  221. package/src/externalABIs/ISwapRouter.json +568 -0
  222. package/src/externalABIs/IUniswapV3Factory.json +207 -0
  223. package/src/externalABIs/IUniswapV3Pool.json +999 -0
  224. package/src/externalABIs/NodeInterfaceABI.json +1 -0
  225. package/src/externalABIs/OptimismGasPriceOracle.json +1 -0
  226. package/src/externalABIs/PoLidoNftAbi.json +307 -0
  227. package/src/externalABIs/SanctionsList.ts +86 -0
  228. package/src/externalABIs/USDC.ts +718 -0
  229. package/src/externalABIs/USDR.ts +343 -0
  230. package/src/externalABIs/USDR3CRV.ts +539 -0
  231. package/src/externalABIs/USDT.ts +390 -0
  232. package/src/externalABIs/UniswapV2PoolAbi.json +66 -0
  233. package/src/externalABIs/WETH.ts +153 -0
  234. package/src/externalABIs/amToken.ts +347 -0
  235. package/src/externalABIs/index.ts +53 -0
  236. package/src/externalABIs/swapAbi.ts +442 -0
  237. package/src/externalABIs/transactionsProver.json +45 -0
  238. package/src/functions/index.ts +16 -0
  239. package/src/functions/kyc/aiPriseHelper.ts +0 -0
  240. package/src/functions/kyc/authentoHelper.ts +44 -0
  241. package/src/functions/kyc/index.ts +3 -0
  242. package/src/functions/kyc/openDefaultPassportWindow.ts +9 -0
  243. package/src/functions/kyc/passportHelper.ts +13 -0
  244. package/src/functions/kyc/zkMeHelper.ts +69 -0
  245. package/src/functions/pre-transaction/constructAdminData.ts +21 -0
  246. package/src/functions/pre-transaction/getExternalSwapAddress.ts +30 -0
  247. package/src/functions/pre-transaction/getFeeStructure.ts +44 -0
  248. package/src/functions/pre-transaction/getFlatFees.ts +88 -0
  249. package/src/functions/pre-transaction/getSignatureDataForTransact.ts +16 -0
  250. package/src/functions/pre-transaction/getVolatileTransferAmount.ts +56 -0
  251. package/src/functions/pre-transaction/index.ts +7 -0
  252. package/src/functions/pre-transaction/interaction-to-action.ts +17 -0
  253. package/src/functions/pre-transaction/merge-with-fee-structure-emporium.ts +50 -0
  254. package/src/functions/pre-transaction/merge-with-fee-structure.ts +35 -0
  255. package/src/functions/pre-transaction/outputApprovalDataProcessing.ts +95 -0
  256. package/src/functions/pre-transaction/outputUtxoProcessing.ts +52 -0
  257. package/src/functions/pre-transaction/process-gas-estimates.ts +36 -0
  258. package/src/functions/pre-transaction/shouldPatchAccessTokenMerkleTree.ts +15 -0
  259. package/src/functions/private-wallet/emporium.helpers.ts +296 -0
  260. package/src/functions/private-wallet/emporium.swap.helpers.ts +284 -0
  261. package/src/functions/private-wallet/index.ts +3 -0
  262. package/src/functions/private-wallet/opProducer.ts +33 -0
  263. package/src/functions/snarkjs/common.snarkjs.ts +377 -0
  264. package/src/functions/snarkjs/constant.ts +490 -0
  265. package/src/functions/snarkjs/constructEmporiumProof.ts +301 -0
  266. package/src/functions/snarkjs/constructGeneralZkProof.ts +281 -0
  267. package/src/functions/snarkjs/generateCircomData.ts +81 -0
  268. package/src/functions/snarkjs/generateZkProof.ts +21 -0
  269. package/src/functions/snarkjs/generateZkProofEnclave.ts +45 -0
  270. package/src/functions/snarkjs/generateZkProofSelf.ts +29 -0
  271. package/src/functions/snarkjs/getOriginalSender.ts +4 -0
  272. package/src/functions/snarkjs/getZKFiles.ts +29 -0
  273. package/src/functions/snarkjs/index.ts +4 -0
  274. package/src/functions/staking/index.ts +78 -0
  275. package/src/functions/utils/addresses.ts +37 -0
  276. package/src/functions/utils/amounts.utils.test.ts +91 -0
  277. package/src/functions/utils/amounts.utils.ts +119 -0
  278. package/src/functions/utils/arraysMatch.ts +4 -0
  279. package/src/functions/utils/cacheDevice.utils.ts +21 -0
  280. package/src/functions/utils/cacheFunctions.ts +154 -0
  281. package/src/functions/utils/caseInsensitive.utils.ts +10 -0
  282. package/src/functions/utils/convertEmporiumOpToCallInfo.ts +19 -0
  283. package/src/functions/utils/convertIntegrationProviderToExternalActionId.ts +14 -0
  284. package/src/functions/utils/create-provider.ts +11 -0
  285. package/src/functions/utils/encodeTokenWithId.ts +4 -0
  286. package/src/functions/utils/encryptInputForEnclave.ts +119 -0
  287. package/src/functions/utils/enum.utils.ts +30 -0
  288. package/src/functions/utils/erc20tokenFunctions.ts +110 -0
  289. package/src/functions/utils/ethers-formatter.utils.ts +32 -0
  290. package/src/functions/utils/evmNetworkFunctions.ts +9 -0
  291. package/src/functions/utils/external-action.utils.ts +15 -0
  292. package/src/functions/utils/fees.utils.ts +26 -0
  293. package/src/functions/utils/get-hinkal-approvals.ts +36 -0
  294. package/src/functions/utils/get-signature-header.ts +5 -0
  295. package/src/functions/utils/getBlockExplorerUrl.ts +14 -0
  296. package/src/functions/utils/getDataFromTransaction.ts +79 -0
  297. package/src/functions/utils/getRecipientInfoFromUserKeys.ts +28 -0
  298. package/src/functions/utils/inLogicMetadata.ts +9 -0
  299. package/src/functions/utils/index.ts +43 -0
  300. package/src/functions/utils/involves-permit2-op.ts +17 -0
  301. package/src/functions/utils/ipfs.ts +74 -0
  302. package/src/functions/utils/is-valid-url.ts +5 -0
  303. package/src/functions/utils/lifi.utils.ts +3 -0
  304. package/src/functions/utils/memoize.utils.ts +23 -0
  305. package/src/functions/utils/merkleTree.utils.ts +27 -0
  306. package/src/functions/utils/mutexes.utils.ts +3 -0
  307. package/src/functions/utils/mystery-box-auction.utils.ts +61 -0
  308. package/src/functions/utils/networks.utils.ts +6 -0
  309. package/src/functions/utils/nftTokenFunctions.ts +25 -0
  310. package/src/functions/utils/nickname.utils.ts +4 -0
  311. package/src/functions/utils/postToOffscreen.ts +6 -0
  312. package/src/functions/utils/prepareHinkal.ts +78 -0
  313. package/src/functions/utils/process.utils.ts +23 -0
  314. package/src/functions/utils/processUseApprovalUtxoData.ts +26 -0
  315. package/src/functions/utils/publicBalance.utils.ts +131 -0
  316. package/src/functions/utils/reloadPage.ts +1 -0
  317. package/src/functions/utils/replaceAddressInCalldata.ts +6 -0
  318. package/src/functions/utils/requireEnv.ts +10 -0
  319. package/src/functions/utils/resolve-sync.utils.ts +40 -0
  320. package/src/functions/utils/rpc-int-encode.ts +7 -0
  321. package/src/functions/utils/serialize.utils.ts +12 -0
  322. package/src/functions/utils/string.utils.ts +92 -0
  323. package/src/functions/utils/time.utils.ts +80 -0
  324. package/src/functions/utils/token-check.utils.ts +12 -0
  325. package/src/functions/utils/trimFieldValues.ts +24 -0
  326. package/src/functions/utils/upToDateState.ts +12 -0
  327. package/src/functions/utils/userAgent.ts +26 -0
  328. package/src/functions/utils/walletBalances.utils.ts +117 -0
  329. package/src/functions/web3/EIP-712.test.ts +302 -0
  330. package/src/functions/web3/EIP-712.ts +243 -0
  331. package/src/functions/web3/etherFunctions.test.ts +129 -0
  332. package/src/functions/web3/etherFunctions.ts +84 -0
  333. package/src/functions/web3/events/balanceChangedCustomHandler.ts +13 -0
  334. package/src/functions/web3/events/balanceChangedHandler.ts +10 -0
  335. package/src/functions/web3/events/getApprovedBalance.ts +154 -0
  336. package/src/functions/web3/events/getInputUtxoAndBalance.ts +305 -0
  337. package/src/functions/web3/events/getInputUtxosEnclave.ts +40 -0
  338. package/src/functions/web3/events/getShieldedBalance.ts +163 -0
  339. package/src/functions/web3/events/getTransactionLogEvents.ts +55 -0
  340. package/src/functions/web3/events/index.ts +7 -0
  341. package/src/functions/web3/events/web3RetrieveEvents.ts +33 -0
  342. package/src/functions/web3/functionCalls/accessTokenCalls.ts +27 -0
  343. package/src/functions/web3/functionCalls/approveToken.ts +180 -0
  344. package/src/functions/web3/functionCalls/approveTokensToHinkal.ts +21 -0
  345. package/src/functions/web3/functionCalls/estimateGasRelayer.ts +40 -0
  346. package/src/functions/web3/functionCalls/getRootHash.ts +7 -0
  347. package/src/functions/web3/functionCalls/inHinkalApprovalCalls.ts +60 -0
  348. package/src/functions/web3/functionCalls/relayFunctions.ts +12 -0
  349. package/src/functions/web3/functionCalls/transactCallDirect.ts +71 -0
  350. package/src/functions/web3/functionCalls/transactCallRelayer.ts +57 -0
  351. package/src/functions/web3/getContractMetadata.ts +43 -0
  352. package/src/functions/web3/getPublicAddressBalance.ts +17 -0
  353. package/src/functions/web3/getTokenHolder.ts +53 -0
  354. package/src/functions/web3/index.ts +9 -0
  355. package/src/functions/web3/lifiAPI.ts +41 -0
  356. package/src/functions/web3/odosAPI.ts +50 -0
  357. package/src/functions/web3/oneInchAPI.ts +47 -0
  358. package/src/functions/web3/runContractFunction.ts +116 -0
  359. package/src/functions/web3/uniswapAPI.ts +156 -0
  360. package/src/index.ts +9 -0
  361. package/src/mutexes/index.ts +1 -0
  362. package/src/mutexes/mutex.ts +3 -0
  363. package/src/providers/EthersProviderAdapter.ts +230 -0
  364. package/src/providers/TorExternalProvider.ts +36 -0
  365. package/src/providers/WagmiProviderAdapter.ts +311 -0
  366. package/src/providers/exportProviers.ts +11 -0
  367. package/src/providers/prepareEthersHinkal.ts +18 -0
  368. package/src/providers/prepareWagmiHinkal.ts +16 -0
  369. package/src/types/API.types.ts +23 -0
  370. package/src/types/ICacheDevice.ts +5 -0
  371. package/src/types/IMultiThreadedUtxoUtils.ts +16 -0
  372. package/src/types/RewardUserEnums.ts +12 -0
  373. package/src/types/TransactionSimulator.types.ts +30 -0
  374. package/src/types/WeeklyAnalytics.types.ts +44 -0
  375. package/src/types/activities.types.ts +90 -0
  376. package/src/types/admin.types.ts +30 -0
  377. package/src/types/all-points.types.ts +8 -0
  378. package/src/types/approvals.types.ts +45 -0
  379. package/src/types/balances.types.ts +20 -0
  380. package/src/types/big-intable.types.ts +3 -0
  381. package/src/types/bridging.types.ts +30 -0
  382. package/src/types/brotherhood-user.types.ts +13 -0
  383. package/src/types/cache.types.ts +42 -0
  384. package/src/types/circom-data.types.ts +120 -0
  385. package/src/types/coingecko.types.ts +216 -0
  386. package/src/types/commitments.types.ts +39 -0
  387. package/src/types/confirmation-request.types.ts +10 -0
  388. package/src/types/contacts.types.ts +6 -0
  389. package/src/types/crypto.types.ts +8 -0
  390. package/src/types/duneAPI.types.ts +9 -0
  391. package/src/types/eip5792.types.ts +31 -0
  392. package/src/types/ethereum-network.types.ts +70 -0
  393. package/src/types/external-action.types.ts +19 -0
  394. package/src/types/fee.types.ts +11 -0
  395. package/src/types/generatePoints.ts +14 -0
  396. package/src/types/hinkal.stake.types.ts +12 -0
  397. package/src/types/hinkal.types.ts +150 -0
  398. package/src/types/index.ts +50 -0
  399. package/src/types/kyc.types.ts +49 -0
  400. package/src/types/merch-order.types.ts +18 -0
  401. package/src/types/message.types.ts +6 -0
  402. package/src/types/mystery-boxes.types.ts +50 -0
  403. package/src/types/new-rewards.type.ts +181 -0
  404. package/src/types/offscreen.types.ts +8 -0
  405. package/src/types/presaleReferral.types.ts +4 -0
  406. package/src/types/proxy.types.ts +11 -0
  407. package/src/types/referral.types.ts +13 -0
  408. package/src/types/relayer.types.ts +16 -0
  409. package/src/types/remote-proof.types.ts +18 -0
  410. package/src/types/rewards.types.ts +53 -0
  411. package/src/types/routing.types.ts +7 -0
  412. package/src/types/sandbox.types.ts +246 -0
  413. package/src/types/session.types.ts +12 -0
  414. package/src/types/signature.types.ts +11 -0
  415. package/src/types/slippage.types.ts +3 -0
  416. package/src/types/snark.types.ts +43 -0
  417. package/src/types/tenderly.api.types.ts +200 -0
  418. package/src/types/token-prices.types.ts +8 -0
  419. package/src/types/token-with-id.types.ts +4 -0
  420. package/src/types/token.types.ts +86 -0
  421. package/src/types/transactions.types.ts +120 -0
  422. package/src/types/wc.types.ts +83 -0
  423. package/src/types/with-id.types.ts +1 -0
  424. package/src/webworker/performTaskWithWorker.ts +50 -0
  425. package/src/webworker/snarkjsWorker/snarkjs.d.ts +2 -0
  426. package/src/webworker/snarkjsWorker/snarkjsWorker.types.ts +18 -0
  427. package/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts +19 -0
  428. package/src/webworker/snarkjsWorker/snarkjsWorkerLogic.ts +90 -0
  429. package/src/webworker/utxoWorker/utxoWorker.types.ts +41 -0
  430. package/src/webworker/utxoWorker/utxoWorkerLauncher.ts +19 -0
  431. package/src/webworker/utxoWorker/utxoWorkerLogic.ts +107 -0
  432. package/src/webworker/viteWorkerURL.constant.ts +25 -0
  433. package/src/webworker/worker.registry.ts +11 -0
  434. package/src/webworker/worker.types.ts +35 -0
  435. package/src/webworker/workerErrorHandler.ts +10 -0
  436. package/src/webworker/workerFactory.ts +47 -0
  437. package/src/webworker/workerProxy.ts +88 -0
  438. package/src/webworker/zkProofWorker/zkProofWorker.types.ts +52 -0
  439. package/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts +19 -0
  440. package/src/webworker/zkProofWorker/zkProofWorkerLogic.ts +84 -0
  441. package/tsconfig.json +23 -0
  442. package/tsconfig.lib.json +10 -0
  443. package/tsconfig.spec.json +15 -0
  444. package/vite.config.ts +97 -0
  445. package/vite.config.workers.ts +51 -0
@@ -0,0 +1,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,3 @@
1
+ import { Mutex } from 'async-mutex';
2
+
3
+ export const resetStateMutex = new 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
+ }