@hinkal/common 0.3.3 → 0.3.5

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 (76) hide show
  1. package/README.md +2 -2
  2. package/assets/snarkjsWorkerLauncher-SrStwJvX.js +1 -0
  3. package/assets/snarkjsWorkerLogic-DtIjisbE.js +132 -0
  4. package/assets/utxoWorkerLauncher-CIBeBAML.js +1 -0
  5. package/assets/utxoWorkerLogic-C8R4GSaf.js +199 -0
  6. package/assets/zkProofWorkerLauncher-DfwteloJ.js +1 -0
  7. package/assets/zkProofWorkerLogic-CY9y6rOV.js +199 -0
  8. package/common/src/constants/vite.constants.cjs +1 -1
  9. package/common/src/constants/vite.constants.mjs +23 -5
  10. package/common/src/crypto/index.cjs +1 -1
  11. package/common/src/crypto/index.d.ts +0 -1
  12. package/common/src/crypto/index.mjs +0 -1
  13. package/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.cjs +1 -1
  14. package/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.mjs +50 -97
  15. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
  16. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +90 -128
  17. package/common/src/data-structures/Hinkal/hinkalSolanaSwap.cjs +1 -1
  18. package/common/src/data-structures/Hinkal/hinkalSolanaSwap.mjs +56 -110
  19. package/common/src/data-structures/Hinkal/hinkalSolanaTransact.cjs +1 -0
  20. package/common/src/data-structures/Hinkal/hinkalSolanaTransact.d.ts +3 -0
  21. package/common/src/data-structures/Hinkal/hinkalSolanaTransact.mjs +117 -0
  22. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
  23. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.d.ts +2 -31
  24. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +45 -121
  25. package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
  26. package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +41 -83
  27. package/common/src/data-structures/Hinkal/hinkalTransact.cjs +1 -1
  28. package/common/src/data-structures/Hinkal/hinkalTransact.mjs +41 -42
  29. package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.cjs +1 -1
  30. package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.mjs +106 -125
  31. package/common/src/data-structures/IndexedDB/pay-activity-db.cjs +1 -1
  32. package/common/src/data-structures/IndexedDB/pay-activity-db.mjs +43 -1
  33. package/common/src/functions/index.cjs +1 -1
  34. package/common/src/functions/index.mjs +0 -1
  35. package/common/src/functions/pre-transaction/ensureAmountChanges.cjs +1 -1
  36. package/common/src/functions/pre-transaction/ensureAmountChanges.mjs +3 -10
  37. package/common/src/functions/pre-transaction/outputUtxoProcessing.cjs +1 -1
  38. package/common/src/functions/pre-transaction/outputUtxoProcessing.d.ts +1 -0
  39. package/common/src/functions/pre-transaction/outputUtxoProcessing.mjs +13 -9
  40. package/common/src/functions/snarkjs/constructSolanaZkProof.cjs +1 -1
  41. package/common/src/functions/snarkjs/constructSolanaZkProof.d.ts +1 -1
  42. package/common/src/functions/snarkjs/constructSolanaZkProof.mjs +35 -35
  43. package/common/src/functions/snarkjs/constructTxEnclave.cjs +1 -1
  44. package/common/src/functions/snarkjs/constructTxEnclave.d.ts +2 -0
  45. package/common/src/functions/snarkjs/constructTxEnclave.mjs +40 -40
  46. package/common/src/functions/utils/enum.utils.cjs +1 -0
  47. package/common/src/functions/utils/enum.utils.mjs +12 -0
  48. package/common/src/functions/utils/index.cjs +1 -1
  49. package/common/src/functions/utils/index.mjs +0 -1
  50. package/common/src/types/index.cjs +1 -1
  51. package/common/src/types/index.d.ts +1 -0
  52. package/common/src/types/index.mjs +1 -0
  53. package/common/src/types/pay-activities.types.d.ts +18 -3
  54. package/common/src/types/solana-transact.types.cjs +1 -0
  55. package/common/src/types/solana-transact.types.d.ts +35 -0
  56. package/common/src/types/solana-transact.types.mjs +6 -0
  57. package/common/src/webworker/logError-Dex6ch32.js +2 -0
  58. package/common/src/webworker/package.json +1 -1
  59. package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.cjs +1 -1
  60. package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.mjs +1 -1
  61. package/common/src/webworker/snarkjsWorkerNode.cjs +1 -1
  62. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
  63. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
  64. package/common/src/webworker/utxoWorkerNode.cjs +1 -1
  65. package/common/src/webworker/viteWorkerURL.constant.cjs +1 -28
  66. package/common/src/webworker/viteWorkerURL.constant.mjs +13 -27
  67. package/common/src/webworker/workerProxy-BuJUMCQ4.js +1 -0
  68. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
  69. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
  70. package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
  71. package/package.json +12 -12
  72. package/common/src/crypto/ecdh-dual-path.cjs +0 -1
  73. package/common/src/crypto/ecdh-dual-path.d.ts +0 -13
  74. package/common/src/crypto/ecdh-dual-path.mjs +0 -6
  75. package/common/src/webworker/logError-CxZzSALU.js +0 -2
  76. package/common/src/webworker/workerProxy-swwPYw6e.js +0 -1
@@ -1,128 +1,74 @@
1
1
  import { networkRegistry as e } from "../../constants/chains.constants.mjs";
2
2
  import { solanaNativeAddress as t } from "../../constants/protocol.constants.mjs";
3
3
  import { transactionErrorCodes as n } from "../../error-handling/error-codes.constants.mjs";
4
- import { getAmountInToken as r, getAmountInWei as i, randomBigInt as a } from "../../functions/web3/etherFunctions.mjs";
5
- import { UserKeys as o } from "../crypto-keys/keys.mjs";
6
- import { getCurrentTimeInSeconds as s } from "../../functions/utils/time.utils.mjs";
7
- import { ExternalActionId as c } from "../../types/external-action.types.mjs";
8
- import { StorageKeys as l } from "../../types/cache.types.mjs";
4
+ import { getAmountInToken as r, getAmountInWei as i } from "../../functions/web3/etherFunctions.mjs";
5
+ import { ExternalActionId as a } from "../../types/external-action.types.mjs";
6
+ import { StorageKeys as o } from "../../types/cache.types.mjs";
7
+ import { SolanaSubmitMode as s } from "../../types/solana-transact.types.mjs";
9
8
  import "../../types/index.mjs";
