h_test_1 0.0.27 → 0.0.29

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 (33) hide show
  1. package/README.md +11 -9
  2. package/data-structures/Hinkal/Hinkal.cjs +1 -1
  3. package/data-structures/Hinkal/Hinkal.mjs +4 -2
  4. package/data-structures/Hinkal/hinkalDeposit.cjs +1 -1
  5. package/data-structures/Hinkal/hinkalDeposit.mjs +57 -61
  6. package/data-structures/provider-adapter/IProviderAdapter.d.ts +1 -0
  7. package/functions/pre-transaction/getKycAndSignatureData.cjs +1 -1
  8. package/functions/pre-transaction/getKycAndSignatureData.mjs +12 -14
  9. package/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
  10. package/functions/snarkjs/constructGeneralZkProof.mjs +99 -105
  11. package/functions/snarkjs/fetchOnChainRootHashes.cjs +1 -1
  12. package/functions/snarkjs/fetchOnChainRootHashes.mjs +4 -4
  13. package/functions/snarkjs/generateZkProof.cjs +1 -1
  14. package/functions/snarkjs/generateZkProof.mjs +9 -9
  15. package/functions/web3/uniswapAPI.cjs +1 -1
  16. package/functions/web3/uniswapAPI.mjs +16 -16
  17. package/package.json +1 -1
  18. package/providers/EthersProviderAdapter.cjs +1 -1
  19. package/providers/EthersProviderAdapter.d.ts +1 -0
  20. package/providers/EthersProviderAdapter.mjs +9 -6
  21. package/providers/SolanaProviderAdapter.cjs +1 -1
  22. package/providers/SolanaProviderAdapter.d.ts +1 -0
  23. package/providers/SolanaProviderAdapter.mjs +9 -6
  24. package/providers/TronProviderAdapter.cjs +1 -1
  25. package/providers/TronProviderAdapter.d.ts +1 -0
  26. package/providers/TronProviderAdapter.mjs +3 -0
  27. package/providers/WagmiProviderAdapter.cjs +1 -1
  28. package/providers/WagmiProviderAdapter.d.ts +2 -1
  29. package/providers/WagmiProviderAdapter.mjs +3 -0
  30. package/webworker/snarkjsWorker/snarkjsWorkerLauncher.cjs +1 -1
  31. package/webworker/snarkjsWorker/snarkjsWorkerLauncher.mjs +1 -1
  32. package/webworker/snarkjsWorker/snarkjsWorkerLogic.cjs +1 -1
  33. package/webworker/snarkjsWorker/snarkjsWorkerLogic.mjs +26 -28
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Hinkal is a privacy middleware and smart-contract SDK for public blockchains that enables confidential transactions and settlement flows without changing wallets, custody, or chains.
4
4
 
5
- The SDK allows wallets, dApps, and payment platforms to integrate protocol-level privacy on Ethereum, Solana, Polygon, Base, Arbitrum, and Optimism. It hides transaction history, wallet relationships, and asset flows on-chain while preserving public-chain finality and compliance.
5
+ The SDK allows wallets, dApps, and payment platforms to integrate protocol-level privacy on Ethereum, Solana, Tron, Polygon, Base, Arbitrum, and Optimism. It hides transaction history, wallet relationships, and asset flows on-chain while preserving public-chain finality and compliance.
6
6
 
7
7
  With Hinkal SDK, developers can:
8
8
  • Enable private sends between public wallets
