@hinkal/common 0.3.4 → 0.3.6

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 (69) hide show
  1. package/assets/snarkjsWorkerLauncher-SrStwJvX.js +1 -0
  2. package/assets/snarkjsWorkerLogic-DtIjisbE.js +132 -0
  3. package/assets/utxoWorkerLauncher-CIBeBAML.js +1 -0
  4. package/assets/utxoWorkerLogic-C8R4GSaf.js +199 -0
  5. package/assets/zkProofWorkerLauncher-DfwteloJ.js +1 -0
  6. package/assets/zkProofWorkerLogic-CY9y6rOV.js +199 -0
  7. package/common/src/constants/vite.constants.cjs +1 -1
  8. package/common/src/constants/vite.constants.mjs +23 -5
  9. package/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.cjs +1 -1
  10. package/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.mjs +50 -97
  11. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
  12. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +90 -128
  13. package/common/src/data-structures/Hinkal/hinkalSolanaSwap.cjs +1 -1
  14. package/common/src/data-structures/Hinkal/hinkalSolanaSwap.mjs +56 -110
  15. package/common/src/data-structures/Hinkal/hinkalSolanaTransact.cjs +1 -0
  16. package/common/src/data-structures/Hinkal/hinkalSolanaTransact.d.ts +3 -0
  17. package/common/src/data-structures/Hinkal/hinkalSolanaTransact.mjs +117 -0
  18. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
  19. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.d.ts +2 -31
  20. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +45 -121
  21. package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
  22. package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +41 -83
  23. package/common/src/data-structures/Hinkal/hinkalTransact.cjs +1 -1
  24. package/common/src/data-structures/Hinkal/hinkalTransact.mjs +41 -42
  25. package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.cjs +1 -1
  26. package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.mjs +106 -125
  27. package/common/src/data-structures/IndexedDB/pay-activity-db.cjs +1 -1
  28. package/common/src/data-structures/IndexedDB/pay-activity-db.mjs +43 -1
  29. package/common/src/functions/index.cjs +1 -1
  30. package/common/src/functions/index.mjs +0 -1
  31. package/common/src/functions/pre-transaction/ensureAmountChanges.cjs +1 -1
  32. package/common/src/functions/pre-transaction/ensureAmountChanges.mjs +3 -10
  33. package/common/src/functions/pre-transaction/outputUtxoProcessing.cjs +1 -1
  34. package/common/src/functions/pre-transaction/outputUtxoProcessing.d.ts +1 -0
  35. package/common/src/functions/pre-transaction/outputUtxoProcessing.mjs +13 -9
  36. package/common/src/functions/snarkjs/constructSolanaZkProof.cjs +1 -1
  37. package/common/src/functions/snarkjs/constructSolanaZkProof.d.ts +1 -1
  38. package/common/src/functions/snarkjs/constructSolanaZkProof.mjs +35 -35
  39. package/common/src/functions/snarkjs/constructTxEnclave.cjs +1 -1
  40. package/common/src/functions/snarkjs/constructTxEnclave.d.ts +2 -0
  41. package/common/src/functions/snarkjs/constructTxEnclave.mjs +40 -40
  42. package/common/src/functions/utils/enum.utils.cjs +1 -0
  43. package/common/src/functions/utils/enum.utils.mjs +12 -0
  44. package/common/src/functions/utils/index.cjs +1 -1
  45. package/common/src/functions/utils/index.mjs +0 -1
  46. package/common/src/types/index.cjs +1 -1
  47. package/common/src/types/index.d.ts +1 -0
  48. package/common/src/types/index.mjs +1 -0
  49. package/common/src/types/pay-activities.types.d.ts +18 -3
  50. package/common/src/types/solana-transact.types.cjs +1 -0
  51. package/common/src/types/solana-transact.types.d.ts +35 -0
  52. package/common/src/types/solana-transact.types.mjs +6 -0
  53. package/common/src/webworker/logError-Dex6ch32.js +2 -0
  54. package/common/src/webworker/package.json +5 -3
  55. package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.cjs +1 -1
  56. package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.mjs +1 -1
  57. package/common/src/webworker/snarkjsWorkerNode.cjs +1 -1
  58. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
  59. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
  60. package/common/src/webworker/utxoWorkerNode.cjs +1 -1
  61. package/common/src/webworker/viteWorkerURL.constant.cjs +1 -28
  62. package/common/src/webworker/viteWorkerURL.constant.mjs +13 -27
  63. package/common/src/webworker/workerProxy-BuJUMCQ4.js +1 -0
  64. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
  65. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
  66. package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
  67. package/package.json +5 -3
  68. package/common/src/webworker/logError-CxZzSALU.js +0 -2
  69. package/common/src/webworker/workerProxy-swwPYw6e.js +0 -1
@@ -1,94 +1,52 @@
1
1
  import { networkRegistry as e } from "../../constants/chains.constants.mjs";
2
2
  import "../../constants/protocol.constants.mjs";
3
3
  import { transactionErrorCodes as t } from "../../error-handling/error-codes.constants.mjs";
4
- import { randomBigInt as n } from "../../functions/web3/etherFunctions.mjs";
5
- import { UserKeys as r } from "../crypto-keys/keys.mjs";
6
- import { getCurrentTimeInSeconds as i } from "../../functions/utils/time.utils.mjs";
7
- import { ExternalActionId as a } from "../../types/external-action.types.mjs";
4
+ import { ExternalActionId as n } from "../../types/external-action.types.mjs";
5
+ import { SolanaSubmitMode as r } from "../../types/solana-transact.types.mjs";
8
6
  import "../../types/index.mjs";
9
- import { validateAndGetChainId as o } from "../../functions/utils/token-check.utils.mjs";
10
- import { addPaddingToUtxos as s } from "../../functions/web3/events/getShieldedBalance.mjs";
11
- import { outputUtxoProcessing as c } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
12
- import { constructAdminData as l } from "../../functions/pre-transaction/constructAdminData.mjs";
13
- import { finalizeSolanaTxEnclaveCallRelay as u, prepareSolanaTxEnclaveCall as d } from "../../functions/snarkjs/constructTxEnclave.mjs";
14
- import { calculateSolanaNullifierCount as f } from "../../functions/pre-transaction/calculateSolanaNullifierCount.mjs";
15
- import { ensureAmountChanges as p } from "../../functions/pre-transaction/ensureAmountChanges.mjs";
16
- import { getFeeStructure as m } from "../../functions/pre-transaction/getFeeStructure.mjs";
7
+ import { validateAndGetChainId as i } from "../../functions/utils/token-check.utils.mjs";
8
+ import { constructAdminData as a } from "../../functions/pre-transaction/constructAdminData.mjs";
9
+ import { calculateSolanaNullifierCount as o } from "../../functions/pre-transaction/calculateSolanaNullifierCount.mjs";
10
+ import { getFeeStructure as s } from "../../functions/pre-transaction/getFeeStructure.mjs";
17
11
  import "../../functions/pre-transaction/index.mjs";
18
- import { solanaTransactCallRelayer as h } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
19
12
  import "../../constants/index.mjs";
