@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 +1 @@
1
- var e=function(e){return e.DEVELOPMENT=`development`,e.PLAYGROUND=`playground`,e.PRODUCTION=`production`,e.STAGING=`staging`,e}({});e.DEVELOPMENT,e.PLAYGROUND,e.STAGING;var t=typeof process<`u`&&process?.release?.name===`node`,n=typeof process<`u`&&process.versions!=null&&process.versions.node!=null,r=typeof window<`u`&&window?.location?.protocol===`chrome-extension:`,i=e.PRODUCTION,a=i===e.DEVELOPMENT,o=i===e.PLAYGROUND,s=i===e.STAGING,c=s||a||o,l=typeof navigator<`u`&&navigator.product===`ReactNative`,u=c||t&&i===e.PRODUCTION;exports.DEPLOYMENT_MODE=e,exports.deploymentMode=i,exports.isDevelopment=a,exports.isExtension=r,exports.isNode=n,exports.isNotClientProduction=u,exports.isNotProduction=c,exports.isPlayground=o,exports.isReactNative=l,exports.isStaging=s;
1
+ const e=require(`../functions/utils/enum.utils.cjs`);var t=function(e){return e.DEVELOPMENT=`development`,e.PLAYGROUND=`playground`,e.PRODUCTION=`production`,e.STAGING=`staging`,e}({}),n={[t.DEVELOPMENT]:[`localhost`,`192.`,`127.`],[t.PLAYGROUND]:[`playground`],[t.STAGING]:[`working`,`staging`]},r=typeof process<`u`&&process?.release?.name===`node`,i=typeof process<`u`&&process.versions!=null&&process.versions.node!=null,a=typeof window<`u`&&window?.location?.protocol===`chrome-extension:`;function o(e,t){return t.some(t=>e.includes(t))}var s=()=>(require(`dotenv`).config({path:`DOTENV_OVERRIDE`in process.env?process.env.DOTENV_OVERRIDE:void 0}),process.env.DEPLOYMENT_MODE?.startsWith(`production`)?t.PRODUCTION:e.toEnumValue(t,process.env.DEPLOYMENT_MODE)||t.DEVELOPMENT),c=(()=>{if(!r&&typeof window>`u`)return;if(r)return s();if(window?.location?.protocol===`chrome-extension:`)return e.toEnumValue(t,WALLET_DEPLOYMENT_MODE)||t.STAGING;let i=window?.location?.host;return i?o(i,n[t.DEVELOPMENT])?t.DEVELOPMENT:o(i,n[t.PLAYGROUND])?t.PLAYGROUND:o(i,n[t.STAGING])?t.STAGING:t.PRODUCTION:t.PRODUCTION})(),l=c===t.DEVELOPMENT,u=c===t.PLAYGROUND,d=c===t.STAGING,f=d||l||u,p=typeof navigator<`u`&&navigator.product===`ReactNative`,m=f||r&&c===t.PRODUCTION;exports.DEPLOYMENT_MODE=t,exports.deploymentMode=c,exports.isDevelopment=l,exports.isExtension=a,exports.isNode=i,exports.isNotClientProduction=m,exports.isNotProduction=f,exports.isPlayground=u,exports.isReactNative=p,exports.isStaging=d;
@@ -1,8 +1,26 @@
1
+ import { __require as e } from "../../../_virtual/_rolldown/runtime.mjs";
2
+ import { toEnumValue as t } from "../functions/utils/enum.utils.mjs";
1
3
  //#region libs/shared/common/src/constants/vite.constants.ts
2
- var e = /* @__PURE__ */ function(e) {
4
+ var n = /* @__PURE__ */ function(e) {
3
5
  return e.DEVELOPMENT = "development", e.PLAYGROUND = "playground", e.PRODUCTION = "production", e.STAGING = "staging", e;
4
- }({});
5
- e.DEVELOPMENT, e.PLAYGROUND, e.STAGING;
6
- var t = typeof process < "u" && process?.release?.name === "node", n = typeof process < "u" && process.versions != null && process.versions.node != null, r = typeof window < "u" && window?.location?.protocol === "chrome-extension:", i = e.PRODUCTION, a = i === e.DEVELOPMENT, o = i === e.PLAYGROUND, s = i === e.STAGING, c = s || a || o, l = typeof navigator < "u" && navigator.product === "ReactNative", u = c || t && i === e.PRODUCTION;
6
+ }({}), r = {
7
+ [n.DEVELOPMENT]: [
8
+ "localhost",
9
+ "192.",
10
+ "127."
11
+ ],
12
+ [n.PLAYGROUND]: ["playground"],
13
+ [n.STAGING]: ["working", "staging"]
14
+ }, i = typeof process < "u" && process?.release?.name === "node", a = typeof process < "u" && process.versions != null && process.versions.node != null, o = typeof window < "u" && window?.location?.protocol === "chrome-extension:";
15
+ function s(e, t) {
16
+ return t.some((t) => e.includes(t));
17
+ }
18
+ var c = () => (e("dotenv").config({ path: "DOTENV_OVERRIDE" in process.env ? process.env.DOTENV_OVERRIDE : void 0 }), process.env.DEPLOYMENT_MODE?.startsWith("production") ? n.PRODUCTION : t(n, process.env.DEPLOYMENT_MODE) || n.DEVELOPMENT), l = (() => {
19
+ if (!i && typeof window > "u") return;
20
+ if (i) return c();
21
+ if (window?.location?.protocol === "chrome-extension:") return t(n, WALLET_DEPLOYMENT_MODE) || n.STAGING;
22
+ let e = window?.location?.host;
23
+ return e ? s(e, r[n.DEVELOPMENT]) ? n.DEVELOPMENT : s(e, r[n.PLAYGROUND]) ? n.PLAYGROUND : s(e, r[n.STAGING]) ? n.STAGING : n.PRODUCTION : n.PRODUCTION;
24
+ })(), u = l === n.DEVELOPMENT, d = l === n.PLAYGROUND, f = l === n.STAGING, p = f || u || d, m = typeof navigator < "u" && navigator.product === "ReactNative", h = p || i && l === n.PRODUCTION;
7
25
  //#endregion
8
- export { e as DEPLOYMENT_MODE, i as deploymentMode, a as isDevelopment, r as isExtension, n as isNode, u as isNotClientProduction, c as isNotProduction, o as isPlayground, l as isReactNative, s as isStaging };
26
+ export { n as DEPLOYMENT_MODE, l as deploymentMode, u as isDevelopment, o as isExtension, a as isNode, h as isNotClientProduction, p as isNotProduction, d as isPlayground, m as isReactNative, f as isStaging };
@@ -1 +1 @@
1
- require(`./poseidon.cjs`),require(`./babyJub.cjs`),require(`./eddsa.cjs`),require(`./ecdh-sealed-keys.cjs`),require(`./preProcessing.cjs`),require(`./ecdh.cjs`),require(`./ecdh-dual-path.cjs`);
1
+ require(`./poseidon.cjs`),require(`./babyJub.cjs`),require(`./eddsa.cjs`),require(`./ecdh-sealed-keys.cjs`),require(`./preProcessing.cjs`),require(`./ecdh.cjs`);
@@ -4,4 +4,3 @@ export * from './preProcessing';
4
4
  export * from './eddsa';
5
5
  export * from './ecdh';
6
6
  export * from './ecdh-sealed-keys';
7
- export * from './ecdh-dual-path';
@@ -4,4 +4,3 @@ import "./eddsa.mjs";
4
4
  import "./ecdh-sealed-keys.mjs";
5
5
  import "./preProcessing.mjs";
6
6
  import "./ecdh.mjs";