@@ -109,6 +109,7 @@ function deposit(
109
109
  ```
110
110
 
111
111
  where:
112
+
112
113
  - `erc20Tokens` is an array of tokens to deposit
113
114
  - `amountChanges` represents the corresponding token amounts for the deposit
114
115
  - `preEstimateGas` If true (default), the gas needed for the operation will be estimated before executing the deposit. This can help avoid failed transactions due to "out of gas" error.
@@ -363,14 +364,15 @@ After passing the compliance check with one of the supported providers, the acce
363
364
 
364
365
  Hinkal SDK is available on the following blockchain networks:
365
366
 
366
- | Chain | Chain ID | Status |
367
- | -------- | -------- | -------------- |
368
- | Ethereum | 1 | ✅ Live |
369
- | Polygon | 137 | ✅ Live |
370
- | Base | 8453 | ✅ Live |
371
- | Arbitrum | 42161 | ✅ Live |
372
- | Optimism | 10 | ✅ Live |
373
- | Solana | - | 🚧 In Progress |
367
+ | Chain | Chain ID | Status |
368
+ | -------- | -------- | ------- |
369
+ | Ethereum | 1 | ✅ Live |
370
+ | Polygon | 137 | ✅ Live |
371
+ | Base | 8453 | ✅ Live |
372
+ | Arbitrum | 42161 | ✅ Live |
373
+ | Optimism | 10 | ✅ Live |
374
+ | Solana | - | Live |
375
+ | Tron | - | ✅ Live |
374
376
 
375
377
  Each chain supports the full suite of Hinkal privacy features including shielding, transfers, and confidential interactions with DeFi protocols.
376
378
 
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const q=require("ethers"),k=require("../../types/hinkal.types.cjs"),S=require("../../types/ethereum-network.types.cjs"),U=require("./hinkalCheckSolanaTokenRegistry.cjs"),I=require("../../functions/web3/functionCalls/accessTokenCalls.cjs"),K=require("../../functions/web3/events/getShieldedBalance.cjs"),y=require("../crypto-keys/keys.cjs"),T=require("./hinkalDeposit.cjs"),W=require("./hinkalDepositAndWithdraw.cjs"),m=require("./hinkalSolanaDeposit.cjs"),x=require("./hinkalSwap.cjs"),F=require("./hinkalWithdraw.cjs"),N=require("./resetMerkleTrees.cjs"),M=require("../merkle-tree/MerkleTree.cjs"),_=require("../../error-handling/error-codes.constants.cjs"),R=require("../../crypto/poseidon.cjs"),o=require("../../constants/chains.constants.cjs");require("../../API/getServerURL.cjs");require("axios");require("../../constants/coingecko.constants.cjs");require("../../constants/server.constants.cjs");require("../http/HttpClient.cjs");const C=require("../../API/API.cjs");require("../../API/tenderly.api.cjs");require("../../constants/token-data/index.cjs");require("../../constants/contracts.constants.cjs");const O=require("../../constants/kyc.constants.cjs"),G=require("../../constants/vite.constants.cjs");require("../../constants/reorg-depths.constants.cjs");require("../../constants/addresses.constants.cjs");require("../../constants/token.limits.constants.cjs");require("../../constants/presale.constants.cjs");require("../../constants/activity.constants.cjs");require("../../constants/tasks.constants.cjs");require("../../constants/events.constants.cjs");require("../../constants/schedule.constants.cjs");require("../../constants/tokens.constants.cjs");const z=require("../../functions/utils/reloadPage.cjs"),j=require("../MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs"),$=require("./hinkalPrivateWallet.cjs"),J=require("../../functions/utils/cacheDevice.utils.cjs"),V=require("../../functions/web3/getContractMetadata.cjs"),Q=require("./hinkalGetRecipientInfo.cjs"),w=require("../../functions/web3/events/getApprovedBalance.cjs"),X=require("./hinkalSignSubAccount.cjs"),B=require("./hinkalCheckTokenRegistry.cjs"),Y=require("./hinkalActionReceive.cjs"),Z=require("../TokenDBs/PrivateTokensDB.cjs");require("idb-keyval");const ee=require("../../functions/utils/erc20tokenFunctions.cjs");require("multiformats");const P=require("@solana/web3.js");require("@solana/spl-token");require("tronweb");const d=require("../../functions/utils/token-check.utils.cjs");require("async-mutex");require("../../functions/utils/convertIntegrationProviderToExternalActionId.cjs");require("../../types/circom-data.types.cjs");require("../../types/activities.types.cjs");const L=require("../../functions/pre-transaction/solana.cjs");require("tweetnacl");require("bs58");require("@coral-xyz/anchor");require("buffer");require("libsodium-wrappers");require("lodash");require("../../functions/utils/userAgent.cjs");require("circomlibjs-hinkal-fork");require("process");require("../../providers/EthersProviderAdapter.cjs");const re=require("../../providers/SolanaProviderAdapter.cjs");require("node-forge");require("../../API/enclaveUtxoCalls.cjs");require("../../functions/web3/events/getInputUtxoAndBalance.cjs");require("../../functions/web3/getTokenHolder.cjs");const te=require("../../functions/private-wallet/emporium.helpers.cjs"),ie=require("./hinkalProoflessDeposit.cjs"),ae=require("./hinkalProxySwap.cjs"),ne=require("./hinkalMultiSend.cjs"),se=require("./hinkalTransfer.cjs"),oe=require("./hinkalProxyToPrivate.cjs"),E=require("../../providers/TronProviderAdapter.cjs"),he=require("./hinkalSolanaDepositAndWithdraw.cjs"),le=require("./hinkalSolanaWithdraw.cjs"),ce=require("./hinkalSolanaTransfer.cjs"),de=require("./hinkalSolanaSwap.cjs"),ue=require("./hinkalSolanaProxySend.cjs"),pe=require("./hinkalSolanaProxySwap.cjs"),H=require("./hinkalSolanaProxyShield.cjs"),D=require("../../functions/web3/fetchSolanaMerkleTreeRootHash.cjs"),ge=require("./hinkalDepositAndBridge.cjs"),ke=require("./hinkalClaimUtxo.cjs"),Pe=require("./hinkalSolanaProoflessDeposit.cjs"),ve=require("./hinkalSolanaClaimUtxo.cjs"),ye=require("./hinkalWithdrawStuckUtxos.cjs");class Ae{ethereumProviderAdapter;solanaProviderAdapter;tronProviderAdapter;userKeys;signingMessage="Login to Hinkal Protocol";privateTransferSigningMessage="Login to Hinkal's Private Transfer App";merkleTreeHinkalByChain={};merkleTreeAccessTokenByChain={};nullifiersByChain={};encryptedOutputsByChain={};approvalsByChain={};commitmentsSnapshotServiceByChain={};nullifierSnapshotServiceByChain={};accessTokenSnapshotServiceByChain={};approvalsSnapshotServiceByChain={};utxoUtils;cacheDevice;generateProofRemotely;disableMerkleTreeUpdates;constructor(e){this.userKeys=new y.UserKeys(void 0),o.HINKAL_SUPPORTED_CHAINS.forEach(r=>{this.merkleTreeHinkalByChain[r]=M.MerkleTree.create(R.poseidonFunction,0n),this.merkleTreeAccessTokenByChain[r]=M.MerkleTree.create(R.poseidonFunction,0n),this.nullifiersByChain[r]=new Set,this.encryptedOutputsByChain[r]=[],this.approvalsByChain[r]=new Map}),this.generateProofRemotely=e?.generateProofRemotely??!0,this.utxoUtils=new j.MultiThreadedUtxoUtils,this.cacheDevice=J.createCacheDevice(e),this.disableMerkleTreeUpdates=e?.disableMerkleTreeUpdates??!1}async initProviderAdapter(e,r){const t=r instanceof re.SolanaProviderAdapter,i=r instanceof E.TronProviderAdapter;let a=o.chainIds.ethMainnet;t?a=o.chainIds.solanaMainnet:i&&(a=o.chainIds.tronMainnet),await this.updateProviderAdapter(a,r),t?this.solanaProviderAdapter?.initConnector(e):i?this.tronProviderAdapter?.initConnector(e):this.ethereumProviderAdapter?.initConnector(e);let n;t?n=await this.connectAndPatchProvider(!0,e):i?n=await r.connectAndPatchProvider(e):n=await this.connectAndPatchProvider(!1,e),await r.init(n),await this.setListeners()}getSigningMessage(e=k.LoginMessageMode.PROTOCOL){switch(e){case k.LoginMessageMode.PRIVATE_TRANSFER:return this.privateTransferSigningMessage;case k.LoginMessageMode.PROTOCOL:default:return this.signingMessage}}async initUserKeys(e=k.LoginMessageMode.PROTOCOL){const r=this.getSigningMessage(e);this.userKeys=new y.UserKeys(await this.getProviderAdapter().signMessage(r))}initUserKeysWithSignature(e){this.userKeys=new y.UserKeys(e)}async initUserKeysFromSeedPhrases(e){const r=e.join(" "),t=q.ethers.toUtf8Bytes(r),i=q.ethers.keccak256(t);this.userKeys=new y.UserKeys(i)}async resetMerkle(e){if(this.disableMerkleTreeUpdates)return;(e?.every(t=>this.isSelectedNetworkSupported(t))??!0)&&await N.resetMerkleTrees(this,e)}getProviderAdapter(e){let r=e,t;if(r||(this.ethereumProviderAdapter?r=o.chainIds.ethMainnet:this.solanaProviderAdapter?r=o.chainIds.solanaMainnet:r=o.chainIds.tronMainnet),o.isSolanaLike(r)?t=this.solanaProviderAdapter:o.isTronLike(r)?t=this.tronProviderAdapter:t=this.ethereumProviderAdapter,!t)throw new Error("ProviderAdapter is not initialized");return t}getTronWeb(){const e=this.tronProviderAdapter;if(!e)throw new Error("Tron provider adapter not initialized");if(!(e instanceof E.TronProviderAdapter))throw new Error("Tron provider adapter is not a TronProviderAdapter");const r=e.getTronWeb();if(!r)throw new Error("TronWeb not available");return r}getSupportedChains(){return this.ethereumProviderAdapter&&this.solanaProviderAdapter?o.WALLET_SUPPORTED_CHAINS:this.ethereumProviderAdapter?o.HINKAL_SUPPORTED_CHAINS.filter(e=>!o.isSolanaLike(e)&&!o.isTronLike(e)):this.solanaProviderAdapter?o.HINKAL_SUPPORTED_CHAINS.filter(e=>o.isSolanaLike(e)):this.tronProviderAdapter?o.HINKAL_SUPPORTED_CHAINS.filter(e=>o.isTronLike(e)):[]}async waitForTransaction(e,r,t=1){return!!await this.getProviderAdapter(e).waitForTransaction(e,r,t)}getContract(e,r,t=void 0){return this.getProviderAdapter(e).getContract(e,r,t)}getContractWithFetcherByChainId(e,r,t=void 0){return V.getContractWithFetcherByChainId(e,r,t)}async signMessage(e){return await this.getProviderAdapter().signMessage(e)}async signTypedData(e,r,t){return await this.getProviderAdapter().signTypedData(e,r,t)}async signWithSubAccount(e,r,t,i){return X.hinkalSignSubAccount(e,r,t,i)}getContractWithSigner(e,r,t=""){return this.getProviderAdapter(e).getContractWithSigner(e,r,t)}getContractWithFetcher(e,r,t=""){return this.getProviderAdapter(e).getContractWithFetcher(e,r,t)}isSelectedNetworkSupported(e){return!!o.networkRegistry[e]}async switchNetwork(e){try{await this.getProviderAdapter().switchNetwork(e)}catch{throw new Error(_.transactionErrorCodes.FAILED_TO_SWITCH_NETWORKS)}}isPermitterAvailable(e){return this.getProviderAdapter(e).isPermitterAvailable()}async connectAndPatchProvider(e,r){return await this.getProviderAdapter(e?o.chainIds.solanaMainnet:o.chainIds.ethMainnet).connectAndPatchProvider(r)}async disconnectFromConnector(){await this.ethereumProviderAdapter?.disconnectFromConnector(),await this.solanaProviderAdapter?.disconnectFromConnector(),await this.tronProviderAdapter?.disconnectFromConnector()}async resetProviderAdapters(){this.ethereumProviderAdapter=void 0,this.solanaProviderAdapter=void 0,this.tronProviderAdapter=void 0}async updateProviderAdapter(e,r){try{o.isSolanaLike(e)?(this.solanaProviderAdapter&&this.solanaProviderAdapter.release(),this.solanaProviderAdapter=r):o.isTronLike(e)?(this.tronProviderAdapter&&this.tronProviderAdapter.release(),this.tronProviderAdapter=r):(this.ethereumProviderAdapter&&this.ethereumProviderAdapter.release(),this.ethereumProviderAdapter=r)}catch(t){throw console.error(t),Error("updateProviderAdapter failed, please try again.")}}async setListeners(){this.ethereumProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}}),this.solanaProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}}),this.tronProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}})}async onAccountChanged(){await this.ethereumProviderAdapter?.onAccountChanged(),await this.solanaProviderAdapter?.onAccountChanged(),await this.tronProviderAdapter?.onAccountChanged();const e=k.EventType.AccountChanged;typeof document<"u"?document?.dispatchEvent(new Event(e)):process?.emit("message",e,void 0)}async onChainChanged(e){e?await this.getProviderAdapter(e).onChainChanged(e):(await this.disconnectFromConnector(),z.reloadPage())}async monitorConnectedAddress(e){await C.API.monitor(await this.getEthereumAddressByChain(e))}async getBalances(e,r,t,i,a=!1,n,s=!1){return K.getShieldedBalance(this,e,r,t,i,a,this.generateProofRemotely,n,s)}async getApprovedBalances(e,r=!1,t=!1){return w.getApprovedBalance(this,e,r,t)}async getTotalBalance(e,r,t,i=!1,a,n=!1){const s=t??await this.getEthereumAddressByChain(e),h=r??this.userKeys,l=await this.getBalances(e,h.getShieldedPrivateKey(),h.getShieldedPublicKey(),s,i,a,n),u=!o.isSolanaLike(e)&&!n?await this.getApprovedBalances(e,i,a):new Map,p=G.isExtension?await Z.privateTokensDB.getPrivateTokens(e,s):ee.getErc20TokensForChain(e),c=[];return p.forEach(g=>{const v=g.erc20TokenAddress.toLowerCase(),A=l.get(v),f=u.get(v),b={token:g,balance:(A?.balance??0n)+(f?.balance??0n),timestamp:A?.timestamp||f?.timestamp||"0",nfts:A?.nfts||[]};c.push(b)}),c}async getStuckShieldedBalances(e,r,t){return(await this.getTotalBalance(e,r,t,!1,!1,!0)).filter(a=>a.balance>0n)}getSupportedPassportLinks(){return O.supportedPassportLinks}checkAccessToken(e,r){return I.checkHinkalAccessToken(this,e,r)}async getHinkalTreeRootHash(e){if(o.isSolanaLike(e)){const{hinkalIdl:t,hinkalAddress:i,originalDeployer:a}=o.networkRegistry[e].contractData;if(!t||!i||!a)throw new Error(`Missing Solana configuration for chain ${e}`);const n=new P.PublicKey(a),s=new P.PublicKey(i),h=L.getMerkleAccountPublicKey(s,n),l=this.getSolanaProgram(t);return D.fetchSolanaMerkleTreeRootHash(l,h)}return this.getContractWithFetcherByChainId(e,S.ContractType.HinkalContract).getRootHash()}async getAccessTokenTreeRootHash(e){if(o.isSolanaLike(e)){const{hinkalIdl:t,hinkalAddress:i,originalDeployer:a}=o.networkRegistry[e].contractData;if(!t||!i||!a)throw new Error(`Missing Solana configuration for chain ${e}`);const n=new P.PublicKey(a),s=new P.PublicKey(i),h=L.getAccessTokenMerkleAccountPublicKey(s,n),l=this.getSolanaProgram(t);return D.fetchSolanaMerkleTreeRootHash(l,h)}return this.getContractWithFetcherByChainId(e,S.ContractType.AccessTokenContract).getRootHash()}async resetMerkleTreesIfNecessary(e){const t=(await Promise.all((e??this.getSupportedChains()).map(async i=>{const[a,n]=await Promise.all([this.getHinkalTreeRootHash(i),this.getAccessTokenTreeRootHash(i)]),s=BigInt(a)!==this.merkleTreeHinkalByChain[i].getRootHash()||BigInt(n)!==this.merkleTreeAccessTokenByChain[i].getRootHash();return{chainId:i,needsReset:s}}))).filter(i=>i.needsReset).map(i=>i.chainId);t.length>0&&(console.log("resetting merkle tree in resetMerkleTreesIfNecessary for chains:",t),await this.resetMerkle(t))}async getEthereumAddress(){const e=this.ethereumProviderAdapter??this.solanaProviderAdapter??this.tronProviderAdapter;if(!e)throw new Error("No provider adapter initialized");return e.getAddress()}getEthereumAddressByChain(e){return this.getProviderAdapter(e).getAddress()}async getRandomRelay(e,r=!1){return(await C.API.getIdleRelay(e,r)).relay}getGasPrice(e){const r=this.getProviderAdapter(e);if(!r)throw new Error("Illegal State of providerAdapter in Hinkal: no providerAdapter initialized");return r.getGasPrice(e)}getAPI(){return C.API}snapshotsClearInterval(){this.getSupportedChains().forEach(e=>{this.commitmentsSnapshotServiceByChain[e]?.intervalClear(),this.accessTokenSnapshotServiceByChain[e]?.intervalClear(),this.nullifierSnapshotServiceByChain[e]?.intervalClear(),this.approvalsSnapshotServiceByChain[e]?.intervalClear()})}checkTokenRegistry(e,r,t){if(o.isSolanaLike(e)){const{hinkalIdl:a,hinkalAddress:n,originalDeployer:s}=o.networkRegistry[e].contractData;if(!a||!n||!s)throw new Error("missing solana data");const h=this.getSolanaProgram(a),l=new P.PublicKey(s);return U.hinkalCheckSolanaTokenRegistry(h,l,r,t)}if(o.isTronLike(e))return B.hinkalCheckTronTokenRegistry(r,t,e);const i=this.getContractWithFetcher(e,S.ContractType.HinkalHelperContract);return B.hinkalCheckTokenRegistry(i,r,t)}getRecipientInfo(){return Q.getRecipientInfo(this)}getApprovedUtxos(e,r=!1){return w.getApprovedUtxos(this,e,r)}getApprovedUtxosForToken(e,r,t=!1){return w.getApprovedUtxosForToken(this,e,r,t)}async deposit(e,r,t=!0,i=!1){return T.hinkalDeposit(this,e,r,t,i)}async depositSolana(e,r){return m.hinkalSolanaDeposit(this,e,r)}async depositForOther(e,r,t,i=!0,a=!1){return T.hinkalDepositForOther(this,e,r,t,i,a)}async depositSolanaForOther(e,r,t){return m.hinkalSolanaDepositForOther(this,e,r,t)}async depositAndWithdraw(e,r,t,i,a,n,s,h=!0){const l=d.validateAndGetChainId([e]);return o.isSolanaLike(l)?he.hinkalSolanaDepositAndWithdraw(this,e,r,t,i,a,n,s):W.hinkalDepositAndWithdraw(this,e,r,t,i,a,n,s,h)}async claimUtxo(e,r,t,i){const a=d.validateAndGetChainId([e]);return o.isSolanaLike(a)?ve.hinkalSolanaClaimUtxo(this,e,r,t,i):ke.hinkalClaimUtxo(this,e,r,t,i)}async depositAndBridge(e,r,t,i,a,n,s=!0){return ge.hinkalDepositAndBridge(this,e,r,t,i,a,n,s)}async prooflessDeposit(e,r,t,i){const a=d.validateAndGetChainId(e);return o.isSolanaLike(a)?Pe.hinkalSolanaProoflessDeposit(this,e,r,t,i):ie.hinkalProoflessDeposit(this,e,r,t,i)}getSolanaProgram(e){if(!this.solanaProviderAdapter)throw new Error("No provider adapter initialized");if(!("getSolanaProgram"in this.solanaProviderAdapter))throw new Error("Current provider adapter is not a Solana provider adapter");return this.solanaProviderAdapter.getSolanaProgram(e)}getSolanaPublicKey(){if(!this.solanaProviderAdapter)throw new Error("No provider adapter initialized");if(!("getSolanaPublicKey"in this.solanaProviderAdapter))throw new Error("Current provider adapter is not a Solana provider adapter");return this.solanaProviderAdapter.getSolanaPublicKey()}async transfer(e,r,t,i,a,n){const s=d.validateAndGetChainId(e);return o.isSolanaLike(s)?ce.hinkalSolanaTransfer(this,e,r,t,i,a,n):se.hinkalTransfer(this,e,r,t,i,a,n)}async withdraw(e,r,t,i,a,n,s){const h=d.validateAndGetChainId(e);return o.isSolanaLike(h)?le.hinkalSolanaWithdraw(this,e,r,t,a,n,s):F.hinkalWithdraw(this,e,r,t,i,a,n,s)}async withdrawStuckUtxos(e,r){return ye.hinkalWithdrawStuckUtxos(this,e,r)}async swap(e,r,t,i,a,n,s){const h=d.validateAndGetChainId(e);return o.isSolanaLike(h)?this.swapSolana(e,r,i,a,n):x.hinkalSwap(this,e,r,t,i,a,n,s)}async swapSolana(e,r,t,i,a){const n=JSON.parse(t),s=BigInt(n.swapperAccountSalt),{instructionLists:h,addressLookupTableAccount:l}=n.data;return de.hinkalSolanaSwap(this,e,r,s,h,l,i,a)}async actionReceive(e,r,t,i,a,n){if(!a)throw new Error("subAccount is required");const s=d.validateAndGetChainId(e);return o.isSolanaLike(s)?H.hinkalSolanaProxyShield(this,e[0],r[0],a,void 0,n):Y.hinkalActionReceive(this,e,r,t,i,a,n)}async actionPrivateWallet(e,r,t,i,a,n,s,h,l,u,p=!1,c,g,v){return $.hinkalPrivateWallet(this,e,r,t,i,a,n,s,h,l,u,p,c,g,v)}async proxySwap(e,r,t,i,a,n,s,h,l=!1,u,p){const c=d.validateAndGetChainId(e);return o.isSolanaLike(c)?pe.hinkalSolanaProxySwap(this,e,r,i,n,s,h):ae.hinkalProxySwap(this,e,r,t,i,a,n,s,h,l,u,p)}async proxyToPrivate(e,r,t,i,a,n,s){const h=d.validateAndGetChainId(e);return o.isSolanaLike(h)?H.hinkalSolanaProxyShield(this,e[0],r[0],t,i,s):oe.hinkalProxyToPrivate(this,e,r,i,a,n,t,s)}async proxySend(e,r,t,i,a,n,s){const h=d.validateAndGetChainId(e);if(o.isSolanaLike(h))return ue.hinkalSolanaProxySend(this,e[0],r[0],t,i,s);const l=te.createTransaferEmporiumOpsBatch(this,h,e.map(c=>c.erc20TokenAddress),r,i),u=e.map((c,g)=>({token:c,amount:-1n*r[g]}));return await this.actionPrivateWallet(h,[],[],[],l,u,t,a,n,void 0,void 0,void 0,s,void 0)}async multiSendPrivateRecipients(e,r,t){return ne.hinkalMultiSendPrivateRecipients(this,e,r,t)}areMerkleTreeUpdatesDisabled(){return this.disableMerkleTreeUpdates}updateMerkleTreeUpdates(e){this.disableMerkleTreeUpdates=e}}exports.Hinkal=Ae;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const q=require("ethers"),k=require("../../types/hinkal.types.cjs"),S=require("../../types/ethereum-network.types.cjs"),U=require("./hinkalCheckSolanaTokenRegistry.cjs"),I=require("../../functions/web3/functionCalls/accessTokenCalls.cjs"),K=require("../../functions/web3/events/getShieldedBalance.cjs"),y=require("../crypto-keys/keys.cjs"),T=require("./hinkalDeposit.cjs"),W=require("./hinkalDepositAndWithdraw.cjs"),m=require("./hinkalSolanaDeposit.cjs"),x=require("./hinkalSwap.cjs"),F=require("./hinkalWithdraw.cjs"),N=require("./resetMerkleTrees.cjs"),M=require("../merkle-tree/MerkleTree.cjs"),_=require("../../error-handling/error-codes.constants.cjs"),R=require("../../crypto/poseidon.cjs"),o=require("../../constants/chains.constants.cjs");require("../../API/getServerURL.cjs");require("axios");require("../../constants/coingecko.constants.cjs");require("../../constants/server.constants.cjs");require("../http/HttpClient.cjs");const C=require("../../API/API.cjs");require("../../API/tenderly.api.cjs");require("../../constants/token-data/index.cjs");require("../../constants/contracts.constants.cjs");const O=require("../../constants/kyc.constants.cjs"),G=require("../../constants/vite.constants.cjs");require("../../constants/reorg-depths.constants.cjs");require("../../constants/addresses.constants.cjs");require("../../constants/token.limits.constants.cjs");require("../../constants/presale.constants.cjs");require("../../constants/activity.constants.cjs");require("../../constants/tasks.constants.cjs");require("../../constants/events.constants.cjs");require("../../constants/schedule.constants.cjs");require("../../constants/tokens.constants.cjs");const z=require("../../functions/utils/reloadPage.cjs"),j=require("../MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs"),$=require("./hinkalPrivateWallet.cjs"),J=require("../../functions/utils/cacheDevice.utils.cjs"),V=require("../../functions/web3/getContractMetadata.cjs"),Q=require("./hinkalGetRecipientInfo.cjs"),w=require("../../functions/web3/events/getApprovedBalance.cjs"),X=require("./hinkalSignSubAccount.cjs"),B=require("./hinkalCheckTokenRegistry.cjs"),Y=require("./hinkalActionReceive.cjs"),Z=require("../TokenDBs/PrivateTokensDB.cjs");require("idb-keyval");const ee=require("../../functions/utils/erc20tokenFunctions.cjs");require("multiformats");const P=require("@solana/web3.js");require("@solana/spl-token");require("tronweb");const d=require("../../functions/utils/token-check.utils.cjs");require("async-mutex");require("../../functions/utils/convertIntegrationProviderToExternalActionId.cjs");require("../../types/circom-data.types.cjs");require("../../types/activities.types.cjs");const L=require("../../functions/pre-transaction/solana.cjs");require("tweetnacl");require("bs58");require("@coral-xyz/anchor");require("buffer");require("libsodium-wrappers");require("lodash");require("../../functions/utils/userAgent.cjs");require("circomlibjs-hinkal-fork");require("process");require("../../providers/EthersProviderAdapter.cjs");const re=require("../../providers/SolanaProviderAdapter.cjs");require("node-forge");require("../../API/enclaveUtxoCalls.cjs");require("../../functions/web3/events/getInputUtxoAndBalance.cjs");require("../../functions/web3/getTokenHolder.cjs");const te=require("../../functions/private-wallet/emporium.helpers.cjs"),ie=require("./hinkalProoflessDeposit.cjs"),ae=require("./hinkalProxySwap.cjs"),ne=require("./hinkalMultiSend.cjs"),se=require("./hinkalTransfer.cjs"),oe=require("./hinkalProxyToPrivate.cjs"),E=require("../../providers/TronProviderAdapter.cjs"),he=require("./hinkalSolanaDepositAndWithdraw.cjs"),le=require("./hinkalSolanaWithdraw.cjs"),ce=require("./hinkalSolanaTransfer.cjs"),de=require("./hinkalSolanaSwap.cjs"),ue=require("./hinkalSolanaProxySend.cjs"),pe=require("./hinkalSolanaProxySwap.cjs"),H=require("./hinkalSolanaProxyShield.cjs"),D=require("../../functions/web3/fetchSolanaMerkleTreeRootHash.cjs"),ge=require("./hinkalDepositAndBridge.cjs"),ke=require("./hinkalClaimUtxo.cjs"),Pe=require("./hinkalSolanaProoflessDeposit.cjs"),ve=require("./hinkalSolanaClaimUtxo.cjs"),ye=require("./hinkalWithdrawStuckUtxos.cjs");class Ae{ethereumProviderAdapter;solanaProviderAdapter;tronProviderAdapter;userKeys;signingMessage="Login to Hinkal Protocol";privateTransferSigningMessage="Login to Hinkal's Private Transfer App";merkleTreeHinkalByChain={};merkleTreeAccessTokenByChain={};nullifiersByChain={};encryptedOutputsByChain={};approvalsByChain={};commitmentsSnapshotServiceByChain={};nullifierSnapshotServiceByChain={};accessTokenSnapshotServiceByChain={};approvalsSnapshotServiceByChain={};utxoUtils;cacheDevice;generateProofRemotely;disableMerkleTreeUpdates;constructor(e){this.userKeys=new y.UserKeys(void 0),o.HINKAL_SUPPORTED_CHAINS.forEach(r=>{this.merkleTreeHinkalByChain[r]=M.MerkleTree.create(R.poseidonFunction,0n),this.merkleTreeAccessTokenByChain[r]=M.MerkleTree.create(R.poseidonFunction,0n),this.nullifiersByChain[r]=new Set,this.encryptedOutputsByChain[r]=[],this.approvalsByChain[r]=new Map}),this.generateProofRemotely=e?.generateProofRemotely??!0,this.utxoUtils=new j.MultiThreadedUtxoUtils,this.cacheDevice=J.createCacheDevice(e),this.disableMerkleTreeUpdates=e?.disableMerkleTreeUpdates??!1}async initProviderAdapter(e,r){const t=r instanceof re.SolanaProviderAdapter,i=r instanceof E.TronProviderAdapter;let a=o.chainIds.ethMainnet;t?a=o.chainIds.solanaMainnet:i&&(a=o.chainIds.tronMainnet),await this.updateProviderAdapter(a,r),t?this.solanaProviderAdapter?.initConnector(e):i?this.tronProviderAdapter?.initConnector(e):this.ethereumProviderAdapter?.initConnector(e);let n;t?n=await this.connectAndPatchProvider(!0,e):i?n=await r.connectAndPatchProvider(e):n=await this.connectAndPatchProvider(!1,e),await r.init(n),await this.setListeners()}getSigningMessage(e=k.LoginMessageMode.PROTOCOL){switch(e){case k.LoginMessageMode.PRIVATE_TRANSFER:return this.privateTransferSigningMessage;case k.LoginMessageMode.PROTOCOL:default:return this.signingMessage}}async initUserKeys(e=k.LoginMessageMode.PROTOCOL){const r=this.getSigningMessage(e);this.userKeys=new y.UserKeys(await this.getProviderAdapter().signMessage(r))}initUserKeysWithSignature(e){this.userKeys=new y.UserKeys(e)}async initUserKeysFromSeedPhrases(e){const r=e.join(" "),t=q.ethers.toUtf8Bytes(r),i=q.ethers.keccak256(t);this.userKeys=new y.UserKeys(i)}async resetMerkle(e){if(this.disableMerkleTreeUpdates)return;(e?.every(t=>this.isSelectedNetworkSupported(t))??!0)&&await N.resetMerkleTrees(this,e)}getProviderAdapter(e){let r=e;r||(this.ethereumProviderAdapter?r=o.chainIds.ethMainnet:this.solanaProviderAdapter?r=o.chainIds.solanaMainnet:r=o.chainIds.tronMainnet);let t;if(o.isSolanaLike(r)?t=this.solanaProviderAdapter:o.isTronLike(r)?t=this.tronProviderAdapter:t=this.ethereumProviderAdapter,!t)throw new Error("ProviderAdapter is not initialized");return t}getTronWeb(){const e=this.tronProviderAdapter;if(!e)throw new Error("Tron provider adapter not initialized");if(!(e instanceof E.TronProviderAdapter))throw new Error("Tron provider adapter is not a TronProviderAdapter");const r=e.getTronWeb();if(!r)throw new Error("TronWeb not available");return r}getSupportedChains(){return this.ethereumProviderAdapter&&this.solanaProviderAdapter?o.WALLET_SUPPORTED_CHAINS:this.ethereumProviderAdapter?o.HINKAL_SUPPORTED_CHAINS.filter(e=>!o.isSolanaLike(e)&&!o.isTronLike(e)):this.solanaProviderAdapter?o.HINKAL_SUPPORTED_CHAINS.filter(e=>o.isSolanaLike(e)):this.tronProviderAdapter?o.HINKAL_SUPPORTED_CHAINS.filter(e=>o.isTronLike(e)):[]}async waitForTransaction(e,r,t=1){return!!await this.getProviderAdapter(e).waitForTransaction(e,r,t)}getContract(e,r,t=void 0){return this.getProviderAdapter(e).getContract(e,r,t)}getContractWithFetcherByChainId(e,r,t=void 0){return V.getContractWithFetcherByChainId(e,r,t)}async signMessage(e){return await this.getProviderAdapter().signMessage(e)}async signTypedData(e,r,t){return await this.getProviderAdapter().signTypedData(e,r,t)}async signWithSubAccount(e,r,t,i){return X.hinkalSignSubAccount(e,r,t,i)}getContractWithSigner(e,r,t=""){return this.getProviderAdapter(e).getContractWithSigner(e,r,t)}getContractWithFetcher(e,r,t=""){return this.getProviderAdapter(e).getContractWithFetcher(e,r,t)}isSelectedNetworkSupported(e){return!!o.networkRegistry[e]}async switchNetwork(e){try{await this.getProviderAdapter().switchNetwork(e)}catch{throw new Error(_.transactionErrorCodes.FAILED_TO_SWITCH_NETWORKS)}}isPermitterAvailable(e){return this.getProviderAdapter(e).isPermitterAvailable()}async connectAndPatchProvider(e,r){return await this.getProviderAdapter(e?o.chainIds.solanaMainnet:o.chainIds.ethMainnet).connectAndPatchProvider(r)}async disconnectFromConnector(){await this.ethereumProviderAdapter?.disconnectFromConnector(),await this.solanaProviderAdapter?.disconnectFromConnector(),await this.tronProviderAdapter?.disconnectFromConnector()}async resetProviderAdapters(){this.ethereumProviderAdapter=void 0,this.solanaProviderAdapter=void 0,this.tronProviderAdapter=void 0}async updateProviderAdapter(e,r){try{o.isSolanaLike(e)?(this.solanaProviderAdapter&&this.solanaProviderAdapter.release(),this.solanaProviderAdapter=r):o.isTronLike(e)?(this.tronProviderAdapter&&this.tronProviderAdapter.release(),this.tronProviderAdapter=r):(this.ethereumProviderAdapter&&this.ethereumProviderAdapter.release(),this.ethereumProviderAdapter=r)}catch(t){throw console.error(t),Error("updateProviderAdapter failed, please try again.")}}async setListeners(){this.ethereumProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}}),this.solanaProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}}),this.tronProviderAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}})}async onAccountChanged(){await this.ethereumProviderAdapter?.onAccountChanged(),await this.solanaProviderAdapter?.onAccountChanged(),await this.tronProviderAdapter?.onAccountChanged();const e=k.EventType.AccountChanged;typeof document<"u"?document?.dispatchEvent(new Event(e)):process?.emit("message",e,void 0)}async onChainChanged(e){e?await this.getProviderAdapter(e).onChainChanged(e):(await this.disconnectFromConnector(),z.reloadPage())}async monitorConnectedAddress(e){await C.API.monitor(await this.getEthereumAddressByChain(e))}async getBalances(e,r,t,i,a=!1,n,s=!1){return K.getShieldedBalance(this,e,r,t,i,a,this.generateProofRemotely,n,s)}async getApprovedBalances(e,r=!1,t=!1){return w.getApprovedBalance(this,e,r,t)}async getTotalBalance(e,r,t,i=!1,a,n=!1){const s=t??await this.getEthereumAddressByChain(e),h=r??this.userKeys,l=await this.getBalances(e,h.getShieldedPrivateKey(),h.getShieldedPublicKey(),s,i,a,n),u=!o.isSolanaLike(e)&&!n?await this.getApprovedBalances(e,i,a):new Map,p=G.isExtension?await Z.privateTokensDB.getPrivateTokens(e,s):ee.getErc20TokensForChain(e),c=[];return p.forEach(g=>{const v=g.erc20TokenAddress.toLowerCase(),A=l.get(v),f=u.get(v),b={token:g,balance:(A?.balance??0n)+(f?.balance??0n),timestamp:A?.timestamp||f?.timestamp||"0",nfts:A?.nfts||[]};c.push(b)}),c}async getStuckShieldedBalances(e,r,t){return(await this.getTotalBalance(e,r,t,!1,!1,!0)).filter(a=>a.balance>0n)}getSupportedPassportLinks(){return O.supportedPassportLinks}checkAccessToken(e,r){return I.checkHinkalAccessToken(this,e,r)}async getHinkalTreeRootHash(e){if(o.isSolanaLike(e)){const{hinkalIdl:t,hinkalAddress:i,originalDeployer:a}=o.networkRegistry[e].contractData;if(!t||!i||!a)throw new Error(`Missing Solana configuration for chain ${e}`);const n=new P.PublicKey(a),s=new P.PublicKey(i),h=L.getMerkleAccountPublicKey(s,n),l=this.getSolanaProgram(t);return D.fetchSolanaMerkleTreeRootHash(l,h)}return this.getContractWithFetcherByChainId(e,S.ContractType.HinkalContract).getRootHash()}async getAccessTokenTreeRootHash(e){if(o.isSolanaLike(e)){const{hinkalIdl:t,hinkalAddress:i,originalDeployer:a}=o.networkRegistry[e].contractData;if(!t||!i||!a)throw new Error(`Missing Solana configuration for chain ${e}`);const n=new P.PublicKey(a),s=new P.PublicKey(i),h=L.getAccessTokenMerkleAccountPublicKey(s,n),l=this.getSolanaProgram(t);return D.fetchSolanaMerkleTreeRootHash(l,h)}return this.getContractWithFetcherByChainId(e,S.ContractType.AccessTokenContract).getRootHash()}async resetMerkleTreesIfNecessary(e){const t=(await Promise.all((e??this.getSupportedChains()).map(async i=>{const[a,n]=await Promise.all([this.getHinkalTreeRootHash(i),this.getAccessTokenTreeRootHash(i)]),s=BigInt(a)!==this.merkleTreeHinkalByChain[i].getRootHash()||BigInt(n)!==this.merkleTreeAccessTokenByChain[i].getRootHash();return{chainId:i,needsReset:s}}))).filter(i=>i.needsReset).map(i=>i.chainId);t.length>0&&(console.log("resetting merkle tree in resetMerkleTreesIfNecessary for chains:",t),await this.resetMerkle(t))}async getEthereumAddress(){const e=this.ethereumProviderAdapter??this.solanaProviderAdapter??this.tronProviderAdapter;if(!e)throw new Error("No provider adapter initialized");return e.getAddress()}getEthereumAddressByChain(e){return this.getProviderAdapter(e).getAddress()}async getRandomRelay(e,r=!1){return(await C.API.getIdleRelay(e,r)).relay}getGasPrice(e){const r=this.getProviderAdapter(e);if(!r)throw new Error("Illegal State of providerAdapter in Hinkal: no providerAdapter initialized");return r.getGasPrice(e)}getAPI(){return C.API}snapshotsClearInterval(){this.getSupportedChains().forEach(e=>{this.commitmentsSnapshotServiceByChain[e]?.intervalClear(),this.accessTokenSnapshotServiceByChain[e]?.intervalClear(),this.nullifierSnapshotServiceByChain[e]?.intervalClear(),this.approvalsSnapshotServiceByChain[e]?.intervalClear()})}checkTokenRegistry(e,r,t){if(o.isSolanaLike(e)){const{hinkalIdl:a,hinkalAddress:n,originalDeployer:s}=o.networkRegistry[e].contractData;if(!a||!n||!s)throw new Error("missing solana data");const h=this.getSolanaProgram(a),l=new P.PublicKey(s);return U.hinkalCheckSolanaTokenRegistry(h,l,r,t)}if(o.isTronLike(e))return B.hinkalCheckTronTokenRegistry(r,t,e);const i=this.getContractWithFetcher(e,S.ContractType.HinkalHelperContract);return B.hinkalCheckTokenRegistry(i,r,t)}getRecipientInfo(){return Q.getRecipientInfo(this)}getApprovedUtxos(e,r=!1){return w.getApprovedUtxos(this,e,r)}getApprovedUtxosForToken(e,r,t=!1){return w.getApprovedUtxosForToken(this,e,r,t)}async deposit(e,r,t=!0,i=!1){return T.hinkalDeposit(this,e,r,t,i)}async depositSolana(e,r){return m.hinkalSolanaDeposit(this,e,r)}async depositForOther(e,r,t,i=!0,a=!1){return T.hinkalDepositForOther(this,e,r,t,i,a)}async depositSolanaForOther(e,r,t){return m.hinkalSolanaDepositForOther(this,e,r,t)}async depositAndWithdraw(e,r,t,i,a,n,s,h=!0){const l=d.validateAndGetChainId([e]);return o.isSolanaLike(l)?he.hinkalSolanaDepositAndWithdraw(this,e,r,t,i,a,n,s):W.hinkalDepositAndWithdraw(this,e,r,t,i,a,n,s,h)}async claimUtxo(e,r,t,i){const a=d.validateAndGetChainId([e]);return o.isSolanaLike(a)?ve.hinkalSolanaClaimUtxo(this,e,r,t,i):ke.hinkalClaimUtxo(this,e,r,t,i)}async depositAndBridge(e,r,t,i,a,n,s=!0){return ge.hinkalDepositAndBridge(this,e,r,t,i,a,n,s)}async prooflessDeposit(e,r,t,i){const a=d.validateAndGetChainId(e);return o.isSolanaLike(a)?Pe.hinkalSolanaProoflessDeposit(this,e,r,t,i):ie.hinkalProoflessDeposit(this,e,r,t,i)}getSolanaProgram(e){if(!this.solanaProviderAdapter)throw new Error("No provider adapter initialized");if(!("getSolanaProgram"in this.solanaProviderAdapter))throw new Error("Current provider adapter is not a Solana provider adapter");return this.solanaProviderAdapter.getSolanaProgram(e)}getSolanaPublicKey(){if(!this.solanaProviderAdapter)throw new Error("No provider adapter initialized");if(!("getSolanaPublicKey"in this.solanaProviderAdapter))throw new Error("Current provider adapter is not a Solana provider adapter");return this.solanaProviderAdapter.getSolanaPublicKey()}async transfer(e,r,t,i,a,n){const s=d.validateAndGetChainId(e);return o.isSolanaLike(s)?ce.hinkalSolanaTransfer(this,e,r,t,i,a,n):se.hinkalTransfer(this,e,r,t,i,a,n)}async withdraw(e,r,t,i,a,n,s){const h=d.validateAndGetChainId(e);return o.isSolanaLike(h)?le.hinkalSolanaWithdraw(this,e,r,t,a,n,s):F.hinkalWithdraw(this,e,r,t,i,a,n,s)}async withdrawStuckUtxos(e,r){return ye.hinkalWithdrawStuckUtxos(this,e,r)}async swap(e,r,t,i,a,n,s){const h=d.validateAndGetChainId(e);return o.isSolanaLike(h)?this.swapSolana(e,r,i,a,n):x.hinkalSwap(this,e,r,t,i,a,n,s)}async swapSolana(e,r,t,i,a){const n=JSON.parse(t),s=BigInt(n.swapperAccountSalt),{instructionLists:h,addressLookupTableAccount:l}=n.data;return de.hinkalSolanaSwap(this,e,r,s,h,l,i,a)}async actionReceive(e,r,t,i,a,n){if(!a)throw new Error("subAccount is required");const s=d.validateAndGetChainId(e);return o.isSolanaLike(s)?H.hinkalSolanaProxyShield(this,e[0],r[0],a,void 0,n):Y.hinkalActionReceive(this,e,r,t,i,a,n)}async actionPrivateWallet(e,r,t,i,a,n,s,h,l,u,p=!1,c,g,v){return $.hinkalPrivateWallet(this,e,r,t,i,a,n,s,h,l,u,p,c,g,v)}async proxySwap(e,r,t,i,a,n,s,h,l=!1,u,p){const c=d.validateAndGetChainId(e);return o.isSolanaLike(c)?pe.hinkalSolanaProxySwap(this,e,r,i,n,s,h):ae.hinkalProxySwap(this,e,r,t,i,a,n,s,h,l,u,p)}async proxyToPrivate(e,r,t,i,a,n,s){const h=d.validateAndGetChainId(e);return o.isSolanaLike(h)?H.hinkalSolanaProxyShield(this,e[0],r[0],t,i,s):oe.hinkalProxyToPrivate(this,e,r,i,a,n,t,s)}async proxySend(e,r,t,i,a,n,s){const h=d.validateAndGetChainId(e);if(o.isSolanaLike(h))return ue.hinkalSolanaProxySend(this,e[0],r[0],t,i,s);const l=te.createTransaferEmporiumOpsBatch(this,h,e.map(c=>c.erc20TokenAddress),r,i),u=e.map((c,g)=>({token:c,amount:-1n*r[g]}));return await this.actionPrivateWallet(h,[],[],[],l,u,t,a,n,void 0,void 0,void 0,s,void 0)}async multiSendPrivateRecipients(e,r,t){return ne.hinkalMultiSendPrivateRecipients(this,e,r,t)}areMerkleTreeUpdatesDisabled(){return this.disableMerkleTreeUpdates}updateMerkleTreeUpdates(e){this.disableMerkleTreeUpdates=e}}exports.Hinkal=Ae;
@@ -152,8 +152,10 @@ class Pr {
152
152
  }
153
153
  // If chainId is not provided, use the ethereum provider, if it is initialized. In other case, use the solana provider.
154
154
  getProviderAdapter(e) {
155
- let t = e, r;
156
- if (t || (this.ethereumProviderAdapter ? t = c.ethMainnet : this.solanaProviderAdapter ? t = c.solanaMainnet : t = c.tronMainnet), h(t) ? r = this.solanaProviderAdapter : v(t) ? r = this.tronProviderAdapter : r = this.ethereumProviderAdapter, !r)
155
+ let t = e;
156
+ t || (this.ethereumProviderAdapter ? t = c.ethMainnet : this.solanaProviderAdapter ? t = c.solanaMainnet : t = c.tronMainnet);
157
+ let r;
158
+ if (h(t) ? r = this.solanaProviderAdapter : v(t) ? r = this.tronProviderAdapter : r = this.ethereumProviderAdapter, !r)
157
159
  throw new Error("ProviderAdapter is not initialized");
158
160
  return r;
159
161
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("../../constants/protocol.constants.cjs"),B=require("../../functions/pre-transaction/outputUtxoProcessing.cjs"),C=require("../../functions/snarkjs/constructGeneralZkProof.cjs"),O=require("../../functions/web3/events/getShieldedBalance.cjs"),U=require("../../functions/web3/functionCalls/transactCallDirect.cjs"),q=require("../utxo/Utxo.cjs"),z=require("../../error-handling/error-codes.constants.cjs");require("../../types/circom-data.types.cjs");const h=require("../../types/ethereum-network.types.cjs");require("../../constants/chains.constants.cjs");const K=require("../../types/admin.types.cjs");require("../../types/activities.types.cjs");const H=require("../../functions/utils/addresses.cjs"),R=require("../../functions/pre-transaction/getKycAndSignatureData.cjs"),b=require("../../functions/utils/time.utils.cjs"),S=require("../../API/admin-calls.cjs"),I=require("../../functions/pre-transaction/constructAdminData.cjs"),M=require("../../functions/utils/token-check.utils.cjs"),f=async(t,n,e,s)=>{const c=await t.getEthereumAddressByChain(n),{patchAccessTokenMerkleTree:r,signatureData:o}=await R.getKycAndSignatureData(t,n,e,s,c);console.log("hinkalDeposit s1",{patchAccessTokenMerkleTree:r,signatureData:o});const a=void 0;return{signatureData:o,externalActionData:{externalActionId:0n,externalAddress:c,externalActionMetadata:"0x00"},contractTransaction:a,contractToApprove:a,patchAccessTokenMerkleTree:r}},F=async(t,n,e,s)=>{const c=[...await O.addPaddingToUtxos(t,n,e,s)],r=[],o=b.getCurrentTimeInSeconds().toString();for(let a=0;a<e.length;a+=1){const{outputUtxos:i}=B.outputUtxoProcessing(t.userKeys,c[a],s[a],o);r.push(i)}return{inputUtxosArray:c,outputUtxosArray:r}},N=async(t,n,e,s=!0,c=!1)=>{const r=M.validateAndGetChainId(n),o=n.map(P=>P.erc20TokenAddress),[{externalActionData:a,contractTransaction:i,contractToApprove:x,patchAccessTokenMerkleTree:A,signatureData:u},{inputUtxosArray:p,outputUtxosArray:y}]=await Promise.all([f(t,r,o,e),F(t,r,o,e)]);console.log("hinkalDeposit a1",{patchAccessTokenMerkleTree:A,signatureData:u});const l=`swapperM${e.length.toString()}x${p[0].length}x1`,{zkCallData:m,circomData:D,dimData:T}=await C.constructZkProof("v1x1",t.merkleTreeHinkalByChain[r],t.merkleTreeAccessTokenByChain[r],p,y,t.userKeys,l,a.externalActionId,a.externalAddress,a.externalActionMetadata,t.generateProofRemotely,w.zeroAddress,r,void 0,void 0,void 0,A,void 0,void 0,void 0,t.getContractWithFetcher(r,h.ContractType.HinkalHelperContract),u),g=await U.transactCallDirect(t,r,e,n,m,D,T,x,i,s,c),v=I.constructAdminData(K.AdminTransactionType.Onboarding,r,o,e,await t.getEthereumAddress());return S.emitTxPublicData(v),g},$=async(t,n,e,s,c=!0,r=!1)=>{const o=M.validateAndGetChainId(n),a=n.map(d=>d.erc20TokenAddress),[i,x,A]=s.split(",");if(!H.isValidPrivateAddress(s))throw Error(z.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);const u=a.map(d=>[new q.Utxo({amount:0n,erc20TokenAddress:d,shieldedPrivateKey:t.userKeys.getShieldedPrivateKey()}),new q.Utxo({amount:0n,erc20TokenAddress:d,shieldedPrivateKey:t.userKeys.getShieldedPrivateKey()})]),p=`swapperM${e.length.toString()}x${u[0].length}x1`,y=a.map((d,_)=>[new q.Utxo({amount:e[_],erc20TokenAddress:d,randomization:BigInt(i),stealthAddress:x,encryptionKey:A})]),{externalActionData:l,contractTransaction:m,contractToApprove:D,patchAccessTokenMerkleTree:T}=await f(t,o,a,e),{zkCallData:g,circomData:v,dimData:P}=await C.constructZkProof("v1x1",t.merkleTreeHinkalByChain[o],t.merkleTreeAccessTokenByChain[o],u,y,t.userKeys,p,l.externalActionId,l.externalAddress,l.externalActionMetadata,t.generateProofRemotely,w.zeroAddress,o,void 0,void 0,void 0,T,void 0,void 0,void 0,t.getContractWithFetcher(o,h.ContractType.HinkalHelperContract)),k=await U.transactCallDirect(t,o,e,n,g,v,P,D,m,c,r),E=I.constructAdminData(K.AdminTransactionType.PaymentLink,o,a,e,await t.getEthereumAddress());return S.emitTxPublicData(E),k};exports.hinkalDeposit=N;exports.hinkalDepositForOther=$;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("../../constants/protocol.constants.cjs"),B=require("../../functions/pre-transaction/outputUtxoProcessing.cjs"),C=require("../../functions/snarkjs/constructGeneralZkProof.cjs"),O=require("../../functions/web3/events/getShieldedBalance.cjs"),U=require("../../functions/web3/functionCalls/transactCallDirect.cjs"),q=require("../utxo/Utxo.cjs"),z=require("../../error-handling/error-codes.constants.cjs");require("../../types/circom-data.types.cjs");const h=require("../../types/ethereum-network.types.cjs");require("../../constants/chains.constants.cjs");const K=require("../../types/admin.types.cjs");require("../../types/activities.types.cjs");const H=require("../../functions/utils/addresses.cjs"),R=require("../../functions/pre-transaction/getKycAndSignatureData.cjs"),b=require("../../functions/utils/time.utils.cjs"),S=require("../../API/admin-calls.cjs"),I=require("../../functions/pre-transaction/constructAdminData.cjs"),M=require("../../functions/utils/token-check.utils.cjs"),f=async(t,n,e,s)=>{const c=await t.getEthereumAddressByChain(n),{patchAccessTokenMerkleTree:a,signatureData:o}=await R.getKycAndSignatureData(t,n,e,s,c),r=void 0;return{signatureData:o,externalActionData:{externalActionId:0n,externalAddress:c,externalActionMetadata:"0x00"},contractTransaction:r,contractToApprove:r,patchAccessTokenMerkleTree:a}},F=async(t,n,e,s)=>{const c=[...await O.addPaddingToUtxos(t,n,e,s)],a=[],o=b.getCurrentTimeInSeconds().toString();for(let r=0;r<e.length;r+=1){const{outputUtxos:i}=B.outputUtxoProcessing(t.userKeys,c[r],s[r],o);a.push(i)}return{inputUtxosArray:c,outputUtxosArray:a}},N=async(t,n,e,s=!0,c=!1)=>{const a=M.validateAndGetChainId(n),o=n.map(P=>P.erc20TokenAddress),[{externalActionData:r,contractTransaction:i,contractToApprove:p,patchAccessTokenMerkleTree:x,signatureData:l},{inputUtxosArray:A,outputUtxosArray:y}]=await Promise.all([f(t,a,o,e),F(t,a,o,e)]),u=`swapperM${e.length.toString()}x${A[0].length}x1`,{zkCallData:m,circomData:T,dimData:D}=await C.constructZkProof("v1x1",t.merkleTreeHinkalByChain[a],t.merkleTreeAccessTokenByChain[a],A,y,t.userKeys,u,r.externalActionId,r.externalAddress,r.externalActionMetadata,t.generateProofRemotely,w.zeroAddress,a,void 0,void 0,void 0,x,void 0,void 0,void 0,t.getContractWithFetcher(a,h.ContractType.HinkalHelperContract),l),v=await U.transactCallDirect(t,a,e,n,m,T,D,p,i,s,c),g=I.constructAdminData(K.AdminTransactionType.Onboarding,a,o,e,await t.getEthereumAddress());return S.emitTxPublicData(g),v},$=async(t,n,e,s,c=!0,a=!1)=>{const o=M.validateAndGetChainId(n),r=n.map(d=>d.erc20TokenAddress),[i,p,x]=s.split(",");if(!H.isValidPrivateAddress(s))throw Error(z.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);const l=r.map(d=>[new q.Utxo({amount:0n,erc20TokenAddress:d,shieldedPrivateKey:t.userKeys.getShieldedPrivateKey()}),new q.Utxo({amount:0n,erc20TokenAddress:d,shieldedPrivateKey:t.userKeys.getShieldedPrivateKey()})]),A=`swapperM${e.length.toString()}x${l[0].length}x1`,y=r.map((d,k)=>[new q.Utxo({amount:e[k],erc20TokenAddress:d,randomization:BigInt(i),stealthAddress:p,encryptionKey:x})]),{externalActionData:u,contractTransaction:m,contractToApprove:T,patchAccessTokenMerkleTree:D}=await f(t,o,r,e),{zkCallData:v,circomData:g,dimData:P}=await C.constructZkProof("v1x1",t.merkleTreeHinkalByChain[o],t.merkleTreeAccessTokenByChain[o],l,y,t.userKeys,A,u.externalActionId,u.externalAddress,u.externalActionMetadata,t.generateProofRemotely,w.zeroAddress,o,void 0,void 0,void 0,D,void 0,void 0,void 0,t.getContractWithFetcher(o,h.ContractType.HinkalHelperContract)),E=await U.transactCallDirect(t,o,e,n,v,g,P,T,m,c,a),_=I.constructAdminData(K.AdminTransactionType.PaymentLink,o,r,e,await t.getEthereumAddress());return S.emitTxPublicData(_),E};exports.hinkalDeposit=N;exports.hinkalDepositForOther=$;
@@ -16,116 +16,112 @@ import { getCurrentTimeInSeconds as b } from "../../functions/utils/time.utils.m
16
16
  import { emitTxPublicData as M } from "../../API/admin-calls.mjs";
17
17
  import { constructAdminData as E } from "../../functions/pre-transaction/constructAdminData.mjs";
18
18
  import { validateAndGetChainId as S } from "../../functions/utils/token-check.utils.mjs";
19
- const h = async (t, n, e, i) => {
20
- const s = await t.getEthereumAddressByChain(n), { patchAccessTokenMerkleTree: r, signatureData: o } = await $(
19
+ const B = async (t, n, e, i) => {
20
+ const s = await t.getEthereumAddressByChain(n), { patchAccessTokenMerkleTree: o, signatureData: a } = await $(
21
21
  t,
22
22
  n,
23
23
  e,
24
24
  i,
25
25
  s
26
- );
27
- console.log("hinkalDeposit s1", { patchAccessTokenMerkleTree: r, signatureData: o });
28
- const a = void 0;
26
+ ), r = void 0;
29
27
  return {
30
- signatureData: o,
28
+ signatureData: a,
31
29
  externalActionData: {
32
30
  externalActionId: 0n,
33
31
  externalAddress: s,
34
32
  externalActionMetadata: "0x00"
35
33
  },
36
- contractTransaction: a,
37
- contractToApprove: a,
38
- patchAccessTokenMerkleTree: r
34
+ contractTransaction: r,
35
+ contractToApprove: r,
36
+ patchAccessTokenMerkleTree: o
39
37
  };
40
- }, k = async (t, n, e, i) => {
41
- const s = [...await O(t, n, e, i)], r = [], o = b().toString();
42
- for (let a = 0; a < e.length; a += 1) {
43
- const { outputUtxos: c } = z(t.userKeys, s[a], i[a], o);
44
- r.push(c);
38
+ }, W = async (t, n, e, i) => {
39
+ const s = [...await O(t, n, e, i)], o = [], a = b().toString();
40
+ for (let r = 0; r < e.length; r += 1) {
41
+ const { outputUtxos: c } = z(t.userKeys, s[r], i[r], a);
42
+ o.push(c);
45
43
  }
46
- return { inputUtxosArray: s, outputUtxosArray: r };
44
+ return { inputUtxosArray: s, outputUtxosArray: o };
47
45
  }, it = async (t, n, e, i = !0, s = !1) => {
48
- const r = S(n), o = n.map((g) => g.erc20TokenAddress), [
49
- { externalActionData: a, contractTransaction: c, contractToApprove: u, patchAccessTokenMerkleTree: l, signatureData: m },
46
+ const o = S(n), a = n.map((g) => g.erc20TokenAddress), [
47
+ { externalActionData: r, contractTransaction: c, contractToApprove: l, patchAccessTokenMerkleTree: u, signatureData: p },
50
48
  { inputUtxosArray: A, outputUtxosArray: x }
51
49
  ] = await Promise.all([
52
- h(t, r, o, e),
53
- k(t, r, o, e)
54
- ]);
55
- console.log("hinkalDeposit a1", { patchAccessTokenMerkleTree: l, signatureData: m });
56
- const p = `swapperM${e.length.toString()}x${A[0].length}x1`, { zkCallData: y, circomData: T, dimData: v } = await K(
50
+ B(t, o, a, e),
51
+ W(t, o, a, e)
52
+ ]), m = `swapperM${e.length.toString()}x${A[0].length}x1`, { zkCallData: y, circomData: T, dimData: v } = await K(
57
53
  "v1x1",
58
- t.merkleTreeHinkalByChain[r],
59
- t.merkleTreeAccessTokenByChain[r],
54
+ t.merkleTreeHinkalByChain[o],
55
+ t.merkleTreeAccessTokenByChain[o],
60
56
  A,
61
57
  x,
62
58
  t.userKeys,
63
- p,
64
- a.externalActionId,
65
- a.externalAddress,
66
- a.externalActionMetadata,
59
+ m,
60
+ r.externalActionId,
61
+ r.externalAddress,
62
+ r.externalActionMetadata,
67
63
  t.generateProofRemotely,
68
64
  P,
69
- r,
65
+ o,
70
66
  void 0,
71
67
  void 0,
72
68
  void 0,
73
- l,
69
+ u,
74
70
  void 0,
75
71
  void 0,
76
72
  void 0,
77
- t.getContractWithFetcher(r, C.HinkalHelperContract),
78
- m
79
- ), D = await U(
73
+ t.getContractWithFetcher(o, C.HinkalHelperContract),
74
+ p
75
+ ), f = await U(
80
76
  t,
81
- r,
77
+ o,
82
78
  e,
83
79
  // for volotile tokens: amountChanges != amountOfTokenToApprove
84
80
  n,
85
81
  y,
86
82
  T,
87
83
  v,
88
- u,
84
+ l,
89
85
  c,
90
86
  i,
91
87
  s
92
- ), f = E(
88
+ ), D = E(
93
89
  I.Onboarding,
94
- r,
95
90
  o,
91
+ a,
96
92
  e,
97
93
  await t.getEthereumAddress()
98
94
  );
99
- return M(f), D;
100
- }, st = async (t, n, e, i, s = !0, r = !1) => {
101
- const o = S(n), a = n.map((d) => d.erc20TokenAddress), [c, u, l] = i.split(",");
95
+ return M(D), f;
96
+ }, st = async (t, n, e, i, s = !0, o = !1) => {
97
+ const a = S(n), r = n.map((d) => d.erc20TokenAddress), [c, l, u] = i.split(",");
102
98
  if (!N(i))
103
99
  throw Error(F.RECIPIENT_FORMAT_INCORRECT);
104
- const m = a.map((d) => [
100
+ const p = r.map((d) => [
105
101
  new w({ amount: 0n, erc20TokenAddress: d, shieldedPrivateKey: t.userKeys.getShieldedPrivateKey() }),
106
102
  new w({ amount: 0n, erc20TokenAddress: d, shieldedPrivateKey: t.userKeys.getShieldedPrivateKey() })
107
- ]), A = `swapperM${e.length.toString()}x${m[0].length}x1`, x = a.map((d, R) => [
103
+ ]), A = `swapperM${e.length.toString()}x${p[0].length}x1`, x = r.map((d, h) => [
108
104
  new w({
109
- amount: e[R],
105
+ amount: e[h],
110
106
  erc20TokenAddress: d,
111
107
  randomization: BigInt(c),
112
- stealthAddress: u,
113
- encryptionKey: l
108
+ stealthAddress: l,
109
+ encryptionKey: u
114
110
  })
115
- ]), { externalActionData: p, contractTransaction: y, contractToApprove: T, patchAccessTokenMerkleTree: v } = await h(t, o, a, e), { zkCallData: D, circomData: f, dimData: g } = await K(
111
+ ]), { externalActionData: m, contractTransaction: y, contractToApprove: T, patchAccessTokenMerkleTree: v } = await B(t, a, r, e), { zkCallData: f, circomData: D, dimData: g } = await K(
116
112
  "v1x1",
117
- t.merkleTreeHinkalByChain[o],
118
- t.merkleTreeAccessTokenByChain[o],
119
- m,
113
+ t.merkleTreeHinkalByChain[a],
114
+ t.merkleTreeAccessTokenByChain[a],
115
+ p,
120
116
  x,
121
117
  t.userKeys,
122
118
  A,
123
- p.externalActionId,
124
- p.externalAddress,
125
- p.externalActionMetadata,
119
+ m.externalActionId,
120
+ m.externalAddress,
121
+ m.externalActionMetadata,
126
122
  t.generateProofRemotely,
127
123
  P,
128
- o,
124
+ a,
129
125
  void 0,
130
126
  void 0,
131
127
  void 0,
@@ -133,27 +129,27 @@ const h = async (t, n, e, i) => {
133
129
  void 0,
134
130
  void 0,
135
131
  void 0,
136
- t.getContractWithFetcher(o, C.HinkalHelperContract)
137
- ), B = await U(
132
+ t.getContractWithFetcher(a, C.HinkalHelperContract)
133
+ ), H = await U(
138
134
  t,
139
- o,
135
+ a,
140
136
  e,
141
137
  n,
142
- D,
143
138
  f,
139
+ D,
144
140
  g,
145
141
  T,
146
142
  y,
147
143
  s,
148
- r
149
- ), H = E(
144
+ o
145
+ ), R = E(
150
146
  I.PaymentLink,
151
- o,
152
147
  a,
148
+ r,
153
149
  e,
154
150
  await t.getEthereumAddress()
155
151
  );
156
- return M(H), B;
152
+ return M(R), H;
157
153
  };
158
154
  export {
159
155
  it as hinkalDeposit,
@@ -13,6 +13,7 @@ export interface IProviderAdapter<ConnectorType = unknown> {
13
13
  connectToConnector(connector: ConnectorType): Promise<number>;
14
14
  disconnectFromConnector(): Promise<void>;
15
15
  connectAndPatchProvider(connector: ConnectorType): Promise<number>;
16
+ getChainId(): number | undefined;
16
17
  waitForTransaction(chainId: number, transactionHash: string, confirmations: number): Promise<boolean>;
17
18
  signMessage(message: string | Uint8Array): Promise<string>;
18
19
  getAddress(): Promise<string>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./shouldPatchAccessTokenMerkleTree.cjs"),g=require("./getSignatureDataForTransact.cjs"),l=async(e,t,c,n,o)=>{const{patchAccessTokenMerkleTree:a,kycRequired:r,hasAccessToken:s}=await i.shouldPatchAccessTokenMerkleTree(e,t,c,n);console.log("hinkalDeposit x1",{patchAccessTokenMerkleTree:a,kycRequired:r,hasAccessToken:s});const u=await g.getSignatureDataForTransact(t,o,e.userKeys,r,s);return{patchAccessTokenMerkleTree:a,signatureData:u}};exports.getKycAndSignatureData=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./shouldPatchAccessTokenMerkleTree.cjs"),i=require("./getSignatureDataForTransact.cjs"),T=async(e,t,a,r,s)=>{const{patchAccessTokenMerkleTree:c,kycRequired:n,hasAccessToken:o}=await g.shouldPatchAccessTokenMerkleTree(e,t,a,r),u=await i.getSignatureDataForTransact(t,s,e.userKeys,n,o);return{patchAccessTokenMerkleTree:c,signatureData:u}};exports.getKycAndSignatureData=T;
@@ -1,22 +1,20 @@
1
- import { shouldPatchAccessTokenMerkleTree as u } from "./shouldPatchAccessTokenMerkleTree.mjs";
2
- import { getSignatureDataForTransact as g } from "./getSignatureDataForTransact.mjs";
3
- const l = async (e, t, o, c, n) => {
4
- const { patchAccessTokenMerkleTree: a, kycRequired: r, hasAccessToken: s } = await u(
1
+ import { shouldPatchAccessTokenMerkleTree as i } from "./shouldPatchAccessTokenMerkleTree.mjs";
2
+ import { getSignatureDataForTransact as T } from "./getSignatureDataForTransact.mjs";
3
+ const m = async (e, t, r, a, s) => {
4
+ const { patchAccessTokenMerkleTree: c, kycRequired: o, hasAccessToken: n } = await i(
5
5
  e,
6
6
  t,
7
- o,
8
- c
9
- );
10
- console.log("hinkalDeposit x1", { patchAccessTokenMerkleTree: a, kycRequired: r, hasAccessToken: s });
11
- const i = await g(
7
+ r,
8
+ a
9
+ ), u = await T(
12
10
  t,
13
- n,
11
+ s,
14
12
  e.userKeys,
15
- r,
16
- s
13
+ o,
14
+ n
17
15
  );
18
- return { patchAccessTokenMerkleTree: a, signatureData: i };
16
+ return { patchAccessTokenMerkleTree: c, signatureData: u };
19
17
  };
20
18
  export {
21
- l as getKycAndSignatureData
19
+ m as getKycAndSignatureData
22
20
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("../../constants/chains.constants.cjs"),c=require("../../constants/protocol.constants.cjs"),ee=require("../../data-structures/utxo/Utxo.cjs"),ne=require("../web3/etherFunctions.cjs"),r=require("./common.snarkjs.cjs"),te=require("./generateCircomData.cjs"),ae=require("./generateZkProof.cjs"),se=require("../../types/hinkal.types.cjs"),oe=require("../utils/fees.utils.cjs"),b=require("../../data-structures/Hinkal/hinkalCheckTokenRegistry.cjs"),re=require("../../error-handling/logger.cjs"),ie=require("./getMerkleTreeSiblingsAndRootHashes.cjs"),ce=async(m,W,G,n,s,i,p,q,l,z,D,P=c.zeroAddress,d=T.chainIds.localhost,k=n.map(()=>!1),v=n.map(()=>0n),R=void 0,w=!1,o=void 0,g,u=void 0,J,y=c.defaultSignatureData,_)=>{const O=r.calcAmountChanges(n,s),A=n.map(e=>e[0].erc20TokenAddress),S=r.calcEncryptedOutputs(s),f=i.getShieldedPrivateKey(),Z=ee.Utxo.findCorrectRandomization(ne.randomBigInt(31),f),C=T.isTronLike(d)?await b.hinkalCheckTronTokenRegistry(A,r.calcAmountChanges(n,s,!0),d):await b.hinkalCheckTokenRegistry(J??b.createHinkalHelperFromData(d),A,r.calcAmountChanges(n,s,!0)),B=T.isTronLike(d)?w||C:w,Q=n.map(e=>e.map(t=>t.getConstructableParams()));console.log("hinkalDeposit sa1",{userKeys:i});const{inCommitmentSiblings:X,inCommitmentSiblingSides:Y,accessTokenSiblings:$,accessTokenSiblingSides:K,rootHashHinkal:F,rootHashAccessToken:I,inNullifiers:j}=await ie.getDataFromWorkers(d,W,G,i,Q,B,C,k,m);console.log("hinkalDeposit y1",{userKeys:i,effectivePatchAccessTokenMerkleTree:B,kycRequired:C});const E=r.buildOutCommitments(m,s,k),a={rootHashHinkal:F,shieldedPrivateKey:f,erc20TokenAddresses:A,inAmounts:n.map(e=>e.map(t=>t.amount.toString())),inTimeStamps:n.map(e=>e.map(t=>t.timeStamp)),inRandomizations:n.map(e=>e.map(t=>t.randomization)),inNullifiers:j,inCommitmentSiblings:X,inCommitmentSiblingSides:Y,outAmounts:s.map(e=>e.map(t=>t.amount.toString())),outTimeStamp:BigInt(s[0][0].timeStamp),outPublicKeys:s.map(e=>e.map(t=>t.getStealthAddress())),extraRandomization:Z,amountChanges:O,outCommitments:E,rootHashAccessToken:I,accessTokenSiblings:$,accessTokenSiblingSides:K,calldataHash:0n},h=n.map(e=>e[0].tokenId??0),N=h.reduce((e,t)=>e+t,0)>0?h.length:0;N>0&&(a.tokenIds=h);const H=r.calcPublicSignalCount(p,a.erc20TokenAddresses,a.amountChanges,a.inNullifiers,a.outCommitments,N);if(!o){o=se.defaultHinkalLogicArgs(O.length,i),o.interactionAddress=l??c.zeroAddress;const e=i.getInHinkalAddress(o.interactionAddress);o.inHinkalAddress=e}if(m==="v1x1"){if(a.interactionAddress=o?.interactionAddress??l??c.zeroAddress,i.getInHinkalAddress(a.interactionAddress)!==o.inHinkalAddress)throw new Error("inHinkalAddress mismatch");a.externalApprovalAddresses=o.useApprovalUtxoData?.map(({externalApprovalAddresses:e})=>e)??[c.zeroAddress,c.zeroAddress,c.zeroAddress]}u||(u=oe.generateFeeStructure(v,n.map(e=>e[0].erc20TokenAddress)));const M=r.calcAmountChanges(n,s,!0);g||(g=r.getSlippageValues(M,o)),re.Logger.log({publicSignalCount:H}),a.calldataHash=r.createCallDataHash(m,H,P,l,q,z,S,v,R,g,k,o,u,y,_),console.log("hinkalDeposit k2 pre proof",{input:a,generateProofRemotely:D});const{zkCallData:L}=await ae.generateZkProof(m,d,p,a,D);console.log("hinkalDeposit k2 post proof");const V=r.calcStealthAddressStructure(Z,f),U=te.generateCircomData(E,j,F,I,M,A,s,S,H,q,l,z,P,a.calldataHash,h,V,k,R,void 0,o,g,u,y,_),x={tokenNumber:n.length,nullifierAmount:n[0].length,outputAmount:s[0].length};return{zkCallData:L,circomData:U,dimData:x,encryptedOutputs:S}};exports.constructZkProof=ce;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("../../constants/chains.constants.cjs"),c=require("../../constants/protocol.constants.cjs"),ee=require("../../data-structures/utxo/Utxo.cjs"),te=require("../web3/etherFunctions.cjs"),o=require("./common.snarkjs.cjs"),ne=require("./generateCircomData.cjs"),ae=require("./generateZkProof.cjs"),se=require("../../types/hinkal.types.cjs"),re=require("../utils/fees.utils.cjs"),T=require("../../data-structures/Hinkal/hinkalCheckTokenRegistry.cjs"),oe=require("../../error-handling/logger.cjs"),ce=require("./getMerkleTreeSiblingsAndRootHashes.cjs"),ie=async(d,N,M,t,a,m,b,q,l,z,W,P=c.zeroAddress,i=H.chainIds.localhost,k=t.map(()=>!1),y=t.map(()=>0n),D=void 0,R=!1,s=void 0,u,g=void 0,G,v=c.defaultSignatureData,w)=>{const p=o.calcAmountChanges(t,a),A=t.map(e=>e[0].erc20TokenAddress),h=o.calcEncryptedOutputs(a),f=m.getShieldedPrivateKey(),_=ee.Utxo.findCorrectRandomization(te.randomBigInt(31),f),O=H.isTronLike(i)?await T.hinkalCheckTronTokenRegistry(A,o.calcAmountChanges(t,a,!0),i):await T.hinkalCheckTokenRegistry(G??T.createHinkalHelperFromData(i),A,o.calcAmountChanges(t,a,!0)),J=H.isTronLike(i)?R||O:R,Q=t.map(e=>e.map(n=>n.getConstructableParams())),{inCommitmentSiblings:X,inCommitmentSiblingSides:Y,accessTokenSiblings:$,accessTokenSiblingSides:K,rootHashHinkal:Z,rootHashAccessToken:B,inNullifiers:F}=await ce.getDataFromWorkers(i,N,M,m,Q,J,O,k,d),I=o.buildOutCommitments(d,a,k),r={rootHashHinkal:Z,shieldedPrivateKey:f,erc20TokenAddresses:A,inAmounts:t.map(e=>e.map(n=>n.amount.toString())),inTimeStamps:t.map(e=>e.map(n=>n.timeStamp)),inRandomizations:t.map(e=>e.map(n=>n.randomization)),inNullifiers:F,inCommitmentSiblings:X,inCommitmentSiblingSides:Y,outAmounts:a.map(e=>e.map(n=>n.amount.toString())),outTimeStamp:BigInt(a[0][0].timeStamp),outPublicKeys:a.map(e=>e.map(n=>n.getStealthAddress())),extraRandomization:_,amountChanges:p,outCommitments:I,rootHashAccessToken:B,accessTokenSiblings:$,accessTokenSiblingSides:K,calldataHash:0n},S=t.map(e=>e[0].tokenId??0),j=S.reduce((e,n)=>e+n,0)>0?S.length:0;j>0&&(r.tokenIds=S);const C=o.calcPublicSignalCount(b,r.erc20TokenAddresses,r.amountChanges,r.inNullifiers,r.outCommitments,j);if(!s){s=se.defaultHinkalLogicArgs(p.length,m),s.interactionAddress=l??c.zeroAddress;const e=m.getInHinkalAddress(s.interactionAddress);s.inHinkalAddress=e}if(d==="v1x1"){if(r.interactionAddress=s?.interactionAddress??l??c.zeroAddress,m.getInHinkalAddress(r.interactionAddress)!==s.inHinkalAddress)throw new Error("inHinkalAddress mismatch");r.externalApprovalAddresses=s.useApprovalUtxoData?.map(({externalApprovalAddresses:e})=>e)??[c.zeroAddress,c.zeroAddress,c.zeroAddress]}g||(g=re.generateFeeStructure(y,t.map(e=>e[0].erc20TokenAddress)));const E=o.calcAmountChanges(t,a,!0);u||(u=o.getSlippageValues(E,s)),oe.Logger.log({publicSignalCount:C}),r.calldataHash=o.createCallDataHash(d,C,P,l,q,z,h,y,D,u,k,s,g,v,w);const{zkCallData:L}=await ae.generateZkProof(d,i,b,r,W),V=o.calcStealthAddressStructure(_,f),U=ne.generateCircomData(I,F,Z,B,E,A,a,h,C,q,l,z,P,r.calldataHash,S,V,k,D,void 0,s,u,g,v,w),x={tokenNumber:t.length,nullifierAmount:t[0].length,outputAmount:a[0].length};return{zkCallData:L,circomData:U,dimData:x,encryptedOutputs:h}};exports.constructZkProof=ie;