@gurge/sdk 0.3.26 → 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/rnUtxoCrypto.cjs +1 -1
- package/common/src/crypto/rnUtxoCrypto.d.ts +11 -0
- package/common/src/crypto/rnUtxoCrypto.mjs +46 -12
- 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/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/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/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/functions/index.cjs +1 -1
- package/common/src/functions/index.mjs +3 -3
- package/common/src/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
- package/common/src/functions/pre-transaction/buildCommitmentValidationData.mjs +13 -13
- 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/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 +2 -2
- package/common/src/functions/web3/events/getInputUtxoAndBalance.cjs +1 -1
- package/common/src/functions/web3/events/getInputUtxoAndBalance.mjs +81 -80
- 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 -1
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.d.ts +3 -1
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.mjs +1 -1
- 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 -4
- package/common/src/webworker/viteWorkerURL.constant.mjs +4 -4
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
- package/package.json +1 -1
- package/sdk/package.json.cjs +1 -1
- package/sdk/package.json.mjs +1 -1
- package/common/src/webworker/logError-DFS-H2t0.js +0 -2
|
@@ -1 +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`);var
|
|
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;
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import { IUtxoConstructor } from '../data-structures/utxo/Utxo';
|
|
2
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
|
+
};
|
|
3
8
|
export type PreparedNewStyleUtxoFields = {
|
|
4
9
|
randomization: bigint;
|
|
5
10
|
H0: [bigint, bigint];
|
|
6
11
|
stealthAddress: string;
|
|
7
12
|
};
|
|
8
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>;
|
|
9
20
|
export declare const prepareNewStyleUtxoFields: (nullifyingKey: string, spendingPublicKey?: bigint[]) => Promise<PreparedNewStyleUtxoFields>;
|
|
10
21
|
export declare const prepareNewStyleUtxoFieldsBatch: (items: {
|
|
11
22
|
nullifyingKey: string;
|
|
@@ -2,32 +2,66 @@ import { isReactNative as e } from "../constants/vite.constants.mjs";
|
|
|
2
2
|
import { getRnCryptoBridge as t } from "./rnCryptoBridge.mjs";
|
|
3
3
|
import { randomBigInt as n } from "../functions/web3/etherFunctions.mjs";
|
|
4
4
|
import { CryptoWorkerOp as r } from "../webworker/cryptoWorker/cryptoWorker.types.mjs";
|
|
5
|
+
import { calcStealthAddressStructure as i } from "../functions/snarkjs/common.snarkjs.mjs";
|
|
5
6
|
//#region libs/shared/common/src/crypto/rnUtxoCrypto.ts
|
|
6
|
-
var
|
|
7
|
-
|
|
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();
|
|
8
12
|
let i = t();
|
|
9
13
|
await i.init();
|
|
10
14
|
let a = await i.call(r.GET_SPENDING_KEY_PAIR, { signature: n.getSignature() });
|
|
11
|
-
return
|
|
12
|
-
|
|
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) => {
|
|
13
47
|
if (!e) throw Error("prepareNewStyleUtxoFields is only for React Native crypto bridge");
|
|
14
48
|
let o = t();
|
|
15
49
|
await o.init();
|
|
16
50
|
let s = await o.call(r.PREPARE_NEW_STYLE_UTXO_FIELDS, {
|
|
17
|
-
initialRandomization:
|
|
51
|
+
initialRandomization: a(),
|
|
18
52
|
nullifyingKey: n,
|
|
19
|
-
spendingPublicKey:
|
|
53
|
+
spendingPublicKey: i?.map((e) => e.toString())
|
|
20
54
|
});
|
|
21
55
|
return {
|
|
22
56
|
randomization: BigInt(s.randomization),
|
|
23
57
|
H0: [BigInt(s.H0[0]), BigInt(s.H0[1])],
|
|
24
58
|
stealthAddress: s.stealthAddress
|
|
25
59
|
};
|
|
26
|
-
},
|
|
60
|
+
}, d = async (n) => {
|
|
27
61
|
if (!e) throw Error("prepareNewStyleUtxoFieldsBatch is only for React Native crypto bridge");
|
|
28
|
-
let
|
|
29
|
-
return await
|
|
30
|
-
initialRandomization:
|
|
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(),
|
|
31
65
|
nullifyingKey: e.nullifyingKey,
|
|
32
66
|
spendingPublicKey: e.spendingPublicKey?.map((e) => e.toString())
|
|
33
67
|
})) })).map((e) => ({
|
|
@@ -35,6 +69,6 @@ var i = () => n(31).toString(), a = async (n) => {
|
|
|
35
69
|
H0: [BigInt(e.H0[0]), BigInt(e.H0[1])],
|
|
36
70
|
stealthAddress: e.stealthAddress
|
|
37
71
|
}));
|
|
38
|
-
},
|
|
72
|
+
}, f = (t) => e && !!t.isNewStyle && !!t.nullifyingKey && t.H0 === void 0 && t.randomization === void 0;
|
|
39
73
|
//#endregion
|
|
40
|
-
export {
|
|
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(`../../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
|
|
@@ -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(`../../functions/utils/tron.utils.cjs`),u=require(`../../functions/utils/token-check.utils.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`),p=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`),m=require(`../../functions/utils/fees.utils.cjs`),h=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),g=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),_=require(`../../API/deposit-and-withdraw-status-calls.cjs`),v=require(`./hinkalDepositOnChainUtxos.cjs`);require(`../../functions/index.cjs`);var y=async(i,c,u,f,p,v,y,b,x,S,C,w)=>{let T=e.isTronLike(c);if(f.length===0)throw Error(`userDepositedUtxos must not be empty`);let E=u.erc20TokenAddress,[D,O]=await Promise.all([i.getRandomRelay(c),i.getEthereumAddressByChain(c)]);if(!D)throw Error(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let k=a.getCurrentTimeInSeconds().toString(),A=i.generateProofRemotely&&!T?5:1,j=[],M=l.addressToHexFormat(O);for(let e=0;e<f.length;e+=A){let r=f.slice(e,e+A),a=await Promise.all(r.map(async({recipientAddress:r,utxo:a},s)=>{let f=e+s,g=l.addressToHexFormat(r),_=new o.Utxo({amount:0n,erc20TokenAddress:E,nullifyingKey:i.userKeys.getShieldedPrivateKey(),timeStamp:k,...a.isNewStyle?{spendingPublicKey:i.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),y=[[n.caseInsensitiveEqual(a.erc20TokenAddress,E)?a:o.Utxo.createFrom(a,{erc20TokenAddress:E}),_]],b=[[_]],x={externalActionId:0n,externalAddress:g,externalActionMetadata:`0x00`},S=d.constructAdminData(C,c,[E],[-a.amount],M),w=await m.calculateModifiedFeeStructure(c,u,p[f],v),{zkCallData:O,circomData:A,dimData:j,commitmentValidationData:N}=await h.constructZkProof(i.merkleTreeHinkalByChain[c],y,b,i.userKeys,x.externalActionId,x.externalAddress,x.externalActionMetadata,i.generateProofRemotely,w,D??t.zeroAddress,c);return{zkCallData:O,dimData:j,circomData:A,commitmentValidationData:N,adminData:S,recipientAddress:r,tronProofSignature:await l.reorderZkCallData(T,O,j,A)}}));j.push(...a)}await _.safeUpdateDepositAndWithdrawStatus({id:b,chainId:c,hashedEthereumAddress:y,phase:s.DepositAndWithdrawPhase.BEFORE_SCHEDULE_WITHDRAW});let N=await g.transactCallRelayerBatch(c,j,y,x,S,w);return await _.safeUpdateDepositAndWithdrawStatus({id:b,chainId:c,hashedEthereumAddress:y,phase:s.DepositAndWithdrawPhase.AFTER_SCHEDULE_WITHDRAW,scheduleId:N}),N},b=async(e,t,n,r,a,o,s,d,m,h=!0)=>{let g=u.validateAndGetChainId([t]),_=m?c.hashString(m):void 0,b=t.erc20TokenAddress,x=c.hashEthereumAddress(l.addressToHexFormat(await e.getEthereumAddressByChain(g))),S=o??await f.getFeeStructure(g,b,[b],i.ExternalActionId.Transact,[],10n),{userDepositedUtxos:C,statusId:w,depositTxHash:T}=await v.hinkalDepositOnChainUtxos(e,g,t,n,r,S,x,h);return await p.waitForDepositedUtxosInMerkleTree(e,g,C),{depositTxHash:T,scheduleId:await y(e,g,t,C,n,S,x,w,a,s,d,_)}};exports.hinkalDepositAndWithdraw=b;
|
|
@@ -2,9 +2,9 @@ import { isTronLike as e } from "../../constants/chains.constants.mjs";
|
|
|
2
2
|
import { zeroAddress as t } from "../../constants/protocol.constants.mjs";
|
|
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
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { ExternalActionId as i } from "../../types/external-action.types.mjs";
|
|
6
|
+
import { getCurrentTimeInSeconds as a } from "../../functions/utils/time.utils.mjs";
|
|
7
|
+
import { Utxo as o } from "../utxo/Utxo.mjs";
|
|
8
8
|
import { DepositAndWithdrawPhase as s } from "../../types/scheduled-transactions.types.mjs";
|
|
9
9
|
import "../../types/index.mjs";
|
|
10
10
|
import { hashEthereumAddress as c, hashString as l } from "../../functions/utils/addresses.mjs";
|
|
@@ -20,28 +20,28 @@ import { safeUpdateDepositAndWithdrawStatus as y } from "../../API/deposit-and-w
|
|
|
20
20
|
import { hinkalDepositOnChainUtxos as b } from "./hinkalDepositOnChainUtxos.mjs";
|
|
21
21
|
import "../../functions/index.mjs";
|
|
22
22
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.ts
|
|
23
|
-
var x = async (
|
|
23
|
+
var x = async (i, c, l, f, m, h, b, x, S, C, w, T) => {
|
|
24
24
|
let E = e(c);
|
|
25
25
|
if (f.length === 0) throw Error("userDepositedUtxos must not be empty");
|
|
26
|
-
let D = l.erc20TokenAddress, [O, k] = await Promise.all([
|
|
26
|
+
let D = l.erc20TokenAddress, [O, k] = await Promise.all([i.getRandomRelay(c), i.getEthereumAddressByChain(c)]);
|
|
27
27
|
if (!O) throw Error(r.RELAYER_NOT_AVAILABLE);
|
|
28
|
-
let A =
|
|
28
|
+
let A = a().toString(), j = i.generateProofRemotely && !E ? 5 : 1, M = [], N = u(k);
|
|
29
29
|
for (let e = 0; e < f.length; e += j) {
|
|
30
|
-
let r = f.slice(e, e + j),
|
|
31
|
-
let f = e + s, v = u(r), y = new
|
|
30
|
+
let r = f.slice(e, e + j), a = await Promise.all(r.map(async ({ recipientAddress: r, utxo: a }, s) => {
|
|
31
|
+
let f = e + s, v = u(r), y = new o({
|
|
32
32
|
amount: 0n,
|
|
33
33
|
erc20TokenAddress: D,
|
|
34
|
-
nullifyingKey:
|
|
34
|
+
nullifyingKey: i.userKeys.getShieldedPrivateKey(),
|
|
35
35
|
timeStamp: A,
|
|
36
|
-
...
|
|
37
|
-
spendingPublicKey:
|
|
36
|
+
...a.isNewStyle ? {
|
|
37
|
+
spendingPublicKey: i.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
38
38
|
isNewStyle: !0
|
|
39
39
|
} : { isNewStyle: !1 }
|
|
40
|
-
}), b = [[n(
|
|
40
|
+
}), b = [[n(a.erc20TokenAddress, D) ? a : o.createFrom(a, { erc20TokenAddress: D }), y]], x = [[y]], S = {
|
|
41
41
|
externalActionId: 0n,
|
|
42
42
|
externalAddress: v,
|
|
43
43
|
externalActionMetadata: "0x00"
|
|
44
|
-
}, C = p(w, c, [D], [-
|
|
44
|
+
}, C = p(w, c, [D], [-a.amount], N), T = await g(c, l, m[f], h), { zkCallData: k, circomData: j, dimData: M, commitmentValidationData: P } = await _(i.merkleTreeHinkalByChain[c], b, x, i.userKeys, S.externalActionId, S.externalAddress, S.externalActionMetadata, i.generateProofRemotely, T, O ?? t, c);
|
|
45
45
|
return {
|
|
46
46
|
zkCallData: k,
|
|
47
47
|
dimData: M,
|
|
@@ -52,7 +52,7 @@ var x = async (o, c, l, f, m, h, b, x, S, C, w, T) => {
|
|
|
52
52
|
tronProofSignature: await d(E, k, M, j)
|
|
53
53
|
};
|
|
54
54
|
}));
|
|
55
|
-
M.push(...
|
|
55
|
+
M.push(...a);
|
|
56
56
|
}
|
|
57
57
|
await y({
|
|
58
58
|
id: x,
|
|
@@ -68,11 +68,11 @@ var x = async (o, c, l, f, m, h, b, x, S, C, w, T) => {
|
|
|
68
68
|
phase: s.AFTER_SCHEDULE_WITHDRAW,
|
|
69
69
|
scheduleId: P
|
|
70
70
|
}), P;
|
|
71
|
-
}, S = async (e, t, n, r,
|
|
72
|
-
let _ = f([t]), v = p ? l(p) : void 0, y = t.erc20TokenAddress, S = c(u(await e.getEthereumAddressByChain(_))), C =
|
|
71
|
+
}, S = async (e, t, n, r, a, o, s, d, p, g = !0) => {
|
|
72
|
+
let _ = f([t]), v = p ? l(p) : void 0, y = t.erc20TokenAddress, S = c(u(await e.getEthereumAddressByChain(_))), C = o ?? await m(_, y, [y], i.Transact, [], 10n), { userDepositedUtxos: w, statusId: T, depositTxHash: E } = await b(e, _, t, n, r, C, S, g);
|
|
73
73
|
return await h(e, _, w), {
|
|
74
74
|
depositTxHash: E,
|
|
75
|
-
scheduleId: await x(e, _, t, w, n, C, S, T,
|
|
75
|
+
scheduleId: await x(e, _, t, w, n, C, S, T, a, s, d, v)
|
|
76
76
|
};
|
|
77
77
|
};
|
|
78
78
|
//#endregion
|
|
@@ -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(`../../
|
|
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(`../../types/external-action.types.cjs`),i=require(`../../functions/utils/time.utils.cjs`),a=require(`../../types/admin.types.cjs`),o=require(`../../functions/utils/addresses.cjs`),s=require(`../../functions/web3/events/getShieldedBalance.cjs`),c=require(`../../functions/pre-transaction/outputUtxoProcessing.cjs`);require(`../../error-handling/index.cjs`);const l=require(`../../functions/pre-transaction/constructAdminData.cjs`),u=require(`../AccountActions/AccountActions.cjs`),d=require(`../../functions/pre-transaction/recipientUtxoProcessing.cjs`),f=require(`../../functions/pre-transaction/getFeeStructure.cjs`);require(`../../functions/pre-transaction/index.cjs`);const p=require(`../../functions/utils/involves-permit2-op.cjs`),m=require(`../../functions/utils/convertEmporiumOpToCallInfo.cjs`),h=require(`../../functions/private-wallet/emporium.helpers.cjs`),g=require(`../../functions/snarkjs/constructGeneralZkProof.cjs`),_=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),v=require(`../../functions/pre-transaction/merge-with-fee-structure.cjs`),y=require(`../../functions/pre-transaction/merge-with-fee-structure-emporium.cjs`),b=require(`./handleAutoDepositBack.cjs`);var x=async(e,t,n,r,a)=>{let o=[...await s.addPaddingToUtxos(e,t,n,r)],l=[],u=i.getCurrentTimeInSeconds().toString();for(let t=0;t<n.length;t+=1){let{outputUtxos:n}=await c.outputUtxoProcessing(e.userKeys,o[t],r[t],u);l.push(n)}return a&&d.recipientUtxoProcessing(a,l,r,u),{inputUtxosArray:o,outputUtxosArray:l}},S=async(i,s,c,d,S,C,w,T,E,D,O,k=!1,A,j,M)=>{if(M&&!o.isValidPrivateAddress(M.recipientInfo))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);if(w.length>0&&!T)throw Error(`Subaccount is required for private wallet transactions`);let N=c.map(e=>e.erc20TokenAddress),P=await i.getEthereumAddressByChain(s),F=T?u.AccountActions.getAddressFromSubAccount(s,T):void 0,{contractData:I}=e.networkRegistry[s],{emporiumAddress:L}=I;if(!L)throw Error(`No Emporium Address Provided`);let R=D??await f.getFeeStructure(s,E,N,r.ExternalActionId.Emporium,C.map(e=>m.convertEmporiumOpToCallInfo(e,F??``,s)));for(F?await y.mergeWithFeeStructureEmporium(i,s,F,C,N,d,R,w.find(e=>t.caseInsensitiveEqual(e.token.erc20TokenAddress,R.feeToken))?.amount??0n):await v.mergeWithFeeStructure(s,N,d,R);S.length<N.length;)S.push(!1);let[{inputUtxosArray:z,outputUtxosArray:B},V]=await Promise.all([x(i,s,N,d,M),O??await i.getRandomRelay(s,!0)]);if(!V)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H=T?u.AccountActions.getPrivateKeyFromSubAccount(s,T):void 0,[{zkCallData:U,circomData:W,dimData:G,commitmentValidationData:K},q]=await Promise.all([g.constructZkProof(i.merkleTreeHinkalByChain[s],z,B,i.userKeys,r.ExternalActionId.Emporium,L,C,i.generateProofRemotely,R,V,s,S,void 0,void 0,H),h.getAuthorizationDataIfNeeded(s,H)]),J=await _.transactCallRelayer(s,U,G,W,K,p.uniswapWorkaround(C),q,l.constructAdminData(j,s,w.map(e=>e.token.erc20TokenAddress),w.map(e=>e.amount),P,j===a.AdminTransactionType.PublicSwap?w.map(({token:e})=>e):void 0));return k&&T&&b.handleAutoDepositBack(i,s,F,T,R.feeToken,A,w,W),J};exports.hinkalPrivateWallet=S;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { networkRegistry as e } from "../../constants/chains.constants.mjs";
|
|
2
2
|
import { caseInsensitiveEqual as t } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
3
3
|
import { transactionErrorCodes as n } from "../../error-handling/error-codes.constants.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { ExternalActionId as r } from "../../types/external-action.types.mjs";
|
|
5
|
+
import { getCurrentTimeInSeconds as i } from "../../functions/utils/time.utils.mjs";
|
|
6
6
|
import { AdminTransactionType as a } from "../../types/admin.types.mjs";
|
|
7
7
|
import { isValidPrivateAddress as o } from "../../functions/utils/addresses.mjs";
|
|
8
8
|
import { addPaddingToUtxos as s } from "../../functions/web3/events/getShieldedBalance.mjs";
|
|
@@ -22,27 +22,27 @@ import { mergeWithFeeStructure as v } from "../../functions/pre-transaction/merg
|
|
|
22
22
|
import { mergeWithFeeStructureEmporium as y } from "../../functions/pre-transaction/merge-with-fee-structure-emporium.mjs";
|
|
23
23
|
import { handleAutoDepositBack as b } from "./handleAutoDepositBack.mjs";
|
|
24
24
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalPrivateWallet.ts
|
|
25
|
-
var x = async (e, t, n,
|
|
26
|
-
let o = [...await s(e, t, n,
|
|
25
|
+
var x = async (e, t, n, r, a) => {
|
|
26
|
+
let o = [...await s(e, t, n, r)], l = [], u = i().toString();
|
|
27
27
|
for (let t = 0; t < n.length; t += 1) {
|
|
28
|
-
let { outputUtxos: n } = await c(e.userKeys, o[t],
|
|
28
|
+
let { outputUtxos: n } = await c(e.userKeys, o[t], r[t], u);
|
|
29
29
|
l.push(n);
|
|
30
30
|
}
|
|
31
|
-
return a && d(a, l,
|
|
31
|
+
return a && d(a, l, r, u), {
|
|
32
32
|
inputUtxosArray: o,
|
|
33
33
|
outputUtxosArray: l
|
|
34
34
|
};
|
|
35
|
-
}, S = async (
|
|
35
|
+
}, S = async (i, s, c, d, S, C, w, T, E, D, O, k = !1, A, j, M) => {
|
|
36
36
|
if (M && !o(M.recipientInfo)) throw Error(n.RECIPIENT_FORMAT_INCORRECT);
|
|
37
37
|
if (w.length > 0 && !T) throw Error("Subaccount is required for private wallet transactions");
|
|
38
|
-
let N = c.map((e) => e.erc20TokenAddress), P = await
|
|
38
|
+
let N = c.map((e) => e.erc20TokenAddress), P = await i.getEthereumAddressByChain(s), F = T ? u.getAddressFromSubAccount(s, T) : void 0, { contractData: I } = e[s], { emporiumAddress: L } = I;
|
|
39
39
|
if (!L) throw Error("No Emporium Address Provided");
|
|
40
|
-
let R = D ?? await f(s, E, N,
|
|
41
|
-
for (F ? await y(
|
|
42
|
-
let [{ inputUtxosArray: z, outputUtxosArray: B }, V] = await Promise.all([x(
|
|
40
|
+
let R = D ?? await f(s, E, N, r.Emporium, C.map((e) => m(e, F ?? "", s)));
|
|
41
|
+
for (F ? await y(i, s, F, C, N, d, R, w.find((e) => t(e.token.erc20TokenAddress, R.feeToken))?.amount ?? 0n) : await v(s, N, d, R); S.length < N.length;) S.push(!1);
|
|
42
|
+
let [{ inputUtxosArray: z, outputUtxosArray: B }, V] = await Promise.all([x(i, s, N, d, M), O ?? await i.getRandomRelay(s, !0)]);
|
|
43
43
|
if (!V) throw Error(n.RELAYER_NOT_AVAILABLE);
|
|
44
|
-
let H = T ? u.getPrivateKeyFromSubAccount(s, T) : void 0, [{ zkCallData: U, circomData: W, dimData: G, commitmentValidationData: K }, q] = await Promise.all([g(
|
|
45
|
-
return k && T && b(
|
|
44
|
+
let H = T ? u.getPrivateKeyFromSubAccount(s, T) : void 0, [{ zkCallData: U, circomData: W, dimData: G, commitmentValidationData: K }, q] = await Promise.all([g(i.merkleTreeHinkalByChain[s], z, B, i.userKeys, r.Emporium, L, C, i.generateProofRemotely, R, V, s, S, void 0, void 0, H), h(s, H)]), J = await _(s, U, G, W, K, p(C), q, l(j, s, w.map((e) => e.token.erc20TokenAddress), w.map((e) => e.amount), P, j === a.PublicSwap ? w.map(({ token: e }) => e) : void 0));
|
|
45
|
+
return k && T && b(i, s, F, T, R.feeToken, A, w, W), J;
|
|
46
46
|
};
|
|
47
47
|
//#endregion
|
|
48
48
|
export { S as hinkalPrivateWallet };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../types/external-action.types.cjs`),o=require(`../../functions/snarkjs/common.snarkjs.cjs`),s=require(`../../functions/utils/time.utils.cjs`),c=require(`../utxo/Utxo.cjs`);require(`../../types/index.cjs`);const l=require(`../../functions/utils/token-check.utils.cjs`),u=require(`../../functions/pre-transaction/getFeeStructure.cjs`),d=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),f=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);let p=require(`ethers`);var m=async(m,h,g,_,v)=>{let y=l.validateAndGetChainId([h]),b=h.erc20TokenAddress;if(g.getTokenAddress(y)!==b)throw Error(`Off-chain UTXO token mismatch`);let x=v?new i.UserKeys(v):new i.UserKeys(g.nullifyingKey,g.nullifyingKey);if(!g.nullifyingKey&&!v)throw Error(`Claimable UTXO nullifyingKey is missing`);let S=x.getShieldedPrivateKey();if(g.nullifyingKey&&g.nullifyingKey!==S)throw Error(`Claimable UTXO key mismatch`);let{originalDeployer:C}=e.networkRegistry[y].contractData;if(!C)throw Error(`missing data`);let w=c.Utxo.createFrom(g,{nullifyingKey:S}),T=_??await u.getFeeStructure(y,b,[b],a.ExternalActionId.Transact,void 0,void 0,{mintTo:b,nullifierCount:1});if(T.feeToken!==b)throw Error(`Claim fee token mismatch: fee must be paid from claimed UTXO token`);let E=T.variableRate>0n?T.variableRate:t.HINKAL_PRIVATE_SEND_VARIABLE_RATE;if(w.amount<=T.flatFee)throw Error(n.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);let D=w.amount-T.flatFee,O=D*E/10000n,k=D-O;if(k<=0n)throw Error(n.transactionErrorCodes.RECIPIENT_AMOUNT_INVALID);let A=T.flatFee+O,[j,M,N,,P]=m.getRecipientInfo().split(`,`);if(!M||!N||!j||!P)throw Error(`Invalid recipient info`);let F=s.getCurrentTimeInSeconds().toString(),I=new c.Utxo({amount:0n,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,nullifyingKey:x.getShieldedPrivateKey(),...w.isNewStyle?{spendingPublicKey:x.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),L=new c.Utxo({amount:0n,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,nullifyingKey:x.getShieldedPrivateKey(),timeStamp:F,spendingPublicKey:x.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}),R=new c.Utxo({amount:k,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,timeStamp:F,H0:[BigInt(M),BigInt(N)],stealthAddress:j,encryptionKey:P,isNewStyle:!0}),z=[w,I],B=[L,R],V=await m.getRandomRelay(y,!0);if(!V)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H=i.UserKeys.findCorrectRandomization(r.randomBigInt(31),x.getShieldedPrivateKey()),U={tokenNumber:1,nullifierAmount:z.length,outputAmount:B.length},W=o.calcEncryptedOutputs([B])[0].map(e=>Array.from(p.ethers.getBytes(e))),{proofAArr:G,proofBArr:K,proofCArr:q,publicInputsArr:J,commitmentValidationData:Y}=await d.constructSolanaZkProof(m.generateProofRemotely,m.merkleTreeHinkalByChain[y],x,[b],[z],[B],H,A,0n,t.solanaNativeAddress,V,U,W,y),X={recipient:V,mint:b===`11111111111111111111111111111111`?void 0:b};return f.solanaTransactCallRelayer({chainId:y,relayAddress:V,functionName:`transfer`,args:{proofAArr:G,proofBArr:K,proofCArr:q,publicInputsArr:J,encryptedOutputs:W,relayerFee:A.toString(),dimensions:U},accounts:X,commitmentValidationData:Y})};exports.hinkalSolanaClaimUtxo=m;
|