@hinkal/common 0.3.12 → 0.3.13
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/API/API.cjs +1 -1
- package/common/src/API/API.d.ts +3 -0
- package/common/src/API/API.mjs +5 -2
- package/common/src/API/evm-token-assets.cjs +1 -0
- package/common/src/API/evm-token-assets.mjs +14 -0
- package/common/src/API/index.cjs +1 -1
- package/common/src/API/index.d.ts +1 -0
- package/common/src/API/index.mjs +1 -0
- package/common/src/API/receiveVaultCalls.cjs +1 -0
- package/common/src/API/receiveVaultCalls.d.ts +10 -0
- package/common/src/API/receiveVaultCalls.mjs +32 -0
- package/common/src/constants/contracts.constants.cjs +1 -1
- package/common/src/constants/contracts.constants.mjs +5 -1
- package/common/src/constants/deploy-data/deploy-data-arbMainnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-arbMainnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-arcTestnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-arcTestnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-base.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-base.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-bnbMainnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-bnbMainnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-ethMainnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-ethMainnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-localhost.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-localhost.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-optimism.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-optimism.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-optimismTest.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-optimismTest.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-polygon.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-polygon.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-sepoliaTestnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-sepoliaTestnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-tempo.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-tempo.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-tronMainnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-tronMainnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-tronNile.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-tronNile.json.mjs +2 -1
- package/common/src/constants/deploy-data/shared-deploy-data-evm.json.cjs +1 -1
- package/common/src/constants/deploy-data/shared-deploy-data-evm.json.mjs +2 -1
- package/common/src/constants/deploy-data/shared-deploy-data-tron.json.cjs +1 -1
- package/common/src/constants/deploy-data/shared-deploy-data-tron.json.mjs +3 -2
- package/common/src/constants/events.constants.d.ts +1 -0
- package/common/src/constants/protocol.constants.cjs +1 -1
- package/common/src/constants/protocol.constants.d.ts +6 -0
- package/common/src/constants/protocol.constants.mjs +2 -2
- package/common/src/constants/server.constants.cjs +1 -1
- package/common/src/constants/server.constants.d.ts +5 -0
- package/common/src/constants/server.constants.mjs +5 -0
- package/common/src/data-structures/Hinkal/Hinkal.cjs +1 -1
- package/common/src/data-structures/Hinkal/Hinkal.d.ts +6 -2
- package/common/src/data-structures/Hinkal/Hinkal.mjs +62 -50
- package/common/src/data-structures/Hinkal/IHinkal.d.ts +6 -2
- package/common/src/data-structures/Hinkal/handleAutoDepositBack.cjs +1 -1
- package/common/src/data-structures/Hinkal/handleAutoDepositBack.mjs +10 -10
- package/common/src/data-structures/Hinkal/hinkalActionReceive.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalActionReceive.mjs +4 -4
- package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.mjs +24 -24
- package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.mjs +33 -33
- package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +8 -8
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.d.ts +1 -1
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.mjs +22 -22
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.mjs +8 -8
- package/common/src/data-structures/Hinkal/hinkalProxySwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProxySwap.mjs +5 -5
- package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.mjs +4 -4
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.cjs +1 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.d.ts +3 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.mjs +20 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.cjs +1 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.d.ts +3 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.mjs +33 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.cjs +1 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.d.ts +5 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.mjs +59 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.cjs +1 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.d.ts +6 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.mjs +8 -0
- package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.d.ts +2 -2
- package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.mjs +61 -49
- package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +7 -7
- package/common/src/data-structures/Hinkal/hinkalSolanaProxyShield.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaProxyShield.mjs +8 -8
- package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.mjs +4 -4
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransact.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransact.mjs +7 -6
- package/common/src/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransfer.mjs +4 -4
- package/common/src/data-structures/Hinkal/index.d.ts +4 -0
- package/common/src/data-structures/TokenDBs/AlchemyPublicTokensDB.d.ts +0 -3
- package/common/src/data-structures/TokenDBs/EventsPublicTokensDB.d.ts +0 -1
- package/common/src/data-structures/TokenDBs/TronPublicTokensDB.d.ts +0 -2
- package/common/src/data-structures/crypto-keys/index.cjs +1 -1
- package/common/src/data-structures/crypto-keys/index.mjs +1 -1
- package/common/src/error-handling/error-codes.constants.cjs +1 -1
- package/common/src/error-handling/error-codes.constants.d.ts +4 -0
- package/common/src/error-handling/error-codes.constants.mjs +5 -2
- package/common/src/error-handling/get-error.message.cjs +1 -1
- package/common/src/error-handling/get-error.message.mjs +50 -49
- package/common/src/functions/index.cjs +1 -1
- package/common/src/functions/index.mjs +2 -1
- package/common/src/functions/pre-transaction/build-proofless-deposit-fee.cjs +1 -0
- package/common/src/functions/pre-transaction/build-proofless-deposit-fee.d.ts +4 -0
- package/common/src/functions/pre-transaction/build-proofless-deposit-fee.mjs +3 -0
- package/common/src/functions/pre-transaction/index.cjs +1 -1
- package/common/src/functions/pre-transaction/index.d.ts +1 -0
- package/common/src/functions/pre-transaction/index.mjs +1 -0
- package/common/src/functions/snarkjs/constructTxEnclaveVerify.cjs +1 -1
- package/common/src/functions/snarkjs/constructTxEnclaveVerify.mjs +2 -1
- package/common/src/functions/utils/abi.utils.cjs +1 -1
- package/common/src/functions/utils/abi.utils.mjs +4 -1
- package/common/src/functions/utils/encryptInputForEnclave.cjs +1 -1
- package/common/src/functions/utils/encryptInputForEnclave.d.ts +2 -1
- package/common/src/functions/utils/encryptInputForEnclave.mjs +1 -1
- package/common/src/functions/utils/erc20tokenFunctions.cjs +1 -1
- package/common/src/functions/utils/erc20tokenFunctions.mjs +11 -11
- package/common/src/functions/utils/fees.utils.cjs +1 -1
- package/common/src/functions/utils/fees.utils.mjs +1 -1
- package/common/src/functions/utils/getSignerFromContract.cjs +1 -1
- package/common/src/functions/utils/getSignerFromContract.d.ts +1 -1
- package/common/src/functions/utils/getSignerFromContract.mjs +2 -2
- 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 +1 -1
- package/common/src/functions/utils/index.cjs +1 -1
- package/common/src/functions/utils/index.d.ts +1 -0
- package/common/src/functions/utils/index.mjs +2 -1
- package/common/src/functions/utils/isSigner.cjs +1 -0
- package/common/src/functions/utils/isSigner.d.ts +2 -0
- package/common/src/functions/utils/isSigner.mjs +7 -0
- package/common/src/functions/utils/receive-vault-account.utils.cjs +1 -0
- package/common/src/functions/utils/receive-vault-account.utils.d.ts +8 -0
- package/common/src/functions/utils/receive-vault-account.utils.mjs +23 -0
- package/common/src/functions/utils/receive-vault-scan.utils.cjs +1 -0
- package/common/src/functions/utils/receive-vault-scan.utils.d.ts +2 -0
- package/common/src/functions/utils/receive-vault-scan.utils.mjs +60 -0
- package/common/src/functions/utils/receive-vault.utils.cjs +2 -0
- package/common/src/functions/utils/receive-vault.utils.d.ts +29 -0
- package/common/src/functions/utils/receive-vault.utils.mjs +151 -0
- package/common/src/functions/utils/string.utils.cjs +1 -1
- package/common/src/functions/utils/string.utils.mjs +12 -4
- package/common/src/functions/utils/temporary-wallet-recovery.utils.cjs +1 -1
- package/common/src/functions/utils/temporary-wallet-recovery.utils.mjs +1 -1
- package/common/src/functions/utils/transfer-claimable.utils.cjs +1 -1
- package/common/src/functions/utils/transfer-claimable.utils.mjs +1 -1
- package/common/src/functions/utils/wallet-token-discovery.utils.cjs +1 -0
- package/common/src/functions/utils/wallet-token-discovery.utils.d.ts +4 -0
- package/common/src/functions/utils/wallet-token-discovery.utils.mjs +36 -0
- package/common/src/functions/web3/functionCalls/transactCallDirect.cjs +1 -1
- package/common/src/functions/web3/functionCalls/transactCallDirect.mjs +11 -11
- package/common/src/types/ethereum-network.types.cjs +1 -1
- package/common/src/types/ethereum-network.types.d.ts +4 -1
- package/common/src/types/ethereum-network.types.mjs +1 -1
- package/common/src/types/external-action.types.cjs +1 -1
- package/common/src/types/external-action.types.d.ts +2 -1
- package/common/src/types/external-action.types.mjs +1 -1
- package/common/src/types/index.cjs +1 -1
- package/common/src/types/index.d.ts +1 -0
- package/common/src/types/index.mjs +1 -0
- package/common/src/types/receive-vault.types.cjs +1 -0
- package/common/src/types/receive-vault.types.d.ts +68 -0
- package/common/src/types/receive-vault.types.mjs +6 -0
- package/common/src/types/remote-tx-build.types.d.ts +5 -0
- package/common/src/webworker/{logError-cvFNxc-0.js → logError-BeXPKuv9.js} +1 -1
- package/common/src/webworker/package.json +10 -1
- package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/snarkjsWorkerNode.cjs +1 -1
- 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 -3
- package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
- package/common/src/webworker/workerProxy-DF35H7vU.js +1 -0
- 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 +10 -1
- package/services/Hinkal.cjs +1 -1
- package/services/Hinkal.d.ts +1 -1
- package/services/Hinkal.mjs +2 -2
- package/types/IHinkal.d.ts +1 -1
- package/common/src/webworker/workerProxy-BHzCZ9HT.js +0 -1
|
@@ -10,11 +10,11 @@ import { API as f } from "../../API/API.mjs";
|
|
|
10
10
|
import { getErc20TokenFromAPI as p } from "../../functions/utils/erc20tokenFunctions.mjs";
|
|
11
11
|
import { AccountActions as m } from "../AccountActions/AccountActions.mjs";
|
|
12
12
|
import { getFeeStructure as h } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
13
|
+
import { calculateModifiedFeeStructure as g, calculateTotalFee as _ } from "../../functions/utils/fees.utils.mjs";
|
|
14
|
+
import { createLifiBridgeOps as v, createTransaferEmporiumOpsBatch as y } from "../../functions/private-wallet/emporium.helpers.mjs";
|
|
15
|
+
import { SWAP_ROUTER_ADDRESSES as b } from "../../constants/addresses.constants.mjs";
|
|
16
|
+
import { DEFAULT_BRIDGING_SLIPPAGE_DECIMAL as x, NEAR_BRIDGE_QUOTE_DEADLINE_BUFFER_MS as S } from "../../constants/bridging.constants.mjs";
|
|
17
|
+
import { convertEmporiumOpToCallInfo as C } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
18
18
|
import { storeClaimableKeyInEnclave as w } from "../../functions/utils/enclave-utxo-storage.mjs";
|
|
19
19
|
import { waitForBridgeArrival as T } from "../../functions/utils/bridge-arrival.utils.mjs";
|
|
20
20
|
import { buildTempSubAccountForChain as E, deriveBridgeTempWallets as D } from "../../functions/utils/temp-wallet.utils.mjs";
|
|
@@ -23,30 +23,30 @@ import { resolveNearAssetId as k } from "../../functions/utils/nearIntents.utils
|
|
|
23
23
|
import { getLifiPrice as A } from "../../functions/web3/lifiAPI.mjs";
|
|
24
24
|
import { hinkalSolanaShieldBridged as j, resolveBridgeRecipient as M } from "../../functions/utils/bridge-claimable-utxo.utils.mjs";
|
|
25
25
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.ts
|
|
26
|
-
var N = async (e, t, n, r, o, h,
|
|
27
|
-
let { chainId:
|
|
28
|
-
if (!C) throw Error(`LIFI not configured for chain ${
|
|
29
|
-
let w = c(6), { sourceSubAccount: T, destinationSubAccount: E } = D(e,
|
|
26
|
+
var N = async (e, t, n, r, o, h, g, _) => {
|
|
27
|
+
let { chainId: y } = t, x = n.chainId, S = t.erc20TokenAddress, C = b[u.Lifi][y];
|
|
28
|
+
if (!C) throw Error(`LIFI not configured for chain ${y}`);
|
|
29
|
+
let w = c(6), { sourceSubAccount: T, destinationSubAccount: E } = D(e, y, x, w), O = m.getAddressFromSubAccount(y, T), k = m.getAddressFromSubAccount(x, E);
|
|
30
30
|
if (!O || !k) throw Error("Missing temp wallet address for LIFI bridge");
|
|
31
31
|
let { lifiDataValue: j, outSwapAmountValue: M, extraNativeTokenFee: N } = await A(t, n, r, o, O, k), P = {
|
|
32
32
|
calldata: j,
|
|
33
33
|
expectedAmount: M,
|
|
34
34
|
nativeFee: N
|
|
35
|
-
}, F = s(t, r), I = Array.from(new Set([
|
|
35
|
+
}, F = s(t, r), I = Array.from(new Set([y, x])), L = l(await e.getEthereumAddress());
|
|
36
36
|
await Promise.all(I.map((e) => f.addTemporaryWalletNonce(e, L, Number(w), d.Confidential)));
|
|
37
37
|
let R = a(S, i), z = P.nativeFee > 0n && !R, B = R ? F + P.nativeFee : F, V = [t], H = [-B];
|
|
38
38
|
if (z) {
|
|
39
|
-
let e = await p(
|
|
39
|
+
let e = await p(y, i);
|
|
40
40
|
if (!e) throw Error("Native token not found for bridge fee");
|
|
41
41
|
V.push(e), H.push(-P.nativeFee);
|
|
42
42
|
}
|
|
43
|
-
let U =
|
|
43
|
+
let U = v(e, y, O, C, S, B, F, P), W = V.map((e, t) => ({
|
|
44
44
|
token: e,
|
|
45
45
|
amount: H[t]
|
|
46
46
|
}));
|
|
47
47
|
return {
|
|
48
48
|
tempSubAccount: E,
|
|
49
|
-
sourceTxHash: await e.actionPrivateWallet(
|
|
49
|
+
sourceTxHash: await e.actionPrivateWallet(y, V, H, H.map(() => !1), U, W, T, h ?? S, g, void 0, !1, void 0, _, void 0),
|
|
50
50
|
expectedAmount: P.expectedAmount
|
|
51
51
|
};
|
|
52
52
|
}, P = async (e, t, n, r, i, a, o, u) => {
|
|
@@ -54,14 +54,14 @@ var N = async (e, t, n, r, o, h, _, y) => {
|
|
|
54
54
|
if (!_) throw Error("Missing temp wallet address for NEAR bridge");
|
|
55
55
|
let v = l(await e.getEthereumAddress());
|
|
56
56
|
await f.addTemporaryWalletNonce(p, v, Number(h), d.Confidential);
|
|
57
|
-
let [y,
|
|
57
|
+
let [y, b] = await Promise.all([k(t.chainId, t.erc20TokenAddress), k(p, n.erc20TokenAddress)]), x = s(t, r), C = new Date(Date.now() + S).toISOString(), { quote: w } = await O({
|
|
58
58
|
dry: !1,
|
|
59
59
|
swapType: "EXACT_INPUT",
|
|
60
60
|
slippageTolerance: Math.round(i * 1e4) || 100,
|
|
61
61
|
originAsset: y,
|
|
62
62
|
depositType: "ORIGIN_CHAIN",
|
|
63
|
-
destinationAsset:
|
|
64
|
-
amount:
|
|
63
|
+
destinationAsset: b,
|
|
64
|
+
amount: x.toString(),
|
|
65
65
|
recipient: _,
|
|
66
66
|
recipientType: "DESTINATION_CHAIN",
|
|
67
67
|
refundTo: e.userKeys.getNearIntentsAccountId(),
|
|
@@ -69,7 +69,7 @@ var N = async (e, t, n, r, o, h, _, y) => {
|
|
|
69
69
|
deadline: C
|
|
70
70
|
});
|
|
71
71
|
if (!w.depositAddress) throw Error("NEAR Intents quote returned no deposit address");
|
|
72
|
-
let T = await e.withdraw([t], [-
|
|
72
|
+
let T = await e.withdraw([t], [-x], w.depositAddress, !1, a ?? t.erc20TokenAddress, o, void 0, u);
|
|
73
73
|
return {
|
|
74
74
|
tempSubAccount: g,
|
|
75
75
|
sourceTxHash: typeof T == "string" ? T : T.hash,
|
|
@@ -78,15 +78,15 @@ var N = async (e, t, n, r, o, h, _, y) => {
|
|
|
78
78
|
}, F = async (e, i, a, s, c) => {
|
|
79
79
|
let l = i.chainId, d = i.erc20TokenAddress, f = m.getAddressFromSubAccount(l, a);
|
|
80
80
|
if (!f) throw Error("Missing temp wallet address for bridge shield");
|
|
81
|
-
let { recipientInfo: p, claimable:
|
|
82
|
-
if (
|
|
83
|
-
let
|
|
84
|
-
if (
|
|
81
|
+
let { recipientInfo: p, claimable: v } = M(e, c);
|
|
82
|
+
if (v && await w(await e.getEthereumAddressByChain(l), v.ethAddress, v.keys.getShieldedPrivateKey(), l, v.signature, e.userKeys.getSignature()), t(l)) return j(e, i, a, s, p, r);
|
|
83
|
+
let b = y(e, l, [d], [s]), x = await g(l, i, s, await h(l, d, [d], u.Emporium, b.map((e) => C(e, f, l)), n)), S = s - _(s, x);
|
|
84
|
+
if (S <= 0n) throw Error(o.INSUFFICIENT_FUNDS_TO_TRANSACT);
|
|
85
85
|
return {
|
|
86
|
-
destTxHash: await e.proxyToPrivate([i], [
|
|
87
|
-
shieldedAmount:
|
|
86
|
+
destTxHash: await e.proxyToPrivate([i], [S], a, p, x.feeToken, x),
|
|
87
|
+
shieldedAmount: S
|
|
88
88
|
};
|
|
89
|
-
}, I = async (t, n, r, i, a, o =
|
|
89
|
+
}, I = async (t, n, r, i, a, o = x, s, c, l) => {
|
|
90
90
|
let { tempSubAccount: u, sourceTxHash: d, expectedAmount: f } = e(n.chainId) ? await P(t, n, r, i, o, s, c, l) : await N(t, n, r, i, o, s, c, l), p = m.getAddressFromSubAccount(r.chainId, u);
|
|
91
91
|
if (!p) throw Error("Missing temp wallet address for bridge");
|
|
92
92
|
let { destTxHash: h, shieldedAmount: g } = await F(t, r, u, await T(r.chainId, p, r.erc20TokenAddress, f, o), a);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../crypto/poseidon.cjs`),i=require(`../../error-handling/error-codes.constants.cjs`),a=require(`../../functions/web3/etherFunctions.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../types/external-action.types.cjs`),c=require(`../../types/transact.types.cjs`),l=require(`../../API/API.cjs`),u=require(`../../functions/utils/token-check.utils.cjs`),d=require(`../../functions/utils/erc20tokenFunctions.cjs`),f=require(`../../functions/pre-transaction/constructAdminData.cjs`),p=require(`../AccountActions/AccountActions.cjs`),m=require(`../../functions/pre-transaction/getFeeStructure.cjs`),h=require(`../../functions/pre-transaction/speculativeUtxo.cjs`),
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../crypto/poseidon.cjs`),i=require(`../../error-handling/error-codes.constants.cjs`),a=require(`../../functions/web3/etherFunctions.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../types/external-action.types.cjs`),c=require(`../../types/transact.types.cjs`),l=require(`../../API/API.cjs`),u=require(`../../functions/utils/token-check.utils.cjs`),d=require(`../../functions/utils/erc20tokenFunctions.cjs`),f=require(`../../functions/pre-transaction/constructAdminData.cjs`),p=require(`../AccountActions/AccountActions.cjs`),m=require(`../../functions/pre-transaction/getFeeStructure.cjs`),h=require(`../../functions/utils/fees.utils.cjs`),g=require(`../../functions/pre-transaction/speculativeUtxo.cjs`),_=require(`../../functions/private-wallet/emporium.helpers.cjs`),v=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),y=require(`./hinkalTransact.cjs`),b=require(`../../constants/addresses.constants.cjs`),x=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`);require(`../../functions/utils/index.cjs`);const S=require(`./hinkalDepositOnChainUtxos.cjs`);var C=async(o,u,d,m,h,v,x,S)=>{if(m.length===0)throw Error(`No recipients to bridge`);let C=d.erc20TokenAddress,{contractData:w}=e.networkRegistry[u],{emporiumAddress:T}=w;if(!T)throw Error(`No Emporium Address`);let E=b.SWAP_ROUTER_ADDRESSES[s.ExternalActionId.Lifi][u];if(!E)throw Error(`LIFI not configured for chain ${u}`);let D=await o.getRandomRelay(u);if(!D)throw Error(i.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let O=await o.getEthereumAddressByChain(u),k=o.generateProofRemotely,A=k?5:1,j=[];for(let i=0;i<m.length;i+=A){let d=m.slice(i,i+A),b=await Promise.all(d.map(async({utxo:d,nativeUtxo:m,bridgeAmount:b,quote:w,temporarySubAccount:A,recipientAddress:j,destinationChainId:M,destinationTokenAddress:N},P)=>{let F=h[i+P];await l.API.addTemporaryWalletNonce(u,v,A.index);let I=n.caseInsensitiveEqual(C,t.zeroAddress),L=w.nativeFee>0n&&!I,R=[C],z=[-d.amount],B=[!1],V=[[d]];L&&m&&(R.push(t.zeroAddress),z.push(-m.amount),B.push(!1),V.push([m]));let H=_.createLifiBridgeOps(o,u,A.ethAddress,E,C,d.amount,b,w),U=f.constructAdminData(x,u,R,[-d.amount],O),[W,G]=await Promise.all([(async()=>{let n=a.randomBigInt(31),i=k?await _.encodeEmporiumMetadata(u,T,A.privateKey,H,r.poseidonFunction(n),p.AccountActions.getSignerAddressFromPrivateKey(e.getOnchainChainId(u),A.privateKey),F.flatFee):void 0;return y.hinkalTransact(o,{chainId:u,erc20Addresses:R,amountChanges:z,externalAddress:T,externalActionId:s.ExternalActionId.Emporium,externalActionMetadata:i,onChainCreation:B,feeStructure:F,relay:D??t.zeroAddress,messageSeed:n,inputUtxos:V,useBlockedUtxos:!0,speculative:S&&{pendingLeaves:S,inputUtxos:V.map(e=>e.map(g.toSpeculativeUtxo))},subAccountPrivateKey:A.privateKey,emporiumOps:H,submit:{mode:c.SubmitMode.ProofOnly}})})(),_.getAuthorizationDataIfNeeded(u,A.privateKey)]),{zkCallData:K,circomData:q,dimData:J,commitmentValidationData:Y,tronProofSignature:X}=W;return{zkCallData:K,dimData:J,circomData:q,commitmentValidationData:Y,authorizationData:G,recipientAddress:j,adminData:U,tronProofSignature:X,destinationChainId:M,destinationTokenAddress:N,destinationTokenAmount:w.expectedAmount.toString()}}));j.push(...b)}return j},w=e=>e.map(e=>e.quote.nativeFee),T=async(e,n,r,i)=>{let{chainId:a,hashedEthereumAddress:o,feeStructures:s,mainTokenAmounts:c}=i,{needsNativeDeposit:l,txCompletionTime:u,ref:f,action:p,hashedDashboardAccountId:m,preEstimateGas:h}=i,g=[n],_=[c];if(l){let e=await d.getErc20TokenFromAPI(a,t.zeroAddress);if(!e)throw Error(`No native token`);g.push(e),_.push(w(r))}let y=await S.prepareDepositOnChainUtxos(e,a,g,_),{depositedUtxos:b,pendingLeaves:x}=y,[T,E=[]]=b,D=r.map((e,t)=>({...e,utxo:T[t],nativeUtxo:l?E[t]:void 0})),[O,k]=await Promise.all([S.submitDepositOnChainUtxos(e,y,h),C(e,a,n,D,s,o,p,x)]);return{depositTxHash:O,scheduleId:await v.transactCallRelayerBatch(a,k,o,u,f,m,O)}},E=async(e,r,i,a,c,l,d,f,p=!0)=>{if(i.length===0)throw Error(`No recipients to bridge`);let g=r.erc20TokenAddress,v=u.validateAndGetChainId([r]),y=await e.getEthereumAddressByChain(v),S=b.SWAP_ROUTER_ADDRESSES[s.ExternalActionId.Lifi][v];if(!S)throw Error(`LIFI router not configured`);let C=n.caseInsensitiveEqual(g,t.zeroAddress),w;if(c)w=c;else{let n=i[0],r=C?n.bridgeAmount+n.quote.nativeFee:n.bridgeAmount,a=_.createLifiBridgeOps(e,v,n.temporarySubAccount.ethAddress,S,g,r,n.bridgeAmount,n.quote).map(e=>x.convertEmporiumOpToCallInfo(e,n.temporarySubAccount.ethAddress,v));w=await m.getFeeStructure(v,g,[g],s.ExternalActionId.Emporium,a,t.PAY_SEND_VARIABLE_RATE)}let E=i.reduce((e,t)=>e+t.quote.nativeFee,0n),D=i.map(e=>C?e.bridgeAmount+e.quote.nativeFee:e.bridgeAmount),O=await Promise.all(D.map(e=>h.calculateModifiedFeeStructure(v,r,e,w)));return T(e,r,i,{chainId:v,ethereumAddress:y,hashedEthereumAddress:o.hashEthereumAddress(y),feeStructures:O,mainTokenAmounts:D.map((e,t)=>e+O[t].flatFee),needsNativeDeposit:E>0n&&!C,txCompletionTime:a,ref:l,action:d,hashedDashboardAccountId:f?o.hashString(f):void 0,preEstimateGas:p})};exports.hinkalDepositAndBridge=E;
|
|
@@ -13,34 +13,34 @@ import { getErc20TokenFromAPI as m } from "../../functions/utils/erc20tokenFunct
|
|
|
13
13
|
import { constructAdminData as h } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
14
14
|
import { AccountActions as g } from "../AccountActions/AccountActions.mjs";
|
|
15
15
|
import { getFeeStructure as _ } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
16
|
+
import { calculateModifiedFeeStructure as v } from "../../functions/utils/fees.utils.mjs";
|
|
17
|
+
import { toSpeculativeUtxo as y } from "../../functions/pre-transaction/speculativeUtxo.mjs";
|
|
18
|
+
import { createLifiBridgeOps as b, encodeEmporiumMetadata as x, getAuthorizationDataIfNeeded as S } from "../../functions/private-wallet/emporium.helpers.mjs";
|
|
19
|
+
import { transactCallRelayerBatch as C } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
20
|
+
import { hinkalTransact as w } from "./hinkalTransact.mjs";
|
|
21
|
+
import { SWAP_ROUTER_ADDRESSES as T } from "../../constants/addresses.constants.mjs";
|
|
22
|
+
import { convertEmporiumOpToCallInfo as E } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
23
23
|
import "../../functions/utils/index.mjs";
|
|
24
24
|
import { prepareDepositOnChainUtxos as D, submitDepositOnChainUtxos as O } from "./hinkalDepositOnChainUtxos.mjs";
|
|
25
25
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalDepositAndBridge.ts
|
|
26
|
-
var k = async (n, c, l, p, m, _,
|
|
26
|
+
var k = async (n, c, l, p, m, _, v, C) => {
|
|
27
27
|
if (p.length === 0) throw Error("No recipients to bridge");
|
|
28
28
|
let E = l.erc20TokenAddress, { contractData: D } = t[c], { emporiumAddress: O } = D;
|
|
29
29
|
if (!O) throw Error("No Emporium Address");
|
|
30
|
-
let k =
|
|
30
|
+
let k = T[u.Lifi][c];
|
|
31
31
|
if (!k) throw Error(`LIFI not configured for chain ${c}`);
|
|
32
32
|
let A = await n.getRandomRelay(c);
|
|
33
33
|
if (!A) throw Error(o.RELAYER_NOT_AVAILABLE);
|
|
34
34
|
let j = await n.getEthereumAddressByChain(c), M = n.generateProofRemotely, N = M ? 5 : 1, P = [];
|
|
35
35
|
for (let t = 0; t < p.length; t += N) {
|
|
36
|
-
let o = p.slice(t, t + N), l = await Promise.all(o.map(async ({ utxo: o, nativeUtxo: l, bridgeAmount: p, quote:
|
|
36
|
+
let o = p.slice(t, t + N), l = await Promise.all(o.map(async ({ utxo: o, nativeUtxo: l, bridgeAmount: p, quote: T, temporarySubAccount: D, recipientAddress: N, destinationChainId: P, destinationTokenAddress: F }, I) => {
|
|
37
37
|
let L = m[t + I];
|
|
38
38
|
await f.addTemporaryWalletNonce(c, _, D.index);
|
|
39
|
-
let R = i(E, r), z =
|
|
39
|
+
let R = i(E, r), z = T.nativeFee > 0n && !R, B = [E], V = [-o.amount], H = [!1], U = [[o]];
|
|
40
40
|
z && l && (B.push(r), V.push(-l.amount), H.push(!1), U.push([l]));
|
|
41
|
-
let W =
|
|
42
|
-
let t = s(31), i = M ? await
|
|
43
|
-
return
|
|
41
|
+
let W = b(n, c, D.ethAddress, k, E, o.amount, p, T), G = h(v, c, B, [-o.amount], j), [K, q] = await Promise.all([(async () => {
|
|
42
|
+
let t = s(31), i = M ? await x(c, O, D.privateKey, W, a(t), g.getSignerAddressFromPrivateKey(e(c), D.privateKey), L.flatFee) : void 0;
|
|
43
|
+
return w(n, {
|
|
44
44
|
chainId: c,
|
|
45
45
|
erc20Addresses: B,
|
|
46
46
|
amountChanges: V,
|
|
@@ -53,15 +53,15 @@ var k = async (n, c, l, p, m, _, S, T) => {
|
|
|
53
53
|
messageSeed: t,
|
|
54
54
|
inputUtxos: U,
|
|
55
55
|
useBlockedUtxos: !0,
|
|
56
|
-
speculative:
|
|
57
|
-
pendingLeaves:
|
|
58
|
-
inputUtxos: U.map((e) => e.map(
|
|
56
|
+
speculative: C && {
|
|
57
|
+
pendingLeaves: C,
|
|
58
|
+
inputUtxos: U.map((e) => e.map(y))
|
|
59
59
|
},
|
|
60
60
|
subAccountPrivateKey: D.privateKey,
|
|
61
61
|
emporiumOps: W,
|
|
62
62
|
submit: { mode: d.ProofOnly }
|
|
63
63
|
});
|
|
64
|
-
})(),
|
|
64
|
+
})(), S(c, D.privateKey)]), { zkCallData: J, circomData: Y, dimData: X, commitmentValidationData: Z, tronProofSignature: Q } = K;
|
|
65
65
|
return {
|
|
66
66
|
zkCallData: J,
|
|
67
67
|
dimData: X,
|
|
@@ -73,7 +73,7 @@ var k = async (n, c, l, p, m, _, S, T) => {
|
|
|
73
73
|
tronProofSignature: Q,
|
|
74
74
|
destinationChainId: P,
|
|
75
75
|
destinationTokenAddress: F,
|
|
76
|
-
destinationTokenAmount:
|
|
76
|
+
destinationTokenAmount: T.expectedAmount.toString()
|
|
77
77
|
};
|
|
78
78
|
}));
|
|
79
79
|
P.push(...l);
|
|
@@ -86,33 +86,33 @@ var k = async (n, c, l, p, m, _, S, T) => {
|
|
|
86
86
|
if (!e) throw Error("No native token");
|
|
87
87
|
g.push(e), _.push(A(n));
|
|
88
88
|
}
|
|
89
|
-
let v = await D(e, a, g, _), { depositedUtxos: y, pendingLeaves: b } = v, [x,
|
|
89
|
+
let v = await D(e, a, g, _), { depositedUtxos: y, pendingLeaves: b } = v, [x, S = []] = y, w = n.map((e, t) => ({
|
|
90
90
|
...e,
|
|
91
91
|
utxo: x[t],
|
|
92
|
-
nativeUtxo: l ?
|
|
92
|
+
nativeUtxo: l ? S[t] : void 0
|
|
93
93
|
})), [T, E] = await Promise.all([O(e, v, h), k(e, a, t, w, s, o, f, b)]);
|
|
94
94
|
return {
|
|
95
95
|
depositTxHash: T,
|
|
96
|
-
scheduleId: await
|
|
96
|
+
scheduleId: await C(a, E, o, u, d, p, T)
|
|
97
97
|
};
|
|
98
98
|
}, M = async (e, t, a, o, s, d, f, m, h = !0) => {
|
|
99
99
|
if (a.length === 0) throw Error("No recipients to bridge");
|
|
100
|
-
let g = t.erc20TokenAddress,
|
|
101
|
-
if (!
|
|
102
|
-
let
|
|
103
|
-
if (s)
|
|
100
|
+
let g = t.erc20TokenAddress, y = p([t]), x = await e.getEthereumAddressByChain(y), S = T[u.Lifi][y];
|
|
101
|
+
if (!S) throw Error("LIFI router not configured");
|
|
102
|
+
let C = i(g, r), w;
|
|
103
|
+
if (s) w = s;
|
|
104
104
|
else {
|
|
105
|
-
let t = a[0], r =
|
|
106
|
-
|
|
105
|
+
let t = a[0], r = C ? t.bridgeAmount + t.quote.nativeFee : t.bridgeAmount, i = b(e, y, t.temporarySubAccount.ethAddress, S, g, r, t.bridgeAmount, t.quote).map((e) => E(e, t.temporarySubAccount.ethAddress, y));
|
|
106
|
+
w = await _(y, g, [g], u.Emporium, i, n);
|
|
107
107
|
}
|
|
108
|
-
let D = a.reduce((e, t) => e + t.quote.nativeFee, 0n), O = a.map((e) =>
|
|
108
|
+
let D = a.reduce((e, t) => e + t.quote.nativeFee, 0n), O = a.map((e) => C ? e.bridgeAmount + e.quote.nativeFee : e.bridgeAmount), k = await Promise.all(O.map((e) => v(y, t, e, w)));
|
|
109
109
|
return j(e, t, a, {
|
|
110
|
-
chainId:
|
|
111
|
-
ethereumAddress:
|
|
112
|
-
hashedEthereumAddress: c(
|
|
110
|
+
chainId: y,
|
|
111
|
+
ethereumAddress: x,
|
|
112
|
+
hashedEthereumAddress: c(x),
|
|
113
113
|
feeStructures: k,
|
|
114
114
|
mainTokenAmounts: O.map((e, t) => e + k[t].flatFee),
|
|
115
|
-
needsNativeDeposit: D > 0n && !
|
|
115
|
+
needsNativeDeposit: D > 0n && !C,
|
|
116
116
|
txCompletionTime: o,
|
|
117
117
|
ref: d,
|
|
118
118
|
action: f,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../utxo/Utxo.cjs`),a=require(`../../functions/utils/tron.utils.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../types/external-action.types.cjs`),c=require(`../../types/transact.types.cjs`),l=require(
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../utxo/Utxo.cjs`),a=require(`../../functions/utils/tron.utils.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../types/external-action.types.cjs`),c=require(`../../types/transact.types.cjs`),l=require(`../crypto-keys/encryptDecryptUtxo.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/speculativeUtxo.cjs`),m=require(`../../functions/web3/functionCalls/transactCallDirectTron.cjs`),h=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),g=require(`./hinkalTransact.cjs`);require(`../../functions/index.cjs`);const _=require(`./hinkalDepositOnChainUtxos.cjs`);let v=require(`ethers`);var y=async(e,o,s,l,u,f,m,h)=>{if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let _=s.erc20TokenAddress,[v,y]=await Promise.all([e.getRandomRelay(o),e.getEthereumAddressByChain(o)]);if(!v)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let b=e.generateProofRemotely?5:1,x=[],S=a.addressToHexFormat(y);for(let r=0;r<l.length;r+=b){let s=l.slice(r,r+b),y=await Promise.all(s.map(async({recipientAddress:s,utxo:l},y)=>{let b=r+y,x=a.addressToHexFormat(s),C=n.caseInsensitiveEqual(l.erc20TokenAddress,_)?l:i.Utxo.createFrom(l,{erc20TokenAddress:_}),w=d.constructAdminData(f,o,[_],[-l.amount],S),{zkCallData:T,circomData:E,dimData:D,commitmentValidationData:O,tronProofSignature:k}=await g.hinkalTransact(e,{chainId:o,erc20Addresses:[_],amountChanges:[-l.amount],externalAddress:x,feeStructure:u,relay:v??t.zeroAddress,inputUtxos:[[C]],useBlockedUtxos:!0,speculative:h&&{pendingLeaves:h,inputUtxos:[[p.toSpeculativeUtxo(C)]]},submit:{mode:c.SubmitMode.ProofOnly},skipLock:!0});return{zkCallData:T,dimData:D,circomData:E,commitmentValidationData:O,adminData:w,recipientAddress:s,tronProofSignature:k,destinationChainId:m?.chainId,destinationTokenAddress:m?.tokenAddress,destinationTokenAmount:m?.tokenAmounts?.[b]}}));x.push(...y)}return x},b=async(e,t,n,r,i)=>{let{chainId:a,hashedEthereumAddress:o,feeStructure:s,action:c,destination:l}=i,{txCompletionTime:u,ref:d,hashedDashboardAccountId:f,preEstimateGas:p}=i,m=n.map(e=>e+s.flatFee),g=await _.prepareDepositOnChainUtxos(e,a,[t],[m]),{depositedUtxos:v,pendingLeaves:b}=g,x=v[0].map((e,t)=>({recipientAddress:r[t],utxo:e})),[S,C]=await Promise.all([_.submitDepositOnChainUtxos(e,g,p),y(e,a,t,x,s,c,l,b)]);return{depositTxHash:S,scheduleId:await h.transactCallRelayerBatch(a,C,o,u,d,f,S)}},x=async(e,t,n,r,i)=>{let{chainId:o,ethereumAddress:s,hashedEthereumAddress:u,feeStructure:d,action:f,destination:p}=i,{txCompletionTime:_,ref:b,hashedDashboardAccountId:x,preEstimateGas:S}=i,C=n.map(e=>e+d.flatFee),w=C.reduce((e,t)=>e+t,0n),T=await g.hinkalTransact(e,{chainId:o,erc20Addresses:[t.erc20TokenAddress],amountChanges:[w],externalAddress:s,selfOutputAmounts:C,createBlockedUtxos:!0,forceEmptyUtxos:!0,submit:{mode:c.SubmitMode.ProofOnly}}),E=T.circomData.encryptedOutputs?.[0];if(!E||E.length!==C.length)throw Error(`Deposit proof is missing encryptedOutputs for the deposited UTXOs`);let D=E.map((t,n)=>({recipientAddress:r[n],utxo:l.decryptUtxo(v.ethers.getBytes(t),e.userKeys)})),O=T.circomData.outCommitments.flat().map(e=>BigInt(e)).filter(e=>e!==0n).map(e=>e.toString()),[k,A]=await Promise.all([(async()=>{a.swapTronBCoordinate(T.zkCallData);let n=await m.transactCallDirectTron(e,o,w,t,T.zkCallData,T.circomData,T.dimData,void 0,void 0,S,T.tronProofSignature);if(!n)throw Error(`Deposit transaction hash not found`);return n})(),y(e,o,t,D,d,f,p,O)]);return{depositTxHash:k,scheduleId:await h.transactCallRelayerBatch(o,A,u,_,b,x,k)}},S=async(t,n,r,i,c,l,d,p,m,h=!0,g)=>{let _=u.validateAndGetChainId([n]),v=n.erc20TokenAddress,y=a.addressToHexFormat(await t.getEthereumAddressByChain(_)),S={chainId:_,ethereumAddress:y,hashedEthereumAddress:o.hashEthereumAddress(y),feeStructure:l??await f.getFeeStructure(_,v,[v],s.ExternalActionId.Transact,[],25n),txCompletionTime:c,ref:d,action:p,hashedDashboardAccountId:m?o.hashString(m):void 0,preEstimateGas:h,destination:g};if(!e.isTronLike(_))return b(t,n,r,i,S);if(r.length>4)throw Error(`Tron supports at most 4 recipients per deposit - no circuit emits more outputs`);return x(t,n,r,i,S)};exports.hinkalDepositAndWithdraw=S;
|
|
@@ -7,8 +7,8 @@ import { addressToHexFormat as a, swapTronBCoordinate as o } from "../../functio
|
|
|
7
7
|
import { hashEthereumAddress as s, hashString as c } from "../../functions/utils/addresses.mjs";
|
|
8
8
|
import { ExternalActionId as l } from "../../types/external-action.types.mjs";
|
|
9
9
|
import { SubmitMode as u } from "../../types/transact.types.mjs";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { decryptUtxo as d } from "../crypto-keys/encryptDecryptUtxo.mjs";
|
|
11
|
+
import { validateAndGetChainId as f } from "../../functions/utils/token-check.utils.mjs";
|
|
12
12
|
import { constructAdminData as p } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
13
13
|
import { getFeeStructure as m } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
14
14
|
import { toSpeculativeUtxo as h } from "../../functions/pre-transaction/speculativeUtxo.mjs";
|
|
@@ -68,7 +68,7 @@ var S = async (e, o, s, c, l, d, f, m) => {
|
|
|
68
68
|
scheduleId: await _(a, w, o, u, d, f, C)
|
|
69
69
|
};
|
|
70
70
|
}, w = async (e, t, n, r, i) => {
|
|
71
|
-
let { chainId: a, ethereumAddress: s, hashedEthereumAddress: c, feeStructure: l, action:
|
|
71
|
+
let { chainId: a, ethereumAddress: s, hashedEthereumAddress: c, feeStructure: l, action: f, destination: p } = i, { txCompletionTime: m, ref: h, hashedDashboardAccountId: y, preEstimateGas: b } = i, C = n.map((e) => e + l.flatFee), w = C.reduce((e, t) => e + t, 0n), T = await v(e, {
|
|
72
72
|
chainId: a,
|
|
73
73
|
erc20Addresses: [t.erc20TokenAddress],
|
|
74
74
|
amountChanges: [w],
|
|
@@ -81,25 +81,25 @@ var S = async (e, o, s, c, l, d, f, m) => {
|
|
|
81
81
|
if (!E || E.length !== C.length) throw Error("Deposit proof is missing encryptedOutputs for the deposited UTXOs");
|
|
82
82
|
let D = E.map((t, n) => ({
|
|
83
83
|
recipientAddress: r[n],
|
|
84
|
-
utxo:
|
|
84
|
+
utxo: d(x.getBytes(t), e.userKeys)
|
|
85
85
|
})), O = T.circomData.outCommitments.flat().map((e) => BigInt(e)).filter((e) => e !== 0n).map((e) => e.toString()), [k, A] = await Promise.all([(async () => {
|
|
86
86
|
o(T.zkCallData);
|
|
87
87
|
let n = await g(e, a, w, t, T.zkCallData, T.circomData, T.dimData, void 0, void 0, b, T.tronProofSignature);
|
|
88
88
|
if (!n) throw Error("Deposit transaction hash not found");
|
|
89
89
|
return n;
|
|
90
|
-
})(), S(e, a, t, D, l,
|
|
90
|
+
})(), S(e, a, t, D, l, f, p, O)]);
|
|
91
91
|
return {
|
|
92
92
|
depositTxHash: k,
|
|
93
93
|
scheduleId: await _(a, A, c, m, h, y, k)
|
|
94
94
|
};
|
|
95
|
-
}, T = async (t, n, r, i, o, u,
|
|
96
|
-
let v =
|
|
95
|
+
}, T = async (t, n, r, i, o, u, d, p, h, g = !0, _) => {
|
|
96
|
+
let v = f([n]), y = n.erc20TokenAddress, b = a(await t.getEthereumAddressByChain(v)), x = {
|
|
97
97
|
chainId: v,
|
|
98
98
|
ethereumAddress: b,
|
|
99
99
|
hashedEthereumAddress: s(b),
|
|
100
100
|
feeStructure: u ?? await m(v, y, [y], l.Transact, [], 25n),
|
|
101
101
|
txCompletionTime: o,
|
|
102
|
-
ref:
|
|
102
|
+
ref: d,
|
|
103
103
|
action: p,
|
|
104
104
|
hashedDashboardAccountId: h ? c(h) : void 0,
|
|
105
105
|
preEstimateGas: g,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/hinkal.types.cjs`),r=require(`../../functions/utils/caseInsensitive.utils.cjs`),i=require(`../../types/ethereum-network.types.cjs`),a=require(`../../functions/utils/token-check.utils.cjs`),o=require(`../../functions/pre-transaction/constructAdminData.cjs`),s=require(`../../functions/utils/getContractAddress.cjs`),c=require(`../../functions/web3/functionCalls/constructBatchCall.cjs`),l=require(`../../functions/web3/functionCalls/waitForErc20Approvals.cjs`),u=require(`../../API/admin-calls.cjs`),d=require(`../../functions/utils/getRecipientInfoFromUserKeys.cjs`),f=require(`./hinkalProoflessDeposit.utils.cjs`);var p=async(p,m,h,g,_,v=!1,y=n.zeroProoflessFeeStructure,b=``,x,S=!1)=>{let
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/hinkal.types.cjs`),r=require(`../../functions/utils/caseInsensitive.utils.cjs`),i=require(`../../types/ethereum-network.types.cjs`),a=require(`../../functions/utils/token-check.utils.cjs`),o=require(`../../functions/pre-transaction/constructAdminData.cjs`),s=require(`../../functions/utils/getContractAddress.cjs`),c=require(`../../functions/web3/functionCalls/constructBatchCall.cjs`),l=require(`../../functions/web3/functionCalls/waitForErc20Approvals.cjs`),u=require(`../../API/admin-calls.cjs`),d=require(`../../functions/utils/getRecipientInfoFromUserKeys.cjs`),f=require(`./hinkalProoflessDeposit.utils.cjs`);var p=async(p,m,h,g,_,v=!1,y=n.zeroProoflessFeeStructure,b=``,x,S=!1,C=!1)=>{let w=a.validateAndGetChainId(m);if(e.isTronLike(w))throw Error(`Proofless deposit is not supported on Tron`);let T=await p.getEthereumAddressByChain(w),E=g??m.map(()=>d.getStealthAddressStructureFromUserKeys(p.userKeys));if(E.length!==m.length)throw Error(`Stealth address structures length must be equal to erc20 tokens length`);if(S||f.assertNoDuplicateStealthAddressStructures(E),g&&!_)throw Error(`recipientEncryptionKeysOverride is required whenever stealthAddressStructuresOverride is provided`);if(_&&_.length!==m.length)throw Error(`recipientEncryptionKeysOverride length must be equal to erc20 tokens length`);let D=f.buildProoflessEncryptedOutputs(E,_??f.getOwnRecipientEncryptionKeys(p.userKeys,m.length)),O=y.feeAmount>0n,k=O?p.getContractWithSigner(w,i.ContractType.HinkalWrapperContract):p.getContractWithSigner(w,i.ContractType.HinkalContract),A=O?[m.map(({erc20TokenAddress:e})=>e),h,E,D,v,y,b]:[m.map(({erc20TokenAddress:e})=>e),h,E,D,v,b],j=r.caseInsensitiveEqual(y.feeToken,t.zeroAddress),M=m.reduce((e,n,i)=>r.caseInsensitiveEqual(n.erc20TokenAddress,t.zeroAddress)?e+h[i]:e,0n)+(j?y.feeAmount:0n);if(C)return k.prooflessDeposit.populateTransaction(...A,{value:M>0n?M:void 0});let N=p.getProviderAdapter(w),P=f.aggregateAmountsForApproval(!j&&y.feeAmount>0n?[...m,{erc20TokenAddress:y.feeToken,chainId:w}]:m,!j&&y.feeAmount>0n?[...h,y.feeAmount]:h),F=P.filter(({token:e,balance:n})=>!r.caseInsensitiveEqual(e.erc20TokenAddress,t.zeroAddress)&&n>0n),I;if(F.length>0&&await N.supportsBatchCall?.(w)&&N.sendBatchCallsTransaction){let e=c.buildApproveAndProoflessDepositCalls(F.map(({token:e})=>e.erc20TokenAddress),F.map(({balance:e})=>e),s.getContractAddress(k),k,m.map(({erc20TokenAddress:e})=>e),h,E,D,v,O?y:void 0,b,M);I=await N.sendBatchCallsTransaction(w,e)}else{await f.approveTokens(p,w,s.getContractAddress(k),P);let e=await p.getEthereumAddressByChain(w),t=P.map(({token:e,balance:t})=>({tokenAddress:e.erc20TokenAddress,requiredAmount:t}));await l.waitForErc20Approvals(p,w,e,s.getContractAddress(k),t),I=await k.prooflessDeposit(...A,{value:M>0n?M:void 0})}let L=I.hash;return u.emitTxPublicData(o.constructAdminData(x,w,m.map(({erc20TokenAddress:e})=>e),h,T)),L};exports.hinkalProoflessDeposit=p;
|
|
@@ -4,4 +4,4 @@ import { IHinkal } from './IHinkal';
|
|
|
4
4
|
import { StealthAddressStructure } from '../../types/circom-data.types';
|
|
5
5
|
import { ProoflessFeeStructure } from '../../types/hinkal.types';
|
|
6
6
|
import { AdminTransactionType } from '../../types/admin.types';
|
|
7
|
-
export declare const hinkalProoflessDeposit: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChanges: bigint[], stealthAddressStructuresOverride?: StealthAddressStructure[], recipientEncryptionKeysOverride?: string[], createBlockedUtxos?: boolean, feeStructure?: ProoflessFeeStructure, orderId?: string, action?: AdminTransactionType, returnTxData?: boolean) => Promise<string | ethers.TransactionRequest>;
|
|
7
|
+
export declare const hinkalProoflessDeposit: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChanges: bigint[], stealthAddressStructuresOverride?: StealthAddressStructure[], recipientEncryptionKeysOverride?: string[], createBlockedUtxos?: boolean, feeStructure?: ProoflessFeeStructure, orderId?: string, action?: AdminTransactionType, skipDuplicateCheck?: boolean, returnTxData?: boolean) => Promise<string | ethers.TransactionRequest>;
|
|
@@ -12,47 +12,47 @@ import { emitTxPublicData as u } from "../../API/admin-calls.mjs";
|
|
|
12
12
|
import { getStealthAddressStructureFromUserKeys as d } from "../../functions/utils/getRecipientInfoFromUserKeys.mjs";
|
|
13
13
|
import { aggregateAmountsForApproval as f, approveTokens as p, assertNoDuplicateStealthAddressStructures as m, buildProoflessEncryptedOutputs as h, getOwnRecipientEncryptionKeys as g } from "./hinkalProoflessDeposit.utils.mjs";
|
|
14
14
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalProoflessDeposit.ts
|
|
15
|
-
var _ = async (_, v, y, b, x, S = !1, C = n, w = "", T, E = !1) => {
|
|
16
|
-
let
|
|
17
|
-
if (e(
|
|
18
|
-
let
|
|
19
|
-
if (
|
|
20
|
-
if (m(
|
|
15
|
+
var _ = async (_, v, y, b, x, S = !1, C = n, w = "", T, E = !1, D = !1) => {
|
|
16
|
+
let O = a(v);
|
|
17
|
+
if (e(O)) throw Error("Proofless deposit is not supported on Tron");
|
|
18
|
+
let k = await _.getEthereumAddressByChain(O), A = b ?? v.map(() => d(_.userKeys));
|
|
19
|
+
if (A.length !== v.length) throw Error("Stealth address structures length must be equal to erc20 tokens length");
|
|
20
|
+
if (E || m(A), b && !x) throw Error("recipientEncryptionKeysOverride is required whenever stealthAddressStructuresOverride is provided");
|
|
21
21
|
if (x && x.length !== v.length) throw Error("recipientEncryptionKeysOverride length must be equal to erc20 tokens length");
|
|
22
|
-
let
|
|
22
|
+
let j = h(A, x ?? g(_.userKeys, v.length)), M = C.feeAmount > 0n, N = M ? _.getContractWithSigner(O, i.HinkalWrapperContract) : _.getContractWithSigner(O, i.HinkalContract), P = M ? [
|
|
23
23
|
v.map(({ erc20TokenAddress: e }) => e),
|
|
24
24
|
y,
|
|
25
|
-
k,
|
|
26
25
|
A,
|
|
26
|
+
j,
|
|
27
27
|
S,
|
|
28
28
|
C,
|
|
29
29
|
w
|
|
30
30
|
] : [
|
|
31
31
|
v.map(({ erc20TokenAddress: e }) => e),
|
|
32
32
|
y,
|
|
33
|
-
k,
|
|
34
33
|
A,
|
|
34
|
+
j,
|
|
35
35
|
S,
|
|
36
36
|
w
|
|
37
|
-
],
|
|
38
|
-
if (
|
|
39
|
-
let
|
|
37
|
+
], F = r(C.feeToken, t), I = v.reduce((e, n, i) => r(n.erc20TokenAddress, t) ? e + y[i] : e, 0n) + (F ? C.feeAmount : 0n);
|
|
38
|
+
if (D) return N.prooflessDeposit.populateTransaction(...P, { value: I > 0n ? I : void 0 });
|
|
39
|
+
let L = _.getProviderAdapter(O), R = f(!F && C.feeAmount > 0n ? [...v, {
|
|
40
40
|
erc20TokenAddress: C.feeToken,
|
|
41
|
-
chainId:
|
|
42
|
-
}] : v, !
|
|
43
|
-
if (
|
|
44
|
-
let e = c(
|
|
45
|
-
|
|
41
|
+
chainId: O
|
|
42
|
+
}] : v, !F && C.feeAmount > 0n ? [...y, C.feeAmount] : y), z = R.filter(({ token: e, balance: n }) => !r(e.erc20TokenAddress, t) && n > 0n), B;
|
|
43
|
+
if (z.length > 0 && await L.supportsBatchCall?.(O) && L.sendBatchCallsTransaction) {
|
|
44
|
+
let e = c(z.map(({ token: e }) => e.erc20TokenAddress), z.map(({ balance: e }) => e), s(N), N, v.map(({ erc20TokenAddress: e }) => e), y, A, j, S, M ? C : void 0, w, I);
|
|
45
|
+
B = await L.sendBatchCallsTransaction(O, e);
|
|
46
46
|
} else {
|
|
47
|
-
await p(_,
|
|
48
|
-
let e = await _.getEthereumAddressByChain(
|
|
47
|
+
await p(_, O, s(N), R);
|
|
48
|
+
let e = await _.getEthereumAddressByChain(O), t = R.map(({ token: e, balance: t }) => ({
|
|
49
49
|
tokenAddress: e.erc20TokenAddress,
|
|
50
50
|
requiredAmount: t
|
|
51
51
|
}));
|
|
52
|
-
await l(_,
|
|
52
|
+
await l(_, O, e, s(N), t), B = await N.prooflessDeposit(...P, { value: I > 0n ? I : void 0 });
|
|
53
53
|
}
|
|
54
|
-
let
|
|
55
|
-
return u(o(T,
|
|
54
|
+
let V = B.hash;
|
|
55
|
+
return u(o(T, O, v.map(({ erc20TokenAddress: e }) => e), y, k)), V;
|
|
56
56
|
};
|
|
57
57
|
//#endregion
|
|
58
58
|
export { _ as hinkalProoflessDeposit };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../crypto-keys/keys.cjs`),r=require(`../../types/ethereum-network.types.cjs`),i=require(
|
|
1
|
+
const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../crypto-keys/keys.cjs`),r=require(`../../types/ethereum-network.types.cjs`),i=require(`../crypto-keys/encryptDecryptUtxo.cjs`),a=require(`../../functions/utils/token-check.utils.cjs`);require(`../../externalABIs/index.cjs`);const o=require(`../../functions/utils/tx-confirmation.utils.cjs`);var s=(e,t)=>{if(e.length!==t.length)throw Error(`stealthAddressStructures and recipientEncryptionKeys must have equal length`);return e.map((e,n)=>{let r=t[n];if(!r)throw Error(`Missing encryptionKey for proofless deposit output ${n}: required so the enclave can attribute this UTXO to its owner`);return`0x${Buffer.from(i.encryptEncryptionKeyAndStealthAddress(r,e.stealthAddress)).toString(`hex`)}`})},c=(e,t)=>{let r=n.UserKeys.getEncryptionKeyPair(e.getShieldedPrivateKey()).publicKey;return Array.from({length:t},()=>r)},l=(e,t)=>{let n=[],r=0;for(let i=0;i<e.length;i+=1){let o=!1;for(let s=0;s<r;s+=1)if(a.isSameERC20Token(n[s].token,e[i])){n[s].balance+=t[i],o=!0;break}o||(n[r]={token:e[i],balance:t[i]},r+=1)}return n},u=async(n,i,a,s)=>{for(let c=0;c<s.length;c+=1)t.caseInsensitiveEqual(s[c].token.erc20TokenAddress,e.zeroAddress)||await o.waitForEthereumTransactionConfirmation(i,(await n.getContractWithSigner(i,r.ContractType.ERC20Contract,s[c].token.erc20TokenAddress).approve(a,s[c].balance)).hash)},d=e=>{let t=new Set;e.forEach(({H0x:e,stealthAddress:n})=>{let r=`${e.toString()}:${n.toString()}`;if(t.has(r))throw Error(`Duplicate randomization and stealth address pair detected in stealthAddressStructures`);t.add(r)})};exports.aggregateAmountsForApproval=l,exports.approveTokens=u,exports.assertNoDuplicateStealthAddressStructures=d,exports.buildProoflessEncryptedOutputs=s,exports.getOwnRecipientEncryptionKeys=c;
|
|
@@ -2,8 +2,8 @@ import { zeroAddress as e } from "../../constants/protocol.constants.mjs";
|
|
|
2
2
|
import { caseInsensitiveEqual as t } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
3
3
|
import { UserKeys as n } from "../crypto-keys/keys.mjs";
|
|
4
4
|
import { ContractType as r } from "../../types/ethereum-network.types.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { encryptEncryptionKeyAndStealthAddress as i } from "../crypto-keys/encryptDecryptUtxo.mjs";
|
|
6
|
+
import { isSameERC20Token as a } from "../../functions/utils/token-check.utils.mjs";
|
|
7
7
|
import "../../externalABIs/index.mjs";
|
|
8
8
|
import { waitForEthereumTransactionConfirmation as o } from "../../functions/utils/tx-confirmation.utils.mjs";
|
|
9
9
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.ts
|
|
@@ -12,22 +12,22 @@ var s = (e, t) => {
|
|
|
12
12
|
return e.map((e, n) => {
|
|
13
13
|
let r = t[n];
|
|
14
14
|
if (!r) throw Error(`Missing encryptionKey for proofless deposit output ${n}: required so the enclave can attribute this UTXO to its owner`);
|
|
15
|
-
return `0x${Buffer.from(
|
|
15
|
+
return `0x${Buffer.from(i(r, e.stealthAddress)).toString("hex")}`;
|
|
16
16
|
});
|
|
17
17
|
}, c = (e, t) => {
|
|
18
18
|
let r = n.getEncryptionKeyPair(e.getShieldedPrivateKey()).publicKey;
|
|
19
19
|
return Array.from({ length: t }, () => r);
|
|
20
20
|
}, l = (e, t) => {
|
|
21
21
|
let n = [], r = 0;
|
|
22
|
-
for (let
|
|
22
|
+
for (let i = 0; i < e.length; i += 1) {
|
|
23
23
|
let o = !1;
|
|
24
|
-
for (let s = 0; s < r; s += 1) if (
|
|
25
|
-
n[s].balance += t[
|
|
24
|
+
for (let s = 0; s < r; s += 1) if (a(n[s].token, e[i])) {
|
|
25
|
+
n[s].balance += t[i], o = !0;
|
|
26
26
|
break;
|
|
27
27
|
}
|
|
28
28
|
o || (n[r] = {
|
|
29
|
-
token: e[
|
|
30
|
-
balance: t[
|
|
29
|
+
token: e[i],
|
|
30
|
+
balance: t[i]
|
|
31
31
|
}, r += 1);
|
|
32
32
|
}
|
|
33
33
|
return n;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../types/external-action.types.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../AccountActions/AccountActions.cjs`),i=require(`../../functions/pre-transaction/getFeeStructure.cjs`),a=require(`../../
|
|
1
|
+
require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../types/external-action.types.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../AccountActions/AccountActions.cjs`),i=require(`../../functions/pre-transaction/getFeeStructure.cjs`),a=require(`../../functions/utils/fees.utils.cjs`),o=require(`../../constants/addresses.constants.cjs`),s=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),c=require(`../../functions/private-wallet/emporium.swap.helpers.cjs`);var l=async(l,u,d,f,p,m,h,g,_,v=!1,y,b,x,S)=>{if(!g)throw Error(`Fee token is required in hinkalProxySwap`);let C=n.validateAndGetChainId(u),w=r.AccountActions.getAddressFromSubAccount(C,h);if(!w)throw Error(`Public account address is not available`);let T=u.map(e=>e.erc20TokenAddress),E=await l.getRandomRelay(C,!0);if(!E)throw Error(e.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let D=await c.createSwapToEmporiumOps(l,C,f,o.SWAP_ROUTER_ADDRESSES[f][C],p,T[0],d[0],d[1],T[1],m,w,E,!0),O=_??await i.getFeeStructure(C,g,T,t.ExternalActionId.Emporium,D.map(e=>s.convertEmporiumOpToCallInfo(e,w,C)),35n),k=u.map((e,t)=>({token:e,amount:d[t]})),A=x&&S!==void 0?await a.calculateModifiedFeeStructure(C,x,S,O):O;return l.actionPrivateWallet(C,[],[],[],D,k,h,g,A,E,v,y,b,void 0)};exports.hinkalProxySwap=l;
|
|
@@ -4,9 +4,9 @@ import { ExternalActionId as t } from "../../types/external-action.types.mjs";
|
|
|
4
4
|
import { validateAndGetChainId as n } from "../../functions/utils/token-check.utils.mjs";
|
|
5
5
|
import { AccountActions as r } from "../AccountActions/AccountActions.mjs";
|
|
6
6
|
import { getFeeStructure as i } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { calculateModifiedFeeStructure as a } from "../../functions/utils/fees.utils.mjs";
|
|
8
|
+
import { SWAP_ROUTER_ADDRESSES as o } from "../../constants/addresses.constants.mjs";
|
|
9
|
+
import { convertEmporiumOpToCallInfo as s } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
10
10
|
import { createSwapToEmporiumOps as c } from "../../functions/private-wallet/emporium.swap.helpers.mjs";
|
|
11
11
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalProxySwap.ts
|
|
12
12
|
var l = async (l, u, d, f, p, m, h, g, _, v = !1, y, b, x, S) => {
|
|
@@ -15,10 +15,10 @@ var l = async (l, u, d, f, p, m, h, g, _, v = !1, y, b, x, S) => {
|
|
|
15
15
|
if (!w) throw Error("Public account address is not available");
|
|
16
16
|
let T = u.map((e) => e.erc20TokenAddress), E = await l.getRandomRelay(C, !0);
|
|
17
17
|
if (!E) throw Error(e.RELAYER_NOT_AVAILABLE);
|
|
18
|
-
let D = await c(l, C, f,
|
|
18
|
+
let D = await c(l, C, f, o[f][C], p, T[0], d[0], d[1], T[1], m, w, E, !0), O = _ ?? await i(C, g, T, t.Emporium, D.map((e) => s(e, w, C)), 35n), k = u.map((e, t) => ({
|
|
19
19
|
token: e,
|
|
20
20
|
amount: d[t]
|
|
21
|
-
})), A = x && S !== void 0 ? await
|
|
21
|
+
})), A = x && S !== void 0 ? await a(C, x, S, O) : O;
|
|
22
22
|
return l.actionPrivateWallet(C, [], [], [], D, k, h, g, A, E, v, y, b, void 0);
|
|
23
23
|
};
|
|
24
24
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../functions/utils/addresses.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/token-check.utils.cjs`),i=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),a=require(`../AccountActions/AccountActions.cjs`),o=require(`../../functions/pre-transaction/getFeeStructure.cjs`),s=require(`../../functions/
|
|
1
|
+
require(`../../constants/protocol.constants.cjs`);const e=require(`../../error-handling/error-codes.constants.cjs`),t=require(`../../functions/utils/addresses.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/token-check.utils.cjs`),i=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),a=require(`../AccountActions/AccountActions.cjs`),o=require(`../../functions/pre-transaction/getFeeStructure.cjs`),s=require(`../../functions/utils/fees.utils.cjs`),c=require(`../../functions/private-wallet/emporium.helpers.cjs`),l=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`);var u=async(u,d,f,p,m,h,g,_)=>{if(!g)throw Error(`hinkalProxyToPrivate: subAccount should be provided`);if(!m)throw Error(`Fee token is required in hinkalProxyToPrivate`);if(!t.isValidPrivateAddress(p))throw Error(e.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let v=r.validateAndGetChainId(d),y=a.AccountActions.getAddressFromSubAccount(v,g);if(!y)throw Error(`Public account address is not available`);let b=d.map(e=>e.erc20TokenAddress),x=await i.modifyVolatileTokenAmountChanges(v,d,f,y),S=c.createTransaferEmporiumOpsBatch(u,v,b,x),C=await s.calculateModifiedFeeStructureForTokens(v,d,x,h??await o.getFeeStructure(v,m,b,n.ExternalActionId.Emporium,S.map(e=>l.convertEmporiumOpToCallInfo(e,y,v)),25n)),w=d.map((e,t)=>({token:e,amount:-1n*x[t]}));return u.actionPrivateWallet(v,[d[0]],[0n],[!1],S,w,g,m,C,void 0,void 0,void 0,_,{recipientInfo:p,amount:x[0],token:d[0]})};exports.hinkalProxyToPrivate=u;
|
|
@@ -6,9 +6,9 @@ import { validateAndGetChainId as r } from "../../functions/utils/token-check.ut
|
|
|
6
6
|
import { modifyVolatileTokenAmountChanges as i } from "../../functions/pre-transaction/getVolatileTransferAmount.mjs";
|
|
7
7
|
import { AccountActions as a } from "../AccountActions/AccountActions.mjs";
|
|
8
8
|
import { getFeeStructure as o } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { calculateModifiedFeeStructureForTokens as s } from "../../functions/utils/fees.utils.mjs";
|
|
10
|
+
import { createTransaferEmporiumOpsBatch as c } from "../../functions/private-wallet/emporium.helpers.mjs";
|
|
11
|
+
import { convertEmporiumOpToCallInfo as l } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
12
12
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalProxyToPrivate.ts
|
|
13
13
|
var u = async (u, d, f, p, m, h, g, _) => {
|
|
14
14
|
if (!g) throw Error("hinkalProxyToPrivate: subAccount should be provided");
|
|
@@ -16,7 +16,7 @@ var u = async (u, d, f, p, m, h, g, _) => {
|
|
|
16
16
|
if (!t(p)) throw Error(e.RECIPIENT_FORMAT_INCORRECT);
|
|
17
17
|
let v = r(d), y = a.getAddressFromSubAccount(v, g);
|
|
18
18
|
if (!y) throw Error("Public account address is not available");
|
|
19
|
-
let b = d.map((e) => e.erc20TokenAddress), x = await i(v, d, f, y), S =
|
|
19
|
+
let b = d.map((e) => e.erc20TokenAddress), x = await i(v, d, f, y), S = c(u, v, b, x), C = await s(v, d, x, h ?? await o(v, m, b, n.Emporium, S.map((e) => l(e, y, v)), 25n)), w = d.map((e, t) => ({
|
|
20
20
|
token: e,
|
|
21
21
|
amount: -1n * x[t]
|
|
22
22
|
}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../../functions/utils/erc20tokenFunctions.cjs`),t=require(`../../functions/utils/receive-vault-account.utils.cjs`),n=require(`../../functions/utils/receive-vault-scan.utils.cjs`);var r=async r=>{let{records:i,blocks:a}=await t.getReceiveVaultAccountSnapshot(r.userKeys);return{entries:(await Promise.all(i.map(async t=>{let n=await e.getErc20TokenFromAPI(t.chainId,t.token);return n?{record:t,token:n,expiresAt:new Date(Number(t.expiry)*1e3)}:void 0}))).filter(e=>!!e).sort((e,t)=>t.expiresAt.getTime()-e.expiresAt.getTime()),blockedFunds:await n.getReceiveVaultBlockedFunds(i,a)}};exports.hinkalGetReceiveVaultAccount=r;
|