7
- import "./ecdh-dual-path.mjs";
@@ -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(`../utxo/Utxo.cjs`),s=require(`../../types/external-action.types.cjs`);require(`../../types/index.cjs`);const c=require(`../../functions/utils/token-check.utils.cjs`),l=require(`../../functions/snarkjs/constructTxEnclave.cjs`),u=require(`../../functions/pre-transaction/getFeeStructure.cjs`),d=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),f=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`);var p=async(e,n,r,i,a,o,s,c,u,d,f)=>{let{jobId:p,signedMessageHash:m}=await l.prepareSolanaTxEnclaveCall(e,{chainId:n,mintAddresses:[r],amountChanges:i,relayAddress:a,recipient:t.solanaNativeAddress,signer:a,functionName:`transfer`,accounts:o,relayerFee:u,variableRate:0n,hinkalInstructions:[],remainingAccounts:[],recipientAddress:s,recipientAmounts:[c],inputCommitments:[f]},d),{R8:h,S:g}=d.signEddsa(BigInt(m));return l.finalizeSolanaTxEnclaveCallRelay(p,{R8:h,S:g},n)},m=async(l,m,h,g,_)=>{let v=c.validateAndGetChainId([m]),y=m.erc20TokenAddress;if(h.getTokenAddress(v)!==y)throw Error(`Off-chain UTXO token mismatch`);let b=_?new i.UserKeys(_):new i.UserKeys(h.nullifyingKey,h.nullifyingKey);if(!h.nullifyingKey&&!_)throw Error(`Claimable UTXO nullifyingKey is missing`);let x=b.getShieldedPrivateKey();if(h.nullifyingKey&&h.nullifyingKey!==x)throw Error(`Claimable UTXO key mismatch`);let{originalDeployer:S}=e.networkRegistry[v].contractData;if(!S)throw Error(`missing data`);let C=o.Utxo.createFrom(h,{nullifyingKey:x}),w=g??await u.getFeeStructure(v,y,[y],s.ExternalActionId.Transact,void 0,void 0,{mintTo:y,nullifierCount:1,rootInsertCount:2});if(w.feeToken!==y)throw Error(`Claim fee token mismatch: fee must be paid from claimed UTXO token`);let T=w.variableRate>0n?w.variableRate:t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;if(C.amount<=w.flatFee)throw Error(n.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);let E=C.amount-w.flatFee,D=E*T/10000n,O=E-D;if(O<=0n)throw Error(n.transactionErrorCodes.RECIPIENT_AMOUNT_INVALID);let k=w.flatFee+D,A=l.getRecipientInfo(),[j,M,N,,,P]=A.split(`,`);if(!M||!N||!j||!P)throw Error(`Invalid recipient info`);let F=a.getCurrentTimeInSeconds().toString(),I=new o.Utxo({amount:0n,erc20TokenAddress:C.erc20TokenAddress,mintAddress:C.mintAddress,nullifyingKey:b.getShieldedPrivateKey(),spendingPublicKey:b.getSpendingKeyPair().pubSpendingBJJPoint}),L=new o.Utxo({amount:0n,erc20TokenAddress:C.erc20TokenAddress,mintAddress:C.mintAddress,nullifyingKey:b.getShieldedPrivateKey(),timeStamp:F,spendingPublicKey:b.getSpendingKeyPair().pubSpendingBJJPoint}),R=new o.Utxo({amount:O,erc20TokenAddress:C.erc20TokenAddress,mintAddress:C.mintAddress,timeStamp:F,H0:[BigInt(M),BigInt(N)],stealthAddress:j,encryptionKey:P}),z=[C,I],B=[L,R],V=await l.getRandomRelay(v,!0);if(!V)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H={recipient:V,mint:y===`11111111111111111111111111111111`?void 0:y};if(l.generateProofRemotely)return p(l,v,y,[-(O+k)],V,H,A,O,k,b,C.getCommitment());let U=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),b.getShieldedPrivateKey()),W={tokenNumber:1,nullifierAmount:z.length,outputAmount:B.length},{proofAArr:G,proofBArr:K,proofCArr:q,publicInputsArr:J,commitmentValidationData:Y,rootHashHinkalIndex:X,encryptedOutputs:Z}=await f.constructSolanaZkProof(l.merkleTreeHinkalByChain[v],b,[y],[z],[B],U,k,0n,t.solanaNativeAddress,V,W,void 0,v);return d.solanaTransactCallRelayer({chainId:v,relayAddress:V,functionName:`transfer`,args:{proofAArr:G,proofBArr:K,proofCArr:q,publicInputsArr:J,encryptedOutputs:Z,relayerFee:k.toString(),dimensions:W,rootHashIndex:X.toString()},accounts:H,commitmentValidationData:Y})};exports.hinkalSolanaClaimUtxo=m;
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../crypto-keys/keys.cjs`),i=require(`../utxo/Utxo.cjs`),a=require(`../../types/external-action.types.cjs`),o=require(`../../types/solana-transact.types.cjs`);require(`../../types/index.cjs`);const s=require(`../../functions/utils/token-check.utils.cjs`),c=require(`../../functions/pre-transaction/getFeeStructure.cjs`),l=require(`./hinkalSolanaTransact.cjs`);var u=async(u,d,f,p,m)=>{let h=s.validateAndGetChainId([d]),g=d.erc20TokenAddress;if(f.getTokenAddress(h)!==g)throw Error(`Off-chain UTXO token mismatch`);let _=m?new r.UserKeys(m):new r.UserKeys(f.nullifyingKey,f.nullifyingKey);if(!f.nullifyingKey&&!m)throw Error(`Claimable UTXO nullifyingKey is missing`);let v=_.getShieldedPrivateKey();if(f.nullifyingKey&&f.nullifyingKey!==v)throw Error(`Claimable UTXO key mismatch`);let{originalDeployer:y}=e.networkRegistry[h].contractData;if(!y)throw Error(`missing data`);let b=i.Utxo.createFrom(f,{nullifyingKey:v}),x=p??await c.getFeeStructure(h,g,[g],a.ExternalActionId.Transact,void 0,void 0,{mintTo:g,nullifierCount:1,rootInsertCount:2});if(x.feeToken!==g)throw Error(`Claim fee token mismatch: fee must be paid from claimed UTXO token`);let S=x.variableRate>0n?x.variableRate:t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;if(b.amount<=x.flatFee)throw Error(n.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);let C=b.amount-x.flatFee,w=C*S/10000n,T=C-w;if(T<=0n)throw Error(n.transactionErrorCodes.RECIPIENT_AMOUNT_INVALID);let E=x.flatFee+w,D=u.getRecipientInfo(),[O,k,A,,,j]=D.split(`,`);if(!k||!A||!O||!j)throw Error(`Invalid recipient info`);let M=new i.Utxo({amount:0n,erc20TokenAddress:b.erc20TokenAddress,mintAddress:b.mintAddress,nullifyingKey:_.getShieldedPrivateKey(),spendingPublicKey:_.getSpendingKeyPair().pubSpendingBJJPoint}),N=await u.getRandomRelay(h,!0);if(!N)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let P={recipient:N,mint:g===`11111111111111111111111111111111`?void 0:g};return l.hinkalSolanaTransact(u,{chainId:h,mintAddresses:[g],amountChanges:[-(T+E)],relayAddress:N,recipient:t.solanaNativeAddress,signer:N,functionName:`transfer`,accounts:P,relayerFee:E,recipientAddress:D,recipientAmounts:[T],inputUtxos:[[b,M]],userKeys:_,submit:{mode:o.SolanaSubmitMode.Relayer}})};exports.hinkalSolanaClaimUtxo=u;
@@ -1,111 +1,64 @@
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 { Utxo as s } from "../utxo/Utxo.mjs";
8
- import { ExternalActionId as c } from "../../types/external-action.types.mjs";
4
+ import { UserKeys as i } from "../crypto-keys/keys.mjs";
5
+ import { Utxo as a } from "../utxo/Utxo.mjs";
6
+ import { ExternalActionId as o } from "../../types/external-action.types.mjs";
7
+ import { SolanaSubmitMode as s } from "../../types/solana-transact.types.mjs";
9
8
  import "../../types/index.mjs";
