@hinkal/common 0.1.33 → 0.1.35
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/chains.constants.cjs +1 -1
- package/constants/chains.constants.mjs +29 -29
- package/constants/fees.constants.cjs +1 -1
- package/constants/fees.constants.mjs +22 -22
- package/data-structures/Hinkal/Hinkal.cjs +1 -1
- package/data-structures/Hinkal/Hinkal.d.ts +1 -0
- package/data-structures/Hinkal/Hinkal.mjs +13 -10
- package/data-structures/Hinkal/IHinkal.d.ts +2 -1
- package/data-structures/Hinkal/hinkalActionBeefy.cjs +1 -1
- package/data-structures/Hinkal/hinkalActionBeefy.mjs +18 -20
- package/data-structures/Hinkal/hinkalActionConvex.cjs +1 -1
- package/data-structures/Hinkal/hinkalActionConvex.mjs +18 -21
- package/data-structures/Hinkal/hinkalActionLidoEth.cjs +1 -1
- package/data-structures/Hinkal/hinkalActionLidoEth.mjs +31 -31
- package/data-structures/Hinkal/hinkalActionPendle.cjs +1 -1
- package/data-structures/Hinkal/hinkalActionPendle.mjs +77 -80
- package/data-structures/Hinkal/hinkalActionPendleLP.cjs +1 -1
- package/data-structures/Hinkal/hinkalActionPendleLP.mjs +34 -34
- package/data-structures/Hinkal/hinkalActionStake.cjs +1 -1
- package/data-structures/Hinkal/hinkalActionStake.mjs +48 -52
- package/data-structures/Hinkal/hinkalActionVolatile.cjs +1 -1
- package/data-structures/Hinkal/hinkalActionVolatile.mjs +38 -44
- package/data-structures/Hinkal/hinkalDeposit.cjs +1 -1
- package/data-structures/Hinkal/hinkalDeposit.mjs +27 -28
- package/data-structures/event-service/AbstractCommitmentsSnapshotService.cjs +1 -4
- package/data-structures/event-service/AbstractCommitmentsSnapshotService.mjs +11 -16
- package/data-structures/transactions-manager/TransactionsManager.cjs +1 -1
- package/data-structures/transactions-manager/TransactionsManager.mjs +66 -74
- package/data-structures/transactions-manager/history/getVolatileData.cjs +1 -1
- package/data-structures/transactions-manager/history/getVolatileData.mjs +13 -13
- package/data-structures/volatile-helper/VolatileHelper.cjs +1 -1
- package/data-structures/volatile-helper/VolatileHelper.mjs +60 -60
- package/functions/pre-transaction/getFlatFees.cjs +1 -1
- package/functions/pre-transaction/getFlatFees.mjs +42 -42
- package/functions/pre-transaction/process-gas-estimates.cjs +1 -1
- package/functions/pre-transaction/process-gas-estimates.mjs +17 -26
- package/functions/protocols/pendle.helpers.cjs +1 -1
- package/functions/protocols/pendle.helpers.mjs +27 -27
- package/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
- package/functions/snarkjs/constructGeneralZkProof.mjs +35 -37
- package/functions/utils/cacheFunctions.cjs +1 -1
- package/functions/utils/cacheFunctions.mjs +27 -30
- package/functions/web3/events/getShieldedBalance.cjs +2 -2
- package/functions/web3/events/getShieldedBalance.mjs +25 -25
- package/functions/web3/functionCalls/transactCallDirect.cjs +1 -1
- package/functions/web3/functionCalls/transactCallDirect.mjs +15 -15
- package/functions/web3/runContractFunction.cjs +1 -1
- package/functions/web3/runContractFunction.mjs +37 -37
- package/functions/web3/uniswapAPI.cjs +1 -1
- package/functions/web3/uniswapAPI.mjs +28 -28
- package/package.json +1 -1
- package/types/relayer.types.d.ts +22 -0
- package/webworker/snarkjsWorker/snarkjsWorkerLauncher.cjs +1 -1
- package/webworker/snarkjsWorker/snarkjsWorkerLauncher.mjs +1 -1
- package/webworker/snarkjsWorker/snarkjsWorkerLogic.cjs +1 -1
- package/webworker/snarkjsWorker/snarkjsWorkerLogic.mjs +16 -17
|
@@ -1,122 +1,118 @@
|
|
|
1
|
-
import { ownerPublicKey as
|
|
2
|
-
import { encryptStake as T, createStakeCommitment as
|
|
3
|
-
import { getERC20Token as
|
|
4
|
-
import { randomBigInt as
|
|
5
|
-
import { outputUtxoProcessing as
|
|
6
|
-
import { constructZkProof as
|
|
7
|
-
import { addPaddingToUtxos as
|
|
8
|
-
import { Utxo as
|
|
1
|
+
import { ownerPublicKey as v, zeroAddress as h } from "../../constants/protocol.constants.mjs";
|
|
2
|
+
import { encryptStake as T, createStakeCommitment as B, encodeHStakeMetadata as O } from "../../functions/staking/index.mjs";
|
|
3
|
+
import { getERC20Token as b, getHToken as z } from "../../functions/utils/erc20tokenFunctions.mjs";
|
|
4
|
+
import { randomBigInt as j } from "../../functions/web3/etherFunctions.mjs";
|
|
5
|
+
import { outputUtxoProcessing as M } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
|
|
6
|
+
import { constructZkProof as N } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
|
|
7
|
+
import { addPaddingToUtxos as Z } from "../../functions/web3/events/getShieldedBalance.mjs";
|
|
8
|
+
import { Utxo as u } from "../utxo/Utxo.mjs";
|
|
9
9
|
import "../../types/circom-data.types.mjs";
|
|
10
10
|
import { ContractType as k } from "../../types/ethereum-network.types.mjs";
|
|
11
|
-
import { ExternalActionId as
|
|
11
|
+
import { ExternalActionId as q } from "../../types/external-action.types.mjs";
|
|
12
12
|
import "../../types/transactions.types.mjs";
|
|
13
13
|
import "../../types/curve.types.mjs";
|
|
14
|
-
import { HinkalStakeMode as
|
|
14
|
+
import { HinkalStakeMode as y } from "../../types/hinkal.stake.types.mjs";
|
|
15
15
|
import "ethers";
|
|
16
|
-
import { UserKeys as
|
|
16
|
+
import { UserKeys as G } from "../crypto-keys/keys.mjs";
|
|
17
17
|
import "../crypto-keys/encryptDecryptUtxo.mjs";
|
|
18
18
|
import { transactCallDirect as w } from "../../functions/web3/functionCalls/transactCallDirect.mjs";
|
|
19
|
-
const
|
|
20
|
-
const A = await t.getEthereumAddress(),
|
|
21
|
-
if (!
|
|
19
|
+
const pt = async (t, g, e, a, s) => {
|
|
20
|
+
const A = await t.getEthereumAddress(), c = b(g[0], t.getCurrentChainId());
|
|
21
|
+
if (!c)
|
|
22
22
|
throw Error("Deposit Action: No Token Found");
|
|
23
|
-
const m = a ===
|
|
24
|
-
|
|
25
|
-
const { erc20TokenAddress: E } = s, r = [
|
|
26
|
-
...await q(
|
|
23
|
+
const m = a === y.Stake, n = a === y.Unstake, { erc20TokenAddress: U } = c, r = [
|
|
24
|
+
...await Z(
|
|
27
25
|
t,
|
|
28
|
-
|
|
26
|
+
g,
|
|
29
27
|
e,
|
|
30
28
|
2,
|
|
31
29
|
void 0,
|
|
32
|
-
a !==
|
|
30
|
+
a !== y.Deposit
|
|
33
31
|
)
|
|
34
32
|
];
|
|
35
33
|
if (m || n) {
|
|
36
|
-
r[0][0] =
|
|
34
|
+
r[0][0] = u.createFrom(r[0][0], {
|
|
37
35
|
amount: e[0] * (m ? 1n : -1n),
|
|
38
36
|
isStakeOrUnstakeInput: !0
|
|
39
37
|
});
|
|
40
38
|
for (let o = 0; o < r.length; o += 1)
|
|
41
39
|
for (let i = 0; i < r[o].length; i += 1)
|
|
42
|
-
o === 0 && i === 0 || (r[o][i] =
|
|
40
|
+
o === 0 && i === 0 || (r[o][i] = u.createFrom(r[o][i], { amount: 0n }));
|
|
43
41
|
}
|
|
44
|
-
const { outputUtxos:
|
|
45
|
-
|
|
46
|
-
(o) =>
|
|
42
|
+
const { outputUtxos: E } = M(t.userKeys, r[0], e[0]), p = [
|
|
43
|
+
E.map(
|
|
44
|
+
(o) => u.createFrom(o, {
|
|
47
45
|
isStake: m,
|
|
48
46
|
isUnstakeOutput: n
|
|
49
47
|
})
|
|
50
48
|
)
|
|
51
49
|
];
|
|
52
|
-
n && (p[0][0] =
|
|
50
|
+
n && (p[0][0] = u.createFrom(p[0][0], {
|
|
53
51
|
amount: 0n,
|
|
54
52
|
isUnstakeOutput: n
|
|
55
53
|
}));
|
|
56
|
-
const
|
|
54
|
+
const K = [!1], d = j(30), H = G.getEncryptionKeyPair(t.userKeys.getShieldedPrivateKey()), I = T(d, s, v), P = T(d, s, H.publicKey), D = n ? 0n : B(
|
|
57
55
|
!0,
|
|
58
|
-
|
|
56
|
+
s,
|
|
59
57
|
d,
|
|
60
|
-
|
|
58
|
+
U,
|
|
61
59
|
e[0],
|
|
62
60
|
BigInt(p[0][0].timeStamp)
|
|
63
|
-
),
|
|
61
|
+
), F = O(
|
|
64
62
|
m ? 0 : 1,
|
|
65
|
-
|
|
63
|
+
D,
|
|
66
64
|
A,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
), C = t.getContractWithSigner(k.HinkalWrapper2),
|
|
70
|
-
console.log("external action address", u.address);
|
|
71
|
-
const { zkCallData: S, dimData: x, circomData: l } = await Z(
|
|
65
|
+
I,
|
|
66
|
+
P
|
|
67
|
+
), C = t.getContractWithSigner(k.HinkalWrapper2), f = t.getContractWithSigner(k.HinkalStakeExternalAction), { zkCallData: S, dimData: l, circomData: x } = await N(
|
|
72
68
|
t.merkleTreeHinkal,
|
|
73
69
|
t.merkleTreeAccessToken,
|
|
74
70
|
r,
|
|
75
71
|
p,
|
|
76
72
|
t.userKeys,
|
|
77
73
|
"swapperME1x2x1",
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
74
|
+
q.HinkalStake,
|
|
75
|
+
f.address,
|
|
76
|
+
F,
|
|
77
|
+
h,
|
|
82
78
|
t.getCurrentChainId(),
|
|
83
|
-
|
|
79
|
+
K,
|
|
84
80
|
void 0,
|
|
85
81
|
void 0,
|
|
86
82
|
{
|
|
87
|
-
stakedTokenRecipient:
|
|
83
|
+
stakedTokenRecipient: s,
|
|
88
84
|
stakeBlinding: d,
|
|
89
85
|
mode: a,
|
|
90
86
|
depositorAddress: A
|
|
91
87
|
}
|
|
92
88
|
);
|
|
93
|
-
if (
|
|
94
|
-
const o = z(
|
|
89
|
+
if (n) {
|
|
90
|
+
const o = z(c, t.getCurrentChainId());
|
|
95
91
|
if (!o)
|
|
96
92
|
throw new Error("hToken not found");
|
|
97
|
-
const
|
|
93
|
+
const W = (await t.getContractWithFetcher(k.HToken, o.erc20TokenAddress).previewWithdraw(-e[0])).toBigInt();
|
|
98
94
|
return w(
|
|
99
95
|
t,
|
|
100
|
-
|
|
96
|
+
W,
|
|
101
97
|
o,
|
|
102
98
|
S,
|
|
103
|
-
l,
|
|
104
99
|
x,
|
|
105
|
-
|
|
100
|
+
l,
|
|
101
|
+
f,
|
|
106
102
|
C
|
|
107
103
|
);
|
|
108
104
|
}
|
|
109
105
|
return w(
|
|
110
106
|
t,
|
|
111
107
|
e[0],
|
|
112
|
-
|
|
108
|
+
c,
|
|
113
109
|
S,
|
|
114
|
-
l,
|
|
115
110
|
x,
|
|
116
|
-
|
|
111
|
+
l,
|
|
112
|
+
f,
|
|
117
113
|
C
|
|
118
114
|
);
|
|
119
115
|
};
|
|
120
116
|
export {
|
|
121
|
-
|
|
117
|
+
pt as hinkalActionStake
|
|
122
118
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const V=require("../../constants/protocol.constants.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const V=require("../../constants/protocol.constants.cjs"),m=require("../../functions/utils/erc20tokenFunctions.cjs"),P=require("../../functions/pre-transaction/getFlatFees.cjs"),U=require("../../functions/pre-transaction/outputUtxoProcessing.cjs"),H=require("../../functions/snarkjs/constructGeneralZkProof.cjs"),N=require("../../functions/web3/events/getShieldedBalance.cjs"),f=require("../../functions/web3/functionCalls/transactCallDirect.cjs"),W=require("../../functions/web3/functionCalls/transactCallRelayer.cjs"),b=require("../../functions/web3/functionCalls/estimateGasRelayer.cjs"),E=require("../volatile-helper/VolatileHelper.cjs"),n=require("../../types/hinkal.types.cjs"),q=require("../../types/ethereum-network.types.cjs"),M=require("../../types/external-action.types.cjs"),z=require("../../error-handling/error-codes.constants.cjs"),G=async(t,a,e,D,R)=>{const{action:r,isRelayerOff:i,recipientAddress:T,baseExternalActionId:I,baseExternalActionMetadata:S}=D,p=m.getERC20Token(a[0],t.getCurrentChainId());if(!p)throw Error("Deposit Action: No Token Found");const A=[...e],F=[...a];let g=[],y=e.map(()=>0n);({erc20Addresses:a,amountChanges:e,onChainCreation:g}=await E.VolatileHelper.processVolatileData(t.getCurrentChainId(),r,a,e));const c=await E.VolatileHelper.getVolatileExternalData(t,r,A,T,I,S);if(!c)throw Error("No External Action Data");(r===n.VolatileAction.Withdraw&&!i||r===n.VolatileAction.Swap)&&({flatFees:y}=await P.getFlatFees(t.getCurrentChainId(),F,M.ExternalActionId.Volatile,A,r),r===n.VolatileAction.Swap&&(e[1]=0n));const d=[...await N.addPaddingToUtxos(t,a,e)],_=`swapperM${e.length.toString()}x${d[0].length}x1`,w=[];for(let o=0;o<a.length;o+=1){const{outputUtxos:x}=U.outputUtxoProcessing(t.userKeys,d[o],e[o]);w.push(x)}const C=r===n.VolatileAction.Deposit||i?V.zeroAddress:await t.getRandomRelay();if(!i&&!C)throw Error(z.transactionErrorCodes.RELAYER_NOT_AVAILABLE);const{zkCallData:s,circomData:l,dimData:u}=await H.constructZkProof(t.merkleTreeHinkal,t.merkleTreeAccessToken,d,w,t.userKeys,_,c.externalActionId,c.externalAddress,c.externalActionMetadata,i?V.zeroAddress:C,t.getCurrentChainId(),g,y);if(r===n.VolatileAction.Deposit){const o=t.getContractWithSigner(q.ContractType.VolatileVault),x=t.getContractWithSigner(q.ContractType.HinkalWrapper);return await f.transactCallDirect(t,A[0],p,s,l,u,o,x)}return r===n.VolatileAction.Withdraw&&i?await f.transactCallDirect(t,e[0],p,s,l,u):R?await b.estimateGasRelayer(t,s,u,l):await W.transactCallRelayer(t.getCurrentChainId(),s,u,l)};exports.hinkalActionVolatile=G;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { zeroAddress as
|
|
2
|
-
import { getERC20Token as
|
|
1
|
+
import { zeroAddress as E } from "../../constants/protocol.constants.mjs";
|
|
2
|
+
import { getERC20Token as F } from "../../functions/utils/erc20tokenFunctions.mjs";
|
|
3
3
|
import { getFlatFees as N } from "../../functions/pre-transaction/getFlatFees.mjs";
|
|
4
4
|
import { outputUtxoProcessing as H } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
|
|
5
5
|
import { constructZkProof as L } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
|
|
@@ -12,79 +12,73 @@ import { VolatileAction as i } from "../../types/hinkal.types.mjs";
|
|
|
12
12
|
import { ContractType as D } from "../../types/ethereum-network.types.mjs";
|
|
13
13
|
import { ExternalActionId as z } from "../../types/external-action.types.mjs";
|
|
14
14
|
import { transactionErrorCodes as K } from "../../error-handling/error-codes.constants.mjs";
|
|
15
|
-
const
|
|
16
|
-
const { action:
|
|
15
|
+
const rt = async (t, a, r, R, T) => {
|
|
16
|
+
const { action: o, isRelayerOff: n, recipientAddress: I, baseExternalActionId: V, baseExternalActionMetadata: S } = R, m = F(a[0], t.getCurrentChainId());
|
|
17
17
|
if (!m)
|
|
18
18
|
throw Error("Deposit Action: No Token Found");
|
|
19
|
-
const
|
|
20
|
-
let
|
|
21
|
-
({ erc20Addresses: a, amountChanges:
|
|
19
|
+
const f = [...r], U = [...a];
|
|
20
|
+
let w = [], A = r.map(() => 0n);
|
|
21
|
+
({ erc20Addresses: a, amountChanges: r, onChainCreation: w } = await C.processVolatileData(
|
|
22
22
|
t.getCurrentChainId(),
|
|
23
|
-
|
|
23
|
+
o,
|
|
24
24
|
a,
|
|
25
|
-
|
|
26
|
-
))
|
|
25
|
+
r
|
|
26
|
+
));
|
|
27
27
|
const c = await C.getVolatileExternalData(
|
|
28
28
|
t,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
V,
|
|
29
|
+
o,
|
|
30
|
+
f,
|
|
32
31
|
I,
|
|
33
|
-
|
|
32
|
+
V,
|
|
33
|
+
S
|
|
34
34
|
);
|
|
35
35
|
if (!c)
|
|
36
36
|
throw Error("No External Action Data");
|
|
37
|
-
(
|
|
37
|
+
(o === i.Withdraw && !n || o === i.Swap) && ({ flatFees: A } = await N(
|
|
38
38
|
t.getCurrentChainId(),
|
|
39
|
-
|
|
39
|
+
U,
|
|
40
40
|
z.Volatile,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
),
|
|
44
|
-
|
|
45
|
-
erc20Addresses: a,
|
|
46
|
-
amountChanges: o,
|
|
47
|
-
originalAmountChanges: l,
|
|
48
|
-
externalActionData: c
|
|
49
|
-
}));
|
|
50
|
-
const g = [...await M(t, a, o)], U = `swapperM${o.length.toString()}x${g[0].length}x1`, d = [];
|
|
41
|
+
f,
|
|
42
|
+
o
|
|
43
|
+
), o === i.Swap && (r[1] = 0n));
|
|
44
|
+
const x = [...await M(t, a, r)], W = `swapperM${r.length.toString()}x${x[0].length}x1`, g = [];
|
|
51
45
|
for (let e = 0; e < a.length; e += 1) {
|
|
52
|
-
const { outputUtxos:
|
|
53
|
-
|
|
46
|
+
const { outputUtxos: d } = H(t.userKeys, x[e], r[e]);
|
|
47
|
+
g.push(d);
|
|
54
48
|
}
|
|
55
|
-
const
|
|
56
|
-
if (!n && !
|
|
49
|
+
const u = o === i.Deposit || n ? E : await t.getRandomRelay();
|
|
50
|
+
if (!n && !u)
|
|
57
51
|
throw Error(K.RELAYER_NOT_AVAILABLE);
|
|
58
|
-
const { zkCallData: s, circomData: p, dimData:
|
|
52
|
+
const { zkCallData: s, circomData: p, dimData: l } = await L(
|
|
59
53
|
t.merkleTreeHinkal,
|
|
60
54
|
t.merkleTreeAccessToken,
|
|
55
|
+
x,
|
|
61
56
|
g,
|
|
62
|
-
d,
|
|
63
57
|
t.userKeys,
|
|
64
|
-
|
|
58
|
+
W,
|
|
65
59
|
c.externalActionId,
|
|
66
60
|
c.externalAddress,
|
|
67
61
|
c.externalActionMetadata,
|
|
68
|
-
n ?
|
|
62
|
+
n ? E : u,
|
|
69
63
|
t.getCurrentChainId(),
|
|
70
|
-
|
|
71
|
-
|
|
64
|
+
w,
|
|
65
|
+
A
|
|
72
66
|
);
|
|
73
|
-
if (
|
|
74
|
-
const e = t.getContractWithSigner(D.VolatileVault),
|
|
75
|
-
return
|
|
67
|
+
if (o === i.Deposit) {
|
|
68
|
+
const e = t.getContractWithSigner(D.VolatileVault), d = t.getContractWithSigner(D.HinkalWrapper);
|
|
69
|
+
return await y(
|
|
76
70
|
t,
|
|
77
|
-
|
|
71
|
+
f[0],
|
|
78
72
|
m,
|
|
79
73
|
s,
|
|
80
74
|
p,
|
|
81
|
-
|
|
75
|
+
l,
|
|
82
76
|
e,
|
|
83
|
-
|
|
77
|
+
d
|
|
84
78
|
);
|
|
85
79
|
}
|
|
86
|
-
return
|
|
80
|
+
return o === i.Withdraw && n ? await y(t, r[0], m, s, p, l) : T ? await b(t, s, l, p) : await P(t.getCurrentChainId(), s, l, p);
|
|
87
81
|
};
|
|
88
82
|
export {
|
|
89
|
-
|
|
83
|
+
rt as hinkalActionVolatile
|
|
90
84
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("../../constants/protocol.constants.cjs"),C=require("../../functions/utils/erc20tokenFunctions.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("../../constants/protocol.constants.cjs"),C=require("../../functions/utils/erc20tokenFunctions.cjs"),I=require("../../functions/pre-transaction/outputUtxoProcessing.cjs"),D=require("../../functions/snarkjs/constructGeneralZkProof.cjs"),f=require("../../functions/web3/events/getShieldedBalance.cjs"),h=require("../../functions/web3/functionCalls/transactCallDirect.cjs"),y=require("../utxo/Utxo.cjs"),k=require("../../error-handling/error-codes.constants.cjs"),q=async(t,n,r)=>{const a=C.getERC20Token(n[0],t.getCurrentChainId());if(!a)throw Error("Deposit Action: No Token Found");const c=r[0],e={externalActionId:0n,externalAddress:await t.getEthereumAddress(),externalActionMetadata:"0x00"},o=[...await f.addPaddingToUtxos(t,n,r)],d=`swapperM${r.length.toString()}x${o[0].length}x1`,i=[];for(let s=0;s<n.length;s+=1){const{outputUtxos:p}=I.outputUtxoProcessing(t.userKeys,o[s],r[s]);i.push(p)}const{zkCallData:l,circomData:x,dimData:g}=await D.constructZkProof(t.merkleTreeHinkal,t.merkleTreeAccessToken,o,i,t.userKeys,d,e.externalActionId,e.externalAddress,e.externalActionMetadata,T.zeroAddress,t.getCurrentChainId());return await h.transactCallDirect(t,c,a,l,x,g)},S=async(t,n,r,a)=>{const[c,e,o]=a.split(","),d=!c||!e||!o,i=e?.substring(0,2)!=="0x"||o?.substring(0,2)!=="0x",l=o?.length!==66||e?.length>66||e?.length<64,x=a?.includes('"');if(d||i||l||x)throw Error(k.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);const g=[BigInt(c)],A=[e],s=n.map(u=>[new y.Utxo({amount:0n,erc20TokenAddress:u,shieldedPrivateKey:t.userKeys.getShieldedPrivateKey()}),new y.Utxo({amount:0n,erc20TokenAddress:u,shieldedPrivateKey:t.userKeys.getShieldedPrivateKey()})]),p=`swapperM${r.length.toString()}x${s[0].length}x1`,P=n.map((u,m)=>[new y.Utxo({amount:r[m],erc20TokenAddress:u,randomization:g[m],stealthAddress:A[m],encryptionKey:o})]),{zkCallData:U,circomData:E,dimData:K}=await D.constructZkProof(t.merkleTreeHinkal,t.merkleTreeAccessToken,s,P,t.userKeys,p,0n,await t.getEthereumAddress(),"0x00",T.zeroAddress,t.getCurrentChainId()),w=C.getERC20Token(n[0],t.getCurrentChainId());if(!w)throw Error("Withdraw Action: No Token Found");return await h.transactCallDirect(t,r[0],w,U,E,K)};exports.hinkalDeposit=q;exports.hinkalDepositForOther=S;
|
|
@@ -1,53 +1,52 @@
|
|
|
1
|
-
import { zeroAddress as
|
|
2
|
-
import { getERC20Token as
|
|
1
|
+
import { zeroAddress as T } from "../../constants/protocol.constants.mjs";
|
|
2
|
+
import { getERC20Token as f } from "../../functions/utils/erc20tokenFunctions.mjs";
|
|
3
3
|
import { outputUtxoProcessing as P } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
|
|
4
4
|
import { constructZkProof as C } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
|
|
5
5
|
import { addPaddingToUtxos as U } from "../../functions/web3/events/getShieldedBalance.mjs";
|
|
6
6
|
import { transactCallDirect as D } from "../../functions/web3/functionCalls/transactCallDirect.mjs";
|
|
7
7
|
import { Utxo as A } from "../utxo/Utxo.mjs";
|
|
8
8
|
import { transactionErrorCodes as z } from "../../error-handling/error-codes.constants.mjs";
|
|
9
|
-
const k = async (t, n,
|
|
10
|
-
const a =
|
|
9
|
+
const k = async (t, n, r) => {
|
|
10
|
+
const a = f(n[0], t.getCurrentChainId());
|
|
11
11
|
if (!a)
|
|
12
12
|
throw Error("Deposit Action: No Token Found");
|
|
13
|
-
const i =
|
|
13
|
+
const i = r[0], e = {
|
|
14
14
|
externalActionId: 0n,
|
|
15
15
|
externalAddress: await t.getEthereumAddress(),
|
|
16
16
|
externalActionMetadata: "0x00"
|
|
17
|
-
},
|
|
17
|
+
}, o = [...await U(t, n, r)], m = `swapperM${r.length.toString()}x${o[0].length}x1`, c = [];
|
|
18
18
|
for (let s = 0; s < n.length; s += 1) {
|
|
19
|
-
const { outputUtxos:
|
|
20
|
-
c.push(
|
|
19
|
+
const { outputUtxos: l } = P(t.userKeys, o[s], r[s]);
|
|
20
|
+
c.push(l);
|
|
21
21
|
}
|
|
22
|
-
const { zkCallData: u, circomData:
|
|
22
|
+
const { zkCallData: u, circomData: p, dimData: x } = await C(
|
|
23
23
|
t.merkleTreeHinkal,
|
|
24
24
|
t.merkleTreeAccessToken,
|
|
25
|
-
|
|
25
|
+
o,
|
|
26
26
|
c,
|
|
27
27
|
t.userKeys,
|
|
28
28
|
m,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
e.externalActionId,
|
|
30
|
+
e.externalAddress,
|
|
31
|
+
e.externalActionMetadata,
|
|
32
|
+
T,
|
|
33
33
|
t.getCurrentChainId()
|
|
34
34
|
);
|
|
35
|
-
return
|
|
36
|
-
}, H = async (t, n,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (m || c || u || l)
|
|
35
|
+
return await D(t, i, a, u, p, x);
|
|
36
|
+
}, H = async (t, n, r, a) => {
|
|
37
|
+
const [i, e, o] = a.split(","), m = !i || !e || !o, c = e?.substring(0, 2) !== "0x" || o?.substring(0, 2) !== "0x", u = o?.length !== 66 || e?.length > 66 || e?.length < 64, p = a?.includes('"');
|
|
38
|
+
if (m || c || u || p)
|
|
40
39
|
throw Error(z.RECIPIENT_FORMAT_INCORRECT);
|
|
41
|
-
const
|
|
40
|
+
const x = [BigInt(i)], y = [e], s = n.map((d) => [
|
|
42
41
|
new A({ amount: 0n, erc20TokenAddress: d, shieldedPrivateKey: t.userKeys.getShieldedPrivateKey() }),
|
|
43
42
|
new A({ amount: 0n, erc20TokenAddress: d, shieldedPrivateKey: t.userKeys.getShieldedPrivateKey() })
|
|
44
|
-
]),
|
|
43
|
+
]), l = `swapperM${r.length.toString()}x${s[0].length}x1`, E = n.map((d, g) => [
|
|
45
44
|
new A({
|
|
46
|
-
amount:
|
|
45
|
+
amount: r[g],
|
|
47
46
|
erc20TokenAddress: d,
|
|
48
|
-
randomization:
|
|
47
|
+
randomization: x[g],
|
|
49
48
|
stealthAddress: y[g],
|
|
50
|
-
encryptionKey:
|
|
49
|
+
encryptionKey: o
|
|
51
50
|
})
|
|
52
51
|
]), { zkCallData: K, circomData: h, dimData: I } = await C(
|
|
53
52
|
t.merkleTreeHinkal,
|
|
@@ -55,16 +54,16 @@ const k = async (t, n, e) => {
|
|
|
55
54
|
s,
|
|
56
55
|
E,
|
|
57
56
|
t.userKeys,
|
|
58
|
-
|
|
57
|
+
l,
|
|
59
58
|
0n,
|
|
60
59
|
await t.getEthereumAddress(),
|
|
61
60
|
"0x00",
|
|
62
|
-
|
|
61
|
+
T,
|
|
63
62
|
t.getCurrentChainId()
|
|
64
|
-
), w =
|
|
63
|
+
), w = f(n[0], t.getCurrentChainId());
|
|
65
64
|
if (!w)
|
|
66
65
|
throw Error("Withdraw Action: No Token Found");
|
|
67
|
-
return await D(t,
|
|
66
|
+
return await D(t, r[0], w, K, h, I);
|
|
68
67
|
};
|
|
69
68
|
export {
|
|
70
69
|
k as hinkalDeposit,
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
`),!this._merkleTree.insert(e.commitment,e.index>=0?e.index:-1n*e.index))return console.log(`Could not add ${e.commitment} at index ${e.index} `),!1;const r={value:e.encryptedOutput,isPositive:e.index>=0n};return this._encryptedOutputs.push(r),!0}return!1}}exports.AbstractCommitmentsSnapshotService=p;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../crypto/poseidon.cjs");require("circomlibjs");const c=require("../merkle-tree/MerkleTree.cjs"),u=require("../../functions/utils/amounts.utils.cjs"),m=require("./AbstractSnapshotService.cjs");class p extends m.AbstractSnapshotService{constructor(e,t,n,r){super(e,{name:"NewCommitment",args:["commitment","index","encryptedOutput"]},t,n,r)}_merkleTree;_encryptedOutputs;get merkleTree(){return this._merkleTree}get encryptedOutputs(){return this._encryptedOutputs}serializeSnapshot(e){return{merkleTree:e.payload.merkleTree.toJSON(),latestBlockNumber:e.latestBlockNumber,reserveBlockNumber:e.reserveBlockNumber,encryptedOutputs:e.payload.encryptedOutputs.map(t=>({value:t.value,isPositive:String(t.isPositive)}))}}deserializeSnapshot(e){let t;if(e.latestBlockNumber&&e.merkleTree){const r=new Map(Object.entries(e.merkleTree.tree).map(([i,o])=>[BigInt(i),BigInt(o)]));t=c.MerkleTree.createWithData(r,u.toBigInt(e.merkleTree.index),u.toBigInt(e.merkleTree.count),s.poseidonFunction,25n,0n)}else t=c.MerkleTree.create(s.poseidonFunction,25n,0n);const n=e.encryptedOutputs?.map(r=>({value:r.value,isPositive:JSON.parse(r.isPositive)}));return{latestBlockNumber:e.latestBlockNumber??0,reserveBlockNumber:e.reserveBlockNumber??0,payload:{merkleTree:t,encryptedOutputs:n||[]}}}getSnapshotPayload(){return{merkleTree:this._merkleTree,encryptedOutputs:this._encryptedOutputs}}populateSnapshot({payload:{merkleTree:e,encryptedOutputs:t}}){this._merkleTree=e,this._encryptedOutputs=t}mapEvent(e){const{commitment:t,index:n,encryptedOutput:r}=e;return{commitment:u.toBigInt(t),index:u.toBigInt(n),encryptedOutput:r}}acceptEvent(e,t){if(!this.encryptedOutputs.map(n=>n.value).includes(e.encryptedOutput)){if(!this._merkleTree.insert(e.commitment,e.index>=0?e.index:-1n*e.index))return!1;const r={value:e.encryptedOutput,isPositive:e.index>=0n};return this._encryptedOutputs.push(r),!0}return!1}}exports.AbstractCommitmentsSnapshotService=p;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { poseidonFunction as
|
|
1
|
+
import { poseidonFunction as s } from "../../crypto/poseidon.mjs";
|
|
2
2
|
import "circomlibjs";
|
|
3
|
-
import { MerkleTree as
|
|
3
|
+
import { MerkleTree as m } from "../merkle-tree/MerkleTree.mjs";
|
|
4
4
|
import { toBigInt as n } from "../../functions/utils/amounts.utils.mjs";
|
|
5
|
-
import { AbstractSnapshotService as
|
|
6
|
-
class O extends
|
|
5
|
+
import { AbstractSnapshotService as i } from "./AbstractSnapshotService.mjs";
|
|
6
|
+
class O extends i {
|
|
7
7
|
constructor(e, t, u, r) {
|
|
8
8
|
super(
|
|
9
9
|
e,
|
|
@@ -39,21 +39,21 @@ class O extends o {
|
|
|
39
39
|
let t;
|
|
40
40
|
if (e.latestBlockNumber && e.merkleTree) {
|
|
41
41
|
const r = new Map(
|
|
42
|
-
Object.entries(e.merkleTree.tree).map(([c,
|
|
42
|
+
Object.entries(e.merkleTree.tree).map(([c, p]) => [
|
|
43
43
|
BigInt(c),
|
|
44
|
-
BigInt(
|
|
44
|
+
BigInt(p)
|
|
45
45
|
])
|
|
46
46
|
);
|
|
47
|
-
t =
|
|
47
|
+
t = m.createWithData(
|
|
48
48
|
r,
|
|
49
49
|
n(e.merkleTree.index),
|
|
50
50
|
n(e.merkleTree.count),
|
|
51
|
-
|
|
51
|
+
s,
|
|
52
52
|
25n,
|
|
53
53
|
0n
|
|
54
54
|
);
|
|
55
55
|
} else
|
|
56
|
-
t =
|
|
56
|
+
t = m.create(s, 25n, 0n);
|
|
57
57
|
const u = e.encryptedOutputs?.map((r) => ({
|
|
58
58
|
value: r.value,
|
|
59
59
|
isPositive: JSON.parse(r.isPositive)
|
|
@@ -88,13 +88,8 @@ class O extends o {
|
|
|
88
88
|
}
|
|
89
89
|
acceptEvent(e, t) {
|
|
90
90
|
if (!this.encryptedOutputs.map((u) => u.value).includes(e.encryptedOutput)) {
|
|
91
|
-
if (this.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
`
|
|
96
|
-
), !this._merkleTree.insert(e.commitment, e.index >= 0 ? e.index : -1n * e.index))
|
|
97
|
-
return console.log(`Could not add ${e.commitment} at index ${e.index} `), !1;
|
|
91
|
+
if (!this._merkleTree.insert(e.commitment, e.index >= 0 ? e.index : -1n * e.index))
|
|
92
|
+
return !1;
|
|
98
93
|
const r = {
|
|
99
94
|
value: e.encryptedOutput,
|
|
100
95
|
isPositive: e.index >= 0n
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("../../constants/chains.constants.cjs");require("../../constants/vite.constants.cjs");require("axios");require("../../constants/coingecko.constants.cjs");const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("../../constants/chains.constants.cjs");require("../../constants/vite.constants.cjs");require("axios");require("../../constants/coingecko.constants.cjs");const y=require("../../API/API.cjs");require("ethers");require("../../types/curve.types.cjs");const A=require("../../constants/contracts.constants.cjs");require("../../constants/kyc.constants.cjs");require("../../constants/axelar.constants.cjs");require("../../constants/rewards.constants.cjs");require("../../constants/reorg-depths.constants.cjs");const k=require("../../functions/snarkjs/generateZkProof.cjs");require("../../types/circom-data.types.cjs");const q=require("../../types/transactions.types.cjs"),I=require("../../types/time.types.cjs"),x=require("./history/getTxDetails.cjs");require("circomlibjs");const P=require("../../error-handling/error-codes.constants.cjs"),w=require("../crypto-keys/keys.cjs"),C=require("../crypto-keys/encryptDecryptUtxo.cjs"),p=require("../../functions/utils/getDataFromTransaction.cjs"),S=require("../../functions/utils/cacheFunctions.cjs");class v{circuitSize=50;hinkalContract;init(e){this.hinkalContract=e}requireInit(){if(!this.hinkalContract)throw Error("TransactionsManager not initialized")}filterOwnTransactions=async(e,t,r,n)=>{const{transactMethodId:s,transactWithExternalActionMethodId:a,hinkalInterface:i}=A.getHinkalParameters(T.getNonLocalhostChainId(e)),c=o=>"decodedInput"in o,d=t.filter(o=>o.methodId===s||o.methodId===a).map(o=>c(o)?o:{...o,decodedInput:p.decodeTxInput(i,o.input),status:o.isError==="0"?"SUCCESS":"FAILURE"}),h=r.getShieldedPrivateKey();return d.filter(o=>{try{if(c(o)){if(C.decryptUtxo(Buffer.from(o.decodedInput.encryptedOutputs[0].slice(2),"hex"),r),!n&&o.methodId===s){const{extraRandomization:f,H0:g,H1:m}=o.decodedInput.stealthAddressStructure;return w.UserKeys.checkSignature(f,g,m,h)}return!0}return!1}catch{return!1}})};saveTxsInStorage=(e,t,r,n)=>{const s=r.getShieldedPublicKey();return S.saveTxsCache(e,t,s,this.hinkalContract.address,n)};loadTxsFromStorage=async(e,t)=>{const r=t.getShieldedPublicKey();return await S.loadTxsCache(e,r,this.hinkalContract.address)};getAllTransactions=async(e,t,r)=>{if(r){const{transactions:i}=await y.API.userGetTransactions(e,r);return i}const{decodedTxs:n,lastHash:s}=await this.loadTxsFromStorage(e,t),{transactions:a}=await y.API.userGetTransactions(e,r,s);return[...a,...n]};getHinkalHistoryBase=async(e,t,r,n=!1)=>{this.requireInit();const s=await this.getAllTransactions(e,t,r)??[];s.sort((i,c)=>c.timeStamp-i.timeStamp);const a=await this.filterOwnTransactions(e,s,t,n);return!r&&s.length>0&&await this.saveTxsInStorage(a,e,t,s[0].hash),a};getHinkalHistory=async(e,t)=>{const r=await this.getHinkalHistoryBase(e,t,void 0,!0),n=p.decodeTxLogs(e,r);return await Promise.all(n.map(async a=>({...a,status:a.status,details:await x.getTxDetails(e,a.decodedInput,a.utxosArray)})))};sortInBatches=e=>{const t=[];let r=0,n=0;e.forEach(i=>{r===0&&t.push([]),t[n].push(i),r+=1,r===this.circuitSize&&(r=0,n+=1)});const s=t[t.length-1],a=s.length;if(a<this.circuitSize){const i=this.circuitSize-a,c=new Array(i).fill(q.emptyDecodedTx);t[t.length-1]=s.concat(c)}return t};generateTransactionsProof=async(e,t,r)=>{const n=this.sortInBatches(t),s=new Array(n.length).fill([]);for(let a=0;a<n.length;a+=1){const i=n[a].map(u=>u.decodedInput.stealthAddressStructure),c=i.map(u=>u.extraRandomization),l=i.map(u=>u.stealthAddress),d={shieldedPrivateKey:r,extraRandomizations:c,stealthAddresses:l},{zkCallData:h}=await k.generateZkProof(e,"transactionsProver",d);s[a]=h}return{zkCallDataArray:s}};userVerifyTransactions=async(e,t,r,n,s,a)=>await y.API.userVerifyTransactions(e,t,r,n,s,a);processAndSendTransactionsForVerification=async(e,t,r,n)=>{this.requireInit();const s=I.getCurrentWeek(),a=n?s-1:s,i=await this.getHinkalHistoryBase(e,t,a);let c=[],l=[];i.length>0&&({zkCallDataArray:l}=await this.generateTransactionsProof(e,i,t.getShieldedPrivateKey()),c=i.map(g=>g.hash));const d=t.getBackendToken(),{trade:h,transactions:u,lockedDeposit:o,verification:f}=await this.userVerifyTransactions(e,c,l,d,r,a);return{trade:h,transactions:u,lockedDeposit:o,verification:f}};multiProcessAndSendTransactionsForVerification=async(e,t)=>{const r=T.chainIdsByType[T.EthereumNetworkType.Mainnet];let n=!0;for(let s=0;s<r.length;s+=1)try{const{hasCertified:a}=await y.API.verificationStartDate(r[s],t);if(a)continue;const{verification:i}=await this.processAndSendTransactionsForVerification(r[s],e,t,!0);if(n=n&&i,!n)break}catch(a){console.log(`current chain ${r[s]} certification error`,{err:a}),n=!1;break}if(!n)throw Error(P.transactionErrorCodes.MULTI_VERIFICATION_FAILED);return!0}}exports.TransactionsManager=v;
|