20
- import { calculateModifiedFeeStructure as g } from "../../functions/utils/fees.utils.mjs";
21
- import { constructSolanaZkProof as _ } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
13
+ import { calculateModifiedFeeStructure as c } from "../../functions/utils/fees.utils.mjs";
14
+ import { hinkalSolanaTransact as l } from "./hinkalSolanaTransact.mjs";
22
15
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.ts
23
- var v = async (e, t, n, r) => {
24
- let a = [...await s(e, t, n, r, 6)][0], o = i().toString(), { outputUtxos: l } = c(e.userKeys, a, r[0], o);
25
- return {
26
- inputUtxos: a,
27
- outputUtxos: l
28
- };
29
- }, y = async (e, t, n, r, i, a, o, s, c) => {
30
- let { jobId: l, signedMessageHash: f } = await d(e, {
31
- chainId: t,
32
- mintAddresses: n,
33
- amountChanges: r,
34
- relayAddress: a,
35
- recipient: i,
36
- signer: a,
16
+ var u = async (u, d, f, p, m, h, g) => {
17
+ let _ = i(d), v = d.map((e) => e.erc20TokenAddress), y = d[0];
18
+ if (!y) throw Error("Solana Withdraw: No Token Found");
19
+ let { originalDeployer: b } = e[_].contractData;
20
+ if (!b) throw Error("missing data");
21
+ let x = m ?? v[0], S = {
22
+ mintTo: v[0],
23
+ recipient: p,
24
+ nullifierCount: await o(u, _, v, f)
25
+ }, C = h ?? await s(_, x, v, n.Transact, [], void 0, S), w = await c(_, y, -f[0], C);
26
+ f[0] -= w.flatFee;
27
+ let [T, E] = await Promise.all([u.getRandomRelay(_, !0), u.getEthereumAddress()]);
28
+ if (!T) throw Error(t.RELAYER_NOT_AVAILABLE);
29
+ if (v.length > 1) throw Error("Solana Withdraw: Only one mint address is supported");
30
+ let D = {
31
+ recipient: p,
32
+ mint: v[0] === "11111111111111111111111111111111" ? void 0 : v[0]
33
+ }, O = a(g, _, v, f, E);
34
+ return l(u, {
35
+ chainId: _,
36
+ mintAddresses: v,
37
+ amountChanges: f,
38
+ relayAddress: T,
39
+ recipient: p,
40
+ signer: T,
37
41
  functionName: "transact",
38
- accounts: o,
39
- relayerFee: s.flatFee,
40
- variableRate: s.variableRate,
41
- hinkalInstructions: [],
42
- remainingAccounts: []
43
- }), { R8: p, S: m } = e.userKeys.signEddsa(BigInt(f));
44
- return u(l, {
45
- R8: p,
46
- S: m
47
- }, t, { adminData: c });
48
- }, b = async (i, s, c, u, d, b, x) => {
49
- let S = o(s), C = s.map((e) => e.erc20TokenAddress), w = s[0];
50
- if (!w) throw Error("Solana Withdraw: No Token Found");
51
- let { originalDeployer: T } = e[S].contractData;
52
- if (!T) throw Error("missing data");
53
- let { userKeys: E, merkleTreeHinkalByChain: D } = i, O = d ?? C[0], k = {
54
- mintTo: C[0],
55
- recipient: u,
56
- nullifierCount: await f(i, S, C, c)
57
- }, A = b ?? await m(S, O, C, a.Transact, [], void 0, k), j = await g(S, w, -c[0], A);
58
- c[0] -= j.flatFee;
59
- let [M, N] = await Promise.all([i.getRandomRelay(S, !0), i.getEthereumAddress()]);
60
- if (!M) throw Error(t.RELAYER_NOT_AVAILABLE);
61
- if (C.length > 1) throw Error("Solana Withdraw: Only one mint address is supported");
62
- let P = {
63
- recipient: u,
64
- mint: C[0] === "11111111111111111111111111111111" ? void 0 : C[0]
65
- }, F = l(x, S, C, c, N);
66
- if (i.generateProofRemotely) return y(i, S, C, c, u, M, P, j, F);
67
- let { inputUtxos: I, outputUtxos: L } = await v(i, S, C, c), R = r.findCorrectRandomization(n(31), i.userKeys.getShieldedPrivateKey()), z = {
68
- tokenNumber: C.length,
69
- nullifierAmount: I.length,
70
- outputAmount: L.length
71
- };
72
- p([I], [L], c);
73
- let { proofAArr: B, proofBArr: V, proofCArr: H, publicInputsArr: U, commitmentValidationData: W, rootHashHinkalIndex: G, encryptedOutputs: K } = await _(D[S], E, [C[0]], [I], [L], R, j.flatFee, j.variableRate, u, M, z, void 0, S);
74
- return h({
75
- chainId: S,
76
- relayAddress: M,
77
- functionName: "transact",
78
- args: {
79
- proofAArr: B,
80
- proofBArr: V,
81
- proofCArr: H,
82
- publicInputsArr: U,
83
- encryptedOutputs: K,
84
- relayerFee: j.flatFee.toString(),
85
- dimensions: z,
86
- rootHashIndex: G.toString()
87
- },
88
- accounts: P,
89
- commitmentValidationData: W,
90
- adminData: F
42
+ accounts: D,
43
+ relayerFee: w.flatFee,
44
+ variableRate: w.variableRate,
45
+ submit: {
46
+ mode: r.Relayer,
47
+ adminData: O
48
+ }
91
49
  });
92
50
  };
93
51
  //#endregion
94
- export { b as hinkalSolanaWithdraw };
52
+ export { u as hinkalSolanaWithdraw };
@@ -1 +1 @@
1
- const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../types/hinkal.types.cjs`),n=require(`../../functions/utils/time.utils.cjs`),r=require(`../utxo/Utxo.cjs`),i=require(`../../types/transact.types.cjs`),a=require(`../../functions/web3/events/getShieldedBalance.cjs`),o=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),s=require(`../../functions/snarkjs/common.snarkjs.cjs`),c=require(`../../functions/snarkjs/constructTxEnclave.cjs`),l=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),u=require(`../../functions/web3/functionCalls/submitProof.cjs`);var d=2,f=6,p=(e,t)=>{let n=Math.max(...t.map(e=>e.length))<=d?d:f;return t.map(t=>{let i=t[0];if(!i)throw Error(`hinkalTransact: inputUtxos must contain at least one note per token`);let a=[...t];for(;a.length<n;)a.push(new r.Utxo({amount:0n,erc20TokenAddress:i.erc20TokenAddress,mintAddress:i.mintAddress,nullifyingKey:e.getShieldedPrivateKey(),spendingPublicKey:e.getSpendingKeyPair().pubSpendingBJJPoint}));return a})},m=async(r,i,s)=>{let{chainId:c,erc20Addresses:u,amountChanges:d,externalAddress:f,externalActionId:m,externalActionMetadata:h,feeStructure:g,relay:_,onChainCreation:v,recipientAddress:y,recipientAmounts:b,useBlockedUtxos:x,inputUtxos:S,forceEmptyUtxos:C,originalSender:w,subAccountPrivateKey:T,emporiumOps:E}=i,D=S?p(s,S):[...await a.addPaddingToUtxos(r,c,u,d,void 0,C,x)],O=n.getCurrentTimeInSeconds().toString(),k=u.map((e,t)=>o.outputUtxoProcessing(s,D[t],d[t],O,!0,y,y===void 0?void 0:b?.map(e=>e[t]??0n)).outputUtxos),{zkCallData:A,circomData:j,dimData:M,commitmentValidationData:N}=await l.constructZkProof(r.merkleTreeHinkalByChain[c],D,k,s,m??0n,f,E??h??`0x00`,g??t.zeroFeeStructure,_??e.zeroAddress,c,v,void 0,w,T);return{zkCallData:A,circomData:j,dimData:M,commitmentValidationData:N}},h=async(e,t,n)=>{let{chainId:r,erc20Addresses:i,externalAddress:a,amountChanges:o,relay:s,feeStructure:l,externalActionId:u,externalActionMetadata:d,onChainCreation:f,recipientAddress:p,recipientAmounts:m,useBlockedUtxos:h,createBlockedUtxos:g,skipLock:_,selfOutputAmounts:v,forceEmptyUtxos:y,messageSeed:b,inputUtxos:x,originalSender:S}=t,{jobId:C,signedMessageHash:w}=await c.prepareTxEnclaveCall(e,{chainId:r,erc20Addresses:i,externalAddress:a,originalSender:S,amountChanges:o,relay:s,feeStructure:l,externalActionId:u,externalActionMetadata:d,onChainCreation:f,recipientAddress:p,recipientAmounts:m,useBlockedUtxos:h,createBlockedUtxos:g,skipLock:_,selfOutputAmounts:v,forceEmptyUtxos:y,messageSeed:b,inputCommitments:x?.flat().filter(e=>e.amount>0n).map(e=>e.getCommitment())},n),{R8:T,S:E}=n.signEddsa(BigInt(w));return{jobId:C,eddsaSignature:{R8:T,S:E}}},g=async(e,t,n)=>{let r=await u.submitProof(e,t,n);return t.submit.mode!==i.SubmitMode.ProofOnly&&t.onTxSubmitLocally?.(n.circomData),r},_=async(e,t)=>{if(t.userKeys&&!t.inputUtxos)throw Error(`hinkalTransact: userKeys requires explicit inputUtxos`);let n=t.userKeys??e.userKeys,{chainId:r,submit:a}=t;if(e.generateProofRemotely){let{jobId:o,eddsaSignature:l}=await h(e,t,n);if(a.mode===i.SubmitMode.Relayer)return c.finalizeTxEnclaveCallRelay(o,l,r,{adminData:a.adminData,authorizationData:a.authorizationData,withUniswapWorkAround:a.withUniswapWorkAround});let{zkCallData:u,circomData:d,dimData:f,commitmentValidationData:p,tronProofSignature:m}=await c.finalizeTxEnclaveCall(o,l);return g(e,t,{zkCallData:u,circomData:s.deserializeCircomData(d),dimData:f,commitmentValidationData:p,tronProofSignature:m})}return g(e,t,await m(e,t,n))};exports.hinkalTransact=_;
1
+ const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../types/hinkal.types.cjs`),n=require(`../utxo/Utxo.cjs`),r=require(`../../types/transact.types.cjs`),i=require(`../../functions/web3/events/getShieldedBalance.cjs`),a=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),o=require(`../../functions/snarkjs/common.snarkjs.cjs`),s=require(`../../functions/snarkjs/constructTxEnclave.cjs`),c=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),l=require(`../../functions/web3/functionCalls/submitProof.cjs`);var u=2,d=6,f=(e,t)=>{let r=Math.max(...t.map(e=>e.length))<=u?u:d;return t.map(t=>{let i=t[0];if(!i)throw Error(`hinkalTransact: inputUtxos must contain at least one note per token`);let a=[...t];for(;a.length<r;)a.push(new n.Utxo({amount:0n,erc20TokenAddress:i.erc20TokenAddress,mintAddress:i.mintAddress,nullifyingKey:e.getShieldedPrivateKey(),spendingPublicKey:e.getSpendingKeyPair().pubSpendingBJJPoint}));return a})},p=async(n,r,o)=>{let{chainId:s,erc20Addresses:l,amountChanges:u,externalAddress:d,externalActionId:p,externalActionMetadata:m,feeStructure:h,relay:g,onChainCreation:_,recipientAddress:v,recipientAmounts:y,useBlockedUtxos:b,inputUtxos:x,forceEmptyUtxos:S,originalSender:C,subAccountPrivateKey:w,emporiumOps:T}=r,E=x?f(o,x):[...await i.addPaddingToUtxos(n,s,l,u,void 0,S,b)],D=a.buildOutputUtxos(o,E,u,v,y),{zkCallData:O,circomData:k,dimData:A,commitmentValidationData:j}=await c.constructZkProof(n.merkleTreeHinkalByChain[s],E,D,o,p??0n,d,T??m??`0x00`,h??t.zeroFeeStructure,g??e.zeroAddress,s,_,void 0,C,w);return{zkCallData:O,circomData:k,dimData:A,commitmentValidationData:j}},m=async(e,t,n)=>{let{chainId:r,erc20Addresses:i,externalAddress:a,amountChanges:o,relay:c,feeStructure:l,externalActionId:u,externalActionMetadata:d,onChainCreation:f,recipientAddress:p,recipientAmounts:m,useBlockedUtxos:h,createBlockedUtxos:g,skipLock:_,selfOutputAmounts:v,forceEmptyUtxos:y,messageSeed:b,inputUtxos:x,originalSender:S}=t,{jobId:C,signedMessageHash:w}=await s.prepareTxEnclaveCall(e,{chainId:r,erc20Addresses:i,externalAddress:a,originalSender:S,amountChanges:o,relay:c,feeStructure:l,externalActionId:u,externalActionMetadata:d,onChainCreation:f,recipientAddress:p,recipientAmounts:m,useBlockedUtxos:h,createBlockedUtxos:g,skipLock:_,selfOutputAmounts:v,forceEmptyUtxos:y,messageSeed:b,inputCommitments:s.collectInputCommitments(x)},n),{R8:T,S:E}=n.signEddsa(BigInt(w));return{jobId:C,eddsaSignature:{R8:T,S:E}}},h=async(e,t,n)=>{let i=await l.submitProof(e,t,n);return t.submit.mode!==r.SubmitMode.ProofOnly&&t.onTxSubmitLocally?.(n.circomData),i},g=async(e,t)=>{if(t.userKeys&&!t.inputUtxos)throw Error(`hinkalTransact: userKeys requires explicit inputUtxos`);let n=t.userKeys??e.userKeys,{chainId:i,submit:a}=t;if(e.generateProofRemotely){let{jobId:c,eddsaSignature:l}=await m(e,t,n);if(a.mode===r.SubmitMode.Relayer)return s.finalizeTxEnclaveCallRelay(c,l,i,{adminData:a.adminData,authorizationData:a.authorizationData,withUniswapWorkAround:a.withUniswapWorkAround});let{zkCallData:u,circomData:d,dimData:f,commitmentValidationData:p,tronProofSignature:g}=await s.finalizeTxEnclaveCall(c,l);return h(e,t,{zkCallData:u,circomData:o.deserializeCircomData(d),dimData:f,commitmentValidationData:p,tronProofSignature:g})}return h(e,t,await p(e,t,n))};exports.hinkalTransact=g;
@@ -1,22 +1,21 @@
1
1
  import { zeroAddress as e } from "../../constants/protocol.constants.mjs";