10
- import { validateAndGetChainId as l } from "../../functions/utils/token-check.utils.mjs";
11
- import { finalizeSolanaTxEnclaveCallRelay as u, prepareSolanaTxEnclaveCall as d } from "../../functions/snarkjs/constructTxEnclave.mjs";
12
- import { getFeeStructure as f } from "../../functions/pre-transaction/getFeeStructure.mjs";
13
- import { solanaTransactCallRelayer as p } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
14
- import { constructSolanaZkProof as m } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
9
+ import { validateAndGetChainId as c } from "../../functions/utils/token-check.utils.mjs";
10
+ import { getFeeStructure as l } from "../../functions/pre-transaction/getFeeStructure.mjs";
11
+ import { hinkalSolanaTransact as u } from "./hinkalSolanaTransact.mjs";
15
12
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.ts
16
- var h = async (e, t, r, i, a, o, s, c, l, f, p) => {
17
- let { jobId: m, signedMessageHash: h } = await d(e, {
18
- chainId: t,
19
- mintAddresses: [r],
20
- amountChanges: i,
21
- relayAddress: a,
22
- recipient: n,
23
- signer: a,
24
- functionName: "transfer",
25
- accounts: o,
26
- relayerFee: l,
27
- variableRate: 0n,
28
- hinkalInstructions: [],
29
- remainingAccounts: [],
30
- recipientAddress: s,
31
- recipientAmounts: [c],
32
- inputCommitments: [p]
33
- }, f), { R8: g, S: _ } = f.signEddsa(BigInt(h));
34
- return u(m, {
35
- R8: g,
36
- S: _
37
- }, t);
38
- }, g = async (u, d, g, _, v) => {
39
- let y = l([d]), b = d.erc20TokenAddress;
40
- if (g.getTokenAddress(y) !== b) throw Error("Off-chain UTXO token mismatch");
41
- let x = v ? new a(v) : new a(g.nullifyingKey, g.nullifyingKey);
42
- if (!g.nullifyingKey && !v) throw Error("Claimable UTXO nullifyingKey is missing");
43
- let S = x.getShieldedPrivateKey();
44
- if (g.nullifyingKey && g.nullifyingKey !== S) throw Error("Claimable UTXO key mismatch");
45
- let { originalDeployer: C } = e[y].contractData;
46
- if (!C) throw Error("missing data");
47
- let w = s.createFrom(g, { nullifyingKey: S }), T = _ ?? await f(y, b, [b], c.Transact, void 0, void 0, {
48
- mintTo: b,
13
+ var d = async (d, f, p, m, h) => {
14
+ let g = c([f]), _ = f.erc20TokenAddress;
15
+ if (p.getTokenAddress(g) !== _) throw Error("Off-chain UTXO token mismatch");
16
+ let v = h ? new i(h) : new i(p.nullifyingKey, p.nullifyingKey);
17
+ if (!p.nullifyingKey && !h) throw Error("Claimable UTXO nullifyingKey is missing");
18
+ let y = v.getShieldedPrivateKey();
19
+ if (p.nullifyingKey && p.nullifyingKey !== y) throw Error("Claimable UTXO key mismatch");
20
+ let { originalDeployer: b } = e[g].contractData;
21
+ if (!b) throw Error("missing data");
22
+ let x = a.createFrom(p, { nullifyingKey: y }), S = m ?? await l(g, _, [_], o.Transact, void 0, void 0, {
23
+ mintTo: _,
49
24
  nullifierCount: 1,
50
25
  rootInsertCount: 2
51
26
  });
52
- if (T.feeToken !== b) throw Error("Claim fee token mismatch: fee must be paid from claimed UTXO token");
53
- let E = T.variableRate > 0n ? T.variableRate : t;
54
- if (w.amount <= T.flatFee) throw Error(r.INSUFFICIENT_FUNDS_TO_TRANSACT);
55
- let D = w.amount - T.flatFee, O = D * E / 10000n, k = D - O;
56
- if (k <= 0n) throw Error(r.RECIPIENT_AMOUNT_INVALID);
57
- let A = T.flatFee + O, j = u.getRecipientInfo(), [M, N, P, , , F] = j.split(",");
58
- if (!N || !P || !M || !F) throw Error("Invalid recipient info");
59
- let I = o().toString(), L = new s({
27
+ if (S.feeToken !== _) throw Error("Claim fee token mismatch: fee must be paid from claimed UTXO token");
28
+ let C = S.variableRate > 0n ? S.variableRate : t;
29
+ if (x.amount <= S.flatFee) throw Error(r.INSUFFICIENT_FUNDS_TO_TRANSACT);
30
+ let w = x.amount - S.flatFee, T = w * C / 10000n, E = w - T;
31
+ if (E <= 0n) throw Error(r.RECIPIENT_AMOUNT_INVALID);
32
+ let D = S.flatFee + T, O = d.getRecipientInfo(), [k, A, j, , , M] = O.split(",");
33
+ if (!A || !j || !k || !M) throw Error("Invalid recipient info");
34
+ let N = new a({
60
35
  amount: 0n,
61
- erc20TokenAddress: w.erc20TokenAddress,
62
- mintAddress: w.mintAddress,
63
- nullifyingKey: x.getShieldedPrivateKey(),
64
- spendingPublicKey: x.getSpendingKeyPair().pubSpendingBJJPoint
65
- }), R = new s({
66
- amount: 0n,
67
- erc20TokenAddress: w.erc20TokenAddress,
68
- mintAddress: w.mintAddress,
69
- nullifyingKey: x.getShieldedPrivateKey(),
70
- timeStamp: I,
71
- spendingPublicKey: x.getSpendingKeyPair().pubSpendingBJJPoint
72
- }), z = new s({
73
- amount: k,
74
- erc20TokenAddress: w.erc20TokenAddress,
75
- mintAddress: w.mintAddress,
76
- timeStamp: I,
77
- H0: [BigInt(N), BigInt(P)],
78
- stealthAddress: M,
79
- encryptionKey: F
80
- }), B = [w, L], V = [R, z], H = await u.getRandomRelay(y, !0);
81
- if (!H) throw Error(r.RELAYER_NOT_AVAILABLE);
82
- let U = {
83
- recipient: H,
84
- mint: b === "11111111111111111111111111111111" ? void 0 : b
36
+ erc20TokenAddress: x.erc20TokenAddress,
37
+ mintAddress: x.mintAddress,
38
+ nullifyingKey: v.getShieldedPrivateKey(),
39
+ spendingPublicKey: v.getSpendingKeyPair().pubSpendingBJJPoint
40
+ }), P = await d.getRandomRelay(g, !0);
41
+ if (!P) throw Error(r.RELAYER_NOT_AVAILABLE);
42
+ let F = {
43
+ recipient: P,
44
+ mint: _ === "11111111111111111111111111111111" ? void 0 : _
85
45
  };
86
- if (u.generateProofRemotely) return h(u, y, b, [-(k + A)], H, U, j, k, A, x, w.getCommitment());
87
- let W = a.findCorrectRandomization(i(31), x.getShieldedPrivateKey()), G = {
88
- tokenNumber: 1,
89
- nullifierAmount: B.length,
90
- outputAmount: V.length
91
- }, { proofAArr: K, proofBArr: q, proofCArr: J, publicInputsArr: Y, commitmentValidationData: X, rootHashHinkalIndex: Z, encryptedOutputs: Q } = await m(u.merkleTreeHinkalByChain[y], x, [b], [B], [V], W, A, 0n, n, H, G, void 0, y);
92
- return p({
93
- chainId: y,
94
- relayAddress: H,
46
+ return u(d, {
47
+ chainId: g,
48
+ mintAddresses: [_],
49
+ amountChanges: [-(E + D)],
50
+ relayAddress: P,
51
+ recipient: n,
52
+ signer: P,
95
53
  functionName: "transfer",
96
- args: {
97
- proofAArr: K,
98
- proofBArr: q,
99
- proofCArr: J,
100
- publicInputsArr: Y,
101
- encryptedOutputs: Q,
102
- relayerFee: A.toString(),
103
- dimensions: G,
104
- rootHashIndex: Z.toString()
105
- },
106
- accounts: U,
107
- commitmentValidationData: X
54
+ accounts: F,
55
+ relayerFee: D,
56
+ recipientAddress: O,
57
+ recipientAmounts: [E],
58
+ inputUtxos: [[x, N]],
59
+ userKeys: v,
60
+ submit: { mode: s.Relayer }
108
61
  });
109
62
  };
110
63
  //#endregion
111
- export { g as hinkalSolanaClaimUtxo };
64
+ export { d as hinkalSolanaClaimUtxo };
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/solanaMint.utils.cjs`),c=require(`../../functions/utils/addresses.cjs`),l=require(`../../types/external-action.types.cjs`),u=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/snarkjs/common.snarkjs.cjs`),p=require(`../../functions/pre-transaction/solana.cjs`),m=require(`../../functions/pre-transaction/constructAdminData.cjs`),h=require(`../../functions/snarkjs/constructTxEnclave.cjs`),g=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),_=require(`../../functions/pre-transaction/getFeeStructure.cjs`),v=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`);require(`../../functions/pre-transaction/index.cjs`);const y=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),b=require(`./hinkalProoflessDeposit.utils.cjs`),x=require(`../../API/deposit-and-withdraw-status-calls.cjs`),S=require(`../../functions/utils/getUtxosFromReceiptSolana.cjs`),C=require(`../../functions/utils/fees.utils.cjs`);require(`../../functions/web3/index.cjs`);const w=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`);require(`../../functions/index.cjs`);let T=require(`@solana/web3.js`),E=require(`@coral-xyz/anchor`);var D=(n,a,o,c)=>{let{hinkalIdl:l,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[a].contractData;if(!l)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let m=n.userKeys.getShieldedPrivateKey(),h=n.getSolanaProgram(l),g=n.getSolanaPublicKey(),_=new T.PublicKey(d),v=new T.PublicKey(u),{mintPublicKey:y}=s.formatMintAddress(o.erc20TokenAddress),b=y.toString(),x=p.getStorageAccountPublicKey(v,_),S=p.getStorageVaultPublicKey(v,_),C=p.getMerkleAccountPublicKey(v,_),w=c.map(()=>f.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),m),m,n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)),E=w.map(e=>p.buildAnchorStealthAddressStructure(e)),D=i.UserKeys.getEncryptionKeyPair(m).publicKey,O=b===t.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:O?null:y,atasValue:O?null:void 0,storageAccount:x,storageVault:S,merkleAccount:C,amounts:c,mintAddressString:b,stealthAddressStructures:w,anchorStealthStructures:E,ownEncryptionKey:D}},O=async e=>{let t=b.buildProoflessEncryptedOutputs(e.stealthAddressStructures,e.amounts.map(()=>e.ownEncryptionKey)).map(e=>Buffer.from(e.slice(2),`hex`)),{current:n,next:r}=await p.resolveSolanaRootBuckets(e.program,e.merkleAccount,e.amounts.length);return e.program.methods.multiPaymentDeposit(e.amounts.map(e=>new E.BN(e.toString())),e.anchorStealthStructures,t,!0).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:n,rootBucketNext:r??e.program.programId,storageVaultAta:e.atasValue})},k=async(e,t,n,r,i,a,o)=>{let c=r.map(e=>e+C.calculateTotalFee(e,a)),l=D(e,t,n,c),d=(await x.updateDepositAndWithdrawStatus({chainId:t,hashedEthereumAddress:o,phase:u.DepositAndWithdrawPhase.BEFORE_DEPOSIT})).id??void 0,f=await(await O(l)).rpc(),p=await l.program.provider.connection.getLatestBlockhash();await l.program.provider.connection.confirmTransaction({blockhash:p.blockhash,lastValidBlockHeight:p.lastValidBlockHeight,signature:f},`finalized`);let m=await g.fetchSolanaTransaction(l.program.provider.connection,f,`finalized`);if(!m)throw Error(`Transaction missing`);await x.safeUpdateDepositAndWithdrawStatus({id:d,chainId:t,hashedEthereumAddress:o,phase:u.DepositAndWithdrawPhase.AFTER_DEPOSIT,depositTxHash:f});let{compressedAddress:h}=s.formatMintAddress(n.erc20TokenAddress),_=S.getOnChainUtxosFromReceiptSolana(m,l.program,e.userKeys,h),v=[],y=[..._];return i.forEach((e,t)=>{let n=c[t],r=y.find(e=>e.amount===n);if(!r)throw Error(`Could not find newly created UTXO with amount ${n} for recipient ${e}.`);v.push({recipientAddress:e,utxo:r}),y.splice(y.indexOf(r),1)}),{userDepositedUtxos:v,depositTxHash:f,statusId:d}},A=async(e,t,n,r,i,a,o,s)=>{let{jobId:c,signedMessageHash:l}=await h.prepareSolanaTxEnclaveCall(e,{chainId:t,mintAddresses:[n],amountChanges:[-r.amount],relayAddress:a,recipient:i,signer:a,functionName:`transact`,accounts:o,relayerFee:s.flatFee,variableRate:s.variableRate,hinkalInstructions:[],remainingAccounts:[],inputCommitments:[r.getCommitment()],useBlockedUtxos:!0}),{R8:u,S:d}=e.userKeys.signEddsa(BigInt(l));return h.finalizeSolanaTxEnclaveCall(c,{R8:u,S:d})},j=async(c,l,d,f,p,h,g,_,v,b,S,T,E,D)=>{let O=d.erc20TokenAddress;if(f.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:k}=e.networkRegistry[l].contractData;if(!k)throw Error(`missing data`);let j=await c.getRandomRelay(l,!0);if(!j)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let M=a.getCurrentTimeInSeconds().toString(),N=c.generateProofRemotely,P=N?5:1,F=[];for(let e=0;e<f.length;e+=P){let n=f.slice(e,e+P),a=await Promise.all(n.map(async({recipientAddress:n,utxo:a},u)=>{let f=e+u,h={recipient:n,mint:O===`11111111111111111111111111111111`?void 0:O},_=await C.calculateModifiedFeeStructure(l,d,g[f],p),v=m.constructAdminData(S,l,[O],[g[f]],await c.getEthereumAddress());if(N){let{solanaArgs:e,commitmentValidationData:t}=await A(c,l,O,a,n,j,h,_);return{relayAddress:j,functionName:`transact`,chainId:l,recipientAmount:g[f].toString(),args:e,accounts:h,adminData:v,commitmentValidationData:t,displayRecipient:E?.[f],destinationChainId:D?.chainId,destinationTokenAddress:D?.tokenAddress,destinationTokenAmount:D?.tokenAmounts?.[f]}}let{compressedAddress:y}=s.formatMintAddress(t.solanaNativeAddress),b=new o.Utxo({amount:0n,mintAddress:O,erc20TokenAddress:y,nullifyingKey:c.userKeys.getShieldedPrivateKey(),timeStamp:M,spendingPublicKey:c.userKeys.getSpendingKeyPair().pubSpendingBJJPoint}),x=[a,b],T=[b],k=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),c.userKeys.getShieldedPrivateKey()),P={tokenNumber:1,nullifierAmount:x.length,outputAmount:T.length},{proofAArr:F,proofBArr:I,proofCArr:L,publicInputsArr:R,commitmentValidationData:z,rootHashHinkalIndex:B,encryptedOutputs:V}=await w.constructSolanaZkProof(c.merkleTreeHinkalByChain[l],c.userKeys,[O],[x],[T],k,_.flatFee,_.variableRate,n,j,P,void 0,l);return{relayAddress:j,functionName:`transact`,chainId:l,recipientAmount:g[f].toString(),args:{proofAArr:F,proofBArr:I,proofCArr:L,publicInputsArr:R,encryptedOutputs:V,relayerFee:_.flatFee.toString(),dimensions:P,rootHashIndex:B.toString()},accounts:h,adminData:v,commitmentValidationData:z,displayRecipient:E?.[f],destinationChainId:D?.chainId,destinationTokenAddress:D?.tokenAddress,destinationTokenAmount:D?.tokenAmounts?.[f]}}));F.push(...a)}await x.safeUpdateDepositAndWithdrawStatus({id:_,chainId:l,hashedEthereumAddress:h,phase:u.DepositAndWithdrawPhase.BEFORE_SCHEDULE_WITHDRAW});let I=await y.solanaTransactCallRelayerBatch(l,F,h,v,b,T);return await x.safeUpdateDepositAndWithdrawStatus({id:_,chainId:l,hashedEthereumAddress:h,phase:u.DepositAndWithdrawPhase.AFTER_SCHEDULE_WITHDRAW,scheduleId:I}),I},M=async(e,t,n,r,i,a,o,s,u,f,p)=>{let m=d.validateAndGetChainId([t]),h=t.erc20TokenAddress,g=c.hashEthereumAddress(await e.getEthereumAddressByChain(m)),y=u?c.hashString(u):void 0,b=a??await _.getFeeStructure(m,h,[h],l.ExternalActionId.Transact,[],5n,{mintTo:h,recipient:r[0],nullifierCount:1}),{userDepositedUtxos:x,depositTxHash:S,statusId:C}=await k(e,m,t,n,r,b,g);return await v.waitForDepositedUtxosInMerkleTree(e,m,x),{depositTxHash:S,scheduleId:await j(e,m,t,x,b,g,n,C,i,o,s,y,f,p)}};exports.hinkalSolanaDepositAndWithdraw=M;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/solanaMint.utils.cjs`),c=require(`../../functions/utils/addresses.cjs`),l=require(`../../types/external-action.types.cjs`),u=require(`../../types/scheduled-transactions.types.cjs`),d=require(`../../types/solana-transact.types.cjs`);require(`../../types/index.cjs`);const f=require(`../../functions/utils/token-check.utils.cjs`),p=require(`../../functions/snarkjs/common.snarkjs.cjs`),m=require(`../../functions/pre-transaction/solana.cjs`),h=require(`../../functions/pre-transaction/constructAdminData.cjs`),g=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),_=require(`../../functions/pre-transaction/getFeeStructure.cjs`),v=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`);require(`../../functions/pre-transaction/index.cjs`);const y=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),b=require(`./hinkalProoflessDeposit.utils.cjs`),x=require(`../../API/deposit-and-withdraw-status-calls.cjs`),S=require(`../../functions/utils/getUtxosFromReceiptSolana.cjs`),C=require(`../../functions/utils/fees.utils.cjs`);require(`../../functions/web3/index.cjs`),require(`../../functions/index.cjs`);const w=require(`./hinkalSolanaTransact.cjs`);let T=require(`@solana/web3.js`),E=require(`@coral-xyz/anchor`);var D=(n,a,o,c)=>{let{hinkalIdl:l,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[a].contractData;if(!l)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let f=n.userKeys.getShieldedPrivateKey(),h=n.getSolanaProgram(l),g=n.getSolanaPublicKey(),_=new T.PublicKey(d),v=new T.PublicKey(u),{mintPublicKey:y}=s.formatMintAddress(o.erc20TokenAddress),b=y.toString(),x=m.getStorageAccountPublicKey(v,_),S=m.getStorageVaultPublicKey(v,_),C=m.getMerkleAccountPublicKey(v,_),w=c.map(()=>p.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),f),f,n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)),E=w.map(e=>m.buildAnchorStealthAddressStructure(e)),D=i.UserKeys.getEncryptionKeyPair(f).publicKey,O=b===t.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:O?null:y,atasValue:O?null:void 0,storageAccount:x,storageVault:S,merkleAccount:C,amounts:c,mintAddressString:b,stealthAddressStructures:w,anchorStealthStructures:E,ownEncryptionKey:D}},O=async e=>{let t=b.buildProoflessEncryptedOutputs(e.stealthAddressStructures,e.amounts.map(()=>e.ownEncryptionKey)).map(e=>Buffer.from(e.slice(2),`hex`)),{current:n,next:r}=await m.resolveSolanaRootBuckets(e.program,e.merkleAccount,e.amounts.length);return e.program.methods.multiPaymentDeposit(e.amounts.map(e=>new E.BN(e.toString())),e.anchorStealthStructures,t,!0).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:n,rootBucketNext:r??e.program.programId,storageVaultAta:e.atasValue})},k=async(e,t,n,r,i,a,o)=>{let c=r.map(e=>e+C.calculateTotalFee(e,a)),l=D(e,t,n,c),d=(await x.updateDepositAndWithdrawStatus({chainId:t,hashedEthereumAddress:o,phase:u.DepositAndWithdrawPhase.BEFORE_DEPOSIT})).id??void 0,f=await(await O(l)).rpc(),p=await l.program.provider.connection.getLatestBlockhash();await l.program.provider.connection.confirmTransaction({blockhash:p.blockhash,lastValidBlockHeight:p.lastValidBlockHeight,signature:f},`finalized`);let m=await g.fetchSolanaTransaction(l.program.provider.connection,f,`finalized`);if(!m)throw Error(`Transaction missing`);await x.safeUpdateDepositAndWithdrawStatus({id:d,chainId:t,hashedEthereumAddress:o,phase:u.DepositAndWithdrawPhase.AFTER_DEPOSIT,depositTxHash:f});let{compressedAddress:h}=s.formatMintAddress(n.erc20TokenAddress),_=S.getOnChainUtxosFromReceiptSolana(m,l.program,e.userKeys,h),v=[],y=[..._];return i.forEach((e,t)=>{let n=c[t],r=y.find(e=>e.amount===n);if(!r)throw Error(`Could not find newly created UTXO with amount ${n} for recipient ${e}.`);v.push({recipientAddress:e,utxo:r}),y.splice(y.indexOf(r),1)}),{userDepositedUtxos:v,depositTxHash:f,statusId:d}},A=async(r,i,c,l,f,p,m,g,_,v,b,S,T,E)=>{let D=c.erc20TokenAddress;if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:O}=e.networkRegistry[i].contractData;if(!O)throw Error(`missing data`);let k=await r.getRandomRelay(i,!0);if(!k)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let A=a.getCurrentTimeInSeconds().toString(),j=r.generateProofRemotely?5:1,M=[];for(let e=0;e<l.length;e+=j){let n=l.slice(e,e+j),a=await Promise.all(n.map(async({recipientAddress:n,utxo:a},l)=>{let u=e+l,p={recipient:n,mint:D===`11111111111111111111111111111111`?void 0:D},g=await C.calculateModifiedFeeStructure(i,c,m[u],f),_=h.constructAdminData(b,i,[D],[m[u]],await r.getEthereumAddress()),{compressedAddress:v}=s.formatMintAddress(t.solanaNativeAddress),y=new o.Utxo({amount:0n,mintAddress:D,erc20TokenAddress:v,nullifyingKey:r.userKeys.getShieldedPrivateKey(),timeStamp:A,spendingPublicKey:r.userKeys.getSpendingKeyPair().pubSpendingBJJPoint}),{args:x,commitmentValidationData:S}=await w.hinkalSolanaTransact(r,{chainId:i,mintAddresses:[D],amountChanges:[-a.amount],relayAddress:k,recipient:n,signer:k,functionName:`transact`,accounts:p,relayerFee:g.flatFee,variableRate:g.variableRate,inputUtxos:[[a,y]],useBlockedUtxos:!0,submit:{mode:d.SolanaSubmitMode.ProofOnly}});return{relayAddress:k,functionName:`transact`,chainId:i,recipientAmount:m[u].toString(),args:x,accounts:p,adminData:_,commitmentValidationData:S,displayRecipient:T?.[u],destinationChainId:E?.chainId,destinationTokenAddress:E?.tokenAddress,destinationTokenAmount:E?.tokenAmounts?.[u]}}));M.push(...a)}await x.safeUpdateDepositAndWithdrawStatus({id:g,chainId:i,hashedEthereumAddress:p,phase:u.DepositAndWithdrawPhase.BEFORE_SCHEDULE_WITHDRAW});let N=await y.solanaTransactCallRelayerBatch(i,M,p,_,v,S);return await x.safeUpdateDepositAndWithdrawStatus({id:g,chainId:i,hashedEthereumAddress:p,phase:u.DepositAndWithdrawPhase.AFTER_SCHEDULE_WITHDRAW,scheduleId:N}),N},j=async(e,t,n,r,i,a,o,s,u,d,p)=>{let m=f.validateAndGetChainId([t]),h=t.erc20TokenAddress,g=c.hashEthereumAddress(await e.getEthereumAddressByChain(m)),y=u?c.hashString(u):void 0,b=a??await _.getFeeStructure(m,h,[h],l.ExternalActionId.Transact,[],5n,{mintTo:h,recipient:r[0],nullifierCount:1}),{userDepositedUtxos:x,depositTxHash:S,statusId:C}=await k(e,m,t,n,r,b,g);return await v.waitForDepositedUtxosInMerkleTree(e,m,x),{depositTxHash:S,scheduleId:await A(e,m,t,x,b,g,n,C,i,o,s,y,d,p)}};exports.hinkalSolanaDepositAndWithdraw=j;
@@ -9,34 +9,34 @@ import { formatMintAddress as s } from "../../functions/utils/solanaMint.utils.m
9
9
  import { hashEthereumAddress as c, hashString as l } from "../../functions/utils/addresses.mjs";