10
- import { validateAndGetChainId as u } from "../../functions/utils/token-check.utils.mjs";
11
- import { addPaddingToUtxos as d } from "../../functions/web3/events/getShieldedBalance.mjs";
12
- import { outputUtxoProcessing as f } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
13
- import { getStorageAccountPublicKey as p, getStorageVaultPublicKey as m, getSwapperAccountPublicKeyFromSalt as h } from "../../functions/pre-transaction/solana.mjs";
14
- import { constructAdminData as g } from "../../functions/pre-transaction/constructAdminData.mjs";
15
- import { finalizeSolanaTxEnclaveCallRelay as _, prepareSolanaTxEnclaveCall as v } from "../../functions/snarkjs/constructTxEnclave.mjs";
16
- import { calculateSolanaNullifierCount as y } from "../../functions/pre-transaction/calculateSolanaNullifierCount.mjs";
17
- import { convertOKXToHinkalInstructions as ee } from "../../functions/pre-transaction/convert-okx-instructions.mjs";
18
- import { ensureAmountChanges as te } from "../../functions/pre-transaction/ensureAmountChanges.mjs";
19
- import { getFeeStructure as ne } from "../../functions/pre-transaction/getFeeStructure.mjs";
20
- import { solanaTransactCallRelayer as b } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
21
- import { constructSolanaZkProof as x } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
22
- import { PublicKey as S } from "@solana/web3.js";
9
+ import { validateAndGetChainId as c } from "../../functions/utils/token-check.utils.mjs";
10
+ import { getStorageAccountPublicKey as l, getStorageVaultPublicKey as u, getSwapperAccountPublicKeyFromSalt as ee } from "../../functions/pre-transaction/solana.mjs";
11
+ import { constructAdminData as d } from "../../functions/pre-transaction/constructAdminData.mjs";
12
+ import { calculateSolanaNullifierCount as f } from "../../functions/pre-transaction/calculateSolanaNullifierCount.mjs";
13
+ import { convertOKXToHinkalInstructions as p } from "../../functions/pre-transaction/convert-okx-instructions.mjs";
14
+ import { getFeeStructure as m } from "../../functions/pre-transaction/getFeeStructure.mjs";
15
+ import { hinkalSolanaTransact as h } from "./hinkalSolanaTransact.mjs";
16
+ import { PublicKey as g } from "@solana/web3.js";
23
17
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaSwap.ts
24
- var re = async (e, t, n, r) => {
25
- let i = [...await d(e, t, n, r, 6)], a = s().toString(), o = [];
26
- for (let t = 0; t < n.length; t += 1) {
27
- let { outputUtxos: n } = f(e.userKeys, i[t], r[t], a);
28
- o.push([n[0]]);
29
- }
30
- return {
31
- inputUtxosArray: i,
32
- outputUtxosArray: o
33
- };
34
- }, ie = async (e, t, n, r, i, a, o, s, c, l, u, d, f, p) => {
35
- let { jobId: m, signedMessageHash: h } = await v(e, {
36
- chainId: t,
37
- mintAddresses: n,
38
- amountChanges: r,
39
- relayAddress: a,
40
- recipient: o,
41
- signer: a,
42
- functionName: "swap",
43
- accounts: s,
44
- onChainCreation: i,
45
- relayerFee: c,
46
- variableRate: l,
47
- hinkalInstructions: u,
48
- remainingAccounts: d,
49
- swapperAccountSalt: f
50
- }), { R8: g, S: y } = e.userKeys.signEddsa(BigInt(h));
51
- return _(m, {
52
- R8: g,
53
- S: y
54
- }, t, { adminData: p });
55
- }, C = async (s, d, f, _, v, C, w, T, E) => {
56
- let D = u(d), O = new S(t), { hinkalAddress: k, originalDeployer: A } = e[D].contractData;
57
- if (!A) throw Error("No IDL configured for Solana program on this network");
58
- let j = new S(A), M = new S(k), N = d.map((e) => e.erc20TokenAddress), { userKeys: ae, merkleTreeHinkalByChain: oe } = s, se = w ?? N[1];
59
- if (w && w !== N[1]) throw Error("Solana swap fee token must match the output token");
60
- let ce = {
61
- mintFrom: N[0],
62
- mintTo: N[1],
63
- nullifierCount: await y(s, D, N, f),
18
+ var _ = async (_, v, y, b, x, S, C, w, T) => {
19
+ let E = c(v), D = new g(t), { hinkalAddress: O, originalDeployer: k } = e[E].contractData;
20
+ if (!k) throw Error("No IDL configured for Solana program on this network");
21
+ let A = new g(k), j = new g(O), M = v.map((e) => e.erc20TokenAddress), N = C ?? M[1];
22
+ if (C && C !== M[1]) throw Error("Solana swap fee token must match the output token");
23
+ let P = {
24
+ mintFrom: M[0],
25
+ mintTo: M[1],
26
+ nullifierCount: await f(_, E, M, y),
64
27
  rootInsertCount: 2
65
- }, P = T ?? await ne(D, se, N, c.Okx, [], void 0, ce), F = f[1], I = Number(s.cacheDevice.get(l.SLIPPAGE_PERCENTAGE) ?? 0), L = d[1], R = r(L, F), z = Number(R) * I / 100;
66
- f[1] -= i(L, z.toFixed(L.decimals));
67
- let B = F * BigInt(P.variableRate ?? 0) / 10000n + P.flatFee;
68
- if (f[1] -= B, f[1] < 0) throw Error(n.LOW_OUTPUT_AMOUNT);
69
- let V = P.variableRate.toString(), [H, U] = await Promise.all([s.getRandomRelay(D, !0), s.getEthereumAddressByChain(D)]);
28
+ }, F = w ?? await m(E, N, M, a.Okx, [], void 0, P), I = y[1], L = Number(_.cacheDevice.get(o.SLIPPAGE_PERCENTAGE) ?? 0), R = v[1], z = r(R, I), B = Number(z) * L / 100;
29
+ y[1] -= i(R, B.toFixed(R.decimals));
30
+ let V = I * BigInt(F.variableRate ?? 0) / 10000n + F.flatFee;
31
+ if (y[1] -= V, y[1] < 0) throw Error(n.LOW_OUTPUT_AMOUNT);
32
+ let [H, U] = await Promise.all([_.getRandomRelay(E, !0), _.getEthereumAddressByChain(E)]);
70
33
  if (!H) throw Error(n.RELAYER_NOT_AVAILABLE);
71
- let W = h(M, j, _), { remainingAccounts: G, hinkalInstructions: K } = ee(v, W), le = p(M, j), ue = m(M, j), de = d[0].erc20TokenAddress === "11111111111111111111111111111111" ? null : new S(d[0].erc20TokenAddress), fe = d[1].erc20TokenAddress === "11111111111111111111111111111111" ? null : new S(d[1].erc20TokenAddress), q = {
72
- recipient: O.toString(),
73
- storageAccount: le.toString(),
74
- storageVault: ue.toString(),
34
+ let W = ee(j, A, b), { remainingAccounts: G, hinkalInstructions: K } = p(x, W), q = l(j, A), J = u(j, A), Y = v[0].erc20TokenAddress === "11111111111111111111111111111111" ? null : new g(v[0].erc20TokenAddress), X = v[1].erc20TokenAddress === "11111111111111111111111111111111" ? null : new g(v[1].erc20TokenAddress), Z = {
35
+ recipient: D.toString(),
36
+ storageAccount: q.toString(),
37
+ storageVault: J.toString(),
75
38
  swapperAccount: W.toString(),
76
- mintFrom: de?.toString() ?? null,
77
- mintTo: fe?.toString() ?? null,
39
+ mintFrom: Y?.toString() ?? null,
40
+ mintTo: X?.toString() ?? null,
78
41
  remainingAccounts: G.map((e) => ({
79
42
  pubkey: e.pubkey.toString(),
80
43
  isSigner: e.isSigner,
81
44
  isWritable: e.isWritable
82
45
  })),
83
- addressLookupTableAccount: C
84
- }, J = g(E, D, N, f, U, d), Y = [!1, !0];
85
- if (s.generateProofRemotely) {
86
- let e = K.map((e) => ({
87
- accountIndexes: [...e.accountIndexes],
88
- data: [...e.data],
89
- programIndex: e.programIndex
90
- }));
91
- return ie(s, D, N, f, Y, H, O.toString(), q, P.flatFee, P.variableRate, e, q.remainingAccounts, _, J);
92
- }
93
- let { inputUtxosArray: X, outputUtxosArray: Z } = await re(s, D, N, f), pe = s.userKeys.getShieldedPrivateKey(), Q = o.findCorrectRandomization(a(31), pe), $ = {
94
- tokenNumber: 2,
95
- nullifierAmount: X[0].length,
96
- outputAmount: 1
97
- };
98
- te(X, Z, f);
99
- let { proofAArr: me, proofBArr: he, proofCArr: ge, publicInputsArr: _e, commitmentValidationData: ve, rootHashHinkalIndex: ye, encryptedOutputs: be, onChainEncryptedOutput: xe } = await x(oe[D], ae, N, X, Z, Q, P.flatFee, P.variableRate, O.toString(), H, $, Y, D, K, G, _);
100
- return b({
101
- chainId: D,
46
+ addressLookupTableAccount: S
47
+ }, Q = d(T, E, M, y, U, v), $ = K.map((e) => ({
48
+ accountIndexes: [...e.accountIndexes],
49
+ data: [...e.data],
50
+ programIndex: e.programIndex
51
+ }));
52
+ return h(_, {
53
+ chainId: E,
54
+ mintAddresses: M,
55
+ amountChanges: y,
102
56
  relayAddress: H,
57
+ recipient: D.toString(),
58
+ signer: H,
103
59
  functionName: "swap",
104
- args: {
105
- encryptedOutputs: be,
106
- onChainEncryptedOutput: xe,
107
- onChainCreation: Y,
108
- proofAArr: me,
109
- proofBArr: he,
110
- proofCArr: ge,
111
- publicInputsArr: _e,
112
- relayerFee: P.flatFee.toString(),
113
- variableRate: V,
114
- dimensions: $,
115
- rootHashIndex: ye.toString(),
116
- hinkalInstructions: K.map((e) => ({
117
- accountIndexes: [...e.accountIndexes],
118
- data: [...e.data],
119
- programIndex: e.programIndex
120
- }))
121
- },
122
- accounts: q,
123
- commitmentValidationData: ve,
124
- adminData: J
60
+ accounts: Z,
61
+ onChainCreation: [!1, !0],
62
+ relayerFee: F.flatFee,
63
+ variableRate: F.variableRate,
64
+ hinkalInstructions: $,
65
+ remainingAccounts: Z.remainingAccounts,
66
+ swapperAccountSalt: b,
67
+ submit: {
68
+ mode: s.Relayer,
69
+ adminData: Q
70
+ }
125
71
  });
126
72
  };
127
73
  //#endregion
128
- export { C as hinkalSolanaSwap };
74
+ export { _ as hinkalSolanaSwap };
@@ -0,0 +1 @@
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/solana-transact.types.cjs`),t=require(`../../functions/web3/events/getShieldedBalance.cjs`),n=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),r=require(`../../functions/snarkjs/common.snarkjs.cjs`),i=require(`../../functions/snarkjs/constructTxEnclave.cjs`),a=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),o=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`);let s=require(`ethers`),c=require(`@solana/web3.js`);var l=(e=[])=>e.map(({accountIndexes:e,data:t,programIndex:n})=>({accountIndexes:Buffer.from(e),data:Buffer.from(t),programIndex:n})),u=(e=[])=>e.map(({pubkey:e,isSigner:t,isWritable:n})=>({pubkey:new c.PublicKey(e),isSigner:t,isWritable:n})),d=async(e,n)=>{let{inputUtxos:r,chainId:i,mintAddresses:a,amountChanges:o,useBlockedUtxos:s}=n;return r||[...await t.addPaddingToUtxos(e,i,a,o,void 0,void 0,s)]},f=(e,t,r)=>{let{amountChanges:i,recipientAddress:a,recipientAmounts:o}=e;return n.buildOutputUtxos(t,r,i,a===void 0?void 0:[a],a===void 0?void 0:[o??[]])},p=async(e,t,n)=>{let{chainId:i,mintAddresses:a,relayAddress:c,recipient:p,relayerFee:m,variableRate:h,functionName:g,hinkalInstructions:_,remainingAccounts:v,swapperAccountSalt:y,onChainCreation:b}=t,x=await d(e,t),S=f(t,n,x),C={tokenNumber:a.length,nullifierAmount:x[0].length,outputAmount:S[0].length},{proofAArr:w,proofBArr:T,proofCArr:E,publicInputsArr:D,commitmentValidationData:O,rootHashHinkalIndex:k,encryptedOutputs:A,onChainEncryptedOutput:j}=await o.constructSolanaZkProof(e.merkleTreeHinkalByChain[i],n,a,x,S,m??0n,h??0n,p,c,C,b,i,l(_),u(v),y);return{args:{proofAArr:w,proofBArr:T,proofCArr:E,publicInputsArr:D,encryptedOutputs:A,relayerFee:(m??0n).toString(),...g===`swap`?{variableRate:(h??0n).toString(),onChainEncryptedOutput:j,onChainCreation:b??[],hinkalInstructions:_??[]}:{},dimensions:C,rootHashIndex:k.toString()},commitmentValidationData:O,notes:{inputNullifiers:x.flat().filter(e=>e.amount>0n).map(e=>e.getNullifier()),outCommitments:r.buildOutCommitments(S).flat(),encryptedOutputs:A.map(e=>s.ethers.hexlify(new Uint8Array(e)))}}},m=async(e,t,n)=>{let{inputUtxos:r}=t,{jobId:a,signedMessageHash:o}=await i.prepareSolanaTxEnclaveCall(e,{chainId:t.chainId,mintAddresses:t.mintAddresses,amountChanges:t.amountChanges,relayAddress:t.relayAddress,recipient:t.recipient,signer:t.signer,functionName:t.functionName,accounts:t.accounts,onChainCreation:t.onChainCreation,relayerFee:t.relayerFee,variableRate:t.variableRate,swapperAccountSalt:t.swapperAccountSalt,hinkalInstructions:t.hinkalInstructions,remainingAccounts:t.remainingAccounts,recipientAddress:t.recipientAddress,recipientAmounts:t.recipientAmounts,recipientAmount:t.recipientAmount,displayRecipient:t.displayRecipient,useBlockedUtxos:t.useBlockedUtxos,messageSeed:t.messageSeed,inputCommitments:i.collectInputCommitments(r)},n),{R8:s,S:c}=n.signEddsa(BigInt(o));return{jobId:a,eddsaSignature:{R8:s,S:c}}},h=(t,n)=>{let{chainId:r,relayAddress:i,functionName:o,accounts:s,submit:c}=t;if(c.mode!==e.SolanaSubmitMode.Relayer)throw Error(`hinkalSolanaTransact: relayer submit expected`);return a.solanaTransactCallRelayer({chainId:r,relayAddress:i,functionName:o,args:n.args,accounts:s,commitmentValidationData:n.commitmentValidationData,adminData:c.adminData})},g=async(t,n)=>{if(t.submit.mode!==e.SolanaSubmitMode.Relayer)return n;let r=await h(t,n);return n.notes&&t.onTxSubmitLocally?.(n.notes),r},_=async(t,n)=>{if(n.userKeys&&!n.inputUtxos)throw Error(`hinkalSolanaTransact: userKeys requires explicit inputUtxos`);let r=n.userKeys??t.userKeys,{chainId:a,submit:o}=n;if(t.generateProofRemotely){let{jobId:s,eddsaSignature:c}=await m(t,n,r);if(o.mode===e.SolanaSubmitMode.Relayer)return i.finalizeSolanaTxEnclaveCallRelay(s,c,a,{adminData:o.adminData});let{solanaArgs:l,commitmentValidationData:u}=await i.finalizeSolanaTxEnclaveCall(s,c);return g(n,{args:l,commitmentValidationData:u})}return g(n,await p(t,n,r))};exports.hinkalSolanaTransact=_;
@@ -0,0 +1,3 @@
1
+ import { HinkalSolanaTransactParams, SolanaTransactResult } from '../../types/solana-transact.types';
2
+ import { IHinkal } from './IHinkal';
3
+ export declare const hinkalSolanaTransact: (hinkal: IHinkal, params: HinkalSolanaTransactParams) => Promise<SolanaTransactResult>;
@@ -0,0 +1,117 @@
1
+ import { SolanaSubmitMode as e } from "../../types/solana-transact.types.mjs";
2
+ import { addPaddingToUtxos as t } from "../../functions/web3/events/getShieldedBalance.mjs";
3
+ import { buildOutputUtxos as n } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
4
+ import { buildOutCommitments as r } from "../../functions/snarkjs/common.snarkjs.mjs";
5
+ import { collectInputCommitments as i, finalizeSolanaTxEnclaveCall as a, finalizeSolanaTxEnclaveCallRelay as o, prepareSolanaTxEnclaveCall as s } from "../../functions/snarkjs/constructTxEnclave.mjs";
6
+ import { solanaTransactCallRelayer as c } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
7
+ import { constructSolanaZkProof as l } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
8
+ import { ethers as u } from "ethers";
9
+ import { PublicKey as d } from "@solana/web3.js";
10
+ //#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaTransact.ts
11
+ var f = (e = []) => e.map(({ accountIndexes: e, data: t, programIndex: n }) => ({
12
+ accountIndexes: Buffer.from(e),
13
+ data: Buffer.from(t),
14
+ programIndex: n
15
+ })), p = (e = []) => e.map(({ pubkey: e, isSigner: t, isWritable: n }) => ({
16
+ pubkey: new d(e),
17
+ isSigner: t,
18
+ isWritable: n
19
+ })), m = async (e, n) => {
20
+ let { inputUtxos: r, chainId: i, mintAddresses: a, amountChanges: o, useBlockedUtxos: s } = n;
21
+ return r || [...await t(e, i, a, o, void 0, void 0, s)];
22
+ }, h = (e, t, r) => {
23
+ let { amountChanges: i, recipientAddress: a, recipientAmounts: o } = e;
24
+ return n(t, r, i, a === void 0 ? void 0 : [a], a === void 0 ? void 0 : [o ?? []]);
25
+ }, g = async (e, t, n) => {
26
+ let { chainId: i, mintAddresses: a, relayAddress: o, recipient: s, relayerFee: c, variableRate: d, functionName: g, hinkalInstructions: _, remainingAccounts: v, swapperAccountSalt: y, onChainCreation: b } = t, x = await m(e, t), S = h(t, n, x), C = {
27
+ tokenNumber: a.length,
28
+ nullifierAmount: x[0].length,
29
+ outputAmount: S[0].length
30
+ }, { proofAArr: w, proofBArr: T, proofCArr: E, publicInputsArr: D, commitmentValidationData: O, rootHashHinkalIndex: k, encryptedOutputs: A, onChainEncryptedOutput: j } = await l(e.merkleTreeHinkalByChain[i], n, a, x, S, c ?? 0n, d ?? 0n, s, o, C, b, i, f(_), p(v), y);
31
+ return {
32
+ args: {
33
+ proofAArr: w,
34
+ proofBArr: T,
35
+ proofCArr: E,
36
+ publicInputsArr: D,
37
+ encryptedOutputs: A,
38
+ relayerFee: (c ?? 0n).toString(),
39
+ ...g === "swap" ? {
40
+ variableRate: (d ?? 0n).toString(),
41
+ onChainEncryptedOutput: j,
42
+ onChainCreation: b ?? [],
43
+ hinkalInstructions: _ ?? []
44
+ } : {},
45
+ dimensions: C,
46
+ rootHashIndex: k.toString()
47
+ },
48
+ commitmentValidationData: O,
49
+ notes: {
50
+ inputNullifiers: x.flat().filter((e) => e.amount > 0n).map((e) => e.getNullifier()),
51
+ outCommitments: r(S).flat(),
52
+ encryptedOutputs: A.map((e) => u.hexlify(new Uint8Array(e)))
53
+ }
54
+ };
55
+ }, _ = async (e, t, n) => {
56
+ let { inputUtxos: r } = t, { jobId: a, signedMessageHash: o } = await s(e, {
57
+ chainId: t.chainId,
58
+ mintAddresses: t.mintAddresses,
59
+ amountChanges: t.amountChanges,
60
+ relayAddress: t.relayAddress,
61
+ recipient: t.recipient,
62
+ signer: t.signer,
63
+ functionName: t.functionName,
64
+ accounts: t.accounts,
65
+ onChainCreation: t.onChainCreation,
66
+ relayerFee: t.relayerFee,
67
+ variableRate: t.variableRate,
68
+ swapperAccountSalt: t.swapperAccountSalt,
69
+ hinkalInstructions: t.hinkalInstructions,
70
+ remainingAccounts: t.remainingAccounts,
71
+ recipientAddress: t.recipientAddress,
72
+ recipientAmounts: t.recipientAmounts,
73
+ recipientAmount: t.recipientAmount,
74
+ displayRecipient: t.displayRecipient,
75
+ useBlockedUtxos: t.useBlockedUtxos,
76
+ messageSeed: t.messageSeed,
77
+ inputCommitments: i(r)
78
+ }, n), { R8: c, S: l } = n.signEddsa(BigInt(o));
79
+ return {
80
+ jobId: a,
81
+ eddsaSignature: {
82
+ R8: c,
83
+ S: l
84
+ }
85
+ };
86
+ }, v = (t, n) => {
87
+ let { chainId: r, relayAddress: i, functionName: a, accounts: o, submit: s } = t;
88
+ if (s.mode !== e.Relayer) throw Error("hinkalSolanaTransact: relayer submit expected");
89
+ return c({
90
+ chainId: r,
91
+ relayAddress: i,
92
+ functionName: a,
93
+ args: n.args,
94
+ accounts: o,
95
+ commitmentValidationData: n.commitmentValidationData,
96
+ adminData: s.adminData
97
+ });
98
+ }, y = async (t, n) => {
99
+ if (t.submit.mode !== e.Relayer) return n;
100
+ let r = await v(t, n);
101
+ return n.notes && t.onTxSubmitLocally?.(n.notes), r;
102
+ }, b = async (t, n) => {
103
+ if (n.userKeys && !n.inputUtxos) throw Error("hinkalSolanaTransact: userKeys requires explicit inputUtxos");
104
+ let r = n.userKeys ?? t.userKeys, { chainId: i, submit: s } = n;
105
+ if (t.generateProofRemotely) {
106
+ let { jobId: c, eddsaSignature: l } = await _(t, n, r);
107
+ if (s.mode === e.Relayer) return o(c, l, i, { adminData: s.adminData });
108
+ let { solanaArgs: u, commitmentValidationData: d } = await a(c, l);
109
+ return y(n, {
110
+ args: u,
111
+ commitmentValidationData: d
112
+ });
113
+ }
114
+ return y(n, await g(t, n, r));
115
+ };
116
+ //#endregion
117
+ export { b as hinkalSolanaTransact };
@@ -1 +1 @@
1
- const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../types/external-action.types.cjs`);require(`../../types/index.cjs`);const 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/constructAdminData.cjs`),f=require(`../../functions/snarkjs/constructTxEnclave.cjs`),p=require(`../../functions/pre-transaction/calculateSolanaNullifierCount.cjs`),m=require(`../../functions/pre-transaction/ensureAmountChanges.cjs`),h=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const g=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),_=require(`../../functions/utils/fees.utils.cjs`),v=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`);var y=async(e,t,n,r,i,o)=>{let s=(await l.addPaddingToUtxos(e,t,n,r,6))[0],c=a.getCurrentTimeInSeconds().toString(),{outputUtxos:d}=u.outputUtxoProcessing(e.userKeys,s,r[0],c,!0,[i],[o]);return{inputUtxos:s,senderUtxo:d[0],recipientUtxo:d[1]}},b=async(e,n,r,i,a,o,s,c,l,u)=>{let{jobId:d,signedMessageHash:p}=await f.prepareSolanaTxEnclaveCall(e,{chainId:n,mintAddresses:r,amountChanges:i,relayAddress:s,recipient:t.solanaNativeAddress,signer:s,functionName:`transfer`,accounts:c,relayerFee:l,variableRate:0n,hinkalInstructions:[],remainingAccounts:[],recipientAddress:a,recipientAmounts:[o]}),{R8:m,S:h}=e.userKeys.signEddsa(BigInt(p));return f.finalizeSolanaTxEnclaveCallRelay(d,{R8:m,S:h},n,{adminData:u})},x=async(a,l,u,f,g,b,x)=>{if(!o.isValidPrivateAddress(f))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let S=c.validateAndGetChainId(l),C=[...u],{originalDeployer:w}=e.networkRegistry[S].contractData;if(!w)throw Error(`missing data`);let{userKeys:T,merkleTreeHinkalByChain:E}=a,D=l.map(e=>e.erc20TokenAddress);if(D.length>1)throw Error(`Solana Transfer: Only one mint address is supported`);let O=g??D[0],k={mintTo:O,nullifierCount:await p.calculateSolanaNullifierCount(a,S,D,C),rootInsertCount:2},A=b??await h.getFeeStructure(S,O,D,s.ExternalActionId.Transact,[],5n,k);A.variableRate||=t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;let j=_.calculateTotalFee(-C[0],A),M=-C[0];C[0]-=j;let[N,P,{inputUtxos:F,senderUtxo:I,recipientUtxo:L}]=await Promise.all([a.getRandomRelay(S,!0),a.getEthereumAddressByChain(S),y(a,S,D,C,f,M)]);if(!N)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let R=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),a.userKeys.getShieldedPrivateKey()),z={tokenNumber:D.length,nullifierAmount:F.length,outputAmount:2};m.ensureAmountChanges([F],[[I]],C);let{proofAArr:B,proofBArr:V,proofCArr:H,publicInputsArr:U,commitmentValidationData:W,rootHashHinkalIndex:G,encryptedOutputs:K}=await v.constructSolanaZkProof(E[S],T,[D[0]],[F],[[I,L]],R,j,0n,t.solanaNativeAddress,N,z,void 0,S),q={recipient:N,mint:D[0]===`11111111111111111111111111111111`?void 0:D[0]};return{chainId:S,relay:N,args:{proofAArr:B,proofBArr:V,proofCArr:H,publicInputsArr:U,encryptedOutputs:K,relayerFee:j.toString(),dimensions:z,rootHashIndex:G.toString()},accounts:q,adminData:d.constructAdminData(x,S,D,C,P),commitmentValidationData:W,recipientUtxo:L}},S=async(e,r,i,a,l,u,f,m=!1)=>{if(m)throw Error(`onlyGasEstimate is not supported for Solana transfer`);if(!o.isValidPrivateAddress(a))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let v=c.validateAndGetChainId(r),y=[...i],S=r.map(e=>e.erc20TokenAddress);if(S.length>1)throw Error(`Solana Transfer: Only one mint address is supported`);if(e.generateProofRemotely){let r=u??await h.getFeeStructure(v,l,S,s.ExternalActionId.Transact,[],5n,{mintTo:l??S[0],nullifierCount:await p.calculateSolanaNullifierCount(e,v,S,y),rootInsertCount:2});r.variableRate||=t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;let i=_.calculateTotalFee(-y[0],r),o=-y[0];y[0]-=i;let[c,m]=await Promise.all([e.getRandomRelay(v,!0),e.getEthereumAddressByChain(v)]);if(!c)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);return b(e,v,S,y,a,o,c,{recipient:c,mint:S[0]===`11111111111111111111111111111111`?void 0:S[0]},i,d.constructAdminData(f,v,S,y,m))}let C=await x(e,r,i,a,l,u,f);return g.solanaTransactCallRelayer({chainId:C.chainId,relayAddress:C.relay,functionName:`transfer`,args:C.args,accounts:C.accounts,adminData:C.adminData,commitmentValidationData:C.commitmentValidationData})};exports.hinkalSolanaTransfer=S;
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/utils/addresses.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../types/solana-transact.types.cjs`);require(`../../types/index.cjs`);const o=require(`../../functions/utils/token-check.utils.cjs`),s=require(`../../functions/pre-transaction/constructAdminData.cjs`),c=require(`../../functions/pre-transaction/calculateSolanaNullifierCount.cjs`),l=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const u=require(`../../functions/utils/fees.utils.cjs`),d=require(`./hinkalSolanaTransact.cjs`);var f=async(f,p,m,h,g,_,v,y=!1)=>{if(y)throw Error(`onlyGasEstimate is not supported for Solana transfer`);if(!r.isValidPrivateAddress(h))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let b=o.validateAndGetChainId(p),x=[...m],S=p.map(e=>e.erc20TokenAddress);if(S.length>1)throw Error(`Solana Transfer: Only one mint address is supported`);let{originalDeployer:C}=e.networkRegistry[b].contractData;if(!C)throw Error(`missing data`);let w=g??S[0],T={mintTo:w,nullifierCount:await c.calculateSolanaNullifierCount(f,b,S,x),rootInsertCount:2},E=_??await l.getFeeStructure(b,w,S,i.ExternalActionId.Transact,[],5n,T);E.variableRate||=t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;let D=-x[0],O=u.calculateTotalFee(D,E);x[0]-=O;let[k,A]=await Promise.all([f.getRandomRelay(b,!0),f.getEthereumAddressByChain(b)]);if(!k)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let j={recipient:k,mint:S[0]===`11111111111111111111111111111111`?void 0:S[0]},M=s.constructAdminData(v,b,S,x,A);return d.hinkalSolanaTransact(f,{chainId:b,mintAddresses:S,amountChanges:x,relayAddress:k,recipient:t.solanaNativeAddress,signer:k,functionName:`transfer`,accounts:j,relayerFee:O,recipientAddress:h,recipientAmounts:[D],submit:{mode:a.SolanaSubmitMode.Relayer,adminData:M}})};exports.hinkalSolanaTransfer=f;
@@ -1,32 +1,3 @@
1
- import { AdminTransactionType, CommitmentValidationDataType, ERC20Token, FeeStructure } from '../../types';
1
+ import { AdminTransactionType, ERC20Token, FeeStructure } from '../../types';
2
2
  import { IHinkal } from './IHinkal';
