@gurge/sdk 0.3.27 → 0.3.29
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 +29 -34
- 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 +46 -87
- 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 +23 -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 +57 -61
- 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/hinkalTiming.utils.cjs +1 -1
- package/common/src/functions/utils/hinkalTiming.utils.d.ts +3 -9
- package/common/src/functions/utils/hinkalTiming.utils.mjs +13 -18
- 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/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
|
@@ -3,81 +3,81 @@ 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 { getAmountInToken as r, getAmountInWei as i, randomBigInt as a } from "../../functions/web3/etherFunctions.mjs";
|
|
5
5
|
import { UserKeys as o } from "../crypto-keys/keys.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { StorageKeys as u } from "../../types/cache.types.mjs";
|
|
6
|
+
import { getCurrentTimeInSeconds as s } from "../../functions/utils/time.utils.mjs";
|
|
7
|
+
import { ExternalActionId as c } from "../../types/external-action.types.mjs";
|
|
8
|
+
import { StorageKeys as l } from "../../types/cache.types.mjs";
|
|
10
9
|
import "../../types/index.mjs";
|
|
11
|
-
import { validateAndGetChainId as
|
|
12
|
-
import { addPaddingToUtxos as
|
|
13
|
-
import { outputUtxoProcessing as
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
10
|
+
import { validateAndGetChainId as u } from "../../functions/utils/token-check.utils.mjs";
|
|
11
|
+
import { addPaddingToUtxos as d } from "../../functions/web3/events/getShieldedBalance.mjs";
|
|
12
|
+
import { outputUtxoProcessing as f } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
|
|
13
|
+
import { calcEncryptedOutputs as ee } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
14
|
+
import { getStorageAccountPublicKey as te, getStorageVaultPublicKey as p, getSwapperAccountPublicKeyFromSalt as m } from "../../functions/pre-transaction/solana.mjs";
|
|
15
|
+
import { constructAdminData as h } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
16
|
+
import { convertOKXToHinkalInstructions as g } from "../../functions/pre-transaction/convert-okx-instructions.mjs";
|
|
17
|
+
import { ensureAmountChanges as _ } from "../../functions/pre-transaction/ensureAmountChanges.mjs";
|
|
18
|
+
import { getFeeStructure as v } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
19
|
+
import { constructSolanaZkProof as y } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
|
|
20
|
+
import { solanaTransactCallRelayer as b } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
21
|
+
import { ethers as x } from "ethers";
|
|
22
|
+
import { PublicKey as S } from "@solana/web3.js";
|
|
23
23
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaSwap.ts
|
|
24
|
-
var
|
|
25
|
-
let i = [...await
|
|
24
|
+
var ne = async (e, t, n, r) => {
|
|
25
|
+
let i = [...await d(e, t, n, r, 6)], a = s().toString(), o = [];
|
|
26
26
|
for (let t = 0; t < n.length; t += 1) {
|
|
27
|
-
let { outputUtxos: n } =
|
|
27
|
+
let { outputUtxos: n } = f(e.userKeys, i[t], r[t], a);
|
|
28
28
|
o.push([n[0]]);
|
|
29
29
|
}
|
|
30
30
|
return {
|
|
31
31
|
inputUtxosArray: i,
|
|
32
32
|
outputUtxosArray: o
|
|
33
33
|
};
|
|
34
|
-
},
|
|
35
|
-
let
|
|
36
|
-
if (!
|
|
37
|
-
let
|
|
38
|
-
|
|
39
|
-
let
|
|
40
|
-
if (
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
34
|
+
}, C = async (s, d, f, C, re, ie, ae, w, T) => {
|
|
35
|
+
let E = u(d), D = new S(t), { hinkalAddress: O, originalDeployer: k } = e[E].contractData;
|
|
36
|
+
if (!k) throw Error("No IDL configured for Solana program on this network");
|
|
37
|
+
let A = new S(k), j = new S(O), M = d.map((e) => e.erc20TokenAddress), { userKeys: N, merkleTreeHinkalByChain: P } = s, F = w ?? await v(E, ae, M, c.Transact), I = f[1], L = Number(s.cacheDevice.get(l.SLIPPAGE_PERCENTAGE) ?? 0), R = d[1], z = r(R, I), B = Number(z) * L / 100;
|
|
38
|
+
f[1] -= i(R, B.toFixed(R.decimals));
|
|
39
|
+
let V = I * BigInt(F.variableRate ?? 0) / 10000n + F.flatFee;
|
|
40
|
+
if (f[1] -= V, f[1] < 0) throw Error(n.LOW_OUTPUT_AMOUNT);
|
|
41
|
+
let H = F.variableRate.toString(), [U, oe, { inputUtxosArray: W, outputUtxosArray: G }] = await Promise.all([
|
|
42
|
+
s.getRandomRelay(E, !0),
|
|
43
|
+
s.getEthereumAddressByChain(E),
|
|
44
|
+
ne(s, E, M, f)
|
|
45
45
|
]);
|
|
46
|
-
if (!
|
|
47
|
-
let
|
|
46
|
+
if (!U) throw Error(n.RELAYER_NOT_AVAILABLE);
|
|
47
|
+
let K = s.userKeys.getShieldedPrivateKey(), q = o.findCorrectRandomization(a(31), K), J = {
|
|
48
48
|
tokenNumber: 2,
|
|
49
|
-
nullifierAmount:
|
|
49
|
+
nullifierAmount: W[0].length,
|
|
50
50
|
outputAmount: 1
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
let { proofAArr:
|
|
54
|
-
recipient:
|
|
51
|
+
}, Y = ee(G).map((e) => [...x.getBytes(e[0])]), X = m(j, A, C), { remainingAccounts: Z, hinkalInstructions: Q } = g(re, X);
|
|
52
|
+
_(W, G, f);
|
|
53
|
+
let { proofAArr: $, proofBArr: se, proofCArr: ce, publicInputsArr: le, commitmentValidationData: ue } = await y(s.generateProofRemotely, P[E], N, M, W, G, q, F.flatFee, F.variableRate, D.toString(), U, J, Y, E, Q, Z, C), de = te(j, A), fe = p(j, A), pe = d[0].erc20TokenAddress === "11111111111111111111111111111111" ? null : new S(d[0].erc20TokenAddress), me = d[1].erc20TokenAddress === "11111111111111111111111111111111" ? null : new S(d[1].erc20TokenAddress), he = {
|
|
54
|
+
recipient: D.toString(),
|
|
55
55
|
storageAccount: de.toString(),
|
|
56
56
|
storageVault: fe.toString(),
|
|
57
|
-
swapperAccount:
|
|
57
|
+
swapperAccount: X.toString(),
|
|
58
58
|
mintFrom: pe?.toString() ?? null,
|
|
59
59
|
mintTo: me?.toString() ?? null,
|
|
60
|
-
remainingAccounts:
|
|
60
|
+
remainingAccounts: Z.map((e) => ({
|
|
61
61
|
pubkey: e.pubkey.toString(),
|
|
62
62
|
isSigner: e.isSigner,
|
|
63
63
|
isWritable: e.isWritable
|
|
64
64
|
})),
|
|
65
|
-
addressLookupTableAccount:
|
|
65
|
+
addressLookupTableAccount: ie
|
|
66
66
|
};
|
|
67
|
-
return
|
|
68
|
-
chainId:
|
|
69
|
-
relayAddress:
|
|
67
|
+
return b({
|
|
68
|
+
chainId: E,
|
|
69
|
+
relayAddress: U,
|
|
70
70
|
functionName: "swap",
|
|
71
71
|
args: {
|
|
72
|
-
encryptedOutputs:
|
|
73
|
-
proofAArr:
|
|
72
|
+
encryptedOutputs: Y,
|
|
73
|
+
proofAArr: $,
|
|
74
74
|
proofBArr: se,
|
|
75
75
|
proofCArr: ce,
|
|
76
76
|
publicInputsArr: le,
|
|
77
|
-
relayerFee:
|
|
78
|
-
variableRate:
|
|
79
|
-
dimensions:
|
|
80
|
-
hinkalInstructions:
|
|
77
|
+
relayerFee: F.flatFee.toString(),
|
|
78
|
+
variableRate: H,
|
|
79
|
+
dimensions: J,
|
|
80
|
+
hinkalInstructions: Q.map((e) => ({
|
|
81
81
|
accountIndexes: [...e.accountIndexes],
|
|
82
82
|
data: [...e.data],
|
|
83
83
|
programIndex: e.programIndex
|
|
@@ -85,8 +85,8 @@ var te = async (e, t, n, r) => {
|
|
|
85
85
|
},
|
|
86
86
|
accounts: he,
|
|
87
87
|
commitmentValidationData: ue,
|
|
88
|
-
adminData:
|
|
88
|
+
adminData: h(T, E, M, f, oe, d)
|
|
89
89
|
});
|
|
90
90
|
};
|
|
91
91
|
//#endregion
|
|
92
|
-
export {
|
|
92
|
+
export { C as hinkalSolanaSwap };
|
|
@@ -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`);require(`../../types/index.cjs`);const s=require(`../../functions/utils/addresses.cjs`),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/constructAdminData.cjs`),p=require(`../../functions/pre-transaction/ensureAmountChanges.cjs`),m=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const h=require(`../../functions/utils/fees.utils.cjs`),g=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),_=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);let v=require(`ethers`);var y=async(e,t,n,r,i,o)=>{let s=(await l.addPaddingToUtxos(e,t,n,r,6))[0],c=a.getCurrentTimeInSeconds().toString(),{outputUtxos:d}=u.outputUtxoProcessing(e.userKeys,s,r[0],c,!0,i,o);return{inputUtxos:s,senderUtxo:d[0],recipientUtxo:d[1]}},b=async(a,l,u,_,b,x,S)=>{if(!s.isValidPrivateAddress(_))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let C=c.validateAndGetChainId(l),w=[...u],{originalDeployer:T}=e.networkRegistry[C].contractData;if(!T)throw Error(`missing data`);let{userKeys:E,merkleTreeHinkalByChain:D}=a,O=l.map(e=>e.erc20TokenAddress);if(O.length>1)throw Error(`Solana Transfer: Only one mint address is supported`);let k=x??await m.getFeeStructure(C,b,O,o.ExternalActionId.Transact,[],5n);k.variableRate||=t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;let A=h.calculateTotalFee(-w[0],k),j=-w[0];w[0]-=A;let[M,N,{inputUtxos:P,senderUtxo:F,recipientUtxo:I}]=await Promise.all([a.getRandomRelay(C,!0),a.getEthereumAddressByChain(C),y(a,C,O,w,_,j)]);if(!M)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let L=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),a.userKeys.getShieldedPrivateKey()),R={tokenNumber:O.length,nullifierAmount:P.length,outputAmount:2},z=d.calcEncryptedOutputs([[F,I]])[0].map(e=>Array.from(v.ethers.getBytes(e)));p.ensureAmountChanges([P],[[F]],w);let{proofAArr:B,proofBArr:V,proofCArr:H,publicInputsArr:U,commitmentValidationData:W}=await g.constructSolanaZkProof(a.generateProofRemotely,D[C],E,[O[0]],[P],[[F,I]],L,A,0n,t.solanaNativeAddress,M,R,z,C),G={recipient:M,mint:O[0]===`11111111111111111111111111111111`?void 0:O[0]};return{chainId:C,relay:M,args:{proofAArr:B,proofBArr:V,proofCArr:H,publicInputsArr:U,encryptedOutputs:z,relayerFee:A.toString(),dimensions:R},accounts:G,adminData:f.constructAdminData(S,C,O,w,N),commitmentValidationData:W,recipientUtxo:I}},x=async(e,t,n,r,i,a,o,s=!1)=>{if(s)throw Error(`onlyGasEstimate is not supported for Solana transfer`);let c=await b(e,t,n,r,i,a,o);return _.solanaTransactCallRelayer({chainId:c.chainId,relayAddress:c.relay,functionName:`transfer`,args:c.args,accounts:c.accounts,adminData:c.adminData,commitmentValidationData:c.commitmentValidationData})};exports.hinkalSolanaTransfer=x;
|
|
@@ -3,14 +3,14 @@ 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 { getCurrentTimeInSeconds as c } from "../../functions/utils/time.utils.mjs";
|
|
6
|
+
import { getCurrentTimeInSeconds as o } from "../../functions/utils/time.utils.mjs";
|
|
7
|
+
import { ExternalActionId as s } from "../../types/external-action.types.mjs";
|
|
9
8
|
import "../../types/index.mjs";
|
|
10
|
-
import { isValidPrivateAddress as
|
|
11
|
-
import { validateAndGetChainId as
|
|
12
|
-
import { addPaddingToUtxos as
|
|
13
|
-
import { outputUtxoProcessing as
|
|
9
|
+
import { isValidPrivateAddress as c } from "../../functions/utils/addresses.mjs";
|
|
10
|
+
import { validateAndGetChainId as l } from "../../functions/utils/token-check.utils.mjs";
|
|
11
|
+
import { addPaddingToUtxos as u } from "../../functions/web3/events/getShieldedBalance.mjs";
|
|
12
|
+
import { outputUtxoProcessing as d } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
|
|
13
|
+
import { calcEncryptedOutputs as f } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
14
14
|
import { constructAdminData as p } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
15
15
|
import { ensureAmountChanges as m } from "../../functions/pre-transaction/ensureAmountChanges.mjs";
|
|
16
16
|
import { getFeeStructure as h } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
@@ -21,35 +21,35 @@ import { solanaTransactCallRelayer as v } from "../../functions/web3/functionCal
|
|
|
21
21
|
import { ethers as y } from "ethers";
|
|
22
22
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaTransfer.ts
|
|
23
23
|
var b = async (e, t, n, r, i, a) => {
|
|
24
|
-
let
|
|
24
|
+
let s = (await u(e, t, n, r, 6))[0], c = o().toString(), { outputUtxos: l } = d(e.userKeys, s, r[0], c, !0, i, a);
|
|
25
25
|
return {
|
|
26
|
-
inputUtxos:
|
|
26
|
+
inputUtxos: s,
|
|
27
27
|
senderUtxo: l[0],
|
|
28
28
|
recipientUtxo: l[1]
|
|
29
29
|
};
|
|
30
|
-
}, x = async (
|
|
31
|
-
if (!
|
|
32
|
-
let w = u
|
|
30
|
+
}, x = async (o, u, d, v, x, S, C) => {
|
|
31
|
+
if (!c(v)) throw Error(r.RECIPIENT_FORMAT_INCORRECT);
|
|
32
|
+
let w = l(u), T = [...d], { originalDeployer: E } = e[w].contractData;
|
|
33
33
|
if (!E) throw Error("missing data");
|
|
34
|
-
let { userKeys: D, merkleTreeHinkalByChain: O } =
|
|
34
|
+
let { userKeys: D, merkleTreeHinkalByChain: O } = o, k = u.map((e) => e.erc20TokenAddress);
|
|
35
35
|
if (k.length > 1) throw Error("Solana Transfer: Only one mint address is supported");
|
|
36
|
-
let A = S ?? await h(w, x, k,
|
|
36
|
+
let A = S ?? await h(w, x, k, s.Transact, [], 5n);
|
|
37
37
|
A.variableRate ||= t;
|
|
38
38
|
let j = g(-T[0], A), M = -T[0];
|
|
39
39
|
T[0] -= j;
|
|
40
40
|
let [N, P, { inputUtxos: F, senderUtxo: I, recipientUtxo: L }] = await Promise.all([
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
b(
|
|
41
|
+
o.getRandomRelay(w, !0),
|
|
42
|
+
o.getEthereumAddressByChain(w),
|
|
43
|
+
b(o, w, k, T, v, M)
|
|
44
44
|
]);
|
|
45
45
|
if (!N) throw Error(r.RELAYER_NOT_AVAILABLE);
|
|
46
|
-
let R = a.findCorrectRandomization(i(31),
|
|
46
|
+
let R = a.findCorrectRandomization(i(31), o.userKeys.getShieldedPrivateKey()), z = {
|
|
47
47
|
tokenNumber: k.length,
|
|
48
48
|
nullifierAmount: F.length,
|
|
49
49
|
outputAmount: 2
|
|
50
|
-
}, B =
|
|
50
|
+
}, B = f([[I, L]])[0].map((e) => Array.from(y.getBytes(e)));
|
|
51
51
|
m([F], [[I]], T);
|
|
52
|
-
let { proofAArr: V, proofBArr: H, proofCArr: U, publicInputsArr: W, commitmentValidationData: G } = await _(
|
|
52
|
+
let { proofAArr: V, proofBArr: H, proofCArr: U, publicInputsArr: W, commitmentValidationData: G } = await _(o.generateProofRemotely, O[w], D, [k[0]], [F], [[I, L]], R, j, 0n, n, N, z, B, w), K = {
|
|
53
53
|
recipient: N,
|
|
54
54
|
mint: k[0] === "11111111111111111111111111111111" ? void 0 : k[0]
|
|
55
55
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../functions/web3/etherFunctions.cjs`),r=require(`../crypto-keys/keys.cjs`),i=require(`../../
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../functions/web3/etherFunctions.cjs`),r=require(`../crypto-keys/keys.cjs`),i=require(`../../functions/utils/time.utils.cjs`),a=require(`../../types/external-action.types.cjs`);require(`../../types/index.cjs`);const o=require(`../../functions/utils/token-check.utils.cjs`),s=require(`../../functions/web3/events/getShieldedBalance.cjs`),c=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),l=require(`../../functions/snarkjs/common.snarkjs.cjs`),u=require(`../../functions/pre-transaction/constructAdminData.cjs`),d=require(`../../functions/pre-transaction/ensureAmountChanges.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`),require(`../../constants/index.cjs`);const p=require(`../../functions/utils/fees.utils.cjs`),m=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),h=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);let g=require(`ethers`);var _=async(e,t,n,r)=>{let a=[...await s.addPaddingToUtxos(e,t,n,r,6)][0],o=i.getCurrentTimeInSeconds().toString(),{outputUtxos:l}=c.outputUtxoProcessing(e.userKeys,a,r[0],o);return{inputUtxos:a,outputUtxos:l}},v=async(i,s,c,v,y,b,x)=>{let S=o.validateAndGetChainId(s),C=s.map(e=>e.erc20TokenAddress),w=s[0];if(!w)throw Error(`Solana Withdraw: No Token Found`);let{originalDeployer:T}=e.networkRegistry[S].contractData;if(!T)throw Error(`missing data`);let{userKeys:E,merkleTreeHinkalByChain:D}=i,O=b??await f.getFeeStructure(S,y,C,a.ExternalActionId.Transact),k=await p.calculateModifiedFeeStructure(S,w,-c[0],O);c[0]-=k.flatFee;let[A,{inputUtxos:j,outputUtxos:M}]=await Promise.all([i.getRandomRelay(S,!0),_(i,S,C,c)]);if(!A)throw Error(t.transactionErrorCodes.RELAYER_NOT_AVAILABLE);if(C.length>1)throw Error(`Solana Withdraw: Only one mint address is supported`);let N=r.UserKeys.findCorrectRandomization(n.randomBigInt(31),i.userKeys.getShieldedPrivateKey()),P={tokenNumber:C.length,nullifierAmount:j.length,outputAmount:M.length},F=l.calcEncryptedOutputs([M])[0][0],I=Array.from(g.ethers.getBytes(F));d.ensureAmountChanges([j],[M],c);let{proofAArr:L,proofBArr:R,proofCArr:z,publicInputsArr:B,commitmentValidationData:V}=await m.constructSolanaZkProof(i.generateProofRemotely,D[S],E,[C[0]],[j],[M],N,k.flatFee,k.variableRate,v,A,P,[I],S),H={recipient:v,mint:C[0]===`11111111111111111111111111111111`?void 0:C[0]};return h.solanaTransactCallRelayer({chainId:S,relayAddress:A,functionName:`transact`,args:{proofAArr:L,proofBArr:R,proofCArr:z,publicInputsArr:B,encryptedOutputs:[I],relayerFee:k.flatFee.toString(),dimensions:P},accounts:H,commitmentValidationData:V,adminData:u.constructAdminData(x,S,C,c,await i.getEthereumAddress())})};exports.hinkalSolanaWithdraw=v;
|
|
@@ -3,13 +3,13 @@ import "../../constants/protocol.constants.mjs";
|
|
|
3
3
|
import { transactionErrorCodes as t } from "../../error-handling/error-codes.constants.mjs";
|
|
4
4
|
import { randomBigInt as n } from "../../functions/web3/etherFunctions.mjs";
|
|
5
5
|
import { UserKeys as r } from "../crypto-keys/keys.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { getCurrentTimeInSeconds as o } from "../../functions/utils/time.utils.mjs";
|
|
6
|
+
import { getCurrentTimeInSeconds as i } from "../../functions/utils/time.utils.mjs";
|
|
7
|
+
import { ExternalActionId as a } from "../../types/external-action.types.mjs";
|
|
9
8
|
import "../../types/index.mjs";
|
|
10
|
-
import { validateAndGetChainId as
|
|
11
|
-
import { addPaddingToUtxos as
|
|
12
|
-
import { outputUtxoProcessing as
|
|
9
|
+
import { validateAndGetChainId as o } from "../../functions/utils/token-check.utils.mjs";
|
|
10
|
+
import { addPaddingToUtxos as s } from "../../functions/web3/events/getShieldedBalance.mjs";
|
|
11
|
+
import { outputUtxoProcessing as c } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
|
|
12
|
+
import { calcEncryptedOutputs as l } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
13
13
|
import { constructAdminData as u } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
14
14
|
import { ensureAmountChanges as d } from "../../functions/pre-transaction/ensureAmountChanges.mjs";
|
|
15
15
|
import { getFeeStructure as f } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
@@ -21,28 +21,28 @@ import { solanaTransactCallRelayer as h } from "../../functions/web3/functionCal
|
|
|
21
21
|
import { ethers as g } from "ethers";
|
|
22
22
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.ts
|
|
23
23
|
var _ = async (e, t, n, r) => {
|
|
24
|
-
let
|
|
24
|
+
let a = [...await s(e, t, n, r, 6)][0], o = i().toString(), { outputUtxos: l } = c(e.userKeys, a, r[0], o);
|
|
25
25
|
return {
|
|
26
|
-
inputUtxos:
|
|
27
|
-
outputUtxos:
|
|
26
|
+
inputUtxos: a,
|
|
27
|
+
outputUtxos: l
|
|
28
28
|
};
|
|
29
|
-
}, v = async (
|
|
30
|
-
let S = s
|
|
29
|
+
}, v = async (i, s, c, v, y, b, x) => {
|
|
30
|
+
let S = o(s), C = s.map((e) => e.erc20TokenAddress), w = s[0];
|
|
31
31
|
if (!w) throw Error("Solana Withdraw: No Token Found");
|
|
32
32
|
let { originalDeployer: T } = e[S].contractData;
|
|
33
33
|
if (!T) throw Error("missing data");
|
|
34
|
-
let { userKeys: E, merkleTreeHinkalByChain: D } =
|
|
35
|
-
|
|
36
|
-
let [A, { inputUtxos: j, outputUtxos: M }] = await Promise.all([
|
|
34
|
+
let { userKeys: E, merkleTreeHinkalByChain: D } = i, O = b ?? await f(S, y, C, a.Transact), k = await p(S, w, -c[0], O);
|
|
35
|
+
c[0] -= k.flatFee;
|
|
36
|
+
let [A, { inputUtxos: j, outputUtxos: M }] = await Promise.all([i.getRandomRelay(S, !0), _(i, S, C, c)]);
|
|
37
37
|
if (!A) throw Error(t.RELAYER_NOT_AVAILABLE);
|
|
38
38
|
if (C.length > 1) throw Error("Solana Withdraw: Only one mint address is supported");
|
|
39
|
-
let N = r.findCorrectRandomization(n(31),
|
|
39
|
+
let N = r.findCorrectRandomization(n(31), i.userKeys.getShieldedPrivateKey()), P = {
|
|
40
40
|
tokenNumber: C.length,
|
|
41
41
|
nullifierAmount: j.length,
|
|
42
42
|
outputAmount: M.length
|
|
43
|
-
}, F =
|
|
44
|
-
d([j], [M],
|
|
45
|
-
let { proofAArr: L, proofBArr: R, proofCArr: z, publicInputsArr: B, commitmentValidationData: V } = await m(
|
|
43
|
+
}, F = l([M])[0][0], I = Array.from(g.getBytes(F));
|
|
44
|
+
d([j], [M], c);
|
|
45
|
+
let { proofAArr: L, proofBArr: R, proofCArr: z, publicInputsArr: B, commitmentValidationData: V } = await m(i.generateProofRemotely, D[S], E, [C[0]], [j], [M], N, k.flatFee, k.variableRate, v, A, P, [I], S), H = {
|
|
46
46
|
recipient: v,
|
|
47
47
|
mint: C[0] === "11111111111111111111111111111111" ? void 0 : C[0]
|
|
48
48
|
};
|
|
@@ -61,7 +61,7 @@ var _ = async (e, t, n, r) => {
|
|
|
61
61
|
},
|
|
62
62
|
accounts: H,
|
|
63
63
|
commitmentValidationData: V,
|
|
64
|
-
adminData: u(x, S, C,
|
|
64
|
+
adminData: u(x, S, C, c, await i.getEthereumAddress())
|
|
65
65
|
});
|
|
66
66
|
};
|
|
67
67
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../functions/utils/time.utils.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../../functions/web3/events/getShieldedBalance.cjs`),i=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),a=require(`../../functions/pre-transaction/constructAdminData.cjs`),o=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const s=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),c=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),l=require(`../../functions/pre-transaction/getExternalSwapAddress.cjs`),u=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);var d=async(e,n,a,o)=>{let s=[...await r.addPaddingToUtxos(e,n,a,o)],c=[],l=t.getCurrentTimeInSeconds().toString();for(let t=0;t<a.length;t+=1){let{outputUtxos:n}=
|
|
1
|
+
require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../functions/utils/time.utils.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../../functions/web3/events/getShieldedBalance.cjs`),i=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),a=require(`../../functions/pre-transaction/constructAdminData.cjs`),o=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const s=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),c=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),l=require(`../../functions/pre-transaction/getExternalSwapAddress.cjs`),u=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);var d=async(e,n,a,o)=>{let s=[...await r.addPaddingToUtxos(e,n,a,o)],c=[],l=t.getCurrentTimeInSeconds().toString();for(let t=0;t<a.length;t+=1){let{outputUtxos:n}=i.outputUtxoProcessing(e.userKeys,s[t],o[t],l);c.push(n)}return{inputUtxosArray:s,outputUtxosArray:c}},f=async(t,r,i,f,p,m,h,g)=>{let _=n.validateAndGetChainId(r),v=r.map(e=>e.erc20TokenAddress),y=await t.getEthereumAddressByChain(_),b=h??await o.getFeeStructure(_,m,v,f,void 0,35n);await u.mergeWithFeeStructure(_,v,i,b);let x={externalActionId:f,externalAddress:l.getExternalSwapAddress(_,f),externalActionMetadata:p},[S,{inputUtxosArray:C,outputUtxosArray:w}]=await Promise.all([t.getRandomRelay(_,!0),d(t,_,v,i)]);if(!S)throw Error(e.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let T=[!1,!0,!1].slice(0,i.length),{zkCallData:E,circomData:D,dimData:O,commitmentValidationData:k}=await s.constructZkProof(t.merkleTreeHinkalByChain[_],C,w,t.userKeys,x.externalActionId,x.externalAddress,x.externalActionMetadata,t.generateProofRemotely,b,S,_,T);return await c.transactCallRelayer(_,E,O,D,k,void 0,void 0,a.constructAdminData(g,_,v,i,y,r))};exports.hinkalSwap=f;
|
|
@@ -15,7 +15,7 @@ import { mergeWithFeeStructure as u } from "../../functions/pre-transaction/merg
|
|
|
15
15
|
var d = async (e, n, a, o) => {
|
|
16
16
|
let s = [...await r(e, n, a, o)], c = [], l = t().toString();
|
|
17
17
|
for (let t = 0; t < a.length; t += 1) {
|
|
18
|
-
let { outputUtxos: n } =
|
|
18
|
+
let { outputUtxos: n } = i(e.userKeys, s[t], o[t], l);
|
|
19
19
|
c.push(n);
|
|
20
20
|
}
|
|
21
21
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/utils/time.utils.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../functions/utils/addresses.cjs`),o=require(`../../functions/utils/tron.utils.cjs`),s=require(`../../functions/utils/token-check.utils.cjs`),c=require(`../../functions/web3/events/getShieldedBalance.cjs`),l=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),u=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const p=require(`../../functions/utils/fees.utils.cjs`),m=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),h=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),g=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);var _=async(e,t,n,i,a,o)=>{let s=[...await c.addPaddingToUtxos(e,t,n,i)],u=[],d=r.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=l.outputUtxoProcessing(e.userKeys,s[t],i[t],d,!0,a,t===0?o:0n);u.push(n)}return{inputUtxosArray:s,outputUtxosArray:u}},v=async(r,c,l,v,y,b,x)=>{let S=s.validateAndGetChainId(c),C=e.isTronLike(S);if(!a.isValidPrivateAddress(v))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let w=o.addressToHexFormat(await r.getEthereumAddressByChain(S)),T=c.map(e=>e.erc20TokenAddress),E=await u.modifyVolatileTokenAmountChanges(S,c,l),D=b??await f.getFeeStructure(S,y,T,i.ExternalActionId.Transact,[],5n);D.variableRate||=t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;let O=c[0];if(!O)throw Error(`Transfer Action: No Token Found`);let k=-E[0],A=await p.calculateModifiedFeeStructure(S,O,k,D);await g.mergeWithFeeStructure(S,T,E,A);let[j,{inputUtxosArray:M,outputUtxosArray:N}]=await Promise.all([r.getRandomRelay(S,!0),_(r,S,T,E,v,k)]);if(!j)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let P={externalActionId:0n,externalAddress:j,externalActionMetadata:`0x00`},{zkCallData:F,circomData:I,dimData:L,commitmentValidationData:R}=await m.constructZkProof(r.merkleTreeHinkalByChain[S],M,N,r.userKeys,P.externalActionId,P.externalAddress,P.externalActionMetadata,r.generateProofRemotely,A,j,S),z=await o.reorderZkCallData(C,F,L,I);return await h.transactCallRelayer(S,F,L,I,R,void 0,void 0,d.constructAdminData(x,S,T,E,w),z)};exports.hinkalTransfer=v;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { isTronLike as e } from "../../constants/chains.constants.mjs";
|
|
2
2
|
import { HINKAL_PRIVATE_SEND_VARIABLE_RATE as t } from "../../constants/protocol.constants.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 { isValidPrivateAddress as a } from "../../functions/utils/addresses.mjs";
|
|
7
7
|
import { addressToHexFormat as o, reorderZkCallData as s } from "../../functions/utils/tron.utils.mjs";
|
|
8
8
|
import { validateAndGetChainId as c } from "../../functions/utils/token-check.utils.mjs";
|
|
@@ -17,32 +17,32 @@ import { constructZkProof as h } from "../../functions/snarkjs/constructGeneralZ
|
|
|
17
17
|
import { transactCallRelayer as g } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
18
18
|
import { mergeWithFeeStructure as _ } from "../../functions/pre-transaction/merge-with-fee-structure.mjs";
|
|
19
19
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalTransfer.ts
|
|
20
|
-
var v = async (e, t, n,
|
|
21
|
-
let s = [...await l(e, t, n,
|
|
20
|
+
var v = async (e, t, n, i, a, o) => {
|
|
21
|
+
let s = [...await l(e, t, n, i)], c = [], d = r().toString();
|
|
22
22
|
for (let t = 0; t < n.length; t += 1) {
|
|
23
|
-
let { outputUtxos: n } =
|
|
23
|
+
let { outputUtxos: n } = u(e.userKeys, s[t], i[t], d, !0, a, t === 0 ? o : 0n);
|
|
24
24
|
c.push(n);
|
|
25
25
|
}
|
|
26
26
|
return {
|
|
27
27
|
inputUtxosArray: s,
|
|
28
28
|
outputUtxosArray: c
|
|
29
29
|
};
|
|
30
|
-
}, y = async (
|
|
30
|
+
}, y = async (r, l, u, y, b, x, S) => {
|
|
31
31
|
let C = c(l), w = e(C);
|
|
32
32
|
if (!a(y)) throw Error(n.RECIPIENT_FORMAT_INCORRECT);
|
|
33
|
-
let T = o(await
|
|
33
|
+
let T = o(await r.getEthereumAddressByChain(C)), E = l.map((e) => e.erc20TokenAddress), D = await d(C, l, u), O = x ?? await p(C, b, E, i.Transact, [], 5n);
|
|
34
34
|
O.variableRate ||= t;
|
|
35
35
|
let k = l[0];
|
|
36
36
|
if (!k) throw Error("Transfer Action: No Token Found");
|
|
37
37
|
let A = -D[0], j = await m(C, k, A, O);
|
|
38
38
|
await _(C, E, D, j);
|
|
39
|
-
let [M, { inputUtxosArray: N, outputUtxosArray: P }] = await Promise.all([
|
|
39
|
+
let [M, { inputUtxosArray: N, outputUtxosArray: P }] = await Promise.all([r.getRandomRelay(C, !0), v(r, C, E, D, y, A)]);
|
|
40
40
|
if (!M) throw Error(n.RELAYER_NOT_AVAILABLE);
|
|
41
41
|
let F = {
|
|
42
42
|
externalActionId: 0n,
|
|
43
43
|
externalAddress: M,
|
|
44
44
|
externalActionMetadata: "0x00"
|
|
45
|
-
}, { zkCallData: I, circomData: L, dimData: R, commitmentValidationData: z } = await h(
|
|
45
|
+
}, { zkCallData: I, circomData: L, dimData: R, commitmentValidationData: z } = await h(r.merkleTreeHinkalByChain[C], N, P, r.userKeys, F.externalActionId, F.externalAddress, F.externalActionMetadata, r.generateProofRemotely, j, M, C), B = await s(w, I, R, L);
|
|
46
46
|
return await g(C, I, R, L, z, void 0, void 0, f(S, C, E, D, T), B);
|
|
47
47
|
};
|
|
48
48
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/hinkal.types.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/hinkal.types.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/utils/time.utils.cjs`),a=require(`../../types/external-action.types.cjs`),o=require(`../../functions/utils/tron.utils.cjs`),s=require(`../../functions/utils/token-check.utils.cjs`),c=require(`../../functions/web3/events/getShieldedBalance.cjs`),l=require(`../../functions/utils/hinkalTiming.utils.cjs`),u=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),d=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),f=require(`../../functions/pre-transaction/constructAdminData.cjs`),p=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const m=require(`../../functions/utils/fees.utils.cjs`),h=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),g=require(`../../functions/web3/functionCalls/transactCallDirect.cjs`),_=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),v=require(`../../functions/web3/functionCalls/transactCallDirectTron.cjs`),y=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);var b=async(e,t,n,r)=>{let a=l.createRnDeltaTiming(`withdraw.utxoPrep`),o=[...await c.addPaddingToUtxos(e,t,n,r)];a.log(`padding-done`,{inputCounts:o.map(e=>e.length)});let s=[],d=i.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=u.outputUtxoProcessing(e.userKeys,o[t],r[t],d);s.push(n)}return a.log(`outputUtxos-done`,{outputCounts:s.map(e=>e.length)}),{inputUtxosArray:o,outputUtxosArray:s}},x=async(i,c,u,x,S,C,w,T)=>{let E=s.validateAndGetChainId(c),D=e.isTronLike(E),O=o.addressToHexFormat(await i.getEthereumAddressByChain(E)),k=c.map(e=>e.erc20TokenAddress),A=await d.modifyVolatileTokenAmountChanges(E,c,u),j=c[0];if(!j)throw Error(`Deposit Action: No Token Found`);let M;if(!S){let e=w??await p.getFeeStructure(E,C,k,a.ExternalActionId.Transact);M=await m.calculateModifiedFeeStructure(E,j,-A[0],e),await y.mergeWithFeeStructure(E,k,A,M)}let N={externalActionId:0n,externalAddress:o.addressToHexFormat(x),externalActionMetadata:`0x00`},[P,{inputUtxosArray:F,outputUtxosArray:I}]=await Promise.all([i.getRandomRelay(E,!0),b(i,E,k,A)]);if(!S&&!P)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let L=l.createRnDeltaTiming(`withdraw.constructZkProof`),{zkCallData:R,circomData:z,dimData:B,commitmentValidationData:V}=await h.constructZkProof(i.merkleTreeHinkalByChain[E],F,I,i.userKeys,N.externalActionId,N.externalAddress,N.externalActionMetadata,i.generateProofRemotely,M??n.zeroFeeStructure,S?t.zeroAddress:P,E,void 0,void 0,S?O:void 0);L.log(`done`);let H=D&&S?void 0:await o.reorderZkCallData(D,R,B,z);if(S){if(!j)throw Error(`Withdraw Action: No Token Found`);return D?await v.transactCallDirectTron(i,E,A[0],j,R,z,B):await g.transactCallDirect(i,E,A[0],j,R,z,B)}let U=f.constructAdminData(T,E,k,A,O),W=l.createRnDeltaTiming(`withdraw.relayer`),G=await _.transactCallRelayer(E,R,B,z,V,void 0,void 0,U,H);return W.log(`done`,{txHash:G}),G};exports.hinkalWithdraw=x;
|
|
@@ -2,4 +2,6 @@ import { IHinkal } from './IHinkal';
|
|
|
2
2
|
import { FeeStructure } from '../../types/hinkal.types';
|
|
3
3
|
import { AdminTransactionType, ERC20Token } from '../../types';
|
|
4
4
|
import { ethers } from 'ethers';
|
|
5
|
-
export declare const hinkalWithdraw: (hinkal: IHinkal, erc20Tokens: ERC20Token[], deltaAmountsBase: bigint[],
|
|
5
|
+
export declare const hinkalWithdraw: (hinkal: IHinkal, erc20Tokens: ERC20Token[], deltaAmountsBase: bigint[], // should differentiate now: amountChanges is about off-chain utxos
|
|
6
|
+
recipientAddress: string, // for Tron this address may be passed as base58
|
|
7
|
+
isRelayerOff: boolean, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType) => Promise<ethers.TransactionResponse | string>;
|
|
@@ -2,12 +2,12 @@ import { isTronLike as e } from "../../constants/chains.constants.mjs";
|
|
|
2
2
|
import { zeroAddress as t } from "../../constants/protocol.constants.mjs";
|
|
3
3
|
import { zeroFeeStructure as n } from "../../types/hinkal.types.mjs";
|
|
4
4
|
import { transactionErrorCodes as r } from "../../error-handling/error-codes.constants.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { getCurrentTimeInSeconds as i } from "../../functions/utils/time.utils.mjs";
|
|
6
|
+
import { ExternalActionId as a } from "../../types/external-action.types.mjs";
|
|
7
7
|
import { addressToHexFormat as o, reorderZkCallData as s } from "../../functions/utils/tron.utils.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { validateAndGetChainId as c } from "../../functions/utils/token-check.utils.mjs";
|
|
9
|
+
import { addPaddingToUtxos as l } from "../../functions/web3/events/getShieldedBalance.mjs";
|
|
10
|
+
import { createRnDeltaTiming as u } from "../../functions/utils/hinkalTiming.utils.mjs";
|
|
11
11
|
import { outputUtxoProcessing as d } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
|
|
12
12
|
import { modifyVolatileTokenAmountChanges as f } from "../../functions/pre-transaction/getVolatileTransferAmount.mjs";
|
|
13
13
|
import { constructAdminData as p } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
@@ -21,45 +21,40 @@ import { transactCallDirectTron as y } from "../../functions/web3/functionCalls/
|
|
|
21
21
|
import { mergeWithFeeStructure as b } from "../../functions/pre-transaction/merge-with-fee-structure.mjs";
|
|
22
22
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalWithdraw.ts
|
|
23
23
|
var x = async (e, t, n, r) => {
|
|
24
|
-
let
|
|
24
|
+
let a = u("withdraw.utxoPrep"), o = [...await l(e, t, n, r)];
|
|
25
|
+
a.log("padding-done", { inputCounts: o.map((e) => e.length) });
|
|
26
|
+
let s = [], c = i().toString();
|
|
25
27
|
for (let t = 0; t < n.length; t += 1) {
|
|
26
|
-
let { outputUtxos: n } =
|
|
27
|
-
|
|
28
|
+
let { outputUtxos: n } = d(e.userKeys, o[t], r[t], c);
|
|
29
|
+
s.push(n);
|
|
28
30
|
}
|
|
29
|
-
return {
|
|
30
|
-
inputUtxosArray:
|
|
31
|
-
outputUtxosArray:
|
|
31
|
+
return a.log("outputUtxos-done", { outputCounts: s.map((e) => e.length) }), {
|
|
32
|
+
inputUtxosArray: o,
|
|
33
|
+
outputUtxosArray: s
|
|
32
34
|
};
|
|
33
|
-
}, S = async (
|
|
34
|
-
let D = c(
|
|
35
|
-
|
|
36
|
-
let
|
|
37
|
-
if (!N) throw Error("Deposit Action: No Token Found");
|
|
38
|
-
let P;
|
|
35
|
+
}, S = async (i, l, d, S, C, w, T, E) => {
|
|
36
|
+
let D = c(l), O = e(D), k = o(await i.getEthereumAddressByChain(D)), A = l.map((e) => e.erc20TokenAddress), j = await f(D, l, d), M = l[0];
|
|
37
|
+
if (!M) throw Error("Deposit Action: No Token Found");
|
|
38
|
+
let N;
|
|
39
39
|
if (!C) {
|
|
40
|
-
let e = T ?? await m(
|
|
41
|
-
|
|
40
|
+
let e = T ?? await m(D, w, A, a.Transact);
|
|
41
|
+
N = await h(D, M, -j[0], e), await b(D, A, j, N);
|
|
42
42
|
}
|
|
43
|
-
let
|
|
43
|
+
let P = {
|
|
44
44
|
externalActionId: 0n,
|
|
45
45
|
externalAddress: o(S),
|
|
46
46
|
externalActionMetadata: "0x00"
|
|
47
|
-
}, [
|
|
48
|
-
if (
|
|
49
|
-
let { zkCallData: z, circomData: B, dimData: V, commitmentValidationData: H } = await g(
|
|
50
|
-
|
|
51
|
-
let U =
|
|
47
|
+
}, [F, { inputUtxosArray: I, outputUtxosArray: L }] = await Promise.all([i.getRandomRelay(D, !0), x(i, D, A, j)]);
|
|
48
|
+
if (!C && !F) throw Error(r.RELAYER_NOT_AVAILABLE);
|
|
49
|
+
let R = u("withdraw.constructZkProof"), { zkCallData: z, circomData: B, dimData: V, commitmentValidationData: H } = await g(i.merkleTreeHinkalByChain[D], I, L, i.userKeys, P.externalActionId, P.externalAddress, P.externalActionMetadata, i.generateProofRemotely, N ?? n, C ? t : F, D, void 0, void 0, C ? k : void 0);
|
|
50
|
+
R.log("done");
|
|
51
|
+
let U = O && C ? void 0 : await s(O, z, V, B);
|
|
52
52
|
if (C) {
|
|
53
|
-
if (!
|
|
54
|
-
|
|
55
|
-
let e = await y(a, O, M[0], N, z, B, V);
|
|
56
|
-
return D.log("done", { txid: e }), e;
|
|
57
|
-
}
|
|
58
|
-
let e = await _(a, O, M[0], N, z, B, V);
|
|
59
|
-
return D.log("done", { txHash: e.hash }), e;
|
|
53
|
+
if (!M) throw Error("Withdraw Action: No Token Found");
|
|
54
|
+
return O ? await y(i, D, j[0], M, z, B, V) : await _(i, D, j[0], M, z, B, V);
|
|
60
55
|
}
|
|
61
|
-
let W = await v(
|
|
62
|
-
return
|
|
56
|
+
let W = p(E, D, A, j, k), G = u("withdraw.relayer"), K = await v(D, z, V, B, H, void 0, void 0, W, U);
|
|
57
|
+
return G.log("done", { txHash: K }), K;
|
|
63
58
|
};
|
|
64
59
|
//#endregion
|
|
65
60
|
export { S as hinkalWithdraw };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../functions/utils/amounts.utils.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`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../functions/utils/amounts.utils.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../../functions/utils/encodeTokenWithId.cjs`),s=require(`../../types/external-action.types.cjs`),c=require(`../../functions/utils/tron.utils.cjs`),l=require(`../../functions/web3/events/getInputUtxoAndBalance.cjs`),u=require(`../../functions/utils/token-check.utils.cjs`),d=require(`../../functions/web3/events/getShieldedBalance.cjs`),f=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),p=require(`../../functions/snarkjs/common.snarkjs.cjs`),m=require(`../../functions/pre-transaction/getFeeStructure.cjs`),h=require(`../../constants/tx-confirmation.constants.cjs`),g=require(`../../functions/utils/tx-confirmation.utils.cjs`),_=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),v=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),y=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),b=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`);let x=require(`ethers`);var S=async(e,t,n,r)=>{let i=[...await d.addPaddingToUtxos(e,t,n,r,void 0,void 0,!1,!0)],o=[],s=a.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=f.outputUtxoProcessing(e.userKeys,i[t],r[t],s);o.push(n)}return{inputUtxosArray:i,outputUtxosArray:o}},C=async(e,t,n,r)=>{let i=[...await d.addPaddingToUtxos(e,t,n,r,6,void 0,!1,!0)][0],o=a.getCurrentTimeInSeconds().toString(),{outputUtxos:s}=f.outputUtxoProcessing(e.userKeys,i,r[0],o);return{inputUtxos:i,outputUtxos:s}},w=async(t,r,i,a,o)=>{let l=e.isTronLike(r),u=[i.erc20TokenAddress],d=i.erc20TokenAddress,[f,p]=await Promise.all([m.getFeeStructure(r,d,u,s.ExternalActionId.Transact),t.getRandomRelay(r,!0)]);if(!p)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let h=c.addressToHexFormat(o),g=a-f.flatFee;if(g<=0n)throw Error(`Insufficient balance to cover fee. Balance: ${a}, Fee: ${f.flatFee}`);let v=[-g];await b.mergeWithFeeStructure(r,u,v,f);let x={externalActionId:0n,externalAddress:h,externalActionMetadata:`0x00`},{inputUtxosArray:C,outputUtxosArray:w}=await S(t,r,u,v),{zkCallData:T,circomData:E,dimData:D,commitmentValidationData:O}=await _.constructZkProof(t.merkleTreeHinkalByChain[r],C,w,t.userKeys,x.externalActionId,x.externalAddress,x.externalActionMetadata,t.generateProofRemotely,f,p,r);return{tx:await y.transactCallRelayer(r,T,D,E,O,void 0,void 0,void 0,await c.reorderZkCallData(l,T,D,E)),amountToRecipient:g}},T=async(t,a,o,c,l,u)=>{let d=[o.erc20TokenAddress],{originalDeployer:f}=e.networkRegistry[a].contractData;if(!f)throw Error(`missing data`);let{userKeys:h,merkleTreeHinkalByChain:g}=t,_=o.erc20TokenAddress,[b,S]=await Promise.all([m.getFeeStructure(a,_,d,s.ExternalActionId.Transact,void 0,void 0,{mintTo:d[0],recipient:l,nullifierCount:u}),t.getRandomRelay(a,!0)]);if(!S)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let w=c-b.flatFee;if(w<=0n)throw Error(`Insufficient balance to cover fee. Balance: ${c}, Fee: ${b.flatFee}`);let T=[-w];T[0]-=b.flatFee;let{inputUtxos:E,outputUtxos:D}=await C(t,a,d,T),O=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),t.userKeys.getShieldedPrivateKey()),k={tokenNumber:d.length,nullifierAmount:E.length,outputAmount:D.length},A=p.calcEncryptedOutputs([D])[0][0],j=Array.from(x.ethers.getBytes(A)),{proofAArr:M,proofBArr:N,proofCArr:P,publicInputsArr:F,commitmentValidationData:I}=await v.constructSolanaZkProof(t.generateProofRemotely,g[a],h,[d[0]],[E],[D],O,b.flatFee,b.variableRate,l,S,k,[j],a),L={recipient:l,mint:d[0]===`11111111111111111111111111111111`?void 0:d[0]};return{tx:await y.solanaTransactCallRelayer({chainId:a,relayAddress:S,functionName:`transact`,args:{proofAArr:M,proofBArr:N,proofCArr:P,publicInputsArr:F,encryptedOutputs:[j],relayerFee:b.flatFee.toString(),dimensions:k},accounts:L,commitmentValidationData:I}),amountToRecipient:w}},E=async(t,n,r,i,a,o)=>e.isSolanaLike(n)?T(t,n,r,i,a,o):w(t,n,r,i,a),D=async(e,n,r)=>{let i=[],a=u.validateAndGetChainId([n]),s=o.encodeTokenWithId(a,{erc20TokenAddress:n.erc20TokenAddress,tokenId:0});for(;;){await e.resetMerkleTreesIfNecessary([a]);let o=((await l.getInputUtxoAndBalancePerToken({hinkal:e,sliceIfMore6:!1,useBlockedUtxos:!0,chainId:a,allowRemoteDecryption:e.generateProofRemotely}))?.get(s)??[]).filter(e=>e.amount>0n).sort((e,t)=>Number(t.amount-e.amount)).slice(0,6),c=t.countTotalAmountInUtxos(o);if(!c)break;let{tx:u}=await E(e,a,n,c,r,o.length);await g.waitForTransactionConfirmation(a,u,{solanaCommitment:`finalized`,evmTimeoutMs:h.RELAYER_TX_CONFIRMATION_TIMEOUT}),i.push(u)}return i};exports.hinkalWithdrawStuckUtxos=D;
|