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