3
- import { Utxo } from '../utxo/Utxo';
4
- import { constructAdminData } from '../../functions/pre-transaction';
5
- type SolanaTransferPlan = {
6
- chainId: number;
7
- relay: string;
8
- commitmentValidationData?: CommitmentValidationDataType;
9
- args: {
10
- proofAArr: number[];
11
- proofBArr: number[];
12
- proofCArr: number[];
13
- publicInputsArr: number[][];
14
- encryptedOutputs: number[][];
15
- relayerFee: string;
16
- dimensions: {
17
- tokenNumber: number;
18
- nullifierAmount: number;
19
- outputAmount: number;
20
- };
21
- rootHashIndex: string;
22
- };
23
- accounts: {
24
- recipient: string;
25
- mint?: string;
26
- };
27
- adminData: ReturnType<typeof constructAdminData>;
28
- recipientUtxo: Utxo;
29
- };
30
- export declare const buildSolanaTransferPlan: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChangesInput: bigint[], recipientAddress: string, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType) => Promise<SolanaTransferPlan>;
31
- export declare const hinkalSolanaTransfer: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChanges: bigint[], recipientAddress: string, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType, onlyGasEstimate?: boolean) => Promise<string>;
32
- export {};
3
+ export declare const hinkalSolanaTransfer: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChangesInput: bigint[], recipientAddress: string, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType, onlyGasEstimate?: boolean) => Promise<string>;
@@ -1,132 +1,56 @@
1
1
  import { networkRegistry as e } from "../../constants/chains.constants.mjs";
