@gurge/sdk 0.3.25 → 0.3.27
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/babyJub.cjs +1 -1
- package/common/src/crypto/babyJub.mjs +12 -6
- package/common/src/crypto/eddsa.cjs +1 -1
- package/common/src/crypto/eddsa.mjs +12 -6
- package/common/src/crypto/poseidon.cjs +1 -1
- package/common/src/crypto/poseidon.mjs +12 -6
- package/common/src/crypto/preProcessing.cjs +1 -1
- package/common/src/crypto/preProcessing.mjs +23 -13
- package/common/src/crypto/rnCryptoBridge.cjs +1 -0
- package/common/src/crypto/rnCryptoBridge.d.ts +8 -0
- package/common/src/crypto/rnCryptoBridge.mjs +10 -0
- package/common/src/crypto/rnUtxoCrypto.cjs +1 -0
- package/common/src/crypto/rnUtxoCrypto.d.ts +25 -0
- package/common/src/crypto/rnUtxoCrypto.mjs +74 -0
- 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.mjs +12 -12
- 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/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 +1 -0
- package/common/src/data-structures/utxo/Utxo.mjs +19 -6
- package/common/src/functions/index.cjs +1 -1
- package/common/src/functions/index.mjs +3 -4
- package/common/src/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
- package/common/src/functions/pre-transaction/buildCommitmentValidationData.mjs +86 -54
- 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 +28 -27
- 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 +77 -76
- 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.mjs +1 -12
- package/common/src/functions/utils/buildClaimableDepositPlan.cjs +1 -1
- package/common/src/functions/utils/buildClaimableDepositPlan.mjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceipt.utils.cjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceipt.utils.mjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceiptSolana.cjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceiptSolana.mjs +4 -4
- package/common/src/functions/utils/index.cjs +1 -1
- package/common/src/functions/utils/index.mjs +3 -3
- package/common/src/functions/utils/utxoPadding.utils.cjs +1 -0
- package/common/src/functions/utils/utxoPadding.utils.d.ts +2 -0
- package/common/src/functions/utils/utxoPadding.utils.mjs +14 -0
- package/common/src/functions/web3/events/getInputUtxoAndBalance.cjs +1 -1
- package/common/src/functions/web3/events/getInputUtxoAndBalance.mjs +90 -86
- 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/cryptoWorker/cryptoWorker.types.cjs +1 -0
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.d.ts +51 -0
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.mjs +6 -0
- package/common/src/webworker/cryptoWorker/cryptoWorkerLauncher.d.ts +1 -0
- package/common/src/webworker/cryptoWorker/cryptoWorkerLogic.d.ts +2 -0
- package/common/src/webworker/logError-Dy_GXEF5.js +2 -0
- package/common/src/webworker/package.json +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 +4 -3
- package/common/src/webworker/viteWorkerURL.constant.d.ts +1 -0
- package/common/src/webworker/viteWorkerURL.constant.mjs +4 -3
- 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 +63 -3
- package/react-native/HinkalWebViewWorker.mjs +134 -51
- package/react-native/bridge/RnWebViewCryptoBridge.cjs +1 -0
- package/react-native/bridge/RnWebViewCryptoBridge.d.ts +7 -0
- package/react-native/bridge/RnWebViewCryptoBridge.mjs +49 -0
- 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 +1 -0
- 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/BabyJubRN.cjs +0 -1
- package/common/src/crypto/BabyJubRN.mjs +0 -33
- package/common/src/crypto/EddsaRN.cjs +0 -1
- package/common/src/crypto/EddsaRN.mjs +0 -41
- package/common/src/webworker/logError-DCl9T86l.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const e=require(`../constants/vite.constants.cjs`),t=require(`./rnCryptoBridge.cjs`);var n=new class{babyjub=void 0;async init(){if(this.babyjub)return;if(e.isReactNative){await t.getRnCryptoBridge().init();return}let{buildBabyjub:n}=await import(`circomlibjs-hinkal-fork`);this.babyjub=await n()}getJub(){if(e.isReactNative)throw Error(`babyJubInstance is unavailable on React Native main thread. Use WebView crypto bridge.`);return this.babyjub}},r=()=>n.getJub();exports.babyJubInstance=r,exports.jubHolder=n;
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import { isReactNative as e } from "../constants/vite.constants.mjs";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
var r = new class {
|
|
2
|
+
import { getRnCryptoBridge as t } from "./rnCryptoBridge.mjs";
|
|
3
|
+
var n = new class {
|
|
5
4
|
babyjub = void 0;
|
|
6
5
|
async init() {
|
|
7
|
-
this.babyjub
|
|
6
|
+
if (this.babyjub) return;
|
|
7
|
+
if (e) {
|
|
8
|
+
await t().init();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
let { buildBabyjub: n } = await import("circomlibjs-hinkal-fork");
|
|
12
|
+
this.babyjub = await n();
|
|
8
13
|
}
|
|
9
14
|
getJub() {
|
|
15
|
+
if (e) throw Error("babyJubInstance is unavailable on React Native main thread. Use WebView crypto bridge.");
|
|
10
16
|
return this.babyjub;
|
|
11
17
|
}
|
|
12
|
-
}(),
|
|
18
|
+
}(), r = () => n.getJub();
|
|
13
19
|
//#endregion
|
|
14
|
-
export {
|
|
20
|
+
export { r as babyJubInstance, n as jubHolder };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const e=require(`../constants/vite.constants.cjs`),t=require(`./rnCryptoBridge.cjs`);var n=new class{eddsa=void 0;async init(){if(this.eddsa)return;if(e.isReactNative){await t.getRnCryptoBridge().init();return}let{buildEddsa:n}=await import(`circomlibjs-hinkal-fork`);this.eddsa=await n()}getEddsa(){if(e.isReactNative)throw Error(`eddsaInstance is unavailable on React Native main thread. Use WebView crypto bridge.`);return this.eddsa}},r=()=>n.getEddsa();exports.eddsaHolder=n,exports.eddsaInstance=r;
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import { isReactNative as e } from "../constants/vite.constants.mjs";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
var r = new class {
|
|
2
|
+
import { getRnCryptoBridge as t } from "./rnCryptoBridge.mjs";
|
|
3
|
+
var n = new class {
|
|
5
4
|
eddsa = void 0;
|
|
6
5
|
async init() {
|
|
7
|
-
this.eddsa
|
|
6
|
+
if (this.eddsa) return;
|
|
7
|
+
if (e) {
|
|
8
|
+
await t().init();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
let { buildEddsa: n } = await import("circomlibjs-hinkal-fork");
|
|
12
|
+
this.eddsa = await n();
|
|
8
13
|
}
|
|
9
14
|
getEddsa() {
|
|
15
|
+
if (e) throw Error("eddsaInstance is unavailable on React Native main thread. Use WebView crypto bridge.");
|
|
10
16
|
return this.eddsa;
|
|
11
17
|
}
|
|
12
|
-
}(),
|
|
18
|
+
}(), r = () => n.getEddsa();
|
|
13
19
|
//#endregion
|
|
14
|
-
export {
|
|
20
|
+
export { n as eddsaHolder, r as eddsaInstance };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../constants/vite.constants.cjs`),n=require(`../functions/utils/amounts.utils.cjs`);let
|
|
1
|
+
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../constants/vite.constants.cjs`),n=require(`../functions/utils/amounts.utils.cjs`),r=require(`./rnCryptoBridge.cjs`);let i=require(`ethers`),a=require(`poseidon-lite`);a=e.__toESM(a);var o=()=>{let e=e=>{let t=a[`poseidon${e.length}`];if(!t)throw Error(`Poseidon: arity ${e.length} not supported (1..16)`);return t(e.map(e=>BigInt(e)))};return e.F={toString:e=>BigInt(e).toString()},e},s=new class{poseidon=void 0;async init(){if(this.poseidon)return;if(t.isReactNative){await r.getRnCryptoBridge().init(),this.poseidon=o();return}let{buildPoseidon:e}=await import(`circomlibjs-hinkal-fork`);this.poseidon=await e()}getPoseidon(){return this.poseidon}};function c(...e){let t=s.getPoseidon();return n.toBigInt(t.F.toString(t(e)))}var l=(...e)=>{let t=s.getPoseidon();return i.ethers.toBeHex(t.F.toString(t([...e])))};exports.poseidonFunction=c,exports.poseidonHash=l,exports.poseidonHolder=s;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { isReactNative as e } from "../constants/vite.constants.mjs";
|
|
2
2
|
import { toBigInt as t } from "../functions/utils/amounts.utils.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
3
|
+
import { getRnCryptoBridge as n } from "./rnCryptoBridge.mjs";
|
|
4
|
+
import { ethers as r } from "ethers";
|
|
5
|
+
import * as i from "poseidon-lite";
|
|
6
6
|
//#region libs/shared/common/src/crypto/poseidon.ts
|
|
7
7
|
var a = () => {
|
|
8
8
|
let e = (e) => {
|
|
9
|
-
let t =
|
|
9
|
+
let t = i[`poseidon${e.length}`];
|
|
10
10
|
if (!t) throw Error(`Poseidon: arity ${e.length} not supported (1..16)`);
|
|
11
11
|
return t(e.map((e) => BigInt(e)));
|
|
12
12
|
};
|
|
@@ -14,7 +14,13 @@ var a = () => {
|
|
|
14
14
|
}, o = new class {
|
|
15
15
|
poseidon = void 0;
|
|
16
16
|
async init() {
|
|
17
|
-
this.poseidon
|
|
17
|
+
if (this.poseidon) return;
|
|
18
|
+
if (e) {
|
|
19
|
+
await n().init(), this.poseidon = a();
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
let { buildPoseidon: t } = await import("circomlibjs-hinkal-fork");
|
|
23
|
+
this.poseidon = await t();
|
|
18
24
|
}
|
|
19
25
|
getPoseidon() {
|
|
20
26
|
return this.poseidon;
|
|
@@ -26,7 +32,7 @@ function s(...e) {
|
|
|
26
32
|
}
|
|
27
33
|
var c = (...e) => {
|
|
28
34
|
let t = o.getPoseidon();
|
|
29
|
-
return
|
|
35
|
+
return r.toBeHex(t.F.toString(t([...e])));
|
|
30
36
|
};
|
|
31
37
|
//#endregion
|
|
32
38
|
export { s as poseidonFunction, c as poseidonHash, o as poseidonHolder };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`./poseidon.cjs`),
|
|
1
|
+
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../constants/vite.constants.cjs`),n=require(`./rnCryptoBridge.cjs`),r=require(`./poseidon.cjs`),i=require(`./babyJub.cjs`),a=require(`./eddsa.cjs`);let o=require(`libsodium-wrappers`);o=e.__toESM(o);let s=require(`buffer`),c=require(`process`);c=e.__toESM(c);var l=async(e=!1)=>{if((typeof window<`u`||typeof self<`u`)&&(typeof window<`u`&&(window.global=window),globalThis.Buffer=s.Buffer,globalThis.process=c.default),t.isReactNative&&!e){await Promise.all([o.default.ready,n.getRnCryptoBridge().init(),r.poseidonHolder.init()]);return}await Promise.all([o.default.ready,r.poseidonHolder.init(),i.jubHolder.init(),...e?[]:[a.eddsaHolder.init()]])};exports.preProcessing=l;
|
|
@@ -1,17 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import r from "
|
|
5
|
-
import {
|
|
6
|
-
import a from "
|
|
1
|
+
import { isReactNative as e } from "../constants/vite.constants.mjs";
|
|
2
|
+
import { getRnCryptoBridge as t } from "./rnCryptoBridge.mjs";
|
|
3
|
+
import { poseidonHolder as n } from "./poseidon.mjs";
|
|
4
|
+
import { jubHolder as r } from "./babyJub.mjs";
|
|
5
|
+
import { eddsaHolder as i } from "./eddsa.mjs";
|
|
6
|
+
import a from "libsodium-wrappers";
|
|
7
|
+
import { Buffer as o } from "buffer";
|
|
8
|
+
import s from "process";
|
|
7
9
|
//#region libs/shared/common/src/crypto/preProcessing.ts
|
|
8
|
-
var
|
|
9
|
-
(typeof window < "u" || typeof self < "u") && (typeof window < "u" && (window.global = window), globalThis.Buffer =
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
var c = async (c = !1) => {
|
|
11
|
+
if ((typeof window < "u" || typeof self < "u") && (typeof window < "u" && (window.global = window), globalThis.Buffer = o, globalThis.process = s), e && !c) {
|
|
12
|
+
await Promise.all([
|
|
13
|
+
a.ready,
|
|
14
|
+
t().init(),
|
|
15
|
+
n.init()
|
|
16
|
+
]);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
await Promise.all([
|
|
20
|
+
a.ready,
|
|
21
|
+
n.init(),
|
|
22
|
+
r.init(),
|
|
23
|
+
...c ? [] : [i.init()]
|
|
14
24
|
]);
|
|
15
25
|
};
|
|
16
26
|
//#endregion
|
|
17
|
-
export {
|
|
27
|
+
export { c as preProcessing };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class{static bridge=null},t=()=>{let t=e.bridge;if(!t)throw Error(`RN crypto bridge is not registered. Mount HinkalWebViewWorker in your app.`);return t};exports.RnCryptoBridgeFactory=e,exports.getRnCryptoBridge=t;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface IRnCryptoBridge {
|
|
2
|
+
init(): Promise<void>;
|
|
3
|
+
call<T>(op: string, payload?: unknown): Promise<T>;
|
|
4
|
+
}
|
|
5
|
+
export declare class RnCryptoBridgeFactory {
|
|
6
|
+
static bridge: IRnCryptoBridge | null;
|
|
7
|
+
}
|
|
8
|
+
export declare const getRnCryptoBridge: () => IRnCryptoBridge;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region libs/shared/common/src/crypto/rnCryptoBridge.ts
|
|
2
|
+
var e = class {
|
|
3
|
+
static bridge = null;
|
|
4
|
+
}, t = () => {
|
|
5
|
+
let t = e.bridge;
|
|
6
|
+
if (!t) throw Error("RN crypto bridge is not registered. Mount HinkalWebViewWorker in your app.");
|
|
7
|
+
return t;
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { e as RnCryptoBridgeFactory, t as getRnCryptoBridge };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../constants/vite.constants.cjs`),t=require(`./rnCryptoBridge.cjs`),n=require(`../functions/web3/etherFunctions.cjs`),r=require(`../webworker/cryptoWorker/cryptoWorker.types.cjs`),i=require(`../functions/snarkjs/common.snarkjs.cjs`);var a=()=>n.randomBigInt(31).toString(),o=async e=>{let{pubSpendingBJJPoint:t}=await s(e);return t},s=async n=>{if(!e.isReactNative)return n.getSpendingKeyPair();let i=t.getRnCryptoBridge();await i.init();let a=await i.call(r.CryptoWorkerOp.GET_SPENDING_KEY_PAIR,{signature:n.getSignature()});return{privSpendingKey:a.privSpendingKey,pubSpendingBJJPoint:[BigInt(a.pubSpendingBJJPoint[0]),BigInt(a.pubSpendingBJJPoint[1])]}},c=async(n,i)=>{if(!e.isReactNative)return n.signEddsa(i);let a=t.getRnCryptoBridge();await a.init();let o=await a.call(r.CryptoWorkerOp.SIGN_EDDSA,{signature:n.getSignature(),message:i.toString()});return{R8:[BigInt(o.R8[0]),BigInt(o.R8[1])],S:BigInt(o.S)}},l=async(n,a,o)=>{if(!e.isReactNative)return i.calcStealthAddressStructure(n,a,o);let s=t.getRnCryptoBridge();await s.init();let c=await s.call(r.CryptoWorkerOp.CALC_STEALTH_ADDRESS_STRUCTURE,{extraRandomization:n.toString(),nullifyingPrivateKey:a,spendingPublicKey:o.map(e=>e.toString())});return{extraRandomization:BigInt(c.extraRandomization),H0:BigInt(c.H0),H1:BigInt(c.H1),stealthAddress:BigInt(c.stealthAddress)}},u=async(n,i)=>{if(!e.isReactNative)throw Error(`prepareNewStyleUtxoFields is only for React Native crypto bridge`);let o=t.getRnCryptoBridge();await o.init();let s=await o.call(r.CryptoWorkerOp.PREPARE_NEW_STYLE_UTXO_FIELDS,{initialRandomization:a(),nullifyingKey:n,spendingPublicKey:i?.map(e=>e.toString())});return{randomization:BigInt(s.randomization),H0:[BigInt(s.H0[0]),BigInt(s.H0[1])],stealthAddress:s.stealthAddress}},d=async n=>{if(!e.isReactNative)throw Error(`prepareNewStyleUtxoFieldsBatch is only for React Native crypto bridge`);let i=t.getRnCryptoBridge();return await i.init(),(await i.call(r.CryptoWorkerOp.PREPARE_NEW_STYLE_UTXO_FIELDS_BATCH,{items:n.map(e=>({initialRandomization:a(),nullifyingKey:e.nullifyingKey,spendingPublicKey:e.spendingPublicKey?.map(e=>e.toString())}))})).map(e=>({randomization:BigInt(e.randomization),H0:[BigInt(e.H0[0]),BigInt(e.H0[1])],stealthAddress:e.stealthAddress}))},f=t=>e.isReactNative&&!!t.isNewStyle&&!!t.nullifyingKey&&t.H0===void 0&&t.randomization===void 0;exports.calcStealthAddressStructureForRn=l,exports.getSpendingKeyPairForRn=s,exports.getSpendingPublicKeyForRn=o,exports.needsRnNewStyleCrypto=f,exports.prepareNewStyleUtxoFields=u,exports.prepareNewStyleUtxoFieldsBatch=d,exports.signEddsaForRn=c;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IUtxoConstructor } from '../data-structures/utxo/Utxo';
|
|
2
|
+
import { UserKeys } from '../data-structures/crypto-keys/keys';
|
|
3
|
+
import { StealthAddressStructure } from '../types/circom-data.types';
|
|
4
|
+
export type SpendingKeyPair = {
|
|
5
|
+
privSpendingKey: string;
|
|
6
|
+
pubSpendingBJJPoint: [bigint, bigint];
|
|
7
|
+
};
|
|
8
|
+
export type PreparedNewStyleUtxoFields = {
|
|
9
|
+
randomization: bigint;
|
|
10
|
+
H0: [bigint, bigint];
|
|
11
|
+
stealthAddress: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const getSpendingPublicKeyForRn: (userKeys: UserKeys) => Promise<[bigint, bigint]>;
|
|
14
|
+
export declare const getSpendingKeyPairForRn: (userKeys: UserKeys) => Promise<SpendingKeyPair>;
|
|
15
|
+
export declare const signEddsaForRn: (userKeys: UserKeys, message: bigint) => Promise<{
|
|
16
|
+
R8: [bigint, bigint];
|
|
17
|
+
S: bigint;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const calcStealthAddressStructureForRn: (extraRandomization: bigint, nullifyingPrivateKey: string, spendingPublicKey: [bigint, bigint]) => Promise<StealthAddressStructure>;
|
|
20
|
+
export declare const prepareNewStyleUtxoFields: (nullifyingKey: string, spendingPublicKey?: bigint[]) => Promise<PreparedNewStyleUtxoFields>;
|
|
21
|
+
export declare const prepareNewStyleUtxoFieldsBatch: (items: {
|
|
22
|
+
nullifyingKey: string;
|
|
23
|
+
spendingPublicKey?: bigint[];
|
|
24
|
+
}[]) => Promise<PreparedNewStyleUtxoFields[]>;
|
|
25
|
+
export declare const needsRnNewStyleCrypto: (params: IUtxoConstructor) => boolean;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { isReactNative as e } from "../constants/vite.constants.mjs";
|
|
2
|
+
import { getRnCryptoBridge as t } from "./rnCryptoBridge.mjs";
|
|
3
|
+
import { randomBigInt as n } from "../functions/web3/etherFunctions.mjs";
|
|
4
|
+
import { CryptoWorkerOp as r } from "../webworker/cryptoWorker/cryptoWorker.types.mjs";
|
|
5
|
+
import { calcStealthAddressStructure as i } from "../functions/snarkjs/common.snarkjs.mjs";
|
|
6
|
+
//#region libs/shared/common/src/crypto/rnUtxoCrypto.ts
|
|
7
|
+
var a = () => n(31).toString(), o = async (e) => {
|
|
8
|
+
let { pubSpendingBJJPoint: t } = await s(e);
|
|
9
|
+
return t;
|
|
10
|
+
}, s = async (n) => {
|
|
11
|
+
if (!e) return n.getSpendingKeyPair();
|
|
12
|
+
let i = t();
|
|
13
|
+
await i.init();
|
|
14
|
+
let a = await i.call(r.GET_SPENDING_KEY_PAIR, { signature: n.getSignature() });
|
|
15
|
+
return {
|
|
16
|
+
privSpendingKey: a.privSpendingKey,
|
|
17
|
+
pubSpendingBJJPoint: [BigInt(a.pubSpendingBJJPoint[0]), BigInt(a.pubSpendingBJJPoint[1])]
|
|
18
|
+
};
|
|
19
|
+
}, c = async (n, i) => {
|
|
20
|
+
if (!e) return n.signEddsa(i);
|
|
21
|
+
let a = t();
|
|
22
|
+
await a.init();
|
|
23
|
+
let o = await a.call(r.SIGN_EDDSA, {
|
|
24
|
+
signature: n.getSignature(),
|
|
25
|
+
message: i.toString()
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
R8: [BigInt(o.R8[0]), BigInt(o.R8[1])],
|
|
29
|
+
S: BigInt(o.S)
|
|
30
|
+
};
|
|
31
|
+
}, l = async (n, a, o) => {
|
|
32
|
+
if (!e) return i(n, a, o);
|
|
33
|
+
let s = t();
|
|
34
|
+
await s.init();
|
|
35
|
+
let c = await s.call(r.CALC_STEALTH_ADDRESS_STRUCTURE, {
|
|
36
|
+
extraRandomization: n.toString(),
|
|
37
|
+
nullifyingPrivateKey: a,
|
|
38
|
+
spendingPublicKey: o.map((e) => e.toString())
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
extraRandomization: BigInt(c.extraRandomization),
|
|
42
|
+
H0: BigInt(c.H0),
|
|
43
|
+
H1: BigInt(c.H1),
|
|
44
|
+
stealthAddress: BigInt(c.stealthAddress)
|
|
45
|
+
};
|
|
46
|
+
}, u = async (n, i) => {
|
|
47
|
+
if (!e) throw Error("prepareNewStyleUtxoFields is only for React Native crypto bridge");
|
|
48
|
+
let o = t();
|
|
49
|
+
await o.init();
|
|
50
|
+
let s = await o.call(r.PREPARE_NEW_STYLE_UTXO_FIELDS, {
|
|
51
|
+
initialRandomization: a(),
|
|
52
|
+
nullifyingKey: n,
|
|
53
|
+
spendingPublicKey: i?.map((e) => e.toString())
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
randomization: BigInt(s.randomization),
|
|
57
|
+
H0: [BigInt(s.H0[0]), BigInt(s.H0[1])],
|
|
58
|
+
stealthAddress: s.stealthAddress
|
|
59
|
+
};
|
|
60
|
+
}, d = async (n) => {
|
|
61
|
+
if (!e) throw Error("prepareNewStyleUtxoFieldsBatch is only for React Native crypto bridge");
|
|
62
|
+
let i = t();
|
|
63
|
+
return await i.init(), (await i.call(r.PREPARE_NEW_STYLE_UTXO_FIELDS_BATCH, { items: n.map((e) => ({
|
|
64
|
+
initialRandomization: a(),
|
|
65
|
+
nullifyingKey: e.nullifyingKey,
|
|
66
|
+
spendingPublicKey: e.spendingPublicKey?.map((e) => e.toString())
|
|
67
|
+
})) })).map((e) => ({
|
|
68
|
+
randomization: BigInt(e.randomization),
|
|
69
|
+
H0: [BigInt(e.H0[0]), BigInt(e.H0[1])],
|
|
70
|
+
stealthAddress: e.stealthAddress
|
|
71
|
+
}));
|
|
72
|
+
}, f = (t) => e && !!t.isNewStyle && !!t.nullifyingKey && t.H0 === void 0 && t.randomization === void 0;
|
|
73
|
+
//#endregion
|
|
74
|
+
export { l as calcStealthAddressStructureForRn, s as getSpendingKeyPairForRn, o as getSpendingPublicKeyForRn, f as needsRnNewStyleCrypto, u as prepareNewStyleUtxoFields, d as prepareNewStyleUtxoFieldsBatch, c as signEddsaForRn };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../../
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../../types/external-action.types.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../../error-handling/customErrors/ErrorWithTx.cjs`),s=require(`../../types/transactions.types.cjs`),c=require(`../../types/admin.types.cjs`),l=require(`../../types/activities.types.cjs`),u=require(`../../types/transaction.types.cjs`),d=require(`../../types/offscreen.types.cjs`);require(`../../types/index.cjs`);const f=require(`../../error-handling/logger.cjs`),p=require(`../../API/API.cjs`),m=require(`../../functions/utils/erc20tokenFunctions.cjs`),h=require(`../../error-handling/get-error.message.cjs`);require(`../../error-handling/index.cjs`);const g=require(`../../functions/pre-transaction/getVolatileTransferAmount.cjs`),_=require(`../../functions/utils/create-provider.cjs`),v=require(`../../functions/pre-transaction/getFeeStructure.cjs`),y=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),b=require(`../../functions/utils/postToOffscreen.cjs`),x=require(`../../functions/utils/fees.utils.cjs`),S=require(`../../functions/private-wallet/emporium.helpers.cjs`),C=require(`../../functions/auto-deposit-back-helpers/get-tokens-to-deposit-back.cjs`),w=require(`../../functions/auto-deposit-back-helpers/get-gas-token-records.cjs`),T=require(`../../functions/auto-deposit-back-helpers/select-gas-token.cjs`),E=require(`../../functions/auto-deposit-back-helpers/update-hinkal.cjs`);require(`../../functions/index.cjs`);const D=require(`../IndexedDB/activity-db.cjs`);require(`../IndexedDB/index.cjs`);var O=3*1e3,k=13*1e3,A=async(A,j,M,ee,N,P,F,I)=>{if(!M||F.length===0)return;let L;try{let o=_.createJsonRpcProvider(j);await a.waitLittle(j===e.chainIds.ethMainnet?k:O);let u=await C.getTokensToDepositBack(F,N,M,o);if(!u.length){b.postToOffscreen(d.MessagesFromOffscreen.AutoShieldTxStatus,{message:n.transactionErrorCodes.AUTO_SHIELD_SKIPPED});return}let f=(await m.getErc20TokensBySymbolsFromAPI(await x.getGasTokenSymbols(j),j)).filter(e=>e!==void 0),{prices:h}=await p.API.getTokenPrices(j,f.map(e=>e.erc20TokenAddress)),R=new Map(h.map((e,t)=>[f[t].erc20TokenAddress.toLowerCase(),e])),z=u.map(({token:e})=>e),B=u.map(({balance:e})=>e),V=z.map(({erc20TokenAddress:e})=>e),H=S.createTransaferEmporiumOpsBatch(A,j,V,await g.modifyVolatileTokenAmountChanges(j,z,B,M)),U=await v.getFeeStructure(j,N,V,i.ExternalActionId.Emporium,H.map(e=>y.convertEmporiumOpToCallInfo(e,M,j))),{flatFee:W}=U??{},G=await m.getErc20TokenFromAPI(j,U.feeToken);if(!G)return;let K=r.getAmountInToken(G,W),q=(R.get(G.erc20TokenAddress.toLowerCase())??0)*Number(K),J=await T.selectGasToken(N,q,j,z,H,await w.getGasTokenRecords(f,j,A,M,o,R),U,V,M);if(!J)return;let{feeToken:Y,feeStructure:X}=J??{};if(P&&Number(P)<q){b.postToOffscreen(d.MessagesFromOffscreen.AutoShieldTxStatus,{message:n.gasErrorCodes.GAS_PRICE_EXCEEDS_AUTOSHIELD_LIMIT});return}let Z=z.findIndex(e=>t.caseInsensitiveEqual(e.erc20TokenAddress,Y));Z!==-1&&(B[Z]-=X?.flatFee??0n);let{hinkalAddress:Q}=e.networkRegistry[j].contractData,$={activityType:l.ActivityTypes.AUTO_SHIELD,chainId:j,from:M,to:Q,gasInDollar:q.toString(),tokensReceive:z.map((e,t)=>({amount:r.getAmountInToken(e,B[t]),token:e}))};L=await D.activityStorage.saveTxRequest($),b.postToOffscreen(d.MessagesFromOffscreen.AutoShieldTxStatus,{status:s.TransactionStatus.Loading}),E.updateHinkal(I,j,A);let te={id:0,success:!0,txHash:await A.actionReceive(z,B,Y,X,ee,c.AdminTransactionType.AutoShield)};await D.activityStorage.updatePendingTransactions(te,L),b.postToOffscreen(d.MessagesFromOffscreen.AutoShieldTxStatus,{status:s.TransactionStatus.Confirmed,activityRequest:$})}catch(e){let t;e instanceof o.ErrorWithRelayerTransaction&&(t=e.txHash);let n={error:e,id:0,success:!1,...t?{erroredTx:t}:{}};L&&await D.activityStorage.updatePendingTransactions(n,L),b.postToOffscreen(d.MessagesFromOffscreen.AutoShieldTxStatus,{status:s.TransactionStatus.Failed,error:h.getErrorMessageFromTransactionRequest(e,u.TransactionRequestType.ReceiveFromShieldedAccount)}),f.Logger.error(`Error in auto deposit back:`,e)}};exports.handleAutoDepositBack=A;
|
|
@@ -2,9 +2,9 @@ import { chainIds as e, networkRegistry as t } from "../../constants/chains.cons
|
|
|
2
2
|
import { caseInsensitiveEqual as n } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
3
3
|
import { gasErrorCodes as ee, transactionErrorCodes as r } from "../../error-handling/error-codes.constants.mjs";
|
|
4
4
|
import { getAmountInToken as i } from "../../functions/web3/etherFunctions.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { ExternalActionId as a } from "../../types/external-action.types.mjs";
|
|
6
|
+
import { waitLittle as o } from "../../functions/utils/time.utils.mjs";
|
|
7
|
+
import { ErrorWithRelayerTransaction as s } from "../../error-handling/customErrors/ErrorWithTx.mjs";
|
|
8
8
|
import { TransactionStatus as c } from "../../types/transactions.types.mjs";
|
|
9
9
|
import { AdminTransactionType as l } from "../../types/admin.types.mjs";
|
|
10
10
|
import { ActivityTypes as u } from "../../types/activities.types.mjs";
|
|
@@ -35,16 +35,16 @@ var te = 3 * 1e3, ne = 13 * 1e3, A = async (A, j, M, N, P, F, I, L) => {
|
|
|
35
35
|
if (!M || I.length === 0) return;
|
|
36
36
|
let R;
|
|
37
37
|
try {
|
|
38
|
-
let
|
|
39
|
-
await
|
|
40
|
-
let d = await T(I, P, M,
|
|
38
|
+
let s = y(j);
|
|
39
|
+
await o(j === e.ethMainnet ? ne : te);
|
|
40
|
+
let d = await T(I, P, M, s);
|
|
41
41
|
if (!d.length) {
|
|
42
42
|
S(f.AutoShieldTxStatus, { message: r.AUTO_SHIELD_SKIPPED });
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
|
-
let p = (await g(await C(j), j)).filter((e) => e !== void 0), { prices: _ } = await m.getTokenPrices(j, p.map((e) => e.erc20TokenAddress)), z = new Map(_.map((e, t) => [p[t].erc20TokenAddress.toLowerCase(), e])), B = d.map(({ token: e }) => e), V = d.map(({ balance: e }) => e), H = B.map(({ erc20TokenAddress: e }) => e), U = w(A, j, H, await v(j, B, V, M)), W = await b(j, P, H,
|
|
45
|
+
let p = (await g(await C(j), j)).filter((e) => e !== void 0), { prices: _ } = await m.getTokenPrices(j, p.map((e) => e.erc20TokenAddress)), z = new Map(_.map((e, t) => [p[t].erc20TokenAddress.toLowerCase(), e])), B = d.map(({ token: e }) => e), V = d.map(({ balance: e }) => e), H = B.map(({ erc20TokenAddress: e }) => e), U = w(A, j, H, await v(j, B, V, M)), W = await b(j, P, H, a.Emporium, U.map((e) => x(e, M, j))), { flatFee: G } = W ?? {}, K = await h(j, W.feeToken);
|
|
46
46
|
if (!K) return;
|
|
47
|
-
let q = i(K, G), J = (z.get(K.erc20TokenAddress.toLowerCase()) ?? 0) * Number(q), Y = await D(P, J, j, B, U, await E(p, j, A, M,
|
|
47
|
+
let q = i(K, G), J = (z.get(K.erc20TokenAddress.toLowerCase()) ?? 0) * Number(q), Y = await D(P, J, j, B, U, await E(p, j, A, M, s, z), W, H, M);
|
|
48
48
|
if (!Y) return;
|
|
49
49
|
let { feeToken: X, feeStructure: Z } = Y ?? {};
|
|
50
50
|
if (F && Number(F) < J) {
|
|
@@ -76,7 +76,7 @@ var te = 3 * 1e3, ne = 13 * 1e3, A = async (A, j, M, N, P, F, I, L) => {
|
|
|
76
76
|
});
|
|
77
77
|
} catch (e) {
|
|
78
78
|
let t;
|
|
79
|
-
e instanceof
|
|
79
|
+
e instanceof s && (t = e.txHash);
|
|
80
80
|
let n = {
|
|
81
81
|
error: e,
|
|
82
82
|
id: 0,
|
|
@@ -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(`../../error-handling/error-codes.constants.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../
|
|
1
|
+
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(`../crypto-keys/keys.cjs`),a=require(`../../types/external-action.types.cjs`),o=require(`../../functions/utils/time.utils.cjs`),s=require(`../utxo/Utxo.cjs`),c=require(`../../functions/utils/tron.utils.cjs`),l=require(`../../functions/utils/token-check.utils.cjs`),u=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`),d=require(`../../functions/pre-transaction/getFeeStructure.cjs`),f=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),p=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);var m=async(m,h,g,_,v)=>{let y=l.validateAndGetChainId([h]),b=e.isTronLike(y),x=h.erc20TokenAddress,S=c.addressToHexFormat(await m.getEthereumAddressByChain(y));if(!n.caseInsensitiveEqual(x,g.erc20TokenAddress))throw Error(`Off-chain UTXO token mismatch`);let C=v?new i.UserKeys(v):new i.UserKeys(g.nullifyingKey,g.nullifyingKey);if(!g.nullifyingKey&&!v)throw Error(`Claimable UTXO nullifyingKey is missing`);let w=C.getShieldedPrivateKey();if(g.nullifyingKey&&g.nullifyingKey!==w)throw Error(`Claimable UTXO key mismatch`);let T=m.getRecipientInfo(),E=s.Utxo.createFrom(g,{nullifyingKey:w}),D=new s.Utxo({amount:0n,erc20TokenAddress:E.erc20TokenAddress,mintAddress:E.mintAddress,nullifyingKey:w,...E.isNewStyle?{spendingPublicKey:C.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),O=_??await d.getFeeStructure(y,x,[x],a.ExternalActionId.Transact);if(!n.caseInsensitiveEqual(O.feeToken,x))throw Error(`Claim fee token mismatch: fee must be paid from claimed UTXO token`);let k=O.variableRate>0n?O.variableRate:t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;if(E.amount<=O.flatFee)throw Error(r.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);let A=E.amount-O.flatFee,j=A*k/10000n,M=A-j;if(M<=0n)throw Error(r.transactionErrorCodes.RECIPIENT_AMOUNT_INVALID);let N={feeToken:O.feeToken,flatFee:O.flatFee+j,variableRate:0n},P=[-E.amount],F=await m.getRandomRelay(y,!0);if(!F)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let I={externalActionId:0n,externalAddress:F??S,externalActionMetadata:`0x00`},L=[[E,D]],R=[],z=o.getCurrentTimeInSeconds().toString(),{outputUtxos:B}=await u.outputUtxoProcessing(C,L[0],P[0],z,!0,T,M);R.push(B);let{zkCallData:V,circomData:H,dimData:U,commitmentValidationData:W}=await f.constructZkProof(m.merkleTreeHinkalByChain[y],L,R,C,I.externalActionId,I.externalAddress,I.externalActionMetadata,m.generateProofRemotely,N,F,y);return p.transactCallRelayer(y,V,U,H,W,void 0,void 0,void 0,await c.reorderZkCallData(b,V,U,H))};exports.hinkalClaimUtxo=m;
|
|
@@ -3,9 +3,9 @@ import { HINKAL_PRIVATE_SEND_VARIABLE_RATE as t } from "../../constants/protocol
|
|
|
3
3
|
import { caseInsensitiveEqual as n } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
4
4
|
import { transactionErrorCodes as r } from "../../error-handling/error-codes.constants.mjs";
|
|
5
5
|
import { UserKeys as i } from "../crypto-keys/keys.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { ExternalActionId as a } from "../../types/external-action.types.mjs";
|
|
7
|
+
import { getCurrentTimeInSeconds as o } from "../../functions/utils/time.utils.mjs";
|
|
8
|
+
import { Utxo as s } from "../utxo/Utxo.mjs";
|
|
9
9
|
import { addressToHexFormat as c, reorderZkCallData as l } from "../../functions/utils/tron.utils.mjs";
|
|
10
10
|
import { validateAndGetChainId as u } from "../../functions/utils/token-check.utils.mjs";
|
|
11
11
|
import { outputUtxoProcessing as d } from "../../functions/pre-transaction/outputUtxoProcessing.mjs";
|
|
@@ -20,7 +20,7 @@ var h = async (h, g, _, v, y) => {
|
|
|
20
20
|
if (!_.nullifyingKey && !y) throw Error("Claimable UTXO nullifyingKey is missing");
|
|
21
21
|
let T = w.getShieldedPrivateKey();
|
|
22
22
|
if (_.nullifyingKey && _.nullifyingKey !== T) throw Error("Claimable UTXO key mismatch");
|
|
23
|
-
let E = h.getRecipientInfo(), D =
|
|
23
|
+
let E = h.getRecipientInfo(), D = s.createFrom(_, { nullifyingKey: T }), O = new s({
|
|
24
24
|
amount: 0n,
|
|
25
25
|
erc20TokenAddress: D.erc20TokenAddress,
|
|
26
26
|
mintAddress: D.mintAddress,
|
|
@@ -29,7 +29,7 @@ var h = async (h, g, _, v, y) => {
|
|
|
29
29
|
spendingPublicKey: w.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
30
30
|
isNewStyle: !0
|
|
31
31
|
} : { isNewStyle: !1 }
|
|
32
|
-
}), k = v ?? await f(b, S, [S],
|
|
32
|
+
}), k = v ?? await f(b, S, [S], a.Transact);
|
|
33
33
|
if (!n(k.feeToken, S)) throw Error("Claim fee token mismatch: fee must be paid from claimed UTXO token");
|
|
34
34
|
let A = k.variableRate > 0n ? k.variableRate : t;
|
|
35
35
|
if (D.amount <= k.flatFee) throw Error(r.INSUFFICIENT_FUNDS_TO_TRANSACT);
|
|
@@ -45,7 +45,7 @@ var h = async (h, g, _, v, y) => {
|
|
|
45
45
|
externalActionId: 0n,
|
|
46
46
|
externalAddress: I ?? C,
|
|
47
47
|
externalActionMetadata: "0x00"
|
|
48
|
-
}, R = [[D, O]], z = [], B =
|
|
48
|
+
}, R = [[D, O]], z = [], B = o().toString(), { outputUtxos: V } = await d(w, R[0], F[0], B, !0, E, N);
|
|
49
49
|
z.push(V);
|
|
50
50
|
let { zkCallData: H, circomData: U, dimData: W, commitmentValidationData: G } = await p(h.merkleTreeHinkalByChain[b], R, z, w, L.externalActionId, L.externalAddress, L.externalActionMetadata, h.generateProofRemotely, P, I, b);
|
|
51
51
|
return m(b, H, W, U, G, void 0, void 0, void 0, await l(x, H, W, U));
|
|
@@ -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(`../../functions/utils/time.utils.cjs`),a=require(`../utxo/Utxo.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../functions/utils/tron.utils.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/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/utils/tronSimulation.utils.cjs`),p=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),m=require(`../../functions/web3/functionCalls/waitForErc20Approvals.cjs`),h=require(`../../functions/web3/functionCalls/transactCallDirect.cjs`),g=require(`../../API/admin-calls.cjs`);var _=async(e,t)=>({externalActionData:{externalActionId:0n,externalAddress:s.addressToHexFormat(await e.getEthereumAddressByChain(t)),externalActionMetadata:`0x00`},contractTransaction:void 0,contractToApprove:void 0}),v=async(e,t,n,r)=>{let a=[...await l.addPaddingToUtxos(e,t,n,r)],o=[],s=i.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=u.outputUtxoProcessing(e.userKeys,a[t],r[t],s);o.push(n)}return{inputUtxosArray:a,outputUtxosArray:o}},y=async(n,r,i,a,o,c,l,u=!0,d=!1)=>{let p=n.getTronWeb(),{hinkalAddress:h,hinkalABI:g}=e.networkRegistry[r].contractData;if(!g)throw Error(`Hinkal ABI not found`);let _=s.evmHexToTronBase58Address(h),v=await n.getEthereumAddressByChain(r),{totalTrxValue:y,tokensNeedingApproval:b}=s.splitTronTokensByNative(i,a),{a:x,b:S,c:C}=s.parseZkCalldata(o),w=await s.reorderZkCallData(!0,o,l,c,!1);if(!w)throw Error(`Tron proof signature not found`);let T=[w.v,w.r,w.s],E=[l.tokenNumber,l.nullifierAmount,l.outputAmount],D=s.circomDataToArray(c),O=y>0n?Number(y):0;if(d){let e=s.createTronCallData(g,`transact`,[T,x,S,C,E,D]),{transaction:n}=await p.transactionBuilder.triggerSmartContract(_,``,{feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:O,input:e},[],v);return n}await s.approveTronTokens(p,v,_,b),b.size>0&&await m.waitForTronErc20Approvals(p,v,_,Array.from(b.entries()).map(([e,t])=>({tokenAddress:e,requiredAmount:t}))),u&&(await f.simulateTronTransaction(r,_,`transact`,g,[T,x,S,C,E,D],v,y>0n?y:void 0),await s.assertTronSufficientBalance(p,r,_,v,s.createTronCallData(g,`transact`,[T,x,S,C,E,D]),y));let k=await p.contract(g,_).transact(T,x,S,C,E,D).send({feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:O}),A=typeof k==`string`?k:k?.txid??k?.transaction?.txID;if(!A)throw Error(`Tron deposit failed (missing txid)`);return A},b=async(r,i,a,o=!0,s=!1)=>{let l=c.validateAndGetChainId(i),u=e.isTronLike(l),d=i.map(e=>e.erc20TokenAddress),[{externalActionData:f,contractTransaction:m,contractToApprove:g},{inputUtxosArray:b,outputUtxosArray:x}]=await Promise.all([_(r,l),v(r,l,d,a)]),{zkCallData:S,circomData:C,dimData:w}=await p.constructZkProof(r.merkleTreeHinkalByChain[l],b,x,r.userKeys,f.externalActionId,f.externalAddress,f.externalActionMetadata,r.generateProofRemotely,n.zeroFeeStructure,t.zeroAddress,l);return u?await y(r,l,i,a,S,C,w,o,s):await h.transactCallDirect(r,l,a,i,S,C,w,g,m,o,s)},x=async(i,s,l,u,f=!0,m=!1,v)=>{let b=c.validateAndGetChainId(s),x=e.isTronLike(b),S=s.map(e=>e.erc20TokenAddress),[C,w,T,,E]=u.split(`,`);if(!o.isValidPrivateAddress(u))throw Error(r.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let D=S.map(e=>[new a.Utxo({amount:0n,erc20TokenAddress:e,nullifyingKey:i.userKeys.getShieldedPrivateKey(),spendingPublicKey:i.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}),new a.Utxo({amount:0n,erc20TokenAddress:e,nullifyingKey:i.userKeys.getShieldedPrivateKey(),spendingPublicKey:i.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0})]),O=S.map((e,t)=>[new a.Utxo({amount:l[t],erc20TokenAddress:e,H0:[BigInt(w),BigInt(T)],stealthAddress:C,encryptionKey:E,isNewStyle:!0})]),{externalActionData:k,contractTransaction:A,contractToApprove:j}=await _(i,b),{zkCallData:M,circomData:N,dimData:P}=await p.constructZkProof(i.merkleTreeHinkalByChain[b],D,O,i.userKeys,k.externalActionId,k.externalAddress,k.externalActionMetadata,i.generateProofRemotely,n.zeroFeeStructure,t.zeroAddress,b);if(x)return await y(i,b,s,l,M,N,P,f,m);let F=await h.transactCallDirect(i,b,l,s,M,N,P,j,A,f,m);return g.emitTxPublicData(d.constructAdminData(v,b,S,l,await i.getEthereumAddress())),F};exports.hinkalDeposit=b,exports.hinkalDepositForOther=x;
|
|
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(`../utxo/Utxo.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../functions/utils/tron.utils.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/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/utils/tronSimulation.utils.cjs`),p=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),m=require(`../../functions/web3/functionCalls/waitForErc20Approvals.cjs`),h=require(`../../functions/web3/functionCalls/transactCallDirect.cjs`),g=require(`../../API/admin-calls.cjs`);var _=async(e,t)=>({externalActionData:{externalActionId:0n,externalAddress:s.addressToHexFormat(await e.getEthereumAddressByChain(t)),externalActionMetadata:`0x00`},contractTransaction:void 0,contractToApprove:void 0}),v=async(e,t,n,r)=>{let a=[...await l.addPaddingToUtxos(e,t,n,r)],o=[],s=i.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=await u.outputUtxoProcessing(e.userKeys,a[t],r[t],s);o.push(n)}return{inputUtxosArray:a,outputUtxosArray:o}},y=async(n,r,i,a,o,c,l,u=!0,d=!1)=>{let p=n.getTronWeb(),{hinkalAddress:h,hinkalABI:g}=e.networkRegistry[r].contractData;if(!g)throw Error(`Hinkal ABI not found`);let _=s.evmHexToTronBase58Address(h),v=await n.getEthereumAddressByChain(r),{totalTrxValue:y,tokensNeedingApproval:b}=s.splitTronTokensByNative(i,a),{a:x,b:S,c:C}=s.parseZkCalldata(o),w=await s.reorderZkCallData(!0,o,l,c,!1);if(!w)throw Error(`Tron proof signature not found`);let T=[w.v,w.r,w.s],E=[l.tokenNumber,l.nullifierAmount,l.outputAmount],D=s.circomDataToArray(c),O=y>0n?Number(y):0;if(d){let e=s.createTronCallData(g,`transact`,[T,x,S,C,E,D]),{transaction:n}=await p.transactionBuilder.triggerSmartContract(_,``,{feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:O,input:e},[],v);return n}await s.approveTronTokens(p,v,_,b),b.size>0&&await m.waitForTronErc20Approvals(p,v,_,Array.from(b.entries()).map(([e,t])=>({tokenAddress:e,requiredAmount:t}))),u&&(await f.simulateTronTransaction(r,_,`transact`,g,[T,x,S,C,E,D],v,y>0n?y:void 0),await s.assertTronSufficientBalance(p,r,_,v,s.createTronCallData(g,`transact`,[T,x,S,C,E,D]),y));let k=await p.contract(g,_).transact(T,x,S,C,E,D).send({feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:O}),A=typeof k==`string`?k:k?.txid??k?.transaction?.txID;if(!A)throw Error(`Tron deposit failed (missing txid)`);return A},b=async(r,i,a,o=!0,s=!1)=>{let l=c.validateAndGetChainId(i),u=e.isTronLike(l),d=i.map(e=>e.erc20TokenAddress),[{externalActionData:f,contractTransaction:m,contractToApprove:g},{inputUtxosArray:b,outputUtxosArray:x}]=await Promise.all([_(r,l),v(r,l,d,a)]),{zkCallData:S,circomData:C,dimData:w}=await p.constructZkProof(r.merkleTreeHinkalByChain[l],b,x,r.userKeys,f.externalActionId,f.externalAddress,f.externalActionMetadata,r.generateProofRemotely,n.zeroFeeStructure,t.zeroAddress,l);return u?await y(r,l,i,a,S,C,w,o,s):await h.transactCallDirect(r,l,a,i,S,C,w,g,m,o,s)},x=async(i,s,l,u,f=!0,m=!1,v)=>{let b=c.validateAndGetChainId(s),x=e.isTronLike(b),S=s.map(e=>e.erc20TokenAddress),[C,w,T,,E]=u.split(`,`);if(!o.isValidPrivateAddress(u))throw Error(r.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let D=S.map(e=>[new a.Utxo({amount:0n,erc20TokenAddress:e,nullifyingKey:i.userKeys.getShieldedPrivateKey(),spendingPublicKey:i.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}),new a.Utxo({amount:0n,erc20TokenAddress:e,nullifyingKey:i.userKeys.getShieldedPrivateKey(),spendingPublicKey:i.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0})]),O=S.map((e,t)=>[new a.Utxo({amount:l[t],erc20TokenAddress:e,H0:[BigInt(w),BigInt(T)],stealthAddress:C,encryptionKey:E,isNewStyle:!0})]),{externalActionData:k,contractTransaction:A,contractToApprove:j}=await _(i,b),{zkCallData:M,circomData:N,dimData:P}=await p.constructZkProof(i.merkleTreeHinkalByChain[b],D,O,i.userKeys,k.externalActionId,k.externalAddress,k.externalActionMetadata,i.generateProofRemotely,n.zeroFeeStructure,t.zeroAddress,b);if(x)return await y(i,b,s,l,M,N,P,f,m);let F=await h.transactCallDirect(i,b,l,s,M,N,P,j,A,f,m);return g.emitTxPublicData(d.constructAdminData(v,b,S,l,await i.getEthereumAddress())),F};exports.hinkalDeposit=b,exports.hinkalDepositForOther=x;
|
|
@@ -27,7 +27,7 @@ var D = async (e, t) => ({
|
|
|
27
27
|
}), O = async (e, t, n, r) => {
|
|
28
28
|
let i = [...await y(e, t, n, r)], a = [], s = o().toString();
|
|
29
29
|
for (let t = 0; t < n.length; t += 1) {
|
|
30
|
-
let { outputUtxos: n } = b(e.userKeys, i[t], r[t], s);
|
|
30
|
+
let { outputUtxos: n } = await b(e.userKeys, i[t], r[t], s);
|
|
31
31
|
a.push(n);
|
|
32
32
|
}
|
|
33
33
|
return {
|
|
@@ -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(`../../error-handling/error-codes.constants.cjs`),i=require(`../../
|
|
1
|
+
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(`../../types/external-action.types.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const c=require(`../../functions/utils/addresses.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(`../../functions/pre-transaction/getFeeStructure.cjs`),m=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`),h=require(`../../constants/addresses.constants.cjs`),g=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),_=require(`../../functions/utils/fees.utils.cjs`);require(`../../functions/utils/index.cjs`);const v=require(`../../functions/private-wallet/emporium.helpers.cjs`),y=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),b=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),x=require(`../../API/deposit-and-withdraw-status-calls.cjs`),S=require(`./hinkalDepositOnChainUtxos.cjs`);require(`../../functions/index.cjs`);var C=async(c,u,d,p,m,g,S,C,w,T,E)=>{if(p.length===0)throw Error(`No recipients to bridge`);let D=d.erc20TokenAddress,{contractData:O}=e.networkRegistry[u],{emporiumAddress:k}=O;if(!k)throw Error(`No Emporium Address`);let A=h.SWAP_ROUTER_ADDRESSES[i.ExternalActionId.Lifi][u];if(!A)throw Error(`LIFI not configured for chain ${u}`);let j=await c.getRandomRelay(u);if(!j)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let M=await c.getEthereumAddressByChain(u),N=a.getCurrentTimeInSeconds().toString(),P=c.generateProofRemotely?5:1,F=[];for(let e=0;e<p.length;e+=P){let r=p.slice(e,e+P),a=await Promise.all(r.map(async({utxo:e,nativeUtxo:r,bridgeAmount:a,quote:s,temporarySubAccount:p,recipientAddress:h})=>{await l.API.addTemporaryWalletNonce(u,g,p.index);let b=s.nativeFee>0n&&!n.caseInsensitiveEqual(D,t.zeroAddress),x=[D],S=[-e.amount],C=[!1],w=new o.Utxo({amount:0n,erc20TokenAddress:D,nullifyingKey:c.userKeys.getShieldedPrivateKey(),timeStamp:N,...e.isNewStyle?{spendingPublicKey:c.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),E=[[e,w]],O=[[w]];if(b&&r){let e=new o.Utxo({amount:0n,erc20TokenAddress:t.zeroAddress,nullifyingKey:c.userKeys.getShieldedPrivateKey(),timeStamp:N,...r.isNewStyle?{spendingPublicKey:c.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}});x.push(t.zeroAddress),S.push(-r.amount),C.push(!1),E.push([r,e]),O.push([e])}let P=v.createLifiBridgeOps(c,u,p.ethAddress,A,D,e.amount,a,s),F=await _.calculateModifiedFeeStructure(u,d,a,m),I=f.constructAdminData(T,u,x,[-e.amount],M),[{zkCallData:L,circomData:R,dimData:z,commitmentValidationData:B},V]=await Promise.all([y.constructZkProof(c.merkleTreeHinkalByChain[u],E,O,c.userKeys,i.ExternalActionId.Emporium,k,P,c.generateProofRemotely,F,j??t.zeroAddress,u,C,void 0,void 0,p.privateKey),v.getAuthorizationDataIfNeeded(u,p.privateKey)]);return{zkCallData:L,dimData:z,circomData:R,commitmentValidationData:B,authorizationData:V,recipientAddress:h,adminData:I}}));F.push(...a)}await x.safeUpdateDepositAndWithdrawStatus({id:S,chainId:u,hashedEthereumAddress:g,phase:s.DepositAndWithdrawPhase.BEFORE_SCHEDULE_WITHDRAW});let I=await b.transactCallRelayerBatch(u,F,g,C,w,E);return await x.safeUpdateDepositAndWithdrawStatus({id:S,chainId:u,hashedEthereumAddress:g,phase:s.DepositAndWithdrawPhase.AFTER_SCHEDULE_WITHDRAW,scheduleId:I}),I},w=async(e,r,a,o,s,l,f,_,y=!0)=>{let b=r.erc20TokenAddress,x=u.validateAndGetChainId([r]),w=_?c.hashString(_):void 0,T=c.hashEthereumAddress(await e.getEthereumAddressByChain(x)),E=h.SWAP_ROUTER_ADDRESSES[i.ExternalActionId.Lifi][x];if(!E)throw Error(`LIFI router not configured`);let D;if(s)D=s;else{let n=a[0],r=v.createLifiBridgeOps(e,x,n.temporarySubAccount.ethAddress,E,b,n.bridgeAmount,n.bridgeAmount,n.quote).map(e=>g.convertEmporiumOpToCallInfo(e,n.temporarySubAccount.ethAddress,x));D=await p.getFeeStructure(x,b,[b],i.ExternalActionId.Emporium,r,t.PAY_SEND_VARIABLE_RATE)}let O={feeToken:D.feeToken,flatFee:0n,variableRate:0n},k=a.reduce((e,t)=>e+t.quote.nativeFee,0n)>0n&&!n.caseInsensitiveEqual(b,t.zeroAddress),A=a.map(e=>e.bridgeAmount),j=a.map(e=>e.recipientAddress),{userDepositedUtxos:M,statusId:N,depositTxHash:P}=await S.hinkalDepositOnChainUtxos(e,x,r,A,j,D,T,y),F=[];if(k){let n=await d.getErc20TokenFromAPI(x,t.zeroAddress);if(!n)throw Error(`No native token`);let{userDepositedUtxos:r}=await S.hinkalDepositOnChainUtxos(e,x,n,a.map(e=>e.quote.nativeFee),j,O,T,y);F=r}return await m.waitForDepositedUtxosInMerkleTree(e,x,[...M,...F]),{depositTxHash:P,scheduleId:await C(e,x,r,a.map((e,t)=>({...e,utxo:M[t].utxo,nativeUtxo:k?F[t]?.utxo:void 0})),D,T,N,o,l,f,w)}};exports.hinkalDepositAndBridge=w;
|
|
@@ -2,9 +2,9 @@ import { networkRegistry as e } from "../../constants/chains.constants.mjs";
|
|
|
2
2
|
import { PAY_SEND_VARIABLE_RATE as t, zeroAddress as n } from "../../constants/protocol.constants.mjs";
|
|
3
3
|
import { caseInsensitiveEqual as r } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
4
4
|
import { transactionErrorCodes as i } from "../../error-handling/error-codes.constants.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { ExternalActionId as a } from "../../types/external-action.types.mjs";
|
|
6
|
+
import { getCurrentTimeInSeconds as o } from "../../functions/utils/time.utils.mjs";
|
|
7
|
+
import { Utxo as s } from "../utxo/Utxo.mjs";
|
|
8
8
|
import { DepositAndWithdrawPhase as c } from "../../types/scheduled-transactions.types.mjs";
|
|
9
9
|
import "../../types/index.mjs";
|
|
10
10
|
import { hashEthereumAddress as l, hashString as u } from "../../functions/utils/addresses.mjs";
|
|
@@ -29,15 +29,15 @@ var E = async (t, l, u, f, p, h, g, v, T, E, D) => {
|
|
|
29
29
|
if (f.length === 0) throw Error("No recipients to bridge");
|
|
30
30
|
let O = u.erc20TokenAddress, { contractData: k } = e[l], { emporiumAddress: A } = k;
|
|
31
31
|
if (!A) throw Error("No Emporium Address");
|
|
32
|
-
let j = _[
|
|
32
|
+
let j = _[a.Lifi][l];
|
|
33
33
|
if (!j) throw Error(`LIFI not configured for chain ${l}`);
|
|
34
34
|
let M = await t.getRandomRelay(l);
|
|
35
35
|
if (!M) throw Error(i.RELAYER_NOT_AVAILABLE);
|
|
36
|
-
let N = await t.getEthereumAddressByChain(l), P =
|
|
36
|
+
let N = await t.getEthereumAddressByChain(l), P = o().toString(), F = t.generateProofRemotely ? 5 : 1, I = [];
|
|
37
37
|
for (let e = 0; e < f.length; e += F) {
|
|
38
|
-
let i = f.slice(e, e + F),
|
|
38
|
+
let i = f.slice(e, e + F), o = await Promise.all(i.map(async ({ utxo: e, nativeUtxo: i, bridgeAmount: o, quote: c, temporarySubAccount: f, recipientAddress: g }) => {
|
|
39
39
|
await d.addTemporaryWalletNonce(l, h, f.index);
|
|
40
|
-
let _ = c.nativeFee > 0n && !r(O, n), v = [O], C = [-e.amount], w = [!1], T = new
|
|
40
|
+
let _ = c.nativeFee > 0n && !r(O, n), v = [O], C = [-e.amount], w = [!1], T = new s({
|
|
41
41
|
amount: 0n,
|
|
42
42
|
erc20TokenAddress: O,
|
|
43
43
|
nullifyingKey: t.userKeys.getShieldedPrivateKey(),
|
|
@@ -48,7 +48,7 @@ var E = async (t, l, u, f, p, h, g, v, T, E, D) => {
|
|
|
48
48
|
} : { isNewStyle: !1 }
|
|
49
49
|
}), D = [[e, T]], k = [[T]];
|
|
50
50
|
if (_ && i) {
|
|
51
|
-
let e = new
|
|
51
|
+
let e = new s({
|
|
52
52
|
amount: 0n,
|
|
53
53
|
erc20TokenAddress: n,
|
|
54
54
|
nullifyingKey: t.userKeys.getShieldedPrivateKey(),
|
|
@@ -60,7 +60,7 @@ var E = async (t, l, u, f, p, h, g, v, T, E, D) => {
|
|
|
60
60
|
});
|
|
61
61
|
v.push(n), C.push(-i.amount), w.push(!1), D.push([i, e]), k.push([e]);
|
|
62
62
|
}
|
|
63
|
-
let F = b(t, l, f.ethAddress, j, O, e.amount,
|
|
63
|
+
let F = b(t, l, f.ethAddress, j, O, e.amount, o, c), I = await y(l, u, o, p), L = m(E, l, v, [-e.amount], N), [{ zkCallData: R, circomData: z, dimData: B, commitmentValidationData: V }, H] = await Promise.all([S(t.merkleTreeHinkalByChain[l], D, k, t.userKeys, a.Emporium, A, F, t.generateProofRemotely, I, M ?? n, l, w, void 0, void 0, f.privateKey), x(l, f.privateKey)]);
|
|
64
64
|
return {
|
|
65
65
|
zkCallData: R,
|
|
66
66
|
dimData: B,
|
|
@@ -71,7 +71,7 @@ var E = async (t, l, u, f, p, h, g, v, T, E, D) => {
|
|
|
71
71
|
adminData: L
|
|
72
72
|
};
|
|
73
73
|
}));
|
|
74
|
-
I.push(...
|
|
74
|
+
I.push(...o);
|
|
75
75
|
}
|
|
76
76
|
await w({
|
|
77
77
|
id: g,
|
|
@@ -87,33 +87,33 @@ var E = async (t, l, u, f, p, h, g, v, T, E, D) => {
|
|
|
87
87
|
phase: c.AFTER_SCHEDULE_WITHDRAW,
|
|
88
88
|
scheduleId: L
|
|
89
89
|
}), L;
|
|
90
|
-
}, D = async (e, i,
|
|
91
|
-
let S = i.erc20TokenAddress, C = f([i]), w = y ? u(y) : void 0, D = l(await e.getEthereumAddressByChain(C)), O = _[
|
|
90
|
+
}, D = async (e, i, o, s, c, d, m, y, x = !0) => {
|
|
91
|
+
let S = i.erc20TokenAddress, C = f([i]), w = y ? u(y) : void 0, D = l(await e.getEthereumAddressByChain(C)), O = _[a.Lifi][C];
|
|
92
92
|
if (!O) throw Error("LIFI router not configured");
|
|
93
93
|
let k;
|
|
94
94
|
if (c) k = c;
|
|
95
95
|
else {
|
|
96
|
-
let n =
|
|
97
|
-
k = await h(C, S, [S],
|
|
96
|
+
let n = o[0], r = b(e, C, n.temporarySubAccount.ethAddress, O, S, n.bridgeAmount, n.bridgeAmount, n.quote).map((e) => v(e, n.temporarySubAccount.ethAddress, C));
|
|
97
|
+
k = await h(C, S, [S], a.Emporium, r, t);
|
|
98
98
|
}
|
|
99
99
|
let A = {
|
|
100
100
|
feeToken: k.feeToken,
|
|
101
101
|
flatFee: 0n,
|
|
102
102
|
variableRate: 0n
|
|
103
|
-
}, j =
|
|
103
|
+
}, j = o.reduce((e, t) => e + t.quote.nativeFee, 0n) > 0n && !r(S, n), M = o.map((e) => e.bridgeAmount), N = o.map((e) => e.recipientAddress), { userDepositedUtxos: P, statusId: F, depositTxHash: I } = await T(e, C, i, M, N, k, D, x), L = [];
|
|
104
104
|
if (j) {
|
|
105
105
|
let t = await p(C, n);
|
|
106
106
|
if (!t) throw Error("No native token");
|
|
107
|
-
let { userDepositedUtxos: r } = await T(e, C, t,
|
|
107
|
+
let { userDepositedUtxos: r } = await T(e, C, t, o.map((e) => e.quote.nativeFee), N, A, D, x);
|
|
108
108
|
L = r;
|
|
109
109
|
}
|
|
110
110
|
return await g(e, C, [...P, ...L]), {
|
|
111
111
|
depositTxHash: I,
|
|
112
|
-
scheduleId: await E(e, C, i,
|
|
112
|
+
scheduleId: await E(e, C, i, o.map((e, t) => ({
|
|
113
113
|
...e,
|
|
114
114
|
utxo: P[t].utxo,
|
|
115
115
|
nativeUtxo: j ? L[t]?.utxo : void 0
|
|
116
|
-
})), k, D, F,
|
|
116
|
+
})), k, D, F, s, d, m, w)
|
|
117
117
|
};
|
|
118
118
|
};
|
|
119
119
|
//#endregion
|