@hinkal/common 0.2.33 → 0.2.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API/callNearIntentsAPI.cjs +1 -0
- package/API/callNearIntentsAPI.d.ts +3 -0
- package/API/callNearIntentsAPI.mjs +8 -0
- package/API/enclaveSignatureCalls.cjs +1 -1
- package/API/enclaveSignatureCalls.d.ts +1 -1
- package/API/enclaveSignatureCalls.mjs +1 -1
- package/API/index.cjs +1 -1
- package/API/index.d.ts +1 -0
- package/API/index.mjs +1 -0
- package/constants/bridging.constants.cjs +1 -1
- package/constants/bridging.constants.d.ts +15 -1
- package/constants/bridging.constants.mjs +25 -5
- package/constants/chains.constants.cjs +1 -1
- package/constants/chains.constants.d.ts +12 -1
- package/constants/chains.constants.mjs +94 -26
- package/constants/index.cjs +1 -1
- package/constants/index.mjs +1 -0
- package/constants/protocol.constants.cjs +1 -1
- package/constants/protocol.constants.d.ts +3 -0
- package/constants/protocol.constants.mjs +2 -2
- package/constants/server.constants.cjs +1 -1
- package/constants/server.constants.d.ts +2 -0
- package/constants/server.constants.mjs +2 -0
- package/constants/token-data/ERC20Registry.cjs +1 -1
- package/constants/token-data/ERC20Registry.mjs +49 -14
- package/constants/token-data/avalancheRegistry.json.cjs +1 -0
- package/constants/token-data/avalancheRegistry.json.mjs +44 -0
- package/constants/token-data/bnbMainnetRegistry.json.cjs +1 -0
- package/constants/token-data/bnbMainnetRegistry.json.mjs +44 -0
- package/constants/token-data/cronosRegistry.json.cjs +1 -0
- package/constants/token-data/cronosRegistry.json.mjs +44 -0
- package/constants/token-data/hyperEvmRegistry.json.cjs +1 -0
- package/constants/token-data/hyperEvmRegistry.json.mjs +36 -0
- package/constants/token-data/index.cjs +1 -1
- package/constants/token-data/index.d.ts +58 -1
- package/constants/token-data/index.mjs +10 -2
- package/constants/token-data/inkRegistry.json.cjs +1 -0
- package/constants/token-data/inkRegistry.json.mjs +28 -0
- package/constants/token-data/monadRegistry.json.cjs +1 -0
- package/constants/token-data/monadRegistry.json.mjs +36 -0
- package/constants/token-data/plasmaRegistry.json.cjs +1 -0
- package/constants/token-data/plasmaRegistry.json.mjs +28 -0
- package/constants/token-data/popularNonRebasingTokens.cjs +1 -0
- package/constants/token-data/popularNonRebasingTokens.d.ts +2 -0
- package/constants/token-data/popularNonRebasingTokens.mjs +11 -0
- package/constants/tokens.constants.cjs +1 -1
- package/constants/tokens.constants.mjs +8 -1
- package/data-structures/Hinkal/Hinkal.cjs +1 -1
- package/data-structures/Hinkal/Hinkal.d.ts +8 -2
- package/data-structures/Hinkal/Hinkal.mjs +123 -101
- package/data-structures/Hinkal/IHinkal.d.ts +8 -2
- package/data-structures/Hinkal/handleAutoDepositBack.cjs +1 -1
- package/data-structures/Hinkal/handleAutoDepositBack.mjs +15 -15
- package/data-structures/Hinkal/hinkalClaimUtxo.cjs +1 -1
- package/data-structures/Hinkal/hinkalClaimUtxo.mjs +33 -35
- package/data-structures/Hinkal/hinkalDepositAndBridge.cjs +1 -1
- package/data-structures/Hinkal/hinkalDepositAndBridge.mjs +43 -49
- package/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
- package/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +38 -40
- package/data-structures/Hinkal/hinkalNearDepositAndBridge.cjs +1 -0
- package/data-structures/Hinkal/hinkalNearDepositAndBridge.d.ts +6 -0
- package/data-structures/Hinkal/hinkalNearDepositAndBridge.mjs +43 -0
- package/data-structures/Hinkal/hinkalPrivateWallet.cjs +1 -1
- package/data-structures/Hinkal/hinkalPrivateWallet.mjs +21 -26
- package/data-structures/Hinkal/hinkalSolanaClaimUtxo.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaClaimUtxo.mjs +62 -64
- package/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.d.ts +2 -2
- package/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +36 -36
- package/data-structures/Hinkal/hinkalSolanaProxySend.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaProxySend.mjs +7 -7
- package/data-structures/Hinkal/hinkalSolanaProxyShield.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaProxyShield.mjs +9 -9
- package/data-structures/Hinkal/hinkalSolanaProxySwap.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaProxySwap.mjs +8 -8
- package/data-structures/Hinkal/hinkalSolanaSwap.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaSwap.mjs +50 -51
- package/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaTransfer.mjs +45 -46
- package/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
- package/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +38 -39
- package/data-structures/Hinkal/hinkalSwap.cjs +1 -1
- package/data-structures/Hinkal/hinkalSwap.mjs +18 -19
- package/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
- package/data-structures/Hinkal/hinkalTransfer.mjs +21 -22
- package/data-structures/Hinkal/hinkalWithdraw.cjs +1 -1
- package/data-structures/Hinkal/hinkalWithdraw.mjs +24 -25
- package/data-structures/Hinkal/hinkalWithdrawStuckUtxos.cjs +1 -1
- package/data-structures/Hinkal/hinkalWithdrawStuckUtxos.mjs +39 -41
- package/data-structures/Hinkal/index.cjs +1 -1
- package/data-structures/Hinkal/index.d.ts +1 -0
- package/data-structures/Hinkal/index.mjs +1 -0
- package/data-structures/crypto-keys/keys.cjs +1 -1
- package/data-structures/crypto-keys/keys.d.ts +18 -0
- package/data-structures/crypto-keys/keys.mjs +10 -0
- package/data-structures/index.cjs +1 -1
- package/data-structures/index.mjs +1 -0
- package/error-handling/error-codes.constants.cjs +1 -1
- package/error-handling/error-codes.constants.d.ts +4 -0
- package/error-handling/error-codes.constants.mjs +4 -0
- package/error-handling/get-error.message.cjs +1 -1
- package/error-handling/get-error.message.mjs +2 -1
- package/functions/index.cjs +1 -1
- package/functions/index.mjs +8 -6
- package/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
- package/functions/pre-transaction/buildCommitmentValidationData.d.ts +12 -2
- package/functions/pre-transaction/buildCommitmentValidationData.mjs +43 -36
- package/functions/pre-transaction/sendV0Transaction.cjs +2 -1
- package/functions/pre-transaction/sendV0Transaction.d.ts +2 -2
- package/functions/pre-transaction/sendV0Transaction.mjs +65 -60
- package/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
- package/functions/snarkjs/constructGeneralZkProof.d.ts +1 -0
- package/functions/snarkjs/constructGeneralZkProof.mjs +6 -5
- package/functions/snarkjs/constructSolanaZkProof.cjs +1 -1
- package/functions/snarkjs/constructSolanaZkProof.d.ts +1 -0
- package/functions/snarkjs/constructSolanaZkProof.mjs +35 -34
- package/functions/snarkjs/generateMainAndCommitmentZkProof.cjs +1 -0
- package/functions/snarkjs/generateMainAndCommitmentZkProof.d.ts +11 -0
- package/functions/snarkjs/generateMainAndCommitmentZkProof.mjs +16 -0
- package/functions/snarkjs/generateZkProof.cjs +1 -1
- package/functions/snarkjs/generateZkProof.d.ts +3 -3
- package/functions/snarkjs/generateZkProof.mjs +5 -9
- package/functions/snarkjs/generateZkProofEnclave.cjs +1 -1
- package/functions/snarkjs/generateZkProofEnclave.d.ts +2 -2
- package/functions/snarkjs/generateZkProofEnclave.mjs +8 -8
- package/functions/snarkjs/generateZkProofSelf.cjs +1 -1
- package/functions/snarkjs/generateZkProofSelf.mjs +5 -5
- package/functions/snarkjs/index.cjs +1 -1
- package/functions/snarkjs/index.d.ts +1 -0
- package/functions/snarkjs/index.mjs +1 -0
- package/functions/snarkjs/verifyCommitmentValidationData.cjs +1 -1
- package/functions/snarkjs/verifyCommitmentValidationData.mjs +5 -5
- package/functions/utils/customEnclaveFunctionsRegister.d.ts +3 -3
- package/functions/utils/enclave-signature-storage.cjs +1 -1
- package/functions/utils/enclave-signature-storage.d.ts +1 -1
- package/functions/utils/enclave-signature-storage.mjs +1 -1
- package/functions/utils/index.cjs +1 -1
- package/functions/utils/index.d.ts +1 -0
- package/functions/utils/index.mjs +6 -5
- package/functions/utils/nearIntents.utils.cjs +1 -0
- package/functions/utils/nearIntents.utils.d.ts +11 -0
- package/functions/utils/nearIntents.utils.mjs +36 -0
- package/functions/utils/time.utils.cjs +1 -1
- package/functions/utils/time.utils.d.ts +1 -0
- package/functions/utils/time.utils.mjs +2 -2
- package/functions/web3/oneInchAPI.cjs +1 -1
- package/functions/web3/oneInchAPI.mjs +1 -1
- package/index.cjs +1 -1
- package/index.mjs +320 -315
- package/package.json +1 -1
- package/types/index.d.ts +1 -0
- package/types/near-intents.types.d.ts +60 -0
- package/types/solana.types.d.ts +1 -0
- package/webworker/{logError-fCJ4HXQz.js → logError-DoUkEIFE.js} +14 -14
- package/webworker/package.json +1 -1
- package/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.cjs +1 -1
- package/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.mjs +1 -1
- package/webworker/snarkjsWorkerNode.cjs +1 -1
- package/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
- package/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
- package/webworker/utxoWorkerNode.cjs +1 -1
- package/webworker/viteWorkerURL.constant.cjs +3 -3
- package/webworker/viteWorkerURL.constant.mjs +3 -3
- package/webworker/{workerProxy-BNBqYien.js → workerProxy-DQJE57Ye.js} +1 -1
- package/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
- package/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
- package/webworker/zkProofWorkerNode.cjs +1 -1
|
@@ -12,18 +12,17 @@ import { constructAdminData as l } from "../../functions/pre-transaction/constru
|
|
|
12
12
|
import { AccountActions as u } from "../AccountActions/AccountActions.mjs";
|
|
13
13
|
import { recipientUtxoProcessing as d } from "../../functions/pre-transaction/recipientUtxoProcessing.mjs";
|
|
14
14
|
import { getFeeStructure as f } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
15
|
-
import { buildCommitmentValidationData as p } from "../../functions/pre-transaction/buildCommitmentValidationData.mjs";
|
|
16
15
|
import "../../functions/pre-transaction/index.mjs";
|
|
17
|
-
import { uniswapWorkaround as
|
|
18
|
-
import { convertEmporiumOpToCallInfo as
|
|
19
|
-
import { getAuthorizationDataIfNeeded as
|
|
20
|
-
import { constructZkProof as
|
|
21
|
-
import { transactCallRelayer as
|
|
22
|
-
import { mergeWithFeeStructure as
|
|
23
|
-
import { mergeWithFeeStructureEmporium as
|
|
24
|
-
import { handleAutoDepositBack as
|
|
16
|
+
import { uniswapWorkaround as p } from "../../functions/utils/involves-permit2-op.mjs";
|
|
17
|
+
import { convertEmporiumOpToCallInfo as m } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
18
|
+
import { getAuthorizationDataIfNeeded as h } from "../../functions/private-wallet/emporium.helpers.mjs";
|
|
19
|
+
import { constructZkProof as g } from "../../functions/snarkjs/constructGeneralZkProof.mjs";
|
|
20
|
+
import { transactCallRelayer as _ } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
21
|
+
import { mergeWithFeeStructure as v } from "../../functions/pre-transaction/merge-with-fee-structure.mjs";
|
|
22
|
+
import { mergeWithFeeStructureEmporium as y } from "../../functions/pre-transaction/merge-with-fee-structure-emporium.mjs";
|
|
23
|
+
import { handleAutoDepositBack as b } from "./handleAutoDepositBack.mjs";
|
|
25
24
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalPrivateWallet.ts
|
|
26
|
-
var
|
|
25
|
+
var x = async (e, t, n, r, i) => {
|
|
27
26
|
let a = [...await s(e, t, n, r)], l = [], u = o().toString();
|
|
28
27
|
for (let t = 0; t < n.length; t += 1) {
|
|
29
28
|
let { outputUtxos: n } = c(e.userKeys, a[t], r[t], u);
|
|
@@ -33,21 +32,17 @@ var S = async (e, t, n, r, i) => {
|
|
|
33
32
|
inputUtxosArray: a,
|
|
34
33
|
outputUtxosArray: l
|
|
35
34
|
};
|
|
36
|
-
},
|
|
37
|
-
if (
|
|
38
|
-
if (
|
|
39
|
-
let
|
|
40
|
-
if (!
|
|
41
|
-
let
|
|
42
|
-
for (
|
|
43
|
-
let [{ inputUtxosArray:
|
|
44
|
-
if (!
|
|
45
|
-
let
|
|
46
|
-
|
|
47
|
-
g(s, U),
|
|
48
|
-
p(s, o.userKeys, P, B)
|
|
49
|
-
]), Y = await v(s, W, K, G, J, m(w), q, l(M, s, T.map((e) => e.token.erc20TokenAddress), T.map((e) => e.amount), F, M === n.PublicSwap ? T.map(({ token: e }) => e) : void 0));
|
|
50
|
-
return A && E && x(o, s, I, E, z.feeToken, j, T, G), Y;
|
|
35
|
+
}, S = async (o, s, c, d, S, C, w, T, E, D, O, k = !1, A, j, M) => {
|
|
36
|
+
if (M && !i(M.recipientInfo)) throw Error(a.RECIPIENT_FORMAT_INCORRECT);
|
|
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 o.getEthereumAddressByChain(s), F = T ? u.getAddressFromSubAccount(s, T) : void 0, { contractData: I } = t[s], { emporiumAddress: L } = I;
|
|
39
|
+
if (!L) throw Error("No Emporium Address Provided");
|
|
40
|
+
let R = D ?? await f(s, E, N, e.Emporium, C.map((e) => m(e, F ?? "", s)));
|
|
41
|
+
for (F ? await y(o, s, F, C, N, d, R, w.find((e) => r(e.token.erc20TokenAddress, R.feeToken))?.amount ?? 0n) : v(s, N, d, R); S.length < N.length;) S.push(!1);
|
|
42
|
+
let [{ inputUtxosArray: z, outputUtxosArray: B }, V] = await Promise.all([x(o, s, N, d, M), O ?? await o.getRandomRelay(s, !0)]);
|
|
43
|
+
if (!V) throw Error(a.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(o.merkleTreeHinkalByChain[s], z, B, o.userKeys, e.Emporium, L, C, o.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 === n.PublicSwap ? w.map(({ token: e }) => e) : void 0));
|
|
45
|
+
return k && T && b(o, s, F, T, R.feeToken, A, w, W), J;
|
|
51
46
|
};
|
|
52
47
|
//#endregion
|
|
53
|
-
export {
|
|
48
|
+
export { S as hinkalPrivateWallet };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`);require(`../../types/index.cjs`);const r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../crypto-keys/keys.cjs`),o=require(`../../functions/utils/time.utils.cjs`),s=require(`../utxo/Utxo.cjs`),c=require(`../../functions/utils/token-check.utils.cjs`),l=require(`../../functions/snarkjs/common.snarkjs.cjs`),u=require(`../../functions/pre-transaction/getFeeStructure.cjs`),d=require(`../../functions/
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`);require(`../../types/index.cjs`);const r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../crypto-keys/keys.cjs`),o=require(`../../functions/utils/time.utils.cjs`),s=require(`../utxo/Utxo.cjs`),c=require(`../../functions/utils/token-check.utils.cjs`),l=require(`../../functions/snarkjs/common.snarkjs.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=c.validateAndGetChainId([h]),b=h.erc20TokenAddress;if(g.getTokenAddress(y)!==b)throw Error(`Off-chain UTXO token mismatch`);let x=v?new a.UserKeys(v):new a.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}=t.networkRegistry[y].contractData;if(!C)throw Error(`missing data`);let w=s.Utxo.createFrom(g,{nullifyingKey:S}),T=_??await u.getFeeStructure(y,b,[b],e.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:n.HINKAL_PRIVATE_SEND_VARIABLE_RATE;if(w.amount<=T.flatFee)throw Error(r.transactionErrorCodes.INSUFFICIENT_FUNDS_TO_TRANSACT);let D=w.amount-T.flatFee,O=D*E/10000n,k=D-O;if(k<=0n)throw Error(r.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=o.getCurrentTimeInSeconds().toString(),I=new s.Utxo({amount:0n,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,nullifyingKey:x.getShieldedPrivateKey(),...w.isNewStyle?{spendingPublicKey:x.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),L=new s.Utxo({amount:0n,erc20TokenAddress:w.erc20TokenAddress,mintAddress:w.mintAddress,nullifyingKey:x.getShieldedPrivateKey(),timeStamp:F,spendingPublicKey:x.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}),R=new s.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(r.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let H=a.UserKeys.findCorrectRandomization(i.randomBigInt(31),x.getShieldedPrivateKey()),U={tokenNumber:1,nullifierAmount:z.length,outputAmount:B.length},W=l.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,n.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;
|
|
@@ -10,84 +10,82 @@ import { Utxo as c } from "../utxo/Utxo.mjs";
|
|
|
10
10
|
import { validateAndGetChainId as l } from "../../functions/utils/token-check.utils.mjs";
|
|
11
11
|
import { calcEncryptedOutputs as u } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
12
12
|
import { getFeeStructure as d } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
13
|
-
import {
|
|
14
|
-
import "../../functions/
|
|
15
|
-
import {
|
|
16
|
-
import { solanaTransactCallRelayer as m } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
17
|
-
import { ethers as h } from "ethers";
|
|
13
|
+
import { constructSolanaZkProof as f } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
|
|
14
|
+
import { solanaTransactCallRelayer as p } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
15
|
+
import { ethers as m } from "ethers";
|
|
18
16
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaClaimUtxo.ts
|
|
19
|
-
var
|
|
20
|
-
let
|
|
21
|
-
if (
|
|
22
|
-
let
|
|
23
|
-
if (!
|
|
24
|
-
let
|
|
25
|
-
if (
|
|
26
|
-
let { originalDeployer:
|
|
27
|
-
if (!
|
|
28
|
-
let
|
|
29
|
-
mintTo:
|
|
17
|
+
var h = async (h, g, _, v, y) => {
|
|
18
|
+
let b = l([g]), x = g.erc20TokenAddress;
|
|
19
|
+
if (_.getTokenAddress(b) !== x) throw Error("Off-chain UTXO token mismatch");
|
|
20
|
+
let S = y ? new o(y) : new o(_.nullifyingKey, _.nullifyingKey);
|
|
21
|
+
if (!_.nullifyingKey && !y) throw Error("Claimable UTXO nullifyingKey is missing");
|
|
22
|
+
let C = S.getShieldedPrivateKey();
|
|
23
|
+
if (_.nullifyingKey && _.nullifyingKey !== C) throw Error("Claimable UTXO key mismatch");
|
|
24
|
+
let { originalDeployer: w } = t[b].contractData;
|
|
25
|
+
if (!w) throw Error("missing data");
|
|
26
|
+
let T = c.createFrom(_, { nullifyingKey: C }), E = v ?? await d(b, x, [x], e.Transact, void 0, void 0, {
|
|
27
|
+
mintTo: x,
|
|
30
28
|
nullifierCount: 1
|
|
31
29
|
});
|
|
32
|
-
if (
|
|
33
|
-
let
|
|
34
|
-
if (
|
|
35
|
-
let
|
|
36
|
-
if (
|
|
37
|
-
let
|
|
38
|
-
if (!
|
|
39
|
-
let
|
|
30
|
+
if (E.feeToken !== x) throw Error("Claim fee token mismatch: fee must be paid from claimed UTXO token");
|
|
31
|
+
let D = E.variableRate > 0n ? E.variableRate : n;
|
|
32
|
+
if (T.amount <= E.flatFee) throw Error(i.INSUFFICIENT_FUNDS_TO_TRANSACT);
|
|
33
|
+
let O = T.amount - E.flatFee, k = O * D / 10000n, A = O - k;
|
|
34
|
+
if (A <= 0n) throw Error(i.RECIPIENT_AMOUNT_INVALID);
|
|
35
|
+
let j = E.flatFee + k, [M, N, P, , F] = h.getRecipientInfo().split(",");
|
|
36
|
+
if (!N || !P || !M || !F) throw Error("Invalid recipient info");
|
|
37
|
+
let I = s().toString(), L = new c({
|
|
40
38
|
amount: 0n,
|
|
41
|
-
erc20TokenAddress:
|
|
42
|
-
mintAddress:
|
|
43
|
-
nullifyingKey:
|
|
44
|
-
...
|
|
45
|
-
spendingPublicKey:
|
|
39
|
+
erc20TokenAddress: T.erc20TokenAddress,
|
|
40
|
+
mintAddress: T.mintAddress,
|
|
41
|
+
nullifyingKey: S.getShieldedPrivateKey(),
|
|
42
|
+
...T.isNewStyle ? {
|
|
43
|
+
spendingPublicKey: S.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
46
44
|
isNewStyle: !0
|
|
47
45
|
} : { isNewStyle: !1 }
|
|
48
|
-
}),
|
|
46
|
+
}), R = new c({
|
|
49
47
|
amount: 0n,
|
|
50
|
-
erc20TokenAddress:
|
|
51
|
-
mintAddress:
|
|
52
|
-
nullifyingKey:
|
|
53
|
-
timeStamp:
|
|
54
|
-
spendingPublicKey:
|
|
48
|
+
erc20TokenAddress: T.erc20TokenAddress,
|
|
49
|
+
mintAddress: T.mintAddress,
|
|
50
|
+
nullifyingKey: S.getShieldedPrivateKey(),
|
|
51
|
+
timeStamp: I,
|
|
52
|
+
spendingPublicKey: S.getSpendingKeyPair().pubSpendingBJJPoint,
|
|
55
53
|
isNewStyle: !0
|
|
56
|
-
}),
|
|
57
|
-
amount:
|
|
58
|
-
erc20TokenAddress:
|
|
59
|
-
mintAddress:
|
|
60
|
-
timeStamp:
|
|
61
|
-
H0: [BigInt(
|
|
62
|
-
stealthAddress:
|
|
63
|
-
encryptionKey:
|
|
54
|
+
}), z = new c({
|
|
55
|
+
amount: A,
|
|
56
|
+
erc20TokenAddress: T.erc20TokenAddress,
|
|
57
|
+
mintAddress: T.mintAddress,
|
|
58
|
+
timeStamp: I,
|
|
59
|
+
H0: [BigInt(N), BigInt(P)],
|
|
60
|
+
stealthAddress: M,
|
|
61
|
+
encryptionKey: F,
|
|
64
62
|
isNewStyle: !0
|
|
65
|
-
}),
|
|
66
|
-
if (!
|
|
67
|
-
let
|
|
63
|
+
}), B = [T, L], V = [R, z], H = await h.getRandomRelay(b, !0);
|
|
64
|
+
if (!H) throw Error(i.RELAYER_NOT_AVAILABLE);
|
|
65
|
+
let U = o.findCorrectRandomization(a(31), S.getShieldedPrivateKey()), W = {
|
|
68
66
|
tokenNumber: 1,
|
|
69
|
-
nullifierAmount:
|
|
70
|
-
outputAmount:
|
|
71
|
-
},
|
|
72
|
-
recipient:
|
|
73
|
-
mint:
|
|
67
|
+
nullifierAmount: B.length,
|
|
68
|
+
outputAmount: V.length
|
|
69
|
+
}, G = u([V])[0].map((e) => Array.from(m.getBytes(e))), { proofAArr: K, proofBArr: q, proofCArr: J, publicInputsArr: Y, commitmentValidationData: X } = await f(h.generateProofRemotely, h.merkleTreeHinkalByChain[b], S, [x], [B], [V], U, j, 0n, r, H, W, G, b), Z = {
|
|
70
|
+
recipient: H,
|
|
71
|
+
mint: x === "11111111111111111111111111111111" ? void 0 : x
|
|
74
72
|
};
|
|
75
|
-
return
|
|
76
|
-
chainId:
|
|
77
|
-
relayAddress:
|
|
73
|
+
return p({
|
|
74
|
+
chainId: b,
|
|
75
|
+
relayAddress: H,
|
|
78
76
|
functionName: "transfer",
|
|
79
77
|
args: {
|
|
80
|
-
proofAArr:
|
|
81
|
-
proofBArr:
|
|
82
|
-
proofCArr:
|
|
83
|
-
publicInputsArr:
|
|
84
|
-
encryptedOutputs:
|
|
85
|
-
relayerFee:
|
|
86
|
-
dimensions:
|
|
78
|
+
proofAArr: K,
|
|
79
|
+
proofBArr: q,
|
|
80
|
+
proofCArr: J,
|
|
81
|
+
publicInputsArr: Y,
|
|
82
|
+
encryptedOutputs: G,
|
|
83
|
+
relayerFee: j.toString(),
|
|
84
|
+
dimensions: W
|
|
87
85
|
},
|
|
88
|
-
accounts:
|
|
89
|
-
commitmentValidationData:
|
|
86
|
+
accounts: Z,
|
|
87
|
+
commitmentValidationData: X
|
|
90
88
|
});
|
|
91
89
|
};
|
|
92
90
|
//#endregion
|
|
93
|
-
export {
|
|
91
|
+
export { h as hinkalSolanaClaimUtxo };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const i=require(`../../functions/utils/addresses.cjs`),a=require(`../../error-handling/error-codes.constants.cjs`),o=require(`../../functions/web3/etherFunctions.cjs`),s=require(`../crypto-keys/keys.cjs`),c=require(`../../functions/utils/time.utils.cjs`),l=require(`../utxo/Utxo.cjs`),u=require(`../../functions/utils/solanaMint.utils.cjs`),d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/snarkjs/common.snarkjs.cjs`),p=require(`../../functions/pre-transaction/solana.cjs`),m=require(`../../functions/pre-transaction/constructAdminData.cjs`),h=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),g=require(`../../functions/pre-transaction/getFeeStructure.cjs`),_=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`)
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/external-action.types.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../types/scheduled-transactions.types.cjs`);require(`../../types/index.cjs`);const i=require(`../../functions/utils/addresses.cjs`),a=require(`../../error-handling/error-codes.constants.cjs`),o=require(`../../functions/web3/etherFunctions.cjs`),s=require(`../crypto-keys/keys.cjs`),c=require(`../../functions/utils/time.utils.cjs`),l=require(`../utxo/Utxo.cjs`),u=require(`../../functions/utils/solanaMint.utils.cjs`),d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/snarkjs/common.snarkjs.cjs`),p=require(`../../functions/pre-transaction/solana.cjs`),m=require(`../../functions/pre-transaction/constructAdminData.cjs`),h=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),g=require(`../../functions/pre-transaction/getFeeStructure.cjs`),_=require(`../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.cjs`);require(`../../functions/pre-transaction/index.cjs`);const v=require(`../../functions/utils/getUtxosFromReceiptSolana.cjs`),y=require(`../../functions/utils/fees.utils.cjs`);require(`../../functions/web3/index.cjs`);const b=require(`../../functions/snarkjs/constructSolanaZkProof.cjs`),x=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),S=require(`../../API/deposit-and-withdraw-status-calls.cjs`);require(`../../functions/index.cjs`);let C=require(`ethers`),w=require(`@solana/web3.js`),T=require(`@coral-xyz/anchor`);var E=(e,r,i,a)=>{let{hinkalIdl:c,hinkalAddress:l,originalDeployer:d}=t.networkRegistry[r].contractData;if(!c)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let m=e.userKeys.getShieldedPrivateKey(),h=e.getSolanaProgram(c),g=e.getSolanaPublicKey(),_=new w.PublicKey(d),v=new w.PublicKey(l),{mintPublicKey:y}=u.formatMintAddress(i.erc20TokenAddress),b=y.toString(),x=p.getStorageAccountPublicKey(v,_),S=p.getStorageVaultPublicKey(v,_),C=p.getMerkleAccountPublicKey(v,_),T=a.map(()=>p.buildAnchorStealthAddressStructure(f.calcStealthAddressStructure(s.UserKeys.findCorrectRandomization(o.randomBigInt(31),m),m,e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint))),E=b===n.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:E?null:y,atasValue:E?null:void 0,storageAccount:x,storageVault:S,merkleAccount:C,amounts:a,anchorStealthStructures:T}},D=e=>e.program.methods.multiPaymentDeposit(e.amounts.map(e=>new T.BN(e.toString())),e.anchorStealthStructures,!0).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,storageVaultAta:e.atasValue}),O=async(e,t,n,i,a,o,s)=>{let c=i.map(e=>e+y.calculateTotalFee(e,o)),l=E(e,t,n,c),d=(await S.updateDepositAndWithdrawStatus({chainId:t,hashedEthereumAddress:s,phase:r.DepositAndWithdrawPhase.BEFORE_DEPOSIT})).id??void 0,f=await D(l).rpc(),p=await l.program.provider.connection.getLatestBlockhash();await l.program.provider.connection.confirmTransaction({blockhash:p.blockhash,lastValidBlockHeight:p.lastValidBlockHeight,signature:f},`finalized`);let m=await h.fetchSolanaTransaction(l.program.provider.connection,f,`finalized`);if(!m)throw Error(`Transaction missing`);await S.safeUpdateDepositAndWithdrawStatus({id:d,chainId:t,hashedEthereumAddress:s,phase:r.DepositAndWithdrawPhase.AFTER_DEPOSIT,depositTxHash:f});let{compressedAddress:g}=u.formatMintAddress(n.erc20TokenAddress),_=v.getOnChainUtxosFromReceiptSolana(m,l.program,e.userKeys,g),b=[],x=[..._];return a.forEach((e,t)=>{let n=c[t],r=x.find(e=>e.amount===n);if(!r)throw Error(`Could not find newly created UTXO with amount ${n} for recipient ${e}.`);b.push({recipientAddress:e,utxo:r}),x.splice(x.indexOf(r),1)}),{userDepositedUtxos:b,depositTxHash:f,statusId:d}},k=async(e,i,d,p,h,g,_,v,w,T,E,D,O)=>{let k=d.erc20TokenAddress;if(p.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:A}=t.networkRegistry[i].contractData;if(!A)throw Error(`missing data`);let j=await e.getRandomRelay(i,!0);if(!j)throw Error(a.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let M=c.getCurrentTimeInSeconds().toString(),N=e.generateProofRemotely?5:1,P=[];for(let t=0;t<p.length;t+=N){let r=p.slice(t,t+N),a=await Promise.all(r.map(async({recipientAddress:t,utxo:r},a)=>{let{compressedAddress:c}=u.formatMintAddress(n.solanaNativeAddress),p=new l.Utxo({amount:0n,mintAddress:k,erc20TokenAddress:c,nullifyingKey:e.userKeys.getShieldedPrivateKey(),timeStamp:M,...r.isNewStyle?{spendingPublicKey:e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint,isNewStyle:!0}:{isNewStyle:!1}}),g=[r,p],v=[p],x=s.UserKeys.findCorrectRandomization(o.randomBigInt(31),e.userKeys.getShieldedPrivateKey()),S={tokenNumber:1,nullifierAmount:g.length,outputAmount:v.length},w=f.calcEncryptedOutputs([v])[0][0],T=Array.from(C.ethers.getBytes(w)),D=await y.calculateModifiedFeeStructure(i,d,_[a],h),A=m.constructAdminData(E,i,[k],[_[a]],await e.getEthereumAddress()),{proofAArr:N,proofBArr:P,proofCArr:F,publicInputsArr:I,commitmentValidationData:L}=await b.constructSolanaZkProof(e.generateProofRemotely,e.merkleTreeHinkalByChain[i],e.userKeys,[k],[g],[v],x,D.flatFee,D.variableRate,t,j,S,[T],i),R={recipient:t,mint:k===`11111111111111111111111111111111`?void 0:k};return{relayAddress:j,functionName:`transact`,chainId:i,recipientAmount:_[a].toString(),args:{proofAArr:N,proofBArr:P,proofCArr:F,publicInputsArr:I,encryptedOutputs:[T],relayerFee:D.flatFee.toString(),dimensions:S},accounts:R,adminData:A,commitmentValidationData:L,displayRecipient:O?.[a]}}));P.push(...a)}await S.safeUpdateDepositAndWithdrawStatus({id:v,chainId:i,hashedEthereumAddress:g,phase:r.DepositAndWithdrawPhase.BEFORE_SCHEDULE_WITHDRAW});let F=await x.solanaTransactCallRelayerBatch(i,P,g,w,T,D);return await S.safeUpdateDepositAndWithdrawStatus({id:v,chainId:i,hashedEthereumAddress:g,phase:r.DepositAndWithdrawPhase.AFTER_SCHEDULE_WITHDRAW,scheduleId:F}),F},A=async(t,n,r,a,o,s,c,l,u,f)=>{let p=d.validateAndGetChainId([n]),m=n.erc20TokenAddress,h=i.hashEthereumAddress(await t.getEthereumAddressByChain(p)),v=u?i.hashString(u):void 0,y=s??await g.getFeeStructure(p,m,[m],e.ExternalActionId.Transact,[],5n),{userDepositedUtxos:b,depositTxHash:x,statusId:S}=await O(t,p,n,r,a,y,h);return await _.waitForDepositedUtxosInMerkleTree(t,p,b),await k(t,p,n,b,y,h,r,S,o,c,l,v,f),x};exports.buildMultiPaymentDepositBuilder=D,exports.buildMultiPaymentDepositSetup=E,exports.hinkalSolanaDepositAndWithdraw=A,exports.hinkalSolanaWithdrawBatch=k;
|
|
@@ -19,6 +19,6 @@ export type MultiPaymentDepositSetup = ReturnType<typeof buildMultiPaymentDeposi
|
|
|
19
19
|
export declare const buildMultiPaymentDepositBuilder: (setup: MultiPaymentDepositSetup) => import('@coral-xyz/anchor/dist/cjs/program/namespace/methods').MethodsBuilder<import('@coral-xyz/anchor').Idl, import('@coral-xyz/anchor/dist/cjs/idl').IdlInstruction & {
|
|
20
20
|
name: string;
|
|
21
21
|
}, import('@coral-xyz/anchor/dist/cjs/idl').IdlInstructionAccountItem>;
|
|
22
|
-
export declare const hinkalSolanaWithdrawBatch: (hinkal: IHinkal, chainId: number, token: ERC20Token, userDepositedUtxos: RecipientUtxo[], feeStructure: FeeStructure, hashedEthereumAddress: string, recipientAmounts: bigint[], statusId: string | undefined, txCompletionTime?: number, ref?: string, action?: AdminTransactionType, hashedDashboardAccountId?: string) => Promise<string>;
|
|
22
|
+
export declare const hinkalSolanaWithdrawBatch: (hinkal: IHinkal, chainId: number, token: ERC20Token, userDepositedUtxos: RecipientUtxo[], feeStructure: FeeStructure, hashedEthereumAddress: string, recipientAmounts: bigint[], statusId: string | undefined, txCompletionTime?: number, ref?: string, action?: AdminTransactionType, hashedDashboardAccountId?: string, displayRecipients?: string[]) => Promise<string>;
|
|
23
23
|
export declare const hinkalSolanaDepositAndWithdraw: (hinkal: IHinkal, token: ERC20Token, recipientAmounts: bigint[], recipientAddresses: string[], txCompletionTime?: number, feeStructureOverride?: FeeStructure, // Should be passed fee for only one withdraw transaction, multiplication happening in this function
|
|
24
|
-
ref?: string, action?: AdminTransactionType, dashboardAccountId?: string) => Promise<string>;
|
|
24
|
+
ref?: string, action?: AdminTransactionType, dashboardAccountId?: string, displayRecipients?: string[]) => Promise<string>;
|
|
@@ -17,24 +17,23 @@ import { constructAdminData as y } from "../../functions/pre-transaction/constru
|
|
|
17
17
|
import { fetchSolanaTransaction as b } from "../../functions/pre-transaction/sendV0Transaction.mjs";
|
|
18
18
|
import { getFeeStructure as x } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
19
19
|
import { waitForDepositedUtxosInMerkleTree as S } from "../../functions/pre-transaction/waitForDepositedUtxosInMerkleTree.mjs";
|
|
20
|
-
import { buildCommitmentValidationData as C } from "../../functions/pre-transaction/buildCommitmentValidationData.mjs";
|
|
21
20
|
import "../../functions/pre-transaction/index.mjs";
|
|
22
|
-
import { getOnChainUtxosFromReceiptSolana as
|
|
23
|
-
import { calculateModifiedFeeStructure as
|
|
21
|
+
import { getOnChainUtxosFromReceiptSolana as C } from "../../functions/utils/getUtxosFromReceiptSolana.mjs";
|
|
22
|
+
import { calculateModifiedFeeStructure as w, calculateTotalFee as T } from "../../functions/utils/fees.utils.mjs";
|
|
24
23
|
import "../../functions/web3/index.mjs";
|
|
25
|
-
import { constructSolanaZkProof as
|
|
26
|
-
import { solanaTransactCallRelayerBatch as
|
|
27
|
-
import { safeUpdateDepositAndWithdrawStatus as
|
|
24
|
+
import { constructSolanaZkProof as E } from "../../functions/snarkjs/constructSolanaZkProof.mjs";
|
|
25
|
+
import { solanaTransactCallRelayerBatch as D } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
26
|
+
import { safeUpdateDepositAndWithdrawStatus as O, updateDepositAndWithdrawStatus as k } from "../../API/deposit-and-withdraw-status-calls.mjs";
|
|
28
27
|
import "../../functions/index.mjs";
|
|
29
|
-
import { ethers as
|
|
30
|
-
import { PublicKey as
|
|
31
|
-
import { BN as
|
|
28
|
+
import { ethers as A } from "ethers";
|
|
29
|
+
import { PublicKey as j } from "@solana/web3.js";
|
|
30
|
+
import { BN as M } from "@coral-xyz/anchor";
|
|
32
31
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.ts
|
|
33
|
-
var
|
|
32
|
+
var N = (e, r, i, a) => {
|
|
34
33
|
let { hinkalIdl: o, hinkalAddress: l, originalDeployer: u } = t[r].contractData;
|
|
35
34
|
if (!o) throw Error("No IDL configured for Solana program on this network");
|
|
36
35
|
if (!u) throw Error("missing original deployer");
|
|
37
|
-
let f = e.userKeys.getShieldedPrivateKey(), p = e.getSolanaProgram(o), y = e.getSolanaPublicKey(), b = new
|
|
36
|
+
let f = e.userKeys.getShieldedPrivateKey(), p = e.getSolanaProgram(o), y = e.getSolanaPublicKey(), b = new j(u), x = new j(l), { mintPublicKey: S } = d(i.erc20TokenAddress), C = S.toString(), w = _(x, b), T = v(x, b), E = g(x, b), D = a.map(() => h(m(c.findCorrectRandomization(s(31), f), f, e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint))), O = C === n;
|
|
38
37
|
return {
|
|
39
38
|
program: p,
|
|
40
39
|
publicKey: y,
|
|
@@ -47,7 +46,7 @@ var P = (e, r, i, a) => {
|
|
|
47
46
|
amounts: a,
|
|
48
47
|
anchorStealthStructures: D
|
|
49
48
|
};
|
|
50
|
-
},
|
|
49
|
+
}, P = (e) => e.program.methods.multiPaymentDeposit(e.amounts.map((e) => new M(e.toString())), e.anchorStealthStructures, !0).accounts({
|
|
51
50
|
mint: e.mint,
|
|
52
51
|
signer: e.publicKey,
|
|
53
52
|
signerAta: e.atasValue,
|
|
@@ -56,12 +55,12 @@ var P = (e, r, i, a) => {
|
|
|
56
55
|
storageVault: e.storageVault,
|
|
57
56
|
merkleAccount: e.merkleAccount,
|
|
58
57
|
storageVaultAta: e.atasValue
|
|
59
|
-
}),
|
|
60
|
-
let c = i.map((e) => e +
|
|
58
|
+
}), F = async (e, t, n, i, a, o, s) => {
|
|
59
|
+
let c = i.map((e) => e + T(e, o)), l = N(e, t, n, c), u = (await k({
|
|
61
60
|
chainId: t,
|
|
62
61
|
hashedEthereumAddress: s,
|
|
63
62
|
phase: r.BEFORE_DEPOSIT
|
|
64
|
-
})).id ?? void 0, f = await
|
|
63
|
+
})).id ?? void 0, f = await P(l).rpc(), p = await l.program.provider.connection.getLatestBlockhash();
|
|
65
64
|
await l.program.provider.connection.confirmTransaction({
|
|
66
65
|
blockhash: p.blockhash,
|
|
67
66
|
lastValidBlockHeight: p.lastValidBlockHeight,
|
|
@@ -69,14 +68,14 @@ var P = (e, r, i, a) => {
|
|
|
69
68
|
}, "finalized");
|
|
70
69
|
let m = await b(l.program.provider.connection, f, "finalized");
|
|
71
70
|
if (!m) throw Error("Transaction missing");
|
|
72
|
-
await
|
|
71
|
+
await O({
|
|
73
72
|
id: u,
|
|
74
73
|
chainId: t,
|
|
75
74
|
hashedEthereumAddress: s,
|
|
76
75
|
phase: r.AFTER_DEPOSIT,
|
|
77
76
|
depositTxHash: f
|
|
78
77
|
});
|
|
79
|
-
let { compressedAddress: h } = d(n.erc20TokenAddress), g =
|
|
78
|
+
let { compressedAddress: h } = d(n.erc20TokenAddress), g = C(m, l.program, e.userKeys, h), _ = [], v = [...g];
|
|
80
79
|
return a.forEach((e, t) => {
|
|
81
80
|
let n = c[t], r = v.find((e) => e.amount === n);
|
|
82
81
|
if (!r) throw Error(`Could not find newly created UTXO with amount ${n} for recipient ${e}.`);
|
|
@@ -89,19 +88,19 @@ var P = (e, r, i, a) => {
|
|
|
89
88
|
depositTxHash: f,
|
|
90
89
|
statusId: u
|
|
91
90
|
};
|
|
92
|
-
},
|
|
93
|
-
let
|
|
91
|
+
}, I = async (e, i, a, f, m, h, g, _, v, b, x, S, C) => {
|
|
92
|
+
let T = a.erc20TokenAddress;
|
|
94
93
|
if (f.length === 0) throw Error("userDepositedUtxos must not be empty");
|
|
95
|
-
let { originalDeployer:
|
|
96
|
-
if (!
|
|
97
|
-
let
|
|
98
|
-
if (!
|
|
94
|
+
let { originalDeployer: k } = t[i].contractData;
|
|
95
|
+
if (!k) throw Error("missing data");
|
|
96
|
+
let j = await e.getRandomRelay(i, !0);
|
|
97
|
+
if (!j) throw Error(o.RELAYER_NOT_AVAILABLE);
|
|
99
98
|
let M = l().toString(), N = e.generateProofRemotely ? 5 : 1, P = [];
|
|
100
99
|
for (let t = 0; t < f.length; t += N) {
|
|
101
100
|
let r = f.slice(t, t + N), o = await Promise.all(r.map(async ({ recipientAddress: t, utxo: r }, o) => {
|
|
102
101
|
let { compressedAddress: l } = d(n), f = new u({
|
|
103
102
|
amount: 0n,
|
|
104
|
-
mintAddress:
|
|
103
|
+
mintAddress: T,
|
|
105
104
|
erc20TokenAddress: l,
|
|
106
105
|
nullifyingKey: e.userKeys.getShieldedPrivateKey(),
|
|
107
106
|
timeStamp: M,
|
|
@@ -113,12 +112,12 @@ var P = (e, r, i, a) => {
|
|
|
113
112
|
tokenNumber: 1,
|
|
114
113
|
nullifierAmount: h.length,
|
|
115
114
|
outputAmount: _.length
|
|
116
|
-
}, S = p([_])[0][0],
|
|
115
|
+
}, S = p([_])[0][0], D = Array.from(A.getBytes(S)), O = await w(i, a, g[o], m), k = y(x, i, [T], [g[o]], await e.getEthereumAddress()), { proofAArr: N, proofBArr: P, proofCArr: F, publicInputsArr: I, commitmentValidationData: L } = await E(e.generateProofRemotely, e.merkleTreeHinkalByChain[i], e.userKeys, [T], [h], [_], v, O.flatFee, O.variableRate, t, j, b, [D], i), R = {
|
|
117
116
|
recipient: t,
|
|
118
|
-
mint:
|
|
117
|
+
mint: T === "11111111111111111111111111111111" ? void 0 : T
|
|
119
118
|
};
|
|
120
119
|
return {
|
|
121
|
-
relayAddress:
|
|
120
|
+
relayAddress: j,
|
|
122
121
|
functionName: "transact",
|
|
123
122
|
chainId: i,
|
|
124
123
|
recipientAmount: g[o].toString(),
|
|
@@ -127,34 +126,35 @@ var P = (e, r, i, a) => {
|
|
|
127
126
|
proofBArr: P,
|
|
128
127
|
proofCArr: F,
|
|
129
128
|
publicInputsArr: I,
|
|
130
|
-
encryptedOutputs: [
|
|
129
|
+
encryptedOutputs: [D],
|
|
131
130
|
relayerFee: O.flatFee.toString(),
|
|
132
131
|
dimensions: b
|
|
133
132
|
},
|
|
134
133
|
accounts: R,
|
|
135
134
|
adminData: k,
|
|
136
|
-
commitmentValidationData: L
|
|
135
|
+
commitmentValidationData: L,
|
|
136
|
+
displayRecipient: C?.[o]
|
|
137
137
|
};
|
|
138
138
|
}));
|
|
139
139
|
P.push(...o);
|
|
140
140
|
}
|
|
141
|
-
await
|
|
141
|
+
await O({
|
|
142
142
|
id: _,
|
|
143
143
|
chainId: i,
|
|
144
144
|
hashedEthereumAddress: h,
|
|
145
145
|
phase: r.BEFORE_SCHEDULE_WITHDRAW
|
|
146
146
|
});
|
|
147
|
-
let F = await
|
|
148
|
-
return await
|
|
147
|
+
let F = await D(i, P, h, v, b, S);
|
|
148
|
+
return await O({
|
|
149
149
|
id: _,
|
|
150
150
|
chainId: i,
|
|
151
151
|
hashedEthereumAddress: h,
|
|
152
152
|
phase: r.AFTER_SCHEDULE_WITHDRAW,
|
|
153
153
|
scheduleId: F
|
|
154
154
|
}), F;
|
|
155
|
-
},
|
|
156
|
-
let
|
|
157
|
-
return await S(t,
|
|
155
|
+
}, L = async (t, n, r, o, s, c, l, u, d, p) => {
|
|
156
|
+
let m = f([n]), h = n.erc20TokenAddress, g = i(await t.getEthereumAddressByChain(m)), _ = d ? a(d) : void 0, v = c ?? await x(m, h, [h], e.Transact, [], 5n), { userDepositedUtxos: y, depositTxHash: b, statusId: C } = await F(t, m, n, r, o, v, g);
|
|
157
|
+
return await S(t, m, y), await I(t, m, n, y, v, g, r, C, s, l, u, _, p), b;
|
|
158
158
|
};
|
|
159
159
|
//#endregion
|
|
160
|
-
export {
|
|
160
|
+
export { P as buildMultiPaymentDepositBuilder, N as buildMultiPaymentDepositSetup, L as hinkalSolanaDepositAndWithdraw, I as hinkalSolanaWithdrawBatch };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../API/admin-calls.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../../functions/
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../API/admin-calls.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../../functions/pre-transaction/constructAdminData.cjs`),i=require(`../../functions/utils/create-provider.cjs`),a=require(`../AccountActions/AccountActions.cjs`),o=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),s=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`);let c=require(`@solana/web3.js`);var l=async(t,r,o,l)=>{let u=n.validateAndGetChainId([t]),d=a.AccountActions.getAddressFromSubAccount(u,o);if(!d)throw Error(`Public account address is not available`);let{fetchRpcUrl:f}=e.networkRegistry[u];if(!f)throw Error(`RPC URL not found for the specified chain ID`);let p=i.createCustomSolanaConnection(f),m=new c.PublicKey(d),{instructions:h,programId:g}=await s.buildSolanaTransferInstructions(p,m,new c.PublicKey(l),t,r);return{connection:p,chainId:u,senderAddress:d,senderPublickey:m,programId:g,instructions:h}},u=async(e,n,i,a,s,c)=>{let[{connection:u,chainId:d,senderPublickey:f,instructions:p},m]=await Promise.all([l(n,i,a,s),e.getEthereumAddress()]),h=await o.sendProxyV0Transaction({connection:u,chainId:d,subAccount:a,payerPublicKey:f,instructions:p});return t.emitTxPublicData(r.constructAdminData(c,d,[n.erc20TokenAddress],[i],m)),h},d=async(e,t,n,r)=>{let{connection:i,senderPublickey:a,instructions:s}=await l(e,t,n,r);return o.serializeProxyV0Transaction(i,a,s)};exports.getSolanaProxySendSerializedTransaction=d,exports.hinkalSolanaProxySend=u;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { networkRegistry as e } from "../../constants/chains.constants.mjs";
|
|
2
2
|
import { emitTxPublicData as t } from "../../API/admin-calls.mjs";
|
|
3
3
|
import { validateAndGetChainId as n } from "../../functions/utils/token-check.utils.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { constructAdminData as r } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
5
|
+
import { createCustomSolanaConnection as i } from "../../functions/utils/create-provider.mjs";
|
|
6
6
|
import { AccountActions as a } from "../AccountActions/AccountActions.mjs";
|
|
7
7
|
import { sendProxyV0Transaction as o, serializeProxyV0Transaction as s } from "../../functions/pre-transaction/sendV0Transaction.mjs";
|
|
8
8
|
import { buildSolanaTransferInstructions as c } from "../../functions/pre-transaction/solanaTransfer.utils.mjs";
|
|
9
9
|
import { PublicKey as l } from "@solana/web3.js";
|
|
10
10
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaProxySend.ts
|
|
11
|
-
var u = async (t,
|
|
11
|
+
var u = async (t, r, o, s) => {
|
|
12
12
|
let u = n([t]), d = a.getAddressFromSubAccount(u, o);
|
|
13
13
|
if (!d) throw Error("Public account address is not available");
|
|
14
14
|
let { fetchRpcUrl: f } = e[u];
|
|
15
15
|
if (!f) throw Error("RPC URL not found for the specified chain ID");
|
|
16
|
-
let p =
|
|
16
|
+
let p = i(f), m = new l(d), { instructions: h, programId: g } = await c(p, m, new l(s), t, r);
|
|
17
17
|
return {
|
|
18
18
|
connection: p,
|
|
19
19
|
chainId: u,
|
|
@@ -22,15 +22,15 @@ var u = async (t, i, o, s) => {
|
|
|
22
22
|
programId: g,
|
|
23
23
|
instructions: h
|
|
24
24
|
};
|
|
25
|
-
}, d = async (e, n,
|
|
26
|
-
let [{ connection: l, chainId: d, senderPublickey: f, instructions: p }, m] = await Promise.all([u(n,
|
|
25
|
+
}, d = async (e, n, i, a, s, c) => {
|
|
26
|
+
let [{ connection: l, chainId: d, senderPublickey: f, instructions: p }, m] = await Promise.all([u(n, i, a, s), e.getEthereumAddress()]), h = await o({
|
|
27
27
|
connection: l,
|
|
28
28
|
chainId: d,
|
|
29
29
|
subAccount: a,
|
|
30
30
|
payerPublicKey: f,
|
|
31
31
|
instructions: p
|
|
32
32
|
});
|
|
33
|
-
return t(
|
|
33
|
+
return t(r(c, d, [n.erc20TokenAddress], [i], m)), h;
|
|
34
34
|
}, f = async (e, t, n, r) => {
|
|
35
35
|
let { connection: i, senderPublickey: a, instructions: o } = await u(e, t, n, r);
|
|
36
36
|
return s(i, a, o);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../functions/utils/addresses.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../API/admin-calls.cjs`),i=require(`../../functions/utils/solanaMint.utils.cjs`),a=require(`../../functions/utils/token-check.utils.cjs`),o=require(`../../functions/pre-transaction/solana.cjs`),s=require(`../../functions/
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../functions/utils/addresses.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../API/admin-calls.cjs`),i=require(`../../functions/utils/solanaMint.utils.cjs`),a=require(`../../functions/utils/token-check.utils.cjs`),o=require(`../../functions/pre-transaction/solana.cjs`),s=require(`../../functions/pre-transaction/constructAdminData.cjs`),c=require(`../../functions/utils/create-provider.cjs`),l=require(`../AccountActions/AccountActions.cjs`),u=require(`../../functions/pre-transaction/sendV0Transaction.cjs`);let d=require(`@solana/web3.js`),f=require(`@coral-xyz/anchor`),p=require(`@solana/spl-token`);var m=async({program:e,mintPublicKey:t,mintAddressString:n,tokenAmount:r,anchorStealthStructure:i,senderPublickey:a,originalDeployer:o,storageAccount:s,storageVault:c})=>{let l=new f.BN(r.toString()),u=n===`11111111111111111111111111111111`?null:t,d=n===`11111111111111111111111111111111`?null:void 0;return e.methods.prooflessDeposit(l,i).accounts({mint:u,signer:a,signerAta:d,originalDeployer:o,storageAccount:s,storageVault:c,storageVaultAta:d}).instruction()},h=async(r,a,s,u,f,h)=>{let g=h??r.getRecipientInfo();if(!t.isValidPrivateAddress(g))throw Error(n.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let _=l.AccountActions.getAddressFromSubAccount(a,f);if(!_)throw Error(`Public account address is not available`);let{hinkalIdl:v,hinkalAddress:y,originalDeployer:b}=e.networkRegistry[a].contractData;if(!v)throw Error(`No IDL configured for Solana program on this network`);if(!b)throw Error(`missing original deployer`);let x=r.getSolanaProgram(v),S=new d.PublicKey(b),C=new d.PublicKey(y),w=new d.PublicKey(_),{erc20TokenAddress:T}=s,{fetchRpcUrl:E}=e.networkRegistry[a];if(!E)throw Error(`RPC URL not found for the specified chain ID`);let D=c.createCustomSolanaConnection(E),{mintPublicKey:O}=i.formatMintAddress(T),k=O.toString(),A=o.getStorageAccountPublicKey(C,S),j=o.getStorageVaultPublicKey(C,S),M=await m({program:x,mintPublicKey:O,mintAddressString:k,tokenAmount:u,anchorStealthStructure:o.buildAnchorStealthAddressStructure(t.constructStealthAddressStructure(g)),senderPublickey:w,originalDeployer:S,storageAccount:A,storageVault:j}),N=s.is2022Program?p.TOKEN_2022_PROGRAM_ID:p.TOKEN_PROGRAM_ID;return{connection:D,senderAddress:_,senderPublickey:w,instructions:[M],storageAccount:A,programId:N}},g=async(e,t,n,i,o,c)=>{if(!i)throw Error(`subAccount is required`);let l=a.validateAndGetChainId([t]),[{connection:d,senderPublickey:f,instructions:p},m]=await Promise.all([h(e,l,t,n,i,o),e.getEthereumAddress()]),g=await u.sendProxyV0Transaction({connection:d,chainId:l,subAccount:i,payerPublicKey:f,instructions:p});return r.emitTxPublicData(s.constructAdminData(c,l,[t.erc20TokenAddress],[n],m)),g},_=async(e,t,n,r,i)=>{let{connection:o,senderPublickey:s,instructions:c}=await h(e,a.validateAndGetChainId([t]),t,n,r,i);return u.serializeProxyV0Transaction(o,s,c)};exports.getSolanaProxyShieldSerializedTransaction=_,exports.hinkalSolanaProxyShield=g;
|
|
@@ -6,8 +6,8 @@ import { emitTxPublicData as i } from "../../API/admin-calls.mjs";
|
|
|
6
6
|
import { formatMintAddress as a } from "../../functions/utils/solanaMint.utils.mjs";
|
|
7
7
|
import { validateAndGetChainId as o } from "../../functions/utils/token-check.utils.mjs";
|
|
8
8
|
import { buildAnchorStealthAddressStructure as s, getStorageAccountPublicKey as c, getStorageVaultPublicKey as l } from "../../functions/pre-transaction/solana.mjs";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { constructAdminData as u } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
10
|
+
import { createCustomSolanaConnection as d } from "../../functions/utils/create-provider.mjs";
|
|
11
11
|
import { AccountActions as f } from "../AccountActions/AccountActions.mjs";
|
|
12
12
|
import { sendProxyV0Transaction as p, serializeProxyV0Transaction as m } from "../../functions/pre-transaction/sendV0Transaction.mjs";
|
|
13
13
|
import { PublicKey as h } from "@solana/web3.js";
|
|
@@ -25,7 +25,7 @@ var y = async ({ program: e, mintPublicKey: t, mintAddressString: n, tokenAmount
|
|
|
25
25
|
storageVault: c,
|
|
26
26
|
storageVaultAta: d
|
|
27
27
|
}).instruction();
|
|
28
|
-
}, b = async (i, o,
|
|
28
|
+
}, b = async (i, o, u, p, m, g) => {
|
|
29
29
|
let b = g ?? i.getRecipientInfo();
|
|
30
30
|
if (!n(b)) throw Error(r.RECIPIENT_FORMAT_INCORRECT);
|
|
31
31
|
let x = f.getAddressFromSubAccount(o, m);
|
|
@@ -33,9 +33,9 @@ var y = async ({ program: e, mintPublicKey: t, mintAddressString: n, tokenAmount
|
|
|
33
33
|
let { hinkalIdl: S, hinkalAddress: C, originalDeployer: w } = e[o].contractData;
|
|
34
34
|
if (!S) throw Error("No IDL configured for Solana program on this network");
|
|
35
35
|
if (!w) throw Error("missing original deployer");
|
|
36
|
-
let T = i.getSolanaProgram(S), E = new h(w), D = new h(C), O = new h(x), { erc20TokenAddress: k } =
|
|
36
|
+
let T = i.getSolanaProgram(S), E = new h(w), D = new h(C), O = new h(x), { erc20TokenAddress: k } = u, { fetchRpcUrl: A } = e[o];
|
|
37
37
|
if (!A) throw Error("RPC URL not found for the specified chain ID");
|
|
38
|
-
let j =
|
|
38
|
+
let j = d(A), { mintPublicKey: M } = a(k), N = M.toString(), P = c(D, E), F = l(D, E), I = await y({
|
|
39
39
|
program: T,
|
|
40
40
|
mintPublicKey: M,
|
|
41
41
|
mintAddressString: N,
|
|
@@ -45,7 +45,7 @@ var y = async ({ program: e, mintPublicKey: t, mintAddressString: n, tokenAmount
|
|
|
45
45
|
originalDeployer: E,
|
|
46
46
|
storageAccount: P,
|
|
47
47
|
storageVault: F
|
|
48
|
-
}), L =
|
|
48
|
+
}), L = u.is2022Program ? _ : v;
|
|
49
49
|
return {
|
|
50
50
|
connection: j,
|
|
51
51
|
senderAddress: x,
|
|
@@ -56,14 +56,14 @@ var y = async ({ program: e, mintPublicKey: t, mintAddressString: n, tokenAmount
|
|
|
56
56
|
};
|
|
57
57
|
}, x = async (e, t, n, r, a, s) => {
|
|
58
58
|
if (!r) throw Error("subAccount is required");
|
|
59
|
-
let c = o([t]), [{ connection: l, senderPublickey:
|
|
59
|
+
let c = o([t]), [{ connection: l, senderPublickey: d, instructions: f }, m] = await Promise.all([b(e, c, t, n, r, a), e.getEthereumAddress()]), h = await p({
|
|
60
60
|
connection: l,
|
|
61
61
|
chainId: c,
|
|
62
62
|
subAccount: r,
|
|
63
|
-
payerPublicKey:
|
|
63
|
+
payerPublicKey: d,
|
|
64
64
|
instructions: f
|
|
65
65
|
});
|
|
66
|
-
return i(
|
|
66
|
+
return i(u(s, c, [t.erc20TokenAddress], [n], m)), h;
|
|
67
67
|
}, S = async (e, t, n, r, i) => {
|
|
68
68
|
let { connection: a, senderPublickey: s, instructions: c } = await b(e, o([t]), t, n, r, i);
|
|
69
69
|
return m(a, s, c);
|