@gurge/sdk 0.3.23 → 0.3.25

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 (37) hide show
  1. package/common/src/data-structures/Hinkal/hinkalWithdraw.cjs +1 -1
  2. package/common/src/data-structures/Hinkal/hinkalWithdraw.d.ts +1 -3
  3. package/common/src/data-structures/Hinkal/hinkalWithdraw.mjs +22 -30
  4. package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs +1 -1
  5. package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.mjs +42 -26
  6. package/common/src/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
  7. package/common/src/functions/pre-transaction/buildCommitmentValidationData.mjs +49 -38
  8. package/common/src/functions/pre-transaction/outputUtxoProcessing.cjs +1 -1
  9. package/common/src/functions/pre-transaction/outputUtxoProcessing.mjs +25 -20
  10. package/common/src/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
  11. package/common/src/functions/snarkjs/constructGeneralZkProof.mjs +65 -70
  12. package/common/src/functions/snarkjs/generateMainAndCommitmentZkProof.cjs +1 -1
  13. package/common/src/functions/snarkjs/generateMainAndCommitmentZkProof.mjs +10 -21
  14. package/common/src/functions/snarkjs/generateZkProof.cjs +1 -1
  15. package/common/src/functions/snarkjs/generateZkProof.mjs +12 -23
  16. package/common/src/functions/snarkjs/generateZkProofEnclave.cjs +1 -1
  17. package/common/src/functions/snarkjs/generateZkProofEnclave.mjs +11 -14
  18. package/common/src/functions/snarkjs/generateZkProofSelf.cjs +1 -1
  19. package/common/src/functions/snarkjs/generateZkProofSelf.mjs +14 -20
  20. package/common/src/functions/utils/hinkalTiming.utils.cjs +1 -1
  21. package/common/src/functions/utils/hinkalTiming.utils.d.ts +4 -2
  22. package/common/src/functions/utils/hinkalTiming.utils.mjs +13 -10
  23. package/common/src/functions/web3/events/getInputUtxoAndBalance.cjs +1 -1
  24. package/common/src/functions/web3/events/getInputUtxoAndBalance.mjs +82 -35
  25. package/common/src/webworker/package.json +1 -1
  26. package/common/src/webworker/performTaskWithWorker.cjs +1 -1
  27. package/common/src/webworker/performTaskWithWorker.mjs +14 -14
  28. package/common/src/webworker/viteWorkerURL.constant.cjs +3 -3
  29. package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
  30. package/package.json +1 -1
  31. package/react-native/HinkalWebViewWorker.cjs +16 -4
  32. package/react-native/HinkalWebViewWorker.mjs +69 -49
  33. package/react-native/bridge/HinkalRNWorker.cjs +1 -1
  34. package/react-native/bridge/HinkalRNWorker.d.ts +1 -0
  35. package/react-native/bridge/HinkalRNWorker.mjs +16 -11
  36. package/sdk/package.json.cjs +1 -1
  37. package/sdk/package.json.mjs +1 -1