2
2
  import { zeroFeeStructure as t } from "../../types/hinkal.types.mjs";
3
- import { getCurrentTimeInSeconds as n } from "../../functions/utils/time.utils.mjs";
4
- import { Utxo as r } from "../utxo/Utxo.mjs";
5
- import { SubmitMode as i } from "../../types/transact.types.mjs";
6
- import { addPaddingToUtxos as a } from "../../functions/web3/events/getShieldedBalance.mjs";
7
- import { outputUtxoProcessing as o } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
8
- import { deserializeCircomData as s } from "../../functions/snarkjs/common.snarkjs.mjs";
9
- import { finalizeTxEnclaveCall as c, finalizeTxEnclaveCallRelay as l, prepareTxEnclaveCall as u } from "../../functions/snarkjs/constructTxEnclave.mjs";
3
+ import { Utxo as n } from "../utxo/Utxo.mjs";
4
+ import { SubmitMode as r } from "../../types/transact.types.mjs";
5
+ import { addPaddingToUtxos as i } from "../../functions/web3/events/getShieldedBalance.mjs";
6
+ import { buildOutputUtxos as a } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
7
+ import { deserializeCircomData as o } from "../../functions/snarkjs/common.snarkjs.mjs";
8
+ import { collectInputCommitments as s, finalizeTxEnclaveCall as c, finalizeTxEnclaveCallRelay as l, prepareTxEnclaveCall as u } from "../../functions/snarkjs/constructTxEnclave.mjs";
10
9
  import { constructZkProof as d } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
11
10
  import { submitProof as f } from "../../functions/web3/functionCalls/submitProof.mjs";