2
2
  import { HINKAL_PRIVATE_SEND_VARIABLE_RATE as t, solanaNativeAddress as n } from "../../constants/protocol.constants.mjs";
3
3
  import { transactionErrorCodes as r } from "../../error-handling/error-codes.constants.mjs";
4
- import { randomBigInt as i } from "../../functions/web3/etherFunctions.mjs";
5
- import { UserKeys as a } from "../crypto-keys/keys.mjs";
6
- import { getCurrentTimeInSeconds as o } from "../../functions/utils/time.utils.mjs";
7
- import { isValidPrivateAddress as s } from "../../functions/utils/addresses.mjs";
8
- import { ExternalActionId as c } from "../../types/external-action.types.mjs";
4
+ import { isValidPrivateAddress as i } from "../../functions/utils/addresses.mjs";
5
+ import { ExternalActionId as a } from "../../types/external-action.types.mjs";
6
+ import { SolanaSubmitMode as o } from "../../types/solana-transact.types.mjs";
9
7
  import "../../types/index.mjs";
10
- import { validateAndGetChainId as l } from "../../functions/utils/token-check.utils.mjs";
11
- import { addPaddingToUtxos as u } from "../../functions/web3/events/getShieldedBalance.mjs";
12
- import { outputUtxoProcessing as d } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
13
- import { constructAdminData as f } from "../../functions/pre-transaction/constructAdminData.mjs";
14
- import { finalizeSolanaTxEnclaveCallRelay as p, prepareSolanaTxEnclaveCall as m } from "../../functions/snarkjs/constructTxEnclave.mjs";
15
- import { calculateSolanaNullifierCount as h } from "../../functions/pre-transaction/calculateSolanaNullifierCount.mjs";
16
- import { ensureAmountChanges as g } from "../../functions/pre-transaction/ensureAmountChanges.mjs";
17
- import { getFeeStructure as _ } from "../../functions/pre-transaction/getFeeStructure.mjs";
8
+ import { validateAndGetChainId as s } from "../../functions/utils/token-check.utils.mjs";
9
+ import { constructAdminData as c } from "../../functions/pre-transaction/constructAdminData.mjs";
10
+ import { calculateSolanaNullifierCount as l } from "../../functions/pre-transaction/calculateSolanaNullifierCount.mjs";
11
+ import { getFeeStructure as u } from "../../functions/pre-transaction/getFeeStructure.mjs";
18
12
  import "../../functions/pre-transaction/index.mjs";
