@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`),t=require(`./caseInsensitive.utils.cjs`),n=require(`../../error-handling/logger.cjs`),r=require(`./tron.utils.cjs`),i=require(`../../types/receive-vault.types.cjs`),a=require(`./receive-vault.utils.cjs`),o=require(`./erc20tokenFunctions.cjs`),s=require(`./publicBalance.utils.cjs`),c=require(`./wallet-token-discovery.utils.cjs`);var l=async(e,t,n)=>await s.getPublicBalanceByTokenAddress(t,r.addressToHexFormat(e),r.addressToHexFormat(n))??0n,u=t=>e.FRONT_END_SUPPORTED_CHAINS.filter(n=>a.isReceiveVaultSupported(n)&&e.isTronLike(n)===e.isTronLike(t.chainId)),d=async(t,r)=>{try{return await(e.isTronLike(t)?c.getTronWalletTokenAddresses(r,t):c.getEvmWalletTokenAddresses(t,r))}catch(e){return n.Logger.error(`receive-vault scan: token discovery failed for chain ${t}`,e),[]}},f=async(e,n)=>{let r=new Map,o=(e,t,n,i)=>r.set(`${t}:${e.vaultAddress}:${n}`.toLowerCase(),{record:e,chainId:t,token:n,reason:i});return await Promise.all(e.map(async e=>{let n=a.isReceiveVaultExpired(e),r=n?i.ReceiveVaultBlockReason.Expired:i.ReceiveVaultBlockReason.NotShieldable;await Promise.all(u(e).map(async a=>{(await d(a,e.vaultAddress)).forEach(s=>{if(a===e.chainId&&t.caseInsensitiveEqual(s,e.token)){n&&o(e,a,s,i.ReceiveVaultBlockReason.Expired);return}o(e,a,s,r)})}))})),n.forEach(n=>{let r=e.find(e=>t.caseInsensitiveEqual(e.vaultAddress,n.vaultAddress));r&&o(r,n.chainId,n.token,i.ReceiveVaultBlockReason.RiskySender)}),[...r.values()]},p=async(e,t)=>{try{return(await Promise.all((await f(e,t)).map(async e=>{try{let[t,n]=await Promise.all([o.getErc20TokenFromAPI(e.chainId,e.token),l(e.record.vaultAddress,e.chainId,e.token)]);return t&&!o.isArcNativeToken(t)&&n>0n?{record:e.record,token:t,amount:n,reason:e.reason}:void 0}catch(t){n.Logger.error(`receive-vault scan: balance lookup failed for chain ${e.chainId} token ${e.token}`,t);return}}))).filter(e=>!!e)}catch(e){return n.Logger.log(`Error fetching vault's blcoked balances`,e),[]}};exports.getReceiveVaultBlockedFunds=p;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { FRONT_END_SUPPORTED_CHAINS as e, isTronLike as t } from "../../constants/chains.constants.mjs";
|
|
2
|
+
import { caseInsensitiveEqual as n } from "./caseInsensitive.utils.mjs";
|
|
3
|
+
import { Logger as r } from "../../error-handling/logger.mjs";
|
|
4
|
+
import { addressToHexFormat as i } from "./tron.utils.mjs";
|
|
5
|
+
import { ReceiveVaultBlockReason as a } from "../../types/receive-vault.types.mjs";
|
|
6
|
+
import { isReceiveVaultExpired as o, isReceiveVaultSupported as s } from "./receive-vault.utils.mjs";
|
|
7
|
+
import { getErc20TokenFromAPI as c, isArcNativeToken as l } from "./erc20tokenFunctions.mjs";
|
|
8
|
+
import { getPublicBalanceByTokenAddress as u } from "./publicBalance.utils.mjs";
|
|
9
|
+
import { getEvmWalletTokenAddresses as d, getTronWalletTokenAddresses as f } from "./wallet-token-discovery.utils.mjs";
|
|
10
|
+
//#region libs/shared/common/src/functions/utils/receive-vault-scan.utils.ts
|
|
11
|
+
var p = async (e, t, n) => await u(t, i(e), i(n)) ?? 0n, m = (n) => e.filter((e) => s(e) && t(e) === t(n.chainId)), h = async (e, n) => {
|
|
12
|
+
try {
|
|
13
|
+
return await (t(e) ? f(n, e) : d(e, n));
|
|
14
|
+
} catch (t) {
|
|
15
|
+
return r.error(`receive-vault scan: token discovery failed for chain ${e}`, t), [];
|
|
16
|
+
}
|
|
17
|
+
}, g = async (e, t) => {
|
|
18
|
+
let r = /* @__PURE__ */ new Map(), i = (e, t, n, i) => r.set(`${t}:${e.vaultAddress}:${n}`.toLowerCase(), {
|
|
19
|
+
record: e,
|
|
20
|
+
chainId: t,
|
|
21
|
+
token: n,
|
|
22
|
+
reason: i
|
|
23
|
+
});
|
|
24
|
+
return await Promise.all(e.map(async (e) => {
|
|
25
|
+
let t = o(e), r = t ? a.Expired : a.NotShieldable;
|
|
26
|
+
await Promise.all(m(e).map(async (o) => {
|
|
27
|
+
(await h(o, e.vaultAddress)).forEach((s) => {
|
|
28
|
+
if (o === e.chainId && n(s, e.token)) {
|
|
29
|
+
t && i(e, o, s, a.Expired);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
i(e, o, s, r);
|
|
33
|
+
});
|
|
34
|
+
}));
|
|
35
|
+
})), t.forEach((t) => {
|
|
36
|
+
let r = e.find((e) => n(e.vaultAddress, t.vaultAddress));
|
|
37
|
+
r && i(r, t.chainId, t.token, a.RiskySender);
|
|
38
|
+
}), [...r.values()];
|
|
39
|
+
}, _ = async (e, t) => {
|
|
40
|
+
try {
|
|
41
|
+
return (await Promise.all((await g(e, t)).map(async (e) => {
|
|
42
|
+
try {
|
|
43
|
+
let [t, n] = await Promise.all([c(e.chainId, e.token), p(e.record.vaultAddress, e.chainId, e.token)]);
|
|
44
|
+
return t && !l(t) && n > 0n ? {
|
|
45
|
+
record: e.record,
|
|
46
|
+
token: t,
|
|
47
|
+
amount: n,
|
|
48
|
+
reason: e.reason
|
|
49
|
+
} : void 0;
|
|
50
|
+
} catch (t) {
|
|
51
|
+
r.error(`receive-vault scan: balance lookup failed for chain ${e.chainId} token ${e.token}`, t);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}))).filter((e) => !!e);
|
|
55
|
+
} catch (e) {
|
|
56
|
+
return r.log("Error fetching vault's blcoked balances", e), [];
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
//#endregion
|
|
60
|
+
export { _ as getReceiveVaultBlockedFunds };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../data-structures/crypto-keys/keys.cjs`),r=require(`../../data-structures/utxo/Utxo.cjs`),i=require(`./tron.utils.cjs`);require(`../../data-structures/crypto-keys/index.cjs`);let a=require(`ethers`);var o=`HINKAL_RECEIVE_V1`,s=`HINKAL_RECEIVE_RECOVERY_V1`,c=`HINKAL_RECEIVE_RECOVER`,l=`HINKAL_RECEIVE_OUTPUT`,u=`HINKAL_RECEIVE_ACCOUNT_V1`,d=`HINKAL_RECEIVE_VAULT_ACCOUNT`,f=({chainId:e,token:t,index:n})=>`${e}:${i.addressToHexFormat(t).toLowerCase()}:${n}`,p=e=>e*t.RECEIVE_VAULT_FEE_CEILING_MULTIPLIER,m=()=>BigInt(Math.floor(Date.now()/1e3)+t.RECEIVE_VAULT_EXPIRY_SECONDS),h=(e,t)=>{let n=a.ethers.keccak256(a.ethers.toUtf8Bytes(`${s}:${e.getShieldedPrivateKey()}:${f(t)}`));return new a.ethers.Wallet(n)},g=e=>n.UserKeys.getEncryptionKeyPair(e.getShieldedPrivateKey()).publicKey,_=(e,s)=>{let c=e.getShieldedPrivateKey(),l=BigInt(a.ethers.keccak256(a.ethers.toUtf8Bytes(`${o}:${c}:${f(s)}`))),u=new r.Utxo({amount:0n,erc20TokenAddress:t.zeroAddress,nullifyingKey:c,randomization:n.UserKeys.findCorrectRandomization(l,c),spendingPublicKey:e.getSpendingKeyPair().pubSpendingBJJPoint}),{H0:d}=u;if(!d)throw Error(`receive vault: H0 is not set`);let p=n.UserKeys.getH1FromH0(d,c);return{recipient:{H0x:d[0],H0y:d[1],H1x:p[0],H1y:p[1],stealthAddress:BigInt(u.getStealthAddress())},owner:h(e,s).address,token:i.addressToHexFormat(s.token),maxFlatFee:BigInt(s.maxFlatFee),maxVariableRate:Number(t.RECEIVE_VAULT_VARIABLE_RATE),expiry:BigInt(s.expiry)}},v=e=>a.ethers.AbiCoder.defaultAbiCoder().encode([`tuple(tuple(uint256,uint256,uint256,uint256,uint256),address,address,uint256,uint16,uint64)`],[[[e.recipient.H0x,e.recipient.H0y,e.recipient.H1x,e.recipient.H1y,e.recipient.stealthAddress],e.owner,e.token,e.maxFlatFee,e.maxVariableRate,e.expiry]]),y=t=>e.isTronLike(t)?`0x41`:`0xff`,b=e=>[[e.recipient.H0x,e.recipient.H0y,e.recipient.H1x,e.recipient.H1y,e.recipient.stealthAddress],e.owner,e.token,e.maxFlatFee,e.maxVariableRate,e.expiry],x=(e,t,n,r)=>a.ethers.getAddress(a.ethers.dataSlice(a.ethers.solidityPackedKeccak256([`bytes1`,`address`,`bytes32`,`bytes32`],[y(r),i.addressToHexFormat(t),a.ethers.keccak256(v(e)),n]),12)),S=t=>e.networkRegistry[t]?.contractData?.receiveVaultFactoryAddress||void 0,C=`0xe5f823a7777291668021ab2734f77bc16b4854c16034051c86967a5eb2415e54`,w=`0xedef7fda070f3ae59616c754f3f10ec4dfe4cb5c531ae39141ab2d323b36e3ec`,T=t=>e.isTronLike(t)?w:C,E=e=>!!S(e),D=(t,n)=>{let r=S(n);if(!r)throw Error(`receive vault: no factory on chain ${n}`);let a=x(t,r,T(n),n);return e.isTronLike(n)?i.evmHexToTronBase58Address(a):a},O=(e,t)=>({...t,vaultAddress:D(_(e,t),t.chainId)}),k=({expiry:e})=>BigInt(e)<BigInt(Math.floor(Date.now()/1e3)),A=e=>({recipient:{H0x:e.recipient.H0x.toString(),H0y:e.recipient.H0y.toString(),H1x:e.recipient.H1x.toString(),H1y:e.recipient.H1y.toString(),stealthAddress:e.recipient.stealthAddress.toString()},owner:e.owner,token:e.token,maxFlatFee:e.maxFlatFee.toString(),maxVariableRate:e.maxVariableRate,expiry:e.expiry.toString()}),j=e=>new a.ethers.Wallet(a.ethers.keccak256(a.ethers.toUtf8Bytes(`${u}:${e.getShieldedPrivateKey()}`))),M=e=>j(e).address,N=(e,t)=>a.ethers.keccak256(a.ethers.solidityPacked([`string`,`address`,`uint256`],[d,e,t])),P=async(e,t)=>{let n=j(e),r=N(n.address,t);return{accountKey:n.address,deadline:t.toString(),signature:await n.signMessage(a.ethers.getBytes(r))}},F=(e,t,n,r)=>a.ethers.keccak256(a.ethers.solidityPacked([`string`,`uint256`,`address`,`address`,`bytes32`],[l,BigInt(e),i.addressToHexFormat(t),i.addressToHexFormat(n),a.ethers.keccak256(r)])),I=async(e,t,n)=>{let r=S(t.chainId);if(!r)throw Error(`receive vault: no factory on chain ${t.chainId}`);let i=F(t.chainId,r,t.vaultAddress,n);return h(e,t).signMessage(a.ethers.getBytes(i))},L=(t,n,r,o,s,l)=>{let u=a.ethers.keccak256(a.ethers.solidityPacked([`string`,`uint256`,`address`,`address`,`address`,`address`,`uint256`],[c,BigInt(t),i.addressToHexFormat(n),i.addressToHexFormat(r),i.addressToHexFormat(o),i.addressToHexFormat(s),l]));return e.isTronLike(t)?a.ethers.keccak256(a.ethers.concat([a.ethers.toUtf8Bytes(`TRON Signed Message:
|
|
2
|
+
32`),u])):u},R=async(t,n,r,i,o,s)=>{let c=S(i);if(!c)throw Error(`receive vault: no factory on chain ${i}`);let l=L(i,c,n.vaultAddress,r,o,s),u=h(t,n);return e.isTronLike(i)?new a.ethers.SigningKey(u.privateKey).sign(l).serialized:u.signMessage(a.ethers.getBytes(l))};exports.buildReceiveVaultRecord=O,exports.computeReceiveVaultAddress=x,exports.encodeReceiveVaultParams=v,exports.getReceiveVaultAccountKey=M,exports.getReceiveVaultAddress=D,exports.getReceiveVaultEncryptionKey=g,exports.getReceiveVaultExpiry=m,exports.getReceiveVaultFactoryAddress=S,exports.getReceiveVaultFeeCeiling=p,exports.getReceiveVaultInitCodeHash=T,exports.getReceiveVaultOutputDigest=F,exports.getReceiveVaultParams=_,exports.getReceiveVaultRecoveryDigest=L,exports.getReceiveVaultRecoveryWallet=h,exports.isReceiveVaultExpired=k,exports.isReceiveVaultSupported=E,exports.receiveVaultParamsToTuple=b,exports.serializeReceiveVaultParams=A,exports.signReceiveVaultAccount=P,exports.signReceiveVaultOutput=I,exports.signReceiveVaultRecovery=R;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { UserKeys } from '../../data-structures/crypto-keys';
|
|
3
|
+
import { ReceiveVaultAccountProof, ReceiveVaultParams, ReceiveVaultRecord } from '../../types/receive-vault.types';
|
|
4
|
+
export type ReceiveVaultTerms = Omit<ReceiveVaultRecord, 'vaultAddress'>;
|
|
5
|
+
/** A ceiling, not a price: the relayer still charges what the settlement costs. It only has to stay
|
|
6
|
+
* above that while gas moves under an unspent address. */
|
|
7
|
+
export declare const getReceiveVaultFeeCeiling: (quotedFlatFee: bigint) => bigint;
|
|
8
|
+
export declare const getReceiveVaultExpiry: () => bigint;
|
|
9
|
+
export declare const getReceiveVaultRecoveryWallet: (userKeys: UserKeys, terms: ReceiveVaultTerms) => ethers.Wallet;
|
|
10
|
+
export declare const getReceiveVaultEncryptionKey: (userKeys: UserKeys) => string;
|
|
11
|
+
export declare const getReceiveVaultParams: (userKeys: UserKeys, terms: ReceiveVaultTerms) => ReceiveVaultParams;
|
|
12
|
+
export declare const encodeReceiveVaultParams: (params: ReceiveVaultParams) => string;
|
|
13
|
+
export declare const receiveVaultParamsToTuple: (params: ReceiveVaultParams) => (string | number | bigint | bigint[])[];
|
|
14
|
+
export declare const computeReceiveVaultAddress: (params: ReceiveVaultParams, factoryAddress: string, initCodeHash: string, chainId: number) => string;
|
|
15
|
+
export declare const getReceiveVaultFactoryAddress: (chainId: number) => string | undefined;
|
|
16
|
+
export declare const getReceiveVaultInitCodeHash: (chainId: number) => string;
|
|
17
|
+
export declare const isReceiveVaultSupported: (chainId: number) => boolean;
|
|
18
|
+
export declare const getReceiveVaultAddress: (params: ReceiveVaultParams, chainId: number) => string;
|
|
19
|
+
export declare const buildReceiveVaultRecord: (userKeys: UserKeys, terms: ReceiveVaultTerms) => ReceiveVaultRecord;
|
|
20
|
+
export declare const isReceiveVaultExpired: ({ expiry }: ReceiveVaultTerms) => boolean;
|
|
21
|
+
export declare const serializeReceiveVaultParams: (params: ReceiveVaultParams) => ReceiveVaultParams<string>;
|
|
22
|
+
export declare const deserializeReceiveVaultParams: (params: ReceiveVaultParams<string>) => ReceiveVaultParams;
|
|
23
|
+
export declare const getReceiveVaultRecipientInfo: (params: ReceiveVaultParams, encryptionKey: string) => string;
|
|
24
|
+
export declare const getReceiveVaultAccountKey: (userKeys: UserKeys) => string;
|
|
25
|
+
export declare const signReceiveVaultAccount: (userKeys: UserKeys, deadline: bigint) => Promise<ReceiveVaultAccountProof>;
|
|
26
|
+
export declare const getReceiveVaultOutputDigest: (chainId: number, factoryAddress: string, vault: string, encryptedOutput: string) => string;
|
|
27
|
+
export declare const signReceiveVaultOutput: (userKeys: UserKeys, record: ReceiveVaultRecord, encryptedOutput: string) => Promise<string>;
|
|
28
|
+
export declare const getReceiveVaultRecoveryDigest: (chainId: number, factoryAddress: string, vault: string, token: string, to: string, deadline: bigint) => string;
|
|
29
|
+
export declare const signReceiveVaultRecovery: (userKeys: UserKeys, record: ReceiveVaultRecord, token: string, chainId: number, to: string, deadline: bigint) => Promise<string>;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { isTronLike as e, networkRegistry as t } from "../../constants/chains.constants.mjs";
|
|
2
|
+
import { RECEIVE_VAULT_EXPIRY_SECONDS as n, RECEIVE_VAULT_FEE_CEILING_MULTIPLIER as r, RECEIVE_VAULT_VARIABLE_RATE as i, zeroAddress as a } from "../../constants/protocol.constants.mjs";
|
|
3
|
+
import { UserKeys as o } from "../../data-structures/crypto-keys/keys.mjs";
|
|
4
|
+
import { Utxo as s } from "../../data-structures/utxo/Utxo.mjs";
|
|
5
|
+
import { addressToHexFormat as c, evmHexToTronBase58Address as l } from "./tron.utils.mjs";
|
|
6
|
+
import "../../data-structures/crypto-keys/index.mjs";
|
|
7
|
+
import { ethers as u } from "ethers";
|
|
8
|
+
//#region libs/shared/common/src/functions/utils/receive-vault.utils.ts
|
|
9
|
+
var d = "HINKAL_RECEIVE_V1", f = "HINKAL_RECEIVE_RECOVERY_V1", p = "HINKAL_RECEIVE_RECOVER", m = "HINKAL_RECEIVE_OUTPUT", h = "HINKAL_RECEIVE_ACCOUNT_V1", g = "HINKAL_RECEIVE_VAULT_ACCOUNT", _ = ({ chainId: e, token: t, index: n }) => `${e}:${c(t).toLowerCase()}:${n}`, v = (e) => e * r, y = () => BigInt(Math.floor(Date.now() / 1e3) + n), b = (e, t) => {
|
|
10
|
+
let n = u.keccak256(u.toUtf8Bytes(`${f}:${e.getShieldedPrivateKey()}:${_(t)}`));
|
|
11
|
+
return new u.Wallet(n);
|
|
12
|
+
}, x = (e) => o.getEncryptionKeyPair(e.getShieldedPrivateKey()).publicKey, S = (e, t) => {
|
|
13
|
+
let n = e.getShieldedPrivateKey(), r = BigInt(u.keccak256(u.toUtf8Bytes(`${d}:${n}:${_(t)}`))), l = new s({
|
|
14
|
+
amount: 0n,
|
|
15
|
+
erc20TokenAddress: a,
|
|
16
|
+
nullifyingKey: n,
|
|
17
|
+
randomization: o.findCorrectRandomization(r, n),
|
|
18
|
+
spendingPublicKey: e.getSpendingKeyPair().pubSpendingBJJPoint
|
|
19
|
+
}), { H0: f } = l;
|
|
20
|
+
if (!f) throw Error("receive vault: H0 is not set");
|
|
21
|
+
let p = o.getH1FromH0(f, n);
|
|
22
|
+
return {
|
|
23
|
+
recipient: {
|
|
24
|
+
H0x: f[0],
|
|
25
|
+
H0y: f[1],
|
|
26
|
+
H1x: p[0],
|
|
27
|
+
H1y: p[1],
|
|
28
|
+
stealthAddress: BigInt(l.getStealthAddress())
|
|
29
|
+
},
|
|
30
|
+
owner: b(e, t).address,
|
|
31
|
+
token: c(t.token),
|
|
32
|
+
maxFlatFee: BigInt(t.maxFlatFee),
|
|
33
|
+
maxVariableRate: Number(i),
|
|
34
|
+
expiry: BigInt(t.expiry)
|
|
35
|
+
};
|
|
36
|
+
}, C = (e) => u.AbiCoder.defaultAbiCoder().encode(["tuple(tuple(uint256,uint256,uint256,uint256,uint256),address,address,uint256,uint16,uint64)"], [[
|
|
37
|
+
[
|
|
38
|
+
e.recipient.H0x,
|
|
39
|
+
e.recipient.H0y,
|
|
40
|
+
e.recipient.H1x,
|
|
41
|
+
e.recipient.H1y,
|
|
42
|
+
e.recipient.stealthAddress
|
|
43
|
+
],
|
|
44
|
+
e.owner,
|
|
45
|
+
e.token,
|
|
46
|
+
e.maxFlatFee,
|
|
47
|
+
e.maxVariableRate,
|
|
48
|
+
e.expiry
|
|
49
|
+
]]), w = (t) => e(t) ? "0x41" : "0xff", T = (e) => [
|
|
50
|
+
[
|
|
51
|
+
e.recipient.H0x,
|
|
52
|
+
e.recipient.H0y,
|
|
53
|
+
e.recipient.H1x,
|
|
54
|
+
e.recipient.H1y,
|
|
55
|
+
e.recipient.stealthAddress
|
|
56
|
+
],
|
|
57
|
+
e.owner,
|
|
58
|
+
e.token,
|
|
59
|
+
e.maxFlatFee,
|
|
60
|
+
e.maxVariableRate,
|
|
61
|
+
e.expiry
|
|
62
|
+
], E = (e, t, n, r) => u.getAddress(u.dataSlice(u.solidityPackedKeccak256([
|
|
63
|
+
"bytes1",
|
|
64
|
+
"address",
|
|
65
|
+
"bytes32",
|
|
66
|
+
"bytes32"
|
|
67
|
+
], [
|
|
68
|
+
w(r),
|
|
69
|
+
c(t),
|
|
70
|
+
u.keccak256(C(e)),
|
|
71
|
+
n
|
|
72
|
+
]), 12)), D = (e) => t[e]?.contractData?.receiveVaultFactoryAddress || void 0, O = "0xe5f823a7777291668021ab2734f77bc16b4854c16034051c86967a5eb2415e54", k = "0xedef7fda070f3ae59616c754f3f10ec4dfe4cb5c531ae39141ab2d323b36e3ec", A = (t) => e(t) ? k : O, j = (e) => !!D(e), M = (t, n) => {
|
|
73
|
+
let r = D(n);
|
|
74
|
+
if (!r) throw Error(`receive vault: no factory on chain ${n}`);
|
|
75
|
+
let i = E(t, r, A(n), n);
|
|
76
|
+
return e(n) ? l(i) : i;
|
|
77
|
+
}, N = (e, t) => ({
|
|
78
|
+
...t,
|
|
79
|
+
vaultAddress: M(S(e, t), t.chainId)
|
|
80
|
+
}), P = ({ expiry: e }) => BigInt(e) < BigInt(Math.floor(Date.now() / 1e3)), F = (e) => ({
|
|
81
|
+
recipient: {
|
|
82
|
+
H0x: e.recipient.H0x.toString(),
|
|
83
|
+
H0y: e.recipient.H0y.toString(),
|
|
84
|
+
H1x: e.recipient.H1x.toString(),
|
|
85
|
+
H1y: e.recipient.H1y.toString(),
|
|
86
|
+
stealthAddress: e.recipient.stealthAddress.toString()
|
|
87
|
+
},
|
|
88
|
+
owner: e.owner,
|
|
89
|
+
token: e.token,
|
|
90
|
+
maxFlatFee: e.maxFlatFee.toString(),
|
|
91
|
+
maxVariableRate: e.maxVariableRate,
|
|
92
|
+
expiry: e.expiry.toString()
|
|
93
|
+
}), I = (e) => new u.Wallet(u.keccak256(u.toUtf8Bytes(`${h}:${e.getShieldedPrivateKey()}`))), L = (e) => I(e).address, R = (e, t) => u.keccak256(u.solidityPacked([
|
|
94
|
+
"string",
|
|
95
|
+
"address",
|
|
96
|
+
"uint256"
|
|
97
|
+
], [
|
|
98
|
+
g,
|
|
99
|
+
e,
|
|
100
|
+
t
|
|
101
|
+
])), z = async (e, t) => {
|
|
102
|
+
let n = I(e), r = R(n.address, t);
|
|
103
|
+
return {
|
|
104
|
+
accountKey: n.address,
|
|
105
|
+
deadline: t.toString(),
|
|
106
|
+
signature: await n.signMessage(u.getBytes(r))
|
|
107
|
+
};
|
|
108
|
+
}, B = (e, t, n, r) => u.keccak256(u.solidityPacked([
|
|
109
|
+
"string",
|
|
110
|
+
"uint256",
|
|
111
|
+
"address",
|
|
112
|
+
"address",
|
|
113
|
+
"bytes32"
|
|
114
|
+
], [
|
|
115
|
+
m,
|
|
116
|
+
BigInt(e),
|
|
117
|
+
c(t),
|
|
118
|
+
c(n),
|
|
119
|
+
u.keccak256(r)
|
|
120
|
+
])), V = async (e, t, n) => {
|
|
121
|
+
let r = D(t.chainId);
|
|
122
|
+
if (!r) throw Error(`receive vault: no factory on chain ${t.chainId}`);
|
|
123
|
+
let i = B(t.chainId, r, t.vaultAddress, n);
|
|
124
|
+
return b(e, t).signMessage(u.getBytes(i));
|
|
125
|
+
}, H = (t, n, r, i, a, o) => {
|
|
126
|
+
let s = u.keccak256(u.solidityPacked([
|
|
127
|
+
"string",
|
|
128
|
+
"uint256",
|
|
129
|
+
"address",
|
|
130
|
+
"address",
|
|
131
|
+
"address",
|
|
132
|
+
"address",
|
|
133
|
+
"uint256"
|
|
134
|
+
], [
|
|
135
|
+
p,
|
|
136
|
+
BigInt(t),
|
|
137
|
+
c(n),
|
|
138
|
+
c(r),
|
|
139
|
+
c(i),
|
|
140
|
+
c(a),
|
|
141
|
+
o
|
|
142
|
+
]));
|
|
143
|
+
return e(t) ? u.keccak256(u.concat([u.toUtf8Bytes("TRON Signed Message:\n32"), s])) : s;
|
|
144
|
+
}, U = async (t, n, r, i, a, o) => {
|
|
145
|
+
let s = D(i);
|
|
146
|
+
if (!s) throw Error(`receive vault: no factory on chain ${i}`);
|
|
147
|
+
let c = H(i, s, n.vaultAddress, r, a, o), l = b(t, n);
|
|
148
|
+
return e(i) ? new u.SigningKey(l.privateKey).sign(c).serialized : l.signMessage(u.getBytes(c));
|
|
149
|
+
};
|
|
150
|
+
//#endregion
|
|
151
|
+
export { N as buildReceiveVaultRecord, E as computeReceiveVaultAddress, C as encodeReceiveVaultParams, L as getReceiveVaultAccountKey, M as getReceiveVaultAddress, x as getReceiveVaultEncryptionKey, y as getReceiveVaultExpiry, D as getReceiveVaultFactoryAddress, v as getReceiveVaultFeeCeiling, A as getReceiveVaultInitCodeHash, B as getReceiveVaultOutputDigest, S as getReceiveVaultParams, H as getReceiveVaultRecoveryDigest, b as getReceiveVaultRecoveryWallet, P as isReceiveVaultExpired, j as isReceiveVaultSupported, T as receiveVaultParamsToTuple, F as serializeReceiveVaultParams, z as signReceiveVaultAccount, V as signReceiveVaultOutput, U as signReceiveVaultRecovery };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../constants/chains.constants.cjs`);var t=(t,n)=>{let r=`${t}-${n}`;return e.isSolanaLike(n)||e.isTronLike(n)?r:r.toLowerCase()},
|
|
1
|
+
const e=require(`../../constants/chains.constants.cjs`);var t=e=>{e.startsWith(`0x`)&&(e=e.slice(2));let t=[];for(let n=0;n<e.length;n+=2){let r=parseInt(e.slice(n,n+2),16);t.push(r)}return new TextDecoder(`utf-8`).decode(new Uint8Array(t))},n=(t,n)=>{let r=`${t}-${n}`;return e.isSolanaLike(n)||e.isTronLike(n)?r:r.toLowerCase()},r=(t,n,r=!1)=>{let i=`${t}-${n}`;if(r){let{hinkalAddress:t}=e.networkRegistry[n].contractData;return`${i}-${t}`.toLowerCase()}return i.toLowerCase()},i=(e,t,n)=>{if(!t||!n)throw Error(`oldPart and newPart must be provided`);return e.toLowerCase().split(t.toLowerCase()).join(n.toLowerCase())};exports.getStateKey=r,exports.getTokenStateKey=n,exports.hexToUtf8=t,exports.replaceAllInstances=i;
|
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
import { isSolanaLike as e, isTronLike as t, networkRegistry as n } from "../../constants/chains.constants.mjs";
|
|
2
2
|
//#region libs/shared/common/src/functions/utils/string.utils.ts
|
|
3
|
-
var r = (
|
|
3
|
+
var r = (e) => {
|
|
4
|
+
e.startsWith("0x") && (e = e.slice(2));
|
|
5
|
+
let t = [];
|
|
6
|
+
for (let n = 0; n < e.length; n += 2) {
|
|
7
|
+
let r = parseInt(e.slice(n, n + 2), 16);
|
|
8
|
+
t.push(r);
|
|
9
|
+
}
|
|
10
|
+
return new TextDecoder("utf-8").decode(new Uint8Array(t));
|
|
11
|
+
}, i = (n, r) => {
|
|
4
12
|
let i = `${n}-${r}`;
|
|
5
13
|
return e(r) || t(r) ? i : i.toLowerCase();
|
|
6
|
-
},
|
|
14
|
+
}, a = (e, t, r = !1) => {
|
|
7
15
|
let i = `${e}-${t}`;
|
|
8
16
|
if (r) {
|
|
9
17
|
let { hinkalAddress: e } = n[t].contractData;
|
|
10
18
|
return `${i}-${e}`.toLowerCase();
|
|
11
19
|
}
|
|
12
20
|
return i.toLowerCase();
|
|
13
|
-
},
|
|
21
|
+
}, o = (e, t, n) => {
|
|
14
22
|
if (!t || !n) throw Error("oldPart and newPart must be provided");
|
|
15
23
|
return e.toLowerCase().split(t.toLowerCase()).join(n.toLowerCase());
|
|
16
24
|
};
|
|
17
25
|
//#endregion
|
|
18
|
-
export {
|
|
26
|
+
export { a as getStateKey, i as getTokenStateKey, r as hexToUtf8, o as replaceAllInstances };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../error-handling/error-codes.constants.cjs`),require(`../web3/etherFunctions.cjs`),require(`../../data-structures/crypto-keys/keys.cjs`),require(`./addresses.cjs`),require(`../pre-transaction/getFeeStructure.cjs`),require(`./
|
|
1
|
+
require(`../../error-handling/error-codes.constants.cjs`),require(`../web3/etherFunctions.cjs`),require(`../../data-structures/crypto-keys/keys.cjs`),require(`./addresses.cjs`),require(`../pre-transaction/getFeeStructure.cjs`),require(`./fees.utils.cjs`),require(`./getRecipientInfoFromUserKeys.cjs`),require(`./enclave-utxo-storage.cjs`),require(`../../data-structures/Hinkal/hinkalSolanaSponsoredShield.cjs`),require(`./enclave-recipient-info-storage.cjs`);
|
|
@@ -3,8 +3,8 @@ import "../web3/etherFunctions.mjs";
|
|
|
3
3
|
import "../../data-structures/crypto-keys/keys.mjs";
|
|
4
4
|
import "./addresses.mjs";
|
|
5
5
|
import "../pre-transaction/getFeeStructure.mjs";
|
|
6
|
-
import "./getRecipientInfoFromUserKeys.mjs";
|
|
7
6
|
import "./fees.utils.mjs";
|
|
7
|
+
import "./getRecipientInfoFromUserKeys.mjs";
|
|
8
8
|
import "./enclave-utxo-storage.mjs";
|
|
9
9
|
import "../../data-structures/Hinkal/hinkalSolanaSponsoredShield.mjs";
|
|
10
10
|
import "./enclave-recipient-info-storage.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./token-check.utils.cjs`),require(`../../error-handling/index.cjs`),require(`../../constants/index.cjs`),require(
|
|
1
|
+
require(`../../data-structures/crypto-keys/index.cjs`),require(`./token-check.utils.cjs`),require(`../../error-handling/index.cjs`),require(`../../constants/index.cjs`),require(`./getRecipientInfoFromUserKeys.cjs`),require(`./enclave-utxo-storage.cjs`),require(`./tx-confirmation.utils.cjs`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import "../../data-structures/crypto-keys/index.mjs";
|
|
1
2
|
import "./token-check.utils.mjs";
|
|
2
3
|
import "../../error-handling/index.mjs";
|
|
3
4
|
import "../../constants/index.mjs";
|
|
4
|
-
import "../../data-structures/crypto-keys/index.mjs";
|
|
5
5
|
import "./getRecipientInfoFromUserKeys.mjs";
|
|
6
6
|
import "./enclave-utxo-storage.mjs";
|
|
7
7
|
import "./tx-confirmation.utils.mjs";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require(`../../constants/chains.constants.cjs`);const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../data-structures/http/HttpClient.cjs`);require(`../../data-structures/http/index.cjs`);const n=require(`./tron.utils.cjs`);require(`./create-provider.cjs`);const r=require(`./publicBalance.utils.cjs`),i=require(`../../API/evm-token-assets.cjs`);require(`@solana/web3.js`),require(`@solana/spl-token`);var a=async(t,n)=>{let[a,o]=await Promise.all([r.getPublicBalanceByTokenAddress(t,n,e.zeroAddress),i.getEvmTokenBalancesFromServer(t,n)]);a&&a>0n&&o.push({contractAddress:e.zeroAddress,tokenBalance:a.toString()});let s={};return o.forEach(e=>{(!s[e.contractAddress]||BigInt(e.tokenBalance)>0n)&&(s[e.contractAddress]=e)}),Object.keys(s)},o=200,s=async(e,r)=>{let i=`${n.getTronWalletRpcUrl(r)}/v1/accounts/${e}/transactions/trc20?only_to=true&limit=${o}`,a=((await t.httpClient.get(i))?.data??[]).map(e=>e.token_info?.address).filter(e=>!!e).map(n.addressToHexFormat);return Array.from(new Set(a))},c=async(r,i)=>{let a=n.toTronBase58IfHex(r),o=`${n.getTronWalletRpcUrl(i)}/v1/accounts/${a}`,c=(await t.httpClient.get(o))?.data?.[0];if(!c)return s(a,i);let l=[];return c.balance&&c.balance>0&&l.push(e.zeroAddress),(c.trc20??[]).forEach(e=>{Object.entries(e).forEach(([e,t])=>{BigInt(t)>0n&&l.push(n.addressToHexFormat(e))})}),Array.from(new Set(l))};exports.getEvmWalletTokenAddresses=a,exports.getTronWalletTokenAddresses=c;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const getEvmWalletTokenAddresses: (chainId: number, walletAddress: string) => Promise<string[]>;
|
|
2
|
+
export declare const getSolanaWalletTokenAddresses: (chainId: number, walletAddress: string) => Promise<string[]>;
|
|
3
|
+
export declare const getWalletTokenAddresses: (chainId: number, walletAddress: string) => Promise<string[]>;
|
|
4
|
+
export declare const getTronWalletTokenAddresses: (walletAddress: string, chainId: number) => Promise<string[]>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import "../../constants/chains.constants.mjs";
|
|
2
|
+
import { zeroAddress as e } from "../../constants/protocol.constants.mjs";
|
|
3
|
+
import { httpClient as t } from "../../data-structures/http/HttpClient.mjs";
|
|
4
|
+
import "../../data-structures/http/index.mjs";
|
|
5
|
+
import { addressToHexFormat as n, getTronWalletRpcUrl as r, toTronBase58IfHex as i } from "./tron.utils.mjs";
|
|
6
|
+
import "./create-provider.mjs";
|
|
7
|
+
import { getPublicBalanceByTokenAddress as a } from "./publicBalance.utils.mjs";
|
|
8
|
+
import { getEvmTokenBalancesFromServer as o } from "../../API/evm-token-assets.mjs";
|
|
9
|
+
import "@solana/web3.js";
|
|
10
|
+
import "@solana/spl-token";
|
|
11
|
+
//#region libs/shared/common/src/functions/utils/wallet-token-discovery.utils.ts
|
|
12
|
+
var s = async (t, n) => {
|
|
13
|
+
let [r, i] = await Promise.all([a(t, n, e), o(t, n)]);
|
|
14
|
+
r && r > 0n && i.push({
|
|
15
|
+
contractAddress: e,
|
|
16
|
+
tokenBalance: r.toString()
|
|
17
|
+
});
|
|
18
|
+
let s = {};
|
|
19
|
+
return i.forEach((e) => {
|
|
20
|
+
(!s[e.contractAddress] || BigInt(e.tokenBalance) > 0n) && (s[e.contractAddress] = e);
|
|
21
|
+
}), Object.keys(s);
|
|
22
|
+
}, c = 200, l = async (e, i) => {
|
|
23
|
+
let a = `${r(i)}/v1/accounts/${e}/transactions/trc20?only_to=true&limit=${c}`, o = ((await t.get(a))?.data ?? []).map((e) => e.token_info?.address).filter((e) => !!e).map(n);
|
|
24
|
+
return Array.from(new Set(o));
|
|
25
|
+
}, u = async (a, o) => {
|
|
26
|
+
let s = i(a), c = `${r(o)}/v1/accounts/${s}`, u = (await t.get(c))?.data?.[0];
|
|
27
|
+
if (!u) return l(s, o);
|
|
28
|
+
let d = [];
|
|
29
|
+
return u.balance && u.balance > 0 && d.push(e), (u.trc20 ?? []).forEach((e) => {
|
|
30
|
+
Object.entries(e).forEach(([e, t]) => {
|
|
31
|
+
BigInt(t) > 0n && d.push(n(e));
|
|
32
|
+
});
|
|
33
|
+
}), Array.from(new Set(d));
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
export { s as getEvmWalletTokenAddresses, u as getTronWalletTokenAddresses };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const e=require(`../../../constants/protocol.constants.cjs`),t=require(`../../utils/time.utils.cjs`),n=require(`../../../types/ethereum-network.types.cjs`),r=require(`../../utils/getContractAddress.cjs`),i=require(`../../utils/isSigner.cjs`),a=require(`./recoverTransactionFromError.cjs`),o=require(`./approveTokensToHinkal.cjs`),s=require(`./constructBatchCall.cjs`),c=require(`./waitForErc20Approvals.cjs`);var l=async(l,u,d,f,p,m,h,g,_,v=!0,y=!1)=>{let b=Array.isArray(d)?d:[d],x=Array.isArray(f)?f:[f];if(b.length!==x.length)throw Error(`token and amount length mismatch`);let S=l.getContractWithSigner(u,n.ContractType.HinkalContract),C=await l.getEthereumAddressByChain(u),w=g??S,T=_??S,E=`transact`,D=x.findIndex(({erc20TokenAddress:t})=>t===e.zeroAddress),O=x.some(({erc20TokenAddress:t})=>t!==e.zeroAddress),k=D===-1?0n:b[D],A=l.getProviderAdapter(u),j=await A.supportsBatchCall?.(u);if(!y&&O&&j&&A.sendBatchCallsTransaction){let e=s.buildApproveAndTransactCalls(x.map(e=>e.erc20TokenAddress),b,r.getContractAddress(w),T,p,h,m,k);return await A.sendBatchCallsTransaction(u,e)}if(!y&&(await o.approveTokensToHinkal(l,u,w,x,b),O)){let e=x.map(({erc20TokenAddress:e},t)=>({tokenAddress:e,requiredAmount:b[t]}));await c.waitForErc20Approvals(l,u,C,r.getContractAddress(w),e)}let M={value:k>0n?BigInt(k).toString():void 0,gasLimit:void 0},N,P=[p[0],p[1],p[2],h,m,{...M,from:C}],{runner:F}=T;if(!i.isSigner(F))throw Error(`expected signer`);if(v)try{N=Number(await T[E].estimateGas(...P))}catch(e){console.log(`hinkalDeposit: gas estimation error`,{err:e})}let I=N&&N>=0?Math.ceil(N*12/10):void 0;I&&(P[5].gasLimit=I),await t.waitLittle();let L;try{L=y?await T[E].populateTransaction(...P):await T[E](...P)}catch(e){if(!e?.transactionHash||!F.provider)throw e;let t=await a.recoverTransactionFromError(F.provider,e.transactionHash);if(!t)throw e;L=t}return L};exports.transactCallDirect=l;
|
|
@@ -2,26 +2,26 @@ import { zeroAddress as e } from "../../../constants/protocol.constants.mjs";
|
|
|
2
2
|
import { waitLittle as t } from "../../utils/time.utils.mjs";
|
|
3
3
|
import { ContractType as n } from "../../../types/ethereum-network.types.mjs";
|
|
4
4
|
import { getContractAddress as r } from "../../utils/getContractAddress.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
5
|
+
import { isSigner as i } from "../../utils/isSigner.mjs";
|
|
6
|
+
import { recoverTransactionFromError as a } from "./recoverTransactionFromError.mjs";
|
|
7
|
+
import { approveTokensToHinkal as o } from "./approveTokensToHinkal.mjs";
|
|
8
|
+
import { buildApproveAndTransactCalls as s } from "./constructBatchCall.mjs";
|
|
9
|
+
import { waitForErc20Approvals as c } from "./waitForErc20Approvals.mjs";
|
|
10
10
|
//#region libs/shared/common/src/functions/web3/functionCalls/transactCallDirect.ts
|
|
11
11
|
var l = async (l, u, d, f, p, m, h, g, _, v = !0, y = !1) => {
|
|
12
12
|
let b = Array.isArray(d) ? d : [d], x = Array.isArray(f) ? f : [f];
|
|
13
13
|
if (b.length !== x.length) throw Error("token and amount length mismatch");
|
|
14
14
|
let S = l.getContractWithSigner(u, n.HinkalContract), C = await l.getEthereumAddressByChain(u), w = g ?? S, T = _ ?? S, E = "transact", D = x.findIndex(({ erc20TokenAddress: t }) => t === e), O = x.some(({ erc20TokenAddress: t }) => t !== e), k = D === -1 ? 0n : b[D], A = l.getProviderAdapter(u), j = await A.supportsBatchCall?.(u);
|
|
15
15
|
if (!y && O && j && A.sendBatchCallsTransaction) {
|
|
16
|
-
let e =
|
|
16
|
+
let e = s(x.map((e) => e.erc20TokenAddress), b, r(w), T, p, h, m, k);
|
|
17
17
|
return await A.sendBatchCallsTransaction(u, e);
|
|
18
18
|
}
|
|
19
|
-
if (!y && (await
|
|
19
|
+
if (!y && (await o(l, u, w, x, b), O)) {
|
|
20
20
|
let e = x.map(({ erc20TokenAddress: e }, t) => ({
|
|
21
21
|
tokenAddress: e,
|
|
22
22
|
requiredAmount: b[t]
|
|
23
23
|
}));
|
|
24
|
-
await
|
|
24
|
+
await c(l, u, C, r(w), e);
|
|
25
25
|
}
|
|
26
26
|
let M = {
|
|
27
27
|
value: k > 0n ? BigInt(k).toString() : void 0,
|
|
@@ -37,7 +37,7 @@ var l = async (l, u, d, f, p, m, h, g, _, v = !0, y = !1) => {
|
|
|
37
37
|
from: C
|
|
38
38
|
}
|
|
39
39
|
], { runner: F } = T;
|
|
40
|
-
if (!(F
|
|
40
|
+
if (!i(F)) throw Error("expected signer");
|
|
41
41
|
if (v) try {
|
|
42
42
|
N = Number(await T[E].estimateGas(...P));
|
|
43
43
|
} catch (e) {
|
|
@@ -49,8 +49,8 @@ var l = async (l, u, d, f, p, m, h, g, _, v = !0, y = !1) => {
|
|
|
49
49
|
try {
|
|
50
50
|
L = y ? await T[E].populateTransaction(...P) : await T[E](...P);
|
|
51
51
|
} catch (e) {
|
|
52
|
-
if (!e?.transactionHash) throw e;
|
|
53
|
-
let t = await
|
|
52
|
+
if (!e?.transactionHash || !F.provider) throw e;
|
|
53
|
+
let t = await a(F.provider, e.transactionHash);
|
|
54
54
|
if (!t) throw e;
|
|
55
55
|
L = t;
|
|
56
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=function(e){return e[e.HinkalContract=0]=`HinkalContract`,e[e.HinkalHelperContract=1]=`HinkalHelperContract`,e[e.HinkalWrapperContract=2]=`HinkalWrapperContract`,e[e.DepositOnChainUtxosContract=3]=`DepositOnChainUtxosContract`,e[e.ERC20Contract=4]=`ERC20Contract`,e[e.ERC721Contract=5]=`ERC721Contract`,e[e.ERC1155Contract=6]=`ERC1155Contract`,e[e.WATokenContract=7]=`WATokenContract`,e[e.MerkleTreeContract=8]=`MerkleTreeContract`,e}({});exports.ContractType=e;
|
|
1
|
+
var e=function(e){return e[e.HinkalContract=0]=`HinkalContract`,e[e.HinkalHelperContract=1]=`HinkalHelperContract`,e[e.HinkalWrapperContract=2]=`HinkalWrapperContract`,e[e.DepositOnChainUtxosContract=3]=`DepositOnChainUtxosContract`,e[e.ERC20Contract=4]=`ERC20Contract`,e[e.ERC721Contract=5]=`ERC721Contract`,e[e.ERC1155Contract=6]=`ERC1155Contract`,e[e.WATokenContract=7]=`WATokenContract`,e[e.MerkleTreeContract=8]=`MerkleTreeContract`,e[e.ReceiveVaultFactoryContract=9]=`ReceiveVaultFactoryContract`,e}({});exports.ContractType=e;
|
|
@@ -13,7 +13,8 @@ export declare enum ContractType {
|
|
|
13
13
|
ERC721Contract = 5,
|
|
14
14
|
ERC1155Contract = 6,
|
|
15
15
|
WATokenContract = 7,
|
|
16
|
-
MerkleTreeContract = 8
|
|
16
|
+
MerkleTreeContract = 8,
|
|
17
|
+
ReceiveVaultFactoryContract = 9
|
|
17
18
|
}
|
|
18
19
|
export interface ContractData {
|
|
19
20
|
hinkalAddress: string;
|
|
@@ -23,6 +24,8 @@ export interface ContractData {
|
|
|
23
24
|
hinkalHelperABI?: InterfaceAbi;
|
|
24
25
|
hinkalWrapperAddress?: string;
|
|
25
26
|
hinkalWrapperABI?: InterfaceAbi;
|
|
27
|
+
receiveVaultFactoryAddress?: string;
|
|
28
|
+
receiveVaultFactoryABI?: InterfaceAbi;
|
|
26
29
|
depositOnChainUtxosExternalActionAddress?: string;
|
|
27
30
|
depositOnChainUtxosExternalActionABI?: InterfaceAbi;
|
|
28
31
|
lifiExternalActionInstanceAddress?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region libs/shared/common/src/types/ethereum-network.types.ts
|
|
2
2
|
var e = /* @__PURE__ */ function(e) {
|
|
3
|
-
return e[e.HinkalContract = 0] = "HinkalContract", e[e.HinkalHelperContract = 1] = "HinkalHelperContract", e[e.HinkalWrapperContract = 2] = "HinkalWrapperContract", e[e.DepositOnChainUtxosContract = 3] = "DepositOnChainUtxosContract", e[e.ERC20Contract = 4] = "ERC20Contract", e[e.ERC721Contract = 5] = "ERC721Contract", e[e.ERC1155Contract = 6] = "ERC1155Contract", e[e.WATokenContract = 7] = "WATokenContract", e[e.MerkleTreeContract = 8] = "MerkleTreeContract", e;
|
|
3
|
+
return e[e.HinkalContract = 0] = "HinkalContract", e[e.HinkalHelperContract = 1] = "HinkalHelperContract", e[e.HinkalWrapperContract = 2] = "HinkalWrapperContract", e[e.DepositOnChainUtxosContract = 3] = "DepositOnChainUtxosContract", e[e.ERC20Contract = 4] = "ERC20Contract", e[e.ERC721Contract = 5] = "ERC721Contract", e[e.ERC1155Contract = 6] = "ERC1155Contract", e[e.WATokenContract = 7] = "WATokenContract", e[e.MerkleTreeContract = 8] = "MerkleTreeContract", e[e.ReceiveVaultFactoryContract = 9] = "ReceiveVaultFactoryContract", e;
|
|
4
4
|
}({});
|
|
5
5
|
//#endregion
|
|
6
6
|
export { e as ContractType };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=function(e){return e.Transact=`Transact`,e.Lifi=`Lifi`,e.Okx=`Okx`,e.Emporium=`Emporium`,e.Wallet=`Wallet`,e.DepositOnChainUtxos=`DepositOnChainUtxos`,e.ProofLess=`ProofLess`,e}({});exports.ExternalActionId=e;
|
|
1
|
+
var e=function(e){return e.Transact=`Transact`,e.Lifi=`Lifi`,e.Okx=`Okx`,e.Emporium=`Emporium`,e.Wallet=`Wallet`,e.DepositOnChainUtxos=`DepositOnChainUtxos`,e.ProofLess=`ProofLess`,e.ReceiveVaultSettle=`ReceiveVaultSettle`,e}({});exports.ExternalActionId=e;
|
|
@@ -5,7 +5,8 @@ export declare enum ExternalActionId {
|
|
|
5
5
|
Emporium = "Emporium",
|
|
6
6
|
Wallet = "Wallet",
|
|
7
7
|
DepositOnChainUtxos = "DepositOnChainUtxos",
|
|
8
|
-
ProofLess = "ProofLess"
|
|
8
|
+
ProofLess = "ProofLess",// Note: not an actual external action, added to handle proofless deposit gas calculation
|
|
9
|
+
ReceiveVaultSettle = "ReceiveVaultSettle"
|
|
9
10
|
}
|
|
10
11
|
export interface ExternalActionData<T = 0n | ExternalActionId> {
|
|
11
12
|
externalActionId: T;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region libs/shared/common/src/types/external-action.types.ts
|
|
2
2
|
var e = /* @__PURE__ */ function(e) {
|
|
3
|
-
return e.Transact = "Transact", e.Lifi = "Lifi", e.Okx = "Okx", e.Emporium = "Emporium", e.Wallet = "Wallet", e.DepositOnChainUtxos = "DepositOnChainUtxos", e.ProofLess = "ProofLess", e;
|
|
3
|
+
return e.Transact = "Transact", e.Lifi = "Lifi", e.Okx = "Okx", e.Emporium = "Emporium", e.Wallet = "Wallet", e.DepositOnChainUtxos = "DepositOnChainUtxos", e.ProofLess = "ProofLess", e.ReceiveVaultSettle = "ReceiveVaultSettle", e;
|
|
4
4
|
}({});
|
|
5
5
|
//#endregion
|
|
6
6
|
export { e as ExternalActionId };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chains.types.cjs`),require(`./hinkal.types.cjs`),require(`./circom-data.types.cjs`),require(`./ethereum-network.types.cjs`),require(`./external-action.types.cjs`),require(`./token.types.cjs`),require(`./transactions.types.cjs`),require(`./admin.types.cjs`),require(`./activities.types.cjs`),require(`./transaction.types.cjs`),require(`./balances.types.cjs`),require(`./cache.types.cjs`),require(`./eip5792.types.cjs`),require(`./offscreen.types.cjs`),require(`./solana.types.cjs`),require(`./events.types.cjs`),require(`./schedule.types.cjs`),require(`./transact.types.cjs`),require(`./solana-transact.types.cjs`);
|
|
1
|
+
require(`./chains.types.cjs`),require(`./hinkal.types.cjs`),require(`./circom-data.types.cjs`),require(`./ethereum-network.types.cjs`),require(`./external-action.types.cjs`),require(`./token.types.cjs`),require(`./transactions.types.cjs`),require(`./admin.types.cjs`),require(`./activities.types.cjs`),require(`./transaction.types.cjs`),require(`./balances.types.cjs`),require(`./cache.types.cjs`),require(`./eip5792.types.cjs`),require(`./offscreen.types.cjs`),require(`./solana.types.cjs`),require(`./events.types.cjs`),require(`./schedule.types.cjs`),require(`./transact.types.cjs`),require(`./solana-transact.types.cjs`),require(`./receive-vault.types.cjs`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=function(e){return e.Expired=`expired`,e.NotShieldable=`notShieldable`,e.RiskySender=`riskySender`,e}({});exports.ReceiveVaultBlockReason=e;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { StealthAddressStructure } from './circom-data.types';
|
|
2
|
+
import { ERC20Token } from './token.types';
|
|
3
|
+
/** Every field is part of the vault's CREATE2 salt, so the relayer cannot change one and still
|
|
4
|
+
* point at an address that holds anything. */
|
|
5
|
+
export type ReceiveVaultParams<T = bigint> = {
|
|
6
|
+
recipient: StealthAddressStructure<T>;
|
|
7
|
+
owner: string;
|
|
8
|
+
token: string;
|
|
9
|
+
maxFlatFee: T;
|
|
10
|
+
maxVariableRate: number;
|
|
11
|
+
expiry: T;
|
|
12
|
+
};
|
|
13
|
+
/** The terms sit in the salt, so a fresh quote cannot reproduce them: re-deriving a handed-out
|
|
14
|
+
* address needs the ones it was built with. */
|
|
15
|
+
export type ReceiveVaultRecord = {
|
|
16
|
+
index: number;
|
|
17
|
+
chainId: number;
|
|
18
|
+
token: string;
|
|
19
|
+
maxFlatFee: string;
|
|
20
|
+
maxVariableRate: number;
|
|
21
|
+
expiry: string;
|
|
22
|
+
vaultAddress: string;
|
|
23
|
+
};
|
|
24
|
+
/** Why a balance sitting in a deposit address is the owner's to recover rather than shieldable. */
|
|
25
|
+
export declare enum ReceiveVaultBlockReason {
|
|
26
|
+
Expired = "expired",
|
|
27
|
+
NotShieldable = "notShieldable",
|
|
28
|
+
RiskySender = "riskySender"
|
|
29
|
+
}
|
|
30
|
+
/** The relayer declining to shield a token is the one thing the owner cannot work out on their own,
|
|
31
|
+
* so it is the only thing recorded. The balance itself is read off chain. */
|
|
32
|
+
export type ReceiveVaultBlock = {
|
|
33
|
+
vaultAddress: string;
|
|
34
|
+
chainId: number;
|
|
35
|
+
token: string;
|
|
36
|
+
};
|
|
37
|
+
export type ReceiveVaultRegistration = {
|
|
38
|
+
vaultAddress: string;
|
|
39
|
+
params: ReceiveVaultParams<string>;
|
|
40
|
+
encryptionKey: string;
|
|
41
|
+
encryptedOutput: string;
|
|
42
|
+
outputSignature: string;
|
|
43
|
+
chainId: number;
|
|
44
|
+
};
|
|
45
|
+
/** Proves control of the shielded account itself, rather than of one deposit address, so the terms
|
|
46
|
+
* needed to re-derive an address can be fetched back after local storage is gone. */
|
|
47
|
+
export type ReceiveVaultAccountProof = {
|
|
48
|
+
accountKey: string;
|
|
49
|
+
deadline: string;
|
|
50
|
+
signature: string;
|
|
51
|
+
};
|
|
52
|
+
/** A deposit address the user has handed out, with its token resolved. */
|
|
53
|
+
export type ReceiveVaultEntry = {
|
|
54
|
+
record: ReceiveVaultRecord;
|
|
55
|
+
token: ERC20Token;
|
|
56
|
+
expiresAt: Date;
|
|
57
|
+
};
|
|
58
|
+
/** A balance the relayer declined to shield, sitting in a vault only its owner can derive. */
|
|
59
|
+
export type ReceiveVaultBlockedFund = {
|
|
60
|
+
record: ReceiveVaultRecord;
|
|
61
|
+
token: ERC20Token;
|
|
62
|
+
amount: bigint;
|
|
63
|
+
reason: ReceiveVaultBlockReason;
|
|
64
|
+
};
|
|
65
|
+
export type ReceiveVaultAccount = {
|
|
66
|
+
entries: ReceiveVaultEntry[];
|
|
67
|
+
blockedFunds: ReceiveVaultBlockedFund[];
|
|
68
|
+
};
|