12
11
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalTransact.ts
13
12
  var p = 2, m = 6, h = (e, t) => {
14
- let n = Math.max(...t.map((e) => e.length)) <= p ? p : m;
13
+ let r = Math.max(...t.map((e) => e.length)) <= p ? p : m;
15
14
  return t.map((t) => {
16
15
  let i = t[0];
17
16
  if (!i) throw Error("hinkalTransact: inputUtxos must contain at least one note per token");
18
17
  let a = [...t];
19
- for (; a.length < n;) a.push(new r({
18
+ for (; a.length < r;) a.push(new n({
20
19
  amount: 0n,
21
20
  erc20TokenAddress: i.erc20TokenAddress,
22
21
  mintAddress: i.mintAddress,
@@ -25,60 +24,60 @@ var p = 2, m = 6, h = (e, t) => {
25
24
  }));
26
25
  return a;
27
26
  });
28
- }, g = async (r, i, s) => {
29
- let { chainId: c, erc20Addresses: l, amountChanges: u, externalAddress: f, externalActionId: p, externalActionMetadata: m, feeStructure: g, relay: _, onChainCreation: v, recipientAddress: y, recipientAmounts: b, useBlockedUtxos: x, inputUtxos: S, forceEmptyUtxos: C, originalSender: w, subAccountPrivateKey: T, emporiumOps: E } = i, D = S ? h(s, S) : [...await a(r, c, l, u, void 0, C, x)], O = n().toString(), k = l.map((e, t) => o(s, D[t], u[t], O, !0, y, y === void 0 ? void 0 : b?.map((e) => e[t] ?? 0n)).outputUtxos), { zkCallData: A, circomData: j, dimData: M, commitmentValidationData: N } = await d(r.merkleTreeHinkalByChain[c], D, k, s, p ?? 0n, f, E ?? m ?? "0x00", g ?? t, _ ?? e, c, v, void 0, w, T);
27
+ }, g = async (n, r, o) => {
28
+ let { chainId: s, erc20Addresses: c, amountChanges: l, externalAddress: u, externalActionId: f, externalActionMetadata: p, feeStructure: m, relay: g, onChainCreation: _, recipientAddress: v, recipientAmounts: y, useBlockedUtxos: b, inputUtxos: x, forceEmptyUtxos: S, originalSender: C, subAccountPrivateKey: w, emporiumOps: T } = r, E = x ? h(o, x) : [...await i(n, s, c, l, void 0, S, b)], D = a(o, E, l, v, y), { zkCallData: O, circomData: k, dimData: A, commitmentValidationData: j } = await d(n.merkleTreeHinkalByChain[s], E, D, o, f ?? 0n, u, T ?? p ?? "0x00", m ?? t, g ?? e, s, _, void 0, C, w);
30
29
  return {
31
- zkCallData: A,
32
- circomData: j,
33
- dimData: M,
34
- commitmentValidationData: N
30
+ zkCallData: O,
31
+ circomData: k,
32
+ dimData: A,
33
+ commitmentValidationData: j
35
34
  };
36
35
  }, _ = async (e, t, n) => {
37
- let { chainId: r, erc20Addresses: i, externalAddress: a, amountChanges: o, relay: s, feeStructure: c, externalActionId: l, externalActionMetadata: d, onChainCreation: f, recipientAddress: p, recipientAmounts: m, useBlockedUtxos: h, createBlockedUtxos: g, skipLock: _, selfOutputAmounts: v, forceEmptyUtxos: y, messageSeed: b, inputUtxos: x, originalSender: S } = t, { jobId: C, signedMessageHash: w } = await u(e, {
36
+ let { chainId: r, erc20Addresses: i, externalAddress: a, amountChanges: o, relay: c, feeStructure: l, externalActionId: d, externalActionMetadata: f, onChainCreation: p, recipientAddress: m, recipientAmounts: h, useBlockedUtxos: g, createBlockedUtxos: _, skipLock: v, selfOutputAmounts: y, forceEmptyUtxos: b, messageSeed: x, inputUtxos: S, originalSender: C } = t, { jobId: w, signedMessageHash: T } = await u(e, {
38
37
  chainId: r,
39
38
  erc20Addresses: i,
40
39
  externalAddress: a,
41
- originalSender: S,
40
+ originalSender: C,
42
41
  amountChanges: o,
43
- relay: s,
44
- feeStructure: c,
45
- externalActionId: l,
46
- externalActionMetadata: d,
47
- onChainCreation: f,
48
- recipientAddress: p,
49
- recipientAmounts: m,
50
- useBlockedUtxos: h,
51
- createBlockedUtxos: g,
52
- skipLock: _,
53
- selfOutputAmounts: v,
54
- forceEmptyUtxos: y,
55
- messageSeed: b,
56
- inputCommitments: x?.flat().filter((e) => e.amount > 0n).map((e) => e.getCommitment())
57
- }, n), { R8: T, S: E } = n.signEddsa(BigInt(w));
42
+ relay: c,
43
+ feeStructure: l,
44
+ externalActionId: d,
45
+ externalActionMetadata: f,
46
+ onChainCreation: p,
47
+ recipientAddress: m,
48
+ recipientAmounts: h,
49
+ useBlockedUtxos: g,
50
+ createBlockedUtxos: _,
51
+ skipLock: v,
52
+ selfOutputAmounts: y,
53
+ forceEmptyUtxos: b,
54
+ messageSeed: x,
55
+ inputCommitments: s(S)
56
+ }, n), { R8: E, S: D } = n.signEddsa(BigInt(T));
58
57
  return {
59
- jobId: C,
58
+ jobId: w,
60
59
  eddsaSignature: {
61
- R8: T,
62
- S: E
60
+ R8: E,
61
+ S: D
63
62
  }
64
63
  };
65
64
  }, v = async (e, t, n) => {
66
- let r = await f(e, t, n);
67
- return t.submit.mode !== i.ProofOnly && t.onTxSubmitLocally?.(n.circomData), r;
65
+ let i = await f(e, t, n);
66
+ return t.submit.mode !== r.ProofOnly && t.onTxSubmitLocally?.(n.circomData), i;
68
67
  }, y = async (e, t) => {
69
68
  if (t.userKeys && !t.inputUtxos) throw Error("hinkalTransact: userKeys requires explicit inputUtxos");
70
- let n = t.userKeys ?? e.userKeys, { chainId: r, submit: a } = t;
69
+ let n = t.userKeys ?? e.userKeys, { chainId: i, submit: a } = t;
71
70
  if (e.generateProofRemotely) {
72
- let { jobId: o, eddsaSignature: u } = await _(e, t, n);
73
- if (a.mode === i.Relayer) return l(o, u, r, {
71
+ let { jobId: s, eddsaSignature: u } = await _(e, t, n);
72
+ if (a.mode === r.Relayer) return l(s, u, i, {
74
73
  adminData: a.adminData,
75
74
  authorizationData: a.authorizationData,
76
75
  withUniswapWorkAround: a.withUniswapWorkAround
77
76
  });
78
- let { zkCallData: d, circomData: f, dimData: p, commitmentValidationData: m, tronProofSignature: h } = await c(o, u);
77
+ let { zkCallData: d, circomData: f, dimData: p, commitmentValidationData: m, tronProofSignature: h } = await c(s, u);
79
78
  return v(e, t, {
80
79
  zkCallData: d,
81
- circomData: s(f),
80
+ circomData: o(f),
82
81
  dimData: p,
83
82
  commitmentValidationData: m,
84
83
  tronProofSignature: h
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../functions/utils/amounts.utils.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(`../../functions/utils/encodeTokenWithId.cjs`),s=require(`../../functions/utils/addresses.cjs`),c=require(`../../functions/utils/tron.utils.cjs`),l=require(`../../functions/web3/events/getInputUtxoAndBalance.cjs`),u=require(`../../types/external-action.types.cjs`),d=require(`../../types/transact.types.cjs`),f=require(`../../error-handling/logger.cjs`),p=require(`../../functions/utils/token-check.utils.cjs`),m=require(`../../functions/web3/events/getShieldedBalance.cjs`),h=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),g=require(`../../functions/snarkjs/common.snarkjs.cjs`),_=require(`../../functions/snarkjs/constructTxEnclave.cjs`),v=require(`../../functions/pre-transaction/getFeeStructure.cjs`),y=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),b=require(`./hinkalTransact.cjs`),x=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),S=require(`../../functions/auto-deposit-back-helpers/update-hinkal.cjs`),C=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);let w=require(`ethers`);var T=6,E=async(e,t,n,r)=>{let i=[...await m.addPaddingToUtxos(e,t,n,r,6,!1,!0)][0],o=a.getCurrentTimeInSeconds().toString(),{outputUtxos:s}=h.outputUtxoProcessing(e.userKeys,i,r[0],o);return{inputUtxos:i,outputUtxos:s}},D=async(e,t,r,i)=>{let a=r.erc20TokenAddress,o=await e.getEthereumAddressByChain(t),[l,d]=await Promise.all([v.getFeeStructure(t,a,[a],u.ExternalActionId.Transact),e.getRandomRelay(t,!0)]);if(!d)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let p=await _.prepareStuckWithdrawEnclaveCall(e,{chainId:t,erc20Address:a,externalAddress:c.addressToHexFormat(i),relay:d,feeStructure:l,hashedEthereumAddress:s.hashEthereumAddress(o)}),m=[];for(let n=0;n<p.length;n+=1)try{let{jobId:r,signedMessageHash:i}=p[n],{R8:a,S:o}=e.userKeys.signEddsa(BigInt(i));m.push(await _.finalizeTxEnclaveCallRelay(r,{R8:a,S:o},t))}catch(e){if(!m.length)throw e;return f.Logger.error(`Stuck withdrawal partially submitted (${m.length}/${p.length})`,e),m}return m},O=async(e,t,n)=>{let r=await Promise.all(Array.from({length:T},async(r,i)=>{let a=i+1,o=await v.getFeeStructure(e,t,[t],u.ExternalActionId.Transact,void 0,void 0,{mintTo:t,recipient:n,nullifierCount:a});return[String(a),o]}));return Object.fromEntries(r)},k=async(e,t,r,i)=>{let a=r.erc20TokenAddress,[o,c,l]=await Promise.all([e.getEthereumAddressByChain(t),e.getRandomRelay(t,!0),O(t,a,i)]);if(!c)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let u=await _.prepareSolanaStuckWithdrawEnclaveCall(e,{chainId:t,mintAddress:a,recipient:i,relayAddress:c,accounts:{recipient:i,mint:a===`11111111111111111111111111111111`?void 0:a},feeStructures:l,hashedEthereumAddress:s.hashEthereumAddress(o)}),d=[];for(let n=0;n<u.length;n+=1){let{jobId:r,signedMessageHash:i}=u[n],{R8:a,S:o}=e.userKeys.signEddsa(BigInt(i));d.push(await _.finalizeSolanaTxEnclaveCallRelay(r,{R8:a,S:o},t))}return d},A=async(e,t,r,i,a)=>{let o=[r.erc20TokenAddress],s=r.erc20TokenAddress,[l,f]=await Promise.all([v.getFeeStructure(t,s,o,u.ExternalActionId.Transact),e.getRandomRelay(t,!0)]);if(!f)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let p=c.addressToHexFormat(a),m=i-l.flatFee;if(m<=0n)throw Error(`Insufficient balance to cover fee. Balance: ${i}, Fee: ${l.flatFee}`);let h=[-m];return await C.mergeWithFeeStructure(t,o,h,l),{tx:await b.hinkalTransact(e,{chainId:t,erc20Addresses:o,amountChanges:h,externalAddress:p,feeStructure:l,relay:f,useBlockedUtxos:!0,onTxSubmitLocally:n=>{S.updateHinkal(t,e,n.inputNullifiers?.flat(),n.outCommitments?.flat(),n.encryptedOutputs?.flat())},submit:{mode:d.SubmitMode.Relayer}}),amountToRecipient:m}},j=async(t,a,o,s,c,l)=>{let d=[o.erc20TokenAddress],{originalDeployer:f}=e.networkRegistry[a].contractData;if(!f)throw Error(`missing data`);let{userKeys:p,merkleTreeHinkalByChain:m}=t,h=o.erc20TokenAddress,[_,b]=await Promise.all([v.getFeeStructure(a,h,d,u.ExternalActionId.Transact,void 0,void 0,{mintTo:d[0],recipient:c,nullifierCount:l}),t.getRandomRelay(a,!0)]);if(!b)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let C=s-_.flatFee;if(C<=0n)throw Error(`Insufficient balance to cover fee. Balance: ${s}, Fee: ${_.flatFee}`);let T=[-C];T[0]-=_.flatFee;let{inputUtxos:D,outputUtxos:O}=await E(t,a,d,T),k=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),t.userKeys.getShieldedPrivateKey()),A={tokenNumber:d.length,nullifierAmount:D.length,outputAmount:O.length},{proofAArr:j,proofBArr:M,proofCArr:N,publicInputsArr:P,commitmentValidationData:F,rootHashHinkalIndex:I,encryptedOutputs:L}=await x.constructSolanaZkProof(m[a],p,[d[0]],[D],[O],k,_.flatFee,_.variableRate,c,b,A,void 0,a),R={recipient:c,mint:d[0]===`11111111111111111111111111111111`?void 0:d[0]},z=await y.solanaTransactCallRelayer({chainId:a,relayAddress:b,functionName:`transact`,args:{proofAArr:j,proofBArr:M,proofCArr:N,publicInputsArr:P,encryptedOutputs:L,relayerFee:_.flatFee.toString(),dimensions:A,rootHashIndex:I.toString()},accounts:R,commitmentValidationData:F});return S.updateHinkal(a,t,D.map(e=>e.getNullifier()),g.buildOutCommitments([O]).flat(),L.map(e=>w.ethers.hexlify(new Uint8Array(e)))),{tx:z,amountToRecipient:C}},M=async(t,n,r,i,a,o)=>e.isSolanaLike(n)?j(t,n,r,i,a,o):A(t,n,r,i,a),N=async(r,i,a)=>{let s=p.validateAndGetChainId([i]);if(r.generateProofRemotely){let t=e.isSolanaLike(s)?await k(r,s,i,a):await D(r,s,i,a);if(!t.length)throw Error(n.transactionErrorCodes.NO_STUCK_BALANCE_TO_WITHDRAW);return t}let c=[],u=o.normalizeTokenAddress(s,i.erc20TokenAddress);await r.resetMerkleTreesIfNecessary([s]);let d=((await l.getInputUtxoAndBalancePerToken({hinkal:r,sliceIfMore6:!1,useBlockedUtxos:!0,chainId:s}))?.get(u)??[]).filter(e=>e.amount>0n).sort((e,t)=>Number(t.amount-e.amount));if(!d.length)throw Error(n.transactionErrorCodes.NO_STUCK_BALANCE_TO_WITHDRAW);for(let e=0;e<d.length;e+=T){let n=d.slice(e,e+T),o=t.countTotalAmountInUtxos(n);try{let{tx:e}=await M(r,s,i,o,a,n.length);c.push(e)}catch(e){if(!c.length)throw e;return f.Logger.error(`Stuck withdrawal partially submitted (${c.length}/${Math.ceil(d.length/T)})`,e),c}}return c};exports.hinkalWithdrawStuckUtxos=N;
1
+ const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../functions/utils/amounts.utils.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/utils/encodeTokenWithId.cjs`),i=require(`../../functions/utils/addresses.cjs`),a=require(`../../functions/utils/tron.utils.cjs`),o=require(`../../functions/web3/events/getInputUtxoAndBalance.cjs`),s=require(`../../types/external-action.types.cjs`),c=require(`../../types/transact.types.cjs`),l=require(`../../types/solana-transact.types.cjs`),u=require(`../../error-handling/logger.cjs`),d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/snarkjs/constructTxEnclave.cjs`),p=require(`../../functions/pre-transaction/getFeeStructure.cjs`),m=require(`./hinkalTransact.cjs`),h=require(`../../functions/auto-deposit-back-helpers/update-hinkal.cjs`),g=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`),_=require(`./hinkalSolanaTransact.cjs`);var v=6,y=async(e,t,r,o)=>{let c=r.erc20TokenAddress,l=await e.getEthereumAddressByChain(t),[d,m]=await Promise.all([p.getFeeStructure(t,c,[c],s.ExternalActionId.Transact),e.getRandomRelay(t,!0)]);if(!m)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let h=await f.prepareStuckWithdrawEnclaveCall(e,{chainId:t,erc20Address:c,externalAddress:a.addressToHexFormat(o),relay:m,feeStructure:d,hashedEthereumAddress:i.hashEthereumAddress(l)}),g=[];for(let n=0;n<h.length;n+=1)try{let{jobId:r,signedMessageHash:i}=h[n],{R8:a,S:o}=e.userKeys.signEddsa(BigInt(i));g.push(await f.finalizeTxEnclaveCallRelay(r,{R8:a,S:o},t))}catch(e){if(!g.length)throw e;return u.Logger.error(`Stuck withdrawal partially submitted (${g.length}/${h.length})`,e),g}return g},b=async(e,t,n)=>{let r=await Promise.all(Array.from({length:v},async(r,i)=>{let a=i+1,o=await p.getFeeStructure(e,t,[t],s.ExternalActionId.Transact,void 0,void 0,{mintTo:t,recipient:n,nullifierCount:a});return[String(a),o]}));return Object.fromEntries(r)},x=async(e,t,r,a)=>{let o=r.erc20TokenAddress,[s,c,l]=await Promise.all([e.getEthereumAddressByChain(t),e.getRandomRelay(t,!0),b(t,o,a)]);if(!c)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let u=await f.prepareSolanaStuckWithdrawEnclaveCall(e,{chainId:t,mintAddress:o,recipient:a,relayAddress:c,accounts:{recipient:a,mint:o===`11111111111111111111111111111111`?void 0:o},feeStructures:l,hashedEthereumAddress:i.hashEthereumAddress(s)}),d=[];for(let n=0;n<u.length;n+=1){let{jobId:r,signedMessageHash:i}=u[n],{R8:a,S:o}=e.userKeys.signEddsa(BigInt(i));d.push(await f.finalizeSolanaTxEnclaveCallRelay(r,{R8:a,S:o},t))}return d},S=async(e,t,r,i,o)=>{let l=[r.erc20TokenAddress],u=r.erc20TokenAddress,[d,f]=await Promise.all([p.getFeeStructure(t,u,l,s.ExternalActionId.Transact),e.getRandomRelay(t,!0)]);if(!f)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let _=a.addressToHexFormat(o),v=i-d.flatFee;if(v<=0n)throw Error(`Insufficient balance to cover fee. Balance: ${i}, Fee: ${d.flatFee}`);let y=[-v];return await g.mergeWithFeeStructure(t,l,y,d),{tx:await m.hinkalTransact(e,{chainId:t,erc20Addresses:l,amountChanges:y,externalAddress:_,feeStructure:d,relay:f,useBlockedUtxos:!0,onTxSubmitLocally:n=>{h.updateHinkal(t,e,n.inputNullifiers?.flat(),n.outCommitments?.flat(),n.encryptedOutputs?.flat())},submit:{mode:c.SubmitMode.Relayer}}),amountToRecipient:v}},C=async(t,r,i,a,o,c)=>{let u=[i.erc20TokenAddress],{originalDeployer:d}=e.networkRegistry[r].contractData;if(!d)throw Error(`missing data`);let f=i.erc20TokenAddress,[m,g]=await Promise.all([p.getFeeStructure(r,f,u,s.ExternalActionId.Transact,void 0,void 0,{mintTo:u[0],recipient:o,nullifierCount:c}),t.getRandomRelay(r,!0)]);if(!g)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let v=a-m.flatFee;if(v<=0n)throw Error(`Insufficient balance to cover fee. Balance: ${a}, Fee: ${m.flatFee}`);let y=[-v];return y[0]-=m.flatFee,{tx:await _.hinkalSolanaTransact(t,{chainId:r,mintAddresses:u,amountChanges:y,relayAddress:g,recipient:o,signer:g,functionName:`transact`,accounts:{recipient:o,mint:u[0]===`11111111111111111111111111111111`?void 0:u[0]},relayerFee:m.flatFee,variableRate:m.variableRate,useBlockedUtxos:!0,onTxSubmitLocally:({inputNullifiers:e,outCommitments:n,encryptedOutputs:i})=>{h.updateHinkal(r,t,e,n,i)},submit:{mode:l.SolanaSubmitMode.Relayer}}),amountToRecipient:v}},w=async(t,n,r,i,a,o)=>e.isSolanaLike(n)?C(t,n,r,i,a,o):S(t,n,r,i,a),T=async(i,a,s)=>{let c=d.validateAndGetChainId([a]);if(i.generateProofRemotely){let t=e.isSolanaLike(c)?await x(i,c,a,s):await y(i,c,a,s);if(!t.length)throw Error(n.transactionErrorCodes.NO_STUCK_BALANCE_TO_WITHDRAW);return t}let l=[],f=r.normalizeTokenAddress(c,a.erc20TokenAddress);await i.resetMerkleTreesIfNecessary([c]);let p=((await o.getInputUtxoAndBalancePerToken({hinkal:i,sliceIfMore6:!1,useBlockedUtxos:!0,chainId:c}))?.get(f)??[]).filter(e=>e.amount>0n).sort((e,t)=>Number(t.amount-e.amount));if(!p.length)throw Error(n.transactionErrorCodes.NO_STUCK_BALANCE_TO_WITHDRAW);for(let e=0;e<p.length;e+=v){let n=p.slice(e,e+v),r=t.countTotalAmountInUtxos(n);try{let{tx:e}=await w(i,c,a,r,s,n.length);l.push(e)}catch(e){if(!l.length)throw e;return u.Logger.error(`Stuck withdrawal partially submitted (${l.length}/${Math.ceil(p.length/v)})`,e),l}}return l};exports.hinkalWithdrawStuckUtxos=T;
@@ -2,60 +2,47 @@ import { isSolanaLike as e, networkRegistry as t } from "../../constants/chains.
2
2
  import "../../constants/protocol.constants.mjs";
3
3
  import { countTotalAmountInUtxos as n } from "../../functions/utils/amounts.utils.mjs";
4
4
  import { transactionErrorCodes as r } from "../../error-handling/error-codes.constants.mjs";
5
- import { randomBigInt as i } from "../../functions/web3/etherFunctions.mjs";
6
- import { UserKeys as a } from "../crypto-keys/keys.mjs";
7
- import { getCurrentTimeInSeconds as o } from "../../functions/utils/time.utils.mjs";
8
- import { normalizeTokenAddress as s } from "../../functions/utils/encodeTokenWithId.mjs";
9
- import { hashEthereumAddress as c } from "../../functions/utils/addresses.mjs";
10
- import { addressToHexFormat as l } from "../../functions/utils/tron.utils.mjs";
11
- import { getInputUtxoAndBalancePerToken as u } from "../../functions/web3/events/getInputUtxoAndBalance.mjs";
12
- import { ExternalActionId as d } from "../../types/external-action.types.mjs";
13
- import { SubmitMode as f } from "../../types/transact.types.mjs";
14
- import { Logger as p } from "../../error-handling/logger.mjs";
15
- import { validateAndGetChainId as m } from "../../functions/utils/token-check.utils.mjs";
16
- import { addPaddingToUtxos as h } from "../../functions/web3/events/getShieldedBalance.mjs";
17
- import { outputUtxoProcessing as g } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
18
- import { buildOutCommitments as _ } from "../../functions/snarkjs/common.snarkjs.mjs";
19
- import { finalizeSolanaTxEnclaveCallRelay as v, finalizeTxEnclaveCallRelay as y, prepareSolanaStuckWithdrawEnclaveCall as b, prepareStuckWithdrawEnclaveCall as x } from "../../functions/snarkjs/constructTxEnclave.mjs";
20
- import { getFeeStructure as S } from "../../functions/pre-transaction/getFeeStructure.mjs";
21
- import { solanaTransactCallRelayer as C } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
22
- import { hinkalTransact as w } from "./hinkalTransact.mjs";
23
- import { constructSolanaZkProof as T } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
24
- import { updateHinkal as E } from "../../functions/auto-deposit-back-helpers/update-hinkal.mjs";
25
- import { mergeWithFeeStructure as D } from "../../functions/pre-transaction/merge-with-fee-structure.mjs";
26
- import { ethers as O } from "ethers";
5
+ import { normalizeTokenAddress as i } from "../../functions/utils/encodeTokenWithId.mjs";
6
+ import { hashEthereumAddress as a } from "../../functions/utils/addresses.mjs";
7
+ import { addressToHexFormat as o } from "../../functions/utils/tron.utils.mjs";
8
+ import { getInputUtxoAndBalancePerToken as s } from "../../functions/web3/events/getInputUtxoAndBalance.mjs";
9
+ import { ExternalActionId as c } from "../../types/external-action.types.mjs";
10
+ import { SubmitMode as l } from "../../types/transact.types.mjs";
11
+ import { SolanaSubmitMode as u } from "../../types/solana-transact.types.mjs";
12
+ import { Logger as d } from "../../error-handling/logger.mjs";
13
+ import { validateAndGetChainId as f } from "../../functions/utils/token-check.utils.mjs";
14
+ import { finalizeSolanaTxEnclaveCallRelay as p, finalizeTxEnclaveCallRelay as m, prepareSolanaStuckWithdrawEnclaveCall as h, prepareStuckWithdrawEnclaveCall as g } from "../../functions/snarkjs/constructTxEnclave.mjs";
15
+ import { getFeeStructure as _ } from "../../functions/pre-transaction/getFeeStructure.mjs";
16
+ import { hinkalTransact as v } from "./hinkalTransact.mjs";
17
+ import { updateHinkal as y } from "../../functions/auto-deposit-back-helpers/update-hinkal.mjs";
18
+ import { mergeWithFeeStructure as b } from "../../functions/pre-transaction/merge-with-fee-structure.mjs";
19
+ import { hinkalSolanaTransact as x } from "./hinkalSolanaTransact.mjs";
27
20
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.ts
28
- var k = 6, A = async (e, t, n, r) => {
29
- let i = [...await h(e, t, n, r, 6, !1, !0)][0], a = o().toString(), { outputUtxos: s } = g(e.userKeys, i, r[0], a);
30
- return {
31
- inputUtxos: i,
32
- outputUtxos: s
33
- };
34
- }, j = async (e, t, n, i) => {
35
- let a = n.erc20TokenAddress, o = await e.getEthereumAddressByChain(t), [s, u] = await Promise.all([S(t, a, [a], d.Transact), e.getRandomRelay(t, !0)]);
36
- if (!u) throw Error(r.RELAYER_NOT_AVAILABLE);
37
- let f = await x(e, {
21
+ var S = 6, C = async (e, t, n, i) => {
22
+ let s = n.erc20TokenAddress, l = await e.getEthereumAddressByChain(t), [u, f] = await Promise.all([_(t, s, [s], c.Transact), e.getRandomRelay(t, !0)]);
23
+ if (!f) throw Error(r.RELAYER_NOT_AVAILABLE);
24
+ let p = await g(e, {
38
25
  chainId: t,
39
- erc20Address: a,
40
- externalAddress: l(i),
41
- relay: u,
42
- feeStructure: s,
43
- hashedEthereumAddress: c(o)
44
- }), m = [];
45
- for (let n = 0; n < f.length; n += 1) try {
46
- let { jobId: r, signedMessageHash: i } = f[n], { R8: a, S: o } = e.userKeys.signEddsa(BigInt(i));
47
- m.push(await y(r, {
26
+ erc20Address: s,
27
+ externalAddress: o(i),
28
+ relay: f,
29
+ feeStructure: u,
30
+ hashedEthereumAddress: a(l)
31
+ }), h = [];
32
+ for (let n = 0; n < p.length; n += 1) try {
33
+ let { jobId: r, signedMessageHash: i } = p[n], { R8: a, S: o } = e.userKeys.signEddsa(BigInt(i));
34
+ h.push(await m(r, {
48
35
  R8: a,
49
36
  S: o
50
37
  }, t));
51
38
  } catch (e) {
52
- if (!m.length) throw e;
53
- return p.error(`Stuck withdrawal partially submitted (${m.length}/${f.length})`, e), m;
39
+ if (!h.length) throw e;
40
+ return d.error(`Stuck withdrawal partially submitted (${h.length}/${p.length})`, e), h;
54
41
  }
55
- return m;
56
- }, M = async (e, t, n) => {
57
- let r = await Promise.all(Array.from({ length: k }, async (r, i) => {
58
- let a = i + 1, o = await S(e, t, [t], d.Transact, void 0, void 0, {
42
+ return h;
43
+ }, w = async (e, t, n) => {
44
+ let r = await Promise.all(Array.from({ length: S }, async (r, i) => {
45
+ let a = i + 1, o = await _(e, t, [t], c.Transact, void 0, void 0, {
59
46
  mintTo: t,
60
47
  recipient: n,
61
48
  nullifierCount: a
@@ -63,123 +50,117 @@ var k = 6, A = async (e, t, n, r) => {
63
50
  return [String(a), o];
64
51
  }));
65
52
  return Object.fromEntries(r);
66
- }, N = async (e, t, n, i) => {
67
- let a = n.erc20TokenAddress, [o, s, l] = await Promise.all([
53
+ }, T = async (e, t, n, i) => {
54
+ let o = n.erc20TokenAddress, [s, c, l] = await Promise.all([
68
55
  e.getEthereumAddressByChain(t),
69
56
  e.getRandomRelay(t, !0),
70
- M(t, a, i)
57
+ w(t, o, i)
71
58
  ]);
72
- if (!s) throw Error(r.RELAYER_NOT_AVAILABLE);
73
- let u = await b(e, {
59
+ if (!c) throw Error(r.RELAYER_NOT_AVAILABLE);
60
+ let u = await h(e, {
74
61
  chainId: t,
75
- mintAddress: a,
62
+ mintAddress: o,
76
63
  recipient: i,
77
- relayAddress: s,
64
+ relayAddress: c,
78
65
  accounts: {
79
66
  recipient: i,
80
- mint: a === "11111111111111111111111111111111" ? void 0 : a
67
+ mint: o === "11111111111111111111111111111111" ? void 0 : o
81
68
  },
82
69
  feeStructures: l,
83
- hashedEthereumAddress: c(o)
70
+ hashedEthereumAddress: a(s)
84
71
  }), d = [];
85
72
  for (let n = 0; n < u.length; n += 1) {
86
73
  let { jobId: r, signedMessageHash: i } = u[n], { R8: a, S: o } = e.userKeys.signEddsa(BigInt(i));
87
- d.push(await v(r, {
74
+ d.push(await p(r, {
88
75
  R8: a,
89
76
  S: o
90
77
  }, t));
91
78
  }
92
79
  return d;
93
- }, P = async (e, t, n, i, a) => {
94
- let o = [n.erc20TokenAddress], s = n.erc20TokenAddress, [c, u] = await Promise.all([S(t, s, o, d.Transact), e.getRandomRelay(t, !0)]);
95
- if (!u) throw Error(r.RELAYER_NOT_AVAILABLE);
96
- let p = l(a), m = i - c.flatFee;
97
- if (m <= 0n) throw Error(`Insufficient balance to cover fee. Balance: ${i}, Fee: ${c.flatFee}`);
80
+ }, E = async (e, t, n, i, a) => {
81
+ let s = [n.erc20TokenAddress], u = n.erc20TokenAddress, [d, f] = await Promise.all([_(t, u, s, c.Transact), e.getRandomRelay(t, !0)]);
82
+ if (!f) throw Error(r.RELAYER_NOT_AVAILABLE);
83
+ let p = o(a), m = i - d.flatFee;
84
+ if (m <= 0n) throw Error(`Insufficient balance to cover fee. Balance: ${i}, Fee: ${d.flatFee}`);
98
85
  let h = [-m];
99
- return await D(t, o, h, c), {
100
- tx: await w(e, {
86
+ return await b(t, s, h, d), {
87
+ tx: await v(e, {
101
88
  chainId: t,
102
- erc20Addresses: o,
89
+ erc20Addresses: s,
103
90
  amountChanges: h,
104
91
  externalAddress: p,
105
- feeStructure: c,
106
- relay: u,
92
+ feeStructure: d,
93
+ relay: f,
107
94
  useBlockedUtxos: !0,
108
95
  onTxSubmitLocally: (n) => {
109
- E(t, e, n.inputNullifiers?.flat(), n.outCommitments?.flat(), n.encryptedOutputs?.flat());
96
+ y(t, e, n.inputNullifiers?.flat(), n.outCommitments?.flat(), n.encryptedOutputs?.flat());
110
97
  },
111
- submit: { mode: f.Relayer }
98
+ submit: { mode: l.Relayer }
112
99
  }),
113
100
  amountToRecipient: m
114
101
  };
115
- }, F = async (e, n, o, s, c, l) => {
116
- let u = [o.erc20TokenAddress], { originalDeployer: f } = t[n].contractData;
117
- if (!f) throw Error("missing data");
118
- let { userKeys: p, merkleTreeHinkalByChain: m } = e, h = o.erc20TokenAddress, [g, v] = await Promise.all([S(n, h, u, d.Transact, void 0, void 0, {
119
- mintTo: u[0],
120
- recipient: c,
121
- nullifierCount: l
102
+ }, D = async (e, n, i, a, o, s) => {
103
+ let l = [i.erc20TokenAddress], { originalDeployer: d } = t[n].contractData;
104
+ if (!d) throw Error("missing data");
105
+ let f = i.erc20TokenAddress, [p, m] = await Promise.all([_(n, f, l, c.Transact, void 0, void 0, {
106
+ mintTo: l[0],
107
+ recipient: o,
108
+ nullifierCount: s
122
109
  }), e.getRandomRelay(n, !0)]);
123
- if (!v) throw Error(r.RELAYER_NOT_AVAILABLE);
124
- let y = s - g.flatFee;
125
- if (y <= 0n) throw Error(`Insufficient balance to cover fee. Balance: ${s}, Fee: ${g.flatFee}`);
126
- let b = [-y];
127
- b[0] -= g.flatFee;
128
- let { inputUtxos: x, outputUtxos: w } = await A(e, n, u, b), D = a.findCorrectRandomization(i(31), e.userKeys.getShieldedPrivateKey()), k = {
129
- tokenNumber: u.length,
130
- nullifierAmount: x.length,
131
- outputAmount: w.length
132
- }, { proofAArr: j, proofBArr: M, proofCArr: N, publicInputsArr: P, commitmentValidationData: F, rootHashHinkalIndex: I, encryptedOutputs: L } = await T(m[n], p, [u[0]], [x], [w], D, g.flatFee, g.variableRate, c, v, k, void 0, n), R = {
133
- recipient: c,
134
- mint: u[0] === "11111111111111111111111111111111" ? void 0 : u[0]
135
- }, z = await C({
136
- chainId: n,
137
- relayAddress: v,
138
- functionName: "transact",
139
- args: {
140
- proofAArr: j,
141
- proofBArr: M,
142
- proofCArr: N,
143
- publicInputsArr: P,
144
- encryptedOutputs: L,
145
- relayerFee: g.flatFee.toString(),
146
- dimensions: k,
147
- rootHashIndex: I.toString()
148
- },
149
- accounts: R,
150
- commitmentValidationData: F
151
- });
152
- return E(n, e, x.map((e) => e.getNullifier()), _([w]).flat(), L.map((e) => O.hexlify(new Uint8Array(e)))), {
153
- tx: z,
154
- amountToRecipient: y
110
+ if (!m) throw Error(r.RELAYER_NOT_AVAILABLE);
111
+ let h = a - p.flatFee;
112
+ if (h <= 0n) throw Error(`Insufficient balance to cover fee. Balance: ${a}, Fee: ${p.flatFee}`);
113
+ let g = [-h];
114
+ return g[0] -= p.flatFee, {
115
+ tx: await x(e, {
116
+ chainId: n,
117
+ mintAddresses: l,
118
+ amountChanges: g,
119
+ relayAddress: m,
120
+ recipient: o,
121
+ signer: m,
122
+ functionName: "transact",
123
+ accounts: {
124
+ recipient: o,
125
+ mint: l[0] === "11111111111111111111111111111111" ? void 0 : l[0]
126
+ },
127
+ relayerFee: p.flatFee,
128
+ variableRate: p.variableRate,
129
+ useBlockedUtxos: !0,
130
+ onTxSubmitLocally: ({ inputNullifiers: t, outCommitments: r, encryptedOutputs: i }) => {
131
+ y(n, e, t, r, i);
132
+ },
133
+ submit: { mode: u.Relayer }
134
+ }),
135
+ amountToRecipient: h
155
136
  };
156
- }, I = async (t, n, r, i, a, o) => e(n) ? F(t, n, r, i, a, o) : P(t, n, r, i, a), L = async (t, i, a) => {
157
- let o = m([i]);
137
+ }, O = async (t, n, r, i, a, o) => e(n) ? D(t, n, r, i, a, o) : E(t, n, r, i, a), k = async (t, a, o) => {
138
+ let c = f([a]);
158
139
  if (t.generateProofRemotely) {
159
- let n = e(o) ? await N(t, o, i, a) : await j(t, o, i, a);
140
+ let n = e(c) ? await T(t, c, a, o) : await C(t, c, a, o);
160
141
  if (!n.length) throw Error(r.NO_STUCK_BALANCE_TO_WITHDRAW);
161
142
  return n;
162
143
  }
163
- let c = [], l = s(o, i.erc20TokenAddress);
164
- await t.resetMerkleTreesIfNecessary([o]);
165
- let d = ((await u({
144
+ let l = [], u = i(c, a.erc20TokenAddress);
145
+ await t.resetMerkleTreesIfNecessary([c]);
146
+ let p = ((await s({
166
147
  hinkal: t,
167
148
  sliceIfMore6: !1,
168
149
  useBlockedUtxos: !0,
169
- chainId: o
170
- }))?.get(l) ?? []).filter((e) => e.amount > 0n).sort((e, t) => Number(t.amount - e.amount));
171
- if (!d.length) throw Error(r.NO_STUCK_BALANCE_TO_WITHDRAW);
172
- for (let e = 0; e < d.length; e += k) {
173
- let r = d.slice(e, e + k), s = n(r);
150
+ chainId: c
151
+ }))?.get(u) ?? []).filter((e) => e.amount > 0n).sort((e, t) => Number(t.amount - e.amount));
152
+ if (!p.length) throw Error(r.NO_STUCK_BALANCE_TO_WITHDRAW);
153
+ for (let e = 0; e < p.length; e += S) {
154
+ let r = p.slice(e, e + S), i = n(r);
174
155
  try {
175
- let { tx: e } = await I(t, o, i, s, a, r.length);
176
- c.push(e);
156
+ let { tx: e } = await O(t, c, a, i, o, r.length);
157
+ l.push(e);
177
158
  } catch (e) {
178
- if (!c.length) throw e;
179
- return p.error(`Stuck withdrawal partially submitted (${c.length}/${Math.ceil(d.length / k)})`, e), c;
159
+ if (!l.length) throw e;
160
+ return d.error(`Stuck withdrawal partially submitted (${l.length}/${Math.ceil(p.length / S)})`, e), l;
180
161
  }
181
162
  }
182
- return c;
163
+ return l;
183
164
  };
184
165
  //#endregion
185
- export { L as hinkalWithdrawStuckUtxos };
166
+ export { k as hinkalWithdrawStuckUtxos };