@gurge/sdk 0.3.27 → 0.3.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/src/crypto/BabyJubRN.cjs +1 -0
- package/common/src/crypto/BabyJubRN.d.ts +2 -0
- package/common/src/crypto/BabyJubRN.mjs +66 -0
- package/common/src/crypto/EddsaRN.cjs +1 -0
- package/common/src/crypto/EddsaRN.mjs +41 -0
- package/common/src/crypto/babyJub.cjs +1 -1
- package/common/src/crypto/babyJub.mjs +6 -12
- package/common/src/crypto/eddsa.cjs +1 -1
- package/common/src/crypto/eddsa.mjs +6 -12
- package/common/src/crypto/poseidon.cjs +1 -1
- package/common/src/crypto/poseidon.mjs +6 -12
- package/common/src/crypto/preProcessing.cjs +1 -1
- package/common/src/crypto/preProcessing.mjs +13 -23
- package/common/src/data-structures/Hinkal/handleAutoDepositBack.cjs +1 -1
- package/common/src/data-structures/Hinkal/handleAutoDepositBack.mjs +9 -9
- package/common/src/data-structures/Hinkal/hinkalClaimUtxo.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalClaimUtxo.mjs +6 -6
- package/common/src/data-structures/Hinkal/hinkalDeposit.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDeposit.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.mjs +18 -18
- package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +17 -17
- package/common/src/data-structures/Hinkal/hinkalPrivateWallet.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalPrivateWallet.mjs +13 -13
- package/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.mjs +11 -11
- package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.mjs +14 -14
- package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +51 -51
- package/common/src/data-structures/Hinkal/hinkalSolanaSwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaSwap.mjs +51 -51
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +20 -20
- package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +19 -19
- package/common/src/data-structures/Hinkal/hinkalSwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSwap.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransfer.mjs +9 -9
- package/common/src/data-structures/Hinkal/hinkalWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalWithdraw.d.ts +3 -1
- package/common/src/data-structures/Hinkal/hinkalWithdraw.mjs +35 -46
- package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.mjs +33 -33
- package/common/src/data-structures/Hinkal/prepareDepositOnChainUtxosZkProof.cjs +1 -1
- package/common/src/data-structures/Hinkal/prepareDepositOnChainUtxosZkProof.mjs +1 -1
- package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs +1 -1
- package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.mjs +26 -42
- package/common/src/data-structures/crypto-keys/decodeUTXO.cjs +1 -1
- package/common/src/data-structures/crypto-keys/decodeUTXO.mjs +7 -7
- package/common/src/data-structures/crypto-keys/encryptDecryptUtxo.cjs +1 -1
- package/common/src/data-structures/crypto-keys/encryptDecryptUtxo.mjs +1 -1
- package/common/src/data-structures/utxo/Utxo.cjs +1 -1
- package/common/src/data-structures/utxo/Utxo.d.ts +0 -1
- package/common/src/data-structures/utxo/Utxo.mjs +6 -19
- package/common/src/functions/index.cjs +1 -1
- package/common/src/functions/index.mjs +4 -3
- package/common/src/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
- package/common/src/functions/pre-transaction/buildCommitmentValidationData.mjs +43 -86
- package/common/src/functions/pre-transaction/outputUtxoProcessing.cjs +1 -1
- package/common/src/functions/pre-transaction/outputUtxoProcessing.d.ts +2 -2
- package/common/src/functions/pre-transaction/outputUtxoProcessing.mjs +22 -28
- package/common/src/functions/private-wallet/emporium.swap.helpers.cjs +1 -1
- package/common/src/functions/private-wallet/emporium.swap.helpers.mjs +14 -14
- package/common/src/functions/snarkjs/common.snarkjs.cjs +1 -1
- package/common/src/functions/snarkjs/common.snarkjs.mjs +7 -7
- package/common/src/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
- package/common/src/functions/snarkjs/constructGeneralZkProof.mjs +60 -67
- package/common/src/functions/snarkjs/constructSolanaZkProof.cjs +1 -1
- package/common/src/functions/snarkjs/constructSolanaZkProof.mjs +60 -60
- package/common/src/functions/snarkjs/verifyCommitmentValidationData.cjs +1 -1
- package/common/src/functions/snarkjs/verifyCommitmentValidationData.mjs +1 -1
- package/common/src/functions/utils/bigint-math.utils.cjs +1 -1
- package/common/src/functions/utils/bigint-math.utils.d.ts +2 -0
- package/common/src/functions/utils/bigint-math.utils.mjs +18 -1
- package/common/src/functions/utils/buildClaimableDepositPlan.cjs +1 -1
- package/common/src/functions/utils/buildClaimableDepositPlan.mjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceipt.utils.cjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceipt.utils.mjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceiptSolana.cjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceiptSolana.mjs +4 -4
- package/common/src/functions/utils/index.cjs +1 -1
- package/common/src/functions/utils/index.mjs +3 -3
- package/common/src/functions/web3/events/getInputUtxoAndBalance.cjs +1 -1
- package/common/src/functions/web3/events/getInputUtxoAndBalance.mjs +71 -122
- package/common/src/functions/web3/events/getShieldedBalance.cjs +1 -1
- package/common/src/functions/web3/events/getShieldedBalance.mjs +64 -64
- package/common/src/functions/web3/functionCalls/transactCallRelayer.cjs +1 -1
- package/common/src/functions/web3/functionCalls/transactCallRelayer.mjs +42 -42
- package/common/src/types/index.cjs +1 -1
- package/common/src/types/index.mjs +1 -1
- package/common/src/webworker/logError-D8yBaP96.js +2 -0
- package/common/src/webworker/package.json +1 -1
- package/common/src/webworker/performTaskWithWorker.cjs +1 -1
- package/common/src/webworker/performTaskWithWorker.mjs +17 -18
- package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/utxoWorkerNode.cjs +1 -1
- package/common/src/webworker/viteWorkerURL.constant.cjs +3 -4
- package/common/src/webworker/viteWorkerURL.constant.d.ts +0 -1
- package/common/src/webworker/viteWorkerURL.constant.mjs +3 -4
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
- package/package.json +1 -1
- package/react-native/HinkalWebViewWorker.cjs +4 -76
- package/react-native/HinkalWebViewWorker.mjs +49 -152
- package/react-native/bridge/HinkalRNWorker.cjs +1 -1
- package/react-native/bridge/HinkalRNWorker.d.ts +0 -1
- package/react-native/bridge/HinkalRNWorker.mjs +11 -16
- package/react-native/shims/circomlibjs-hinkal-fork.js +2 -2
- package/react-native/shims/circomlibjs.js +2 -2
- package/react-native/workerCDNUrls.cjs +1 -1
- package/react-native/workerCDNUrls.d.ts +0 -1
- package/react-native/workerCDNUrls.mjs +2 -2
- package/sdk/package.json.cjs +1 -1
- package/sdk/package.json.mjs +1 -1
- package/common/src/crypto/rnCryptoBridge.cjs +0 -1
- package/common/src/crypto/rnCryptoBridge.d.ts +0 -8
- package/common/src/crypto/rnCryptoBridge.mjs +0 -10
- package/common/src/crypto/rnUtxoCrypto.cjs +0 -1
- package/common/src/crypto/rnUtxoCrypto.d.ts +0 -25
- package/common/src/crypto/rnUtxoCrypto.mjs +0 -74
- package/common/src/functions/utils/hinkalTiming.utils.cjs +0 -1
- package/common/src/functions/utils/hinkalTiming.utils.d.ts +0 -11
- package/common/src/functions/utils/hinkalTiming.utils.mjs +0 -21
- package/common/src/functions/utils/utxoPadding.utils.cjs +0 -1
- package/common/src/functions/utils/utxoPadding.utils.d.ts +0 -2
- package/common/src/functions/utils/utxoPadding.utils.mjs +0 -14
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.cjs +0 -1
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.d.ts +0 -51
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.mjs +0 -6
- package/common/src/webworker/cryptoWorker/cryptoWorkerLauncher.d.ts +0 -1
- package/common/src/webworker/cryptoWorker/cryptoWorkerLogic.d.ts +0 -2
- package/common/src/webworker/logError-Dy_GXEF5.js +0 -2
- package/react-native/bridge/RnWebViewCryptoBridge.cjs +0 -1
- package/react-native/bridge/RnWebViewCryptoBridge.d.ts +0 -7
- package/react-native/bridge/RnWebViewCryptoBridge.mjs +0 -49
|
@@ -2,9 +2,9 @@ import { isTronLike as e } from "../../constants/chains.constants.mjs";
|
|
|
2
2
|
import { zeroAddress as t } from "../../constants/protocol.constants.mjs";
|
|
3
3
|
import { caseInsensitiveEqual as n } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
4
4
|
import { transactionErrorCodes as r } from "../../error-handling/error-codes.constants.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { getCurrentTimeInSeconds as i } from "../../functions/utils/time.utils.mjs";
|
|
6
|
+
import { Utxo as a } from "../utxo/Utxo.mjs";
|
|
7
|
+
import { ExternalActionId as o } from "../../types/external-action.types.mjs";
|
|
8
8
|
import { DepositAndWithdrawPhase as s } from "../../types/scheduled-transactions.types.mjs";
|
|
9
9
|
import "../../types/index.mjs";
|
|
10
10
|
import { hashEthereumAddress as c, hashString as l } from "../../functions/utils/addresses.mjs";
|
|
@@ -20,28 +20,28 @@ import { safeUpdateDepositAndWithdrawStatus as y } from "../../API/deposit-and-w
|
|
|
20
20
|
import { hinkalDepositOnChainUtxos as b } from "./hinkalDepositOnChainUtxos.mjs";
|
|
21
21
|
import "../../functions/index.mjs";
|
|
22
22
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.ts
|
|
23
|
-
var x = async (
|
|
23
|
+
var x = async (o, c, l, f, m, h, b, x, S, C, w, T) => {
|
|
24
24
|
let E = e(c);
|
|
25
25
|
if (f.length === 0) throw Error("userDepositedUtxos must not be empty");
|
|
26
|
-
let D = l.erc20TokenAddress, [O, k] = await Promise.all([
|
|
26
|
+
let D = l.erc20TokenAddress, [O, k] = await Promise.all([o.getRandomRelay(c), o.getEthereumAddressByChain(c)]);
|
|
27
27
|
if (!O) throw Error(r.RELAYER_NOT_AVAILABLE);
|
|
28
|
-
let A =
|
|
28
|
+
let A = i().toString(), j = o.generateProofRemotely && !E ? 5 : 1, M = [], N = u(k);
|
|
29
29
|
for (let e = 0; e < f.length; e += j) {
|
|
30
|
-
let r = f.slice(e, e + j),
|
|
31
|
-
let f = e + s, v = u(r), y = new
|
|
30
|
+
let r = f.slice(e, e + j), i = await Promise.all(r.map(async ({ recipientAddress: r, utxo: i }, s) => {
|
|
31
|
+
let f = e + s, v = u(r), y = new a({
|
|
32
32
|
amount: 0n,
|
|
33
33
|
erc20TokenAddress: D,
|
|
34
|
-
nullifyingKey:
|
|
34
|
+
nullifyingKey: o.userKeys.getShieldedPrivateKey(),
|
|
35
35
|
timeStamp: A,
|
|
36
|
-
...
|
|
37
|
-
spendingPublicKey:
|
|
36
|
+
...i.isNewStyle ? {
|
|
37
|
+
spendingPublicKey: o.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
38
38
|
isNewStyle: !0
|
|
39
39
|
} : { isNewStyle: !1 }
|
|
40
|
-
}), b = [[n(
|
|
40
|
+
}), b = [[n(i.erc20TokenAddress, D) ? i : a.createFrom(i, { erc20TokenAddress: D }), y]], x = [[y]], S = {
|
|
41
41
|
externalActionId: 0n,
|
|
42
42
|
externalAddress: v,
|
|
43
43
|
externalActionMetadata: "0x00"
|
|
44
|
-
}, C = p(w, c, [D], [-
|
|
44
|
+
}, C = p(w, c, [D], [-i.amount], N), T = await g(c, l, m[f], h), { zkCallData: k, circomData: j, dimData: M, commitmentValidationData: P } = await _(o.merkleTreeHinkalByChain[c], b, x, o.userKeys, S.externalActionId, S.externalAddress, S.externalActionMetadata, o.generateProofRemotely, T, O ?? t, c);
|
|
45
45
|
return {
|
|
46
46
|
zkCallData: k,
|
|
47
47
|
dimData: M,
|
|
@@ -52,7 +52,7 @@ var x = async (i, c, l, f, m, h, b, x, S, C, w, T) => {
|
|
|
52
52
|
tronProofSignature: await d(E, k, M, j)
|
|
53
53
|
};
|
|
54
54
|
}));
|
|
55
|
-
M.push(...
|
|
55
|
+
M.push(...i);
|
|
56
56
|
}
|
|
57
57
|
await y({
|
|
58
58
|
id: x,
|
|
@@ -68,11 +68,11 @@ var x = async (i, c, l, f, m, h, b, x, S, C, w, T) => {
|
|
|
68
68
|
phase: s.AFTER_SCHEDULE_WITHDRAW,
|
|
69
69
|
scheduleId: P
|
|
70
70
|
}), P;
|
|
71
|
-
}, S = async (e, t, n, r,
|
|
72
|
-
let _ = f([t]), v = p ? l(p) : void 0, y = t.erc20TokenAddress, S = c(u(await e.getEthereumAddressByChain(_))), C =
|
|
71
|
+
}, S = async (e, t, n, r, i, a, s, d, p, g = !0) => {
|
|
72
|
+
let _ = f([t]), v = p ? l(p) : void 0, y = t.erc20TokenAddress, S = c(u(await e.getEthereumAddressByChain(_))), C = a ?? await m(_, y, [y], o.Transact, [], 10n), { userDepositedUtxos: w, statusId: T, depositTxHash: E } = await b(e, _, t, n, r, C, S, g);
|
|
73
73
|
return await h(e, _, w), {
|
|
74
74
|
depositTxHash: E,
|
|
75
|
-
scheduleId: await x(e, _, t, w, n, C, S, T,
|
|
75
|
+
scheduleId: await x(e, _, t, w, n, C, S, T, i, s, d, v)
|
|
76
76
|
};
|
|
77
77
|
};
|
|
78
78
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/utils/time.utils.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../types/admin.types.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../functions/web3/events/getShieldedBalance.cjs`),c=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`);require(`../../error-handling/index.cjs`);const l=require(`../../functions/pre-transaction/constructAdminData.cjs`),u=require(`../AccountActions/AccountActions.cjs`),d=require(`../../functions/pre-transaction/recipientUtxoProcessing.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const p=require(`../../functions/utils/involves-permit2-op.cjs`),m=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),h=require(`../../functions/private-wallet/emporium.helpers.cjs`),g=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),_=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),v=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`),y=require(`../../functions/pre-transaction/merge-with-fee-structure-emporium.cjs`),b=require(`./handleAutoDepositBack.cjs`);var x=async(e,t,n,i,a)=>{let o=[...await s.addPaddingToUtxos(e,t,n,i)],l=[],u=r.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=c.outputUtxoProcessing(e.userKeys,o[t],i[t],u);l.push(n)}return a&&d.recipientUtxoProcessing(a,l,i,u),{inputUtxosArray:o,outputUtxosArray:l}},S=async(r,s,c,d,S,C,w,T,E,D,O,k=!1,A,j,M)=>{if(M&&!o.isValidPrivateAddress(M.recipientInfo))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);if(w.length>0&&!T)throw Error(`Subaccount is required for private wallet transactions`);let N=c.map(e=>e.erc20TokenAddress),P=await r.getEthereumAddressByChain(s),F=T?u.AccountActions.getAddressFromSubAccount(s,T):void 0,{contractData:I}=e.networkRegistry[s],{emporiumAddress:L}=I;if(!L)throw Error(`No Emporium Address Provided`);let R=D??await f.getFeeStructure(s,E,N,i.ExternalActionId.Emporium,C.map(e=>m.convertEmporiumOpToCallInfo(e,F??``,s)));for(F?await y.mergeWithFeeStructureEmporium(r,s,F,C,N,d,R,w.find(e=>t.caseInsensitiveEqual(e.token.erc20TokenAddress,R.feeToken))?.amount??0n):await v.mergeWithFeeStructure(s,N,d,R);S.length<N.length;)S.push(!1);let[{inputUtxosArray:z,outputUtxosArray:B},V]=await Promise.all([x(r,s,N,d,M),O??await r.getRandomRelay(s,!0)]);if(!V)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H=T?u.AccountActions.getPrivateKeyFromSubAccount(s,T):void 0,[{zkCallData:U,circomData:W,dimData:G,commitmentValidationData:K},q]=await Promise.all([g.constructZkProof(r.merkleTreeHinkalByChain[s],z,B,r.userKeys,i.ExternalActionId.Emporium,L,C,r.generateProofRemotely,R,V,s,S,void 0,void 0,H),h.getAuthorizationDataIfNeeded(s,H)]),J=await _.transactCallRelayer(s,U,G,W,K,p.uniswapWorkaround(C),q,l.constructAdminData(j,s,w.map(e=>e.token.erc20TokenAddress),w.map(e=>e.amount),P,j===a.AdminTransactionType.PublicSwap?w.map(({token:e})=>e):void 0));return k&&T&&b.handleAutoDepositBack(r,s,F,T,R.feeToken,A,w,W),J};exports.hinkalPrivateWallet=S;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { networkRegistry as e } from "../../constants/chains.constants.mjs";
|
|
2
2
|
import { caseInsensitiveEqual as t } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
3
3
|
import { transactionErrorCodes as n } from "../../error-handling/error-codes.constants.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { getCurrentTimeInSeconds as r } from "../../functions/utils/time.utils.mjs";
|
|
5
|
+
import { ExternalActionId as i } from "../../types/external-action.types.mjs";
|
|
6
6
|
import { AdminTransactionType as a } from "../../types/admin.types.mjs";
|
|
7
7
|
import { isValidPrivateAddress as o } from "../../functions/utils/addresses.mjs";
|
|
8
8
|
import { addPaddingToUtxos as s } from "../../functions/web3/events/getShieldedBalance.mjs";
|
|
@@ -22,27 +22,27 @@ import { mergeWithFeeStructure as v } from "../../functions/pre-transaction/merg
|
|
|
22
22
|
import { mergeWithFeeStructureEmporium as y } from "../../functions/pre-transaction/merge-with-fee-structure-emporium.mjs";
|
|
23
23
|
import { handleAutoDepositBack as b } from "./handleAutoDepositBack.mjs";
|
|
24
24
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalPrivateWallet.ts
|
|
25
|
-
var x = async (e, t, n,
|
|
26
|
-
let o = [...await s(e, t, n,
|
|
25
|
+
var x = async (e, t, n, i, a) => {
|
|
26
|
+
let o = [...await s(e, t, n, i)], l = [], u = r().toString();
|
|
27
27
|
for (let t = 0; t < n.length; t += 1) {
|
|
28
|
-
let { outputUtxos: n } =
|
|
28
|
+
let { outputUtxos: n } = c(e.userKeys, o[t], i[t], u);
|
|
29
29
|
l.push(n);
|
|
30
30
|
}
|
|
31
|
-
return a && d(a, l,
|
|
31
|
+
return a && d(a, l, i, u), {
|
|
32
32
|
inputUtxosArray: o,
|
|
33
33
|
outputUtxosArray: l
|
|
34
34
|
};
|
|
35
|
-
}, S = async (
|
|
35
|
+
}, S = async (r, s, c, d, S, C, w, T, E, D, O, k = !1, A, j, M) => {
|
|
36
36
|
if (M && !o(M.recipientInfo)) throw Error(n.RECIPIENT_FORMAT_INCORRECT);
|
|
37
37
|
if (w.length > 0 && !T) throw Error("Subaccount is required for private wallet transactions");
|
|
38
|
-
let N = c.map((e) => e.erc20TokenAddress), P = await
|
|
38
|
+
let N = c.map((e) => e.erc20TokenAddress), P = await r.getEthereumAddressByChain(s), F = T ? u.getAddressFromSubAccount(s, T) : void 0, { contractData: I } = e[s], { emporiumAddress: L } = I;
|
|
39
39
|
if (!L) throw Error("No Emporium Address Provided");
|
|
40
|
-
let R = D ?? await f(s, E, N,
|
|
41
|
-
for (F ? await y(
|
|
42
|
-
let [{ inputUtxosArray: z, outputUtxosArray: B }, V] = await Promise.all([x(
|
|
40
|
+
let R = D ?? await f(s, E, N, i.Emporium, C.map((e) => m(e, F ?? "", s)));
|
|
41
|
+
for (F ? await y(r, s, F, C, N, d, R, w.find((e) => t(e.token.erc20TokenAddress, R.feeToken))?.amount ?? 0n) : await v(s, N, d, R); S.length < N.length;) S.push(!1);
|
|
42
|
+
let [{ inputUtxosArray: z, outputUtxosArray: B }, V] = await Promise.all([x(r, s, N, d, M), O ?? await r.getRandomRelay(s, !0)]);
|
|
43
43
|
if (!V) throw Error(n.RELAYER_NOT_AVAILABLE);
|
|
44
|
-
let H = T ? u.getPrivateKeyFromSubAccount(s, T) : void 0, [{ zkCallData: U, circomData: W, dimData: G, commitmentValidationData: K }, q] = await Promise.all([g(
|
|
45
|
-
return k && T && b(
|
|
44
|
+
let H = T ? u.getPrivateKeyFromSubAccount(s, T) : void 0, [{ zkCallData: U, circomData: W, dimData: G, commitmentValidationData: K }, q] = await Promise.all([g(r.merkleTreeHinkalByChain[s], z, B, r.userKeys, i.Emporium, L, C, r.generateProofRemotely, R, V, s, S, void 0, void 0, H), h(s, H)]), J = await _(s, U, G, W, K, p(C), q, l(j, s, w.map((e) => e.token.erc20TokenAddress), w.map((e) => e.amount), P, j === a.PublicSwap ? w.map(({ token: e }) => e) : void 0));
|
|
45
|
+
return k && T && b(r, s, F, T, R.feeToken, A, w, W), J;
|
|
46
46
|
};
|
|
47
47
|
//#endregion
|
|
48
48
|
export { S as hinkalPrivateWallet };
|
|
@@ -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(`../../
|
|
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(`../../types/external-action.types.cjs`);require(`../../types/index.cjs`);const c=require(`../../functions/utils/token-check.utils.cjs`),l=require(`../../functions/snarkjs/common.snarkjs.cjs`),u=require(`../../functions/pre-transaction/getFeeStructure.cjs`),d=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),f=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);let p=require(`ethers`);var m=async(m,h,g,_,v)=>{let y=c.validateAndGetChainId([h]),b=h.erc20TokenAddress;if(g.getTokenAddress(y)!==b)throw Error(`Off-chain UTXO token mismatch`);let x=v?new i.UserKeys(v):new i.UserKeys(g.nullifyingKey,g.nullifyingKey);if(!g.nullifyingKey&&!v)throw Error(`Claimable UTXO nullifyingKey is missing`);let S=x.getShieldedPrivateKey();if(g.nullifyingKey&&g.nullifyingKey!==S)throw Error(`Claimable UTXO key mismatch`);let{originalDeployer:C}=e.networkRegistry[y].contractData;if(!C)throw Error(`missing data`);let w=o.Utxo.createFrom(g,{nullifyingKey:S}),T=_??await u.getFeeStructure(y,b,[b],s.ExternalActionId.Transact,void 0,void 0,{mintTo:b,nullifierCount:1});if(T.feeToken!==b)throw Error(`Claim fee token mismatch: fee must be paid from claimed UTXO token`);let E=T.variableRate>0n?T.variableRate:t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;if(w.amount<=T.flatFee)throw Error(n.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);let D=w.amount-T.flatFee,O=D*E/10000n,k=D-O;if(k<=0n)throw Error(n.transactionErrorCodes.RECIPIENT_AMOUNT_INVALID);let A=T.flatFee+O,[j,M,N,,P]=m.getRecipientInfo().split(`,`);if(!M||!N||!j||!P)throw Error(`Invalid recipient info`);let F=a.getCurrentTimeInSeconds().toString(),I=new o.Utxo({amount:0n,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,nullifyingKey:x.getShieldedPrivateKey(),...w.isNewStyle?{spendingPublicKey:x.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),L=new o.Utxo({amount:0n,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,nullifyingKey:x.getShieldedPrivateKey(),timeStamp:F,spendingPublicKey:x.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}),R=new o.Utxo({amount:k,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,timeStamp:F,H0:[BigInt(M),BigInt(N)],stealthAddress:j,encryptionKey:P,isNewStyle:!0}),z=[w,I],B=[L,R],V=await m.getRandomRelay(y,!0);if(!V)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),x.getShieldedPrivateKey()),U={tokenNumber:1,nullifierAmount:z.length,outputAmount:B.length},W=l.calcEncryptedOutputs([B])[0].map(e=>Array.from(p.ethers.getBytes(e))),{proofAArr:G,proofBArr:K,proofCArr:q,publicInputsArr:J,commitmentValidationData:Y}=await d.constructSolanaZkProof(m.generateProofRemotely,m.merkleTreeHinkalByChain[y],x,[b],[z],[B],H,A,0n,t.solanaNativeAddress,V,U,W,y),X={recipient:V,mint:b===`11111111111111111111111111111111`?void 0:b};return f.solanaTransactCallRelayer({chainId:y,relayAddress:V,functionName:`transfer`,args:{proofAArr:G,proofBArr:K,proofCArr:q,publicInputsArr:J,encryptedOutputs:W,relayerFee:A.toString(),dimensions:U},accounts:X,commitmentValidationData:Y})};exports.hinkalSolanaClaimUtxo=m;
|
|
@@ -3,19 +3,19 @@ import { HINKAL_PRIVATE_SEND_VARIABLE_RATE as t, solanaNativeAddress as n } from
|
|
|
3
3
|
import { transactionErrorCodes as r } from "../../error-handling/error-codes.constants.mjs";
|
|
4
4
|
import { randomBigInt as i } from "../../functions/web3/etherFunctions.mjs";
|
|
5
5
|
import { UserKeys as a } from "../crypto-keys/keys.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { Utxo as l } from "../utxo/Utxo.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";
|
|
10
9
|
import "../../types/index.mjs";
|
|
11
|
-
import { validateAndGetChainId as
|
|
10
|
+
import { validateAndGetChainId as l } from "../../functions/utils/token-check.utils.mjs";
|
|
11
|
+
import { calcEncryptedOutputs as u } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
12
12
|
import { getFeeStructure as d } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
13
13
|
import { constructSolanaZkProof as f } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
|
|
14
14
|
import { solanaTransactCallRelayer as p } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
15
15
|
import { ethers as m } from "ethers";
|
|
16
16
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.ts
|
|
17
17
|
var h = async (h, g, _, v, y) => {
|
|
18
|
-
let b =
|
|
18
|
+
let b = l([g]), x = g.erc20TokenAddress;
|
|
19
19
|
if (_.getTokenAddress(b) !== x) throw Error("Off-chain UTXO token mismatch");
|
|
20
20
|
let S = y ? new a(y) : new a(_.nullifyingKey, _.nullifyingKey);
|
|
21
21
|
if (!_.nullifyingKey && !y) throw Error("Claimable UTXO nullifyingKey is missing");
|
|
@@ -23,7 +23,7 @@ var h = async (h, g, _, v, y) => {
|
|
|
23
23
|
if (_.nullifyingKey && _.nullifyingKey !== C) throw Error("Claimable UTXO key mismatch");
|
|
24
24
|
let { originalDeployer: w } = e[b].contractData;
|
|
25
25
|
if (!w) throw Error("missing data");
|
|
26
|
-
let T =
|
|
26
|
+
let T = s.createFrom(_, { nullifyingKey: C }), E = v ?? await d(b, x, [x], c.Transact, void 0, void 0, {
|
|
27
27
|
mintTo: x,
|
|
28
28
|
nullifierCount: 1
|
|
29
29
|
});
|
|
@@ -34,7 +34,7 @@ var h = async (h, g, _, v, y) => {
|
|
|
34
34
|
if (A <= 0n) throw Error(r.RECIPIENT_AMOUNT_INVALID);
|
|
35
35
|
let j = E.flatFee + k, [M, N, P, , F] = h.getRecipientInfo().split(",");
|
|
36
36
|
if (!N || !P || !M || !F) throw Error("Invalid recipient info");
|
|
37
|
-
let I =
|
|
37
|
+
let I = o().toString(), L = new s({
|
|
38
38
|
amount: 0n,
|
|
39
39
|
erc20TokenAddress: T.erc20TokenAddress,
|
|
40
40
|
mintAddress: T.mintAddress,
|
|
@@ -43,7 +43,7 @@ var h = async (h, g, _, v, y) => {
|
|
|
43
43
|
spendingPublicKey: S.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
44
44
|
isNewStyle: !0
|
|
45
45
|
} : { isNewStyle: !1 }
|
|
46
|
-
}), R = new
|
|
46
|
+
}), R = new s({
|
|
47
47
|
amount: 0n,
|
|
48
48
|
erc20TokenAddress: T.erc20TokenAddress,
|
|
49
49
|
mintAddress: T.mintAddress,
|
|
@@ -51,7 +51,7 @@ var h = async (h, g, _, v, y) => {
|
|
|
51
51
|
timeStamp: I,
|
|
52
52
|
spendingPublicKey: S.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
53
53
|
isNewStyle: !0
|
|
54
|
-
}), z = new
|
|
54
|
+
}), z = new s({
|
|
55
55
|
amount: A,
|
|
56
56
|
erc20TokenAddress: T.erc20TokenAddress,
|
|
57
57
|
mintAddress: T.mintAddress,
|
|
@@ -66,7 +66,7 @@ var h = async (h, g, _, v, y) => {
|
|
|
66
66
|
tokenNumber: 1,
|
|
67
67
|
nullifierAmount: B.length,
|
|
68
68
|
outputAmount: V.length
|
|
69
|
-
}, G =
|
|
69
|
+
}, G = u([V])[0].map((e) => Array.from(m.getBytes(e))), { proofAArr: K, proofBArr: q, proofCArr: J, publicInputsArr: Y, commitmentValidationData: X } = await f(h.generateProofRemotely, h.merkleTreeHinkalByChain[b], S, [x], [B], [V], U, j, 0n, n, H, W, G, b), Z = {
|
|
70
70
|
recipient: H,
|
|
71
71
|
mint: x === "11111111111111111111111111111111" ? void 0 : x
|
|
72
72
|
};
|
|
@@ -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/
|
|
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/solanaMint.utils.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../functions/utils/token-check.utils.cjs`),c=require(`../../functions/snarkjs/common.snarkjs.cjs`),l=require(`../../functions/pre-transaction/solana.cjs`),u=require(`../../functions/pre-transaction/constructAdminData.cjs`),d=require(`../../error-handling/retrySolanaError.cjs`),f=require(`../../API/admin-calls.cjs`),p=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`),m=require(`./hinkalProoflessDeposit.utils.cjs`);let h=require(`@solana/web3.js`),g=require(`@coral-xyz/anchor`);var _=(n,r)=>{let i=s.validateAndGetChainId([r]),o=r.erc20TokenAddress,{hinkalIdl:c,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[i].contractData;if(!c)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let f=n.getSolanaProgram(c),p=n.getSolanaPublicKey(),{connection:m,wallet:g}=f.provider;if(!g)throw Error(`missing solana wallet`);let _=new h.PublicKey(d),v=new h.PublicKey(u),{mintPublicKey:y}=a.formatMintAddress(o),b=y.toString()===t.solanaNativeAddress;return{chainId:i,mintAddress:o,program:f,publicKey:p,connection:m,wallet:g,originalDeployer:_,mintPublicKey:y,mint:b?null:y,atasValue:b?null:void 0,storageAccount:l.getStorageAccountPublicKey(v,_),storageVault:l.getStorageVaultPublicKey(v,_),merkleAccount:l.getMerkleAccountPublicKey(v,_)}},v=(e,t,n)=>{let r=n.map(e=>l.buildAnchorStealthAddressStructure(e));return e.program.methods.multiPaymentDeposit(t.map(e=>new g.BN(e.toString())),r,!1).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,storageVaultAta:e.atasValue}).instruction()},y=async(e,t,n,r)=>{for(let i=0;i<10;i+=1){let a=i===9;try{let{blockhash:i,lastValidBlockHeight:a}=await e.getLatestBlockhash(),o=new h.VersionedTransaction(new h.TransactionMessage({payerKey:n,recentBlockhash:i,instructions:r}).compileToV0Message()),s=await t.signTransaction(o),c=await e.sendTransaction(s);return await e.confirmTransaction({signature:c,blockhash:i,lastValidBlockHeight:a},`confirmed`),c}catch(e){if(d.shouldRetryForSolanaError(e)&&!a)continue;throw e}}return``},b=(e,t)=>{if(e.length===0)throw Error(`amounts must not be empty`);if(e.length!==t.length)throw Error(`amounts and stealthAddressStructures length mismatch`);if(e.some(e=>e<=0n))throw Error(`all amounts must be positive`);m.assertNoDuplicateStealthAddressStructures(t)},x=async(e,t,n,r,i,a=!1)=>{b(n,r);let o=_(e,t),s=u.constructAdminData(i,o.chainId,Array(n.length).fill(o.mintAddress),n,await e.getEthereumAddress()),c=await v(o,n,r);if(a){let{blockhash:e}=await o.connection.getLatestBlockhash(),t=new h.Transaction().add(c);return t.recentBlockhash=e,t.feePayer=o.publicKey,Buffer.from(t.serialize({requireAllSignatures:!1})).toString(`base64`)}let l=await y(o.connection,o.wallet,o.publicKey,[c]);return await f.emitTxPublicData(s),l},S=async(e,t,n,r,i,a)=>{b(n,r);let o=_(e,t),s=await e.getRandomRelay(o.chainId,!1);if(!s)throw Error(`No relay available for chainId ${o.chainId}`);let{instructions:c}=await p.buildSolanaTransferInstructions(o.connection,o.publicKey,new h.PublicKey(s),t,i),l=await v(o,n,r),d=u.constructAdminData(a,o.chainId,Array(n.length).fill(o.mintAddress),n,await e.getEthereumAddress()),m=await y(o.connection,o.wallet,o.publicKey,[...c,l]);return await f.emitTxPublicData(d),m},C=async(e,t,n,a=!1)=>{let o=e.userKeys.getShieldedPrivateKey(),s=c.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),o),o,e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint);return x(e,n,[t],[s],void 0,a)},w=async(e,t,r,i,a=!1,s)=>{if(!o.isValidPrivateAddress(i))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let c=o.constructStealthAddressStructure(i);return x(e,r,[t],[c],s,a)};exports.hinkalSolanaDeposit=C,exports.hinkalSolanaDepositForOther=w,exports.hinkalSolanaProoflessDepositWithPublicFee=S,exports.submitSolanaProoflessDeposit=x;
|
|
@@ -3,10 +3,10 @@ import { solanaNativeAddress as t } from "../../constants/protocol.constants.mjs
|
|
|
3
3
|
import { transactionErrorCodes as n } from "../../error-handling/error-codes.constants.mjs";
|
|
4
4
|
import { randomBigInt as r } from "../../functions/web3/etherFunctions.mjs";
|
|
5
5
|
import { UserKeys as i } from "../crypto-keys/keys.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { formatMintAddress as a } from "../../functions/utils/solanaMint.utils.mjs";
|
|
7
|
+
import { constructStealthAddressStructure as o, isValidPrivateAddress as s } from "../../functions/utils/addresses.mjs";
|
|
8
|
+
import { validateAndGetChainId as c } from "../../functions/utils/token-check.utils.mjs";
|
|
9
|
+
import { calcStealthAddressStructure as l } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
10
10
|
import { buildAnchorStealthAddressStructure as u, getMerkleAccountPublicKey as d, getStorageAccountPublicKey as f, getStorageVaultPublicKey as p } from "../../functions/pre-transaction/solana.mjs";
|
|
11
11
|
import { constructAdminData as m } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
12
12
|
import { shouldRetryForSolanaError as h } from "../../error-handling/retrySolanaError.mjs";
|
|
@@ -17,15 +17,15 @@ import { PublicKey as y, Transaction as b, TransactionMessage as x, VersionedTra
|
|
|
17
17
|
import { BN as C } from "@coral-xyz/anchor";
|
|
18
18
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaDeposit.ts
|
|
19
19
|
var w = (n, r) => {
|
|
20
|
-
let i =
|
|
20
|
+
let i = c([r]), o = r.erc20TokenAddress, { hinkalIdl: s, hinkalAddress: l, originalDeployer: u } = e[i].contractData;
|
|
21
21
|
if (!s) throw Error("No IDL configured for Solana program on this network");
|
|
22
22
|
if (!u) throw Error("missing original deployer");
|
|
23
23
|
let m = n.getSolanaProgram(s), h = n.getSolanaPublicKey(), { connection: g, wallet: _ } = m.provider;
|
|
24
24
|
if (!_) throw Error("missing solana wallet");
|
|
25
|
-
let v = new y(u), b = new y(
|
|
25
|
+
let v = new y(u), b = new y(l), { mintPublicKey: x } = a(o), S = x.toString() === t;
|
|
26
26
|
return {
|
|
27
27
|
chainId: i,
|
|
28
|
-
mintAddress:
|
|
28
|
+
mintAddress: o,
|
|
29
29
|
program: m,
|
|
30
30
|
publicKey: h,
|
|
31
31
|
connection: g,
|
|
@@ -90,13 +90,13 @@ var w = (n, r) => {
|
|
|
90
90
|
if (!s) throw Error(`No relay available for chainId ${o.chainId}`);
|
|
91
91
|
let { instructions: c } = await _(o.connection, o.publicKey, new y(s), t, i), l = await T(o, n, r), u = m(a, o.chainId, Array(n.length).fill(o.mintAddress), n, await e.getEthereumAddress()), d = await E(o.connection, o.wallet, o.publicKey, [...c, l]);
|
|
92
92
|
return await g(u), d;
|
|
93
|
-
}, A = async (e, t, n,
|
|
94
|
-
let
|
|
95
|
-
return O(e, n, [t], [
|
|
96
|
-
}, j = async (e, t, r, i, a = !1,
|
|
97
|
-
if (!
|
|
98
|
-
let l =
|
|
99
|
-
return O(e, r, [t], [l],
|
|
93
|
+
}, A = async (e, t, n, a = !1) => {
|
|
94
|
+
let o = e.userKeys.getShieldedPrivateKey(), s = l(i.findCorrectRandomization(r(31), o), o, e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint);
|
|
95
|
+
return O(e, n, [t], [s], void 0, a);
|
|
96
|
+
}, j = async (e, t, r, i, a = !1, c) => {
|
|
97
|
+
if (!s(i)) throw Error(n.RECIPIENT_FORMAT_INCORRECT);
|
|
98
|
+
let l = o(i);
|
|
99
|
+
return O(e, r, [t], [l], c, a);
|
|
100
100
|
};
|
|
101
101
|
//#endregion
|
|
102
102
|
export { A as hinkalSolanaDeposit, j as hinkalSolanaDepositForOther, k as hinkalSolanaProoflessDepositWithPublicFee, O as submitSolanaProoflessDeposit };
|
|
@@ -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(`../../
|
|
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(`../../types/external-action.types.cjs`),c=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const l=require(`../../functions/utils/solanaMint.utils.cjs`),u=require(`../../functions/utils/addresses.cjs`),d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/snarkjs/common.snarkjs.cjs`),p=require(`../../functions/pre-transaction/solana.cjs`),m=require(`../../functions/pre-transaction/constructAdminData.cjs`),h=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),g=require(`../../functions/pre-transaction/getFeeStructure.cjs`),_=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`);require(`../../functions/pre-transaction/index.cjs`);const v=require(`../../functions/utils/getUtxosFromReceiptSolana.cjs`),y=require(`../../functions/utils/fees.utils.cjs`);require(`../../functions/web3/index.cjs`);const b=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),x=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),S=require(`../../API/deposit-and-withdraw-status-calls.cjs`);require(`../../functions/index.cjs`);let C=require(`ethers`),w=require(`@solana/web3.js`),T=require(`@coral-xyz/anchor`);var E=(n,a,o,s)=>{let{hinkalIdl:c,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[a].contractData;if(!c)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(c),g=n.getSolanaPublicKey(),_=new w.PublicKey(d),v=new w.PublicKey(u),{mintPublicKey:y}=l.formatMintAddress(o.erc20TokenAddress),b=y.toString(),x=p.getStorageAccountPublicKey(v,_),S=p.getStorageVaultPublicKey(v,_),C=p.getMerkleAccountPublicKey(v,_),T=s.map(()=>p.buildAnchorStealthAddressStructure(f.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),m),m,n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint))),E=b===t.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:E?null:y,atasValue:E?null:void 0,storageAccount:x,storageVault:S,merkleAccount:C,amounts:s,anchorStealthStructures:T}},D=e=>e.program.methods.multiPaymentDeposit(e.amounts.map(e=>new T.BN(e.toString())),e.anchorStealthStructures,!0).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,storageVaultAta:e.atasValue}),O=async(e,t,n,r,i,a,o)=>{let s=r.map(e=>e+y.calculateTotalFee(e,a)),u=E(e,t,n,s),d=(await S.updateDepositAndWithdrawStatus({chainId:t,hashedEthereumAddress:o,phase:c.DepositAndWithdrawPhase.BEFORE_DEPOSIT})).id??void 0,f=await D(u).rpc(),p=await u.program.provider.connection.getLatestBlockhash();await u.program.provider.connection.confirmTransaction({blockhash:p.blockhash,lastValidBlockHeight:p.lastValidBlockHeight,signature:f},`finalized`);let m=await h.fetchSolanaTransaction(u.program.provider.connection,f,`finalized`);if(!m)throw Error(`Transaction missing`);await S.safeUpdateDepositAndWithdrawStatus({id:d,chainId:t,hashedEthereumAddress:o,phase:c.DepositAndWithdrawPhase.AFTER_DEPOSIT,depositTxHash:f});let{compressedAddress:g}=l.formatMintAddress(n.erc20TokenAddress),_=v.getOnChainUtxosFromReceiptSolana(m,u.program,e.userKeys,g),b=[],x=[..._];return i.forEach((e,t)=>{let n=s[t],r=x.find(e=>e.amount===n);if(!r)throw Error(`Could not find newly created UTXO with amount ${n} for recipient ${e}.`);b.push({recipientAddress:e,utxo:r}),x.splice(x.indexOf(r),1)}),{userDepositedUtxos:b,depositTxHash:f,statusId:d}},k=async(s,u,d,p,h,g,_,v,w,T,E,D,O)=>{let k=d.erc20TokenAddress;if(p.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:A}=e.networkRegistry[u].contractData;if(!A)throw Error(`missing data`);let j=await s.getRandomRelay(u,!0);if(!j)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let M=a.getCurrentTimeInSeconds().toString(),N=s.generateProofRemotely?5:1,P=[];for(let e=0;e<p.length;e+=N){let n=p.slice(e,e+N),a=await Promise.all(n.map(async({recipientAddress:e,utxo:n},a)=>{let{compressedAddress:c}=l.formatMintAddress(t.solanaNativeAddress),p=new o.Utxo({amount:0n,mintAddress:k,erc20TokenAddress:c,nullifyingKey:s.userKeys.getShieldedPrivateKey(),timeStamp:M,...n.isNewStyle?{spendingPublicKey:s.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),g=[n,p],v=[p],x=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),s.userKeys.getShieldedPrivateKey()),S={tokenNumber:1,nullifierAmount:g.length,outputAmount:v.length},w=f.calcEncryptedOutputs([v])[0][0],T=Array.from(C.ethers.getBytes(w)),D=await y.calculateModifiedFeeStructure(u,d,_[a],h),A=m.constructAdminData(E,u,[k],[_[a]],await s.getEthereumAddress()),{proofAArr:N,proofBArr:P,proofCArr:F,publicInputsArr:I,commitmentValidationData:L}=await b.constructSolanaZkProof(s.generateProofRemotely,s.merkleTreeHinkalByChain[u],s.userKeys,[k],[g],[v],x,D.flatFee,D.variableRate,e,j,S,[T],u),R={recipient:e,mint:k===`11111111111111111111111111111111`?void 0:k};return{relayAddress:j,functionName:`transact`,chainId:u,recipientAmount:_[a].toString(),args:{proofAArr:N,proofBArr:P,proofCArr:F,publicInputsArr:I,encryptedOutputs:[T],relayerFee:D.flatFee.toString(),dimensions:S},accounts:R,adminData:A,commitmentValidationData:L,displayRecipient:O?.[a]}}));P.push(...a)}await S.safeUpdateDepositAndWithdrawStatus({id:v,chainId:u,hashedEthereumAddress:g,phase:c.DepositAndWithdrawPhase.BEFORE_SCHEDULE_WITHDRAW});let F=await x.solanaTransactCallRelayerBatch(u,P,g,w,T,D);return await S.safeUpdateDepositAndWithdrawStatus({id:v,chainId:u,hashedEthereumAddress:g,phase:c.DepositAndWithdrawPhase.AFTER_SCHEDULE_WITHDRAW,scheduleId:F}),F},A=async(e,t,n,r,i,a,o,c,l,f)=>{let p=d.validateAndGetChainId([t]),m=t.erc20TokenAddress,h=u.hashEthereumAddress(await e.getEthereumAddressByChain(p)),v=l?u.hashString(l):void 0,y=a??await g.getFeeStructure(p,m,[m],s.ExternalActionId.Transact,[],5n),{userDepositedUtxos:b,depositTxHash:x,statusId:S}=await O(e,p,t,n,r,y,h);return await _.waitForDepositedUtxosInMerkleTree(e,p,b),{depositTxHash:x,scheduleId:await k(e,p,t,b,y,h,n,S,i,o,c,v,f)}};exports.hinkalSolanaDepositAndWithdraw=A;
|
|
@@ -3,15 +3,15 @@ import { solanaNativeAddress as t } from "../../constants/protocol.constants.mjs
|
|
|
3
3
|
import { transactionErrorCodes as n } from "../../error-handling/error-codes.constants.mjs";
|
|
4
4
|
import { randomBigInt as r } from "../../functions/web3/etherFunctions.mjs";
|
|
5
5
|
import { UserKeys as i } from "../crypto-keys/keys.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { DepositAndWithdrawPhase as u } from "../../types/scheduled-transactions.types.mjs";
|
|
6
|
+
import { getCurrentTimeInSeconds as a } from "../../functions/utils/time.utils.mjs";
|
|
7
|
+
import { Utxo as o } from "../utxo/Utxo.mjs";
|
|
8
|
+
import { ExternalActionId as s } from "../../types/external-action.types.mjs";
|
|
9
|
+
import { DepositAndWithdrawPhase as c } from "../../types/scheduled-transactions.types.mjs";
|
|
11
10
|
import "../../types/index.mjs";
|
|
12
|
-
import { formatMintAddress as
|
|
13
|
-
import { hashEthereumAddress as
|
|
14
|
-
import { validateAndGetChainId as
|
|
11
|
+
import { formatMintAddress as l } from "../../functions/utils/solanaMint.utils.mjs";
|
|
12
|
+
import { hashEthereumAddress as u, hashString as d } from "../../functions/utils/addresses.mjs";
|
|
13
|
+
import { validateAndGetChainId as f } from "../../functions/utils/token-check.utils.mjs";
|
|
14
|
+
import { calcEncryptedOutputs as p, calcStealthAddressStructure as m } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
15
15
|
import { buildAnchorStealthAddressStructure as h, getMerkleAccountPublicKey as g, getStorageAccountPublicKey as _, getStorageVaultPublicKey as v } from "../../functions/pre-transaction/solana.mjs";
|
|
16
16
|
import { constructAdminData as y } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
17
17
|
import { fetchSolanaTransaction as b } from "../../functions/pre-transaction/sendV0Transaction.mjs";
|
|
@@ -29,13 +29,13 @@ import { ethers as A } from "ethers";
|
|
|
29
29
|
import { PublicKey as j } from "@solana/web3.js";
|
|
30
30
|
import { BN as M } from "@coral-xyz/anchor";
|
|
31
31
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.ts
|
|
32
|
-
var N = (n, a, o,
|
|
33
|
-
let { hinkalIdl:
|
|
34
|
-
if (!
|
|
35
|
-
if (!
|
|
36
|
-
let
|
|
32
|
+
var N = (n, a, o, s) => {
|
|
33
|
+
let { hinkalIdl: c, hinkalAddress: u, originalDeployer: d } = e[a].contractData;
|
|
34
|
+
if (!c) throw Error("No IDL configured for Solana program on this network");
|
|
35
|
+
if (!d) throw Error("missing original deployer");
|
|
36
|
+
let f = n.userKeys.getShieldedPrivateKey(), p = n.getSolanaProgram(c), y = n.getSolanaPublicKey(), b = new j(d), x = new j(u), { mintPublicKey: S } = l(o.erc20TokenAddress), C = S.toString(), w = _(x, b), T = v(x, b), E = g(x, b), D = s.map(() => h(m(i.findCorrectRandomization(r(31), f), f, n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint))), O = C === t;
|
|
37
37
|
return {
|
|
38
|
-
program:
|
|
38
|
+
program: p,
|
|
39
39
|
publicKey: y,
|
|
40
40
|
originalDeployer: b,
|
|
41
41
|
mint: O ? null : S,
|
|
@@ -43,7 +43,7 @@ var N = (n, a, o, c) => {
|
|
|
43
43
|
storageAccount: w,
|
|
44
44
|
storageVault: T,
|
|
45
45
|
merkleAccount: E,
|
|
46
|
-
amounts:
|
|
46
|
+
amounts: s,
|
|
47
47
|
anchorStealthStructures: D
|
|
48
48
|
};
|
|
49
49
|
}, P = (e) => e.program.methods.multiPaymentDeposit(e.amounts.map((e) => new M(e.toString())), e.anchorStealthStructures, !0).accounts({
|
|
@@ -56,26 +56,26 @@ var N = (n, a, o, c) => {
|
|
|
56
56
|
merkleAccount: e.merkleAccount,
|
|
57
57
|
storageVaultAta: e.atasValue
|
|
58
58
|
}), F = async (e, t, n, r, i, a, o) => {
|
|
59
|
-
let s = r.map((e) => e + T(e, a)),
|
|
59
|
+
let s = r.map((e) => e + T(e, a)), u = N(e, t, n, s), d = (await k({
|
|
60
60
|
chainId: t,
|
|
61
61
|
hashedEthereumAddress: o,
|
|
62
|
-
phase:
|
|
63
|
-
})).id ?? void 0, f = await P(
|
|
64
|
-
await
|
|
62
|
+
phase: c.BEFORE_DEPOSIT
|
|
63
|
+
})).id ?? void 0, f = await P(u).rpc(), p = await u.program.provider.connection.getLatestBlockhash();
|
|
64
|
+
await u.program.provider.connection.confirmTransaction({
|
|
65
65
|
blockhash: p.blockhash,
|
|
66
66
|
lastValidBlockHeight: p.lastValidBlockHeight,
|
|
67
67
|
signature: f
|
|
68
68
|
}, "finalized");
|
|
69
|
-
let m = await b(
|
|
69
|
+
let m = await b(u.program.provider.connection, f, "finalized");
|
|
70
70
|
if (!m) throw Error("Transaction missing");
|
|
71
71
|
await O({
|
|
72
|
-
id:
|
|
72
|
+
id: d,
|
|
73
73
|
chainId: t,
|
|
74
74
|
hashedEthereumAddress: o,
|
|
75
|
-
phase:
|
|
75
|
+
phase: c.AFTER_DEPOSIT,
|
|
76
76
|
depositTxHash: f
|
|
77
77
|
});
|
|
78
|
-
let { compressedAddress: h } =
|
|
78
|
+
let { compressedAddress: h } = l(n.erc20TokenAddress), g = C(m, u.program, e.userKeys, h), _ = [], v = [...g];
|
|
79
79
|
return i.forEach((e, t) => {
|
|
80
80
|
let n = s[t], r = v.find((e) => e.amount === n);
|
|
81
81
|
if (!r) throw Error(`Could not find newly created UTXO with amount ${n} for recipient ${e}.`);
|
|
@@ -86,41 +86,41 @@ var N = (n, a, o, c) => {
|
|
|
86
86
|
}), {
|
|
87
87
|
userDepositedUtxos: _,
|
|
88
88
|
depositTxHash: f,
|
|
89
|
-
statusId:
|
|
89
|
+
statusId: d
|
|
90
90
|
};
|
|
91
|
-
}, I = async (
|
|
92
|
-
let T =
|
|
93
|
-
if (
|
|
94
|
-
let { originalDeployer: k } = e[
|
|
91
|
+
}, I = async (s, u, d, f, m, h, g, _, v, b, x, S, C) => {
|
|
92
|
+
let T = d.erc20TokenAddress;
|
|
93
|
+
if (f.length === 0) throw Error("userDepositedUtxos must not be empty");
|
|
94
|
+
let { originalDeployer: k } = e[u].contractData;
|
|
95
95
|
if (!k) throw Error("missing data");
|
|
96
|
-
let j = await
|
|
96
|
+
let j = await s.getRandomRelay(u, !0);
|
|
97
97
|
if (!j) throw Error(n.RELAYER_NOT_AVAILABLE);
|
|
98
|
-
let M =
|
|
99
|
-
for (let e = 0; e <
|
|
100
|
-
let n =
|
|
101
|
-
let { compressedAddress:
|
|
98
|
+
let M = a().toString(), N = s.generateProofRemotely ? 5 : 1, P = [];
|
|
99
|
+
for (let e = 0; e < f.length; e += N) {
|
|
100
|
+
let n = f.slice(e, e + N), a = await Promise.all(n.map(async ({ recipientAddress: e, utxo: n }, a) => {
|
|
101
|
+
let { compressedAddress: c } = l(t), f = new o({
|
|
102
102
|
amount: 0n,
|
|
103
103
|
mintAddress: T,
|
|
104
|
-
erc20TokenAddress:
|
|
105
|
-
nullifyingKey:
|
|
104
|
+
erc20TokenAddress: c,
|
|
105
|
+
nullifyingKey: s.userKeys.getShieldedPrivateKey(),
|
|
106
106
|
timeStamp: M,
|
|
107
107
|
...n.isNewStyle ? {
|
|
108
|
-
spendingPublicKey:
|
|
108
|
+
spendingPublicKey: s.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
109
109
|
isNewStyle: !0
|
|
110
110
|
} : { isNewStyle: !1 }
|
|
111
|
-
}), h = [n,
|
|
111
|
+
}), h = [n, f], _ = [f], v = i.findCorrectRandomization(r(31), s.userKeys.getShieldedPrivateKey()), b = {
|
|
112
112
|
tokenNumber: 1,
|
|
113
113
|
nullifierAmount: h.length,
|
|
114
114
|
outputAmount: _.length
|
|
115
|
-
}, S =
|
|
115
|
+
}, S = p([_])[0][0], D = Array.from(A.getBytes(S)), O = await w(u, d, g[a], m), k = y(x, u, [T], [g[a]], await s.getEthereumAddress()), { proofAArr: N, proofBArr: P, proofCArr: F, publicInputsArr: I, commitmentValidationData: L } = await E(s.generateProofRemotely, s.merkleTreeHinkalByChain[u], s.userKeys, [T], [h], [_], v, O.flatFee, O.variableRate, e, j, b, [D], u), R = {
|
|
116
116
|
recipient: e,
|
|
117
117
|
mint: T === "11111111111111111111111111111111" ? void 0 : T
|
|
118
118
|
};
|
|
119
119
|
return {
|
|
120
120
|
relayAddress: j,
|
|
121
121
|
functionName: "transact",
|
|
122
|
-
chainId:
|
|
123
|
-
recipientAmount: g[
|
|
122
|
+
chainId: u,
|
|
123
|
+
recipientAmount: g[a].toString(),
|
|
124
124
|
args: {
|
|
125
125
|
proofAArr: N,
|
|
126
126
|
proofBArr: P,
|
|
@@ -133,30 +133,30 @@ var N = (n, a, o, c) => {
|
|
|
133
133
|
accounts: R,
|
|
134
134
|
adminData: k,
|
|
135
135
|
commitmentValidationData: L,
|
|
136
|
-
displayRecipient: C?.[
|
|
136
|
+
displayRecipient: C?.[a]
|
|
137
137
|
};
|
|
138
138
|
}));
|
|
139
|
-
P.push(...
|
|
139
|
+
P.push(...a);
|
|
140
140
|
}
|
|
141
141
|
await O({
|
|
142
142
|
id: _,
|
|
143
|
-
chainId:
|
|
143
|
+
chainId: u,
|
|
144
144
|
hashedEthereumAddress: h,
|
|
145
|
-
phase:
|
|
145
|
+
phase: c.BEFORE_SCHEDULE_WITHDRAW
|
|
146
146
|
});
|
|
147
|
-
let F = await D(
|
|
147
|
+
let F = await D(u, P, h, v, b, S);
|
|
148
148
|
return await O({
|
|
149
149
|
id: _,
|
|
150
|
-
chainId:
|
|
150
|
+
chainId: u,
|
|
151
151
|
hashedEthereumAddress: h,
|
|
152
|
-
phase:
|
|
152
|
+
phase: c.AFTER_SCHEDULE_WITHDRAW,
|
|
153
153
|
scheduleId: F
|
|
154
154
|
}), F;
|
|
155
|
-
}, L = async (e, t, n, r, i,
|
|
156
|
-
let
|
|
157
|
-
return await S(e,
|
|
155
|
+
}, L = async (e, t, n, r, i, a, o, c, l, p) => {
|
|
156
|
+
let m = f([t]), h = t.erc20TokenAddress, g = u(await e.getEthereumAddressByChain(m)), _ = l ? d(l) : void 0, v = a ?? await x(m, h, [h], s.Transact, [], 5n), { userDepositedUtxos: y, depositTxHash: b, statusId: C } = await F(e, m, t, n, r, v, g);
|
|
157
|
+
return await S(e, m, y), {
|
|
158
158
|
depositTxHash: b,
|
|
159
|
-
scheduleId: await I(e,
|
|
159
|
+
scheduleId: await I(e, m, t, y, v, g, n, C, i, o, c, _, p)
|
|
160
160
|
};
|
|
161
161
|
};
|
|
162
162
|
//#endregion
|
|
@@ -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(`../../
|
|
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/snarkjs/common.snarkjs.cjs`),f=require(`../../functions/pre-transaction/solana.cjs`),p=require(`../../functions/pre-transaction/constructAdminData.cjs`),ee=require(`../../functions/pre-transaction/convert-okx-instructions.cjs`),m=require(`../../functions/pre-transaction/ensureAmountChanges.cjs`),h=require(`../../functions/pre-transaction/getFeeStructure.cjs`),g=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),_=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);let v=require(`ethers`),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}},x=async(a,l,u,x,te,S,C,w,T)=>{let E=c.validateAndGetChainId(l),D=new y.PublicKey(t.solanaNativeAddress),{hinkalAddress:ne,originalDeployer:O}=e.networkRegistry[E].contractData;if(!O)throw Error(`No IDL configured for Solana program on this network`);let k=new y.PublicKey(O),A=new y.PublicKey(ne),j=l.map(e=>e.erc20TokenAddress),{userKeys:M,merkleTreeHinkalByChain:N}=a,P=w??await h.getFeeStructure(E,C,j,o.ExternalActionId.Transact),F=u[1],I=Number(a.cacheDevice.get(s.StorageKeys.SLIPPAGE_PERCENTAGE)??0),L=l[1],R=r.getAmountInToken(L,F),z=Number(R)*I/100;u[1]-=r.getAmountInWei(L,z.toFixed(L.decimals));let B=F*BigInt(P.variableRate??0)/10000n+P.flatFee;if(u[1]-=B,u[1]<0)throw Error(n.transactionErrorCodes.LOW_OUTPUT_AMOUNT);let V=P.variableRate.toString(),[H,U,{inputUtxosArray:W,outputUtxosArray:G}]=await Promise.all([a.getRandomRelay(E,!0),a.getEthereumAddressByChain(E),b(a,E,j,u)]);if(!H)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let K=a.userKeys.getShieldedPrivateKey(),q=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),K),J={tokenNumber:2,nullifierAmount:W[0].length,outputAmount:1},Y=d.calcEncryptedOutputs(G).map(e=>[...v.ethers.getBytes(e[0])]),X=f.getSwapperAccountPublicKeyFromSalt(A,k,x),{remainingAccounts:Z,hinkalInstructions:Q}=ee.convertOKXToHinkalInstructions(te,X);m.ensureAmountChanges(W,G,u);let{proofAArr:re,proofBArr:ie,proofCArr:ae,publicInputsArr:oe,commitmentValidationData:$}=await g.constructSolanaZkProof(a.generateProofRemotely,N[E],M,j,W,G,q,P.flatFee,P.variableRate,D.toString(),H,J,Y,E,Q,Z,x),se=f.getStorageAccountPublicKey(A,k),ce=f.getStorageVaultPublicKey(A,k),le=l[0].erc20TokenAddress===`11111111111111111111111111111111`?null:new y.PublicKey(l[0].erc20TokenAddress),ue=l[1].erc20TokenAddress===`11111111111111111111111111111111`?null:new y.PublicKey(l[1].erc20TokenAddress),de={recipient:D.toString(),storageAccount:se.toString(),storageVault:ce.toString(),swapperAccount:X.toString(),mintFrom:le?.toString()??null,mintTo:ue?.toString()??null,remainingAccounts:Z.map(e=>({pubkey:e.pubkey.toString(),isSigner:e.isSigner,isWritable:e.isWritable})),addressLookupTableAccount:S};return _.solanaTransactCallRelayer({chainId:E,relayAddress:H,functionName:`swap`,args:{encryptedOutputs:Y,proofAArr:re,proofBArr:ie,proofCArr:ae,publicInputsArr:oe,relayerFee:P.flatFee.toString(),variableRate:V,dimensions:J,hinkalInstructions:Q.map(e=>({accountIndexes:[...e.accountIndexes],data:[...e.data],programIndex:e.programIndex}))},accounts:de,commitmentValidationData:$,adminData:p.constructAdminData(T,E,j,u,U,l)})};exports.hinkalSolanaSwap=x;
|