@hinkal/common 0.3.11 → 0.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/common/src/API/API.cjs +1 -1
- package/common/src/API/API.d.ts +3 -0
- package/common/src/API/API.mjs +5 -2
- package/common/src/API/evm-token-assets.cjs +1 -0
- package/common/src/API/evm-token-assets.mjs +14 -0
- package/common/src/API/index.cjs +1 -1
- package/common/src/API/index.d.ts +1 -0
- package/common/src/API/index.mjs +1 -0
- package/common/src/API/receiveVaultCalls.cjs +1 -0
- package/common/src/API/receiveVaultCalls.d.ts +10 -0
- package/common/src/API/receiveVaultCalls.mjs +32 -0
- package/common/src/constants/contracts.constants.cjs +1 -1
- package/common/src/constants/contracts.constants.mjs +5 -1
- package/common/src/constants/deploy-data/deploy-data-arbMainnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-arbMainnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-arcTestnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-arcTestnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-base.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-base.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-bnbMainnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-bnbMainnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-ethMainnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-ethMainnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-localhost.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-localhost.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-optimism.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-optimism.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-optimismTest.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-optimismTest.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-polygon.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-polygon.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-sepoliaTestnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-sepoliaTestnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-tempo.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-tempo.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-tronMainnet.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-tronMainnet.json.mjs +2 -1
- package/common/src/constants/deploy-data/deploy-data-tronNile.json.cjs +1 -1
- package/common/src/constants/deploy-data/deploy-data-tronNile.json.mjs +2 -1
- package/common/src/constants/deploy-data/shared-deploy-data-evm.json.cjs +1 -1
- package/common/src/constants/deploy-data/shared-deploy-data-evm.json.mjs +2 -1
- package/common/src/constants/deploy-data/shared-deploy-data-tron.json.cjs +1 -1
- package/common/src/constants/deploy-data/shared-deploy-data-tron.json.mjs +3 -2
- package/common/src/constants/events.constants.d.ts +1 -0
- package/common/src/constants/protocol.constants.cjs +1 -1
- package/common/src/constants/protocol.constants.d.ts +6 -0
- package/common/src/constants/protocol.constants.mjs +2 -2
- package/common/src/constants/server.constants.cjs +1 -1
- package/common/src/constants/server.constants.d.ts +5 -0
- package/common/src/constants/server.constants.mjs +5 -0
- package/common/src/data-structures/Hinkal/Hinkal.cjs +1 -1
- package/common/src/data-structures/Hinkal/Hinkal.d.ts +6 -2
- package/common/src/data-structures/Hinkal/Hinkal.mjs +62 -50
- package/common/src/data-structures/Hinkal/IHinkal.d.ts +6 -2
- package/common/src/data-structures/Hinkal/handleAutoDepositBack.cjs +1 -1
- package/common/src/data-structures/Hinkal/handleAutoDepositBack.mjs +10 -10
- package/common/src/data-structures/Hinkal/hinkalActionReceive.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalActionReceive.mjs +4 -4
- package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.mjs +24 -24
- package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.mjs +33 -33
- package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +8 -8
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.d.ts +1 -1
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.mjs +22 -22
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.mjs +8 -8
- package/common/src/data-structures/Hinkal/hinkalProxySwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProxySwap.mjs +5 -5
- package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.mjs +4 -4
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.cjs +1 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.d.ts +3 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.mjs +20 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.cjs +1 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.d.ts +3 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.mjs +33 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.cjs +1 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.d.ts +5 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.mjs +59 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.cjs +1 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.d.ts +6 -0
- package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.mjs +8 -0
- package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.d.ts +2 -2
- package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.mjs +61 -49
- package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +7 -7
- package/common/src/data-structures/Hinkal/hinkalSolanaProxyShield.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaProxyShield.mjs +8 -8
- package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.d.ts +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.mjs +55 -40
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransact.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransact.mjs +7 -6
- package/common/src/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransfer.mjs +4 -4
- package/common/src/data-structures/Hinkal/index.d.ts +4 -0
- package/common/src/data-structures/TokenDBs/AlchemyPublicTokensDB.d.ts +0 -3
- package/common/src/data-structures/TokenDBs/EventsPublicTokensDB.d.ts +0 -1
- package/common/src/data-structures/TokenDBs/TronPublicTokensDB.d.ts +0 -2
- package/common/src/data-structures/crypto-keys/index.cjs +1 -1
- package/common/src/data-structures/crypto-keys/index.mjs +1 -1
- package/common/src/error-handling/error-codes.constants.cjs +1 -1
- package/common/src/error-handling/error-codes.constants.d.ts +4 -0
- package/common/src/error-handling/error-codes.constants.mjs +5 -2
- package/common/src/error-handling/get-error.message.cjs +1 -1
- package/common/src/error-handling/get-error.message.mjs +50 -49
- package/common/src/functions/index.cjs +1 -1
- package/common/src/functions/index.mjs +2 -1
- package/common/src/functions/pre-transaction/build-proofless-deposit-fee.cjs +1 -0
- package/common/src/functions/pre-transaction/build-proofless-deposit-fee.d.ts +4 -0
- package/common/src/functions/pre-transaction/build-proofless-deposit-fee.mjs +3 -0
- package/common/src/functions/pre-transaction/index.cjs +1 -1
- package/common/src/functions/pre-transaction/index.d.ts +1 -0
- package/common/src/functions/pre-transaction/index.mjs +1 -0
- package/common/src/functions/snarkjs/constructTxEnclaveVerify.cjs +1 -1
- package/common/src/functions/snarkjs/constructTxEnclaveVerify.mjs +2 -1
- package/common/src/functions/utils/abi.utils.cjs +1 -1
- package/common/src/functions/utils/abi.utils.mjs +4 -1
- package/common/src/functions/utils/encryptInputForEnclave.cjs +1 -1
- package/common/src/functions/utils/encryptInputForEnclave.d.ts +2 -1
- package/common/src/functions/utils/encryptInputForEnclave.mjs +1 -1
- package/common/src/functions/utils/erc20tokenFunctions.cjs +1 -1
- package/common/src/functions/utils/erc20tokenFunctions.mjs +11 -11
- package/common/src/functions/utils/fees.utils.cjs +1 -1
- package/common/src/functions/utils/fees.utils.mjs +1 -1
- package/common/src/functions/utils/getSignerFromContract.cjs +1 -1
- package/common/src/functions/utils/getSignerFromContract.d.ts +1 -1
- package/common/src/functions/utils/getSignerFromContract.mjs +2 -2
- package/common/src/functions/utils/getUtxosFromReceipt.utils.cjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceipt.utils.mjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceiptSolana.cjs +1 -1
- package/common/src/functions/utils/getUtxosFromReceiptSolana.mjs +1 -1
- package/common/src/functions/utils/index.cjs +1 -1
- package/common/src/functions/utils/index.d.ts +1 -0
- package/common/src/functions/utils/index.mjs +2 -1
- package/common/src/functions/utils/isSigner.cjs +1 -0
- package/common/src/functions/utils/isSigner.d.ts +2 -0
- package/common/src/functions/utils/isSigner.mjs +7 -0
- package/common/src/functions/utils/receive-vault-account.utils.cjs +1 -0
- package/common/src/functions/utils/receive-vault-account.utils.d.ts +8 -0
- package/common/src/functions/utils/receive-vault-account.utils.mjs +23 -0
- package/common/src/functions/utils/receive-vault-scan.utils.cjs +1 -0
- package/common/src/functions/utils/receive-vault-scan.utils.d.ts +2 -0
- package/common/src/functions/utils/receive-vault-scan.utils.mjs +60 -0
- package/common/src/functions/utils/receive-vault.utils.cjs +2 -0
- package/common/src/functions/utils/receive-vault.utils.d.ts +29 -0
- package/common/src/functions/utils/receive-vault.utils.mjs +151 -0
- package/common/src/functions/utils/string.utils.cjs +1 -1
- package/common/src/functions/utils/string.utils.mjs +12 -4
- package/common/src/functions/utils/temporary-wallet-recovery.utils.cjs +1 -1
- package/common/src/functions/utils/temporary-wallet-recovery.utils.mjs +1 -1
- package/common/src/functions/utils/transfer-claimable.utils.cjs +1 -1
- package/common/src/functions/utils/transfer-claimable.utils.mjs +1 -1
- package/common/src/functions/utils/wallet-token-discovery.utils.cjs +1 -0
- package/common/src/functions/utils/wallet-token-discovery.utils.d.ts +4 -0
- package/common/src/functions/utils/wallet-token-discovery.utils.mjs +36 -0
- package/common/src/functions/web3/functionCalls/transactCallDirect.cjs +1 -1
- package/common/src/functions/web3/functionCalls/transactCallDirect.mjs +11 -11
- package/common/src/types/ethereum-network.types.cjs +1 -1
- package/common/src/types/ethereum-network.types.d.ts +4 -1
- package/common/src/types/ethereum-network.types.mjs +1 -1
- package/common/src/types/external-action.types.cjs +1 -1
- package/common/src/types/external-action.types.d.ts +2 -1
- package/common/src/types/external-action.types.mjs +1 -1
- package/common/src/types/index.cjs +1 -1
- package/common/src/types/index.d.ts +1 -0
- package/common/src/types/index.mjs +1 -0
- package/common/src/types/receive-vault.types.cjs +1 -0
- package/common/src/types/receive-vault.types.d.ts +68 -0
- package/common/src/types/receive-vault.types.mjs +6 -0
- package/common/src/types/remote-tx-build.types.d.ts +5 -0
- package/common/src/webworker/{logError-cvFNxc-0.js → logError-BeXPKuv9.js} +1 -1
- package/common/src/webworker/package.json +10 -1
- package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/snarkjsWorkerNode.cjs +1 -1
- package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/utxoWorkerNode.cjs +1 -1
- package/common/src/webworker/viteWorkerURL.constant.cjs +3 -3
- package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
- package/common/src/webworker/workerProxy-DF35H7vU.js +1 -0
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
- package/package.json +10 -1
- package/services/Hinkal.cjs +1 -1
- package/services/Hinkal.d.ts +1 -1
- package/services/Hinkal.mjs +2 -2
- package/types/IHinkal.d.ts +1 -1
- package/common/src/webworker/workerProxy-BHzCZ9HT.js +0 -1
|
@@ -6,9 +6,9 @@ import { validateAndGetChainId as r } from "../../functions/utils/token-check.ut
|
|
|
6
6
|
import { modifyVolatileTokenAmountChanges as i } from "../../functions/pre-transaction/getVolatileTransferAmount.mjs";
|
|
7
7
|
import { AccountActions as a } from "../AccountActions/AccountActions.mjs";
|
|
8
8
|
import { getFeeStructure as o } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { calculateModifiedFeeStructureForTokens as s } from "../../functions/utils/fees.utils.mjs";
|
|
10
|
+
import { createTransaferEmporiumOpsBatch as c } from "../../functions/private-wallet/emporium.helpers.mjs";
|
|
11
|
+
import { convertEmporiumOpToCallInfo as l } from "../../functions/utils/convertEmporiumOpToCallInfo.mjs";
|
|
12
12
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalProxyToPrivate.ts
|
|
13
13
|
var u = async (u, d, f, p, m, h, g, _) => {
|
|
14
14
|
if (!g) throw Error("hinkalProxyToPrivate: subAccount should be provided");
|
|
@@ -16,7 +16,7 @@ var u = async (u, d, f, p, m, h, g, _) => {
|
|
|
16
16
|
if (!t(p)) throw Error(e.RECIPIENT_FORMAT_INCORRECT);
|
|
17
17
|
let v = r(d), y = a.getAddressFromSubAccount(v, g);
|
|
18
18
|
if (!y) throw Error("Public account address is not available");
|
|
19
|
-
let b = d.map((e) => e.erc20TokenAddress), x = await i(v, d, f, y), S =
|
|
19
|
+
let b = d.map((e) => e.erc20TokenAddress), x = await i(v, d, f, y), S = c(u, v, b, x), C = await s(v, d, x, h ?? await o(v, m, b, n.Emporium, S.map((e) => l(e, y, v)), 25n)), w = d.map((e, t) => ({
|
|
20
20
|
token: e,
|
|
21
21
|
amount: -1n * x[t]
|
|
22
22
|
}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../../functions/utils/erc20tokenFunctions.cjs`),t=require(`../../functions/utils/receive-vault-account.utils.cjs`),n=require(`../../functions/utils/receive-vault-scan.utils.cjs`);var r=async r=>{let{records:i,blocks:a}=await t.getReceiveVaultAccountSnapshot(r.userKeys);return{entries:(await Promise.all(i.map(async t=>{let n=await e.getErc20TokenFromAPI(t.chainId,t.token);return n?{record:t,token:n,expiresAt:new Date(Number(t.expiry)*1e3)}:void 0}))).filter(e=>!!e).sort((e,t)=>t.expiresAt.getTime()-e.expiresAt.getTime()),blockedFunds:await n.getReceiveVaultBlockedFunds(i,a)}};exports.hinkalGetReceiveVaultAccount=r;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { getErc20TokenFromAPI as e } from "../../functions/utils/erc20tokenFunctions.mjs";
|
|
2
|
+
import { getReceiveVaultAccountSnapshot as t } from "../../functions/utils/receive-vault-account.utils.mjs";
|
|
3
|
+
import { getReceiveVaultBlockedFunds as n } from "../../functions/utils/receive-vault-scan.utils.mjs";
|
|
4
|
+
//#region libs/shared/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.ts
|
|
5
|
+
var r = async (r) => {
|
|
6
|
+
let { records: i, blocks: a } = await t(r.userKeys);
|
|
7
|
+
return {
|
|
8
|
+
entries: (await Promise.all(i.map(async (t) => {
|
|
9
|
+
let n = await e(t.chainId, t.token);
|
|
10
|
+
return n ? {
|
|
11
|
+
record: t,
|
|
12
|
+
token: n,
|
|
13
|
+
expiresAt: /* @__PURE__ */ new Date(Number(t.expiry) * 1e3)
|
|
14
|
+
} : void 0;
|
|
15
|
+
}))).filter((e) => !!e).sort((e, t) => t.expiresAt.getTime() - e.expiresAt.getTime()),
|
|
16
|
+
blockedFunds: await n(i, a)
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { r as hinkalGetReceiveVaultAccount };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/receive-vault.utils.cjs`),i=require(`../../API/receiveVaultCalls.cjs`),a=require(`../../functions/pre-transaction/getFeeStructure.cjs`),o=require(`../../functions/utils/receive-vault-account.utils.cjs`),s=require(`./hinkalReceiveVaultSettle.cjs`);var c=async(e,t,n,a)=>{let o=r.getReceiveVaultParams(e,a),c=s.buildReceiveVaultEncryptedOutput(o,t);return i.registerReceiveVault(a,o,t,n,c,await r.signReceiveVaultOutput(e,a,c))},l=(e,n,r)=>e.filter(e=>e.chainId===n&&t.caseInsensitiveEqual(e.token,r)).reduce((e,t)=>Math.max(e,t.index+1),0),u=async(t,i,o,s,d,f)=>{let{flatFee:p}=await a.getFeeStructure(i,o,[o],n.ExternalActionId.ReceiveVaultSettle,[],e.RECEIVE_VAULT_VARIABLE_RATE),m=r.getReceiveVaultFeeCeiling(p).toString(),h=r.getReceiveVaultExpiry().toString(),g=r.buildReceiveVaultRecord(t,{index:l(f,i,o),chainId:i,token:o,maxFlatFee:m,maxVariableRate:Number(e.RECEIVE_VAULT_VARIABLE_RATE),expiry:h});return await c(t,s,d,g)?u(t,i,o,s,d,[...f,g]):g},d=(e,n,i)=>e.filter(e=>e.chainId===n&&t.caseInsensitiveEqual(e.token,i)&&!r.isReceiveVaultExpired(e)).sort((e,t)=>t.index-e.index)[0],f=async(e,t,n,i=!1)=>{if(!r.isReceiveVaultSupported(t))throw Error(`receive vault: no factory on chain ${t}`);let{userKeys:a}=e,s=r.getReceiveVaultEncryptionKey(a),l=r.getReceiveVaultAccountKey(a),{records:f}=await o.getReceiveVaultAccountSnapshot(a);if(!i){let e=d(f,t,n);if(e&&!await c(a,s,l,e))return e}return u(a,t,n,s,l,f)};exports.hinkalReceiveVaultCreate=f;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { RECEIVE_VAULT_VARIABLE_RATE as e } from "../../constants/protocol.constants.mjs";
|
|
2
|
+
import { caseInsensitiveEqual as t } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
3
|
+
import { ExternalActionId as n } from "../../types/external-action.types.mjs";
|
|
4
|
+
import { buildReceiveVaultRecord as r, getReceiveVaultAccountKey as i, getReceiveVaultEncryptionKey as a, getReceiveVaultExpiry as o, getReceiveVaultFeeCeiling as s, getReceiveVaultParams as c, isReceiveVaultExpired as l, isReceiveVaultSupported as u, signReceiveVaultOutput as d } from "../../functions/utils/receive-vault.utils.mjs";
|
|
5
|
+
import { registerReceiveVault as f } from "../../API/receiveVaultCalls.mjs";
|
|
6
|
+
import { getFeeStructure as p } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
7
|
+
import { getReceiveVaultAccountSnapshot as m } from "../../functions/utils/receive-vault-account.utils.mjs";
|
|
8
|
+
import { buildReceiveVaultEncryptedOutput as h } from "./hinkalReceiveVaultSettle.mjs";
|
|
9
|
+
//#region libs/shared/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.ts
|
|
10
|
+
var g = async (e, t, n, r) => {
|
|
11
|
+
let i = c(e, r), a = h(i, t);
|
|
12
|
+
return f(r, i, t, n, a, await d(e, r, a));
|
|
13
|
+
}, _ = (e, n, r) => e.filter((e) => e.chainId === n && t(e.token, r)).reduce((e, t) => Math.max(e, t.index + 1), 0), v = async (t, i, a, c, l, u) => {
|
|
14
|
+
let { flatFee: d } = await p(i, a, [a], n.ReceiveVaultSettle, [], e), f = s(d).toString(), m = o().toString(), h = r(t, {
|
|
15
|
+
index: _(u, i, a),
|
|
16
|
+
chainId: i,
|
|
17
|
+
token: a,
|
|
18
|
+
maxFlatFee: f,
|
|
19
|
+
maxVariableRate: Number(e),
|
|
20
|
+
expiry: m
|
|
21
|
+
});
|
|
22
|
+
return await g(t, c, l, h) ? v(t, i, a, c, l, [...u, h]) : h;
|
|
23
|
+
}, y = (e, n, r) => e.filter((e) => e.chainId === n && t(e.token, r) && !l(e)).sort((e, t) => t.index - e.index)[0], b = async (e, t, n, r = !1) => {
|
|
24
|
+
if (!u(t)) throw Error(`receive vault: no factory on chain ${t}`);
|
|
25
|
+
let { userKeys: o } = e, s = a(o), c = i(o), { records: l } = await m(o);
|
|
26
|
+
if (!r) {
|
|
27
|
+
let e = y(l, t, n);
|
|
28
|
+
if (e && !await g(o, s, c, e)) return e;
|
|
29
|
+
}
|
|
30
|
+
return v(o, t, n, s, c, l);
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { b as hinkalReceiveVaultCreate };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/tron.utils.cjs`),r=require(`../../types/ethereum-network.types.cjs`),i=require(`../../functions/utils/receive-vault.utils.cjs`),a=require(`../../functions/utils/string.utils.cjs`),o=require(`../../error-handling/get-error.message.cjs`);let s=require(`ethers`);var c={NothingToSettle:`These funds have already been moved out of the receive address.`,RecoveryExpired:`The recovery request expired before it was confirmed. Please try again.`,BadRecoverySignature:`This wallet cannot recover these funds. Reconnect the account that generated the address.`,RecoveryAlreadyUsed:`This recovery was already submitted. Please try again.`},l=e=>{let t=e?.revert?.name;if(t&&c[t])return c[t];let n=JSON.stringify(e??``),r=Object.keys(c).find(e=>n.includes(s.ethers.id(`${e}()`).slice(2,10)));if(r)return c[r];let i=e?.message;return i&&s.ethers.isHexString(`0x${i}`)?a.hexToUtf8(i):e?.shortMessage??o.getErrorMessage(e)},u=async(a,o,s,c,u,d=!1)=>{let f=i.getReceiveVaultFactoryAddress(c);if(!f)throw Error(`receive vault: no factory on chain ${c}`);let p=BigInt(Math.floor(Date.now()/1e3)+900),m=await i.signReceiveVaultRecovery(a.userKeys,o,s,c,u,p),h=[i.receiveVaultParamsToTuple(i.getReceiveVaultParams(a.userKeys,o)),n.addressToHexFormat(s),n.addressToHexFormat(u),p,m];if(e.isTronLike(c)){let{receiveVaultFactoryABI:r}=e.networkRegistry[c].contractData;if(!r)throw Error(`receive vault: no factory ABI on chain ${c}`);let i=a.getTronWeb(),o=n.evmHexToTronBase58Address(f);if(d){let{transaction:e}=await i.transactionBuilder.triggerSmartContract(o,``,{feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:0,input:n.createTronCallData(r,`recover`,h)},[],await a.getEthereumAddressByChain(c));return e}let s=i.contract(r,o);try{return await s.recover(...h).send({feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN})}catch(e){throw Error(l(e))}}let g=a.getContractWithSigner(c,r.ContractType.ReceiveVaultFactoryContract);try{return d?g.recover.populateTransaction(...h):(await g.recover(...h)).hash}catch(e){throw Error(l(e))}};exports.hinkalReceiveVaultRecover=u;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { Types as TronWebTypes } from 'tronweb';
|
|
3
|
+
import { ReceiveVaultRecord } from '../../types/receive-vault.types';
|
|
4
|
+
import { IHinkal } from './IHinkal';
|
|
5
|
+
export declare const hinkalReceiveVaultRecover: (hinkal: IHinkal, record: ReceiveVaultRecord, token: string, chainId: number, to: string, returnTxData?: boolean) => Promise<string | ethers.TransactionRequest | TronWebTypes.Transaction<TronWebTypes.TriggerSmartContract>>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { isTronLike as e, networkRegistry as t } from "../../constants/chains.constants.mjs";
|
|
2
|
+
import { TRON_DEFAULT_FEE_LIMIT_SUN as n } from "../../constants/protocol.constants.mjs";
|
|
3
|
+
import { addressToHexFormat as r, createTronCallData as i, evmHexToTronBase58Address as a } from "../../functions/utils/tron.utils.mjs";
|
|
4
|
+
import { ContractType as o } from "../../types/ethereum-network.types.mjs";
|
|
5
|
+
import { getReceiveVaultFactoryAddress as s, getReceiveVaultParams as c, receiveVaultParamsToTuple as l, signReceiveVaultRecovery as u } from "../../functions/utils/receive-vault.utils.mjs";
|
|
6
|
+
import { hexToUtf8 as d } from "../../functions/utils/string.utils.mjs";
|
|
7
|
+
import { getErrorMessage as f } from "../../error-handling/get-error.message.mjs";
|
|
8
|
+
import { ethers as p } from "ethers";
|
|
9
|
+
//#region libs/shared/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.ts
|
|
10
|
+
var m = {
|
|
11
|
+
NothingToSettle: "These funds have already been moved out of the receive address.",
|
|
12
|
+
RecoveryExpired: "The recovery request expired before it was confirmed. Please try again.",
|
|
13
|
+
BadRecoverySignature: "This wallet cannot recover these funds. Reconnect the account that generated the address.",
|
|
14
|
+
RecoveryAlreadyUsed: "This recovery was already submitted. Please try again."
|
|
15
|
+
}, h = (e) => {
|
|
16
|
+
let t = e?.revert?.name;
|
|
17
|
+
if (t && m[t]) return m[t];
|
|
18
|
+
let n = JSON.stringify(e ?? ""), r = Object.keys(m).find((e) => n.includes(p.id(`${e}()`).slice(2, 10)));
|
|
19
|
+
if (r) return m[r];
|
|
20
|
+
let i = e?.message;
|
|
21
|
+
return i && p.isHexString(`0x${i}`) ? d(i) : e?.shortMessage ?? f(e);
|
|
22
|
+
}, g = async (d, f, p, m, g, _ = !1) => {
|
|
23
|
+
let v = s(m);
|
|
24
|
+
if (!v) throw Error(`receive vault: no factory on chain ${m}`);
|
|
25
|
+
let y = BigInt(Math.floor(Date.now() / 1e3) + 900), b = await u(d.userKeys, f, p, m, g, y), x = [
|
|
26
|
+
l(c(d.userKeys, f)),
|
|
27
|
+
r(p),
|
|
28
|
+
r(g),
|
|
29
|
+
y,
|
|
30
|
+
b
|
|
31
|
+
];
|
|
32
|
+
if (e(m)) {
|
|
33
|
+
let { receiveVaultFactoryABI: e } = t[m].contractData;
|
|
34
|
+
if (!e) throw Error(`receive vault: no factory ABI on chain ${m}`);
|
|
35
|
+
let r = d.getTronWeb(), o = a(v);
|
|
36
|
+
if (_) {
|
|
37
|
+
let { transaction: t } = await r.transactionBuilder.triggerSmartContract(o, "", {
|
|
38
|
+
feeLimit: n,
|
|
39
|
+
callValue: 0,
|
|
40
|
+
input: i(e, "recover", x)
|
|
41
|
+
}, [], await d.getEthereumAddressByChain(m));
|
|
42
|
+
return t;
|
|
43
|
+
}
|
|
44
|
+
let s = r.contract(e, o);
|
|
45
|
+
try {
|
|
46
|
+
return await s.recover(...x).send({ feeLimit: n });
|
|
47
|
+
} catch (e) {
|
|
48
|
+
throw Error(h(e));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
let S = d.getContractWithSigner(m, o.ReceiveVaultFactoryContract);
|
|
52
|
+
try {
|
|
53
|
+
return _ ? S.recover.populateTransaction(...x) : (await S.recover(...x)).hash;
|
|
54
|
+
} catch (e) {
|
|
55
|
+
throw Error(h(e));
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
//#endregion
|
|
59
|
+
export { g as hinkalReceiveVaultRecover };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require(`../../functions/utils/tron.utils.cjs`),require(`../../functions/utils/receive-vault.utils.cjs`),require(`./hinkalTransact.cjs`);const e=require(`./hinkalProoflessDeposit.utils.cjs`);var t=(t,n)=>e.buildProoflessEncryptedOutputs([t.recipient],[n])[0];exports.buildReceiveVaultEncryptedOutput=t;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ReceiveVaultParams } from '../../types/receive-vault.types';
|
|
2
|
+
import { TransactProof } from '../../types/transact.types';
|
|
3
|
+
import { IHinkal } from './IHinkal';
|
|
4
|
+
export declare const buildReceiveVaultSettleProof: (hinkal: IHinkal, chainId: number, vaultAddress: string, params: ReceiveVaultParams, encryptionKey: string, depositAmount: bigint) => Promise<TransactProof>;
|
|
5
|
+
/** The encrypted note the settlement deposits on behalf of whoever paid the address. */
|
|
6
|
+
export declare const buildReceiveVaultEncryptedOutput: (params: ReceiveVaultParams, encryptionKey: string) => string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "../../functions/utils/tron.utils.mjs";
|
|
2
|
+
import "../../functions/utils/receive-vault.utils.mjs";
|
|
3
|
+
import "./hinkalTransact.mjs";
|
|
4
|
+
import { buildProoflessEncryptedOutputs as e } from "./hinkalProoflessDeposit.utils.mjs";
|
|
5
|
+
//#region libs/shared/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.ts
|
|
6
|
+
var t = (t, n) => e([t.recipient], [n])[0];
|
|
7
|
+
//#endregion
|
|
8
|
+
export { t as buildReceiveVaultEncryptedOutput };
|
|
@@ -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`),
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/fees.constants.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../crypto-keys/keys.cjs`),o=require(`../../functions/utils/solanaMint.utils.cjs`),s=require(`../../functions/utils/addresses.cjs`),c=require(`../../functions/utils/token-check.utils.cjs`),l=require(`../../functions/snarkjs/common.snarkjs.cjs`),u=require(`../../functions/pre-transaction/solana.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../error-handling/retrySolanaError.cjs`),p=require(`../../API/admin-calls.cjs`),m=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`),h=require(`./hinkalProoflessDeposit.utils.cjs`);let g=require(`@solana/web3.js`),_=require(`@coral-xyz/anchor`);var v=(n,r)=>{let i=c.validateAndGetChainId([r]),a=r.erc20TokenAddress,{hinkalIdl:s,hinkalAddress:l,originalDeployer:d}=e.networkRegistry[i].contractData;if(!s)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let f=n.getSolanaProgram(s),p=n.getSolanaPublicKey(),{connection:m,wallet:h}=f.provider;if(!h)throw Error(`missing solana wallet`);let _=new g.PublicKey(d),v=new g.PublicKey(l),{mintPublicKey:y}=o.formatMintAddress(a),b=y.toString()===t.solanaNativeAddress;return{chainId:i,mintAddress:a,program:f,publicKey:p,connection:m,wallet:h,originalDeployer:_,mintPublicKey:y,mint:b?null:y,atasValue:b?null:void 0,storageAccount:u.getStorageAccountPublicKey(v,_),storageVault:u.getStorageVaultPublicKey(v,_),merkleAccount:u.getMerkleAccountPublicKey(v,_)}},y=async(e,t,n,r,i)=>{let a=n.map(e=>u.buildAnchorStealthAddressStructure(e)),o=h.buildProoflessEncryptedOutputs(n,r).map(e=>Buffer.from(e.slice(2),`hex`)),{current:s,next:c}=await u.resolveSolanaRootBuckets(e.program,e.merkleAccount,t.length);return e.program.methods.multiPaymentDeposit(t.map(e=>new _.BN(e.toString())),a,o,i).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:s,rootBucketNext:c??e.program.programId,storageVaultAta:e.atasValue}).instruction()},b=async(e,t,n,r)=>{for(let i=0;i<10;i+=1){let a=i===9;try{let{blockhash:i,lastValidBlockHeight:a}=await e.getLatestBlockhash(),o=new g.VersionedTransaction(new g.TransactionMessage({payerKey:n,recentBlockhash:i,instructions:r}).compileToV0Message()),s=await t.signTransaction(o),c=await e.sendTransaction(s);return await e.confirmTransaction({signature:c,blockhash:i,lastValidBlockHeight:a},`confirmed`),c}catch(e){if(f.shouldRetryForSolanaError(e)&&!a)continue;throw e}}return``},x=(e,t)=>{if(e.length===0)throw Error(`amounts must not be empty`);if(e.length!==t.length)throw Error(`amounts and stealthAddressStructures length mismatch`);if(e.some(e=>e<=0n))throw Error(`all amounts must be positive`);h.assertNoDuplicateStealthAddressStructures(t)},S=async(e,t,n,r,i,a=!1,o,s=!1)=>{x(n,r);let c=v(e,t),l=d.constructAdminData(o,c.chainId,Array(n.length).fill(c.mintAddress),n,await e.getEthereumAddress()),u=await y(c,n,r,i,a);if(s){let{blockhash:e}=await c.connection.getLatestBlockhash(),t=new g.Transaction().add(u);return t.recentBlockhash=e,t.feePayer=c.publicKey,Buffer.from(t.serialize({requireAllSignatures:!1})).toString(`base64`)}let f=await b(c.connection,c.wallet,c.publicKey,[u]);return await p.emitTxPublicData(l),f},C=async(e,t,n,r,i,a,o=!1,s,c=!1)=>{x(n,r);let l=v(e,t),u=await e.getRandomRelay(l.chainId,!1);if(!u)throw Error(`No relay available for chainId ${l.chainId}`);let{instructions:f}=await m.buildSolanaTransferInstructions(l.connection,l.publicKey,new g.PublicKey(u),t,a),h=await y(l,n,r,i,o),_=[...f,h];if(c){let{blockhash:e}=await l.connection.getLatestBlockhash(),t=new g.Transaction().add(..._);return t.recentBlockhash=e,t.feePayer=l.publicKey,Buffer.from(t.serialize({requireAllSignatures:!1})).toString(`base64`)}let S=d.constructAdminData(s,l.chainId,Array(n.length).fill(l.mintAddress),n,await e.getEthereumAddress()),C=await b(l.connection,l.wallet,l.publicKey,_);return await p.emitTxPublicData(S),C},w=async(e,t,n,r=!1)=>{let o=e.userKeys.getShieldedPrivateKey(),s=l.calcStealthAddressStructure(a.UserKeys.findCorrectRandomization(i.randomBigInt(31),o),o,e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint),c=a.UserKeys.getEncryptionKeyPair(o).publicKey;return S(e,n,[t],[s],[c],!1,void 0,r)},T=async(e,t,i,a,o=!1,c=0n,l)=>{if(!s.isValidPrivateAddress(a))throw Error(r.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let u=s.constructStealthAddressStructure(a),d=s.getEncryptionKeyFromRecipientInfo(a),f=c>0n?t*c/n.BPS_DENOMINATOR:0n;return C(e,i,[t],[u],[d],f,!1,l,o)};exports.hinkalSolanaDeposit=w,exports.hinkalSolanaDepositForOther=T,exports.submitSolanaProoflessDeposit=S;
|
|
@@ -3,6 +3,6 @@ import { ERC20Token } from '../../types/token.types';
|
|
|
3
3
|
import { IHinkal } from './IHinkal';
|
|
4
4
|
import { AdminTransactionType } from '../../types/admin.types';
|
|
5
5
|
export declare const submitSolanaProoflessDeposit: (hinkal: IHinkal, token: ERC20Token, amounts: bigint[], stealthAddressStructures: StealthAddressStructure[], recipientEncryptionKeys: string[], createBlockedUtxos?: boolean, action?: AdminTransactionType, returnTxData?: boolean) => Promise<string>;
|
|
6
|
-
export declare const hinkalSolanaProoflessDepositWithPublicFee: (hinkal: IHinkal, token: ERC20Token, amounts: bigint[], stealthAddressStructures: StealthAddressStructure[], recipientEncryptionKeys: string[], feeAmount: bigint, createBlockedUtxos?: boolean, action?: AdminTransactionType) => Promise<string>;
|
|
6
|
+
export declare const hinkalSolanaProoflessDepositWithPublicFee: (hinkal: IHinkal, token: ERC20Token, amounts: bigint[], stealthAddressStructures: StealthAddressStructure[], recipientEncryptionKeys: string[], feeAmount: bigint, createBlockedUtxos?: boolean, action?: AdminTransactionType, returnTxData?: boolean) => Promise<string>;
|
|
7
7
|
export declare const hinkalSolanaDeposit: (hinkal: IHinkal, amount: bigint, token: ERC20Token, returnTxData?: boolean) => Promise<string>;
|
|
8
|
-
export declare const hinkalSolanaDepositForOther: (hinkal: IHinkal, amount: bigint, token: ERC20Token, recipientInfo: string, returnTxData?: boolean, action?: AdminTransactionType) => Promise<string>;
|
|
8
|
+
export declare const hinkalSolanaDepositForOther: (hinkal: IHinkal, amount: bigint, token: ERC20Token, recipientInfo: string, returnTxData?: boolean, variableRate?: bigint, action?: AdminTransactionType) => Promise<string>;
|
|
@@ -1,46 +1,47 @@
|
|
|
1
1
|
import { networkRegistry as e } from "../../constants/chains.constants.mjs";
|
|
2
2
|
import { solanaNativeAddress as t } from "../../constants/protocol.constants.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import "../../
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
3
|
+
import { BPS_DENOMINATOR as n } from "../../constants/fees.constants.mjs";
|
|
4
|
+
import { transactionErrorCodes as r } from "../../error-handling/error-codes.constants.mjs";
|
|
5
|
+
import { randomBigInt as i } from "../../functions/web3/etherFunctions.mjs";
|
|
6
|
+
import { UserKeys as a } from "../crypto-keys/keys.mjs";
|
|
7
|
+
import { formatMintAddress as o } from "../../functions/utils/solanaMint.utils.mjs";
|
|
8
|
+
import { constructStealthAddressStructure as s, getEncryptionKeyFromRecipientInfo as c, isValidPrivateAddress as l } from "../../functions/utils/addresses.mjs";
|
|
9
|
+
import { validateAndGetChainId as u } from "../../functions/utils/token-check.utils.mjs";
|
|
10
|
+
import { calcStealthAddressStructure as d } from "../../functions/snarkjs/common.snarkjs.mjs";
|
|
11
|
+
import { buildAnchorStealthAddressStructure as f, getMerkleAccountPublicKey as p, getStorageAccountPublicKey as m, getStorageVaultPublicKey as h, resolveSolanaRootBuckets as g } from "../../functions/pre-transaction/solana.mjs";
|
|
12
|
+
import { constructAdminData as _ } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
13
|
+
import { shouldRetryForSolanaError as v } from "../../error-handling/retrySolanaError.mjs";
|
|
14
|
+
import { emitTxPublicData as y } from "../../API/admin-calls.mjs";
|
|
15
|
+
import { buildSolanaTransferInstructions as b } from "../../functions/pre-transaction/solanaTransfer.utils.mjs";
|
|
16
|
+
import { assertNoDuplicateStealthAddressStructures as x, buildProoflessEncryptedOutputs as S } from "./hinkalProoflessDeposit.utils.mjs";
|
|
17
|
+
import { PublicKey as C, Transaction as w, TransactionMessage as T, VersionedTransaction as E } from "@solana/web3.js";
|
|
18
|
+
import { BN as D } from "@coral-xyz/anchor";
|
|
18
19
|
//#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaDeposit.ts
|
|
19
|
-
var
|
|
20
|
-
let i =
|
|
20
|
+
var O = (n, r) => {
|
|
21
|
+
let i = u([r]), a = r.erc20TokenAddress, { hinkalIdl: s, hinkalAddress: c, originalDeployer: l } = e[i].contractData;
|
|
21
22
|
if (!s) throw Error("No IDL configured for Solana program on this network");
|
|
22
|
-
if (!
|
|
23
|
-
let d = n.getSolanaProgram(s),
|
|
23
|
+
if (!l) throw Error("missing original deployer");
|
|
24
|
+
let d = n.getSolanaProgram(s), f = n.getSolanaPublicKey(), { connection: g, wallet: _ } = d.provider;
|
|
24
25
|
if (!_) throw Error("missing solana wallet");
|
|
25
|
-
let v = new
|
|
26
|
+
let v = new C(l), y = new C(c), { mintPublicKey: b } = o(a), x = b.toString() === t;
|
|
26
27
|
return {
|
|
27
28
|
chainId: i,
|
|
28
|
-
mintAddress:
|
|
29
|
+
mintAddress: a,
|
|
29
30
|
program: d,
|
|
30
|
-
publicKey:
|
|
31
|
+
publicKey: f,
|
|
31
32
|
connection: g,
|
|
32
33
|
wallet: _,
|
|
33
34
|
originalDeployer: v,
|
|
34
35
|
mintPublicKey: b,
|
|
35
|
-
mint:
|
|
36
|
-
atasValue:
|
|
37
|
-
storageAccount:
|
|
38
|
-
storageVault:
|
|
39
|
-
merkleAccount:
|
|
36
|
+
mint: x ? null : b,
|
|
37
|
+
atasValue: x ? null : void 0,
|
|
38
|
+
storageAccount: m(y, v),
|
|
39
|
+
storageVault: h(y, v),
|
|
40
|
+
merkleAccount: p(y, v)
|
|
40
41
|
};
|
|
41
|
-
},
|
|
42
|
-
let a = n.map((e) =>
|
|
43
|
-
return e.program.methods.multiPaymentDeposit(t.map((e) => new
|
|
42
|
+
}, k = async (e, t, n, r, i) => {
|
|
43
|
+
let a = n.map((e) => f(e)), o = S(n, r).map((e) => Buffer.from(e.slice(2), "hex")), { current: s, next: c } = await g(e.program, e.merkleAccount, t.length);
|
|
44
|
+
return e.program.methods.multiPaymentDeposit(t.map((e) => new D(e.toString())), a, o, i).accounts({
|
|
44
45
|
mint: e.mint,
|
|
45
46
|
signer: e.publicKey,
|
|
46
47
|
signerAta: e.atasValue,
|
|
@@ -52,11 +53,11 @@ var E = (n, r) => {
|
|
|
52
53
|
rootBucketNext: c ?? e.program.programId,
|
|
53
54
|
storageVaultAta: e.atasValue
|
|
54
55
|
}).instruction();
|
|
55
|
-
},
|
|
56
|
+
}, A = async (e, t, n, r) => {
|
|
56
57
|
for (let i = 0; i < 10; i += 1) {
|
|
57
58
|
let a = i === 9;
|
|
58
59
|
try {
|
|
59
|
-
let { blockhash: i, lastValidBlockHeight: a } = await e.getLatestBlockhash(), o = new
|
|
60
|
+
let { blockhash: i, lastValidBlockHeight: a } = await e.getLatestBlockhash(), o = new E(new T({
|
|
60
61
|
payerKey: n,
|
|
61
62
|
recentBlockhash: i,
|
|
62
63
|
instructions: r
|
|
@@ -67,32 +68,43 @@ var E = (n, r) => {
|
|
|
67
68
|
lastValidBlockHeight: a
|
|
68
69
|
}, "confirmed"), c;
|
|
69
70
|
} catch (e) {
|
|
70
|
-
if (
|
|
71
|
+
if (v(e) && !a) continue;
|
|
71
72
|
throw e;
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
return "";
|
|
75
|
-
},
|
|
76
|
+
}, j = (e, t) => {
|
|
76
77
|
if (e.length === 0) throw Error("amounts must not be empty");
|
|
77
78
|
if (e.length !== t.length) throw Error("amounts and stealthAddressStructures length mismatch");
|
|
78
79
|
if (e.some((e) => e <= 0n)) throw Error("all amounts must be positive");
|
|
79
|
-
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
let c =
|
|
80
|
+
x(t);
|
|
81
|
+
}, M = async (e, t, n, r, i, a = !1, o, s = !1) => {
|
|
82
|
+
j(n, r);
|
|
83
|
+
let c = O(e, t), l = _(o, c.chainId, Array(n.length).fill(c.mintAddress), n, await e.getEthereumAddress()), u = await k(c, n, r, i, a);
|
|
83
84
|
if (s) {
|
|
84
|
-
let { blockhash: e } = await c.connection.getLatestBlockhash(), t = new
|
|
85
|
+
let { blockhash: e } = await c.connection.getLatestBlockhash(), t = new w().add(u);
|
|
85
86
|
return t.recentBlockhash = e, t.feePayer = c.publicKey, Buffer.from(t.serialize({ requireAllSignatures: !1 })).toString("base64");
|
|
86
87
|
}
|
|
87
|
-
let d = await
|
|
88
|
-
return await
|
|
89
|
-
},
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
let d = await A(c.connection, c.wallet, c.publicKey, [u]);
|
|
89
|
+
return await y(l), d;
|
|
90
|
+
}, N = async (e, t, n, r, i, a, o = !1, s, c = !1) => {
|
|
91
|
+
j(n, r);
|
|
92
|
+
let l = O(e, t), u = await e.getRandomRelay(l.chainId, !1);
|
|
93
|
+
if (!u) throw Error(`No relay available for chainId ${l.chainId}`);
|
|
94
|
+
let { instructions: d } = await b(l.connection, l.publicKey, new C(u), t, a), f = await k(l, n, r, i, o), p = [...d, f];
|
|
95
|
+
if (c) {
|
|
96
|
+
let { blockhash: e } = await l.connection.getLatestBlockhash(), t = new w().add(...p);
|
|
97
|
+
return t.recentBlockhash = e, t.feePayer = l.publicKey, Buffer.from(t.serialize({ requireAllSignatures: !1 })).toString("base64");
|
|
98
|
+
}
|
|
99
|
+
let m = _(s, l.chainId, Array(n.length).fill(l.mintAddress), n, await e.getEthereumAddress()), h = await A(l.connection, l.wallet, l.publicKey, p);
|
|
100
|
+
return await y(m), h;
|
|
101
|
+
}, P = async (e, t, n, r = !1) => {
|
|
102
|
+
let o = e.userKeys.getShieldedPrivateKey(), s = d(a.findCorrectRandomization(i(31), o), o, e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint), c = a.getEncryptionKeyPair(o).publicKey;
|
|
103
|
+
return M(e, n, [t], [s], [c], !1, void 0, r);
|
|
104
|
+
}, F = async (e, t, i, a, o = !1, u = 0n, d) => {
|
|
105
|
+
if (!l(a)) throw Error(r.RECIPIENT_FORMAT_INCORRECT);
|
|
106
|
+
let f = s(a), p = c(a), m = u > 0n ? t * u / n : 0n;
|
|
107
|
+
return N(e, i, [t], [f], [p], m, !1, d, o);
|
|
96
108
|
};
|
|
97
109
|
//#endregion
|
|
98
|
-
export {
|
|
110
|
+
export { P as hinkalSolanaDeposit, F as hinkalSolanaDepositForOther, M as submitSolanaProoflessDeposit };
|
|
@@ -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(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/solanaMint.utils.cjs`),c=require(`../../functions/utils/addresses.cjs`),l=require(`../../types/external-action.types.cjs`),u=require(`../../types/solana-transact.types.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/getFeeStructure.cjs`),g=require(`../../functions/pre-transaction/speculativeUtxo.cjs`);require(`../../functions/pre-transaction/index.cjs`);const
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/solanaMint.utils.cjs`),c=require(`../../functions/utils/addresses.cjs`),l=require(`../../types/external-action.types.cjs`),u=require(`../../types/solana-transact.types.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/getFeeStructure.cjs`),g=require(`../../functions/utils/fees.utils.cjs`),_=require(`../../functions/pre-transaction/speculativeUtxo.cjs`);require(`../../functions/pre-transaction/index.cjs`);const v=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);require(`../../functions/web3/index.cjs`);const y=require(`./hinkalProoflessDeposit.utils.cjs`),b=require(`./hinkalSolanaTransact.cjs`);let x=require(`ethers`),S=require(`@solana/web3.js`),C=require(`@coral-xyz/anchor`);var w=(n,a,o,c)=>{let{hinkalIdl:l,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[a].contractData;if(!l)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let m=n.userKeys.getShieldedPrivateKey(),h=n.getSolanaProgram(l),g=n.getSolanaPublicKey(),_=new S.PublicKey(d),v=new S.PublicKey(u),{mintPublicKey:y}=s.formatMintAddress(o.erc20TokenAddress),b=y.toString(),x=p.getStorageAccountPublicKey(v,_),C=p.getStorageVaultPublicKey(v,_),w=p.getMerkleAccountPublicKey(v,_),T=c.map(()=>f.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),m),m,n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)),E=T.map(e=>p.buildAnchorStealthAddressStructure(e)),D=i.UserKeys.getEncryptionKeyPair(m).publicKey,O=b===t.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:O?null:y,atasValue:O?null:void 0,storageAccount:x,storageVault:C,merkleAccount:w,amounts:c,mintAddressString:b,stealthAddressStructures:T,anchorStealthStructures:E,ownEncryptionKey:D}},T=async(e,t)=>{let n=y.buildProoflessEncryptedOutputs(e.stealthAddressStructures,e.amounts.map(()=>e.ownEncryptionKey)).map(e=>Buffer.from(e.slice(2),`hex`)),{current:r,next:i}=await p.resolveSolanaRootBuckets(e.program,e.merkleAccount,e.amounts.length);return e.program.methods.multiPaymentDepositAt(e.amounts.map(e=>new C.BN(e.toString())),e.anchorStealthStructures,n,!0,t?new C.BN(t):null).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:r,rootBucketNext:i??e.program.programId,storageVaultAta:e.atasValue})},E=async(r,i,c,l,d,f,p,h,v,y)=>{let x=c.erc20TokenAddress;if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:S}=e.networkRegistry[i].contractData;if(!S)throw Error(`missing data`);let C=await r.getRandomRelay(i,!0);if(!C)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let w=a.getCurrentTimeInSeconds().toString(),T=r.generateProofRemotely?5:1,E=[];for(let e=0;e<l.length;e+=T){let n=l.slice(e,e+T),a=await Promise.all(n.map(async({recipientAddress:n,utxo:a},l)=>{let S=e+l,T={recipient:n,mint:x===`11111111111111111111111111111111`?void 0:x},E=await g.calculateModifiedFeeStructure(i,c,f[S],d),D=m.constructAdminData(p,i,[x],[f[S]],await r.getEthereumAddress()),{compressedAddress:O}=s.formatMintAddress(t.solanaNativeAddress),k=new o.Utxo({amount:0n,mintAddress:x,erc20TokenAddress:O,nullifyingKey:r.userKeys.getShieldedPrivateKey(),timeStamp:w,spendingPublicKey:r.userKeys.getSpendingKeyPair().pubSpendingBJJPoint}),{args:A,commitmentValidationData:j}=await b.hinkalSolanaTransact(r,{chainId:i,mintAddresses:[x],amountChanges:[-a.amount],relayAddress:C,recipient:n,signer:C,functionName:`transact`,accounts:T,relayerFee:E.flatFee,variableRate:E.variableRate,inputUtxos:[[a,k]],useBlockedUtxos:!0,speculative:y&&{pendingLeaves:y,inputUtxos:[[_.toSpeculativeUtxo(a)]]},submit:{mode:u.SolanaSubmitMode.ProofOnly}});return{relayAddress:C,functionName:`transact`,chainId:i,recipientAmount:f[S].toString(),args:A,accounts:T,adminData:D,commitmentValidationData:j,displayRecipient:h?.[S],destinationChainId:v?.chainId,destinationTokenAddress:v?.tokenAddress,destinationTokenAmount:v?.tokenAmounts?.[S]}}));E.push(...a)}return E},D=async(e,t,n,r,i,u,f,p,m,_,y)=>{let b=d.validateAndGetChainId([t]),S=t.erc20TokenAddress,C=c.hashEthereumAddress(await e.getEthereumAddressByChain(b)),D=m?c.hashString(m):void 0,O=u??await h.getFeeStructure(b,S,[S],l.ExternalActionId.Transact,[],25n,{mintTo:S,recipient:r[0],nullifierCount:1}),k=n.map(e=>e+g.calculateTotalFee(e,O)),A=w(e,b,t,k),j=a.getCurrentTimeInSeconds().toString(),{compressedAddress:M}=s.formatMintAddress(S),N=A.stealthAddressStructures.map((t,n)=>({recipientAddress:r[n],utxo:new o.Utxo({amount:k[n],timeStamp:j,nullifyingKey:e.userKeys.getShieldedPrivateKey(),mintAddress:S,erc20TokenAddress:M,stealthAddress:x.ethers.toBeHex(t.stealthAddress),H0:[t.H0x,t.H0y]})})),{connection:P,wallet:F}=A.program.provider,I=async()=>{let e=await(await T(A,j)).transaction();return e.recentBlockhash=(await P.getLatestBlockhash()).blockhash,e.feePayer=A.publicKey,P.sendRawTransaction((await F.signTransaction(e)).serialize())},L=N.map(({utxo:e})=>BigInt(e.getCommitment()).toString()),[R,z]=await Promise.all([I(),E(e,b,t,N,O,n,p,_,y,L)]);return{depositTxHash:R,scheduleId:await v.solanaTransactCallRelayerBatch(b,z,C,i,f,D,R)}};exports.hinkalSolanaDepositAndWithdraw=D;
|
|
@@ -14,10 +14,10 @@ import { calcStealthAddressStructure as p } from "../../functions/snarkjs/common
|
|
|
14
14
|
import { buildAnchorStealthAddressStructure as m, getMerkleAccountPublicKey as h, getStorageAccountPublicKey as g, getStorageVaultPublicKey as _, resolveSolanaRootBuckets as v } from "../../functions/pre-transaction/solana.mjs";
|
|
15
15
|
import { constructAdminData as y } from "../../functions/pre-transaction/constructAdminData.mjs";
|
|
16
16
|
import { getFeeStructure as b } from "../../functions/pre-transaction/getFeeStructure.mjs";
|
|
17
|
-
import {
|
|
17
|
+
import { calculateModifiedFeeStructure as x, calculateTotalFee as S } from "../../functions/utils/fees.utils.mjs";
|
|
18
|
+
import { toSpeculativeUtxo as C } from "../../functions/pre-transaction/speculativeUtxo.mjs";
|
|
18
19
|
import "../../functions/pre-transaction/index.mjs";
|
|
19
|
-
import { solanaTransactCallRelayerBatch as
|
|
20
|
-
import { calculateModifiedFeeStructure as C, calculateTotalFee as w } from "../../functions/utils/fees.utils.mjs";
|
|
20
|
+
import { solanaTransactCallRelayerBatch as w } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
|
|
21
21
|
import "../../functions/web3/index.mjs";
|
|
22
22
|
import { buildProoflessEncryptedOutputs as T } from "./hinkalProoflessDeposit.utils.mjs";
|
|
23
23
|
import { hinkalSolanaTransact as E } from "./hinkalSolanaTransact.mjs";
|
|
@@ -72,7 +72,7 @@ var A = (n, a, o, c) => {
|
|
|
72
72
|
let v = e + l, w = {
|
|
73
73
|
recipient: n,
|
|
74
74
|
mint: _ === "11111111111111111111111111111111" ? void 0 : _
|
|
75
|
-
}, T = await
|
|
75
|
+
}, T = await x(i, c, f[v], u), D = y(p, i, [_], [f[v]], await r.getEthereumAddress()), { compressedAddress: O } = s(t), k = new o({
|
|
76
76
|
amount: 0n,
|
|
77
77
|
mintAddress: _,
|
|
78
78
|
erc20TokenAddress: O,
|
|
@@ -94,7 +94,7 @@ var A = (n, a, o, c) => {
|
|
|
94
94
|
useBlockedUtxos: !0,
|
|
95
95
|
speculative: g && {
|
|
96
96
|
pendingLeaves: g,
|
|
97
|
-
inputUtxos: [[
|
|
97
|
+
inputUtxos: [[C(a)]]
|
|
98
98
|
},
|
|
99
99
|
submit: { mode: d.ProofOnly }
|
|
100
100
|
});
|
|
@@ -121,7 +121,7 @@ var A = (n, a, o, c) => {
|
|
|
121
121
|
mintTo: y,
|
|
122
122
|
recipient: r[0],
|
|
123
123
|
nullifierCount: 1
|
|
124
|
-
}), E = n.map((e) => e +
|
|
124
|
+
}), E = n.map((e) => e + S(e, T)), O = A(e, v, t, E), k = a().toString(), { compressedAddress: N } = s(y), P = O.stealthAddressStructures.map((t, n) => ({
|
|
125
125
|
recipientAddress: r[n],
|
|
126
126
|
utxo: new o({
|
|
127
127
|
amount: E[n],
|
|
@@ -138,7 +138,7 @@ var A = (n, a, o, c) => {
|
|
|
138
138
|
}, R = P.map(({ utxo: e }) => BigInt(e.getCommitment()).toString()), [z, B] = await Promise.all([L(), M(e, v, t, P, T, n, m, g, _, R)]);
|
|
139
139
|
return {
|
|
140
140
|
depositTxHash: z,
|
|
141
|
-
scheduleId: await
|
|
141
|
+
scheduleId: await w(v, B, x, i, p, C, z)
|
|
142
142
|
};
|
|
143
143
|
};
|
|
144
144
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../functions/utils/solanaMint.utils.cjs`),r=require(`../../functions/utils/addresses.cjs`),i=require(`../../functions/utils/token-check.utils.cjs`),a=require(`../../functions/pre-transaction/solana.cjs`),o=require(`../../functions/pre-transaction/constructAdminData.cjs`),s=require(`../../functions/utils/create-provider.cjs`),c=require(`../AccountActions/AccountActions.cjs`),l=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),u=require(`../../functions/utils/
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../functions/utils/solanaMint.utils.cjs`),r=require(`../../functions/utils/addresses.cjs`),i=require(`../../functions/utils/token-check.utils.cjs`),a=require(`../../functions/pre-transaction/solana.cjs`),o=require(`../../functions/pre-transaction/constructAdminData.cjs`),s=require(`../../functions/utils/create-provider.cjs`),c=require(`../AccountActions/AccountActions.cjs`),l=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),u=require(`../../functions/utils/fees.utils.cjs`),d=require(`../../functions/utils/solana-program.utils.cjs`),f=require(`../../API/admin-calls.cjs`),p=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`),m=require(`./hinkalProoflessDeposit.utils.cjs`);let h=require(`@solana/web3.js`),g=require(`@coral-xyz/anchor`);var _=async({program:e,mintPublicKey:t,mintAddressString:n,tokenAmount:r,stealthAddressStructure:i,recipientEncryptionKey:o,senderPublickey:s,originalDeployer:c,storageAccount:l,storageVault:u,merkleAccount:d,rootBuckets:f,createBlockedUtxos:p})=>{let h=new g.BN(r.toString()),_=a.buildAnchorStealthAddressStructure(i),v=n===`11111111111111111111111111111111`?null:t,y=n===`11111111111111111111111111111111`?null:void 0,[b]=m.buildProoflessEncryptedOutputs([i],[o]),x=Buffer.from(b.slice(2),`hex`),{current:S,next:C}=f;return e.methods.prooflessDeposit(h,_,x,p).accounts({mint:v,signer:s,signerAta:y,originalDeployer:c,storageAccount:l,storageVault:u,merkleAccount:d,rootBucketCurrent:S,rootBucketNext:C??e.programId,storageVaultAta:y}).instruction()},v=async({chainId:i,token:o,tokenAmount:c,senderAddress:l,recipientInfo:u,createBlockedUtxos:f=!1})=>{if(!r.isValidPrivateAddress(u))throw Error(t.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let{hinkalIdl:p,hinkalAddress:m,originalDeployer:g}=e.networkRegistry[i].contractData;if(!p)throw Error(`No IDL configured for Solana program on this network`);if(!g)throw Error(`missing original deployer`);let{rpcUrl:v}=e.networkRegistry[i],y=s.createCustomSolanaConnection(v),b=d.createReadOnlySolanaProgram(y,p),x=new h.PublicKey(g),S=new h.PublicKey(m),C=new h.PublicKey(l),{erc20TokenAddress:w}=o,{mintPublicKey:T}=n.formatMintAddress(w),E=T.toString(),D=a.getStorageAccountPublicKey(S,x),O=a.getStorageVaultPublicKey(S,x),k=a.getMerkleAccountPublicKey(S,x),A=r.constructStealthAddressStructure(u),j=r.getEncryptionKeyFromRecipientInfo(u),M=await a.resolveSolanaRootBuckets(b,k,1),N=await _({program:b,mintPublicKey:T,mintAddressString:E,tokenAmount:c,stealthAddressStructure:A,recipientEncryptionKey:j,senderPublickey:C,originalDeployer:x,storageAccount:D,storageVault:O,merkleAccount:k,rootBuckets:M,createBlockedUtxos:f}),P=n.getSolanaTokenProgramId(o.is2022Program);return{connection:y,senderAddress:l,senderPublickey:C,instructions:[N],storageAccount:D,storageVault:O,rootBucketCurrent:M.current,programId:P}},y=async(e,n,r,i,a,o,s=!1,l=0n)=>{let d=c.AccountActions.getAddressFromSubAccount(n,a);if(!d)throw Error(`Public account address is not available`);let f=await v({chainId:n,token:r,tokenAmount:i,senderAddress:d,recipientInfo:o??e.getRecipientInfo(),createBlockedUtxos:s});if(l<=0n)return f;let m=await e.getRandomRelay(n,!1);if(!m)throw Error(t.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let{instructions:g}=await p.buildSolanaTransferInstructions(f.connection,f.senderPublickey,new h.PublicKey(m),r,u.calculateVariableFee(i,l));return{...f,instructions:[...g,...f.instructions]}},b=async(e,t,n,r,a,s=!1,c=0n,u)=>{if(!r)throw Error(`subAccount is required`);let d=i.validateAndGetChainId([t]),[{connection:p,senderPublickey:m,instructions:h},g]=await Promise.all([y(e,d,t,n,r,a,s,c),e.getEthereumAddress()]),_=await l.sendProxyV0Transaction({connection:p,chainId:d,subAccount:r,payerPublicKey:m,instructions:h});return f.emitTxPublicData(o.constructAdminData(u,d,[t.erc20TokenAddress],[n],g)),_};exports.hinkalSolanaProxyShield=b;
|
|
@@ -9,9 +9,9 @@ import { constructAdminData as p } from "../../functions/pre-transaction/constru
|
|
|
9
9
|
import { createCustomSolanaConnection as m } from "../../functions/utils/create-provider.mjs";
|
|
10
10
|
import { AccountActions as h } from "../AccountActions/AccountActions.mjs";
|
|
11
11
|
import { sendProxyV0Transaction as g } from "../../functions/pre-transaction/sendV0Transaction.mjs";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
12
|
+
import { calculateVariableFee as _ } from "../../functions/utils/fees.utils.mjs";
|
|
13
|
+
import { createReadOnlySolanaProgram as v } from "../../functions/utils/solana-program.utils.mjs";
|
|
14
|
+
import { emitTxPublicData as y } from "../../API/admin-calls.mjs";
|
|
15
15
|
import { buildSolanaTransferInstructions as b } from "../../functions/pre-transaction/solanaTransfer.utils.mjs";
|
|
16
16
|
import { buildProoflessEncryptedOutputs as x } from "./hinkalProoflessDeposit.utils.mjs";
|
|
17
17
|
import { PublicKey as S } from "@solana/web3.js";
|
|
@@ -31,12 +31,12 @@ var w = async ({ program: e, mintPublicKey: t, mintAddressString: n, tokenAmount
|
|
|
31
31
|
rootBucketNext: S ?? e.programId,
|
|
32
32
|
storageVaultAta: _
|
|
33
33
|
}).instruction();
|
|
34
|
-
}, T = async ({ chainId: s, token: c, tokenAmount: p, senderAddress: h, recipientInfo: g, createBlockedUtxos:
|
|
34
|
+
}, T = async ({ chainId: s, token: c, tokenAmount: p, senderAddress: h, recipientInfo: g, createBlockedUtxos: _ = !1 }) => {
|
|
35
35
|
if (!o(g)) throw Error(t.RECIPIENT_FORMAT_INCORRECT);
|
|
36
36
|
let { hinkalIdl: y, hinkalAddress: b, originalDeployer: x } = e[s].contractData;
|
|
37
37
|
if (!y) throw Error("No IDL configured for Solana program on this network");
|
|
38
38
|
if (!x) throw Error("missing original deployer");
|
|
39
|
-
let { rpcUrl: C } = e[s], T = m(C), E =
|
|
39
|
+
let { rpcUrl: C } = e[s], T = m(C), E = v(T, y), D = new S(x), O = new S(b), k = new S(h), { erc20TokenAddress: A } = c, { mintPublicKey: j } = n(A), M = j.toString(), N = u(O, D), P = d(O, D), F = l(O, D), I = i(g), L = a(g), R = await f(E, F, 1), z = await w({
|
|
40
40
|
program: E,
|
|
41
41
|
mintPublicKey: j,
|
|
42
42
|
mintAddressString: M,
|
|
@@ -49,7 +49,7 @@ var w = async ({ program: e, mintPublicKey: t, mintAddressString: n, tokenAmount
|
|
|
49
49
|
storageVault: P,
|
|
50
50
|
merkleAccount: F,
|
|
51
51
|
rootBuckets: R,
|
|
52
|
-
createBlockedUtxos:
|
|
52
|
+
createBlockedUtxos: _
|
|
53
53
|
}), B = r(c.is2022Program);
|
|
54
54
|
return {
|
|
55
55
|
connection: T,
|
|
@@ -75,7 +75,7 @@ var w = async ({ program: e, mintPublicKey: t, mintAddressString: n, tokenAmount
|
|
|
75
75
|
if (c <= 0n) return u;
|
|
76
76
|
let d = await e.getRandomRelay(n, !1);
|
|
77
77
|
if (!d) throw Error(t.RELAYER_NOT_AVAILABLE);
|
|
78
|
-
let { instructions: f } = await b(u.connection, u.senderPublickey, new S(d), r,
|
|
78
|
+
let { instructions: f } = await b(u.connection, u.senderPublickey, new S(d), r, _(i, c));
|
|
79
79
|
return {
|
|
80
80
|
...u,
|
|
81
81
|
instructions: [...f, ...u.instructions]
|
|
@@ -89,7 +89,7 @@ var w = async ({ program: e, mintPublicKey: t, mintAddressString: n, tokenAmount
|
|
|
89
89
|
payerPublicKey: d,
|
|
90
90
|
instructions: f
|
|
91
91
|
});
|
|
92
|
-
return
|
|
92
|
+
return y(p(c, l, [t.erc20TokenAddress], [n], m)), h;
|
|
93
93
|
};
|
|
94
94
|
//#endregion
|
|
95
95
|
export { D as hinkalSolanaProxyShield };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`)
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`);require(`../../constants/protocol.constants.cjs`);const t=require(`../../error-handling/error-codes.constants.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/token-check.utils.cjs`),i=require(`../../functions/utils/erc20tokenFunctions.cjs`),a=require(`../../functions/pre-transaction/constructAdminData.cjs`),o=require(`../../functions/utils/create-provider.cjs`),s=require(`../AccountActions/AccountActions.cjs`),c=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),l=require(`../../functions/pre-transaction/getFeeStructure.cjs`),u=require(`../../functions/utils/fees.utils.cjs`),d=require(`../../API/admin-calls.cjs`);require(`../../constants/index.cjs`);const f=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`);require(`../AccountActions/index.cjs`);let p=require(`@solana/web3.js`);var m=async(e,t)=>{let{addressLookupTableAccount:n,instructionLists:r}=JSON.parse(t).data,i=await Promise.all(n.map(async t=>{let n=await e.getAddressLookupTable(new p.PublicKey(t));if(!n.value)throw Error(`Failed to fetch lookup table: ${t}`);return n.value}));if(r.length===0)throw Error(`No instructions found`);return{instructions:r.map(e=>new p.TransactionInstruction({keys:e.accounts.map(e=>({pubkey:new p.PublicKey(e.pubkey),isSigner:e.isSigner,isWritable:e.isWritable})),programId:new p.PublicKey(e.programId),data:Buffer.from(e.data,`base64`)})),lookupTableAccounts:i}},h=async(e,t)=>{let n=p.VersionedTransaction.deserialize(Buffer.from(t,`base64`)),r=await Promise.all(n.message.addressTableLookups.map(async({accountKey:t})=>{let n=await e.getAddressLookupTable(t);if(!n.value)throw Error(`Failed to fetch lookup table: ${t.toBase58()}`);return n.value})),{instructions:i}=p.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r});return{instructions:i,lookupTableAccounts:r}},g=async(t,r,i,a)=>{let c=s.AccountActions.getAddressFromSubAccount(t,i);if(!c)throw Error(`Public account address is not available`);let{rpcUrl:l}=e.networkRegistry[t],u=o.createCustomSolanaConnection(l),d=new p.PublicKey(c),{instructions:f,lookupTableAccounts:g}=a===n.ExternalActionId.Lifi?await h(u,r):await m(u,r);return{connection:u,walletPublicKey:d,instructions:f,lookupTableAccounts:g}},_=async(e,o,s,m,h,_,v,y,b,x,S,C)=>{let w=r.validateAndGetChainId(o),[{connection:T,walletPublicKey:E,instructions:D,lookupTableAccounts:O},k,A]=await Promise.all([g(w,m,h,_),e.getRandomRelay(w),e.getEthereumAddressByChain(w)]);if(!k)throw Error(t.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let j=D,M=b??await l.getFeeStructure(w,y,o.map(e=>e.erc20TokenAddress),n.ExternalActionId.Emporium,[],35n);if(v){let e=o[1],t=s[1]*M.variableRate/10000n,{instructions:n}=await f.buildSolanaTransferInstructions(T,E,new p.PublicKey(k),e,t);j=[...D,...n]}else{let e={...M,flatFee:0n},t=S&&C!==void 0?await u.calculateModifiedFeeStructure(w,S,C,e):e;if(t.flatFee>0n){let e=await i.getErc20TokenFromAPI(w,t.feeToken);if(!e)throw Error(`Failed to find fee token`);let{instructions:n}=await f.buildSolanaTransferInstructions(T,E,new p.PublicKey(k),e,t.flatFee);j=[...D,...n]}}let N=await c.sendProxyV0Transaction({connection:T,chainId:w,subAccount:h,payerPublicKey:E,instructions:j,lookupTableAccounts:O});return d.emitTxPublicData(a.constructAdminData(x,w,o.map(e=>e.erc20TokenAddress),s,A,o)),N};exports.hinkalSolanaProxySwap=_;
|
|
@@ -2,5 +2,5 @@ import { AdminTransactionType, ERC20Token, SubAccount } from '../../types';
|
|
|
2
2
|
import { IHinkal } from './IHinkal';
|
|
3
3
|
import { FeeStructure } from '../../types/hinkal.types';
|
|
4
4
|
import { ExternalActionId } from '../../types/external-action.types';
|
|
5
|
-
export declare const hinkalSolanaProxySwap: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChanges: bigint[], data: string, subAccount: SubAccount, externalActionId: ExternalActionId, isTheSameChainSwap: boolean, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType) => Promise<string>;
|
|
5
|
+
export declare const hinkalSolanaProxySwap: (hinkal: IHinkal, erc20Tokens: ERC20Token[], amountChanges: bigint[], data: string, subAccount: SubAccount, externalActionId: ExternalActionId, isTheSameChainSwap: boolean, feeToken?: string, feeStructureOverride?: FeeStructure, action?: AdminTransactionType, bridgedToken?: ERC20Token, bridgedTokenAmount?: bigint) => Promise<string>;
|
|
6
6
|
export declare const getSolanaProxySwapSerializedTransaction: (chainId: number, data: string, subAccount: SubAccount, externalActionId: ExternalActionId) => Promise<string>;
|