@hinkal/common 0.3.10 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -2
- package/common/src/API/callRelayer.d.ts +1 -0
- package/common/src/constants/protocol.constants.cjs +1 -1
- package/common/src/constants/protocol.constants.d.ts +10 -5
- package/common/src/constants/protocol.constants.mjs +1 -1
- package/common/src/data-structures/Hinkal/Hinkal.cjs +1 -1
- package/common/src/data-structures/Hinkal/Hinkal.d.ts +2 -1
- package/common/src/data-structures/Hinkal/Hinkal.mjs +5 -2
- package/common/src/data-structures/Hinkal/IHinkal.d.ts +2 -1
- package/common/src/data-structures/Hinkal/hinkalActionReceive.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalActionReceive.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.mjs +57 -57
- package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProxySwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProxySwap.d.ts +1 -1
- package/common/src/data-structures/Hinkal/hinkalProxySwap.mjs +13 -12
- package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.d.ts +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.mjs +9 -9
- package/common/src/data-structures/Hinkal/hinkalSolanaSponsoredShield.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaSponsoredShield.d.ts +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaSponsoredShield.mjs +15 -14
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransfer.mjs +1 -1
- package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs +1 -1
- package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.d.ts +1 -0
- package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.mjs +6 -3
- package/common/src/data-structures/crypto-keys/keys.cjs +1 -1
- package/common/src/data-structures/crypto-keys/keys.d.ts +1 -0
- package/common/src/data-structures/crypto-keys/keys.mjs +3 -0
- package/common/src/data-structures/token-price-fetcher/TokenChecker.cjs +1 -1
- package/common/src/data-structures/token-price-fetcher/TokenChecker.d.ts +1 -0
- package/common/src/data-structures/token-price-fetcher/TokenChecker.mjs +1 -0
- package/common/src/functions/pre-transaction/getVolatileTransferAmount.cjs +1 -1
- package/common/src/functions/pre-transaction/getVolatileTransferAmount.mjs +1 -1
- package/common/src/functions/utils/bridge-claimable-utxo.utils.cjs +1 -1
- package/common/src/functions/utils/bridge-claimable-utxo.utils.d.ts +1 -1
- package/common/src/functions/utils/bridge-claimable-utxo.utils.mjs +4 -4
- package/common/src/functions/utils/fees.utils.cjs +1 -1
- package/common/src/functions/utils/fees.utils.mjs +4 -4
- package/common/src/functions/utils/nearIntents.utils.cjs +1 -1
- package/common/src/functions/utils/nearIntents.utils.mjs +1 -1
- package/common/src/functions/utils/publicBalance.utils.cjs +1 -1
- package/common/src/functions/utils/publicBalance.utils.mjs +1 -0
- package/common/src/functions/web3/events/getShieldedBalance.cjs +1 -1
- package/common/src/functions/web3/events/getShieldedBalance.mjs +17 -16
- package/common/src/webworker/{logError-CIIt1CO3.js → logError-cvFNxc-0.js} +1 -1
- package/common/src/webworker/package.json +1 -1
- package/common/src/webworker/utxoWorker/utxoWorker.types.d.ts +4 -2
- package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/utxoWorkerNode.cjs +1 -1
- package/common/src/webworker/viteWorkerURL.constant.cjs +3 -3
- package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
- package/package.json +1 -1
- package/providers/prepareEthersHinkal.cjs +1 -1
- package/providers/prepareEthersHinkal.d.ts +1 -0
- package/providers/prepareEthersHinkal.mjs +2 -2
- package/providers/prepareSolanaHinkal.cjs +1 -1
- package/providers/prepareSolanaHinkal.d.ts +1 -0
- package/providers/prepareSolanaHinkal.mjs +2 -2
- package/providers/prepareTronHinkal.cjs +1 -1
- package/providers/prepareTronHinkal.d.ts +1 -0
- package/providers/prepareTronHinkal.mjs +2 -2
- package/providers/prepareWagmiHinkal.cjs +1 -1
- package/providers/prepareWagmiHinkal.d.ts +1 -0
- package/providers/prepareWagmiHinkal.mjs +2 -2
- package/services/Hinkal.cjs +1 -1
- package/services/Hinkal.d.ts +2 -0
- package/services/Hinkal.mjs +6 -0
- package/types/IHinkal.d.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/solanaMint.utils.cjs`),c=require(`../../functions/utils/addresses.cjs`),l=require(`../../types/external-action.types.cjs`),u=require(`../../types/solana-transact.types.cjs`),d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/snarkjs/common.snarkjs.cjs`),p=require(`../../functions/pre-transaction/solana.cjs`),m=require(`../../functions/pre-transaction/constructAdminData.cjs`),h=require(`../../functions/pre-transaction/getFeeStructure.cjs`),g=require(`../../functions/pre-transaction/speculativeUtxo.cjs`);require(`../../functions/pre-transaction/index.cjs`);const _=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),v=require(`../../functions/utils/fees.utils.cjs`);require(`../../functions/web3/index.cjs`);const y=require(`./hinkalProoflessDeposit.utils.cjs`),b=require(`./hinkalSolanaTransact.cjs`);let x=require(`ethers`),S=require(`@solana/web3.js`),C=require(`@coral-xyz/anchor`);var w=(n,a,o,c)=>{let{hinkalIdl:l,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[a].contractData;if(!l)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let m=n.userKeys.getShieldedPrivateKey(),h=n.getSolanaProgram(l),g=n.getSolanaPublicKey(),_=new S.PublicKey(d),v=new S.PublicKey(u),{mintPublicKey:y}=s.formatMintAddress(o.erc20TokenAddress),b=y.toString(),x=p.getStorageAccountPublicKey(v,_),C=p.getStorageVaultPublicKey(v,_),w=p.getMerkleAccountPublicKey(v,_),T=c.map(()=>f.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),m),m,n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)),E=T.map(e=>p.buildAnchorStealthAddressStructure(e)),D=i.UserKeys.getEncryptionKeyPair(m).publicKey,O=b===t.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:O?null:y,atasValue:O?null:void 0,storageAccount:x,storageVault:C,merkleAccount:w,amounts:c,mintAddressString:b,stealthAddressStructures:T,anchorStealthStructures:E,ownEncryptionKey:D}},T=async(e,t)=>{let n=y.buildProoflessEncryptedOutputs(e.stealthAddressStructures,e.amounts.map(()=>e.ownEncryptionKey)).map(e=>Buffer.from(e.slice(2),`hex`)),{current:r,next:i}=await p.resolveSolanaRootBuckets(e.program,e.merkleAccount,e.amounts.length);return e.program.methods.multiPaymentDepositAt(e.amounts.map(e=>new C.BN(e.toString())),e.anchorStealthStructures,n,!0,t?new C.BN(t):null).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:r,rootBucketNext:i??e.program.programId,storageVaultAta:e.atasValue})},E=async(r,i,c,l,d,f,p,h,_,y)=>{let x=c.erc20TokenAddress;if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:S}=e.networkRegistry[i].contractData;if(!S)throw Error(`missing data`);let C=await r.getRandomRelay(i,!0);if(!C)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let w=a.getCurrentTimeInSeconds().toString(),T=r.generateProofRemotely?5:1,E=[];for(let e=0;e<l.length;e+=T){let n=l.slice(e,e+T),a=await Promise.all(n.map(async({recipientAddress:n,utxo:a},l)=>{let S=e+l,T={recipient:n,mint:x===`11111111111111111111111111111111`?void 0:x},E=await v.calculateModifiedFeeStructure(i,c,f[S],d),D=m.constructAdminData(p,i,[x],[f[S]],await r.getEthereumAddress()),{compressedAddress:O}=s.formatMintAddress(t.solanaNativeAddress),k=new o.Utxo({amount:0n,mintAddress:x,erc20TokenAddress:O,nullifyingKey:r.userKeys.getShieldedPrivateKey(),timeStamp:w,spendingPublicKey:r.userKeys.getSpendingKeyPair().pubSpendingBJJPoint}),{args:A,commitmentValidationData:j}=await b.hinkalSolanaTransact(r,{chainId:i,mintAddresses:[x],amountChanges:[-a.amount],relayAddress:C,recipient:n,signer:C,functionName:`transact`,accounts:T,relayerFee:E.flatFee,variableRate:E.variableRate,inputUtxos:[[a,k]],useBlockedUtxos:!0,speculative:y&&{pendingLeaves:y,inputUtxos:[[g.toSpeculativeUtxo(a)]]},submit:{mode:u.SolanaSubmitMode.ProofOnly}});return{relayAddress:C,functionName:`transact`,chainId:i,recipientAmount:f[S].toString(),args:A,accounts:T,adminData:D,commitmentValidationData:j,displayRecipient:h?.[S],destinationChainId:_?.chainId,destinationTokenAddress:_?.tokenAddress,destinationTokenAmount:_?.tokenAmounts?.[S]}}));E.push(...a)}return E},D=async(e,t,n,r,i,u,f,p,m,g,y)=>{let b=d.validateAndGetChainId([t]),S=t.erc20TokenAddress,C=c.hashEthereumAddress(await e.getEthereumAddressByChain(b)),D=m?c.hashString(m):void 0,O=u??await h.getFeeStructure(b,S,[S],l.ExternalActionId.Transact,[],
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/solanaMint.utils.cjs`),c=require(`../../functions/utils/addresses.cjs`),l=require(`../../types/external-action.types.cjs`),u=require(`../../types/solana-transact.types.cjs`),d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/snarkjs/common.snarkjs.cjs`),p=require(`../../functions/pre-transaction/solana.cjs`),m=require(`../../functions/pre-transaction/constructAdminData.cjs`),h=require(`../../functions/pre-transaction/getFeeStructure.cjs`),g=require(`../../functions/pre-transaction/speculativeUtxo.cjs`);require(`../../functions/pre-transaction/index.cjs`);const _=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),v=require(`../../functions/utils/fees.utils.cjs`);require(`../../functions/web3/index.cjs`);const y=require(`./hinkalProoflessDeposit.utils.cjs`),b=require(`./hinkalSolanaTransact.cjs`);let x=require(`ethers`),S=require(`@solana/web3.js`),C=require(`@coral-xyz/anchor`);var w=(n,a,o,c)=>{let{hinkalIdl:l,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[a].contractData;if(!l)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let m=n.userKeys.getShieldedPrivateKey(),h=n.getSolanaProgram(l),g=n.getSolanaPublicKey(),_=new S.PublicKey(d),v=new S.PublicKey(u),{mintPublicKey:y}=s.formatMintAddress(o.erc20TokenAddress),b=y.toString(),x=p.getStorageAccountPublicKey(v,_),C=p.getStorageVaultPublicKey(v,_),w=p.getMerkleAccountPublicKey(v,_),T=c.map(()=>f.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),m),m,n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)),E=T.map(e=>p.buildAnchorStealthAddressStructure(e)),D=i.UserKeys.getEncryptionKeyPair(m).publicKey,O=b===t.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:O?null:y,atasValue:O?null:void 0,storageAccount:x,storageVault:C,merkleAccount:w,amounts:c,mintAddressString:b,stealthAddressStructures:T,anchorStealthStructures:E,ownEncryptionKey:D}},T=async(e,t)=>{let n=y.buildProoflessEncryptedOutputs(e.stealthAddressStructures,e.amounts.map(()=>e.ownEncryptionKey)).map(e=>Buffer.from(e.slice(2),`hex`)),{current:r,next:i}=await p.resolveSolanaRootBuckets(e.program,e.merkleAccount,e.amounts.length);return e.program.methods.multiPaymentDepositAt(e.amounts.map(e=>new C.BN(e.toString())),e.anchorStealthStructures,n,!0,t?new C.BN(t):null).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:r,rootBucketNext:i??e.program.programId,storageVaultAta:e.atasValue})},E=async(r,i,c,l,d,f,p,h,_,y)=>{let x=c.erc20TokenAddress;if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:S}=e.networkRegistry[i].contractData;if(!S)throw Error(`missing data`);let C=await r.getRandomRelay(i,!0);if(!C)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let w=a.getCurrentTimeInSeconds().toString(),T=r.generateProofRemotely?5:1,E=[];for(let e=0;e<l.length;e+=T){let n=l.slice(e,e+T),a=await Promise.all(n.map(async({recipientAddress:n,utxo:a},l)=>{let S=e+l,T={recipient:n,mint:x===`11111111111111111111111111111111`?void 0:x},E=await v.calculateModifiedFeeStructure(i,c,f[S],d),D=m.constructAdminData(p,i,[x],[f[S]],await r.getEthereumAddress()),{compressedAddress:O}=s.formatMintAddress(t.solanaNativeAddress),k=new o.Utxo({amount:0n,mintAddress:x,erc20TokenAddress:O,nullifyingKey:r.userKeys.getShieldedPrivateKey(),timeStamp:w,spendingPublicKey:r.userKeys.getSpendingKeyPair().pubSpendingBJJPoint}),{args:A,commitmentValidationData:j}=await b.hinkalSolanaTransact(r,{chainId:i,mintAddresses:[x],amountChanges:[-a.amount],relayAddress:C,recipient:n,signer:C,functionName:`transact`,accounts:T,relayerFee:E.flatFee,variableRate:E.variableRate,inputUtxos:[[a,k]],useBlockedUtxos:!0,speculative:y&&{pendingLeaves:y,inputUtxos:[[g.toSpeculativeUtxo(a)]]},submit:{mode:u.SolanaSubmitMode.ProofOnly}});return{relayAddress:C,functionName:`transact`,chainId:i,recipientAmount:f[S].toString(),args:A,accounts:T,adminData:D,commitmentValidationData:j,displayRecipient:h?.[S],destinationChainId:_?.chainId,destinationTokenAddress:_?.tokenAddress,destinationTokenAmount:_?.tokenAmounts?.[S]}}));E.push(...a)}return E},D=async(e,t,n,r,i,u,f,p,m,g,y)=>{let b=d.validateAndGetChainId([t]),S=t.erc20TokenAddress,C=c.hashEthereumAddress(await e.getEthereumAddressByChain(b)),D=m?c.hashString(m):void 0,O=u??await h.getFeeStructure(b,S,[S],l.ExternalActionId.Transact,[],25n,{mintTo:S,recipient:r[0],nullifierCount:1}),k=n.map(e=>e+v.calculateTotalFee(e,O)),A=w(e,b,t,k),j=a.getCurrentTimeInSeconds().toString(),{compressedAddress:M}=s.formatMintAddress(S),N=A.stealthAddressStructures.map((t,n)=>({recipientAddress:r[n],utxo:new o.Utxo({amount:k[n],timeStamp:j,nullifyingKey:e.userKeys.getShieldedPrivateKey(),mintAddress:S,erc20TokenAddress:M,stealthAddress:x.ethers.toBeHex(t.stealthAddress),H0:[t.H0x,t.H0y]})})),{connection:P,wallet:F}=A.program.provider,I=async()=>{let e=await(await T(A,j)).transaction();return e.recentBlockhash=(await P.getLatestBlockhash()).blockhash,e.feePayer=A.publicKey,P.sendRawTransaction((await F.signTransaction(e)).serialize())},L=N.map(({utxo:e})=>BigInt(e.getCommitment()).toString()),[R,z]=await Promise.all([I(),E(e,b,t,N,O,n,p,g,y,L)]);return{depositTxHash:R,scheduleId:await _.solanaTransactCallRelayerBatch(b,z,C,i,f,D,R)}};exports.hinkalSolanaDepositAndWithdraw=D;
|
|
@@ -117,7 +117,7 @@ var A = (n, a, o, c) => {
|
|
|
117
117
|
}
|
|
118
118
|
return T;
|
|
119
119
|
}, N = async (e, t, n, r, i, d, p, m, h, g, _) => {
|
|
120
|
-
let v = f([t]), y = t.erc20TokenAddress, x = c(await e.getEthereumAddressByChain(v)), C = h ? l(h) : void 0, T = d ?? await b(v, y, [y], u.Transact, [],
|
|
120
|
+
let v = f([t]), y = t.erc20TokenAddress, x = c(await e.getEthereumAddressByChain(v)), C = h ? l(h) : void 0, T = d ?? await b(v, y, [y], u.Transact, [], 25n, {
|
|
121
121
|
mintTo: y,
|
|
122
122
|
recipient: r[0],
|
|
123
123
|
nullifierCount: 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/token-check.utils.cjs`),i=require(`../../functions/pre-transaction/constructAdminData.cjs`),a=require(`../../functions/utils/create-provider.cjs`),o=require(`../AccountActions/AccountActions.cjs`),s=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),c=require(`../../functions/pre-transaction/getFeeStructure.cjs`),l=require(`../../API/admin-calls.cjs`);require(`../../constants/index.cjs`);const u=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`);require(`../AccountActions/index.cjs`);let d=require(`@solana/web3.js`);var f=async(e,t)=>{let{addressLookupTableAccount:n,instructionLists:r}=JSON.parse(t).data,i=await Promise.all(n.map(async t=>{let n=await e.getAddressLookupTable(new d.PublicKey(t));if(!n.value)throw Error(`Failed to fetch lookup table: ${t}`);return n.value}));if(r.length===0)throw Error(`No instructions found`);return{instructions:r.map(e=>new d.TransactionInstruction({keys:e.accounts.map(e=>({pubkey:new d.PublicKey(e.pubkey),isSigner:e.isSigner,isWritable:e.isWritable})),programId:new d.PublicKey(e.programId),data:Buffer.from(e.data,`base64`)})),lookupTableAccounts:i}},p=async(e,t)=>{let n=d.VersionedTransaction.deserialize(Buffer.from(t,`base64`)),r=await Promise.all(n.message.addressTableLookups.map(async({accountKey:t})=>{let n=await e.getAddressLookupTable(t);if(!n.value)throw Error(`Failed to fetch lookup table: ${t.toBase58()}`);return n.value})),{instructions:i}=d.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r});return{instructions:i,lookupTableAccounts:r}},m=async(t,r,i,s)=>{let c=o.AccountActions.getAddressFromSubAccount(t,i);if(!c)throw Error(`Public account address is not available`);let{rpcUrl:l}=e.networkRegistry[t],u=a.createCustomSolanaConnection(l),m=new d.PublicKey(c),{instructions:h,lookupTableAccounts:g}=s===n.ExternalActionId.Lifi?await p(u,r):await f(u,r);return{connection:u,walletPublicKey:m,instructions:h,lookupTableAccounts:g}},h=async(e,a,o,f,p,h,g,_,v)=>{let
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/token-check.utils.cjs`),i=require(`../../functions/pre-transaction/constructAdminData.cjs`),a=require(`../../functions/utils/create-provider.cjs`),o=require(`../AccountActions/AccountActions.cjs`),s=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),c=require(`../../functions/pre-transaction/getFeeStructure.cjs`),l=require(`../../API/admin-calls.cjs`);require(`../../constants/index.cjs`);const u=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`);require(`../AccountActions/index.cjs`);let d=require(`@solana/web3.js`);var f=async(e,t)=>{let{addressLookupTableAccount:n,instructionLists:r}=JSON.parse(t).data,i=await Promise.all(n.map(async t=>{let n=await e.getAddressLookupTable(new d.PublicKey(t));if(!n.value)throw Error(`Failed to fetch lookup table: ${t}`);return n.value}));if(r.length===0)throw Error(`No instructions found`);return{instructions:r.map(e=>new d.TransactionInstruction({keys:e.accounts.map(e=>({pubkey:new d.PublicKey(e.pubkey),isSigner:e.isSigner,isWritable:e.isWritable})),programId:new d.PublicKey(e.programId),data:Buffer.from(e.data,`base64`)})),lookupTableAccounts:i}},p=async(e,t)=>{let n=d.VersionedTransaction.deserialize(Buffer.from(t,`base64`)),r=await Promise.all(n.message.addressTableLookups.map(async({accountKey:t})=>{let n=await e.getAddressLookupTable(t);if(!n.value)throw Error(`Failed to fetch lookup table: ${t.toBase58()}`);return n.value})),{instructions:i}=d.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r});return{instructions:i,lookupTableAccounts:r}},m=async(t,r,i,s)=>{let c=o.AccountActions.getAddressFromSubAccount(t,i);if(!c)throw Error(`Public account address is not available`);let{rpcUrl:l}=e.networkRegistry[t],u=a.createCustomSolanaConnection(l),m=new d.PublicKey(c),{instructions:h,lookupTableAccounts:g}=s===n.ExternalActionId.Lifi?await p(u,r):await f(u,r);return{connection:u,walletPublicKey:m,instructions:h,lookupTableAccounts:g}},h=async(e,a,o,f,p,h,g,_,v,y)=>{let b=r.validateAndGetChainId(a),[{connection:x,walletPublicKey:S,instructions:C,lookupTableAccounts:w},T,E]=await Promise.all([m(b,f,p,h),g?e.getRandomRelay(b):Promise.resolve(null),e.getEthereumAddressByChain(b)]),D=C;if(g){if(!T)throw Error(t.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let e=a[1],r=o[1]*(v??await c.getFeeStructure(b,_,a.map(e=>e.erc20TokenAddress),n.ExternalActionId.Emporium)).variableRate/10000n,{instructions:i}=await u.buildSolanaTransferInstructions(x,S,new d.PublicKey(T),e,r);D=[...C,...i]}let O=await s.sendProxyV0Transaction({connection:x,chainId:b,subAccount:p,payerPublicKey:S,instructions:D,lookupTableAccounts:w});return l.emitTxPublicData(i.constructAdminData(y,b,a.map(e=>e.erc20TokenAddress),o,E,a)),O};exports.hinkalSolanaProxySwap=h;
|
|
@@ -2,5 +2,5 @@ import { AdminTransactionType, ERC20Token, SubAccount } from '../../types';
|
|
|
2
2
|
import { IHinkal } from './IHinkal';
|
|
3
3
|
import { FeeStructure } from '../../types/hinkal.types';
|
|
4
4
|
import { ExternalActionId } from '../../types/external-action.types';
|
|
5
|
-
export declare const hinkalSolanaProxySwap: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChanges: bigint[], data: string, subAccount: SubAccount, externalActionId: ExternalActionId, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType) => Promise<string>;
|
|
5
|
+
export declare const hinkalSolanaProxySwap: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChanges: bigint[], data: string, subAccount: SubAccount, externalActionId: ExternalActionId, isTheSameChainSwap: boolean, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType) => Promise<string>;
|
|
6
6
|
export declare const getSolanaProxySwapSerializedTransaction: (chainId: number, data: string, subAccount: SubAccount, externalActionId: ExternalActionId) => Promise<string>;
|
|
@@ -52,26 +52,26 @@ var h = async (e, t) => {
|
|
|
52
52
|
instructions: p,
|
|
53
53
|
lookupTableAccounts: m
|
|
54
54
|
};
|
|
55
|
-
}, v = async (e, a, o, f, p, m, h, g, v) => {
|
|
56
|
-
let
|
|
57
|
-
_(
|
|
58
|
-
|
|
59
|
-
e.getEthereumAddressByChain(
|
|
55
|
+
}, v = async (e, a, o, f, p, m, h, g, v, y) => {
|
|
56
|
+
let b = r(a), [{ connection: x, walletPublicKey: S, instructions: C, lookupTableAccounts: w }, T, E] = await Promise.all([
|
|
57
|
+
_(b, f, p, m),
|
|
58
|
+
h ? e.getRandomRelay(b) : Promise.resolve(null),
|
|
59
|
+
e.getEthereumAddressByChain(b)
|
|
60
60
|
]), D = C;
|
|
61
|
-
if (
|
|
61
|
+
if (h) {
|
|
62
62
|
if (!T) throw Error(t.RELAYER_NOT_AVAILABLE);
|
|
63
|
-
let e = a[1], r = o[1] * (
|
|
63
|
+
let e = a[1], r = o[1] * (v ?? await c(b, g, a.map((e) => e.erc20TokenAddress), n.Emporium)).variableRate / 10000n, { instructions: i } = await u(x, S, new d(T), e, r);
|
|
64
64
|
D = [...C, ...i];
|
|
65
65
|
}
|
|
66
66
|
let O = await s({
|
|
67
67
|
connection: x,
|
|
68
|
-
chainId:
|
|
68
|
+
chainId: b,
|
|
69
69
|
subAccount: p,
|
|
70
70
|
payerPublicKey: S,
|
|
71
71
|
instructions: D,
|
|
72
72
|
lookupTableAccounts: w
|
|
73
73
|
});
|
|
74
|
-
return l(i(
|
|
74
|
+
return l(i(y, b, a.map((e) => e.erc20TokenAddress), o, E, a)), O;
|
|
75
75
|
};
|
|
76
76
|
//#endregion
|
|
77
77
|
export { v as hinkalSolanaProxySwap };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../types/solana.types.cjs`),t=require(`../../functions/utils/token-check.utils.cjs`),n=require(`../../functions/pre-transaction/constructAdminData.cjs`),r=require(`../AccountActions/AccountActions.cjs`),i=require(`../../API/admin-calls.cjs`),a=require(`../../functions/utils/solana-sponsored.utils.cjs`);var o=async(o,s,c,l,u,d)=>{let
|
|
1
|
+
const e=require(`../../types/solana.types.cjs`),t=require(`../../functions/utils/token-check.utils.cjs`),n=require(`../../functions/pre-transaction/constructAdminData.cjs`),r=require(`../AccountActions/AccountActions.cjs`),i=require(`../../API/admin-calls.cjs`),a=require(`../../functions/utils/solana-sponsored.utils.cjs`);var o=async(o,s,c,l,u,d,f)=>{let p=t.validateAndGetChainId([s]),m=r.AccountActions.getAddressFromSubAccount(p,c);if(!m)throw Error(`Missing temp wallet address for bridge shield`);let h=await o.getRandomRelay(p,!0);if(!h)throw Error(`No Solana relayer available for bridge shield`);let{txHash:g,feeWei:_}=await a.sendSolanaSponsoredTx({chainId:p,tempSubAccount:c,intent:{kind:e.SolanaSponsoredTxKind.Shield,tokenAddress:s.erc20TokenAddress,amount:l.toString(),senderAddress:m,relayAddress:h,recipientInfo:u,variableRate:f?.toString()}}),v=l-_;return i.emitTxPublicData(n.constructAdminData(d,p,[s.erc20TokenAddress],[v],m)),{txHash:g,shieldedAmount:v}};exports.hinkalSolanaSponsoredShield=o;
|
|
@@ -2,7 +2,7 @@ import { AdminTransactionType } from '../../types/admin.types';
|
|
|
2
2
|
import { SubAccount } from '../../types/proxy.types';
|
|
3
3
|
import { ERC20Token } from '../../types/token.types';
|
|
4
4
|
import { IHinkal } from './IHinkal';
|
|
5
|
-
export declare const hinkalSolanaSponsoredShield: (hinkal: IHinkal, token: ERC20Token, tempSubAccount: SubAccount, landedAmount: bigint, recipientInfo: string, action?: AdminTransactionType) => Promise<{
|
|
5
|
+
export declare const hinkalSolanaSponsoredShield: (hinkal: IHinkal, token: ERC20Token, tempSubAccount: SubAccount, landedAmount: bigint, recipientInfo: string, action?: AdminTransactionType, variableRate?: bigint) => Promise<{
|
|
6
6
|
txHash: string;
|
|
7
7
|
shieldedAmount: bigint;
|
|
8
8
|
}>;
|
|
@@ -5,26 +5,27 @@ import { AccountActions as r } from "../AccountActions/AccountActions.mjs";
|
|
|
5
5
|
import { emitTxPublicData as i } from "../../API/admin-calls.mjs";
|
|
6
6
|
import { sendSolanaSponsoredTx as a } from "../../functions/utils/solana-sponsored.utils.mjs";
|
|
7
7
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaSponsoredShield.ts
|
|
8
|
-
var o = async (o, s, c, l, u, d) => {
|
|
9
|
-
let
|
|
10
|
-
if (!
|
|
11
|
-
let
|
|
12
|
-
if (!
|
|
13
|
-
let { txHash:
|
|
14
|
-
chainId:
|
|
8
|
+
var o = async (o, s, c, l, u, d, f) => {
|
|
9
|
+
let p = t([s]), m = r.getAddressFromSubAccount(p, c);
|
|
10
|
+
if (!m) throw Error("Missing temp wallet address for bridge shield");
|
|
11
|
+
let h = await o.getRandomRelay(p, !0);
|
|
12
|
+
if (!h) throw Error("No Solana relayer available for bridge shield");
|
|
13
|
+
let { txHash: g, feeWei: _ } = await a({
|
|
14
|
+
chainId: p,
|
|
15
15
|
tempSubAccount: c,
|
|
16
16
|
intent: {
|
|
17
17
|
kind: e.Shield,
|
|
18
18
|
tokenAddress: s.erc20TokenAddress,
|
|
19
19
|
amount: l.toString(),
|
|
20
|
-
senderAddress:
|
|
21
|
-
relayAddress:
|
|
22
|
-
recipientInfo: u
|
|
20
|
+
senderAddress: m,
|
|
21
|
+
relayAddress: h,
|
|
22
|
+
recipientInfo: u,
|
|
23
|
+
variableRate: f?.toString()
|
|
23
24
|
}
|
|
24
|
-
}),
|
|
25
|
-
return i(n(d,
|
|
26
|
-
txHash:
|
|
27
|
-
shieldedAmount:
|
|
25
|
+
}), v = l - _;
|
|
26
|
+
return i(n(d, p, [s.erc20TokenAddress], [v], m)), {
|
|
27
|
+
txHash: g,
|
|
28
|
+
shieldedAmount: v
|
|
28
29
|
};
|
|
29
30
|
};
|
|
30
31
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/utils/addresses.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../types/solana-transact.types.cjs`);require(`../../types/index.cjs`);const o=require(`../../functions/utils/token-check.utils.cjs`),s=require(`../../functions/pre-transaction/constructAdminData.cjs`),c=require(`../../functions/pre-transaction/calculateSolanaNullifierCount.cjs`),l=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const u=require(`../../functions/utils/fees.utils.cjs`),d=require(`./hinkalSolanaTransact.cjs`);var f=async(f,p,m,h,g,_,v,y=!1)=>{if(y)throw Error(`onlyGasEstimate is not supported for Solana transfer`);if(!r.isValidPrivateAddress(h))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let b=o.validateAndGetChainId(p),x=[...m],S=p.map(e=>e.erc20TokenAddress);if(S.length>1)throw Error(`Solana Transfer: Only one mint address is supported`);let{originalDeployer:C}=e.networkRegistry[b].contractData;if(!C)throw Error(`missing data`);let w=g??S[0],T={mintTo:w,nullifierCount:await c.calculateSolanaNullifierCount(f,b,S,x),rootInsertCount:2},E=_??await l.getFeeStructure(b,w,S,i.ExternalActionId.Transact,[],
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/utils/addresses.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../types/solana-transact.types.cjs`);require(`../../types/index.cjs`);const o=require(`../../functions/utils/token-check.utils.cjs`),s=require(`../../functions/pre-transaction/constructAdminData.cjs`),c=require(`../../functions/pre-transaction/calculateSolanaNullifierCount.cjs`),l=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const u=require(`../../functions/utils/fees.utils.cjs`),d=require(`./hinkalSolanaTransact.cjs`);var f=async(f,p,m,h,g,_,v,y=!1)=>{if(y)throw Error(`onlyGasEstimate is not supported for Solana transfer`);if(!r.isValidPrivateAddress(h))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let b=o.validateAndGetChainId(p),x=[...m],S=p.map(e=>e.erc20TokenAddress);if(S.length>1)throw Error(`Solana Transfer: Only one mint address is supported`);let{originalDeployer:C}=e.networkRegistry[b].contractData;if(!C)throw Error(`missing data`);let w=g??S[0],T={mintTo:w,nullifierCount:await c.calculateSolanaNullifierCount(f,b,S,x),rootInsertCount:2},E=_??await l.getFeeStructure(b,w,S,i.ExternalActionId.Transact,[],25n,T);E.variableRate||=t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;let D=-x[0],O=u.calculateTotalFee(D,E);x[0]-=O;let[k,A]=await Promise.all([f.getRandomRelay(b,!0),f.getEthereumAddressByChain(b)]);if(!k)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let j={recipient:k,mint:S[0]===`11111111111111111111111111111111`?void 0:S[0]},M=s.constructAdminData(v,b,S,x,A);return d.hinkalSolanaTransact(f,{chainId:b,mintAddresses:S,amountChanges:x,relayAddress:k,recipient:t.solanaNativeAddress,signer:k,functionName:`transfer`,accounts:j,relayerFee:O,recipientAddress:h,recipientAmounts:[D],submit:{mode:a.SolanaSubmitMode.Relayer,adminData:M}})};exports.hinkalSolanaTransfer=f;
|
|
@@ -24,7 +24,7 @@ var p = async (p, m, h, g, _, v, y, b = !1) => {
|
|
|
24
24
|
mintTo: T,
|
|
25
25
|
nullifierCount: await l(p, x, C, S),
|
|
26
26
|
rootInsertCount: 2
|
|
27
|
-
}, D = v ?? await u(x, T, C, a.Transact, [],
|
|
27
|
+
}, D = v ?? await u(x, T, C, a.Transact, [], 25n, E);
|
|
28
28
|
D.variableRate ||= t;
|
|
29
29
|
let O = -S[0], k = d(O, D);
|
|
30
30
|
S[0] -= k;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../functions/utils/tron.utils.cjs`),r=require(`../../functions/utils/addresses.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../types/transact.types.cjs`),o=require(`../../functions/utils/token-check.utils.cjs`),s=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),c=require(`../../functions/pre-transaction/constructAdminData.cjs`),l=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const u=require(`./hinkalTransact.cjs`),d=require(`../../functions/utils/fees.utils.cjs`),f=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);var p=async(p,m,h,g,_,v,y)=>{let b=o.validateAndGetChainId(m);if(!r.isValidPrivateAddress(g))throw Error(t.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let x=n.addressToHexFormat(await p.getEthereumAddressByChain(b)),S=m.map(e=>e.erc20TokenAddress),C=await s.modifyVolatileTokenAmountChanges(b,m,h),w=v??await l.getFeeStructure(b,_,S,i.ExternalActionId.Transact,[],
|
|
1
|
+
const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../functions/utils/tron.utils.cjs`),r=require(`../../functions/utils/addresses.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../types/transact.types.cjs`),o=require(`../../functions/utils/token-check.utils.cjs`),s=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),c=require(`../../functions/pre-transaction/constructAdminData.cjs`),l=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const u=require(`./hinkalTransact.cjs`),d=require(`../../functions/utils/fees.utils.cjs`),f=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);var p=async(p,m,h,g,_,v,y)=>{let b=o.validateAndGetChainId(m);if(!r.isValidPrivateAddress(g))throw Error(t.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let x=n.addressToHexFormat(await p.getEthereumAddressByChain(b)),S=m.map(e=>e.erc20TokenAddress),C=await s.modifyVolatileTokenAmountChanges(b,m,h),w=v??await l.getFeeStructure(b,_,S,i.ExternalActionId.Transact,[],25n);w.variableRate||=e.HINKAL_PRIVATE_SEND_VARIABLE_RATE;let T=m[0];if(!T)throw Error(`Transfer Action: No Token Found`);let E=-C[0],D=await d.calculateModifiedFeeStructure(b,T,E,w);await f.mergeWithFeeStructure(b,S,C,D);let O=await p.getRandomRelay(b,!0);if(!O)throw Error(t.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let k=c.constructAdminData(y,b,S,C,x);return u.hinkalTransact(p,{chainId:b,erc20Addresses:S,amountChanges:C,externalAddress:O,feeStructure:D,relay:O,recipientAddress:[g],recipientAmounts:[S.map((e,t)=>t===0?E:0n)],submit:{mode:a.SubmitMode.Relayer,adminData:k}})};exports.hinkalTransfer=p;
|
|
@@ -16,7 +16,7 @@ import { mergeWithFeeStructure as f } from "../../functions/pre-transaction/merg
|
|
|
16
16
|
var p = async (p, m, h, g, _, v, y) => {
|
|
17
17
|
let b = o(m);
|
|
18
18
|
if (!r(g)) throw Error(t.RECIPIENT_FORMAT_INCORRECT);
|
|
19
|
-
let x = n(await p.getEthereumAddressByChain(b)), S = m.map((e) => e.erc20TokenAddress), C = await s(b, m, h), w = v ?? await l(b, _, S, i.Transact, [],
|
|
19
|
+
let x = n(await p.getEthereumAddressByChain(b)), S = m.map((e) => e.erc20TokenAddress), C = await s(b, m, h), w = v ?? await l(b, _, S, i.Transact, [], 25n);
|
|
20
20
|
w.variableRate ||= e;
|
|
21
21
|
let T = m[0];
|
|
22
22
|
if (!T) throw Error("Transfer Action: No Token Found");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/vite.constants.cjs`),t=require(`../crypto-keys/keys.cjs`),n=require(`../utxo/Utxo.cjs`),r=require(`../../webworker/worker.registry.cjs`),i=require(`../../webworker/performTaskWithWorker.cjs`),a=require(`../../webworker/utxoWorker/utxoWorker.types.cjs`);var o=16,s=class{NUM_WORKERS;NUM_WORKERS_BATCH_PROCESS;constructor(){e.isNode?(this.NUM_WORKERS=1,this.NUM_WORKERS_BATCH_PROCESS=1):(this.NUM_WORKERS=3,this.NUM_WORKERS_BATCH_PROCESS=Math.min(o,Math.ceil(navigator.deviceMemory??4)))}async createUtxoPromise(e){return await i.performTaskWithWorker({type:r.WorkerVariant.UTXO,payload:e})}async batchFilterUtxosWithNullifier(e,r){let i=this.sliceArrayIntoParts(e,this.NUM_WORKERS).map(e=>this.createUtxoPromise({type:a.UtxoWorkerActionType.BATCH_FILTER_UTXOS_WITH_NULLIFIER,data:{utxos:e.map(e=>e.getConstructableParams()),nullifiers:r}})),o=await Promise.all(i);return o.forEach(e=>{t.stealthPairCacheDevice.mergeWithSerialized(e.stealthPairCache)}),o.flatMap(e=>e.utxoConstructors).map(e=>new n.Utxo(e))}async buildBatchProcess(e,t,r){let i=this.sliceArrayIntoParts(e,this.NUM_WORKERS).map(e=>this.createUtxoPromise({type:a.UtxoWorkerActionType.BUILD_UTXOS,data:{
|
|
1
|
+
const e=require(`../../constants/vite.constants.cjs`),t=require(`../crypto-keys/keys.cjs`),n=require(`../utxo/Utxo.cjs`),r=require(`../../webworker/worker.registry.cjs`),i=require(`../../webworker/performTaskWithWorker.cjs`),a=require(`../../webworker/utxoWorker/utxoWorker.types.cjs`);var o=16,s=class{NUM_WORKERS;NUM_WORKERS_BATCH_PROCESS;constructor(){e.isNode?(this.NUM_WORKERS=1,this.NUM_WORKERS_BATCH_PROCESS=1):(this.NUM_WORKERS=3,this.NUM_WORKERS_BATCH_PROCESS=Math.min(o,Math.ceil(navigator.deviceMemory??4)))}keyMaterialFor(e){return e.hasSignature()?{signature:e.getSignature()}:{nullifyingKey:e.getShieldedPrivateKey()}}async createUtxoPromise(e){return await i.performTaskWithWorker({type:r.WorkerVariant.UTXO,payload:e})}async batchFilterUtxosWithNullifier(e,r){let i=this.sliceArrayIntoParts(e,this.NUM_WORKERS).map(e=>this.createUtxoPromise({type:a.UtxoWorkerActionType.BATCH_FILTER_UTXOS_WITH_NULLIFIER,data:{utxos:e.map(e=>e.getConstructableParams()),nullifiers:r}})),o=await Promise.all(i);return o.forEach(e=>{t.stealthPairCacheDevice.mergeWithSerialized(e.stealthPairCache)}),o.flatMap(e=>e.utxoConstructors).map(e=>new n.Utxo(e))}async buildBatchProcess(e,t,r){let i=this.sliceArrayIntoParts(e,this.NUM_WORKERS).map(e=>this.createUtxoPromise({type:a.UtxoWorkerActionType.BUILD_UTXOS,data:{...this.keyMaterialFor(t),encryptedOutputs:e,chainId:r}}));return(await Promise.all(i)).flat().map(e=>new n.Utxo(e))}sliceArrayIntoParts(e,t){let n=Math.ceil(e.length/t);return Array.from({length:t},(t,r)=>e.slice(n*r,n*(r+1))).filter(e=>e.length>0)}findLastOutput(e,t){let n=t;return e.forEach(e=>{e!==t&&(n=e)}),n}async batchProcess(e,t,n,r){let i=this.sliceArrayIntoParts(e,this.NUM_WORKERS_BATCH_PROCESS),o=this.keyMaterialFor(n),s=i.map(e=>{let n={type:a.UtxoWorkerActionType.DECIPHER_OUTPUTS,data:{encryptedOutputs:e,lastOutput:t,...o,chainId:r}};return this.createUtxoPromise(n)}),c=await Promise.all(s),l=c.map(({additionalEncryptedOutputs:e})=>e).flat(),u=new Set;return{additionalEncryptedOutputs:l.reduce((e,t)=>u.has(t.value)?e:(u.add(t.value),[...e,t]),[]),lastOutput:this.findLastOutput(c.map(e=>e.lastOutput),t)??t}}};exports.MultiThreadedUtxoUtils=s;
|
|
@@ -11,6 +11,7 @@ export declare class MultiThreadedUtxoUtils implements IMultiThreadedUtxoUtils {
|
|
|
11
11
|
readonly NUM_WORKERS: number;
|
|
12
12
|
readonly NUM_WORKERS_BATCH_PROCESS: number;
|
|
13
13
|
constructor();
|
|
14
|
+
private keyMaterialFor;
|
|
14
15
|
private createUtxoPromise;
|
|
15
16
|
batchFilterUtxosWithNullifier(allUtxos: Utxo[], nullifiers: Set<string>): Promise<Utxo[]>;
|
|
16
17
|
buildBatchProcess(encryptedOutputs: EncryptedOutputWithSign[], userKeys: UserKeys, chainId: number): Promise<Utxo[]>;
|
|
@@ -11,6 +11,9 @@ var o = 16, s = class {
|
|
|
11
11
|
constructor() {
|
|
12
12
|
e ? (this.NUM_WORKERS = 1, this.NUM_WORKERS_BATCH_PROCESS = 1) : (this.NUM_WORKERS = 3, this.NUM_WORKERS_BATCH_PROCESS = Math.min(o, Math.ceil(navigator.deviceMemory ?? 4)));
|
|
13
13
|
}
|
|
14
|
+
keyMaterialFor(e) {
|
|
15
|
+
return e.hasSignature() ? { signature: e.getSignature() } : { nullifyingKey: e.getShieldedPrivateKey() };
|
|
16
|
+
}
|
|
14
17
|
async createUtxoPromise(e) {
|
|
15
18
|
return await i({
|
|
16
19
|
type: r.UTXO,
|
|
@@ -33,7 +36,7 @@ var o = 16, s = class {
|
|
|
33
36
|
let i = this.sliceArrayIntoParts(e, this.NUM_WORKERS).map((e) => this.createUtxoPromise({
|
|
34
37
|
type: a.BUILD_UTXOS,
|
|
35
38
|
data: {
|
|
36
|
-
|
|
39
|
+
...this.keyMaterialFor(t),
|
|
37
40
|
encryptedOutputs: e,
|
|
38
41
|
chainId: r
|
|
39
42
|
}
|
|
@@ -51,13 +54,13 @@ var o = 16, s = class {
|
|
|
51
54
|
}), n;
|
|
52
55
|
}
|
|
53
56
|
async batchProcess(e, t, n, r) {
|
|
54
|
-
let i = this.sliceArrayIntoParts(e, this.NUM_WORKERS_BATCH_PROCESS), o =
|
|
57
|
+
let i = this.sliceArrayIntoParts(e, this.NUM_WORKERS_BATCH_PROCESS), o = this.keyMaterialFor(n), s = i.map((e) => {
|
|
55
58
|
let n = {
|
|
56
59
|
type: a.DECIPHER_OUTPUTS,
|
|
57
60
|
data: {
|
|
58
61
|
encryptedOutputs: e,
|
|
59
62
|
lastOutput: t,
|
|
60
|
-
|
|
63
|
+
...o,
|
|
61
64
|
chainId: r
|
|
62
65
|
}
|
|
63
66
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../crypto/poseidon.cjs`),r=require(`../../crypto/babyJub.cjs`),i=require(`../../crypto/eddsa.cjs`),a=require(`../cacheDevices/AttachableMemoryCacheDevice.cjs`),o=require(`./keyUtils.cjs`);let s=require(`ethers`),c=require(`@solana/web3.js`),l=require(`bs58`);l=e.__toESM(l);let u=require(`libsodium-wrappers`);u=e.__toESM(u);let d=require(`tweetnacl`);d=e.__toESM(d);let f=require(`tronweb`);var p=new a.AttachableMemoryCacheDevice,m=class{signature;nullifyingKey;PREFIX_FOR_SPENDING_PAIR=`1`;constructor(e,t){this.signature=e,this.nullifyingKey=t}getSignature(){return this.requireSignature(),this.signature}setSignature(e){this.signature=e}requireSignature(){if(!this.signature)throw Error(`No signature provided`)}requireKeyMaterial(){if(!this.signature&&!this.nullifyingKey)throw Error(`No signature or private key provided`)}verifyTronMessage(e,t){return this.requireSignature(),t===f.Trx.verifyMessageV2(e,this.signature)}getShieldedPrivateKey=()=>{if(this.requireKeyMaterial(),!this.nullifyingKey){let e=BigInt(n.poseidonHash(this.signature));this.nullifyingKey=s.ethers.toBeHex(e%t.NULLIFYING_PRIVATE_KEY_MOD)}return this.nullifyingKey};getShieldedPrivateKeySeed=()=>s.ethers.keccak256(this.getShieldedPrivateKey());getShieldedPublicKey=()=>(this.requireKeyMaterial(),n.poseidonHash(this.getShieldedPrivateKey()));getSpendingKeyPair=()=>{this.requireSignature();let e=i.eddsaInstance(),t=r.babyJubInstance(),a=n.poseidonHash(this.PREFIX_FOR_SPENDING_PAIR,this.getSignature()),o=Buffer.from(s.ethers.getBytes(a)),c=e.prv2pub(o);return{privSpendingKey:a,pubSpendingBJJPoint:[BigInt(t.F.toString(c[0])),BigInt(t.F.toString(c[1]))]}};signEddsa=e=>{this.requireSignature();let t=r.babyJubInstance(),n=i.eddsaInstance(),a=Buffer.from(s.ethers.getBytes(this.getSpendingKeyPair().privSpendingKey)),o=t.F.e(e),c=n.signPoseidon(a,o);return{R8:[BigInt(t.F.toString(c.R8[0])),BigInt(t.F.toString(c.R8[1]))],S:BigInt(c.S)}};getShieldedPrivateKeyFromNonce=e=>{this.requireKeyMaterial();let t=n.poseidonHash(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return s.ethers.keccak256(s.ethers.toUtf8Bytes(`hinkal-offchain-shielded-key:${t}`))};getClaimableSignatureFromNonce=e=>{this.requireKeyMaterial();let t=n.poseidonHash(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return s.ethers.keccak256(s.ethers.toUtf8Bytes(`hinkal-claimable-utxo-signature:${t}`))};getNearIntentsAccountId=()=>{this.requireKeyMaterial();let e=c.Keypair.fromSeed(s.ethers.getBytes(this.getShieldedPrivateKeySeed()));return s.ethers.hexlify(e.publicKey.toBytes()).slice(2)};getNearIntentsKeyPairString=()=>{this.requireKeyMaterial();let e=c.Keypair.fromSeed(s.ethers.getBytes(this.getShieldedPrivateKeySeed()));return`ed25519:${l.default.encode(e.secretKey)}`};getSignerPrivateKeyFromNonce=e=>{this.requireKeyMaterial();let t=n.poseidonHash(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return s.ethers.keccak256(s.ethers.toUtf8Bytes(t))};getSignerSolanaPrivateKeyFromNonce=e=>{let t=this.getSignerPrivateKeyFromNonce(e),n=s.ethers.getBytes(t),r=c.Keypair.fromSeed(n);return l.default.encode(r.secretKey)};verifyMessage(e){return this.requireSignature(),s.ethers.verifyMessage(e,this.signature)}verifySolanaMessage(e,t){this.requireSignature();let n=new TextEncoder().encode(e),r=s.ethers.getBytes(this.signature),i=new c.PublicKey(t).toBytes();return d.default.sign.detached.verify(n,r,i)}static getRandomizedStealthPair=p.attach((e,t)=>{let n=r.babyJubInstance(),i=n.mulPointEscalar(n.Base8,e),a=n.mulPointEscalar(i,BigInt(t));return{H0:[BigInt(n.F.toString(i[0])),BigInt(n.F.toString(i[1]))],H1:[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]}});static getH1FromH0=(e,t)=>{let n=r.babyJubInstance(),i=[n.F.e(e[0]),n.F.e(e[1])],a=n.mulPointEscalar(i,BigInt(t));return[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]};static verifyStealthPair=(e,t,n,r=!0)=>{let i=this.getH1FromH0(e,n);return r?i[1]===t[1]:i===t};static getStealthAddress=(e,t,r)=>{if(r?.length!==2)throw Error(`Spending public key must be an array of 2 elements`);let i=this.getH1FromH0(e,t);return n.poseidonHash(2n*o.getCircomSign(e[0])+o.getCircomSign(i[0]),e[1],i[1],r[0],r[1],t)};static findCorrectRandomization(e,n){if(!n)throw Error(`No Private Shielded Key Provided`);let r=BigInt(n),i,a,o=0n;do i=e*10n**o%t.CIRCOM_P,a=i*r%t.CIRCOM_P,o+=1n;while(a>=2n**250n||i>=2n**250n);return i}static getH0FromRandomization=e=>{let t=r.babyJubInstance(),n=t.mulPointEscalar(t.Base8,e);return[BigInt(t.F.toString(n[0])),BigInt(t.F.toString(n[1]))]};static findH0(e,t){if(!t)return;let{H0:n}=this.getRandomizedStealthPair(e,t);return n}static getEncryptionKeyPair=e=>{let t=u.default.crypto_box_seed_keypair(s.ethers.getBytes(s.ethers.keccak256(e)));return{privateKey:s.ethers.hexlify(t.privateKey),publicKey:s.ethers.hexlify(t.publicKey)}};getAccessKey=()=>(this.requireKeyMaterial(),n.poseidonHash(this.getShieldedPrivateKey(),this.getShieldedPublicKey()));getBackendToken=()=>(this.requireKeyMaterial(),n.poseidonHash(this.getAccessKey(),this.getShieldedPublicKey()))};exports.UserKeys=m,exports.stealthPairCacheDevice=p;
|
|
1
|
+
const e=require(`../../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../crypto/poseidon.cjs`),r=require(`../../crypto/babyJub.cjs`),i=require(`../../crypto/eddsa.cjs`),a=require(`../cacheDevices/AttachableMemoryCacheDevice.cjs`),o=require(`./keyUtils.cjs`);let s=require(`ethers`),c=require(`@solana/web3.js`),l=require(`bs58`);l=e.__toESM(l);let u=require(`libsodium-wrappers`);u=e.__toESM(u);let d=require(`tweetnacl`);d=e.__toESM(d);let f=require(`tronweb`);var p=new a.AttachableMemoryCacheDevice,m=class{signature;nullifyingKey;PREFIX_FOR_SPENDING_PAIR=`1`;constructor(e,t){this.signature=e,this.nullifyingKey=t}getSignature(){return this.requireSignature(),this.signature}hasSignature(){return!!this.signature}setSignature(e){this.signature=e}requireSignature(){if(!this.signature)throw Error(`No signature provided`)}requireKeyMaterial(){if(!this.signature&&!this.nullifyingKey)throw Error(`No signature or private key provided`)}verifyTronMessage(e,t){return this.requireSignature(),t===f.Trx.verifyMessageV2(e,this.signature)}getShieldedPrivateKey=()=>{if(this.requireKeyMaterial(),!this.nullifyingKey){let e=BigInt(n.poseidonHash(this.signature));this.nullifyingKey=s.ethers.toBeHex(e%t.NULLIFYING_PRIVATE_KEY_MOD)}return this.nullifyingKey};getShieldedPrivateKeySeed=()=>s.ethers.keccak256(this.getShieldedPrivateKey());getShieldedPublicKey=()=>(this.requireKeyMaterial(),n.poseidonHash(this.getShieldedPrivateKey()));getSpendingKeyPair=()=>{this.requireSignature();let e=i.eddsaInstance(),t=r.babyJubInstance(),a=n.poseidonHash(this.PREFIX_FOR_SPENDING_PAIR,this.getSignature()),o=Buffer.from(s.ethers.getBytes(a)),c=e.prv2pub(o);return{privSpendingKey:a,pubSpendingBJJPoint:[BigInt(t.F.toString(c[0])),BigInt(t.F.toString(c[1]))]}};signEddsa=e=>{this.requireSignature();let t=r.babyJubInstance(),n=i.eddsaInstance(),a=Buffer.from(s.ethers.getBytes(this.getSpendingKeyPair().privSpendingKey)),o=t.F.e(e),c=n.signPoseidon(a,o);return{R8:[BigInt(t.F.toString(c.R8[0])),BigInt(t.F.toString(c.R8[1]))],S:BigInt(c.S)}};getShieldedPrivateKeyFromNonce=e=>{this.requireKeyMaterial();let t=n.poseidonHash(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return s.ethers.keccak256(s.ethers.toUtf8Bytes(`hinkal-offchain-shielded-key:${t}`))};getClaimableSignatureFromNonce=e=>{this.requireKeyMaterial();let t=n.poseidonHash(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return s.ethers.keccak256(s.ethers.toUtf8Bytes(`hinkal-claimable-utxo-signature:${t}`))};getNearIntentsAccountId=()=>{this.requireKeyMaterial();let e=c.Keypair.fromSeed(s.ethers.getBytes(this.getShieldedPrivateKeySeed()));return s.ethers.hexlify(e.publicKey.toBytes()).slice(2)};getNearIntentsKeyPairString=()=>{this.requireKeyMaterial();let e=c.Keypair.fromSeed(s.ethers.getBytes(this.getShieldedPrivateKeySeed()));return`ed25519:${l.default.encode(e.secretKey)}`};getSignerPrivateKeyFromNonce=e=>{this.requireKeyMaterial();let t=n.poseidonHash(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return s.ethers.keccak256(s.ethers.toUtf8Bytes(t))};getSignerSolanaPrivateKeyFromNonce=e=>{let t=this.getSignerPrivateKeyFromNonce(e),n=s.ethers.getBytes(t),r=c.Keypair.fromSeed(n);return l.default.encode(r.secretKey)};verifyMessage(e){return this.requireSignature(),s.ethers.verifyMessage(e,this.signature)}verifySolanaMessage(e,t){this.requireSignature();let n=new TextEncoder().encode(e),r=s.ethers.getBytes(this.signature),i=new c.PublicKey(t).toBytes();return d.default.sign.detached.verify(n,r,i)}static getRandomizedStealthPair=p.attach((e,t)=>{let n=r.babyJubInstance(),i=n.mulPointEscalar(n.Base8,e),a=n.mulPointEscalar(i,BigInt(t));return{H0:[BigInt(n.F.toString(i[0])),BigInt(n.F.toString(i[1]))],H1:[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]}});static getH1FromH0=(e,t)=>{let n=r.babyJubInstance(),i=[n.F.e(e[0]),n.F.e(e[1])],a=n.mulPointEscalar(i,BigInt(t));return[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]};static verifyStealthPair=(e,t,n,r=!0)=>{let i=this.getH1FromH0(e,n);return r?i[1]===t[1]:i===t};static getStealthAddress=(e,t,r)=>{if(r?.length!==2)throw Error(`Spending public key must be an array of 2 elements`);let i=this.getH1FromH0(e,t);return n.poseidonHash(2n*o.getCircomSign(e[0])+o.getCircomSign(i[0]),e[1],i[1],r[0],r[1],t)};static findCorrectRandomization(e,n){if(!n)throw Error(`No Private Shielded Key Provided`);let r=BigInt(n),i,a,o=0n;do i=e*10n**o%t.CIRCOM_P,a=i*r%t.CIRCOM_P,o+=1n;while(a>=2n**250n||i>=2n**250n);return i}static getH0FromRandomization=e=>{let t=r.babyJubInstance(),n=t.mulPointEscalar(t.Base8,e);return[BigInt(t.F.toString(n[0])),BigInt(t.F.toString(n[1]))]};static findH0(e,t){if(!t)return;let{H0:n}=this.getRandomizedStealthPair(e,t);return n}static getEncryptionKeyPair=e=>{let t=u.default.crypto_box_seed_keypair(s.ethers.getBytes(s.ethers.keccak256(e)));return{privateKey:s.ethers.hexlify(t.privateKey),publicKey:s.ethers.hexlify(t.publicKey)}};getAccessKey=()=>(this.requireKeyMaterial(),n.poseidonHash(this.getShieldedPrivateKey(),this.getShieldedPublicKey()));getBackendToken=()=>(this.requireKeyMaterial(),n.poseidonHash(this.getAccessKey(),this.getShieldedPublicKey()))};exports.UserKeys=m,exports.stealthPairCacheDevice=p;
|
|
@@ -15,6 +15,7 @@ export declare class UserKeys {
|
|
|
15
15
|
private readonly PREFIX_FOR_SPENDING_PAIR;
|
|
16
16
|
constructor(_signature?: string, _nullifyingKey?: string);
|
|
17
17
|
getSignature(): string;
|
|
18
|
+
hasSignature(): boolean;
|
|
18
19
|
setSignature(_signature: string): void;
|
|
19
20
|
private requireSignature;
|
|
20
21
|
private requireKeyMaterial;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/tokens.constants.cjs`);var r=class{static isBeefyStakeToken=e=>e.name.includes(`-Boost`)&&e.symbol.includes(`-Boost`);static isStakeToken=e=>this.isBeefyStakeToken(e);static isAaveToken=e=>e.aaveToken;static isKinzaToken=e=>e.name.startsWith(`Kinza`);static isPotentiallyVolatile=r=>r.erc20TokenAddress===t.zeroAddress||n.NON_STANDARD_STORAGE_TOKENS.has(r.erc20TokenAddress.toLowerCase())?!1:r.isVolatile||!e.isSolanaLike(r.chainId)&&!e.isTronLike(r.chainId)&&(r.balanceStorageOffset===void 0||r.allowanceStorageOffset===void 0);static isPotentiallySpamToken(e){let{name:t,symbol:n}=e,r=`${t} ${n}`,i=/(?:https?:\/\/|www\.)/i,a=/\.(?:com|io|app|org|net|co|xyz|link|site|top|in|ru|cn|me|biz|info|online|club|tech|to|cloud)(?=[^\w]|$)/i,o=/\b(?:t\.me|discord\.(?:gg|com)|twitter\.com|x\.com|telegram\.(?:me|org))\b/i,s=/@[^\s]+\.[^\s]+/i,c=/\p{Extended_Pictographic}/u,l=/[\u{1F1E6}-\u{1F1FF}]{2}/u,u=/[#*0-9]\uFE0F?\u20E3/u,d=i.test(r),f=a.test(r),p=o.test(r),m=s.test(r),h=c.test(r)||l.test(r)||u.test(r);return d||f||p||m||h}};exports.TokenChecker=r;
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/tokens.constants.cjs`);var r=class{static isBeefyStakeToken=e=>e.name.includes(`-Boost`)&&e.symbol.includes(`-Boost`);static isStakeToken=e=>this.isBeefyStakeToken(e);static isAaveToken=e=>e.aaveToken;static isKinzaToken=e=>e.name.startsWith(`Kinza`);static isToken2022=e=>!!e.is2022Program;static isPotentiallyVolatile=r=>r.erc20TokenAddress===t.zeroAddress||n.NON_STANDARD_STORAGE_TOKENS.has(r.erc20TokenAddress.toLowerCase())?!1:r.isVolatile||!e.isSolanaLike(r.chainId)&&!e.isTronLike(r.chainId)&&(r.balanceStorageOffset===void 0||r.allowanceStorageOffset===void 0);static isPotentiallySpamToken(e){let{name:t,symbol:n}=e,r=`${t} ${n}`,i=/(?:https?:\/\/|www\.)/i,a=/\.(?:com|io|app|org|net|co|xyz|link|site|top|in|ru|cn|me|biz|info|online|club|tech|to|cloud)(?=[^\w]|$)/i,o=/\b(?:t\.me|discord\.(?:gg|com)|twitter\.com|x\.com|telegram\.(?:me|org))\b/i,s=/@[^\s]+\.[^\s]+/i,c=/\p{Extended_Pictographic}/u,l=/[\u{1F1E6}-\u{1F1FF}]{2}/u,u=/[#*0-9]\uFE0F?\u20E3/u,d=i.test(r),f=a.test(r),p=o.test(r),m=s.test(r),h=c.test(r)||l.test(r)||u.test(r);return d||f||p||m||h}};exports.TokenChecker=r;
|
|
@@ -4,6 +4,7 @@ export declare class TokenChecker {
|
|
|
4
4
|
static isStakeToken: (token: ERC20Token) => boolean;
|
|
5
5
|
static isAaveToken: (token: ERC20Token) => boolean | undefined;
|
|
6
6
|
static isKinzaToken: (token: ERC20Token) => boolean;
|
|
7
|
+
static isToken2022: (token: ERC20Token) => boolean;
|
|
7
8
|
static isPotentiallyVolatile: (token: ERC20Token) => boolean;
|
|
8
9
|
static isPotentiallySpamToken(token: ERC20Token): boolean;
|
|
9
10
|
}
|
|
@@ -7,6 +7,7 @@ var i = class {
|
|
|
7
7
|
static isStakeToken = (e) => this.isBeefyStakeToken(e);
|
|
8
8
|
static isAaveToken = (e) => e.aaveToken;
|
|
9
9
|
static isKinzaToken = (e) => e.name.startsWith("Kinza");
|
|
10
|
+
static isToken2022 = (e) => !!e.is2022Program;
|
|
10
11
|
static isPotentiallyVolatile = (i) => i.erc20TokenAddress === n || r.has(i.erc20TokenAddress.toLowerCase()) ? !1 : i.isVolatile || !e(i.chainId) && !t(i.chainId) && (i.balanceStorageOffset === void 0 || i.allowanceStorageOffset === void 0);
|
|
11
12
|
static isPotentiallySpamToken(e) {
|
|
12
13
|
let { name: t, symbol: n } = e, r = `${t} ${n}`, i = /(?:https?:\/\/|www\.)/i, a = /\.(?:com|io|app|org|net|co|xyz|link|site|top|in|ru|cn|me|biz|info|online|club|tech|to|cloud)(?=[^\w]|$)/i, o = /\b(?:t\.me|discord\.(?:gg|com)|twitter\.com|x\.com|telegram\.(?:me|org))\b/i, s = /@[^\s]+\.[^\s]+/i, c = /\p{Extended_Pictographic}/u, l = /[\u{1F1E6}-\u{1F1FF}]{2}/u, u = /[#*0-9]\uFE0F?\u20E3/u, d = i.test(r), f = a.test(r), p = o.test(r), m = s.test(r), h = c.test(r) || l.test(r) || u.test(r);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../error-handling/logger.cjs`),t=require(`../../API/simulate-transaction.cjs`)
|
|
1
|
+
const e=require(`../../error-handling/logger.cjs`),t=require(`../../API/simulate-transaction.cjs`),n=require(`../../data-structures/token-price-fetcher/TokenChecker.cjs`);require(`../../error-handling/index.cjs`);var r=async(r,i,a,o)=>{try{let e=i.map((e,t)=>{let r=a[t];return e&&n.TokenChecker.isPotentiallyVolatile(e)?{tokenAddress:e.erc20TokenAddress,amount:r.toString(),...o===void 0?{}:{targetAddress:o},originalIndex:t}:null}).filter(e=>e!==null);if(e.length===0)return a;let s=await t.simulateVolatileTokenTransfer(r,e);return a.map((t,n)=>{let r=e.findIndex(e=>e.originalIndex===n);if(r!==-1&&s[r].success){let e=s[r].balanceDifference;return e?BigInt(e):t}return t})}catch(t){return e.Logger.error(`Volatile transfer simulation failed:`,t),a}};exports.modifyVolatileTokenAmountChanges=r;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logger as e } from "../../error-handling/logger.mjs";
|
|
2
2
|
import { simulateVolatileTokenTransfer as t } from "../../API/simulate-transaction.mjs";
|
|
3
|
-
import "../../error-handling/index.mjs";
|
|
4
3
|
import { TokenChecker as n } from "../../data-structures/token-price-fetcher/TokenChecker.mjs";
|
|
4
|
+
import "../../error-handling/index.mjs";
|
|
5
5
|
//#region libs/shared/common/src/functions/pre-transaction/getVolatileTransferAmount.ts
|
|
6
6
|
var r = async (r, i, a, o) => {
|
|
7
7
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../data-structures/crypto-keys/keys.cjs`),t=require(`./getRecipientInfoFromUserKeys.cjs`),n=require(`../../data-structures/Hinkal/hinkalSolanaSponsoredShield.cjs`);var r=(n,r)=>{if(`recipientInfo`in r)return{recipientInfo:r.recipientInfo};let i=n.userKeys.getClaimableSignatureFromNonce(r.claimableNonce),a=new e.UserKeys(i);return{recipientInfo:t.getRecipientInfoFromUserKeys(a),claimable:{signature:i,keys:a,ethAddress:r.recipientEthAddress}}},i=async(e,t,r,i,a)=>{let{txHash:
|
|
1
|
+
const e=require(`../../data-structures/crypto-keys/keys.cjs`),t=require(`./getRecipientInfoFromUserKeys.cjs`),n=require(`../../data-structures/Hinkal/hinkalSolanaSponsoredShield.cjs`);var r=(n,r)=>{if(`recipientInfo`in r)return{recipientInfo:r.recipientInfo};let i=n.userKeys.getClaimableSignatureFromNonce(r.claimableNonce),a=new e.UserKeys(i);return{recipientInfo:t.getRecipientInfoFromUserKeys(a),claimable:{signature:i,keys:a,ethAddress:r.recipientEthAddress}}},i=async(e,t,r,i,a,o)=>{let{txHash:s,shieldedAmount:c}=await n.hinkalSolanaSponsoredShield(e,t,r,i,a,void 0,o);return{destTxHash:s,shieldedAmount:c}};exports.hinkalSolanaShieldBridged=i,exports.resolveBridgeRecipient=r;
|
|
@@ -13,7 +13,7 @@ export interface BridgeResolvedRecipient {
|
|
|
13
13
|
claimable?: BridgeClaimableRecipient;
|
|
14
14
|
}
|
|
15
15
|
export declare const resolveBridgeRecipient: (hinkal: IHinkal, recipient: PrivateBridgeRecipient) => BridgeResolvedRecipient;
|
|
16
|
-
export declare const hinkalSolanaShieldBridged: (hinkal: IHinkal, token: ERC20Token, tempSubAccount: SubAccount, landedAmount: bigint, recipientInfo: string) => Promise<{
|
|
16
|
+
export declare const hinkalSolanaShieldBridged: (hinkal: IHinkal, token: ERC20Token, tempSubAccount: SubAccount, landedAmount: bigint, recipientInfo: string, variableRate?: bigint) => Promise<{
|
|
17
17
|
destTxHash: string;
|
|
18
18
|
shieldedAmount: bigint;
|
|
19
19
|
}>;
|
|
@@ -13,11 +13,11 @@ var r = (n, r) => {
|
|
|
13
13
|
ethAddress: r.recipientEthAddress
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
|
-
}, i = async (e, t, r, i, a) => {
|
|
17
|
-
let { txHash:
|
|
16
|
+
}, i = async (e, t, r, i, a, o) => {
|
|
17
|
+
let { txHash: s, shieldedAmount: c } = await n(e, t, r, i, a, void 0, o);
|
|
18
18
|
return {
|
|
19
|
-
destTxHash:
|
|
20
|
-
shieldedAmount:
|
|
19
|
+
destTxHash: s,
|
|
20
|
+
shieldedAmount: c
|
|
21
21
|
};
|
|
22
22
|
};
|
|
23
23
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/fees.constants.cjs`),r=require(`./caseInsensitive.utils.cjs`),i=require(`../web3/etherFunctions.cjs`),a=require(`../../error-handling/logger.cjs`),o=require(`../../API/getTokenPrice.cjs`),s=require(`./erc20tokenFunctions.cjs`);var c=async r=>{if(!r)return n.EXTENDED_NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS;let i=t.zeroAddress;e.isSolanaLike(r)&&(i=t.solanaNativeAddress),e.isTempo(r)&&(i=n.TEMPO_DEFAULT_GAS_TOKEN_ADDRESS);let a=(await s.getErc20TokenFromAPI(r,i))?.symbol;return e.isSolanaLike(r)&&a?[a]:a&&!n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r).includes(a)?[a,...n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)]:n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)},l=(e,t)=>{let r=e*t.variableRate/n.BPS_DENOMINATOR;return t.flatFee+r},u=async(e,t,c,u)=>{let d=await s.getErc20TokenFromAPI(e,u.feeToken),f;if(!d||r.caseInsensitiveEqual(u.feeToken,t.erc20TokenAddress)||u.variableRate===0n)f=l(c,u);else{let r=0n;try{let
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/fees.constants.cjs`),r=require(`./caseInsensitive.utils.cjs`),i=require(`../web3/etherFunctions.cjs`),a=require(`../../error-handling/logger.cjs`),o=require(`../../API/getTokenPrice.cjs`),s=require(`./erc20tokenFunctions.cjs`);var c=async r=>{if(!r)return n.EXTENDED_NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS;let i=t.zeroAddress;e.isSolanaLike(r)&&(i=t.solanaNativeAddress),e.isTempo(r)&&(i=n.TEMPO_DEFAULT_GAS_TOKEN_ADDRESS);let a=(await s.getErc20TokenFromAPI(r,i))?.symbol;return e.isSolanaLike(r)&&a?[a]:a&&!n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r).includes(a)?[a,...n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)]:n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)},l=(e,t)=>{let r=e*t.variableRate/n.BPS_DENOMINATOR;return t.flatFee+r},u=async(e,t,c,u)=>{let d=await s.getErc20TokenFromAPI(e,u.feeToken),f;if(!d||r.caseInsensitiveEqual(u.feeToken,t.erc20TokenAddress)||u.variableRate===0n)f=l(c,u);else{let r=0n;try{let[a,s]=t.chainId===e?(await o.getTokenPrices(e,[t.erc20TokenAddress,d.erc20TokenAddress])).prices:await Promise.all([(await o.getTokenPrices(t.chainId,[t.erc20TokenAddress])).prices[0],(await o.getTokenPrices(e,[d.erc20TokenAddress])).prices[0]]);if(!a||!s)throw Error(`failed to get token prices`);r=i.getAmountInWei(d,(Number(i.getAmountInToken(t,c))*a*Number(u.variableRate)/Number(n.BPS_DENOMINATOR)/s).toFixed(d.decimals))}catch(e){a.Logger.error(`error calculating modified fee structure`,e)}f=u.flatFee+r}return{feeToken:u.feeToken,flatFee:f,variableRate:0n}},d=async(e,t,n,r)=>{let i={...r,flatFee:0n},a=await Promise.all(t.map((t,r)=>u(e,t,n[r]??0n,i)));return{feeToken:r.feeToken,flatFee:a.reduce((e,{flatFee:t})=>e+t,r.flatFee),variableRate:0n}},f=(e,t)=>{let n=e/t;return e%t===0n?n:n+1n},p=(e,t)=>e<=0n||t<=0n?0n:f(e*t,n.BPS_DENOMINATOR);exports.calculateModifiedFeeStructure=u,exports.calculateModifiedFeeStructureForTokens=d,exports.calculateTotalFee=l,exports.calculateVariableFee=p,exports.getGasTokenSymbols=c;
|
|
@@ -22,11 +22,11 @@ var m = async (i) => {
|
|
|
22
22
|
else {
|
|
23
23
|
let s = 0n;
|
|
24
24
|
try {
|
|
25
|
-
let
|
|
26
|
-
if (!
|
|
27
|
-
s = u(a, (Number(l(t, n)) *
|
|
25
|
+
let [o, c] = t.chainId === e ? (await f(e, [t.erc20TokenAddress, a.erc20TokenAddress])).prices : await Promise.all([(await f(t.chainId, [t.erc20TokenAddress])).prices[0], (await f(e, [a.erc20TokenAddress])).prices[0]]);
|
|
26
|
+
if (!o || !c) throw Error("failed to get token prices");
|
|
27
|
+
s = u(a, (Number(l(t, n)) * o * Number(r.variableRate) / Number(i) / c).toFixed(a.decimals));
|
|
28
28
|
} catch (e) {
|
|
29
|
-
d.error("
|
|
29
|
+
d.error("error calculating modified fee structure", e);
|
|
30
30
|
}
|
|
31
31
|
o = r.flatFee + s;
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`./caseInsensitive.utils.cjs`),r=require(`./tron.utils.cjs`),i=require(`./addresses.cjs`),a=require(`../../types/external-action.types.cjs`);require(`./erc20tokenFunctions.cjs`);const o=require(`../pre-transaction/getFeeStructure.cjs`),s=require(`../../constants/bridging.constants.cjs`),c=require(`../../API/callNearIntentsAPI.cjs`);var l=(t,n)=>{if(!n||!e.isTronLike(t))return n;try{return r.addressToHexFormat(n)}catch{return n}},u=async(e,t)=>{let r=s.NEAR_INTENTS_BLOCKCHAIN_BY_CHAIN_ID[e];if(!r)throw Error(`NEAR Intents does not support chain ${e}`);let a=(await c.getNearIntentsTokens()).filter(e=>e.blockchain===r),o=i.isNativePlaceholderAddress(t)?a.find(e=>!e.contractAddress):a.find(r=>r.contractAddress&&n.caseInsensitiveEqual(l(e,r.contractAddress),t));if(!o)throw Error(`No NEAR Intents asset for token ${t} on chain ${e}`);return o.assetId},d=(e,n,r)=>o.getFeeStructure(e,n.erc20TokenAddress,[n.erc20TokenAddress],a.ExternalActionId.Transact,[],t.
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`./caseInsensitive.utils.cjs`),r=require(`./tron.utils.cjs`),i=require(`./addresses.cjs`),a=require(`../../types/external-action.types.cjs`);require(`./erc20tokenFunctions.cjs`);const o=require(`../pre-transaction/getFeeStructure.cjs`),s=require(`../../constants/bridging.constants.cjs`),c=require(`../../API/callNearIntentsAPI.cjs`);var l=(t,n)=>{if(!n||!e.isTronLike(t))return n;try{return r.addressToHexFormat(n)}catch{return n}},u=async(e,t)=>{let r=s.NEAR_INTENTS_BLOCKCHAIN_BY_CHAIN_ID[e];if(!r)throw Error(`NEAR Intents does not support chain ${e}`);let a=(await c.getNearIntentsTokens()).filter(e=>e.blockchain===r),o=i.isNativePlaceholderAddress(t)?a.find(e=>!e.contractAddress):a.find(r=>r.contractAddress&&n.caseInsensitiveEqual(l(e,r.contractAddress),t));if(!o)throw Error(`No NEAR Intents asset for token ${t} on chain ${e}`);return o.assetId},d=(e,n,r)=>o.getFeeStructure(e,n.erc20TokenAddress,[n.erc20TokenAddress],a.ExternalActionId.Transact,[],t.PAY_SEND_VARIABLE_RATE,{mintTo:n.erc20TokenAddress,recipient:r,nullifierCount:n.erc20TokenAddress===`11111111111111111111111111111111`?0:1});exports.buildNearBridgeFeeStructure=d,exports.resolveNearAssetId=u;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isTronLike as e } from "../../constants/chains.constants.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { PAY_SEND_VARIABLE_RATE as t } from "../../constants/protocol.constants.mjs";
|
|
3
3
|
import { caseInsensitiveEqual as n } from "./caseInsensitive.utils.mjs";
|
|
4
4
|
import { addressToHexFormat as r } from "./tron.utils.mjs";
|
|
5
5
|
import { isNativePlaceholderAddress as i } from "./addresses.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`);require(`../../data-structures/http/index.cjs`);const n=require(`./solanaMint.utils.cjs`),r=require(`../../error-handling/logger.cjs`),i=require(`./addresses.cjs`),a=require(`./erc20tokenFunctions.cjs`)
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`);require(`../../data-structures/http/index.cjs`);const n=require(`./solanaMint.utils.cjs`),r=require(`../../error-handling/logger.cjs`),i=require(`./addresses.cjs`),a=require(`./erc20tokenFunctions.cjs`);require(`../../data-structures/token-price-fetcher/TokenChecker.cjs`);const o=require(`./create-provider.cjs`);require(`../../externalABIs/index.cjs`);const s=require(`../../externalABIs/swapAbi.cjs`);require(`../../data-structures/IndexedDB/key-val-store.cjs`);let c=require(`ethers`),l=require(`@solana/web3.js`);var u=async(e,n,r)=>{try{let i=r.erc20TokenAddress,a,o=new c.ethers.Contract(r.erc20TokenAddress,s.ERC20ABI,e);a=i===t.zeroAddress?await e.getBalance(n):await o?.balanceOf(n);let l=a;return l<=0n?null:{token:r,balance:l}}catch{return null}},d=async(e,t,r)=>{if(r.erc20TokenAddress===`11111111111111111111111111111111`)return BigInt(await e.getBalance(t));let i=await n.getSolanaAtaAddress(r,t);if(!await e.getAccountInfo(i))return 0n;let a=await e.getTokenAccountBalance(i);return BigInt(a.value.amount)},f=async(n,u,f)=>{try{if(e.isSolanaLike(n)){if(!i.isValidSolanaPublicKey(u))return null;let{rpcUrl:t}=e.networkRegistry[n],r=o.createCustomSolanaConnection(t),s=new l.PublicKey(u);if(f===`11111111111111111111111111111111`)return BigInt(await r.getBalance(s));let c=await a.getErc20TokenFromAPI(n,f);return c?d(r,s,c):null}let r=o.createJsonRpcProvider(n),p=new c.ethers.Contract(f,s.ERC20ABI,r),m;return m=f===t.zeroAddress?await r.getBalance(u):await p?.balanceOf(u),m}catch{return r.Logger.error(`Failed to fetch public balance for address ${u}`),null}};exports.getPublicBalance=u,exports.getPublicBalanceByTokenAddress=f;
|
|
@@ -5,6 +5,7 @@ import { getSolanaAtaAddress as r } from "./solanaMint.utils.mjs";
|
|
|
5
5
|
import { Logger as i } from "../../error-handling/logger.mjs";
|
|
6
6
|
import { isValidSolanaPublicKey as a } from "./addresses.mjs";
|
|
7
7
|
import { getErc20TokenFromAPI as o } from "./erc20tokenFunctions.mjs";
|
|
8
|
+
import "../../data-structures/token-price-fetcher/TokenChecker.mjs";
|
|
8
9
|
import { createCustomSolanaConnection as s, createJsonRpcProvider as c } from "./create-provider.mjs";
|
|
9
10
|
import "../../externalABIs/index.mjs";
|
|
10
11
|
import { ERC20ABI as l } from "../../externalABIs/swapAbi.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants/vite.constants.cjs`),t=require(`../../../constants/chains.constants.cjs`),n=require(`../../utils/caseInsensitive.utils.cjs`),r=require(`../../../error-handling/error-codes.constants.cjs`),i=require(`../etherFunctions.cjs`),a=require(`../../../data-structures/utxo/Utxo.cjs`),o=require(`../../../error-handling/customErrors/ErrorWithAmount.cjs`);require(`../../../error-handling/customErrors/index.cjs`);const s=require(`../../utils/encodeTokenWithId.cjs`),c=require(`../../utils/solanaMint.utils.cjs`),l=require(`../../../error-handling/logger.cjs`),u=require(`./getInputUtxosEnclave.cjs`),d=require(`../../utils/addresses.cjs`),f=require(`./getInputUtxoAndBalance.cjs`),p=require(`../../../data-structures/TokenDBs/PrivateTokensDB.cjs`),m=require(`../../utils/map.utils.cjs`),h=require(`../../utils/mutexes.utils.cjs`),g=require(`../../utils/erc20tokenFunctions.cjs`);let
|
|
1
|
+
require(`../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants/vite.constants.cjs`),t=require(`../../../constants/chains.constants.cjs`),n=require(`../../utils/caseInsensitive.utils.cjs`),r=require(`../../../error-handling/error-codes.constants.cjs`),i=require(`../etherFunctions.cjs`),a=require(`../../../data-structures/utxo/Utxo.cjs`),o=require(`../../../error-handling/customErrors/ErrorWithAmount.cjs`);require(`../../../error-handling/customErrors/index.cjs`);const s=require(`../../utils/encodeTokenWithId.cjs`),c=require(`../../utils/solanaMint.utils.cjs`),l=require(`../../../error-handling/logger.cjs`),u=require(`./getInputUtxosEnclave.cjs`),d=require(`../../utils/addresses.cjs`),f=require(`./getInputUtxoAndBalance.cjs`),p=require(`../../../data-structures/TokenDBs/PrivateTokensDB.cjs`),m=require(`../../utils/map.utils.cjs`),h=require(`../../utils/mutexes.utils.cjs`),g=require(`../../utils/erc20tokenFunctions.cjs`),_=require(`../../../data-structures/token-price-fetcher/TokenChecker.cjs`);let v=require(`async-mutex`);var y=(e,t,n)=>m.getOrCreateMapValue(e.balanceFetchingMutexByChain,t,()=>new v.Mutex).runExclusive(()=>h.getChainBalanceFetchingMutex(t).runShared(n)),b=async(t,n,r,i,a)=>(r&&e.isExtension&&await p.privateTokensDB.fetchAndUpdatePrivateTokens(i,t,n),(e.isExtension?await p.privateTokensDB.getPrivateTokens(t,n):await g.getErc20TokensForChainAPI(t)).filter(e=>!_.TokenChecker.isToken2022(e)).map(e=>({token:e,nfts:[],...a(e)}))),x=async(e,t,n,r,i)=>{let a=new Map;t.forEach((e,t)=>{m.getOrCreateMapValue(a,i?d.hashOwnerAddressForChain(t,e):``,()=>[]).push(t)});let o=new Map;await Promise.all([...a].map(async([t,r])=>{try{(await u.getRemoteManagedTokenBalances(e,r,n,i,t||void 0)).forEach((e,t)=>o.set(t,e))}catch(e){l.Logger.error(`Error fetching remote shielded balances for chainIds ${r.join(`, `)}:`,e)}}));let c=new Map;return await Promise.all([...o].map(async([n,i])=>{try{await y(e,n,async()=>{let e=await b(n,t.get(n),r,[...i.keys()],e=>({balance:i.get(s.normalizeTokenAddress(n,e.erc20TokenAddress))??0n}));c.set(n,e)})}catch(e){l.Logger.error(`Error fetching shielded balance for chainId ${n}:`,e)}})),c},S=async(e,t,r,i,a,o,s,c)=>{let{inputUtxos:l}=c?await f.getInputUtxoAndBalanceOfStuckUtxos({hinkal:e,chainId:t,ethAddress:a,passedShieldedPrivateKey:r,resetCacheBefore:o}):await f.getInputUtxoAndBalance({hinkal:e,sliceIfMore6:!1,chainId:t,passedShieldedPrivateKey:r,passedShieldedPublicKey:i,ethAddress:a,resetCacheBefore:o});return b(t,a,s,l.map(e=>e.getTokenAddress(t)).filter(e=>e!==void 0),e=>{let r=l.filter(r=>n.caseInsensitiveEqual(r.getTokenAddress(t),e.erc20TokenAddress));return{balance:r.reduce((e,t)=>e+t.amount,0n),timestamp:r[0]?.timeStamp}})},C=async(e,t,n,r,i=!1,a=!1,o=!1)=>{if(e.generateProofRemotely)return x(e,t,n,a,o);let s=new Map;return await Promise.all([...t].map(async([t,c])=>{try{let l=await y(e,t,()=>S(e,t,n,r,c,i,a,o));s.set(t,l)}catch(e){l.Logger.error(`Error fetching shielded balance for chainId ${t}:`,e)}})),s},w=(e,n,r,i,o)=>{let s=t.isSolanaLike(r),l=s?i:void 0,u=s?c.formatMintAddress(i).compressedAddress:i;return Array.from({length:o},()=>new a.Utxo({amount:0n,erc20TokenAddress:u,mintAddress:l,nullifyingKey:e.getShieldedPrivateKey(),spendingPublicKey:n}))},T=async(e,t,n,a,c=6,l=!1,u=!1,d)=>{let{userKeys:p}=e,m=p.getSpendingKeyPair().pubSpendingBJJPoint,h=[],_=[];if(n.length===0)return[];if(l){for(let e=0;e<n.length;e+=1)h.push(w(p,m,t,n[e],c));return h}let v=await f.getInputUtxoAndBalancePerToken({hinkal:e,sliceIfMore6:!1,ensuredTokensWithId:n,useBlockedUtxos:u,chainId:t}),y=0;for(let e=0;e<n.length;e+=1){let r=v.get(s.normalizeTokenAddress(t,n[e]))??[];if(!r)throw Error(`Missing utxos for token`);let i=d?.[e]?w(p,m,t,n[e],2):r;y=Math.max(i.length,y),_.push(i)}if(y===2)return _;for(let[e,s]of _.entries())if(s.length>c){let l=s.slice(0,c),u=l.reduce((e,t)=>e+t.amount,0n);if(a[e]<0n&&u<-a[e]){let a=await g.getErc20TokenFromAPI(t,n[e]);if(!a)throw Error(`Token not found`);let s=a.decimals===18?6:2,c=Number(i.getAmountWithPrecision(u,a,s));throw new o.ErrorWithAmount(c,`${r.DIRECTLY_SHOW_MESSAGE_ERROR_CODES.UTXO_LIMITATIONS}. Please try again with ${c} ${a.symbol}, including gas fees.`)}h.push(l)}else if(s.length<=c){let r=c-s.length;h.push([...s,...w(p,m,t,n[e],r)])}return h};exports.addPaddingToUtxos=T,exports.getShieldedBalances=C;
|
|
@@ -16,13 +16,14 @@ import { privateTokensDB as h } from "../../../data-structures/TokenDBs/PrivateT
|
|
|
16
16
|
import { getOrCreateMapValue as g } from "../../utils/map.utils.mjs";
|
|
17
17
|
import { getChainBalanceFetchingMutex as _ } from "../../utils/mutexes.utils.mjs";
|
|
18
18
|
import { getErc20TokenFromAPI as v, getErc20TokensForChainAPI as y } from "../../utils/erc20tokenFunctions.mjs";
|
|
19
|
-
import {
|
|
19
|
+
import { TokenChecker as b } from "../../../data-structures/token-price-fetcher/TokenChecker.mjs";
|
|
20
|
+
import { Mutex as x } from "async-mutex";
|
|
20
21
|
//#region libs/shared/common/src/functions/web3/events/getShieldedBalance.ts
|
|
21
|
-
var
|
|
22
|
+
var S = (e, t, n) => g(e.balanceFetchingMutexByChain, t, () => new x()).runExclusive(() => _(t).runShared(n)), C = async (t, n, r, i, a) => (r && e && await h.fetchAndUpdatePrivateTokens(i, t, n), (e ? await h.getPrivateTokens(t, n) : await y(t)).filter((e) => !b.isToken2022(e)).map((e) => ({
|
|
22
23
|
token: e,
|
|
23
24
|
nfts: [],
|
|
24
25
|
...a(e)
|
|
25
|
-
}))),
|
|
26
|
+
}))), w = async (e, t, n, r, i) => {
|
|
26
27
|
let a = /* @__PURE__ */ new Map();
|
|
27
28
|
t.forEach((e, t) => {
|
|
28
29
|
g(a, i ? d(t, e) : "", () => []).push(t);
|
|
@@ -38,15 +39,15 @@ var x = (e, t, n) => g(e.balanceFetchingMutexByChain, t, () => new b()).runExclu
|
|
|
38
39
|
let c = /* @__PURE__ */ new Map();
|
|
39
40
|
return await Promise.all([...o].map(async ([n, i]) => {
|
|
40
41
|
try {
|
|
41
|
-
await
|
|
42
|
-
let e = await
|
|
42
|
+
await S(e, n, async () => {
|
|
43
|
+
let e = await C(n, t.get(n), r, [...i.keys()], (e) => ({ balance: i.get(s(n, e.erc20TokenAddress)) ?? 0n }));
|
|
43
44
|
c.set(n, e);
|
|
44
45
|
});
|
|
45
46
|
} catch (e) {
|
|
46
47
|
l.error(`Error fetching shielded balance for chainId ${n}:`, e);
|
|
47
48
|
}
|
|
48
49
|
})), c;
|
|
49
|
-
},
|
|
50
|
+
}, T = async (e, t, r, i, a, o, s, c) => {
|
|
50
51
|
let { inputUtxos: l } = c ? await p({
|
|
51
52
|
hinkal: e,
|
|
52
53
|
chainId: t,
|
|
@@ -62,25 +63,25 @@ var x = (e, t, n) => g(e.balanceFetchingMutexByChain, t, () => new b()).runExclu
|
|
|
62
63
|
ethAddress: a,
|
|
63
64
|
resetCacheBefore: o
|
|
64
65
|
});
|
|
65
|
-
return
|
|
66
|
+
return C(t, a, s, l.map((e) => e.getTokenAddress(t)).filter((e) => e !== void 0), (e) => {
|
|
66
67
|
let r = l.filter((r) => n(r.getTokenAddress(t), e.erc20TokenAddress));
|
|
67
68
|
return {
|
|
68
69
|
balance: r.reduce((e, t) => e + t.amount, 0n),
|
|
69
70
|
timestamp: r[0]?.timeStamp
|
|
70
71
|
};
|
|
71
72
|
});
|
|
72
|
-
},
|
|
73
|
-
if (e.generateProofRemotely) return
|
|
73
|
+
}, E = async (e, t, n, r, i = !1, a = !1, o = !1) => {
|
|
74
|
+
if (e.generateProofRemotely) return w(e, t, n, a, o);
|
|
74
75
|
let s = /* @__PURE__ */ new Map();
|
|
75
76
|
return await Promise.all([...t].map(async ([t, c]) => {
|
|
76
77
|
try {
|
|
77
|
-
let l = await
|
|
78
|
+
let l = await S(e, t, () => T(e, t, n, r, c, i, a, o));
|
|
78
79
|
s.set(t, l);
|
|
79
80
|
} catch (e) {
|
|
80
81
|
l.error(`Error fetching shielded balance for chainId ${t}:`, e);
|
|
81
82
|
}
|
|
82
83
|
})), s;
|
|
83
|
-
},
|
|
84
|
+
}, D = (e, n, r, i, o) => {
|
|
84
85
|
let s = t(r), l = s ? i : void 0, u = s ? c(i).compressedAddress : i;
|
|
85
86
|
return Array.from({ length: o }, () => new a({
|
|
86
87
|
amount: 0n,
|
|
@@ -89,11 +90,11 @@ var x = (e, t, n) => g(e.balanceFetchingMutexByChain, t, () => new b()).runExclu
|
|
|
89
90
|
nullifyingKey: e.getShieldedPrivateKey(),
|
|
90
91
|
spendingPublicKey: n
|
|
91
92
|
}));
|
|
92
|
-
},
|
|
93
|
+
}, O = async (e, t, n, a, c = 6, l = !1, u = !1, d) => {
|
|
93
94
|
let { userKeys: f } = e, p = f.getSpendingKeyPair().pubSpendingBJJPoint, h = [], g = [];
|
|
94
95
|
if (n.length === 0) return [];
|
|
95
96
|
if (l) {
|
|
96
|
-
for (let e = 0; e < n.length; e += 1) h.push(
|
|
97
|
+
for (let e = 0; e < n.length; e += 1) h.push(D(f, p, t, n[e], c));
|
|
97
98
|
return h;
|
|
98
99
|
}
|
|
99
100
|
let _ = await m({
|
|
@@ -106,7 +107,7 @@ var x = (e, t, n) => g(e.balanceFetchingMutexByChain, t, () => new b()).runExclu
|
|
|
106
107
|
for (let e = 0; e < n.length; e += 1) {
|
|
107
108
|
let r = _.get(s(t, n[e])) ?? [];
|
|
108
109
|
if (!r) throw Error("Missing utxos for token");
|
|
109
|
-
let i = d?.[e] ?
|
|
110
|
+
let i = d?.[e] ? D(f, p, t, n[e], 2) : r;
|
|
110
111
|
y = Math.max(i.length, y), g.push(i);
|
|
111
112
|
}
|
|
112
113
|
if (y === 2) return g;
|
|
@@ -121,9 +122,9 @@ var x = (e, t, n) => g(e.balanceFetchingMutexByChain, t, () => new b()).runExclu
|
|
|
121
122
|
h.push(l);
|
|
122
123
|
} else if (s.length <= c) {
|
|
123
124
|
let r = c - s.length;
|
|
124
|
-
h.push([...s, ...
|
|
125
|
+
h.push([...s, ...D(f, p, t, n[e], r)]);
|
|
125
126
|
}
|
|
126
127
|
return h;
|
|
127
128
|
};
|
|
128
129
|
//#endregion
|
|
129
|
-
export {
|
|
130
|
+
export { O as addPaddingToUtxos, E as getShieldedBalances };
|