19
- import { solanaTransactCallRelayer as v } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
20
- import { calculateTotalFee as y } from "../../functions/utils/fees.utils.mjs";
21
- import { constructSolanaZkProof as b } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
13
+ import { calculateTotalFee as d } from "../../functions/utils/fees.utils.mjs";
14
+ import { hinkalSolanaTransact as f } from "./hinkalSolanaTransact.mjs";
22
15
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaTransfer.ts
23
- var x = async (e, t, n, r, i, a) => {
24
- let s = (await u(e, t, n, r, 6))[0], c = o().toString(), { outputUtxos: l } = d(e.userKeys, s, r[0], c, !0, [i], [a]);
25
- return {
26
- inputUtxos: s,
27
- senderUtxo: l[0],
28
- recipientUtxo: l[1]
29
- };
30
- }, S = async (e, t, r, i, a, o, s, c, l, u) => {
31
- let { jobId: d, signedMessageHash: f } = await m(e, {
32
- chainId: t,
33
- mintAddresses: r,
34
- amountChanges: i,
35
- relayAddress: s,
36
- recipient: n,
37
- signer: s,
38
- functionName: "transfer",
39
- accounts: c,
40
- relayerFee: l,
41
- variableRate: 0n,
42
- hinkalInstructions: [],
43
- remainingAccounts: [],
44
- recipientAddress: a,
45
- recipientAmounts: [o]
46
- }), { R8: h, S: g } = e.userKeys.signEddsa(BigInt(f));
47
- return p(d, {
48
- R8: h,
49
- S: g
50
- }, t, { adminData: u });
51
- }, C = async (o, u, d, p, m, v, S) => {
52
- if (!s(p)) throw Error(r.RECIPIENT_FORMAT_INCORRECT);
53
- let C = l(u), w = [...d], { originalDeployer: T } = e[C].contractData;
54
- if (!T) throw Error("missing data");
55
- let { userKeys: E, merkleTreeHinkalByChain: D } = o, O = u.map((e) => e.erc20TokenAddress);
56
- if (O.length > 1) throw Error("Solana Transfer: Only one mint address is supported");
57
- let k = m ?? O[0], A = {
58
- mintTo: k,
59
- nullifierCount: await h(o, C, O, w),
16
+ var p = async (p, m, h, g, _, v, y, b = !1) => {
17
+ if (b) throw Error("onlyGasEstimate is not supported for Solana transfer");
18
+ if (!i(g)) throw Error(r.RECIPIENT_FORMAT_INCORRECT);
19
+ let x = s(m), S = [...h], C = m.map((e) => e.erc20TokenAddress);
20
+ if (C.length > 1) throw Error("Solana Transfer: Only one mint address is supported");
21
+ let { originalDeployer: w } = e[x].contractData;
22
+ if (!w) throw Error("missing data");
23
+ let T = _ ?? C[0], E = {
24
+ mintTo: T,
25
+ nullifierCount: await l(p, x, C, S),
60
26
  rootInsertCount: 2
61
- }, j = v ?? await _(C, k, O, c.Transact, [], 5n, A);
62
- j.variableRate ||= t;
63
- let M = y(-w[0], j), N = -w[0];
64
- w[0] -= M;
65
- let [P, F, { inputUtxos: I, senderUtxo: L, recipientUtxo: R }] = await Promise.all([
66
- o.getRandomRelay(C, !0),
67
- o.getEthereumAddressByChain(C),
68
- x(o, C, O, w, p, N)
69
- ]);
70
- if (!P) throw Error(r.RELAYER_NOT_AVAILABLE);
71
- let z = a.findCorrectRandomization(i(31), o.userKeys.getShieldedPrivateKey()), B = {
72
- tokenNumber: O.length,
73
- nullifierAmount: I.length,
74
- outputAmount: 2
75
- };
76
- g([I], [[L]], w);
77
- let { proofAArr: V, proofBArr: H, proofCArr: U, publicInputsArr: W, commitmentValidationData: G, rootHashHinkalIndex: K, encryptedOutputs: q } = await b(D[C], E, [O[0]], [I], [[L, R]], z, M, 0n, n, P, B, void 0, C), J = {
78
- recipient: P,
79
- mint: O[0] === "11111111111111111111111111111111" ? void 0 : O[0]
80
- };
81
- return {
82
- chainId: C,
83
- relay: P,
84
- args: {
85
- proofAArr: V,
86
- proofBArr: H,
87
- proofCArr: U,
88
- publicInputsArr: W,
89
- encryptedOutputs: q,
90
- relayerFee: M.toString(),
91
- dimensions: B,
92
- rootHashIndex: K.toString()
93
- },
94
- accounts: J,
95
- adminData: f(S, C, O, w, F),
96
- commitmentValidationData: G,
97
- recipientUtxo: R
98
- };
99
- }, w = async (e, n, i, a, o, u, d, p = !1) => {
100
- if (p) throw Error("onlyGasEstimate is not supported for Solana transfer");
101
- if (!s(a)) throw Error(r.RECIPIENT_FORMAT_INCORRECT);
102
- let m = l(n), g = [...i], b = n.map((e) => e.erc20TokenAddress);
103
- if (b.length > 1) throw Error("Solana Transfer: Only one mint address is supported");
104
- if (e.generateProofRemotely) {
105
- let n = u ?? await _(m, o, b, c.Transact, [], 5n, {
106
- mintTo: o ?? b[0],
107
- nullifierCount: await h(e, m, b, g),
108
- rootInsertCount: 2
109
- });
110
- n.variableRate ||= t;
111
- let i = y(-g[0], n), s = -g[0];
112
- g[0] -= i;
113
- let [l, p] = await Promise.all([e.getRandomRelay(m, !0), e.getEthereumAddressByChain(m)]);
114
- if (!l) throw Error(r.RELAYER_NOT_AVAILABLE);
115
- return S(e, m, b, g, a, s, l, {
116
- recipient: l,
117
- mint: b[0] === "11111111111111111111111111111111" ? void 0 : b[0]
118
- }, i, f(d, m, b, g, p));
119
- }
120
- let x = await C(e, n, i, a, o, u, d);
121
- return v({
122
- chainId: x.chainId,
123
- relayAddress: x.relay,
27
+ }, D = v ?? await u(x, T, C, a.Transact, [], 5n, E);
28
+ D.variableRate ||= t;
29
+ let O = -S[0], k = d(O, D);
30
+ S[0] -= k;
31
+ let [A, j] = await Promise.all([p.getRandomRelay(x, !0), p.getEthereumAddressByChain(x)]);
32
+ if (!A) throw Error(r.RELAYER_NOT_AVAILABLE);
33
+ let M = {
34
+ recipient: A,
35
+ mint: C[0] === "11111111111111111111111111111111" ? void 0 : C[0]
36
+ }, N = c(y, x, C, S, j);
37
+ return f(p, {
38
+ chainId: x,
39
+ mintAddresses: C,
40
+ amountChanges: S,
41
+ relayAddress: A,
42
+ recipient: n,
43
+ signer: A,
124
44
  functionName: "transfer",
125
- args: x.args,
126
- accounts: x.accounts,
127
- adminData: x.adminData,
128
- commitmentValidationData: x.commitmentValidationData
45
+ accounts: M,
46
+ relayerFee: k,
47
+ recipientAddress: g,
48
+ recipientAmounts: [O],
49
+ submit: {
50
+ mode: o.Relayer,
51
+ adminData: N
52
+ }
129
53
  });
130
54
  };
131
55
  //#endregion
132
- export { w as hinkalSolanaTransfer };
56
+ export { p as hinkalSolanaTransfer };
@@ -1 +1 @@
1
- const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../functions/web3/etherFunctions.cjs`),r=require(`../crypto-keys/keys.cjs`),i=require(`../../functions/utils/time.utils.cjs`),a=require(`../../types/external-action.types.cjs`);require(`../../types/index.cjs`);const o=require(`../../functions/utils/token-check.utils.cjs`),s=require(`../../functions/web3/events/getShieldedBalance.cjs`),c=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),l=require(`../../functions/pre-transaction/constructAdminData.cjs`),u=require(`../../functions/snarkjs/constructTxEnclave.cjs`),d=require(`../../functions/pre-transaction/calculateSolanaNullifierCount.cjs`),f=require(`../../functions/pre-transaction/ensureAmountChanges.cjs`),p=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const m=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);require(`../../constants/index.cjs`);const h=require(`../../functions/utils/fees.utils.cjs`),g=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`);var _=async(e,t,n,r)=>{let a=[...await s.addPaddingToUtxos(e,t,n,r,6)][0],o=i.getCurrentTimeInSeconds().toString(),{outputUtxos:l}=c.outputUtxoProcessing(e.userKeys,a,r[0],o);return{inputUtxos:a,outputUtxos:l}},v=async(e,t,n,r,i,a,o,s,c)=>{let{jobId:l,signedMessageHash:d}=await u.prepareSolanaTxEnclaveCall(e,{chainId:t,mintAddresses:n,amountChanges:r,relayAddress:a,recipient:i,signer:a,functionName:`transact`,accounts:o,relayerFee:s.flatFee,variableRate:s.variableRate,hinkalInstructions:[],remainingAccounts:[]}),{R8:f,S:p}=e.userKeys.signEddsa(BigInt(d));return u.finalizeSolanaTxEnclaveCallRelay(l,{R8:f,S:p},t,{adminData:c})},y=async(i,s,c,u,y,b,x)=>{let S=o.validateAndGetChainId(s),C=s.map(e=>e.erc20TokenAddress),w=s[0];if(!w)throw Error(`Solana Withdraw: No Token Found`);let{originalDeployer:T}=e.networkRegistry[S].contractData;if(!T)throw Error(`missing data`);let{userKeys:E,merkleTreeHinkalByChain:D}=i,O=y??C[0],k={mintTo:C[0],recipient:u,nullifierCount:await d.calculateSolanaNullifierCount(i,S,C,c)},A=b??await p.getFeeStructure(S,O,C,a.ExternalActionId.Transact,[],void 0,k),j=await h.calculateModifiedFeeStructure(S,w,-c[0],A);c[0]-=j.flatFee;let[M,N]=await Promise.all([i.getRandomRelay(S,!0),i.getEthereumAddress()]);if(!M)throw Error(t.transactionErrorCodes.RELAYER_NOT_AVAILABLE);if(C.length>1)throw Error(`Solana Withdraw: Only one mint address is supported`);let P={recipient:u,mint:C[0]===`11111111111111111111111111111111`?void 0:C[0]},F=l.constructAdminData(x,S,C,c,N);if(i.generateProofRemotely)return v(i,S,C,c,u,M,P,j,F);let{inputUtxos:I,outputUtxos:L}=await _(i,S,C,c),R=r.UserKeys.findCorrectRandomization(n.randomBigInt(31),i.userKeys.getShieldedPrivateKey()),z={tokenNumber:C.length,nullifierAmount:I.length,outputAmount:L.length};f.ensureAmountChanges([I],[L],c);let{proofAArr:B,proofBArr:V,proofCArr:H,publicInputsArr:U,commitmentValidationData:W,rootHashHinkalIndex:G,encryptedOutputs:K}=await g.constructSolanaZkProof(D[S],E,[C[0]],[I],[L],R,j.flatFee,j.variableRate,u,M,z,void 0,S);return m.solanaTransactCallRelayer({chainId:S,relayAddress:M,functionName:`transact`,args:{proofAArr:B,proofBArr:V,proofCArr:H,publicInputsArr:U,encryptedOutputs:K,relayerFee:j.flatFee.toString(),dimensions:z,rootHashIndex:G.toString()},accounts:P,commitmentValidationData:W,adminData:F})};exports.hinkalSolanaWithdraw=y;
1
+ const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../types/solana-transact.types.cjs`);require(`../../types/index.cjs`);const i=require(`../../functions/utils/token-check.utils.cjs`),a=require(`../../functions/pre-transaction/constructAdminData.cjs`),o=require(`../../functions/pre-transaction/calculateSolanaNullifierCount.cjs`),s=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`),require(`../../constants/index.cjs`);const c=require(`../../functions/utils/fees.utils.cjs`),l=require(`./hinkalSolanaTransact.cjs`);var u=async(u,d,f,p,m,h,g)=>{let _=i.validateAndGetChainId(d),v=d.map(e=>e.erc20TokenAddress),y=d[0];if(!y)throw Error(`Solana Withdraw: No Token Found`);let{originalDeployer:b}=e.networkRegistry[_].contractData;if(!b)throw Error(`missing data`);let x=m??v[0],S={mintTo:v[0],recipient:p,nullifierCount:await o.calculateSolanaNullifierCount(u,_,v,f)},C=h??await s.getFeeStructure(_,x,v,n.ExternalActionId.Transact,[],void 0,S),w=await c.calculateModifiedFeeStructure(_,y,-f[0],C);f[0]-=w.flatFee;let[T,E]=await Promise.all([u.getRandomRelay(_,!0),u.getEthereumAddress()]);if(!T)throw Error(t.transactionErrorCodes.RELAYER_NOT_AVAILABLE);if(v.length>1)throw Error(`Solana Withdraw: Only one mint address is supported`);let D={recipient:p,mint:v[0]===`11111111111111111111111111111111`?void 0:v[0]},O=a.constructAdminData(g,_,v,f,E);return l.hinkalSolanaTransact(u,{chainId:_,mintAddresses:v,amountChanges:f,relayAddress:T,recipient:p,signer:T,functionName:`transact`,accounts:D,relayerFee:w.flatFee,variableRate:w.variableRate,submit:{mode:r.SolanaSubmitMode.Relayer,adminData:O}})};exports.hinkalSolanaWithdraw=u;