10
10
  import { ExternalActionId as u } from "../../types/external-action.types.mjs";
11
11
  import { DepositAndWithdrawPhase as d } from "../../types/scheduled-transactions.types.mjs";
12
+ import { SolanaSubmitMode as f } from "../../types/solana-transact.types.mjs";
12
13
  import "../../types/index.mjs";
13
- import { validateAndGetChainId as f } from "../../functions/utils/token-check.utils.mjs";
14
- import { calcStealthAddressStructure as p } from "../../functions/snarkjs/common.snarkjs.mjs";
15
- import { buildAnchorStealthAddressStructure as m, getMerkleAccountPublicKey as h, getStorageAccountPublicKey as g, getStorageVaultPublicKey as _, resolveSolanaRootBuckets as v } from "../../functions/pre-transaction/solana.mjs";
16
- import { constructAdminData as y } from "../../functions/pre-transaction/constructAdminData.mjs";
17
- import { finalizeSolanaTxEnclaveCall as b, prepareSolanaTxEnclaveCall as x } from "../../functions/snarkjs/constructTxEnclave.mjs";
18
- import { fetchSolanaTransaction as S } from "../../functions/pre-transaction/sendV0Transaction.mjs";
19
- import { getFeeStructure as C } from "../../functions/pre-transaction/getFeeStructure.mjs";
20
- import { waitForDepositedUtxosInMerkleTree as w } from "../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.mjs";
14
+ import { validateAndGetChainId as p } from "../../functions/utils/token-check.utils.mjs";
15
+ import { calcStealthAddressStructure as m } from "../../functions/snarkjs/common.snarkjs.mjs";
16
+ import { buildAnchorStealthAddressStructure as h, getMerkleAccountPublicKey as g, getStorageAccountPublicKey as _, getStorageVaultPublicKey as v, resolveSolanaRootBuckets as y } from "../../functions/pre-transaction/solana.mjs";
17
+ import { constructAdminData as b } from "../../functions/pre-transaction/constructAdminData.mjs";
18
+ import { fetchSolanaTransaction as x } from "../../functions/pre-transaction/sendV0Transaction.mjs";
19
+ import { getFeeStructure as S } from "../../functions/pre-transaction/getFeeStructure.mjs";
20
+ import { waitForDepositedUtxosInMerkleTree as C } from "../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.mjs";
21
21
  import "../../functions/pre-transaction/index.mjs";