@@ -1 +1 @@
1
- const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/hinkal.types.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/utils/time.utils.cjs`),a=require(`../../types/external-action.types.cjs`),o=require(`../../functions/utils/tron.utils.cjs`),s=require(`../../functions/utils/token-check.utils.cjs`),c=require(`../../functions/web3/events/getShieldedBalance.cjs`),l=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),u=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`),p=require(`../../functions/utils/hinkalTiming.utils.cjs`);require(`../../functions/pre-transaction/index.cjs`);const m=require(`../../functions/utils/fees.utils.cjs`),h=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),g=require(`../../functions/web3/functionCalls/transactCallDirect.cjs`),_=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),v=require(`../../functions/web3/functionCalls/transactCallDirectTron.cjs`),y=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);var b=async(e,t,n,r)=>{let a=[...await c.addPaddingToUtxos(e,t,n,r)],o=[],s=i.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=l.outputUtxoProcessing(e.userKeys,a[t],r[t],s);o.push(n)}return{inputUtxosArray:a,outputUtxosArray:o}},x=async(i,c,l,x,S,C,w,T)=>{let E=p.createHinkalTiming(`withdraw`),D=s.validateAndGetChainId(c),O=e.isTronLike(D);E.log(`start`,{chainId:D,isRelayerOff:S,tokenCount:c.length});let k=o.addressToHexFormat(await i.getEthereumAddressByChain(D));E.log(`getEthereumAddress`);let A=c.map(e=>e.erc20TokenAddress),j=await u.modifyVolatileTokenAmountChanges(D,c,l);E.log(`modifyVolatileTokenAmountChanges`);let M=c[0];if(!M)throw Error(`Deposit Action: No Token Found`);let N;if(!S){let e=w??await f.getFeeStructure(D,C,A,a.ExternalActionId.Transact);N=await m.calculateModifiedFeeStructure(D,M,-j[0],e),await y.mergeWithFeeStructure(D,A,j,N),E.log(`feeStructure`,{feeToken:C})}let P={externalActionId:0n,externalAddress:o.addressToHexFormat(x),externalActionMetadata:`0x00`},[F,{inputUtxosArray:I,outputUtxosArray:L}]=await Promise.all([i.getRandomRelay(D,!0),b(i,D,A,j)]);if(E.log(`relay+utxos`,{hasRelay:!!F}),!S&&!F)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let{zkCallData:R,circomData:z,dimData:B,commitmentValidationData:V}=await h.constructZkProof(i.merkleTreeHinkalByChain[D],I,L,i.userKeys,P.externalActionId,P.externalAddress,P.externalActionMetadata,i.generateProofRemotely,N??n.zeroFeeStructure,S?t.zeroAddress:F,D,void 0,void 0,S?k:void 0);E.log(`constructZkProof`,{generateProofRemotely:i.generateProofRemotely});let H=O&&S?void 0:await o.reorderZkCallData(O,R,B,z);if(E.log(`reorderZkCallData`),S){if(!M)throw Error(`Withdraw Action: No Token Found`);if(O){let e=await v.transactCallDirectTron(i,D,j[0],M,R,z,B);return E.log(`transactCallDirectTron`,{txid:e}),E.log(`done`),e}let e=await g.transactCallDirect(i,D,j[0],M,R,z,B);return E.log(`transactCallDirect`,{txHash:e.hash}),E.log(`done`),e}let U=await _.transactCallRelayer(D,R,B,z,V,void 0,void 0,d.constructAdminData(T,D,A,j,k),H);return E.log(`transactCallRelayer`,{txHash:U}),E.log(`done`),U};exports.hinkalWithdraw=x;
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/hinkal.types.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/utils/time.utils.cjs`),a=require(`../../types/external-action.types.cjs`),o=require(`../../functions/utils/tron.utils.cjs`),s=require(`../../functions/utils/hinkalTiming.utils.cjs`),c=require(`../../functions/utils/token-check.utils.cjs`),l=require(`../../functions/web3/events/getShieldedBalance.cjs`),u=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),d=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),f=require(`../../functions/pre-transaction/constructAdminData.cjs`),p=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const m=require(`../../functions/utils/fees.utils.cjs`),h=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),g=require(`../../functions/web3/functionCalls/transactCallDirect.cjs`),_=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),v=require(`../../functions/web3/functionCalls/transactCallDirectTron.cjs`),y=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);var b=async(e,t,n,r)=>{let a=[...await l.addPaddingToUtxos(e,t,n,r)],o=[],s=i.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=u.outputUtxoProcessing(e.userKeys,a[t],r[t],s);o.push(n)}return{inputUtxosArray:a,outputUtxosArray:o}},x=async(i,l,u,x,S,C,w,T)=>{let E=s.createRnDeltaTiming(`withdraw`),D=c.validateAndGetChainId(l),O=e.isTronLike(D),k=o.addressToHexFormat(await i.getEthereumAddressByChain(D));E.log(`wallet.getEthereumAddressByChain`);let A=l.map(e=>e.erc20TokenAddress),j=await d.modifyVolatileTokenAmountChanges(D,l,u),M=l[0];if(!M)throw Error(`Deposit Action: No Token Found`);let N;if(!S){let e=w??await p.getFeeStructure(D,C,A,a.ExternalActionId.Transact);N=await m.calculateModifiedFeeStructure(D,M,-j[0],e),await y.mergeWithFeeStructure(D,A,j,N)}let P={externalActionId:0n,externalAddress:o.addressToHexFormat(x),externalActionMetadata:`0x00`},[F,{inputUtxosArray:I,outputUtxosArray:L}]=await Promise.all([i.getRandomRelay(D,!0),b(i,D,A,j)]);if(E.log(`utxoPrep+relay`,{hasRelay:!!F}),!S&&!F)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let{zkCallData:R,circomData:z,dimData:B,commitmentValidationData:V}=await h.constructZkProof(i.merkleTreeHinkalByChain[D],I,L,i.userKeys,P.externalActionId,P.externalAddress,P.externalActionMetadata,i.generateProofRemotely,N??n.zeroFeeStructure,S?t.zeroAddress:F,D,void 0,void 0,S?k:void 0);E.log(`constructZkProof`);let H=O&&S?void 0:await o.reorderZkCallData(O,R,B,z);if(S){if(!M)throw Error(`Withdraw Action: No Token Found`);if(O){let e=await v.transactCallDirectTron(i,D,j[0],M,R,z,B);return E.log(`done`,{txid:e}),e}let e=await g.transactCallDirect(i,D,j[0],M,R,z,B);return E.log(`done`,{txHash:e.hash}),e}let U=await _.transactCallRelayer(D,R,B,z,V,void 0,void 0,f.constructAdminData(T,D,A,j,k),H);return E.log(`done`,{txHash:U}),U};exports.hinkalWithdraw=x;
@@ -2,6 +2,4 @@ import { IHinkal } from './IHinkal';
2
2
  import { FeeStructure } from '../../types/hinkal.types';
3
3
  import { AdminTransactionType, ERC20Token } from '../../types';
4
4
  import { ethers } from 'ethers';
5
- export declare const hinkalWithdraw: (hinkal: IHinkal, erc20Tokens: ERC20Token[], deltaAmountsBase: bigint[], // should differentiate now: amountChanges is about off-chain utxos
6
- recipientAddress: string, // for Tron this address may be passed as base58
7
- isRelayerOff: boolean, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType) => Promise<ethers.TransactionResponse | string>;
5
+ export declare const hinkalWithdraw: (hinkal: IHinkal, erc20Tokens: ERC20Token[], deltaAmountsBase: bigint[], recipientAddress: string, isRelayerOff: boolean, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType) => Promise<ethers.TransactionResponse | string>;
@@ -5,13 +5,13 @@ import { transactionErrorCodes as r } from "../../error-handling/error-codes.con
5
5
  import { getCurrentTimeInSeconds as i } from "../../functions/utils/time.utils.mjs";
6
6
  import { ExternalActionId as a } from "../../types/external-action.types.mjs";
7
7
  import { addressToHexFormat as o, reorderZkCallData as s } from "../../functions/utils/tron.utils.mjs";
8
- import { validateAndGetChainId as c } from "../../functions/utils/token-check.utils.mjs";
9
- import { addPaddingToUtxos as l } from "../../functions/web3/events/getShieldedBalance.mjs";
10
- import { outputUtxoProcessing as u } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
11
- import { modifyVolatileTokenAmountChanges as d } from "../../functions/pre-transaction/getVolatileTransferAmount.mjs";
12
- import { constructAdminData as f } from "../../functions/pre-transaction/constructAdminData.mjs";
13
- import { getFeeStructure as p } from "../../functions/pre-transaction/getFeeStructure.mjs";
14
- import { createHinkalTiming as m } from "../../functions/utils/hinkalTiming.utils.mjs";
8
+ import { createRnDeltaTiming as c } from "../../functions/utils/hinkalTiming.utils.mjs";
9
+ import { validateAndGetChainId as l } from "../../functions/utils/token-check.utils.mjs";
10
+ import { addPaddingToUtxos as u } from "../../functions/web3/events/getShieldedBalance.mjs";
11
+ import { outputUtxoProcessing as d } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
12
+ import { modifyVolatileTokenAmountChanges as f } from "../../functions/pre-transaction/getVolatileTransferAmount.mjs";
13
+ import { constructAdminData as p } from "../../functions/pre-transaction/constructAdminData.mjs";
14
+ import { getFeeStructure as m } from "../../functions/pre-transaction/getFeeStructure.mjs";
15
15
  import "../../functions/pre-transaction/index.mjs";
16
16
  import { calculateModifiedFeeStructure as h } from "../../functions/utils/fees.utils.mjs";
17
17
  import { constructZkProof as g } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
@@ -21,53 +21,45 @@ import { transactCallDirectTron as y } from "../../functions/web3/functionCalls/
21
21
  import { mergeWithFeeStructure as b } from "../../functions/pre-transaction/merge-with-fee-structure.mjs";
22
22
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalWithdraw.ts
23
23
  var x = async (e, t, n, r) => {
24
- let a = [...await l(e, t, n, r)], o = [], s = i().toString();
24
+ let a = [...await u(e, t, n, r)], o = [], s = i().toString();
25
25
  for (let t = 0; t < n.length; t += 1) {
26
- let { outputUtxos: n } = u(e.userKeys, a[t], r[t], s);
26
+ let { outputUtxos: n } = d(e.userKeys, a[t], r[t], s);
27
27
  o.push(n);
28
28
  }
29
29
  return {
30
30
  inputUtxosArray: a,
31
31
  outputUtxosArray: o
32
32
  };
33
- }, S = async (i, l, u, S, C, w, T, E) => {
34
- let D = m("withdraw"), O = c(l), k = e(O);
35
- D.log("start", {
36
- chainId: O,
37
- isRelayerOff: C,
38
- tokenCount: l.length
39
- });
40
- let A = o(await i.getEthereumAddressByChain(O));
41
- D.log("getEthereumAddress");
42
- let j = l.map((e) => e.erc20TokenAddress), M = await d(O, l, u);
43
- D.log("modifyVolatileTokenAmountChanges");
44
- let N = l[0];
33
+ }, S = async (i, u, d, S, C, w, T, E) => {
34
+ let D = c("withdraw"), O = l(u), k = e(O), A = o(await i.getEthereumAddressByChain(O));
35
+ D.log("wallet.getEthereumAddressByChain");
36
+ let j = u.map((e) => e.erc20TokenAddress), M = await f(O, u, d), N = u[0];
45
37
  if (!N) throw Error("Deposit Action: No Token Found");
46
38
  let P;
47
39
  if (!C) {
48
- let e = T ?? await p(O, w, j, a.Transact);
49
- P = await h(O, N, -M[0], e), await b(O, j, M, P), D.log("feeStructure", { feeToken: w });
40
+ let e = T ?? await m(O, w, j, a.Transact);
41
+ P = await h(O, N, -M[0], e), await b(O, j, M, P);
50
42
  }
51
43
  let F = {
52
44
  externalActionId: 0n,
53
45
  externalAddress: o(S),
54
46
  externalActionMetadata: "0x00"
55
47
  }, [I, { inputUtxosArray: L, outputUtxosArray: R }] = await Promise.all([i.getRandomRelay(O, !0), x(i, O, j, M)]);
56
- if (D.log("relay+utxos", { hasRelay: !!I }), !C && !I) throw Error(r.RELAYER_NOT_AVAILABLE);
48
+ if (D.log("utxoPrep+relay", { hasRelay: !!I }), !C && !I) throw Error(r.RELAYER_NOT_AVAILABLE);
57
49
  let { zkCallData: z, circomData: B, dimData: V, commitmentValidationData: H } = await g(i.merkleTreeHinkalByChain[O], L, R, i.userKeys, F.externalActionId, F.externalAddress, F.externalActionMetadata, i.generateProofRemotely, P ?? n, C ? t : I, O, void 0, void 0, C ? A : void 0);
58
- D.log("constructZkProof", { generateProofRemotely: i.generateProofRemotely });
50
+ D.log("constructZkProof");
59
51
  let U = k && C ? void 0 : await s(k, z, V, B);
60
- if (D.log("reorderZkCallData"), C) {
52
+ if (C) {
61
53
  if (!N) throw Error("Withdraw Action: No Token Found");
62
54
  if (k) {
63
55
  let e = await y(i, O, M[0], N, z, B, V);
64
- return D.log("transactCallDirectTron", { txid: e }), D.log("done"), e;
56
+ return D.log("done", { txid: e }), e;
65
57
  }
66
58
  let e = await _(i, O, M[0], N, z, B, V);
67
- return D.log("transactCallDirect", { txHash: e.hash }), D.log("done"), e;
59
+ return D.log("done", { txHash: e.hash }), e;
68
60
  }
69
- let W = await v(O, z, V, B, H, void 0, void 0, f(E, O, j, M, A), U);
70
- return D.log("transactCallRelayer", { txHash: W }), D.log("done"), W;
61
+ let W = await v(O, z, V, B, H, void 0, void 0, p(E, O, j, M, A), U);
62
+ return D.log("done", { txHash: W }), W;
71
63
  };
72
64
  //#endregion
73
65
  export { S as hinkalWithdraw };
@@ -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),t.stealthAddressCacheDevice.mergeWithSerialized(e.stealthAddressCache)}),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:{signature:t.getSignature(),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=n.getSignature(),s=i.map(e=>{let n={type:a.UtxoWorkerActionType.DECIPHER_OUTPUTS,data:{encryptedOutputs:e,lastOutput:t,signature: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;
1
+ const e=require(`../../constants/vite.constants.cjs`),t=require(`../crypto-keys/keys.cjs`),n=require(`../utxo/Utxo.cjs`),r=require(`../../functions/utils/hinkalTiming.utils.cjs`),i=require(`../../webworker/worker.registry.cjs`),a=require(`../../webworker/performTaskWithWorker.cjs`),o=require(`../../webworker/utxoWorker/utxoWorker.types.cjs`);var s=16,c=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(s,Math.ceil(navigator.deviceMemory??4)))}async createUtxoPromise(e){return await a.performTaskWithWorker({type:i.WorkerVariant.UTXO,payload:e})}async batchFilterUtxosWithNullifier(e,i){let a=r.createRnDeltaTiming(`webView.utxoBatchFilter`),s=this.sliceArrayIntoParts(e,this.NUM_WORKERS);a.log(`start`,{utxoCount:e.length,workers:s.length});let c=s.map(e=>this.createUtxoPromise({type:o.UtxoWorkerActionType.BATCH_FILTER_UTXOS_WITH_NULLIFIER,data:{utxos:e.map(e=>e.getConstructableParams()),nullifiers:i}})),l=await Promise.all(c);return l.forEach(e=>{t.stealthPairCacheDevice.mergeWithSerialized(e.stealthPairCache),t.stealthAddressCacheDevice.mergeWithSerialized(e.stealthAddressCache)}),a.log(`done`),l.flatMap(e=>e.utxoConstructors).map(e=>new n.Utxo(e))}async buildBatchProcess(e,t,i){let a=r.createRnDeltaTiming(`webView.utxoBuildBatch`),s=this.sliceArrayIntoParts(e,this.NUM_WORKERS);a.log(`start`,{encryptedOutputs:e.length,workers:s.length});let c=s.map(e=>this.createUtxoPromise({type:o.UtxoWorkerActionType.BUILD_UTXOS,data:{signature:t.getSignature(),encryptedOutputs:e,chainId:i}})),l=(await Promise.all(c)).flat().map(e=>new n.Utxo(e));return a.log(`done`,{utxoCount:l.length}),l}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,i){let a=r.createRnDeltaTiming(`webView.utxoBatchProcess`),s=this.sliceArrayIntoParts(e,this.NUM_WORKERS_BATCH_PROCESS);a.log(`start`,{encryptedOutputs:e.length,workers:s.length});let c=n.getSignature(),l=s.map(e=>{let n={type:o.UtxoWorkerActionType.DECIPHER_OUTPUTS,data:{encryptedOutputs:e,lastOutput:t,signature:c,chainId:i}};return this.createUtxoPromise(n)}),u=await Promise.all(l),d=u.map(({additionalEncryptedOutputs:e})=>e).flat(),f=new Set,p=d.reduce((e,t)=>f.has(t.value)?e:(f.add(t.value),[...e,t]),[]),m={additionalEncryptedOutputs:p,lastOutput:this.findLastOutput(u.map(e=>e.lastOutput),t)??t};return a.log(`done`,{additionalEncryptedOutputs:p.length}),m}};exports.MultiThreadedUtxoUtils=c;
@@ -1,44 +1,55 @@
1
1
  import { isNode as e } from "../../constants/vite.constants.mjs";
2
2
  import { stealthAddressCacheDevice as t, stealthPairCacheDevice as n } from "../crypto-keys/keys.mjs";
3
3
  import { Utxo as r } from "../utxo/Utxo.mjs";
4
- import { WorkerVariant as i } from "../../webworker/worker.registry.mjs";
5
- import { performTaskWithWorker as a } from "../../webworker/performTaskWithWorker.mjs";
6
- import { UtxoWorkerActionType as o } from "../../webworker/utxoWorker/utxoWorker.types.mjs";
4
+ import { createRnDeltaTiming as i } from "../../functions/utils/hinkalTiming.utils.mjs";
5
+ import { WorkerVariant as a } from "../../webworker/worker.registry.mjs";
6
+ import { performTaskWithWorker as o } from "../../webworker/performTaskWithWorker.mjs";
7
+ import { UtxoWorkerActionType as s } from "../../webworker/utxoWorker/utxoWorker.types.mjs";
7
8
  //#region libs/shared/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.ts
8
- var s = 16, c = class {
9
+ var c = 16, l = class {
9
10
  NUM_WORKERS;
10
11
  NUM_WORKERS_BATCH_PROCESS;
11
12
  constructor() {
12
- e ? (this.NUM_WORKERS = 1, this.NUM_WORKERS_BATCH_PROCESS = 1) : (this.NUM_WORKERS = 3, this.NUM_WORKERS_BATCH_PROCESS = Math.min(s, Math.ceil(navigator.deviceMemory ?? 4)));
13
+ e ? (this.NUM_WORKERS = 1, this.NUM_WORKERS_BATCH_PROCESS = 1) : (this.NUM_WORKERS = 3, this.NUM_WORKERS_BATCH_PROCESS = Math.min(c, Math.ceil(navigator.deviceMemory ?? 4)));
13
14
  }
14
15
  async createUtxoPromise(e) {
15
- return await a({
16
- type: i.UTXO,
16
+ return await o({
17
+ type: a.UTXO,
17
18
  payload: e
18
19
  });
19
20
  }
20
- async batchFilterUtxosWithNullifier(e, i) {
21
- let a = this.sliceArrayIntoParts(e, this.NUM_WORKERS).map((e) => this.createUtxoPromise({
22
- type: o.BATCH_FILTER_UTXOS_WITH_NULLIFIER,
21
+ async batchFilterUtxosWithNullifier(e, a) {
22
+ let o = i("webView.utxoBatchFilter"), c = this.sliceArrayIntoParts(e, this.NUM_WORKERS);
23
+ o.log("start", {
24
+ utxoCount: e.length,
25
+ workers: c.length
26
+ });
27
+ let l = c.map((e) => this.createUtxoPromise({
28
+ type: s.BATCH_FILTER_UTXOS_WITH_NULLIFIER,
23
29
  data: {
24
30
  utxos: e.map((e) => e.getConstructableParams()),
25
- nullifiers: i
31
+ nullifiers: a
26
32
  }
27
- })), s = await Promise.all(a);
28
- return s.forEach((e) => {
33
+ })), u = await Promise.all(l);
34
+ return u.forEach((e) => {
29
35
  n.mergeWithSerialized(e.stealthPairCache), t.mergeWithSerialized(e.stealthAddressCache);
30
- }), s.flatMap((e) => e.utxoConstructors).map((e) => new r(e));
36
+ }), o.log("done"), u.flatMap((e) => e.utxoConstructors).map((e) => new r(e));
31
37
  }
32
38
  async buildBatchProcess(e, t, n) {
33
- let i = this.sliceArrayIntoParts(e, this.NUM_WORKERS).map((e) => this.createUtxoPromise({
34
- type: o.BUILD_UTXOS,
39
+ let a = i("webView.utxoBuildBatch"), o = this.sliceArrayIntoParts(e, this.NUM_WORKERS);
40
+ a.log("start", {
41
+ encryptedOutputs: e.length,
42
+ workers: o.length
43
+ });
44
+ let c = o.map((e) => this.createUtxoPromise({
45
+ type: s.BUILD_UTXOS,
35
46
  data: {
36
47
  signature: t.getSignature(),
37
48
  encryptedOutputs: e,
38
49
  chainId: n
39
50
  }
40
- }));
41
- return (await Promise.all(i)).flat().map((e) => new r(e));
51
+ })), l = (await Promise.all(c)).flat().map((e) => new r(e));
52
+ return a.log("done", { utxoCount: l.length }), l;
42
53
  }
43
54
  sliceArrayIntoParts(e, t) {
44
55
  let n = Math.ceil(e.length / t);
@@ -51,23 +62,28 @@ var s = 16, c = class {
51
62
  }), n;
52
63
  }
53
64
  async batchProcess(e, t, n, r) {
54
- let i = this.sliceArrayIntoParts(e, this.NUM_WORKERS_BATCH_PROCESS), a = n.getSignature(), s = i.map((e) => {
65
+ let a = i("webView.utxoBatchProcess"), o = this.sliceArrayIntoParts(e, this.NUM_WORKERS_BATCH_PROCESS);
66
+ a.log("start", {
67
+ encryptedOutputs: e.length,
68
+ workers: o.length
69
+ });
70
+ let c = n.getSignature(), l = o.map((e) => {
55
71
  let n = {
56
- type: o.DECIPHER_OUTPUTS,
72
+ type: s.DECIPHER_OUTPUTS,
57
73
  data: {
58
74
  encryptedOutputs: e,
59
75
  lastOutput: t,
60
- signature: a,
76
+ signature: c,
61
77
  chainId: r
62
78
  }
63
79
  };
64
80
  return this.createUtxoPromise(n);
65
- }), c = await Promise.all(s), l = c.map(({ additionalEncryptedOutputs: e }) => e).flat(), u = /* @__PURE__ */ new Set();
66
- return {
67
- additionalEncryptedOutputs: l.reduce((e, t) => u.has(t.value) ? e : (u.add(t.value), [...e, t]), []),
68
- lastOutput: this.findLastOutput(c.map((e) => e.lastOutput), t) ?? t
81
+ }), u = await Promise.all(l), d = u.map(({ additionalEncryptedOutputs: e }) => e).flat(), f = /* @__PURE__ */ new Set(), p = d.reduce((e, t) => f.has(t.value) ? e : (f.add(t.value), [...e, t]), []), m = {
82
+ additionalEncryptedOutputs: p,
83
+ lastOutput: this.findLastOutput(u.map((e) => e.lastOutput), t) ?? t
69
84
  };
85
+ return a.log("done", { additionalEncryptedOutputs: p.length }), m;
70
86
  }
71
87
  };
72
88
  //#endregion
73
- export { c as MultiThreadedUtxoUtils };
89
+ export { l as MultiThreadedUtxoUtils };
@@ -1 +1 @@
1
- const e=require(`../../constants/chains.constants.cjs`),t=require(`../../data-structures/crypto-keys/keys.cjs`),n=require(`../utils/solanaMint.utils.cjs`),r=require(`../snarkjs/common.snarkjs.cjs`),i=require(`../../webworker/worker.registry.cjs`),a=require(`../../webworker/performTaskWithWorker.cjs`),o=require(`../../webworker/zkProofWorker/zkProofWorker.types.cjs`);var s=async(s,c,l,u)=>{if(r.hasOnlyZeroAmounts(u))return;let d=e.isSolanaLike(s),f=u.map(e=>e.map(e=>e.amount.toString())),p=u.map(e=>e.map(e=>e.timeStamp)),m=u.map(e=>e.map(e=>r.getUtxoCircuitInRandomization(e))),h=u.map(e=>e.map(e=>e.getConstructableParams())),g=u.map(e=>e.map(e=>e.amount===0n?`0`:BigInt(e.getCommitment()).toString())),_=await a.performTaskWithWorker({type:i.WorkerVariant.ZKProof,payload:{type:o.ZKProofWorkerActionType.BUILD_IN_NULLIFIERS,data:{inputUtxosSerialized:h}}}),v=c.getShieldedPrivateKey(),y=c.getSpendingKeyPair().pubSpendingBJJPoint,b=d?l.map(e=>{let{compressedAddress:t}=n.formatMintAddress(e);return BigInt(t).toString()}):l.map(e=>BigInt(e).toString());u.forEach((e,n)=>{e.forEach((e,r)=>{let i=e.getStealthAddress(),a=e.spendingPublicKey??y,o=e.isNewStyle&&e.H0?t.UserKeys.getStealthAddressNewStyle(e.H0,v,a):t.UserKeys.getStealthAddress(BigInt(e.randomization),v);if(BigInt(i).toString()!==BigInt(o).toString())throw Error(`Commitment validation stealth mismatch at tokenIdx=${n}, utxoIdx=${r}`)})});let x={nullifyingPrivateKey:v,spendingPublicKey:y,erc20TokenAddresses:b,inAmounts:f,inRandomizations:m,inH0Ax:u.map(e=>e.map(e=>r.getUtxoCircuitH0Coords(e)[0].toString())),inH0Ay:u.map(e=>e.map(e=>r.getUtxoCircuitH0Coords(e)[1].toString())),isNewStyle:u.map(e=>e.map(e=>!!e.isNewStyle)),inTimeStamps:p,inCommitments:g,inNullifiers:_};if(!(!l.length||!u[0]?.length))return{tokenAddresses:b,inAmounts:f,inTimeStamps:p,inRandomizations:m,inCommitments:g,inNullifiers:_,verifierName:`commitmentCalculator${l.length}x${u[0].length}`,commitmentInput:x}},c=(e,t)=>{if(!(!e||!t))return{tokenAddresses:e.tokenAddresses,inAmounts:e.inAmounts,inTimeStamps:e.inTimeStamps,inRandomizations:e.inRandomizations,inCommitments:e.inCommitments,inNullifiers:e.inNullifiers,proof:{a:t.zkCallData[0],b:t.zkCallData[1],c:t.zkCallData[2]}}};exports.buildCommitmentValidationData=s,exports.buildCommitmentValidationDataFromProof=c;
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`../../data-structures/crypto-keys/keys.cjs`),n=require(`../utils/solanaMint.utils.cjs`),r=require(`../utils/hinkalTiming.utils.cjs`),i=require(`../snarkjs/common.snarkjs.cjs`),a=require(`../../webworker/worker.registry.cjs`),o=require(`../../webworker/performTaskWithWorker.cjs`),s=require(`../../webworker/zkProofWorker/zkProofWorker.types.cjs`);var c=async(c,l,u,d)=>{let f=r.createRnDeltaTiming(`mainThread.commitmentValidation`);if(i.hasOnlyZeroAmounts(d))return;let p=e.isSolanaLike(c),m=d.map(e=>e.map(e=>e.amount.toString())),h=d.map(e=>e.map(e=>e.timeStamp)),g=d.map(e=>e.map(e=>i.getUtxoCircuitInRandomization(e))),_=d.map(e=>e.map(e=>e.getConstructableParams()));f.log(`serializeInputs`);let v=r.createRnDeltaTiming(`mainThread.getCommitment`),y=d.map(e=>e.map(e=>e.amount===0n?`0`:BigInt(e.getCommitment()).toString()));v.log(`all-utxos`,{count:d.reduce((e,t)=>e+t.length,0)});let b=await o.performTaskWithWorker({type:a.WorkerVariant.ZKProof,payload:{type:s.ZKProofWorkerActionType.BUILD_IN_NULLIFIERS,data:{inputUtxosSerialized:_}}});f.log(`buildInNullifiers-worker-done`);let x=l.getShieldedPrivateKey(),S=l.getSpendingKeyPair().pubSpendingBJJPoint,C=p?u.map(e=>{let{compressedAddress:t}=n.formatMintAddress(e);return BigInt(t).toString()}):u.map(e=>BigInt(e).toString()),w=r.createRnDeltaTiming(`mainThread.stealthValidation`),T=0;d.forEach((e,n)=>{e.forEach((e,r)=>{T+=1;let i=e.getStealthAddress(),a=e.spendingPublicKey??S,o=e.isNewStyle&&e.H0?t.UserKeys.getStealthAddressNewStyle(e.H0,x,a):t.UserKeys.getStealthAddress(BigInt(e.randomization),x);if(BigInt(i).toString()!==BigInt(o).toString())throw Error(`Commitment validation stealth mismatch at tokenIdx=${n}, utxoIdx=${r}`)})}),w.log(`all-utxos`,{stealthChecks:T});let E={nullifyingPrivateKey:x,spendingPublicKey:S,erc20TokenAddresses:C,inAmounts:m,inRandomizations:g,inH0Ax:d.map(e=>e.map(e=>i.getUtxoCircuitH0Coords(e)[0].toString())),inH0Ay:d.map(e=>e.map(e=>i.getUtxoCircuitH0Coords(e)[1].toString())),isNewStyle:d.map(e=>e.map(e=>!!e.isNewStyle)),inTimeStamps:h,inCommitments:y,inNullifiers:b};if(!u.length||!d[0]?.length)return;let D=`commitmentCalculator${u.length}x${d[0].length}`;return f.log(`done`,{verifierName:D}),{tokenAddresses:C,inAmounts:m,inTimeStamps:h,inRandomizations:g,inCommitments:y,inNullifiers:b,verifierName:D,commitmentInput:E}},l=(e,t)=>{if(!(!e||!t))return{tokenAddresses:e.tokenAddresses,inAmounts:e.inAmounts,inTimeStamps:e.inTimeStamps,inRandomizations:e.inRandomizations,inCommitments:e.inCommitments,inNullifiers:e.inNullifiers,proof:{a:t.zkCallData[0],b:t.zkCallData[1],c:t.zkCallData[2]}}};exports.buildCommitmentValidationData=c,exports.buildCommitmentValidationDataFromProof=l;
@@ -1,53 +1,64 @@
1
1
  import { isSolanaLike as e } from "../../constants/chains.constants.mjs";
2
2
  import { UserKeys as t } from "../../data-structures/crypto-keys/keys.mjs";
3
3
  import { formatMintAddress as n } from "../utils/solanaMint.utils.mjs";
4
- import { getUtxoCircuitH0Coords as r, getUtxoCircuitInRandomization as i, hasOnlyZeroAmounts as a } from "../snarkjs/common.snarkjs.mjs";
5
- import { WorkerVariant as o } from "../../webworker/worker.registry.mjs";
6
- import { performTaskWithWorker as s } from "../../webworker/performTaskWithWorker.mjs";
7
- import { ZKProofWorkerActionType as c } from "../../webworker/zkProofWorker/zkProofWorker.types.mjs";
4
+ import { createRnDeltaTiming as r } from "../utils/hinkalTiming.utils.mjs";
5
+ import { getUtxoCircuitH0Coords as i, getUtxoCircuitInRandomization as a, hasOnlyZeroAmounts as o } from "../snarkjs/common.snarkjs.mjs";
6
+ import { WorkerVariant as s } from "../../webworker/worker.registry.mjs";
7
+ import { performTaskWithWorker as c } from "../../webworker/performTaskWithWorker.mjs";
8
+ import { ZKProofWorkerActionType as l } from "../../webworker/zkProofWorker/zkProofWorker.types.mjs";
8
9
  //#region libs/shared/common/src/functions/pre-transaction/buildCommitmentValidationData.ts
9
- var l = async (l, u, d, f) => {
10
- if (a(f)) return;
11
- let p = e(l), m = f.map((e) => e.map((e) => e.amount.toString())), h = f.map((e) => e.map((e) => e.timeStamp)), g = f.map((e) => e.map((e) => i(e))), _ = f.map((e) => e.map((e) => e.getConstructableParams())), v = f.map((e) => e.map((e) => e.amount === 0n ? "0" : BigInt(e.getCommitment()).toString())), y = await s({
12
- type: o.ZKProof,
10
+ var u = async (u, d, f, p) => {
11
+ let m = r("mainThread.commitmentValidation");
12
+ if (o(p)) return;
13
+ let h = e(u), g = p.map((e) => e.map((e) => e.amount.toString())), _ = p.map((e) => e.map((e) => e.timeStamp)), v = p.map((e) => e.map((e) => a(e))), y = p.map((e) => e.map((e) => e.getConstructableParams()));
14
+ m.log("serializeInputs");
15
+ let b = r("mainThread.getCommitment"), x = p.map((e) => e.map((e) => e.amount === 0n ? "0" : BigInt(e.getCommitment()).toString()));
16
+ b.log("all-utxos", { count: p.reduce((e, t) => e + t.length, 0) });
17
+ let S = await c({
18
+ type: s.ZKProof,
13
19
  payload: {
14
- type: c.BUILD_IN_NULLIFIERS,
15
- data: { inputUtxosSerialized: _ }
20
+ type: l.BUILD_IN_NULLIFIERS,
21
+ data: { inputUtxosSerialized: y }
16
22
  }
17
- }), b = u.getShieldedPrivateKey(), x = u.getSpendingKeyPair().pubSpendingBJJPoint, S = p ? d.map((e) => {
23
+ });
24
+ m.log("buildInNullifiers-worker-done");
25
+ let C = d.getShieldedPrivateKey(), w = d.getSpendingKeyPair().pubSpendingBJJPoint, T = h ? f.map((e) => {
18
26
  let { compressedAddress: t } = n(e);
19
27
  return BigInt(t).toString();
20
- }) : d.map((e) => BigInt(e).toString());
21
- f.forEach((e, n) => {
28
+ }) : f.map((e) => BigInt(e).toString()), E = r("mainThread.stealthValidation"), D = 0;
29
+ p.forEach((e, n) => {
22
30
  e.forEach((e, r) => {
23
- let i = e.getStealthAddress(), a = e.spendingPublicKey ?? x, o = e.isNewStyle && e.H0 ? t.getStealthAddressNewStyle(e.H0, b, a) : t.getStealthAddress(BigInt(e.randomization), b);
31
+ D += 1;
32
+ let i = e.getStealthAddress(), a = e.spendingPublicKey ?? w, o = e.isNewStyle && e.H0 ? t.getStealthAddressNewStyle(e.H0, C, a) : t.getStealthAddress(BigInt(e.randomization), C);
24
33
  if (BigInt(i).toString() !== BigInt(o).toString()) throw Error(`Commitment validation stealth mismatch at tokenIdx=${n}, utxoIdx=${r}`);
25
34
  });
26
- });
27
- let C = {
28
- nullifyingPrivateKey: b,
29
- spendingPublicKey: x,
30
- erc20TokenAddresses: S,
31
- inAmounts: m,
32
- inRandomizations: g,
33
- inH0Ax: f.map((e) => e.map((e) => r(e)[0].toString())),
34
- inH0Ay: f.map((e) => e.map((e) => r(e)[1].toString())),
35
- isNewStyle: f.map((e) => e.map((e) => !!e.isNewStyle)),
36
- inTimeStamps: h,
37
- inCommitments: v,
38
- inNullifiers: y
35
+ }), E.log("all-utxos", { stealthChecks: D });
36
+ let O = {
37
+ nullifyingPrivateKey: C,
38
+ spendingPublicKey: w,
39
+ erc20TokenAddresses: T,
40
+ inAmounts: g,
41
+ inRandomizations: v,
42
+ inH0Ax: p.map((e) => e.map((e) => i(e)[0].toString())),
43
+ inH0Ay: p.map((e) => e.map((e) => i(e)[1].toString())),
44
+ isNewStyle: p.map((e) => e.map((e) => !!e.isNewStyle)),
45
+ inTimeStamps: _,
46
+ inCommitments: x,
47
+ inNullifiers: S
39
48
  };
40
- if (!(!d.length || !f[0]?.length)) return {
41
- tokenAddresses: S,
42
- inAmounts: m,
43
- inTimeStamps: h,
44
- inRandomizations: g,
45
- inCommitments: v,
46
- inNullifiers: y,
47
- verifierName: `commitmentCalculator${d.length}x${f[0].length}`,
48
- commitmentInput: C
49
+ if (!f.length || !p[0]?.length) return;
50
+ let k = `commitmentCalculator${f.length}x${p[0].length}`;
51
+ return m.log("done", { verifierName: k }), {
52
+ tokenAddresses: T,
53
+ inAmounts: g,
54
+ inTimeStamps: _,
55
+ inRandomizations: v,
56
+ inCommitments: x,
57
+ inNullifiers: S,
58
+ verifierName: k,
59
+ commitmentInput: O
49
60
  };
50
- }, u = (e, t) => {
61
+ }, d = (e, t) => {
51
62
  if (!(!e || !t)) return {
52
63
  tokenAddresses: e.tokenAddresses,
53
64
  inAmounts: e.inAmounts,
@@ -63,4 +74,4 @@ var l = async (l, u, d, f) => {
63
74
  };
64
75
  };
65
76
  //#endregion
66
- export { l as buildCommitmentValidationData, u as buildCommitmentValidationDataFromProof };
77
+ export { u as buildCommitmentValidationData, d as buildCommitmentValidationDataFromProof };
@@ -1 +1 @@
1
- const e=require(`../utils/amounts.utils.cjs`),t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../data-structures/utxo/Utxo.cjs`);var r=(r,i,a,o,s=!0,c,l)=>{let u=e.countTotalAmountInUtxos(i),{erc20TokenAddress:d,mintAddress:f}=i[0];if(s&&a<0n&&u+a<0n)throw Error(t.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);let p=[new n.Utxo({amount:e.bigintMax(u+a,0n),erc20TokenAddress:d,mintAddress:f,nullifyingKey:r.getShieldedPrivateKey(),timeStamp:o,spendingPublicKey:r.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0})];if(c!==void 0&&l!==void 0){let[e,t,r,,i]=c.split(`,`);p.push(new n.Utxo({amount:l,erc20TokenAddress:d,mintAddress:f,H0:[BigInt(t),BigInt(r)],stealthAddress:e,encryptionKey:i,timeStamp:o,isNewStyle:!0}))}return{outputUtxos:p}};exports.outputUtxoProcessing=r;
1
+ const e=require(`../utils/amounts.utils.cjs`),t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../data-structures/utxo/Utxo.cjs`),r=require(`../utils/hinkalTiming.utils.cjs`);var i=(i,a,o,s,c=!0,l,u)=>{let d=r.createRnDeltaTiming(`mainThread.outputUtxo`),f=e.countTotalAmountInUtxos(a),{erc20TokenAddress:p,mintAddress:m}=a[0];if(c&&o<0n&&f+o<0n)throw Error(t.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);d.log(`sumInputs`);let h=[new n.Utxo({amount:e.bigintMax(f+o,0n),erc20TokenAddress:p,mintAddress:m,nullifyingKey:i.getShieldedPrivateKey(),timeStamp:s,spendingPublicKey:i.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0})];if(d.log(`newUtxo-change`,{randomization:!!h[0].randomization,h0:!!h[0].H0}),l!==void 0&&u!==void 0){let[e,t,r,,i]=l.split(`,`);h.push(new n.Utxo({amount:u,erc20TokenAddress:p,mintAddress:m,H0:[BigInt(t),BigInt(r)],stealthAddress:e,encryptionKey:i,timeStamp:s,isNewStyle:!0})),d.log(`newUtxo-recipient`)}return d.log(`done`,{outputCount:h.length}),{outputUtxos:h}};exports.outputUtxoProcessing=i;
@@ -1,33 +1,38 @@
1
1
  import { bigintMax as e, countTotalAmountInUtxos as t } from "../utils/amounts.utils.mjs";
2
2
  import { transactionErrorCodes as n } from "../../error-handling/error-codes.constants.mjs";
3
3
  import { Utxo as r } from "../../data-structures/utxo/Utxo.mjs";
4
+ import { createRnDeltaTiming as i } from "../utils/hinkalTiming.utils.mjs";
4
5
  //#region libs/shared/common/src/functions/pre-transaction/outputUtxoProcessing.ts
5
- var i = (i, a, o, s, c = !0, l, u) => {
6
- let d = t(a), { erc20TokenAddress: f, mintAddress: p } = a[0];
7
- if (c && o < 0n && d + o < 0n) throw Error(n.INSUFFICIENT_FUNDS_TO_TRANSACT);
8
- let m = [new r({
9
- amount: e(d + o, 0n),
10
- erc20TokenAddress: f,
11
- mintAddress: p,
12
- nullifyingKey: i.getShieldedPrivateKey(),
13
- timeStamp: s,
14
- spendingPublicKey: i.getSpendingKeyPair().pubSpendingBJJPoint,
6
+ var a = (a, o, s, c, l = !0, u, d) => {
7
+ let f = i("mainThread.outputUtxo"), p = t(o), { erc20TokenAddress: m, mintAddress: h } = o[0];
8
+ if (l && s < 0n && p + s < 0n) throw Error(n.INSUFFICIENT_FUNDS_TO_TRANSACT);
9
+ f.log("sumInputs");
10
+ let g = [new r({
11
+ amount: e(p + s, 0n),
12
+ erc20TokenAddress: m,
13
+ mintAddress: h,
14
+ nullifyingKey: a.getShieldedPrivateKey(),
15
+ timeStamp: c,
16
+ spendingPublicKey: a.getSpendingKeyPair().pubSpendingBJJPoint,
15
17
  isNewStyle: !0
16
18
  })];
17
- if (l !== void 0 && u !== void 0) {
18
- let [e, t, n, , i] = l.split(",");
19
- m.push(new r({
20
- amount: u,
21
- erc20TokenAddress: f,
22
- mintAddress: p,
19
+ if (f.log("newUtxo-change", {
20
+ randomization: !!g[0].randomization,
21
+ h0: !!g[0].H0
22
+ }), u !== void 0 && d !== void 0) {
23
+ let [e, t, n, , i] = u.split(",");
24
+ g.push(new r({
25
+ amount: d,
26
+ erc20TokenAddress: m,
27
+ mintAddress: h,
23
28
  H0: [BigInt(t), BigInt(n)],
24
29
  stealthAddress: e,
25
30
  encryptionKey: i,
26
- timeStamp: s,
31
+ timeStamp: c,
27
32
  isNewStyle: !0
28
- }));
33
+ })), f.log("newUtxo-recipient");
29
34
  }
30
- return { outputUtxos: m };
35
+ return f.log("done", { outputCount: g.length }), { outputUtxos: g };
31
36
  };
32
37
  //#endregion
33
- export { i as outputUtxoProcessing };
38
+ export { a as outputUtxoProcessing };
@@ -1 +1 @@
1
- const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../crypto/poseidon.cjs`),r=require(`../web3/etherFunctions.cjs`),i=require(`../../data-structures/crypto-keys/keys.cjs`),a=require(`../utils/time.utils.cjs`),o=require(`../../types/external-action.types.cjs`),s=require(`../../error-handling/logger.cjs`),c=require(`../utils/bit.operations.cjs`),l=require(`./common.snarkjs.cjs`),ee=require(`./signedMessageHash.cjs`),u=require(`./generateCircomData.cjs`),te=require(`../../data-structures/AccountActions/AccountActions.cjs`),ne=require(`../utils/hinkalTiming.utils.cjs`),d=require(`./generateMainAndCommitmentZkProof.cjs`),f=require(`./getMerkleTreeSiblingsAndRootHashes.cjs`),p=require(`../private-wallet/emporium.helpers.cjs`);var m=async(m,h,g,_,v,y,b,x,S,C=t.zeroAddress,w=e.chainIds.localhost,T=h.map(()=>!1),E=void 0,D,O)=>{let k=ne.createHinkalTiming(`constructZkProof`),A=l.getZkProofVerifierName(h,g),j=l.calcAmountChanges(h,g),M=h.map(e=>e[0].erc20TokenAddress),N=l.calcEncryptedOutputs(g),P=t.defaultSignatureData,F=_.getShieldedPrivateKey(),{pubSpendingBJJPoint:I}=_.getSpendingKeyPair(),L=l.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),F),F,_.getSpendingKeyPair().pubSpendingBJJPoint),{inCommitmentSiblings:re,inCommitmentSiblingSides:ie,rootHashHinkal:R,inNullifiers:z}=await f.getDataFromWorkers(w,m,h.map(e=>e.map(e=>e.getConstructableParams())));k.log(`getDataFromWorkers`,{verifierName:A,chainId:w});let B=l.buildOutCommitments(g),V=r.randomBigInt(31),H=n.poseidonFunction(V),U=BigInt(g.length>0?g[0][0].timeStamp:a.getCurrentTimeInSeconds()),W={rootHashHinkal:R,spendingPublicKey:I,nullifyingPrivateKey:F,erc20TokenAddresses:M,amountChanges:j,inAmounts:h.map(e=>e.map(e=>e.amount.toString())),inRandomizations:h.map(e=>e.map(e=>l.getUtxoCircuitInRandomization(e))),inH0Ax:h.map(e=>e.map(e=>l.getUtxoCircuitH0Coords(e)[0].toString())),inH0Ay:h.map(e=>e.map(e=>l.getUtxoCircuitH0Coords(e)[1].toString())),isNewStyle:h.map(e=>e.map(e=>!!e.isNewStyle)),inTimeStamps:h.map(e=>e.map(e=>e.timeStamp)),inNullifiers:z,inCommitmentSiblings:re,inCommitmentSiblingSides:ie,outAmounts:g.map(e=>e.map(e=>e.amount.toString())),outTimeStamp:U,outPublicKeys:g.map(e=>e.map(e=>e.getStealthAddress())),outCommitments:B,calldataHash:0n,messageSeed:V,H0Ax:c.takeOffHighestBit(L.extraRandomization),H0Ay:L.H0},G=l.calcPublicSignalCount(A,W.erc20TokenAddresses,W.amountChanges,W.inNullifiers,W.outCommitments),K=l.calcAmountChanges(h,g,!0),q=l.getSlippageValues(K);s.Logger.log({publicSignalCount:G});let J=Array.isArray(b)?b:[b],ae=e.getOnchainChainId(w),oe=O?te.AccountActions.getSignerAddressFromPrivateKey(ae,O):void 0,Y=v===o.ExternalActionId.Emporium?await p.encodeEmporiumMetadata(w,y??t.zeroAddress,O,J,H,oe):await p.encodeEmporiumMetadata(w,t.zeroAddress,void 0,v===0n?[]:J,H,t.zeroAddress);k.log(`encodeEmporiumMetadata`,{externalActionId:v.toString()}),W.calldataHash=l.createCallDataHash(G,C,y,v,Y,N,E,q,T,S,P,D);let X=ee.computeSignedMessageHashEvm({rootHashHinkal:R,erc20TokenAddresses:M,amountChanges:j,outTimeStamp:U,inNullifiers:z,outCommitments:B,calldataHash:W.calldataHash,message:H,outH1Ay:L.H1,H0Ax:W.H0Ax,H0Ay:L.H0}),{R8:Z,S:se}=_.signEddsa(X);W.eddsaSignature=[Z[0],Z[1],se],W.signedMessageHash=X;let Q=A.startsWith(`mainEVMCircuitMin0`),$={outTimeStamp:U,calldataHash:W.calldataHash,messageSeed:V},{zkCallData:ce,commitmentValidationData:le}=await d.generateMainAndCommitmentZkProof(w,_,M,h,A,Q?$:W,x);k.log(`generateMainAndCommitmentZkProof`,{verifierName:A,generateProofRemotely:x});let ue=u.generateCircomData(B,z,R,K,M,g,N,G,v,y,Y,C,W.calldataHash,L,T,E,Q?Number(U):void 0,q,S,P,D),de={tokenNumber:h.length,nullifierAmount:h.length>0?h[0].length:0,outputAmount:g.length>0?g[0].length:0};return k.log(`done`),{zkCallData:ce,circomData:ue,dimData:de,encryptedOutputs:N,commitmentValidationData:le}};exports.constructZkProof=m;
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../crypto/poseidon.cjs`),r=require(`../web3/etherFunctions.cjs`),i=require(`../../data-structures/crypto-keys/keys.cjs`),a=require(`../utils/time.utils.cjs`),o=require(`../../types/external-action.types.cjs`),s=require(`../../error-handling/logger.cjs`),c=require(`../utils/hinkalTiming.utils.cjs`),l=require(`../utils/bit.operations.cjs`),u=require(`./common.snarkjs.cjs`),d=require(`./signedMessageHash.cjs`),ee=require(`./generateCircomData.cjs`),te=require(`../../data-structures/AccountActions/AccountActions.cjs`),f=require(`./generateMainAndCommitmentZkProof.cjs`),p=require(`./getMerkleTreeSiblingsAndRootHashes.cjs`),m=require(`../private-wallet/emporium.helpers.cjs`);var h=async(h,g,_,v,y,b,x,ne,S,C=t.zeroAddress,w=e.chainIds.localhost,T=g.map(()=>!1),E=void 0,D,O)=>{let k=c.createRnDeltaTiming(`webView.getDataFromWorkers`),A=u.getZkProofVerifierName(g,_),j=u.calcAmountChanges(g,_),M=g.map(e=>e[0].erc20TokenAddress),N=u.calcEncryptedOutputs(_),P=t.defaultSignatureData,F=v.getShieldedPrivateKey(),{pubSpendingBJJPoint:I}=v.getSpendingKeyPair(),L=u.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),F),F,v.getSpendingKeyPair().pubSpendingBJJPoint),{inCommitmentSiblings:re,inCommitmentSiblingSides:R,rootHashHinkal:z,inNullifiers:B}=await p.getDataFromWorkers(w,h,g.map(e=>e.map(e=>e.getConstructableParams())));k.log(`done`,{verifierName:A,chainId:w});let V=u.buildOutCommitments(_),H=r.randomBigInt(31),U=n.poseidonFunction(H),W=BigInt(_.length>0?_[0][0].timeStamp:a.getCurrentTimeInSeconds()),G={rootHashHinkal:z,spendingPublicKey:I,nullifyingPrivateKey:F,erc20TokenAddresses:M,amountChanges:j,inAmounts:g.map(e=>e.map(e=>e.amount.toString())),inRandomizations:g.map(e=>e.map(e=>u.getUtxoCircuitInRandomization(e))),inH0Ax:g.map(e=>e.map(e=>u.getUtxoCircuitH0Coords(e)[0].toString())),inH0Ay:g.map(e=>e.map(e=>u.getUtxoCircuitH0Coords(e)[1].toString())),isNewStyle:g.map(e=>e.map(e=>!!e.isNewStyle)),inTimeStamps:g.map(e=>e.map(e=>e.timeStamp)),inNullifiers:B,inCommitmentSiblings:re,inCommitmentSiblingSides:R,outAmounts:_.map(e=>e.map(e=>e.amount.toString())),outTimeStamp:W,outPublicKeys:_.map(e=>e.map(e=>e.getStealthAddress())),outCommitments:V,calldataHash:0n,messageSeed:H,H0Ax:l.takeOffHighestBit(L.extraRandomization),H0Ay:L.H0},K=u.calcPublicSignalCount(A,G.erc20TokenAddresses,G.amountChanges,G.inNullifiers,G.outCommitments),q=u.calcAmountChanges(g,_,!0),J=u.getSlippageValues(q);s.Logger.log({publicSignalCount:K});let Y=Array.isArray(x)?x:[x],ie=e.getOnchainChainId(w),ae=O?te.AccountActions.getSignerAddressFromPrivateKey(ie,O):void 0,X=y===o.ExternalActionId.Emporium?await m.encodeEmporiumMetadata(w,b??t.zeroAddress,O,Y,U,ae):await m.encodeEmporiumMetadata(w,t.zeroAddress,void 0,y===0n?[]:Y,U,t.zeroAddress);G.calldataHash=u.createCallDataHash(K,C,b,y,X,N,E,J,T,S,P,D);let Z=d.computeSignedMessageHashEvm({rootHashHinkal:z,erc20TokenAddresses:M,amountChanges:j,outTimeStamp:W,inNullifiers:B,outCommitments:V,calldataHash:G.calldataHash,message:U,outH1Ay:L.H1,H0Ax:G.H0Ax,H0Ay:L.H0}),{R8:Q,S:oe}=v.signEddsa(Z);G.eddsaSignature=[Q[0],Q[1],oe],G.signedMessageHash=Z;let $=A.startsWith(`mainEVMCircuitMin0`),se={outTimeStamp:W,calldataHash:G.calldataHash,messageSeed:H},{zkCallData:ce,commitmentValidationData:le}=await f.generateMainAndCommitmentZkProof(w,v,M,g,A,$?se:G,ne);return{zkCallData:ce,circomData:ee.generateCircomData(V,B,z,q,M,_,N,K,y,b,X,C,G.calldataHash,L,T,E,$?Number(W):void 0,J,S,P,D),dimData:{tokenNumber:g.length,nullifierAmount:g.length>0?g[0].length:0,outputAmount:_.length>0?_[0].length:0},encryptedOutputs:N,commitmentValidationData:le}};exports.constructZkProof=h;