@hinkal/common 0.2.32 → 0.2.34
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/constants/bridging.constants.cjs +1 -1
- package/constants/bridging.constants.d.ts +1 -1
- package/constants/bridging.constants.mjs +6 -5
- package/constants/chains.constants.cjs +1 -1
- package/constants/chains.constants.d.ts +11 -1
- package/constants/chains.constants.mjs +86 -18
- package/constants/protocol.constants.cjs +1 -1
- package/constants/protocol.constants.d.ts +1 -0
- package/constants/protocol.constants.mjs +2 -2
- package/constants/token-data/ERC20Registry.cjs +1 -1
- package/constants/token-data/ERC20Registry.mjs +49 -14
- package/constants/token-data/avalancheRegistry.json.cjs +1 -0
- package/constants/token-data/avalancheRegistry.json.mjs +44 -0
- package/constants/token-data/bnbMainnetRegistry.json.cjs +1 -0
- package/constants/token-data/bnbMainnetRegistry.json.mjs +44 -0
- package/constants/token-data/cronosRegistry.json.cjs +1 -0
- package/constants/token-data/cronosRegistry.json.mjs +44 -0
- package/constants/token-data/hyperEvmRegistry.json.cjs +1 -0
- package/constants/token-data/hyperEvmRegistry.json.mjs +36 -0
- package/constants/token-data/index.cjs +1 -1
- package/constants/token-data/index.d.ts +57 -1
- package/constants/token-data/index.mjs +9 -2
- package/constants/token-data/inkRegistry.json.cjs +1 -0
- package/constants/token-data/inkRegistry.json.mjs +28 -0
- package/constants/token-data/monadRegistry.json.cjs +1 -0
- package/constants/token-data/monadRegistry.json.mjs +36 -0
- package/constants/token-data/plasmaRegistry.json.cjs +1 -0
- package/constants/token-data/plasmaRegistry.json.mjs +28 -0
- package/constants/tokens.constants.cjs +1 -1
- package/constants/tokens.constants.mjs +8 -1
- package/data-structures/Hinkal/Hinkal.cjs +1 -1
- package/data-structures/Hinkal/Hinkal.d.ts +1 -1
- package/data-structures/Hinkal/Hinkal.mjs +1 -1
- package/data-structures/Hinkal/IHinkal.d.ts +1 -1
- package/data-structures/Hinkal/handleAutoDepositBack.cjs +1 -1
- package/data-structures/Hinkal/handleAutoDepositBack.mjs +15 -15
- package/data-structures/Hinkal/hinkalClaimUtxo.cjs +1 -1
- package/data-structures/Hinkal/hinkalClaimUtxo.mjs +33 -35
- package/data-structures/Hinkal/hinkalDepositAndBridge.cjs +1 -1
- package/data-structures/Hinkal/hinkalDepositAndBridge.mjs +43 -49
- package/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
- package/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +38 -40
- package/data-structures/Hinkal/hinkalPrivateWallet.cjs +1 -1
- package/data-structures/Hinkal/hinkalPrivateWallet.mjs +21 -26
- package/data-structures/Hinkal/hinkalSolanaClaimUtxo.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaClaimUtxo.mjs +62 -64
- package/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +49 -50
- package/data-structures/Hinkal/hinkalSolanaProxySend.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaProxySend.mjs +7 -7
- package/data-structures/Hinkal/hinkalSolanaProxyShield.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaProxyShield.mjs +9 -9
- package/data-structures/Hinkal/hinkalSolanaProxySwap.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaProxySwap.mjs +8 -8
- package/data-structures/Hinkal/hinkalSolanaSwap.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaSwap.mjs +50 -51
- package/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaTransfer.mjs +45 -46
- package/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +38 -39
- package/data-structures/Hinkal/hinkalSwap.cjs +1 -1
- package/data-structures/Hinkal/hinkalSwap.mjs +18 -19
- package/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
- package/data-structures/Hinkal/hinkalTransfer.mjs +21 -22
- package/data-structures/Hinkal/hinkalWithdraw.cjs +1 -1
- package/data-structures/Hinkal/hinkalWithdraw.mjs +24 -25
- package/data-structures/Hinkal/hinkalWithdrawStuckUtxos.cjs +1 -1
- package/data-structures/Hinkal/hinkalWithdrawStuckUtxos.mjs +39 -41
- package/error-handling/error-codes.constants.cjs +1 -1
- package/error-handling/error-codes.constants.d.ts +2 -0
- package/error-handling/error-codes.constants.mjs +2 -0
- package/error-handling/get-error.message.cjs +1 -1
- package/error-handling/get-error.message.mjs +2 -1
- package/functions/index.cjs +1 -1
- package/functions/index.mjs +7 -6
- package/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
- package/functions/pre-transaction/buildCommitmentValidationData.d.ts +12 -2
- package/functions/pre-transaction/buildCommitmentValidationData.mjs +43 -36
- package/functions/pre-transaction/sendV0Transaction.cjs +1 -1
- package/functions/pre-transaction/sendV0Transaction.d.ts +2 -2
- package/functions/pre-transaction/sendV0Transaction.mjs +63 -58
- package/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
- package/functions/snarkjs/constructGeneralZkProof.d.ts +1 -0
- package/functions/snarkjs/constructGeneralZkProof.mjs +6 -5
- package/functions/snarkjs/constructSolanaZkProof.cjs +1 -1
- package/functions/snarkjs/constructSolanaZkProof.d.ts +1 -0
- package/functions/snarkjs/constructSolanaZkProof.mjs +35 -34
- package/functions/snarkjs/generateMainAndCommitmentZkProof.cjs +1 -0
- package/functions/snarkjs/generateMainAndCommitmentZkProof.d.ts +11 -0
- package/functions/snarkjs/generateMainAndCommitmentZkProof.mjs +16 -0
- package/functions/snarkjs/generateZkProof.cjs +1 -1
- package/functions/snarkjs/generateZkProof.d.ts +3 -3
- package/functions/snarkjs/generateZkProof.mjs +5 -9
- package/functions/snarkjs/generateZkProofEnclave.cjs +1 -1
- package/functions/snarkjs/generateZkProofEnclave.d.ts +2 -2
- package/functions/snarkjs/generateZkProofEnclave.mjs +8 -8
- package/functions/snarkjs/generateZkProofSelf.cjs +1 -1
- package/functions/snarkjs/generateZkProofSelf.mjs +5 -5
- package/functions/snarkjs/index.cjs +1 -1
- package/functions/snarkjs/index.d.ts +1 -0
- package/functions/snarkjs/index.mjs +1 -0
- package/functions/snarkjs/verifyCommitmentValidationData.cjs +1 -1
- package/functions/snarkjs/verifyCommitmentValidationData.mjs +5 -5
- package/functions/utils/customEnclaveFunctionsRegister.d.ts +3 -3
- package/functions/utils/index.cjs +1 -1
- package/functions/utils/index.mjs +5 -5
- package/functions/web3/oneInchAPI.cjs +1 -1
- package/functions/web3/oneInchAPI.mjs +1 -1
- package/index.cjs +1 -1
- package/index.mjs +316 -315
- package/package.json +2 -2
- package/webworker/{logError-fCJ4HXQz.js → logError-DZiJbbaT.js} +1 -1
- package/webworker/package.json +2 -2
- package/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.cjs +1 -1
- package/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.mjs +1 -1
- package/webworker/snarkjsWorkerNode.cjs +1 -1
- package/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
- package/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
- package/webworker/utxoWorkerNode.cjs +1 -1
- package/webworker/viteWorkerURL.constant.cjs +3 -3
- package/webworker/viteWorkerURL.constant.mjs +3 -3
- package/webworker/workerFactory.cjs +1 -1
- package/webworker/workerFactory.mjs +2 -2
- package/webworker/{workerProxy-BNBqYien.js → workerProxy-DQJE57Ye.js} +1 -1
- package/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
- package/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
- package/webworker/zkProofWorkerNode.cjs +1 -1
|
@@ -15,109 +15,103 @@ import { validateAndGetChainId as m } from "../../functions/utils/token-check.ut
|
|
|
15
15
|
import { constructAdminData as h } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
16
16
|
import { getFeeStructure as g } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
17
17
|
import { waitForDepositedUtxosInMerkleTree as _ } from "../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.mjs";
|
|
18
|
-
import {
|
|
19
|
-
import "../../functions/
|
|
20
|
-
import { convertEmporiumOpToCallInfo as y } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
21
|
-
import { calculateModifiedFeeStructure as b } from "../../functions/utils/fees.utils.mjs";
|
|
18
|
+
import { convertEmporiumOpToCallInfo as v } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
19
|
+
import { calculateModifiedFeeStructure as y } from "../../functions/utils/fees.utils.mjs";
|
|
22
20
|
import "../../functions/utils/index.mjs";
|
|
23
|
-
import { createLifiBridgeOps as
|
|
24
|
-
import { constructZkProof as
|
|
25
|
-
import { transactCallRelayerBatch as
|
|
26
|
-
import { safeUpdateDepositAndWithdrawStatus as
|
|
27
|
-
import { hinkalDepositOnChainUtxos as
|
|
21
|
+
import { createLifiBridgeOps as b, getAuthorizationDataIfNeeded as x } from "../../functions/private-wallet/emporium.helpers.mjs";
|
|
22
|
+
import { constructZkProof as S } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
|
|
23
|
+
import { transactCallRelayerBatch as C } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
24
|
+
import { safeUpdateDepositAndWithdrawStatus as w } from "../../API/deposit-and-withdraw-status-calls.mjs";
|
|
25
|
+
import { hinkalDepositOnChainUtxos as T } from "./hinkalDepositOnChainUtxos.mjs";
|
|
28
26
|
import "../../functions/index.mjs";
|
|
29
27
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalDepositAndBridge.ts
|
|
30
|
-
var
|
|
28
|
+
var E = async (n, o, s, d, m, g, _, v, T, E, D) => {
|
|
31
29
|
if (d.length === 0) throw Error("No recipients to bridge");
|
|
32
|
-
let
|
|
33
|
-
if (!
|
|
34
|
-
let
|
|
35
|
-
if (!
|
|
36
|
-
let
|
|
37
|
-
if (!
|
|
38
|
-
let
|
|
39
|
-
for (let t = 0; t < d.length; t +=
|
|
40
|
-
let i = d.slice(t, t +
|
|
30
|
+
let O = s.erc20TokenAddress, { contractData: k } = t[o], { emporiumAddress: A } = k;
|
|
31
|
+
if (!A) throw Error("No Emporium Address");
|
|
32
|
+
let j = l[e.Lifi][o];
|
|
33
|
+
if (!j) throw Error(`LIFI not configured for chain ${o}`);
|
|
34
|
+
let M = await n.getRandomRelay(o);
|
|
35
|
+
if (!M) throw Error(u.RELAYER_NOT_AVAILABLE);
|
|
36
|
+
let N = await n.getEthereumAddressByChain(o), P = f().toString(), F = n.generateProofRemotely ? 5 : 1, I = [];
|
|
37
|
+
for (let t = 0; t < d.length; t += F) {
|
|
38
|
+
let i = d.slice(t, t + F), l = await Promise.all(i.map(async ({ utxo: t, nativeUtxo: i, bridgeAmount: l, quote: u, temporarySubAccount: d, recipientAddress: f }) => {
|
|
41
39
|
await c.addTemporaryWalletNonce(o, g, d.index);
|
|
42
|
-
let _ = u.nativeFee > 0n && !a(
|
|
40
|
+
let _ = u.nativeFee > 0n && !a(O, r), v = [O], C = [-t.amount], w = [!1], T = new p({
|
|
43
41
|
amount: 0n,
|
|
44
|
-
erc20TokenAddress:
|
|
42
|
+
erc20TokenAddress: O,
|
|
45
43
|
nullifyingKey: n.userKeys.getShieldedPrivateKey(),
|
|
46
|
-
timeStamp:
|
|
44
|
+
timeStamp: P,
|
|
47
45
|
...t.isNewStyle ? {
|
|
48
46
|
spendingPublicKey: n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
49
47
|
isNewStyle: !0
|
|
50
48
|
} : { isNewStyle: !1 }
|
|
51
|
-
}),
|
|
49
|
+
}), D = [[t, T]], k = [[T]];
|
|
52
50
|
if (_ && i) {
|
|
53
51
|
let e = new p({
|
|
54
52
|
amount: 0n,
|
|
55
53
|
erc20TokenAddress: r,
|
|
56
54
|
nullifyingKey: n.userKeys.getShieldedPrivateKey(),
|
|
57
|
-
timeStamp:
|
|
55
|
+
timeStamp: P,
|
|
58
56
|
...i.isNewStyle ? {
|
|
59
57
|
spendingPublicKey: n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
60
58
|
isNewStyle: !0
|
|
61
59
|
} : { isNewStyle: !1 }
|
|
62
60
|
});
|
|
63
|
-
|
|
61
|
+
v.push(r), C.push(-i.amount), w.push(!1), D.push([i, e]), k.push([e]);
|
|
64
62
|
}
|
|
65
|
-
let
|
|
66
|
-
C(n.merkleTreeHinkalByChain[o], O, A, n.userKeys, e.Emporium, j, I, n.generateProofRemotely, L, N ?? r, o, T, void 0, void 0, d.privateKey),
|
|
67
|
-
S(o, d.privateKey),
|
|
68
|
-
v(o, n.userKeys, y, O)
|
|
69
|
-
]);
|
|
63
|
+
let F = b(n, o, d.ethAddress, j, O, t.amount, l, u), I = await y(o, s, l, m), L = h(E, o, v, [-t.amount], N), [{ zkCallData: R, circomData: z, dimData: B, commitmentValidationData: V }, H] = await Promise.all([S(n.merkleTreeHinkalByChain[o], D, k, n.userKeys, e.Emporium, A, F, n.generateProofRemotely, I, M ?? r, o, w, void 0, void 0, d.privateKey), x(o, d.privateKey)]);
|
|
70
64
|
return {
|
|
71
|
-
zkCallData:
|
|
72
|
-
dimData:
|
|
73
|
-
circomData:
|
|
74
|
-
commitmentValidationData:
|
|
65
|
+
zkCallData: R,
|
|
66
|
+
dimData: B,
|
|
67
|
+
circomData: z,
|
|
68
|
+
commitmentValidationData: V,
|
|
75
69
|
authorizationData: H,
|
|
76
70
|
recipientAddress: f,
|
|
77
|
-
adminData:
|
|
71
|
+
adminData: L
|
|
78
72
|
};
|
|
79
73
|
}));
|
|
80
|
-
|
|
74
|
+
I.push(...l);
|
|
81
75
|
}
|
|
82
|
-
await
|
|
76
|
+
await w({
|
|
83
77
|
id: _,
|
|
84
78
|
chainId: o,
|
|
85
79
|
hashedEthereumAddress: g,
|
|
86
80
|
phase: i.BEFORE_SCHEDULE_WITHDRAW
|
|
87
81
|
});
|
|
88
|
-
let
|
|
89
|
-
return await
|
|
82
|
+
let L = await C(o, I, g, v, T, D);
|
|
83
|
+
return await w({
|
|
90
84
|
id: _,
|
|
91
85
|
chainId: o,
|
|
92
86
|
hashedEthereumAddress: g,
|
|
93
87
|
phase: i.AFTER_SCHEDULE_WITHDRAW,
|
|
94
|
-
scheduleId:
|
|
95
|
-
}),
|
|
96
|
-
},
|
|
97
|
-
let S = i.erc20TokenAddress, C = m([i]), w =
|
|
88
|
+
scheduleId: L
|
|
89
|
+
}), L;
|
|
90
|
+
}, D = async (t, i, c, u, f, p, h, y, x = !0) => {
|
|
91
|
+
let S = i.erc20TokenAddress, C = m([i]), w = y ? s(y) : void 0, D = o(await t.getEthereumAddressByChain(C)), O = l[e.Lifi][C];
|
|
98
92
|
if (!O) throw Error("LIFI router not configured");
|
|
99
93
|
let k;
|
|
100
94
|
if (f) k = f;
|
|
101
95
|
else {
|
|
102
|
-
let r = c[0], i =
|
|
96
|
+
let r = c[0], i = b(t, C, r.temporarySubAccount.ethAddress, O, S, r.bridgeAmount, r.bridgeAmount, r.quote).map((e) => v(e, r.temporarySubAccount.ethAddress, C));
|
|
103
97
|
k = await g(C, S, [S], e.Emporium, i, n);
|
|
104
98
|
}
|
|
105
99
|
let A = {
|
|
106
100
|
feeToken: k.feeToken,
|
|
107
101
|
flatFee: 0n,
|
|
108
102
|
variableRate: 0n
|
|
109
|
-
}, j = c.reduce((e, t) => e + t.quote.nativeFee, 0n) > 0n && !a(S, r), M = c.map((e) => e.bridgeAmount), N = c.map((e) => e.recipientAddress), { userDepositedUtxos: P, statusId: F, depositTxHash: I } = await
|
|
103
|
+
}, j = c.reduce((e, t) => e + t.quote.nativeFee, 0n) > 0n && !a(S, r), M = c.map((e) => e.bridgeAmount), N = c.map((e) => e.recipientAddress), { userDepositedUtxos: P, statusId: F, depositTxHash: I } = await T(t, C, i, M, N, k, D, x), L = [];
|
|
110
104
|
if (j) {
|
|
111
105
|
let e = d(r, C);
|
|
112
106
|
if (!e) throw Error("No native token");
|
|
113
|
-
let { userDepositedUtxos: n } = await
|
|
107
|
+
let { userDepositedUtxos: n } = await T(t, C, e, c.map((e) => e.quote.nativeFee), N, A, D, x);
|
|
114
108
|
L = n;
|
|
115
109
|
}
|
|
116
|
-
return await _(t, C, [...P, ...L]), await
|
|
110
|
+
return await _(t, C, [...P, ...L]), await E(t, C, i, c.map((e, t) => ({
|
|
117
111
|
...e,
|
|
118
112
|
utxo: P[t].utxo,
|
|
119
113
|
nativeUtxo: j ? L[t]?.utxo : void 0
|
|
120
|
-
})), k,
|
|
114
|
+
})), k, D, F, u, p, h, w), I;
|
|
121
115
|
};
|
|
122
116
|
//#endregion
|
|
123
|
-
export {
|
|
117
|
+
export { D as hinkalDepositAndBridge };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const i=require(`../../functions/utils/caseInsensitive.utils.cjs`),a=require(`../../functions/utils/addresses.cjs`),o=require(`../../error-handling/error-codes.constants.cjs`),s=require(`../../functions/utils/time.utils.cjs`),c=require(`../utxo/Utxo.cjs`),l=require(`../../functions/utils/tron.utils.cjs`),u=require(`../../functions/utils/token-check.utils.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`),p=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`),m=require(`../../functions/
|
|
1
|
+
const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const i=require(`../../functions/utils/caseInsensitive.utils.cjs`),a=require(`../../functions/utils/addresses.cjs`),o=require(`../../error-handling/error-codes.constants.cjs`),s=require(`../../functions/utils/time.utils.cjs`),c=require(`../utxo/Utxo.cjs`),l=require(`../../functions/utils/tron.utils.cjs`),u=require(`../../functions/utils/token-check.utils.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`),p=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`),m=require(`../../functions/utils/fees.utils.cjs`),h=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),g=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),_=require(`../../API/deposit-and-withdraw-status-calls.cjs`),v=require(`./hinkalDepositOnChainUtxos.cjs`);require(`../../functions/index.cjs`);var y=async(e,a,u,f,p,v,y,b,x,S,C,w)=>{let T=t.isTronLike(a);if(f.length===0)throw Error(`userDepositedUtxos must not be empty`);let E=u.erc20TokenAddress,[D,O]=await Promise.all([e.getRandomRelay(a),e.getEthereumAddressByChain(a)]);if(!D)throw Error(o.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let k=s.getCurrentTimeInSeconds().toString(),A=e.generateProofRemotely&&!T?5:1,j=[],M=l.addressToHexFormat(O);for(let t=0;t<f.length;t+=A){let r=f.slice(t,t+A),o=await Promise.all(r.map(async({recipientAddress:r,utxo:o},s)=>{let f=t+s,g=l.addressToHexFormat(r),_=new c.Utxo({amount:0n,erc20TokenAddress:E,nullifyingKey:e.userKeys.getShieldedPrivateKey(),timeStamp:k,...o.isNewStyle?{spendingPublicKey:e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),y=[[i.caseInsensitiveEqual(o.erc20TokenAddress,E)?o:c.Utxo.createFrom(o,{erc20TokenAddress:E}),_]],b=[[_]],x={externalActionId:0n,externalAddress:g,externalActionMetadata:`0x00`},S=d.constructAdminData(C,a,[E],[-o.amount],M),w=await m.calculateModifiedFeeStructure(a,u,p[f],v),{zkCallData:O,circomData:A,dimData:j,commitmentValidationData:N}=await h.constructZkProof(e.merkleTreeHinkalByChain[a],y,b,e.userKeys,x.externalActionId,x.externalAddress,x.externalActionMetadata,e.generateProofRemotely,w,D??n.zeroAddress,a);return{zkCallData:O,dimData:j,circomData:A,commitmentValidationData:N,adminData:S,recipientAddress:r,tronProofSignature:await l.reorderZkCallData(T,O,j,A)}}));j.push(...o)}await _.safeUpdateDepositAndWithdrawStatus({id:b,chainId:a,hashedEthereumAddress:y,phase:r.DepositAndWithdrawPhase.BEFORE_SCHEDULE_WITHDRAW});let N=await g.transactCallRelayerBatch(a,j,y,x,S,w);return await _.safeUpdateDepositAndWithdrawStatus({id:b,chainId:a,hashedEthereumAddress:y,phase:r.DepositAndWithdrawPhase.AFTER_SCHEDULE_WITHDRAW,scheduleId:N}),N},b=async(t,n,r,i,o,s,c,d,m,h=!0)=>{let g=u.validateAndGetChainId([n]),_=m?a.hashString(m):void 0,b=n.erc20TokenAddress,x=a.hashEthereumAddress(l.addressToHexFormat(await t.getEthereumAddressByChain(g))),S=s??await f.getFeeStructure(g,b,[b],e.ExternalActionId.Transact,[],10n),{userDepositedUtxos:C,statusId:w,depositTxHash:T}=await v.hinkalDepositOnChainUtxos(t,g,n,r,i,S,x,h);return await p.waitForDepositedUtxosInMerkleTree(t,g,C),await y(t,g,n,C,r,S,x,w,o,c,d,_),T};exports.hinkalDepositAndWithdraw=b,exports.hinkalWithdrawBatch=y;
|
|
@@ -13,66 +13,64 @@ import { validateAndGetChainId as f } from "../../functions/utils/token-check.ut
|
|
|
13
13
|
import { constructAdminData as p } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
14
14
|
import { getFeeStructure as m } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
15
15
|
import { waitForDepositedUtxosInMerkleTree as h } from "../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.mjs";
|
|
16
|
-
import {
|
|
17
|
-
import "../../functions/
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { safeUpdateDepositAndWithdrawStatus as b } from "../../API/deposit-and-withdraw-status-calls.mjs";
|
|
22
|
-
import { hinkalDepositOnChainUtxos as x } from "./hinkalDepositOnChainUtxos.mjs";
|
|
16
|
+
import { calculateModifiedFeeStructure as g } from "../../functions/utils/fees.utils.mjs";
|
|
17
|
+
import { constructZkProof as _ } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
|
|
18
|
+
import { transactCallRelayerBatch as v } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
19
|
+
import { safeUpdateDepositAndWithdrawStatus as y } from "../../API/deposit-and-withdraw-status-calls.mjs";
|
|
20
|
+
import { hinkalDepositOnChainUtxos as b } from "./hinkalDepositOnChainUtxos.mjs";
|
|
23
21
|
import "../../functions/index.mjs";
|
|
24
22
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.ts
|
|
25
|
-
var
|
|
26
|
-
let
|
|
23
|
+
var x = async (e, a, o, f, m, h, b, x, S, C, w, T) => {
|
|
24
|
+
let E = t(a);
|
|
27
25
|
if (f.length === 0) throw Error("userDepositedUtxos must not be empty");
|
|
28
|
-
let
|
|
29
|
-
if (!
|
|
30
|
-
let
|
|
31
|
-
for (let t = 0; t < f.length; t +=
|
|
32
|
-
let r = f.slice(t, t +
|
|
33
|
-
let f = t + c,
|
|
26
|
+
let D = o.erc20TokenAddress, [O, k] = await Promise.all([e.getRandomRelay(a), e.getEthereumAddressByChain(a)]);
|
|
27
|
+
if (!O) throw Error(s.RELAYER_NOT_AVAILABLE);
|
|
28
|
+
let A = c().toString(), j = e.generateProofRemotely && !E ? 5 : 1, M = [], N = u(k);
|
|
29
|
+
for (let t = 0; t < f.length; t += j) {
|
|
30
|
+
let r = f.slice(t, t + j), s = await Promise.all(r.map(async ({ recipientAddress: r, utxo: s }, c) => {
|
|
31
|
+
let f = t + c, v = u(r), y = new l({
|
|
34
32
|
amount: 0n,
|
|
35
|
-
erc20TokenAddress:
|
|
33
|
+
erc20TokenAddress: D,
|
|
36
34
|
nullifyingKey: e.userKeys.getShieldedPrivateKey(),
|
|
37
|
-
timeStamp:
|
|
35
|
+
timeStamp: A,
|
|
38
36
|
...s.isNewStyle ? {
|
|
39
37
|
spendingPublicKey: e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
40
38
|
isNewStyle: !0
|
|
41
39
|
} : { isNewStyle: !1 }
|
|
42
|
-
}),
|
|
40
|
+
}), b = [[i(s.erc20TokenAddress, D) ? s : l.createFrom(s, { erc20TokenAddress: D }), y]], x = [[y]], S = {
|
|
43
41
|
externalActionId: 0n,
|
|
44
|
-
externalAddress:
|
|
42
|
+
externalAddress: v,
|
|
45
43
|
externalActionMetadata: "0x00"
|
|
46
|
-
},
|
|
44
|
+
}, C = p(w, a, [D], [-s.amount], N), T = await g(a, o, m[f], h), { zkCallData: k, circomData: j, dimData: M, commitmentValidationData: P } = await _(e.merkleTreeHinkalByChain[a], b, x, e.userKeys, S.externalActionId, S.externalAddress, S.externalActionMetadata, e.generateProofRemotely, T, O ?? n, a);
|
|
47
45
|
return {
|
|
48
|
-
zkCallData:
|
|
49
|
-
dimData:
|
|
50
|
-
circomData:
|
|
51
|
-
commitmentValidationData:
|
|
52
|
-
adminData:
|
|
46
|
+
zkCallData: k,
|
|
47
|
+
dimData: M,
|
|
48
|
+
circomData: j,
|
|
49
|
+
commitmentValidationData: P,
|
|
50
|
+
adminData: C,
|
|
53
51
|
recipientAddress: r,
|
|
54
|
-
tronProofSignature: await d(
|
|
52
|
+
tronProofSignature: await d(E, k, M, j)
|
|
55
53
|
};
|
|
56
54
|
}));
|
|
57
|
-
|
|
55
|
+
M.push(...s);
|
|
58
56
|
}
|
|
59
|
-
await
|
|
60
|
-
id:
|
|
57
|
+
await y({
|
|
58
|
+
id: x,
|
|
61
59
|
chainId: a,
|
|
62
|
-
hashedEthereumAddress:
|
|
60
|
+
hashedEthereumAddress: b,
|
|
63
61
|
phase: r.BEFORE_SCHEDULE_WITHDRAW
|
|
64
62
|
});
|
|
65
|
-
let
|
|
66
|
-
return await
|
|
67
|
-
id:
|
|
63
|
+
let P = await v(a, M, b, S, C, T);
|
|
64
|
+
return await y({
|
|
65
|
+
id: x,
|
|
68
66
|
chainId: a,
|
|
69
|
-
hashedEthereumAddress:
|
|
67
|
+
hashedEthereumAddress: b,
|
|
70
68
|
phase: r.AFTER_SCHEDULE_WITHDRAW,
|
|
71
|
-
scheduleId:
|
|
72
|
-
}),
|
|
73
|
-
},
|
|
74
|
-
let _ = f([n]), v = p ? o(p) : void 0, y = n.erc20TokenAddress,
|
|
75
|
-
return await h(t, _, w), await
|
|
69
|
+
scheduleId: P
|
|
70
|
+
}), P;
|
|
71
|
+
}, S = async (t, n, r, i, s, c, l, d, p, g = !0) => {
|
|
72
|
+
let _ = f([n]), v = p ? o(p) : void 0, y = n.erc20TokenAddress, S = a(u(await t.getEthereumAddressByChain(_))), C = c ?? await m(_, y, [y], e.Transact, [], 10n), { userDepositedUtxos: w, statusId: T, depositTxHash: E } = await b(t, _, n, r, i, C, S, g);
|
|
73
|
+
return await h(t, _, w), await x(t, _, n, w, r, C, S, T, s, l, d, v), E;
|
|
76
74
|
};
|
|
77
75
|
//#endregion
|
|
78
|
-
export {
|
|
76
|
+
export { S as hinkalDepositAndWithdraw, x as hinkalWithdrawBatch };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../types/admin.types.cjs`),r=require(`../../functions/utils/caseInsensitive.utils.cjs`),i=require(`../../functions/utils/addresses.cjs`),a=require(`../../error-handling/error-codes.constants.cjs`),o=require(`../../functions/utils/time.utils.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`)
|
|
1
|
+
const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../types/admin.types.cjs`),r=require(`../../functions/utils/caseInsensitive.utils.cjs`),i=require(`../../functions/utils/addresses.cjs`),a=require(`../../error-handling/error-codes.constants.cjs`),o=require(`../../functions/utils/time.utils.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,r,i)=>{let a=[...await s.addPaddingToUtxos(e,t,n,r)],l=[],u=o.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=c.outputUtxoProcessing(e.userKeys,a[t],r[t],u);l.push(n)}return i&&d.recipientUtxoProcessing(i,l,r,u),{inputUtxosArray:a,outputUtxosArray:l}},S=async(o,s,c,d,S,C,w,T,E,D,O,k=!1,A,j,M)=>{if(M&&!i.isValidPrivateAddress(M.recipientInfo))throw Error(a.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 o.getEthereumAddressByChain(s),F=T?u.AccountActions.getAddressFromSubAccount(s,T):void 0,{contractData:I}=t.networkRegistry[s],{emporiumAddress:L}=I;if(!L)throw Error(`No Emporium Address Provided`);let R=D??await f.getFeeStructure(s,E,N,e.ExternalActionId.Emporium,C.map(e=>m.convertEmporiumOpToCallInfo(e,F??``,s)));for(F?await y.mergeWithFeeStructureEmporium(o,s,F,C,N,d,R,w.find(e=>r.caseInsensitiveEqual(e.token.erc20TokenAddress,R.feeToken))?.amount??0n):v.mergeWithFeeStructure(s,N,d,R);S.length<N.length;)S.push(!1);let[{inputUtxosArray:z,outputUtxosArray:B},V]=await Promise.all([x(o,s,N,d,M),O??await o.getRandomRelay(s,!0)]);if(!V)throw Error(a.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(o.merkleTreeHinkalByChain[s],z,B,o.userKeys,e.ExternalActionId.Emporium,L,C,o.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===n.AdminTransactionType.PublicSwap?w.map(({token:e})=>e):void 0));return k&&T&&b.handleAutoDepositBack(o,s,F,T,R.feeToken,A,w,W),J};exports.hinkalPrivateWallet=S;
|
|
@@ -12,18 +12,17 @@ import { constructAdminData as l } from "../../functions/pre-transaction/constru
|
|
|
12
12
|
import { AccountActions as u } from "../AccountActions/AccountActions.mjs";
|
|
13
13
|
import { recipientUtxoProcessing as d } from "../../functions/pre-transaction/recipientUtxoProcessing.mjs";
|
|
14
14
|
import { getFeeStructure as f } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
15
|
-
import { buildCommitmentValidationData as p } from "../../functions/pre-transaction/buildCommitmentValidationData.mjs";
|
|
16
15
|
import "../../functions/pre-transaction/index.mjs";
|
|
17
|
-
import { uniswapWorkaround as
|
|
18
|
-
import { convertEmporiumOpToCallInfo as
|
|
19
|
-
import { getAuthorizationDataIfNeeded as
|
|
20
|
-
import { constructZkProof as
|
|
21
|
-
import { transactCallRelayer as
|
|
22
|
-
import { mergeWithFeeStructure as
|
|
23
|
-
import { mergeWithFeeStructureEmporium as
|
|
24
|
-
import { handleAutoDepositBack as
|
|
16
|
+
import { uniswapWorkaround as p } from "../../functions/utils/involves-permit2-op.mjs";
|
|
17
|
+
import { convertEmporiumOpToCallInfo as m } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
18
|
+
import { getAuthorizationDataIfNeeded as h } from "../../functions/private-wallet/emporium.helpers.mjs";
|
|
19
|
+
import { constructZkProof as g } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
|
|
20
|
+
import { transactCallRelayer as _ } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
21
|
+
import { mergeWithFeeStructure as v } from "../../functions/pre-transaction/merge-with-fee-structure.mjs";
|
|
22
|
+
import { mergeWithFeeStructureEmporium as y } from "../../functions/pre-transaction/merge-with-fee-structure-emporium.mjs";
|
|
23
|
+
import { handleAutoDepositBack as b } from "./handleAutoDepositBack.mjs";
|
|
25
24
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalPrivateWallet.ts
|
|
26
|
-
var
|
|
25
|
+
var x = async (e, t, n, r, i) => {
|
|
27
26
|
let a = [...await s(e, t, n, r)], l = [], u = o().toString();
|
|
28
27
|
for (let t = 0; t < n.length; t += 1) {
|
|
29
28
|
let { outputUtxos: n } = c(e.userKeys, a[t], r[t], u);
|
|
@@ -33,21 +32,17 @@ var S = async (e, t, n, r, i) => {
|
|
|
33
32
|
inputUtxosArray: a,
|
|
34
33
|
outputUtxosArray: l
|
|
35
34
|
};
|
|
36
|
-
},
|
|
37
|
-
if (
|
|
38
|
-
if (
|
|
39
|
-
let
|
|
40
|
-
if (!
|
|
41
|
-
let
|
|
42
|
-
for (
|
|
43
|
-
let [{ inputUtxosArray:
|
|
44
|
-
if (!
|
|
45
|
-
let
|
|
46
|
-
|
|
47
|
-
g(s, U),
|
|
48
|
-
p(s, o.userKeys, P, B)
|
|
49
|
-
]), Y = await v(s, W, K, G, J, m(w), q, l(M, s, T.map((e) => e.token.erc20TokenAddress), T.map((e) => e.amount), F, M === n.PublicSwap ? T.map(({ token: e }) => e) : void 0));
|
|
50
|
-
return A && E && x(o, s, I, E, z.feeToken, j, T, G), Y;
|
|
35
|
+
}, S = async (o, s, c, d, S, C, w, T, E, D, O, k = !1, A, j, M) => {
|
|
36
|
+
if (M && !i(M.recipientInfo)) throw Error(a.RECIPIENT_FORMAT_INCORRECT);
|
|
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 o.getEthereumAddressByChain(s), F = T ? u.getAddressFromSubAccount(s, T) : void 0, { contractData: I } = t[s], { emporiumAddress: L } = I;
|
|
39
|
+
if (!L) throw Error("No Emporium Address Provided");
|
|
40
|
+
let R = D ?? await f(s, E, N, e.Emporium, C.map((e) => m(e, F ?? "", s)));
|
|
41
|
+
for (F ? await y(o, s, F, C, N, d, R, w.find((e) => r(e.token.erc20TokenAddress, R.feeToken))?.amount ?? 0n) : v(s, N, d, R); S.length < N.length;) S.push(!1);
|
|
42
|
+
let [{ inputUtxosArray: z, outputUtxosArray: B }, V] = await Promise.all([x(o, s, N, d, M), O ?? await o.getRandomRelay(s, !0)]);
|
|
43
|
+
if (!V) throw Error(a.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(o.merkleTreeHinkalByChain[s], z, B, o.userKeys, e.Emporium, L, C, o.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 === n.PublicSwap ? w.map(({ token: e }) => e) : void 0));
|
|
45
|
+
return k && T && b(o, s, F, T, R.feeToken, A, w, W), J;
|
|
51
46
|
};
|
|
52
47
|
//#endregion
|
|
53
|
-
export {
|
|
48
|
+
export { S as hinkalPrivateWallet };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`);require(`../../types/index.cjs`);const r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../crypto-keys/keys.cjs`),o=require(`../../functions/utils/time.utils.cjs`),s=require(`../utxo/Utxo.cjs`),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/
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`);require(`../../types/index.cjs`);const r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../crypto-keys/keys.cjs`),o=require(`../../functions/utils/time.utils.cjs`),s=require(`../utxo/Utxo.cjs`),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 a.UserKeys(v):new a.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}=t.networkRegistry[y].contractData;if(!C)throw Error(`missing data`);let w=s.Utxo.createFrom(g,{nullifyingKey:S}),T=_??await u.getFeeStructure(y,b,[b],e.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:n.HINKAL_PRIVATE_SEND_VARIABLE_RATE;if(w.amount<=T.flatFee)throw Error(r.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);let D=w.amount-T.flatFee,O=D*E/10000n,k=D-O;if(k<=0n)throw Error(r.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=o.getCurrentTimeInSeconds().toString(),I=new s.Utxo({amount:0n,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,nullifyingKey:x.getShieldedPrivateKey(),...w.isNewStyle?{spendingPublicKey:x.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),L=new s.Utxo({amount:0n,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,nullifyingKey:x.getShieldedPrivateKey(),timeStamp:F,spendingPublicKey:x.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}),R=new s.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(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H=a.UserKeys.findCorrectRandomization(i.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,n.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;
|
|
@@ -10,84 +10,82 @@ import { Utxo as c } from "../utxo/Utxo.mjs";
|
|
|
10
10
|
import { validateAndGetChainId as l } from "../../functions/utils/token-check.utils.mjs";
|
|
11
11
|
import { calcEncryptedOutputs as u } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
12
12
|
import { getFeeStructure as d } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
13
|
-
import {
|
|
14
|
-
import "../../functions/
|
|
15
|
-
import {
|
|
16
|
-
import { solanaTransactCallRelayer as m } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
17
|
-
import { ethers as h } from "ethers";
|
|
13
|
+
import { constructSolanaZkProof as f } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
|
|
14
|
+
import { solanaTransactCallRelayer as p } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
15
|
+
import { ethers as m } from "ethers";
|
|
18
16
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.ts
|
|
19
|
-
var
|
|
20
|
-
let
|
|
21
|
-
if (
|
|
22
|
-
let
|
|
23
|
-
if (!
|
|
24
|
-
let
|
|
25
|
-
if (
|
|
26
|
-
let { originalDeployer:
|
|
27
|
-
if (!
|
|
28
|
-
let
|
|
29
|
-
mintTo:
|
|
17
|
+
var h = async (h, g, _, v, y) => {
|
|
18
|
+
let b = l([g]), x = g.erc20TokenAddress;
|
|
19
|
+
if (_.getTokenAddress(b) !== x) throw Error("Off-chain UTXO token mismatch");
|
|
20
|
+
let S = y ? new o(y) : new o(_.nullifyingKey, _.nullifyingKey);
|
|
21
|
+
if (!_.nullifyingKey && !y) throw Error("Claimable UTXO nullifyingKey is missing");
|
|
22
|
+
let C = S.getShieldedPrivateKey();
|
|
23
|
+
if (_.nullifyingKey && _.nullifyingKey !== C) throw Error("Claimable UTXO key mismatch");
|
|
24
|
+
let { originalDeployer: w } = t[b].contractData;
|
|
25
|
+
if (!w) throw Error("missing data");
|
|
26
|
+
let T = c.createFrom(_, { nullifyingKey: C }), E = v ?? await d(b, x, [x], e.Transact, void 0, void 0, {
|
|
27
|
+
mintTo: x,
|
|
30
28
|
nullifierCount: 1
|
|
31
29
|
});
|
|
32
|
-
if (
|
|
33
|
-
let
|
|
34
|
-
if (
|
|
35
|
-
let
|
|
36
|
-
if (
|
|
37
|
-
let
|
|
38
|
-
if (!
|
|
39
|
-
let
|
|
30
|
+
if (E.feeToken !== x) throw Error("Claim fee token mismatch: fee must be paid from claimed UTXO token");
|
|
31
|
+
let D = E.variableRate > 0n ? E.variableRate : n;
|
|
32
|
+
if (T.amount <= E.flatFee) throw Error(i.INSUFFICIENT_FUNDS_TO_TRANSACT);
|
|
33
|
+
let O = T.amount - E.flatFee, k = O * D / 10000n, A = O - k;
|
|
34
|
+
if (A <= 0n) throw Error(i.RECIPIENT_AMOUNT_INVALID);
|
|
35
|
+
let j = E.flatFee + k, [M, N, P, , F] = h.getRecipientInfo().split(",");
|
|
36
|
+
if (!N || !P || !M || !F) throw Error("Invalid recipient info");
|
|
37
|
+
let I = s().toString(), L = new c({
|
|
40
38
|
amount: 0n,
|
|
41
|
-
erc20TokenAddress:
|
|
42
|
-
mintAddress:
|
|
43
|
-
nullifyingKey:
|
|
44
|
-
...
|
|
45
|
-
spendingPublicKey:
|
|
39
|
+
erc20TokenAddress: T.erc20TokenAddress,
|
|
40
|
+
mintAddress: T.mintAddress,
|
|
41
|
+
nullifyingKey: S.getShieldedPrivateKey(),
|
|
42
|
+
...T.isNewStyle ? {
|
|
43
|
+
spendingPublicKey: S.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
46
44
|
isNewStyle: !0
|
|
47
45
|
} : { isNewStyle: !1 }
|
|
48
|
-
}),
|
|
46
|
+
}), R = new c({
|
|
49
47
|
amount: 0n,
|
|
50
|
-
erc20TokenAddress:
|
|
51
|
-
mintAddress:
|
|
52
|
-
nullifyingKey:
|
|
53
|
-
timeStamp:
|
|
54
|
-
spendingPublicKey:
|
|
48
|
+
erc20TokenAddress: T.erc20TokenAddress,
|
|
49
|
+
mintAddress: T.mintAddress,
|
|
50
|
+
nullifyingKey: S.getShieldedPrivateKey(),
|
|
51
|
+
timeStamp: I,
|
|
52
|
+
spendingPublicKey: S.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
55
53
|
isNewStyle: !0
|
|
56
|
-
}),
|
|
57
|
-
amount:
|
|
58
|
-
erc20TokenAddress:
|
|
59
|
-
mintAddress:
|
|
60
|
-
timeStamp:
|
|
61
|
-
H0: [BigInt(
|
|
62
|
-
stealthAddress:
|
|
63
|
-
encryptionKey:
|
|
54
|
+
}), z = new c({
|
|
55
|
+
amount: A,
|
|
56
|
+
erc20TokenAddress: T.erc20TokenAddress,
|
|
57
|
+
mintAddress: T.mintAddress,
|
|
58
|
+
timeStamp: I,
|
|
59
|
+
H0: [BigInt(N), BigInt(P)],
|
|
60
|
+
stealthAddress: M,
|
|
61
|
+
encryptionKey: F,
|
|
64
62
|
isNewStyle: !0
|
|
65
|
-
}),
|
|
66
|
-
if (!
|
|
67
|
-
let
|
|
63
|
+
}), B = [T, L], V = [R, z], H = await h.getRandomRelay(b, !0);
|
|
64
|
+
if (!H) throw Error(i.RELAYER_NOT_AVAILABLE);
|
|
65
|
+
let U = o.findCorrectRandomization(a(31), S.getShieldedPrivateKey()), W = {
|
|
68
66
|
tokenNumber: 1,
|
|
69
|
-
nullifierAmount:
|
|
70
|
-
outputAmount:
|
|
71
|
-
},
|
|
72
|
-
recipient:
|
|
73
|
-
mint:
|
|
67
|
+
nullifierAmount: B.length,
|
|
68
|
+
outputAmount: V.length
|
|
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, r, H, W, G, b), Z = {
|
|
70
|
+
recipient: H,
|
|
71
|
+
mint: x === "11111111111111111111111111111111" ? void 0 : x
|
|
74
72
|
};
|
|
75
|
-
return
|
|
76
|
-
chainId:
|
|
77
|
-
relayAddress:
|
|
73
|
+
return p({
|
|
74
|
+
chainId: b,
|
|
75
|
+
relayAddress: H,
|
|
78
76
|
functionName: "transfer",
|
|
79
77
|
args: {
|
|
80
|
-
proofAArr:
|
|
81
|
-
proofBArr:
|
|
82
|
-
proofCArr:
|
|
83
|
-
publicInputsArr:
|
|
84
|
-
encryptedOutputs:
|
|
85
|
-
relayerFee:
|
|
86
|
-
dimensions:
|
|
78
|
+
proofAArr: K,
|
|
79
|
+
proofBArr: q,
|
|
80
|
+
proofCArr: J,
|
|
81
|
+
publicInputsArr: Y,
|
|
82
|
+
encryptedOutputs: G,
|
|
83
|
+
relayerFee: j.toString(),
|
|
84
|
+
dimensions: W
|
|
87
85
|
},
|
|
88
|
-
accounts:
|
|
89
|
-
commitmentValidationData:
|
|
86
|
+
accounts: Z,
|
|
87
|
+
commitmentValidationData: X
|
|
90
88
|
});
|
|
91
89
|
};
|
|
92
90
|
//#endregion
|
|
93
|
-
export {
|
|
91
|
+
export { h as hinkalSolanaClaimUtxo };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const i=require(`../../functions/utils/addresses.cjs`),a=require(`../../error-handling/error-codes.constants.cjs`),o=require(`../../functions/web3/etherFunctions.cjs`),s=require(`../crypto-keys/keys.cjs`),c=require(`../../functions/utils/time.utils.cjs`),l=require(`../utxo/Utxo.cjs`),u=require(`../../functions/utils/solanaMint.utils.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`)
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const i=require(`../../functions/utils/addresses.cjs`),a=require(`../../error-handling/error-codes.constants.cjs`),o=require(`../../functions/web3/etherFunctions.cjs`),s=require(`../crypto-keys/keys.cjs`),c=require(`../../functions/utils/time.utils.cjs`),l=require(`../utxo/Utxo.cjs`),u=require(`../../functions/utils/solanaMint.utils.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=(e,r,i,a)=>{let{hinkalIdl:c,hinkalAddress:l,originalDeployer:d}=t.networkRegistry[r].contractData;if(!c)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let m=e.userKeys.getShieldedPrivateKey(),h=e.getSolanaProgram(c),g=e.getSolanaPublicKey(),_=new w.PublicKey(d),v=new w.PublicKey(l),{mintPublicKey:y}=u.formatMintAddress(i.erc20TokenAddress),b=y.toString(),x=p.getStorageAccountPublicKey(v,_),S=p.getStorageVaultPublicKey(v,_),C=p.getMerkleAccountPublicKey(v,_),T=a.map(()=>p.buildAnchorStealthAddressStructure(f.calcStealthAddressStructure(s.UserKeys.findCorrectRandomization(o.randomBigInt(31),m),m,e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint))),E=b===n.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:E?null:y,atasValue:E?null:void 0,storageAccount:x,storageVault:S,merkleAccount:C,amounts:a,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,i,a,o,s)=>{let c=i.map(e=>e+y.calculateTotalFee(e,o)),l=E(e,t,n,c),d=(await S.updateDepositAndWithdrawStatus({chainId:t,hashedEthereumAddress:s,phase:r.DepositAndWithdrawPhase.BEFORE_DEPOSIT})).id??void 0,f=await D(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 h.fetchSolanaTransaction(l.program.provider.connection,f,`finalized`);if(!m)throw Error(`Transaction missing`);await S.safeUpdateDepositAndWithdrawStatus({id:d,chainId:t,hashedEthereumAddress:s,phase:r.DepositAndWithdrawPhase.AFTER_DEPOSIT,depositTxHash:f});let{compressedAddress:g}=u.formatMintAddress(n.erc20TokenAddress),_=v.getOnChainUtxosFromReceiptSolana(m,l.program,e.userKeys,g),b=[],x=[..._];return a.forEach((e,t)=>{let n=c[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(e,i,d,p,h,g,_,v,w,T,E,D)=>{let O=d.erc20TokenAddress;if(p.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:k}=t.networkRegistry[i].contractData;if(!k)throw Error(`missing data`);let A=await e.getRandomRelay(i,!0);if(!A)throw Error(a.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let j=c.getCurrentTimeInSeconds().toString(),M=e.generateProofRemotely?5:1,N=[];for(let t=0;t<p.length;t+=M){let r=p.slice(t,t+M),a=await Promise.all(r.map(async({recipientAddress:t,utxo:r},a)=>{let{compressedAddress:c}=u.formatMintAddress(n.solanaNativeAddress),p=new l.Utxo({amount:0n,mintAddress:O,erc20TokenAddress:c,nullifyingKey:e.userKeys.getShieldedPrivateKey(),timeStamp:j,...r.isNewStyle?{spendingPublicKey:e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),g=[r,p],v=[p],x=s.UserKeys.findCorrectRandomization(o.randomBigInt(31),e.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(i,d,_[a],h),k=m.constructAdminData(E,i,[O],[_[a]],await e.getEthereumAddress()),{proofAArr:M,proofBArr:N,proofCArr:P,publicInputsArr:F,commitmentValidationData:I}=await b.constructSolanaZkProof(e.generateProofRemotely,e.merkleTreeHinkalByChain[i],e.userKeys,[O],[g],[v],x,D.flatFee,D.variableRate,t,A,S,[T],i),L={recipient:t,mint:O===`11111111111111111111111111111111`?void 0:O};return{relayAddress:A,functionName:`transact`,chainId:i,recipientAmount:_[a].toString(),args:{proofAArr:M,proofBArr:N,proofCArr:P,publicInputsArr:F,encryptedOutputs:[T],relayerFee:D.flatFee.toString(),dimensions:S},accounts:L,adminData:k,commitmentValidationData:I}}));N.push(...a)}await S.safeUpdateDepositAndWithdrawStatus({id:v,chainId:i,hashedEthereumAddress:g,phase:r.DepositAndWithdrawPhase.BEFORE_SCHEDULE_WITHDRAW});let P=await x.solanaTransactCallRelayerBatch(i,N,g,w,T,D);return await S.safeUpdateDepositAndWithdrawStatus({id:v,chainId:i,hashedEthereumAddress:g,phase:r.DepositAndWithdrawPhase.AFTER_SCHEDULE_WITHDRAW,scheduleId:P}),P},A=async(t,n,r,a,o,s,c,l,u)=>{let f=d.validateAndGetChainId([n]),p=n.erc20TokenAddress,m=i.hashEthereumAddress(await t.getEthereumAddressByChain(f)),h=u?i.hashString(u):void 0,v=s??await g.getFeeStructure(f,p,[p],e.ExternalActionId.Transact,[],5n),{userDepositedUtxos:y,depositTxHash:b,statusId:x}=await O(t,f,n,r,a,v,m);return await _.waitForDepositedUtxosInMerkleTree(t,f,y),await k(t,f,n,y,v,m,r,x,o,c,l,h),b};exports.buildMultiPaymentDepositBuilder=D,exports.buildMultiPaymentDepositSetup=E,exports.hinkalSolanaDepositAndWithdraw=A,exports.hinkalSolanaWithdrawBatch=k;
|