22
- import { solanaTransactCallRelayerBatch as T } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
23
- import { buildProoflessEncryptedOutputs as E } from "./hinkalProoflessDeposit.utils.mjs";
24
- import { safeUpdateDepositAndWithdrawStatus as D, updateDepositAndWithdrawStatus as O } from "../../API/deposit-and-withdraw-status-calls.mjs";
25
- import { getOnChainUtxosFromReceiptSolana as k } from "../../functions/utils/getUtxosFromReceiptSolana.mjs";
26
- import { calculateModifiedFeeStructure as A, calculateTotalFee as j } from "../../functions/utils/fees.utils.mjs";
22
+ import { solanaTransactCallRelayerBatch as w } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
23
+ import { buildProoflessEncryptedOutputs as T } from "./hinkalProoflessDeposit.utils.mjs";
24
+ import { safeUpdateDepositAndWithdrawStatus as E, updateDepositAndWithdrawStatus as D } from "../../API/deposit-and-withdraw-status-calls.mjs";
25
+ import { getOnChainUtxosFromReceiptSolana as O } from "../../functions/utils/getUtxosFromReceiptSolana.mjs";
26
+ import { calculateModifiedFeeStructure as k, calculateTotalFee as A } from "../../functions/utils/fees.utils.mjs";
27
27
  import "../../functions/web3/index.mjs";
28
- import { constructSolanaZkProof as M } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
29
28
  import "../../functions/index.mjs";
30
- import { PublicKey as N } from "@solana/web3.js";
31
- import { BN as P } from "@coral-xyz/anchor";
29
+ import { hinkalSolanaTransact as j } from "./hinkalSolanaTransact.mjs";
30
+ import { PublicKey as M } from "@solana/web3.js";
31
+ import { BN as N } from "@coral-xyz/anchor";
32
32
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.ts
33
- var F = (n, a, o, c) => {
33
+ var P = (n, a, o, c) => {
34
34
  let { hinkalIdl: l, hinkalAddress: u, originalDeployer: d } = e[a].contractData;
35
35
  if (!l) throw Error("No IDL configured for Solana program on this network");
36
36
  if (!d) throw Error("missing original deployer");
37
- let f = n.userKeys.getShieldedPrivateKey(), v = n.getSolanaProgram(l), y = n.getSolanaPublicKey(), b = new N(d), x = new N(u), { mintPublicKey: S } = s(o.erc20TokenAddress), C = S.toString(), w = g(x, b), T = _(x, b), E = h(x, b), D = c.map(() => p(i.findCorrectRandomization(r(31), f), f, n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)), O = D.map((e) => m(e)), k = i.getEncryptionKeyPair(f).publicKey, A = C === t;
37
+ let f = n.userKeys.getShieldedPrivateKey(), p = n.getSolanaProgram(l), y = n.getSolanaPublicKey(), b = new M(d), x = new M(u), { mintPublicKey: S } = s(o.erc20TokenAddress), C = S.toString(), w = _(x, b), T = v(x, b), E = g(x, b), D = c.map(() => m(i.findCorrectRandomization(r(31), f), f, n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)), O = D.map((e) => h(e)), k = i.getEncryptionKeyPair(f).publicKey, A = C === t;
38
38
  return {
39
- program: v,
39
+ program: p,
40
40
  publicKey: y,
41
41
  originalDeployer: b,
42
42
  mint: A ? null : S,
@@ -50,9 +50,9 @@ var F = (n, a, o, c) => {
50
50
  anchorStealthStructures: O,
51
51
  ownEncryptionKey: k
52
52
  };
53
- }, I = async (e) => {
54
- let t = E(e.stealthAddressStructures, e.amounts.map(() => e.ownEncryptionKey)).map((e) => Buffer.from(e.slice(2), "hex")), { current: n, next: r } = await v(e.program, e.merkleAccount, e.amounts.length);
55
- return e.program.methods.multiPaymentDeposit(e.amounts.map((e) => new P(e.toString())), e.anchorStealthStructures, t, !0).accounts({
53
+ }, F = async (e) => {
54
+ let t = T(e.stealthAddressStructures, e.amounts.map(() => e.ownEncryptionKey)).map((e) => Buffer.from(e.slice(2), "hex")), { current: n, next: r } = await y(e.program, e.merkleAccount, e.amounts.length);
55
+ return e.program.methods.multiPaymentDeposit(e.amounts.map((e) => new N(e.toString())), e.anchorStealthStructures, t, !0).accounts({
56
56
  mint: e.mint,
57
57
  signer: e.publicKey,
58
58
  signerAta: e.atasValue,
@@ -64,27 +64,27 @@ var F = (n, a, o, c) => {
64
64
  rootBucketNext: r ?? e.program.programId,
65
65
  storageVaultAta: e.atasValue
66
66
  });
67
- }, L = async (e, t, n, r, i, a, o) => {
68
- let c = r.map((e) => e + j(e, a)), l = F(e, t, n, c), u = (await O({
67
+ }, I = async (e, t, n, r, i, a, o) => {
68
+ let c = r.map((e) => e + A(e, a)), l = P(e, t, n, c), u = (await D({
69
69
  chainId: t,
70
70
  hashedEthereumAddress: o,
71
71
  phase: d.BEFORE_DEPOSIT
72
- })).id ?? void 0, f = await (await I(l)).rpc(), p = await l.program.provider.connection.getLatestBlockhash();
72
+ })).id ?? void 0, f = await (await F(l)).rpc(), p = await l.program.provider.connection.getLatestBlockhash();
73
73
  await l.program.provider.connection.confirmTransaction({
74
74
  blockhash: p.blockhash,
75
75
  lastValidBlockHeight: p.lastValidBlockHeight,
76
76
  signature: f
77
77
  }, "finalized");
78
- let m = await S(l.program.provider.connection, f, "finalized");
78
+ let m = await x(l.program.provider.connection, f, "finalized");
79
79
  if (!m) throw Error("Transaction missing");
80
- await D({
80
+ await E({
81
81
  id: u,
82
82
  chainId: t,
83
83
  hashedEthereumAddress: o,
84
84
  phase: d.AFTER_DEPOSIT,
85
85
  depositTxHash: f
86
86
  });
87
- let { compressedAddress: h } = s(n.erc20TokenAddress), g = k(m, l.program, e.userKeys, h), _ = [], v = [...g];
87
+ let { compressedAddress: h } = s(n.erc20TokenAddress), g = O(m, l.program, e.userKeys, h), _ = [], v = [...g];
88
88
  return i.forEach((e, t) => {
89
89
  let n = c[t], r = v.find((e) => e.amount === n);
90
90
  if (!r) throw Error(`Could not find newly created UTXO with amount ${n} for recipient ${e}.`);
@@ -97,120 +97,82 @@ var F = (n, a, o, c) => {
97
97
  depositTxHash: f,
98
98
  statusId: u
99
99
  };
100
- }, R = async (e, t, n, r, i, a, o, s) => {
101
- let { jobId: c, signedMessageHash: l } = await x(e, {
102
- chainId: t,
103
- mintAddresses: [n],
104
- amountChanges: [-r.amount],
105
- relayAddress: a,
106
- recipient: i,
107
- signer: a,
108
- functionName: "transact",
109
- accounts: o,
110
- relayerFee: s.flatFee,
111
- variableRate: s.variableRate,
112
- hinkalInstructions: [],
113
- remainingAccounts: [],
114
- inputCommitments: [r.getCommitment()],
115
- useBlockedUtxos: !0
116
- }), { R8: u, S: d } = e.userKeys.signEddsa(BigInt(l));
117
- return b(c, {
118
- R8: u,
119
- S: d
120
- });
121
- }, z = async (c, l, u, f, p, m, h, g, _, v, b, x, S, C) => {
122
- let w = u.erc20TokenAddress;
123
- if (f.length === 0) throw Error("userDepositedUtxos must not be empty");
124
- let { originalDeployer: E } = e[l].contractData;
125
- if (!E) throw Error("missing data");
126
- let O = await c.getRandomRelay(l, !0);
127
- if (!O) throw Error(n.RELAYER_NOT_AVAILABLE);
128
- let k = a().toString(), j = c.generateProofRemotely, N = j ? 5 : 1, P = [];
129
- for (let e = 0; e < f.length; e += N) {
130
- let n = f.slice(e, e + N), a = await Promise.all(n.map(async ({ recipientAddress: n, utxo: a }, d) => {
131
- let f = e + d, m = {
100
+ }, L = async (r, i, c, l, u, p, m, h, g, _, v, y, x, S) => {
101
+ let C = c.erc20TokenAddress;
102
+ if (l.length === 0) throw Error("userDepositedUtxos must not be empty");
103
+ let { originalDeployer: T } = e[i].contractData;
104
+ if (!T) throw Error("missing data");
105
+ let D = await r.getRandomRelay(i, !0);
106
+ if (!D) throw Error(n.RELAYER_NOT_AVAILABLE);
107
+ let O = a().toString(), A = r.generateProofRemotely ? 5 : 1, M = [];
108
+ for (let e = 0; e < l.length; e += A) {
109
+ let n = l.slice(e, e + A), a = await Promise.all(n.map(async ({ recipientAddress: n, utxo: a }, l) => {
110
+ let d = e + l, p = {
132
111
  recipient: n,
133
- mint: w === "11111111111111111111111111111111" ? void 0 : w
134
- }, g = await A(l, u, h[f], p), _ = y(b, l, [w], [h[f]], await c.getEthereumAddress());
135
- if (j) {
136
- let { solanaArgs: e, commitmentValidationData: t } = await R(c, l, w, a, n, O, m, g);
137
- return {
138
- relayAddress: O,
139
- functionName: "transact",
140
- chainId: l,
141
- recipientAmount: h[f].toString(),
142
- args: e,
143
- accounts: m,
144
- adminData: _,
145
- commitmentValidationData: t,
146
- displayRecipient: S?.[f],
147
- destinationChainId: C?.chainId,
148
- destinationTokenAddress: C?.tokenAddress,
149
- destinationTokenAmount: C?.tokenAmounts?.[f]
150
- };
151
- }
152
- let { compressedAddress: v } = s(t), x = new o({
112
+ mint: C === "11111111111111111111111111111111" ? void 0 : C
113
+ }, h = await k(i, c, m[d], u), g = b(v, i, [C], [m[d]], await r.getEthereumAddress()), { compressedAddress: _ } = s(t), y = new o({
153
114
  amount: 0n,
154
- mintAddress: w,
155
- erc20TokenAddress: v,
156
- nullifyingKey: c.userKeys.getShieldedPrivateKey(),
157
- timeStamp: k,
158
- spendingPublicKey: c.userKeys.getSpendingKeyPair().pubSpendingBJJPoint
159
- }), T = [a, x], E = [x], D = i.findCorrectRandomization(r(31), c.userKeys.getShieldedPrivateKey()), N = {
160
- tokenNumber: 1,
161
- nullifierAmount: T.length,
162
- outputAmount: E.length
163
- }, { proofAArr: P, proofBArr: F, proofCArr: I, publicInputsArr: L, commitmentValidationData: z, rootHashHinkalIndex: B, encryptedOutputs: V } = await M(c.merkleTreeHinkalByChain[l], c.userKeys, [w], [T], [E], D, g.flatFee, g.variableRate, n, O, N, void 0, l);
115
+ mintAddress: C,
116
+ erc20TokenAddress: _,
117
+ nullifyingKey: r.userKeys.getShieldedPrivateKey(),
118
+ timeStamp: O,
119
+ spendingPublicKey: r.userKeys.getSpendingKeyPair().pubSpendingBJJPoint
120
+ }), { args: w, commitmentValidationData: T } = await j(r, {
121
+ chainId: i,
122
+ mintAddresses: [C],
123
+ amountChanges: [-a.amount],
124
+ relayAddress: D,
125
+ recipient: n,
126
+ signer: D,
127
+ functionName: "transact",
128
+ accounts: p,
129
+ relayerFee: h.flatFee,
130
+ variableRate: h.variableRate,
131
+ inputUtxos: [[a, y]],
132
+ useBlockedUtxos: !0,
133
+ submit: { mode: f.ProofOnly }
134
+ });
164
135
  return {
165
- relayAddress: O,
136
+ relayAddress: D,
166
137
  functionName: "transact",
167
- chainId: l,
168
- recipientAmount: h[f].toString(),
169
- args: {
170
- proofAArr: P,
171
- proofBArr: F,
172
- proofCArr: I,
173
- publicInputsArr: L,
174
- encryptedOutputs: V,
175
- relayerFee: g.flatFee.toString(),
176
- dimensions: N,
177
- rootHashIndex: B.toString()
178
- },
179
- accounts: m,
180
- adminData: _,
181
- commitmentValidationData: z,
182
- displayRecipient: S?.[f],
183
- destinationChainId: C?.chainId,
184
- destinationTokenAddress: C?.tokenAddress,
185
- destinationTokenAmount: C?.tokenAmounts?.[f]
138
+ chainId: i,
139
+ recipientAmount: m[d].toString(),
140
+ args: w,
141
+ accounts: p,
142
+ adminData: g,
143
+ commitmentValidationData: T,
144
+ displayRecipient: x?.[d],
145
+ destinationChainId: S?.chainId,
146
+ destinationTokenAddress: S?.tokenAddress,
147
+ destinationTokenAmount: S?.tokenAmounts?.[d]
186
148
  };
187
149
  }));
188
- P.push(...a);
150
+ M.push(...a);
189
151
  }
190
- await D({
191
- id: g,
192
- chainId: l,
193
- hashedEthereumAddress: m,
152
+ await E({
153
+ id: h,
154
+ chainId: i,
155
+ hashedEthereumAddress: p,
194
156
  phase: d.BEFORE_SCHEDULE_WITHDRAW
195
157
  });
196
- let F = await T(l, P, m, _, v, x);
197
- return await D({
198
- id: g,
199
- chainId: l,
200
- hashedEthereumAddress: m,
158
+ let N = await w(i, M, p, g, _, y);
159
+ return await E({
160
+ id: h,
161
+ chainId: i,
162
+ hashedEthereumAddress: p,
201
163
  phase: d.AFTER_SCHEDULE_WITHDRAW,
202
- scheduleId: F
203
- }), F;
204
- }, B = async (e, t, n, r, i, a, o, s, d, p, m) => {
205
- let h = f([t]), g = t.erc20TokenAddress, _ = c(await e.getEthereumAddressByChain(h)), v = d ? l(d) : void 0, y = a ?? await C(h, g, [g], u.Transact, [], 5n, {
164
+ scheduleId: N
165
+ }), N;
166
+ }, R = async (e, t, n, r, i, a, o, s, d, f, m) => {
167
+ let h = p([t]), g = t.erc20TokenAddress, _ = c(await e.getEthereumAddressByChain(h)), v = d ? l(d) : void 0, y = a ?? await S(h, g, [g], u.Transact, [], 5n, {
206
168
  mintTo: g,
207
169
  recipient: r[0],
208
170
  nullifierCount: 1
209
- }), { userDepositedUtxos: b, depositTxHash: x, statusId: S } = await L(e, h, t, n, r, y, _);
210
- return await w(e, h, b), {
171
+ }), { userDepositedUtxos: b, depositTxHash: x, statusId: w } = await I(e, h, t, n, r, y, _);
172
+ return await C(e, h, b), {
211
173
  depositTxHash: x,
212
- scheduleId: await z(e, h, t, b, y, _, n, S, i, o, s, v, p, m)
174
+ scheduleId: await L(e, h, t, b, y, _, n, w, i, o, s, v, f, m)
213
175
  };
214
176
  };
215
177
  //#endregion
216
- export { B as hinkalSolanaDepositAndWithdraw };
178
+ export { R as hinkalSolanaDepositAndWithdraw };
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../../types/external-action.types.cjs`),s=require(`../../types/cache.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/solana.cjs`),f=require(`../../functions/pre-transaction/constructAdminData.cjs`),p=require(`../../functions/snarkjs/constructTxEnclave.cjs`),m=require(`../../functions/pre-transaction/calculateSolanaNullifierCount.cjs`),h=require(`../../functions/pre-transaction/convert-okx-instructions.cjs`),g=require(`../../functions/pre-transaction/ensureAmountChanges.cjs`),_=require(`../../functions/pre-transaction/getFeeStructure.cjs`),v=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),ee=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`);let y=require(`@solana/web3.js`);var b=async(e,t,n,r)=>{let i=[...await l.addPaddingToUtxos(e,t,n,r,6)],o=a.getCurrentTimeInSeconds().toString(),s=[];for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=u.outputUtxoProcessing(e.userKeys,i[t],r[t],o);s.push([n[0]])}return{inputUtxosArray:i,outputUtxosArray:s}},te=async(e,t,n,r,i,a,o,s,c,l,u,d,f,m)=>{let{jobId:h,signedMessageHash:g}=await p.prepareSolanaTxEnclaveCall(e,{chainId:t,mintAddresses:n,amountChanges:r,relayAddress:a,recipient:o,signer:a,functionName:`swap`,accounts:s,onChainCreation:i,relayerFee:c,variableRate:l,hinkalInstructions:u,remainingAccounts:d,swapperAccountSalt:f}),{R8:_,S:v}=e.userKeys.signEddsa(BigInt(g));return p.finalizeSolanaTxEnclaveCallRelay(h,{R8:_,S:v},t,{adminData:m})},x=async(a,l,u,p,x,S,C,w,T)=>{let E=c.validateAndGetChainId(l),D=new y.PublicKey(t.solanaNativeAddress),{hinkalAddress:O,originalDeployer:k}=e.networkRegistry[E].contractData;if(!k)throw Error(`No IDL configured for Solana program on this network`);let A=new y.PublicKey(k),j=new y.PublicKey(O),M=l.map(e=>e.erc20TokenAddress),{userKeys:ne,merkleTreeHinkalByChain:re}=a,ie=C??M[1];if(C&&C!==M[1])throw Error(`Solana swap fee token must match the output token`);let ae={mintFrom:M[0],mintTo:M[1],nullifierCount:await m.calculateSolanaNullifierCount(a,E,M,u),rootInsertCount:2},N=w??await _.getFeeStructure(E,ie,M,o.ExternalActionId.Okx,[],void 0,ae),P=u[1],oe=Number(a.cacheDevice.get(s.StorageKeys.SLIPPAGE_PERCENTAGE)??0),F=l[1],I=r.getAmountInToken(F,P),L=Number(I)*oe/100;u[1]-=r.getAmountInWei(F,L.toFixed(F.decimals));let R=P*BigInt(N.variableRate??0)/10000n+N.flatFee;if(u[1]-=R,u[1]<0)throw Error(n.transactionErrorCodes.LOW_OUTPUT_AMOUNT);let z=N.variableRate.toString(),[B,V]=await Promise.all([a.getRandomRelay(E,!0),a.getEthereumAddressByChain(E)]);if(!B)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H=d.getSwapperAccountPublicKeyFromSalt(j,A,p),{remainingAccounts:U,hinkalInstructions:W}=h.convertOKXToHinkalInstructions(x,H),G=d.getStorageAccountPublicKey(j,A),K=d.getStorageVaultPublicKey(j,A),se=l[0].erc20TokenAddress===`11111111111111111111111111111111`?null:new y.PublicKey(l[0].erc20TokenAddress),ce=l[1].erc20TokenAddress===`11111111111111111111111111111111`?null:new y.PublicKey(l[1].erc20TokenAddress),q={recipient:D.toString(),storageAccount:G.toString(),storageVault:K.toString(),swapperAccount:H.toString(),mintFrom:se?.toString()??null,mintTo:ce?.toString()??null,remainingAccounts:U.map(e=>({pubkey:e.pubkey.toString(),isSigner:e.isSigner,isWritable:e.isWritable})),addressLookupTableAccount:S},J=f.constructAdminData(T,E,M,u,V,l),Y=[!1,!0];if(a.generateProofRemotely){let e=W.map(e=>({accountIndexes:[...e.accountIndexes],data:[...e.data],programIndex:e.programIndex}));return te(a,E,M,u,Y,B,D.toString(),q,N.flatFee,N.variableRate,e,q.remainingAccounts,p,J)}let{inputUtxosArray:X,outputUtxosArray:Z}=await b(a,E,M,u),le=a.userKeys.getShieldedPrivateKey(),ue=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),le),Q={tokenNumber:2,nullifierAmount:X[0].length,outputAmount:1};g.ensureAmountChanges(X,Z,u);let{proofAArr:de,proofBArr:fe,proofCArr:pe,publicInputsArr:me,commitmentValidationData:he,rootHashHinkalIndex:ge,encryptedOutputs:$,onChainEncryptedOutput:_e}=await ee.constructSolanaZkProof(re[E],ne,M,X,Z,ue,N.flatFee,N.variableRate,D.toString(),B,Q,Y,E,W,U,p);return v.solanaTransactCallRelayer({chainId:E,relayAddress:B,functionName:`swap`,args:{encryptedOutputs:$,onChainEncryptedOutput:_e,onChainCreation:Y,proofAArr:de,proofBArr:fe,proofCArr:pe,publicInputsArr:me,relayerFee:N.flatFee.toString(),variableRate:z,dimensions:Q,rootHashIndex:ge.toString(),hinkalInstructions:W.map(e=>({accountIndexes:[...e.accountIndexes],data:[...e.data],programIndex:e.programIndex}))},accounts:q,commitmentValidationData:he,adminData:J})};exports.hinkalSolanaSwap=x;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../types/cache.types.cjs`),o=require(`../../types/solana-transact.types.cjs`);require(`../../types/index.cjs`);const s=require(`../../functions/utils/token-check.utils.cjs`),c=require(`../../functions/pre-transaction/solana.cjs`),l=require(`../../functions/pre-transaction/constructAdminData.cjs`),u=require(`../../functions/pre-transaction/calculateSolanaNullifierCount.cjs`),d=require(`../../functions/pre-transaction/convert-okx-instructions.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`),p=require(`./hinkalSolanaTransact.cjs`);let m=require(`@solana/web3.js`);var h=async(h,g,_,v,y,b,x,S,C)=>{let w=s.validateAndGetChainId(g),T=new m.PublicKey(t.solanaNativeAddress),{hinkalAddress:E,originalDeployer:D}=e.networkRegistry[w].contractData;if(!D)throw Error(`No IDL configured for Solana program on this network`);let O=new m.PublicKey(D),k=new m.PublicKey(E),A=g.map(e=>e.erc20TokenAddress),j=x??A[1];if(x&&x!==A[1])throw Error(`Solana swap fee token must match the output token`);let M={mintFrom:A[0],mintTo:A[1],nullifierCount:await u.calculateSolanaNullifierCount(h,w,A,_),rootInsertCount:2},N=S??await f.getFeeStructure(w,j,A,i.ExternalActionId.Okx,[],void 0,M),P=_[1],F=Number(h.cacheDevice.get(a.StorageKeys.SLIPPAGE_PERCENTAGE)??0),I=g[1],L=r.getAmountInToken(I,P),R=Number(L)*F/100;_[1]-=r.getAmountInWei(I,R.toFixed(I.decimals));let z=P*BigInt(N.variableRate??0)/10000n+N.flatFee;if(_[1]-=z,_[1]<0)throw Error(n.transactionErrorCodes.LOW_OUTPUT_AMOUNT);let[B,V]=await Promise.all([h.getRandomRelay(w,!0),h.getEthereumAddressByChain(w)]);if(!B)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H=c.getSwapperAccountPublicKeyFromSalt(k,O,v),{remainingAccounts:U,hinkalInstructions:W}=d.convertOKXToHinkalInstructions(y,H),G=c.getStorageAccountPublicKey(k,O),K=c.getStorageVaultPublicKey(k,O),q=g[0].erc20TokenAddress===`11111111111111111111111111111111`?null:new m.PublicKey(g[0].erc20TokenAddress),J=g[1].erc20TokenAddress===`11111111111111111111111111111111`?null:new m.PublicKey(g[1].erc20TokenAddress),Y={recipient:T.toString(),storageAccount:G.toString(),storageVault:K.toString(),swapperAccount:H.toString(),mintFrom:q?.toString()??null,mintTo:J?.toString()??null,remainingAccounts:U.map(e=>({pubkey:e.pubkey.toString(),isSigner:e.isSigner,isWritable:e.isWritable})),addressLookupTableAccount:b},X=l.constructAdminData(C,w,A,_,V,g),Z=W.map(e=>({accountIndexes:[...e.accountIndexes],data:[...e.data],programIndex:e.programIndex}));return p.hinkalSolanaTransact(h,{chainId:w,mintAddresses:A,amountChanges:_,relayAddress:B,recipient:T.toString(),signer:B,functionName:`swap`,accounts:Y,onChainCreation:[!1,!0],relayerFee:N.flatFee,variableRate:N.variableRate,hinkalInstructions:Z,remainingAccounts:Y.remainingAccounts,swapperAccountSalt:v,submit:{mode:o.SolanaSubmitMode.Relayer,adminData:X}})};exports.hinkalSolanaSwap=h;