@hinkal/common 0.2.14 → 0.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API/getRelayerURL.cjs +1 -1
- package/API/getRelayerURL.mjs +4 -4
- package/API/getServerURL.cjs +1 -1
- package/API/getServerURL.mjs +14 -12
- package/API/tenderly.api.cjs +1 -1
- package/API/tenderly.api.d.ts +9 -7
- package/API/tenderly.api.mjs +37 -29
- package/constants/axelar.constants.cjs +1 -1
- package/constants/axelar.constants.mjs +8 -8
- package/constants/chains.constants.cjs +1 -1
- package/constants/chains.constants.d.ts +2 -0
- package/constants/chains.constants.mjs +24 -15
- package/constants/deploy-data/deploy-data-arbMainnet.json.cjs +1 -1
- package/constants/deploy-data/deploy-data-arbMainnet.json.mjs +9328 -3470
- package/constants/deploy-data/deploy-data-avalanche.json.cjs +1 -1
- package/constants/deploy-data/deploy-data-avalanche.json.mjs +9323 -3461
- package/constants/deploy-data/deploy-data-base.json.cjs +1 -1
- package/constants/deploy-data/deploy-data-base.json.mjs +8668 -3820
- package/constants/deploy-data/deploy-data-bnbMainnet.json.cjs +1 -1
- package/constants/deploy-data/deploy-data-bnbMainnet.json.mjs +8966 -3102
- package/constants/deploy-data/deploy-data-ethMainnet.json.cjs +1 -1
- package/constants/deploy-data/deploy-data-ethMainnet.json.mjs +6413 -4517
- package/constants/deploy-data/deploy-data-optimism.json.cjs +1 -1
- package/constants/deploy-data/deploy-data-optimism.json.mjs +171 -61
- package/constants/deploy-data/deploy-data-polygon.json.cjs +1 -1
- package/constants/deploy-data/deploy-data-polygon.json.mjs +9311 -3477
- package/constants/protocol.constants.cjs +1 -1
- package/constants/protocol.constants.d.ts +2 -0
- package/constants/protocol.constants.mjs +14 -12
- package/constants/server.constants.cjs +1 -1
- package/constants/server.constants.d.ts +20 -0
- package/constants/server.constants.mjs +39 -19
- package/constants/token-data/arbMainnetRegistry.json.cjs +1 -1
- package/constants/token-data/arbMainnetRegistry.json.mjs +321 -84
- package/constants/token-data/arbMainnetRegistryFixed.json.cjs +1 -1
- package/constants/token-data/arbMainnetRegistryFixed.json.mjs +313 -82
- package/constants/token-data/avalancheRegistry.json.cjs +1 -1
- package/constants/token-data/avalancheRegistry.json.mjs +220 -55
- package/constants/token-data/avalancheRegistryFixed.json.cjs +1 -1
- package/constants/token-data/avalancheRegistryFixed.json.mjs +220 -55
- package/constants/token-data/baseRegistry.json.cjs +1 -1
- package/constants/token-data/baseRegistry.json.mjs +216 -54
- package/constants/token-data/baseRegistryFixed.json.cjs +1 -1
- package/constants/token-data/baseRegistryFixed.json.mjs +204 -51
- package/constants/token-data/ethMainnetRegistry.json.cjs +1 -1
- package/constants/token-data/ethMainnetRegistry.json.mjs +895 -225
- package/constants/token-data/ethMainnetRegistryFixed.json.cjs +1 -1
- package/constants/token-data/ethMainnetRegistryFixed.json.mjs +855 -215
- package/constants/token-data/index.d.ts +433 -0
- package/constants/token-data/polygonRegistry.json.cjs +1 -1
- package/constants/token-data/polygonRegistry.json.mjs +501 -129
- package/constants/token-data/polygonRegistryFixed.json.cjs +1 -1
- package/constants/token-data/polygonRegistryFixed.json.mjs +477 -123
- package/constants/vite.constants.cjs +1 -1
- package/constants/vite.constants.d.ts +2 -1
- package/constants/vite.constants.mjs +22 -21
- package/data-structures/Hinkal/Hinkal.cjs +1 -1
- package/data-structures/Hinkal/Hinkal.mjs +4 -3
- package/data-structures/Hinkal/hinkalProoflessDeposit.cjs +1 -1
- package/data-structures/Hinkal/hinkalProoflessDeposit.mjs +7 -7
- package/data-structures/TokenDBs/PublicTokensDB.cjs +1 -1
- package/data-structures/TokenDBs/PublicTokensDB.mjs +43 -38
- package/data-structures/event-service/AbstractAccessTokenSnapshotService.cjs +1 -1
- package/data-structures/event-service/AbstractAccessTokenSnapshotService.mjs +1 -1
- package/data-structures/event-service/AbstractCommitmentsSnapshotService.cjs +1 -1
- package/data-structures/event-service/AbstractCommitmentsSnapshotService.mjs +2 -2
- package/data-structures/merkle-tree/MerkleTree.cjs +1 -1
- package/data-structures/merkle-tree/MerkleTree.d.ts +1 -1
- package/data-structures/merkle-tree/MerkleTree.mjs +15 -14
- package/data-structures/merkle-tree/getPatchedAccessTokenMerkleTree.cjs +1 -1
- package/data-structures/merkle-tree/getPatchedAccessTokenMerkleTree.mjs +1 -1
- package/functions/utils/merkleTree.utils.cjs +1 -1
- package/functions/utils/merkleTree.utils.mjs +7 -6
- package/functions/web3/getTokenHolder.cjs +1 -0
- package/functions/web3/getTokenHolder.d.ts +1 -0
- package/functions/web3/getTokenHolder.mjs +12 -0
- package/functions/web3/index.d.ts +1 -0
- package/index.cjs +1 -1
- package/index.mjs +722 -714
- package/package.json +1 -1
- package/webworker/snarkjsWorker/snarkjsWorkerLauncher.cjs +1 -1
- package/webworker/snarkjsWorker/snarkjsWorkerLauncher.mjs +1 -1
- package/webworker/zkProofWorker/zkProofWorkerLauncher.cjs +1 -1
- package/webworker/zkProofWorker/zkProofWorkerLauncher.mjs +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("../functions/utils/enum.utils.cjs"),i=typeof process<"u"&&process?.release?.name==="node",r=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,y=!r&&typeof window<"u"&&window.origin==="null",f=typeof __webpack_require__<"u",
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("../functions/utils/enum.utils.cjs"),i=typeof process<"u"&&process?.release?.name==="node",r=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,y=!r&&typeof window<"u"&&window.origin==="null",f=typeof __webpack_require__<"u",w={value:!1},m=typeof window<"u"&&window?.location?.protocol==="chrome-extension:";var s=(e=>(e.DEVELOPMENT="development",e.STAGING="staging",e.PLAYGROUND="playground",e.PRODUCTION="production",e.WALLET="wallet",e))(s||{});const o={development:["localhost","192.","127."],wallet:["wallet","onboarding"],playground:["playground"],staging:["working-branch"]};function t(e,a){return a.some(p=>e.includes(p))}const v=()=>(require("dotenv").config({path:"DOTENV_OVERRIDE"in process.env?process.env.DOTENV_OVERRIDE:void 0}),g.toEnumValue(s,process.env.DEPLOYMENT_MODE)||"wallet"),S=()=>{if(!i&&typeof window>"u")return;if(i)return v();const e=window?.location?.host;return window?.location?.protocol==="chrome-extension:"||t(e,o.wallet)?"wallet":t(e,o.development)?"development":t(e,o.playground)?"playground":t(e,o.staging)?"staging":"production"},n=S(),d=n==="staging",l=n==="playground",c=n==="development",u=d||c||l,b=u||n==="production"&&i;exports.DEPLOYMENT_MODE=s;exports.deploymentMode=n;exports.isDevelopment=c;exports.isExtension=m;exports.isExtensionSandbox=w;exports.isNode=r;exports.isNotClientProduction=b;exports.isNotProduction=u;exports.isPlayground=l;exports.isSandbox=y;exports.isStaging=d;exports.isWebpack=f;
|
|
@@ -9,7 +9,8 @@ export declare enum DEPLOYMENT_MODE {
|
|
|
9
9
|
DEVELOPMENT = "development",
|
|
10
10
|
STAGING = "staging",
|
|
11
11
|
PLAYGROUND = "playground",
|
|
12
|
-
PRODUCTION = "production"
|
|
12
|
+
PRODUCTION = "production",
|
|
13
|
+
WALLET = "wallet"
|
|
13
14
|
}
|
|
14
15
|
export declare const deploymentMode: DEPLOYMENT_MODE | undefined;
|
|
15
16
|
export declare const isStaging: boolean;
|
|
@@ -1,39 +1,40 @@
|
|
|
1
|
-
import { toEnumValue as
|
|
2
|
-
const i = typeof process < "u" && process?.release?.name === "node",
|
|
3
|
-
var
|
|
4
|
-
const
|
|
1
|
+
import { toEnumValue as l } from "../functions/utils/enum.utils.mjs";
|
|
2
|
+
const i = typeof process < "u" && process?.release?.name === "node", c = typeof process < "u" && process.versions != null && process.versions.node != null, m = !c && typeof window < "u" && window.origin === "null", v = typeof __webpack_require__ < "u", x = { value: !1 }, R = typeof window < "u" && window?.location?.protocol === "chrome-extension:";
|
|
3
|
+
var r = /* @__PURE__ */ ((e) => (e.DEVELOPMENT = "development", e.STAGING = "staging", e.PLAYGROUND = "playground", e.PRODUCTION = "production", e.WALLET = "wallet", e))(r || {});
|
|
4
|
+
const n = {
|
|
5
5
|
development: ["localhost", "192.", "127."],
|
|
6
6
|
// TODO: Temporary for onboarding, needs to be changed
|
|
7
|
-
|
|
7
|
+
wallet: ["wallet", "onboarding"],
|
|
8
|
+
playground: ["playground"],
|
|
8
9
|
// The code deployed to the 'playground' branch is hosted by Netlify at 'hinkal-playground.netlify.app'
|
|
9
10
|
staging: ["working-branch"]
|
|
10
11
|
// The code deployed to the 'new' branch is hosted by Netlify at 'working-branch.netlify.app'
|
|
11
12
|
};
|
|
12
|
-
function
|
|
13
|
-
return
|
|
13
|
+
function o(e, s) {
|
|
14
|
+
return s.some((d) => e.includes(d));
|
|
14
15
|
}
|
|
15
|
-
const
|
|
16
|
+
const p = () => (require("dotenv").config({
|
|
16
17
|
// allow overriding .env file path, see startServer.sh script for explenation on why it is needed
|
|
17
18
|
path: "DOTENV_OVERRIDE" in process.env ? process.env.DOTENV_OVERRIDE : void 0
|
|
18
|
-
}),
|
|
19
|
+
}), l(r, process.env.DEPLOYMENT_MODE) || "wallet"), u = () => {
|
|
19
20
|
if (!i && typeof window > "u")
|
|
20
21
|
return;
|
|
21
22
|
if (i)
|
|
22
|
-
return
|
|
23
|
-
const
|
|
24
|
-
return window?.location?.protocol === "chrome-extension:" ||
|
|
25
|
-
},
|
|
23
|
+
return p();
|
|
24
|
+
const e = window?.location?.host;
|
|
25
|
+
return window?.location?.protocol === "chrome-extension:" || o(e, n.wallet) ? "wallet" : o(e, n.development) ? "development" : o(e, n.playground) ? "playground" : o(e, n.staging) ? "staging" : "production";
|
|
26
|
+
}, t = u(), a = t === "staging", g = t === "playground", f = t === "development", w = a || f || g, S = w || t === "production" && i;
|
|
26
27
|
export {
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
r as DEPLOYMENT_MODE,
|
|
29
|
+
t as deploymentMode,
|
|
29
30
|
f as isDevelopment,
|
|
30
|
-
|
|
31
|
+
R as isExtension,
|
|
31
32
|
x as isExtensionSandbox,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
c as isNode,
|
|
34
|
+
S as isNotClientProduction,
|
|
35
|
+
w as isNotProduction,
|
|
35
36
|
g as isPlayground,
|
|
36
|
-
|
|
37
|
+
m as isSandbox,
|
|
37
38
|
a as isStaging,
|
|
38
|
-
|
|
39
|
+
v as isWebpack
|
|
39
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("../../types/hinkal.types.cjs"),u=require("../../types/ethereum-network.types.cjs"),p=require("../../functions/web3/functionCalls/accessTokenCalls.cjs"),I=require("../../functions/web3/events/getShieldedBalance.cjs"),g=require("../crypto-keys/keys.cjs"),M=require("./hinkalActionBeefy.cjs"),R=require("./hinkalActionConvex.cjs"),H=require("./hinkalActionCurve.cjs"),B=require("./hinkalActionPendle.cjs"),m=require("./hinkalDeposit.cjs"),b=require("./hinkalSwap.cjs"),x=require("./hinkalWithdraw.cjs"),U=require("./resetMerkleTrees.cjs"),T=require("../merkle-tree/MerkleTree.cjs");require("ethers");const w=require("../../error-handling/error-codes.constants.cjs"),q=require("../../crypto/poseidon.cjs");require("circomlibjs-hinkal-fork");require("libsodium-wrappers");require("process");require("buffer");const W=require("../../constants/chains.constants.cjs"),D=require("../../API/callMonitor.cjs"),K=require("./hinkalActionLidoEth.cjs"),L=require("../../constants/vite.constants.cjs");require("axios");require("../../constants/coingecko.constants.cjs");const N=require("../../API/getAxelarGasEstimate.cjs"),S=require("../../API/API.cjs");require("../../types/curve.types.cjs");require("../../constants/token-data/index.cjs");require("../../constants/contracts.constants.cjs");const O=require("../../constants/kyc.constants.cjs");require("../../constants/axelar.constants.cjs");require("../../constants/rewards.constants.cjs");require("../../constants/reorg-depths.constants.cjs");require("../../constants/addresses.constants.cjs");require("../../constants/token.limits.constants.cjs");const _=require("../transactions-manager/TransactionsManager.cjs");require("../../functions/utils/external-action.utils.cjs");require("../../types/circom-data.types.cjs");require("../../types/transactions.types.cjs");require("../../types/activities.types.cjs");const G=require("../../functions/utils/reloadPage.cjs"),j=require("./hinkalActionVolatile.cjs"),f=require("./hinkalActionPendleLP.cjs"),V=require("../../API/getConnextReceiveFee.cjs"),z=require("./hinkalActionStake.cjs"),J=require("../MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs"),Q=require("./hinkalPrivateWallet.cjs"),X=require("../../functions/utils/cacheFunctions.cjs"),Y=require("../../functions/utils/cacheDevice.utils.cjs"),Z=require("../../functions/web3/getContractMetadata.cjs"),$=require("./hinkalGetRecipientInfo.cjs"),ee=require("./hinkalApprove.cjs"),te=require("./hinkalInsideTransact.cjs"),c=require("../../functions/web3/events/getApprovedBalance.cjs"),k=require("../../functions/web3/functionCalls/inHinkalApprovalCalls.cjs"),re=require("./hinkalSignSubAccount.cjs"),ne=require("./hinkalDeploySubAccount.cjs"),ie=require("./hinkalCheckTokenRegistry.cjs"),se=require("./hinkalActionReceive.cjs"),ae=require("./hinkalActionFundApproveAndTransact.cjs"),oe=require("../TokenDBs/PrivateTokensDB.cjs");require("idb-keyval");const ce=require("./hinkalProoflessDeposit.cjs"),he=require("./hinkalProxySwap.cjs"),le=require("./hinkalMultiSend.cjs"),de=require("../../functions/utils/erc20tokenFunctions.cjs");class ue{providerAdapter;userKeys;signingMessage="Login to Hinkal Protocol";merkleTreeHinkal;merkleTreeAccessToken;nullifiers;encryptedOutputs;approvals;commitmentsSnapshotService;nullifierSnapshotService;accessTokenSnapshotService;approvalsSnapshotService;transactionsManager;utxoUtils;cacheDevice;generateProofRemotely;disableMerkleTreeUpdates;constructor(e){this.userKeys=new g.UserKeys(void 0),this.merkleTreeHinkal=T.MerkleTree.create(q.poseidonFunction,25n,0n),this.merkleTreeAccessToken=T.MerkleTree.create(q.poseidonFunction,25n,0n),this.nullifiers=new Set,this.encryptedOutputs=[],this.approvals=new Map,this.transactionsManager=new _.TransactionsManager,this.generateProofRemotely=e?.generateProofRemotely??!1,this.utxoUtils=new J.MultiThreadedUtxoUtils,this.cacheDevice=Y.createCacheDevice(e),this.disableMerkleTreeUpdates=e?.disableMerkleTreeUpdates??!1}async initProviderAdapter(e,t){await this.updateProviderAdapter(t),this.providerAdapter?.initConnector(e);const r=await this.connectAndPatchProvider(e);await t.init(r),await this.setListeners()}async initUserKeys(){this.userKeys=new g.UserKeys(await this.getProviderAdapter().signMessage(this.signingMessage))}async initUserKeysWithPassword(e){this.userKeys=new g.UserKeys(e)}async resetMerkle(){this.disableMerkleTreeUpdates||this.isSelectedNetworkSupported()&&await U.resetMerkleTrees(this)}getProviderAdapter(){if(!this.providerAdapter)throw new Error("ProviderAdapter is not initialized");return this.providerAdapter}async waitForTransaction(e,t=1){return!!await this.providerAdapter?.waitForTransaction(e,t)}getContractMetadata(e,t){return this.getProviderAdapter().getContractMetadata(e,t)}getContract(e,t=void 0,r){return this.getProviderAdapter().getContract(e,t,r)}getContractWithFetcherByChainId(e,t,r=void 0){return Z.getContractWithFetcherByChainId(e,t,r)}async signMessage(e){return await this.getProviderAdapter().signMessage(e)}async signTypedData(e,t,r){return await this.getProviderAdapter().signTypedData(e,t,r)}async deploySubAccount(e,t){return ne.hinkalDeploySubAccount(this,e,t)}async signWithSubAccount(e,t,r,n){return re.hinkalSignSubAccount(this,e,t,r,n)}getContractWithSigner(e,t=""){return this.getProviderAdapter().getContractWithSigner(e,t)}getContractWithFetcher(e,t=""){return this.getProviderAdapter().getContractWithFetcher(e,t)}getContractWithFetcherForEthereum(e,t){return this.getProviderAdapter().getContractWithFetcherForEthereum(e,t)}isSelectedNetworkSupported(){return!!W.networkRegistry[this.getCurrentChainId()]}async switchNetwork(e){try{await this.getProviderAdapter().switchNetwork(e)}catch{throw new Error(w.transactionErrorCodes.FAILED_TO_SWITCH_NETWORKS)}}async switchAccount(e){await this.getProviderAdapter().switchAccount(e)}getCurrentChainId(){const{chainId:e}=this.getProviderAdapter();if(!e)throw new Error("Illegal State: no chainId");return e}getSelectedNetwork(){return this.providerAdapter?.getSelectedNetwork()}isPermitterAvailable(){return this.getProviderAdapter().isPermitterAvailable()}async connectAndPatchProvider(e){return await this.getProviderAdapter().connectAndPatchProvider(e)}async disconnectFromConnector(){await this.getProviderAdapter().disconnectFromConnector()}async updateProviderAdapter(e){try{this.providerAdapter&&this.providerAdapter.release(),this.providerAdapter=e}catch(t){throw console.error(t),Error("updateProviderAdapter failed, please try again.")}}async setListeners(){this.providerAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}})}async onAccountChanged(){await this.getProviderAdapter().onAccountChanged();const e=P.EventType.AccountChanged;typeof document<"u"?document?.dispatchEvent(new Event(e)):process?.emit("message",e,void 0)}async onChainChanged(e){if(e){await this.getProviderAdapter().onChainChanged(e);const t=P.EventType.NetworkChange;typeof document<"u"?document.dispatchEvent(new Event(t)):process?.emit("message",t,void 0)}else await this.disconnectFromConnector(),G.reloadPage()}async monitorConnectedAddress(){D.monitor(await this.getEthereumAddress(),this.getCurrentChainId())}async getBalances(e,t,r,n,i=!1,s){return I.getShieldedBalance(this,e,t,r,n,i,this.generateProofRemotely,s)}async getApprovedBalances(e=!1,t=!1){return c.getApprovedBalance(this,e,t)}async getTotalBalance(e,t,r,n=!1,i){const s=e??this.getCurrentChainId(),a=r??await this.getEthereumAddress(),o=t??this.userKeys,h=await this.getBalances(s,o.getShieldedPrivateKey(),o.getShieldedPublicKey(),a,n,i),l=await this.getApprovedBalances(n,i),F=L.isExtension?await oe.privateTokensDB.getPrivateTokens(s,a):de.getErc20TokensForChain(s),v=[];return F.forEach(A=>{const y=A.erc20TokenAddress.toLowerCase(),d=h.get(y),C=l.get(y),E={token:A,balance:(d?.balance??0n)+(C?.balance??0n),timestamp:d?.timestamp||C?.timestamp||"0",nfts:d?.nfts||[]};v.push(E)}),v}getSupportedPassportLinks(){return O.supportedPassportLinks}checkAccessToken(){return p.checkHinkalAccessToken(this)}async getAxelarEstimate(e,t,r,n){return N.getAxelarGasEstimate(e,t,r,n,this.userKeys.getAccessKey())}async getConnextReceiveFee(e,t){return V.getConnextReceiveFee(this.getCurrentChainId(),e,t)}async mintHinkalAccessToken(e,t){return p.mintAccessToken(this,e,t)}async mintHinkalAccessTokenCrossChain(e,t,r){return p.mintTokenCrossChain(this,e,t,r)}async getHinkalTreeRootHash(){return this.getContractWithFetcher(u.ContractType.HinkalContract).getRootHash()}async getAccessTokenTreeRootHash(){return this.getContractWithFetcher(u.ContractType.AccessTokenContract).getRootHash()}async resetMerkleTreesIfNecessary(){if(!this.isSelectedNetworkSupported())throw new Error(w.transactionErrorCodes.UNSUPPORTED_NETWORK);const[e,t]=await Promise.all([this.getHinkalTreeRootHash(),this.getAccessTokenTreeRootHash()]);(e.toBigInt()!==this.merkleTreeHinkal.getRootHash()||t.toBigInt()!==this.merkleTreeAccessToken.getRootHash())&&(console.log("resetting merkle tree in resetMerkleTreesIfNecessary"),await this.resetMerkle())}async getEventsFromHinkal(){await Promise.all([this.accessTokenSnapshotService?.retrieveEventsFromLatestBlock(),this.commitmentsSnapshotService?.retrieveEventsFromLatestBlock(),this.nullifierSnapshotService?.retrieveEventsFromLatestBlock(),this.approvalsSnapshotService?.retrieveEventsFromLatestBlock()])}getEthereumAddress(){return this.getProviderAdapter().getAddress()}async getRandomRelay(){return(await S.API.getIdleRelay(this.getCurrentChainId())).relay}getGasPrice(){if(!this.providerAdapter?.chainId)throw new Error("Illegal State of providerAdapter in Hinkal: no chainId");return this.providerAdapter.getGasPrice()}getAPI(){return S.API}resetCache(){X.resetCache(this,this.getCurrentChainId(),this.userKeys.getShieldedPublicKey())}snapshotsClearInterval(){this.commitmentsSnapshotService?.intervalClear(),this.accessTokenSnapshotService?.intervalClear(),this.nullifierSnapshotService?.intervalClear(),this.approvalsSnapshotService?.intervalClear()}checkTokenRegistry(e,t){const r=this.getContractWithFetcher(u.ContractType.HinkalHelperContract);return ie.hinkalCheckTokenRegistry(r,e,t)}getRecipientInfo(e=!1){return $.getRecipientInfo(this,e)}async getInteractionApprovals(e){return await k.getInteractionApprovals(this,e)}getApprovedUtxos(e=!1){return c.getApprovedUtxos(this,e)}getApprovedUtxosForToken(e,t=!1){return c.getApprovedUtxosForToken(this,e,t)}getMyApprovalAmountForInteraction(e,t){return c.getMyApprovalAmountForInteraction(this,e,t)}async checkExistingApprovalFromHinkal(e,t){return await k.checkExistingApprovalFromHinkal(this,e,t)}async getBufferEntry(e,t,r){return k.getBufferEntry(this,e,t,r)}async deposit(e,t){return m.hinkalDeposit(this,e,t)}async depositForOther(e,t,r){return m.hinkalDepositForOther(this,e,t,r)}async prooflessDeposit(e,t,r){return ce.hinkalProoflessDeposit(this,e,t,r)}async withdraw(e,t,r,n,i,s,a=!1){return x.hinkalWithdraw(this,e,t,r,n,i,s,a)}async swap(e,t,r,n,i,s,a=!1,o=!1){return b.hinkalSwap(this,e,t,r,n,i,s,a,o)}async actionCurve(e,t,r,n,i,s=!1){return H.hinkalActionCurve(this,e,t,r,n,i,s)}async actionConvex(e,t,r,n,i=!1){return R.hinkalActionConvex(this,e,t,r,n,i)}async actionBeefy(e,t,r,n,i,s,a=!1){return M.hinkalActionBeefy(this,e,t,r,n,i,s,a)}async actionLido(e,t,r,n,i,s=!1){return K.hinkalActionLido(this,e,t,r,n,i,s)}async actionPendle(e,t,r,n,i=!1){return B.hinkalActionPendle(this,e,t,r,n,i)}async actionPendleLP(e,t,r,n,i=!1){return f.hinkalActionPendleLP(this,e,t,r,n,i)}async actionVolatile(e,t,r,n=!1){return j.hinkalActionVolatile(this,e,t,r,n)}async actionStake(e,t,r,n){return z.hinkalActionStake(this,e,t,r,n)}async actionReceive(e,t,r,n,i,s=!1){return se.hinkalActionReceive(this,e,t,r,n,i,s)}async actionFundApproveAndTransact(e,t,r,n,i,s,a,o,h,l){return ae.hinkalActionFundApproveAndTransact(this,e,t,r,n,i,s,a,o,h,l)}async actionPrivateWallet(e,t,r,n=[],i,s,a,o=!1){return Q.hinkalPrivateWallet(this,e,t,r,n,i,s,a,o)}async getPendleLPClaimableParams(e,t){return f.hinkalGetPendleLPClaimableParams(this,e,t)}async approve(e,t,r,n,i=!1){return ee.hinkalApprove(this,e,t,r,n,i)}async hinkalInsideTransact(e,t,r,n,i,s,a=!1){return te.hinkalInsideTransact(this,e,t,r,n,i,s,a)}async proxySwap(e,t,r,n,i,s,a,o=!1){return he.hinkalProxySwap(this,e,t,r,n,i,s,a,o)}async multiSendPrivateRecipients(e,t,r){return le.hinkalMultiSendPrivateRecipients(this,e,t,r)}areMerkleTreeUpdatesDisabled(){return this.disableMerkleTreeUpdates}}exports.Hinkal=ue;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("../../types/hinkal.types.cjs"),u=require("../../types/ethereum-network.types.cjs"),p=require("../../functions/web3/functionCalls/accessTokenCalls.cjs"),I=require("../../functions/web3/events/getShieldedBalance.cjs"),g=require("../crypto-keys/keys.cjs"),M=require("./hinkalActionBeefy.cjs"),R=require("./hinkalActionConvex.cjs"),H=require("./hinkalActionCurve.cjs"),B=require("./hinkalActionPendle.cjs"),m=require("./hinkalDeposit.cjs"),b=require("./hinkalSwap.cjs"),x=require("./hinkalWithdraw.cjs"),U=require("./resetMerkleTrees.cjs"),T=require("../merkle-tree/MerkleTree.cjs");require("ethers");const w=require("../../error-handling/error-codes.constants.cjs"),q=require("../../crypto/poseidon.cjs");require("circomlibjs-hinkal-fork");require("libsodium-wrappers");require("process");require("buffer");const W=require("../../constants/chains.constants.cjs"),D=require("../../API/callMonitor.cjs"),K=require("./hinkalActionLidoEth.cjs"),L=require("../../constants/vite.constants.cjs");require("axios");require("../../constants/coingecko.constants.cjs");const N=require("../../API/getAxelarGasEstimate.cjs"),S=require("../../API/API.cjs");require("../../types/curve.types.cjs");require("../../constants/token-data/index.cjs");require("../../constants/contracts.constants.cjs");const O=require("../../constants/kyc.constants.cjs");require("../../constants/axelar.constants.cjs");require("../../constants/rewards.constants.cjs");require("../../constants/reorg-depths.constants.cjs");require("../../constants/addresses.constants.cjs");require("../../constants/token.limits.constants.cjs");require("../../API/tenderly.api.cjs");const _=require("../transactions-manager/TransactionsManager.cjs");require("../../functions/utils/external-action.utils.cjs");require("../../types/circom-data.types.cjs");require("../../types/transactions.types.cjs");require("../../types/activities.types.cjs");const G=require("../../functions/utils/reloadPage.cjs"),j=require("./hinkalActionVolatile.cjs"),f=require("./hinkalActionPendleLP.cjs"),V=require("../../API/getConnextReceiveFee.cjs"),z=require("./hinkalActionStake.cjs"),J=require("../MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs"),Q=require("./hinkalPrivateWallet.cjs"),X=require("../../functions/utils/cacheFunctions.cjs"),Y=require("../../functions/utils/cacheDevice.utils.cjs"),Z=require("../../functions/web3/getContractMetadata.cjs"),$=require("./hinkalGetRecipientInfo.cjs"),ee=require("./hinkalApprove.cjs"),te=require("./hinkalInsideTransact.cjs"),c=require("../../functions/web3/events/getApprovedBalance.cjs"),k=require("../../functions/web3/functionCalls/inHinkalApprovalCalls.cjs"),re=require("./hinkalSignSubAccount.cjs"),ne=require("./hinkalDeploySubAccount.cjs"),ie=require("./hinkalCheckTokenRegistry.cjs"),se=require("./hinkalActionReceive.cjs"),ae=require("./hinkalActionFundApproveAndTransact.cjs"),oe=require("../TokenDBs/PrivateTokensDB.cjs");require("idb-keyval");const ce=require("./hinkalProoflessDeposit.cjs"),he=require("./hinkalProxySwap.cjs"),le=require("./hinkalMultiSend.cjs"),de=require("../../functions/utils/erc20tokenFunctions.cjs");class ue{providerAdapter;userKeys;signingMessage="Login to Hinkal Protocol";merkleTreeHinkal;merkleTreeAccessToken;nullifiers;encryptedOutputs;approvals;commitmentsSnapshotService;nullifierSnapshotService;accessTokenSnapshotService;approvalsSnapshotService;transactionsManager;utxoUtils;cacheDevice;generateProofRemotely;disableMerkleTreeUpdates;constructor(e){this.userKeys=new g.UserKeys(void 0),this.merkleTreeHinkal=T.MerkleTree.create(q.poseidonFunction,0n),this.merkleTreeAccessToken=T.MerkleTree.create(q.poseidonFunction,0n),this.nullifiers=new Set,this.encryptedOutputs=[],this.approvals=new Map,this.transactionsManager=new _.TransactionsManager,this.generateProofRemotely=e?.generateProofRemotely??!1,this.utxoUtils=new J.MultiThreadedUtxoUtils,this.cacheDevice=Y.createCacheDevice(e),this.disableMerkleTreeUpdates=e?.disableMerkleTreeUpdates??!1}async initProviderAdapter(e,t){await this.updateProviderAdapter(t),this.providerAdapter?.initConnector(e);const r=await this.connectAndPatchProvider(e);await t.init(r),await this.setListeners()}async initUserKeys(){this.userKeys=new g.UserKeys(await this.getProviderAdapter().signMessage(this.signingMessage))}async initUserKeysWithPassword(e){this.userKeys=new g.UserKeys(e)}async resetMerkle(){this.disableMerkleTreeUpdates||this.isSelectedNetworkSupported()&&await U.resetMerkleTrees(this)}getProviderAdapter(){if(!this.providerAdapter)throw new Error("ProviderAdapter is not initialized");return this.providerAdapter}async waitForTransaction(e,t=1){return!!await this.providerAdapter?.waitForTransaction(e,t)}getContractMetadata(e,t){return this.getProviderAdapter().getContractMetadata(e,t)}getContract(e,t=void 0,r){return this.getProviderAdapter().getContract(e,t,r)}getContractWithFetcherByChainId(e,t,r=void 0){return Z.getContractWithFetcherByChainId(e,t,r)}async signMessage(e){return await this.getProviderAdapter().signMessage(e)}async signTypedData(e,t,r){return await this.getProviderAdapter().signTypedData(e,t,r)}async deploySubAccount(e,t){return ne.hinkalDeploySubAccount(this,e,t)}async signWithSubAccount(e,t,r,n){return re.hinkalSignSubAccount(this,e,t,r,n)}getContractWithSigner(e,t=""){return this.getProviderAdapter().getContractWithSigner(e,t)}getContractWithFetcher(e,t=""){return this.getProviderAdapter().getContractWithFetcher(e,t)}getContractWithFetcherForEthereum(e,t){return this.getProviderAdapter().getContractWithFetcherForEthereum(e,t)}isSelectedNetworkSupported(){return!!W.networkRegistry[this.getCurrentChainId()]}async switchNetwork(e){try{await this.getProviderAdapter().switchNetwork(e)}catch{throw new Error(w.transactionErrorCodes.FAILED_TO_SWITCH_NETWORKS)}}async switchAccount(e){await this.getProviderAdapter().switchAccount(e)}getCurrentChainId(){const{chainId:e}=this.getProviderAdapter();if(!e)throw new Error("Illegal State: no chainId");return e}getSelectedNetwork(){return this.providerAdapter?.getSelectedNetwork()}isPermitterAvailable(){return this.getProviderAdapter().isPermitterAvailable()}async connectAndPatchProvider(e){return await this.getProviderAdapter().connectAndPatchProvider(e)}async disconnectFromConnector(){await this.getProviderAdapter().disconnectFromConnector()}async updateProviderAdapter(e){try{this.providerAdapter&&this.providerAdapter.release(),this.providerAdapter=e}catch(t){throw console.error(t),Error("updateProviderAdapter failed, please try again.")}}async setListeners(){this.providerAdapter?.setChainEventListener({onAccountChanged:()=>{this.onAccountChanged()},onChainChanged:e=>{this.onChainChanged(e)}})}async onAccountChanged(){await this.getProviderAdapter().onAccountChanged();const e=P.EventType.AccountChanged;typeof document<"u"?document?.dispatchEvent(new Event(e)):process?.emit("message",e,void 0)}async onChainChanged(e){if(e){await this.getProviderAdapter().onChainChanged(e);const t=P.EventType.NetworkChange;typeof document<"u"?document.dispatchEvent(new Event(t)):process?.emit("message",t,void 0)}else await this.disconnectFromConnector(),G.reloadPage()}async monitorConnectedAddress(){D.monitor(await this.getEthereumAddress(),this.getCurrentChainId())}async getBalances(e,t,r,n,i=!1,s){return I.getShieldedBalance(this,e,t,r,n,i,this.generateProofRemotely,s)}async getApprovedBalances(e=!1,t=!1){return c.getApprovedBalance(this,e,t)}async getTotalBalance(e,t,r,n=!1,i){const s=e??this.getCurrentChainId(),a=r??await this.getEthereumAddress(),o=t??this.userKeys,h=await this.getBalances(s,o.getShieldedPrivateKey(),o.getShieldedPublicKey(),a,n,i),l=await this.getApprovedBalances(n,i),F=L.isExtension?await oe.privateTokensDB.getPrivateTokens(s,a):de.getErc20TokensForChain(s),v=[];return F.forEach(A=>{const y=A.erc20TokenAddress.toLowerCase(),d=h.get(y),C=l.get(y),E={token:A,balance:(d?.balance??0n)+(C?.balance??0n),timestamp:d?.timestamp||C?.timestamp||"0",nfts:d?.nfts||[]};v.push(E)}),v}getSupportedPassportLinks(){return O.supportedPassportLinks}checkAccessToken(){return p.checkHinkalAccessToken(this)}async getAxelarEstimate(e,t,r,n){return N.getAxelarGasEstimate(e,t,r,n,this.userKeys.getAccessKey())}async getConnextReceiveFee(e,t){return V.getConnextReceiveFee(this.getCurrentChainId(),e,t)}async mintHinkalAccessToken(e,t){return p.mintAccessToken(this,e,t)}async mintHinkalAccessTokenCrossChain(e,t,r){return p.mintTokenCrossChain(this,e,t,r)}async getHinkalTreeRootHash(){return this.getContractWithFetcher(u.ContractType.HinkalContract).getRootHash()}async getAccessTokenTreeRootHash(){return this.getContractWithFetcher(u.ContractType.AccessTokenContract).getRootHash()}async resetMerkleTreesIfNecessary(){if(!this.isSelectedNetworkSupported())throw new Error(w.transactionErrorCodes.UNSUPPORTED_NETWORK);const[e,t]=await Promise.all([this.getHinkalTreeRootHash(),this.getAccessTokenTreeRootHash()]);(e.toBigInt()!==this.merkleTreeHinkal.getRootHash()||t.toBigInt()!==this.merkleTreeAccessToken.getRootHash())&&(console.log("resetting merkle tree in resetMerkleTreesIfNecessary"),await this.resetMerkle())}async getEventsFromHinkal(){await Promise.all([this.accessTokenSnapshotService?.retrieveEventsFromLatestBlock(),this.commitmentsSnapshotService?.retrieveEventsFromLatestBlock(),this.nullifierSnapshotService?.retrieveEventsFromLatestBlock(),this.approvalsSnapshotService?.retrieveEventsFromLatestBlock()])}getEthereumAddress(){return this.getProviderAdapter().getAddress()}async getRandomRelay(){return(await S.API.getIdleRelay(this.getCurrentChainId())).relay}getGasPrice(){if(!this.providerAdapter?.chainId)throw new Error("Illegal State of providerAdapter in Hinkal: no chainId");return this.providerAdapter.getGasPrice()}getAPI(){return S.API}resetCache(){X.resetCache(this,this.getCurrentChainId(),this.userKeys.getShieldedPublicKey())}snapshotsClearInterval(){this.commitmentsSnapshotService?.intervalClear(),this.accessTokenSnapshotService?.intervalClear(),this.nullifierSnapshotService?.intervalClear(),this.approvalsSnapshotService?.intervalClear()}checkTokenRegistry(e,t){const r=this.getContractWithFetcher(u.ContractType.HinkalHelperContract);return ie.hinkalCheckTokenRegistry(r,e,t)}getRecipientInfo(e=!1){return $.getRecipientInfo(this,e)}async getInteractionApprovals(e){return await k.getInteractionApprovals(this,e)}getApprovedUtxos(e=!1){return c.getApprovedUtxos(this,e)}getApprovedUtxosForToken(e,t=!1){return c.getApprovedUtxosForToken(this,e,t)}getMyApprovalAmountForInteraction(e,t){return c.getMyApprovalAmountForInteraction(this,e,t)}async checkExistingApprovalFromHinkal(e,t){return await k.checkExistingApprovalFromHinkal(this,e,t)}async getBufferEntry(e,t,r){return k.getBufferEntry(this,e,t,r)}async deposit(e,t){return m.hinkalDeposit(this,e,t)}async depositForOther(e,t,r){return m.hinkalDepositForOther(this,e,t,r)}async prooflessDeposit(e,t,r){return ce.hinkalProoflessDeposit(this,e,t,r)}async withdraw(e,t,r,n,i,s,a=!1){return x.hinkalWithdraw(this,e,t,r,n,i,s,a)}async swap(e,t,r,n,i,s,a=!1,o=!1){return b.hinkalSwap(this,e,t,r,n,i,s,a,o)}async actionCurve(e,t,r,n,i,s=!1){return H.hinkalActionCurve(this,e,t,r,n,i,s)}async actionConvex(e,t,r,n,i=!1){return R.hinkalActionConvex(this,e,t,r,n,i)}async actionBeefy(e,t,r,n,i,s,a=!1){return M.hinkalActionBeefy(this,e,t,r,n,i,s,a)}async actionLido(e,t,r,n,i,s=!1){return K.hinkalActionLido(this,e,t,r,n,i,s)}async actionPendle(e,t,r,n,i=!1){return B.hinkalActionPendle(this,e,t,r,n,i)}async actionPendleLP(e,t,r,n,i=!1){return f.hinkalActionPendleLP(this,e,t,r,n,i)}async actionVolatile(e,t,r,n=!1){return j.hinkalActionVolatile(this,e,t,r,n)}async actionStake(e,t,r,n){return z.hinkalActionStake(this,e,t,r,n)}async actionReceive(e,t,r,n,i,s=!1){return se.hinkalActionReceive(this,e,t,r,n,i,s)}async actionFundApproveAndTransact(e,t,r,n,i,s,a,o,h,l){return ae.hinkalActionFundApproveAndTransact(this,e,t,r,n,i,s,a,o,h,l)}async actionPrivateWallet(e,t,r,n=[],i,s,a,o=!1){return Q.hinkalPrivateWallet(this,e,t,r,n,i,s,a,o)}async getPendleLPClaimableParams(e,t){return f.hinkalGetPendleLPClaimableParams(this,e,t)}async approve(e,t,r,n,i=!1){return ee.hinkalApprove(this,e,t,r,n,i)}async hinkalInsideTransact(e,t,r,n,i,s,a=!1){return te.hinkalInsideTransact(this,e,t,r,n,i,s,a)}async proxySwap(e,t,r,n,i,s,a,o=!1){return he.hinkalProxySwap(this,e,t,r,n,i,s,a,o)}async multiSendPrivateRecipients(e,t,r){return le.hinkalMultiSendPrivateRecipients(this,e,t,r)}areMerkleTreeUpdatesDisabled(){return this.disableMerkleTreeUpdates}}exports.Hinkal=ue;
|
|
@@ -36,6 +36,7 @@ import "../../constants/rewards.constants.mjs";
|
|
|
36
36
|
import "../../constants/reorg-depths.constants.mjs";
|
|
37
37
|
import "../../constants/addresses.constants.mjs";
|
|
38
38
|
import "../../constants/token.limits.constants.mjs";
|
|
39
|
+
import "../../API/tenderly.api.mjs";
|
|
39
40
|
import { TransactionsManager as _ } from "../transactions-manager/TransactionsManager.mjs";
|
|
40
41
|
import "../../functions/utils/external-action.utils.mjs";
|
|
41
42
|
import "../../types/circom-data.types.mjs";
|
|
@@ -67,7 +68,7 @@ import { hinkalProoflessDeposit as ke } from "./hinkalProoflessDeposit.mjs";
|
|
|
67
68
|
import { hinkalProxySwap as fe } from "./hinkalProxySwap.mjs";
|
|
68
69
|
import { hinkalMultiSendPrivateRecipients as Ae } from "./hinkalMultiSend.mjs";
|
|
69
70
|
import { getErc20TokensForChain as ye } from "../../functions/utils/erc20tokenFunctions.mjs";
|
|
70
|
-
class
|
|
71
|
+
class Lt {
|
|
71
72
|
providerAdapter;
|
|
72
73
|
userKeys;
|
|
73
74
|
signingMessage = "Login to Hinkal Protocol";
|
|
@@ -86,7 +87,7 @@ class Kt {
|
|
|
86
87
|
generateProofRemotely;
|
|
87
88
|
disableMerkleTreeUpdates;
|
|
88
89
|
constructor(e) {
|
|
89
|
-
this.userKeys = new d(void 0), this.merkleTreeHinkal = f.create(y,
|
|
90
|
+
this.userKeys = new d(void 0), this.merkleTreeHinkal = f.create(y, 0n), this.merkleTreeAccessToken = f.create(y, 0n), this.nullifiers = /* @__PURE__ */ new Set(), this.encryptedOutputs = [], this.approvals = /* @__PURE__ */ new Map(), this.transactionsManager = new _(), this.generateProofRemotely = e?.generateProofRemotely ?? !1, this.utxoUtils = new X(), this.cacheDevice = $(e), this.disableMerkleTreeUpdates = e?.disableMerkleTreeUpdates ?? !1;
|
|
90
91
|
}
|
|
91
92
|
async initProviderAdapter(e, t) {
|
|
92
93
|
await this.updateProviderAdapter(t), this.providerAdapter?.initConnector(e);
|
|
@@ -485,5 +486,5 @@ class Kt {
|
|
|
485
486
|
}
|
|
486
487
|
}
|
|
487
488
|
export {
|
|
488
|
-
|
|
489
|
+
Lt as Hinkal
|
|
489
490
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../../functions/snarkjs/common.snarkjs.cjs"),C=require("../../functions/web3/etherFunctions.cjs"),l=require("../../types/ethereum-network.types.cjs"),k=require("../utxo/Utxo.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../../functions/snarkjs/common.snarkjs.cjs"),C=require("../../functions/web3/etherFunctions.cjs"),l=require("../../types/ethereum-network.types.cjs"),k=require("../utxo/Utxo.cjs"),h=require("../../constants/protocol.constants.cjs"),g=require("../../functions/utils/caseInsensitive.utils.cjs"),A=(n,e)=>{const r=[];let o=0;for(let s=0;s<n.length;s+=1){let a=!1;for(let t=0;t<o;t+=1)if(g.caseInsensitiveEqual(r[t].token.erc20TokenAddress,n[s].erc20TokenAddress)){r[t].balance+=e[s],a=!0;break}a||(r[o]={token:n[s],balance:e[s]},o+=1)}return r},y=async(n,e,r)=>{const o=A(e,r),a=n.getContractWithSigner(l.ContractType.HinkalContract).address;for(let t=0;t<o.length;t+=1)g.caseInsensitiveEqual(o[t].token.erc20TokenAddress,h.zeroAddress)||await(await n.getContractWithSigner(l.ContractType.ERC20Contract,o[t].token.erc20TokenAddress).approve(a,o[t].balance)).wait()},q=async(n,e,r,o)=>{const s=n.getContractWithSigner(l.ContractType.HinkalContract),a=n.userKeys.getShieldedPrivateKey(),t=k.Utxo.findCorrectRandomization(C.randomBigInt(31),a),i=o??Array(e.length).fill(f.calcStealthAddressStructure(t,a));if(i.length!==e.length)throw new Error("Stealth address structures length must be equal to erc20 tokens length");await y(n,e,r);const d=e.findIndex(c=>c.erc20TokenAddress===h.zeroAddress),p=r[d]??0n,u=await s.prooflessDeposit(e.map(({erc20TokenAddress:c})=>c),r,e.map(()=>0n),i,{value:p});return await u.wait(),u};exports.hinkalProoflessDeposit=q;
|
|
@@ -2,15 +2,15 @@ import { calcStealthAddressStructure as m } from "../../functions/snarkjs/common
|
|
|
2
2
|
import { randomBigInt as g } from "../../functions/web3/etherFunctions.mjs";
|
|
3
3
|
import { ContractType as l } from "../../types/ethereum-network.types.mjs";
|
|
4
4
|
import { Utxo as A } from "../utxo/Utxo.mjs";
|
|
5
|
-
import { zeroAddress as
|
|
6
|
-
import { caseInsensitiveEqual as
|
|
5
|
+
import { zeroAddress as h } from "../../constants/protocol.constants.mjs";
|
|
6
|
+
import { caseInsensitiveEqual as p } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
7
7
|
const C = (r, e) => {
|
|
8
8
|
const n = [];
|
|
9
9
|
let o = 0;
|
|
10
10
|
for (let a = 0; a < r.length; a += 1) {
|
|
11
11
|
let s = !1;
|
|
12
12
|
for (let t = 0; t < o; t += 1)
|
|
13
|
-
if (
|
|
13
|
+
if (p(n[t].token.erc20TokenAddress, r[a].erc20TokenAddress)) {
|
|
14
14
|
n[t].balance += e[a], s = !0;
|
|
15
15
|
break;
|
|
16
16
|
}
|
|
@@ -23,23 +23,23 @@ const C = (r, e) => {
|
|
|
23
23
|
}, k = async (r, e, n) => {
|
|
24
24
|
const o = C(e, n), s = r.getContractWithSigner(l.HinkalContract).address;
|
|
25
25
|
for (let t = 0; t < o.length; t += 1)
|
|
26
|
-
|
|
26
|
+
p(o[t].token.erc20TokenAddress, h) || await (await r.getContractWithSigner(
|
|
27
27
|
l.ERC20Contract,
|
|
28
28
|
o[t].token.erc20TokenAddress
|
|
29
|
-
).approve(s, o[t].balance);
|
|
29
|
+
).approve(s, o[t].balance)).wait();
|
|
30
30
|
}, q = async (r, e, n, o) => {
|
|
31
31
|
const a = r.getContractWithSigner(l.HinkalContract), s = r.userKeys.getShieldedPrivateKey(), t = A.findCorrectRandomization(g(31), s), i = o ?? Array(e.length).fill(m(t, s));
|
|
32
32
|
if (i.length !== e.length)
|
|
33
33
|
throw new Error("Stealth address structures length must be equal to erc20 tokens length");
|
|
34
34
|
await k(r, e, n);
|
|
35
|
-
const
|
|
35
|
+
const d = e.findIndex((c) => c.erc20TokenAddress === h), u = n[d] ?? 0n, f = await a.prooflessDeposit(
|
|
36
36
|
e.map(({ erc20TokenAddress: c }) => c),
|
|
37
37
|
n,
|
|
38
38
|
e.map(() => 0n),
|
|
39
39
|
i,
|
|
40
40
|
{ value: u }
|
|
41
41
|
);
|
|
42
|
-
return await
|
|
42
|
+
return await f.wait(), f;
|
|
43
43
|
};
|
|
44
44
|
export {
|
|
45
45
|
q as hinkalProoflessDeposit
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("ethers"),h=require("idb-keyval"),B=require("../../API/API.cjs"),n=require("../../constants/chains.constants.cjs"),L=require("../../error-handling/logger.cjs"),P=require("../../functions/utils/caseInsensitive.utils.cjs"),g=require("../../types/cache.types.cjs"),T=require("../../functions/utils/string.utils.cjs"),K=require("../../constants/protocol.constants.cjs");class b{fetchedTokens={};transferEventTopic=S.ethers.utils.id("Transfer(address,address,uint256)");INITIAL_BLOCKS={[n.chainIds.arbMainnet]:339713830,[n.chainIds.avalanche]:62576092,[n.chainIds.base]:30613576,[n.chainIds.bnbMainnet]:50188154,[n.chainIds.ethMainnet]:22548343,[n.chainIds.optimism]:136203723,[n.chainIds.polygon]:71872141};async getPublicTokens(e,t){const o=T.getStateKey(t,e);return(await h.get(g.StorageKeys.PUBLIC_TOKENS))?.[o]||[]}async getLastProcessedBlock(e,t){const o=await h.get(g.StorageKeys.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS)||{},s=T.getStateKey(t,e);return o[s]||this.INITIAL_BLOCKS[e]}async updateLastProcessedBlock(e,t,o){await h.update(g.StorageKeys.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS,(s={})=>{const r=T.getStateKey(t,e);return{...s,[r]:o}})}async fetchPublicTokens(e,t,o){try{const{fetchRpcUrl:s}=n.networkRegistry[t];if(!s)throw Error("No fetchRpcUrl in PublicTokensDB");const r=new S.ethers.providers.JsonRpcProvider(s),a=await this.getLastProcessedBlock(t,e),l=await r.getBlockNumber(),c=S.ethers.utils.hexZeroPad(e.toLowerCase(),32),u={topics:[this.transferEventTopic,null,c],fromBlock:a},p={topics:[this.transferEventTopic,c,null],fromBlock:a},[y,d]=await Promise.all([r.getLogs(u),r.getLogs(p)]),k=[...y,...d],f=[K.zeroAddress,...new Set(k.map(i=>i.address))].filter(i=>i&&!P.lowerCaseIncludes(o,i));return f.length?{erc20Tokens:(await B.API.tokensInfoCall(t,f)).filter(i=>!!i),latestBlock:l}:{erc20Tokens:[],latestBlock:l}}catch(s){return L.Logger.error("Error fetching public tokens:",s),{erc20Tokens:[],latestBlock:void 0}}}async fetchAndUpdatePublicTokens(e,t){const s=(await this.getPublicTokens(t,e)).map(c=>c.erc20TokenAddress),{erc20Tokens:r,latestBlock:a}=await this.fetchPublicTokens(e,t,s),l=T.getStateKey(e,t);await h.update(g.StorageKeys.PUBLIC_TOKENS,(c={})=>{const u=c[l]||[],p=u.map(k=>k.erc20TokenAddress),y=r.filter(k=>!P.lowerCaseIncludes(p,k.erc20TokenAddress));u.push(...y);const d={...c,[l]:u};return this.fetchedTokens=d,d}),a&&await this.updateLastProcessedBlock(t,e,a)}getFetchedTokens(e,t){const o=T.getStateKey(t,e);return this.fetchedTokens[o]||[]}}const w=new b;exports.PublicTokensDB=b;exports.publicTokensDB=w;
|
|
@@ -1,30 +1,35 @@
|
|
|
1
|
-
import { ethers as
|
|
2
|
-
import { get as B, update as
|
|
1
|
+
import { ethers as h } from "ethers";
|
|
2
|
+
import { get as B, update as L } from "idb-keyval";
|
|
3
3
|
import { API as g } from "../../API/API.mjs";
|
|
4
|
-
import { chainIds as
|
|
5
|
-
import { Logger as
|
|
6
|
-
import { lowerCaseIncludes as
|
|
7
|
-
import { StorageKeys as
|
|
8
|
-
import { getStateKey as
|
|
9
|
-
import { zeroAddress as
|
|
4
|
+
import { chainIds as c, networkRegistry as S } from "../../constants/chains.constants.mjs";
|
|
5
|
+
import { Logger as w } from "../../error-handling/logger.mjs";
|
|
6
|
+
import { lowerCaseIncludes as b } from "../../functions/utils/caseInsensitive.utils.mjs";
|
|
7
|
+
import { StorageKeys as f } from "../../types/cache.types.mjs";
|
|
8
|
+
import { getStateKey as p } from "../../functions/utils/string.utils.mjs";
|
|
9
|
+
import { zeroAddress as E } from "../../constants/protocol.constants.mjs";
|
|
10
10
|
class y {
|
|
11
11
|
fetchedTokens = {};
|
|
12
|
-
transferEventTopic =
|
|
13
|
-
// ToDo: replace this with hinkal deployment block
|
|
12
|
+
transferEventTopic = h.utils.id("Transfer(address,address,uint256)");
|
|
14
13
|
INITIAL_BLOCKS = {
|
|
15
|
-
[
|
|
14
|
+
[c.arbMainnet]: 339713830,
|
|
15
|
+
[c.avalanche]: 62576092,
|
|
16
|
+
[c.base]: 30613576,
|
|
17
|
+
[c.bnbMainnet]: 50188154,
|
|
18
|
+
[c.ethMainnet]: 22548343,
|
|
19
|
+
[c.optimism]: 136203723,
|
|
20
|
+
[c.polygon]: 71872141
|
|
16
21
|
};
|
|
17
22
|
async getPublicTokens(e, t) {
|
|
18
|
-
const o =
|
|
19
|
-
return (await B(
|
|
23
|
+
const o = p(t, e);
|
|
24
|
+
return (await B(f.PUBLIC_TOKENS))?.[o] || [];
|
|
20
25
|
}
|
|
21
26
|
async getLastProcessedBlock(e, t) {
|
|
22
|
-
const o = await B(
|
|
27
|
+
const o = await B(f.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS) || {}, s = p(t, e);
|
|
23
28
|
return o[s] || this.INITIAL_BLOCKS[e];
|
|
24
29
|
}
|
|
25
30
|
async updateLastProcessedBlock(e, t, o) {
|
|
26
|
-
await
|
|
27
|
-
const r =
|
|
31
|
+
await L(f.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS, (s = {}) => {
|
|
32
|
+
const r = p(t, e);
|
|
28
33
|
return {
|
|
29
34
|
...s,
|
|
30
35
|
[r]: o
|
|
@@ -33,49 +38,49 @@ class y {
|
|
|
33
38
|
}
|
|
34
39
|
async fetchPublicTokens(e, t, o) {
|
|
35
40
|
try {
|
|
36
|
-
const { fetchRpcUrl: s } =
|
|
41
|
+
const { fetchRpcUrl: s } = S[t];
|
|
37
42
|
if (!s)
|
|
38
43
|
throw Error("No fetchRpcUrl in PublicTokensDB");
|
|
39
|
-
const r = new
|
|
44
|
+
const r = new h.providers.JsonRpcProvider(s), a = await this.getLastProcessedBlock(t, e), l = await r.getBlockNumber(), n = h.utils.hexZeroPad(e.toLowerCase(), 32), k = {
|
|
40
45
|
topics: [this.transferEventTopic, null, n],
|
|
41
|
-
fromBlock:
|
|
42
|
-
},
|
|
46
|
+
fromBlock: a
|
|
47
|
+
}, d = {
|
|
43
48
|
topics: [this.transferEventTopic, n, null],
|
|
44
|
-
fromBlock:
|
|
45
|
-
}, [
|
|
46
|
-
(
|
|
49
|
+
fromBlock: a
|
|
50
|
+
}, [m, u] = await Promise.all([r.getLogs(k), r.getLogs(d)]), T = [...m, ...u], P = [E, ...new Set(T.map((i) => i.address))].filter(
|
|
51
|
+
(i) => i && !b(o, i)
|
|
47
52
|
);
|
|
48
53
|
return P.length ? { erc20Tokens: (await g.tokensInfoCall(t, P)).filter(
|
|
49
|
-
(
|
|
50
|
-
), latestBlock:
|
|
54
|
+
(i) => !!i
|
|
55
|
+
), latestBlock: l } : { erc20Tokens: [], latestBlock: l };
|
|
51
56
|
} catch (s) {
|
|
52
|
-
return
|
|
57
|
+
return w.error("Error fetching public tokens:", s), { erc20Tokens: [], latestBlock: void 0 };
|
|
53
58
|
}
|
|
54
59
|
}
|
|
55
60
|
// this function should be called when:
|
|
56
61
|
// 1) user first initiates wallet on a given chain
|
|
57
62
|
// 2) user manually press refresh balances button
|
|
58
63
|
async fetchAndUpdatePublicTokens(e, t) {
|
|
59
|
-
const s = (await this.getPublicTokens(t, e)).map((n) => n.erc20TokenAddress), { erc20Tokens: r, latestBlock:
|
|
60
|
-
await
|
|
61
|
-
const k = n[
|
|
62
|
-
(
|
|
64
|
+
const s = (await this.getPublicTokens(t, e)).map((n) => n.erc20TokenAddress), { erc20Tokens: r, latestBlock: a } = await this.fetchPublicTokens(e, t, s), l = p(e, t);
|
|
65
|
+
await L(f.PUBLIC_TOKENS, (n = {}) => {
|
|
66
|
+
const k = n[l] || [], d = k.map((T) => T.erc20TokenAddress), m = r.filter(
|
|
67
|
+
(T) => !b(d, T.erc20TokenAddress)
|
|
63
68
|
);
|
|
64
|
-
k.push(...
|
|
65
|
-
const
|
|
69
|
+
k.push(...m);
|
|
70
|
+
const u = {
|
|
66
71
|
...n,
|
|
67
|
-
[
|
|
72
|
+
[l]: k
|
|
68
73
|
};
|
|
69
|
-
return this.fetchedTokens =
|
|
70
|
-
}),
|
|
74
|
+
return this.fetchedTokens = u, u;
|
|
75
|
+
}), a && await this.updateLastProcessedBlock(t, e, a);
|
|
71
76
|
}
|
|
72
77
|
getFetchedTokens(e, t) {
|
|
73
|
-
const o =
|
|
78
|
+
const o = p(t, e);
|
|
74
79
|
return this.fetchedTokens[o] || [];
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
|
-
const
|
|
82
|
+
const M = new y();
|
|
78
83
|
export {
|
|
79
84
|
y as PublicTokensDB,
|
|
80
|
-
|
|
85
|
+
M as publicTokensDB
|
|
81
86
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../../constants/protocol.constants.cjs"),a=require("../../crypto/poseidon.cjs");require("circomlibjs-hinkal-fork");require("libsodium-wrappers");require("process");require("buffer");const n=require("../../functions/utils/amounts.utils.cjs"),o=require("../merkle-tree/MerkleTree.cjs");require("ethers");require("../../error-handling/error-codes.constants.cjs");const l=require("./AbstractSnapshotService.cjs"),u=require("../../functions/utils/merkleTree.utils.cjs");class i extends l.AbstractSnapshotService{constructor(e,s,r,d){super(e,{name:"NewAccessKeyAdded",args:["accessKey","index","senderAddress"]},s,r,d)}_merkleTree;_senderAddresses;_senderAddressIndexMap;get merkleTree(){return this._merkleTree}get senderAddresses(){return this._senderAddresses}get senderAddressIndexMap(){return this._senderAddressIndexMap}serializeSnapshot(e){return{merkleTree:e.payload.merkleTree.toJSON(),senderAddresses:Array.from(e.payload.senderAddresses),latestBlockNumber:e.latestBlockNumber,reserveBlockNumber:e.reserveBlockNumber,senderAddressIndexMap:Array.from(e.payload.senderAddressIndexMap).map(([s,r])=>({address:s,index:r}))}}deserializeSnapshot(e){let s,r;return e.latestBlockNumber&&e.merkleTree?s=u.contructMerkleTreeFromSerialized(e.merkleTree):s=o.MerkleTree.create(a.poseidonFunction,
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../../constants/protocol.constants.cjs"),a=require("../../crypto/poseidon.cjs");require("circomlibjs-hinkal-fork");require("libsodium-wrappers");require("process");require("buffer");const n=require("../../functions/utils/amounts.utils.cjs"),o=require("../merkle-tree/MerkleTree.cjs");require("ethers");require("../../error-handling/error-codes.constants.cjs");const l=require("./AbstractSnapshotService.cjs"),u=require("../../functions/utils/merkleTree.utils.cjs");class i extends l.AbstractSnapshotService{constructor(e,s,r,d){super(e,{name:"NewAccessKeyAdded",args:["accessKey","index","senderAddress"]},s,r,d)}_merkleTree;_senderAddresses;_senderAddressIndexMap;get merkleTree(){return this._merkleTree}get senderAddresses(){return this._senderAddresses}get senderAddressIndexMap(){return this._senderAddressIndexMap}serializeSnapshot(e){return{merkleTree:e.payload.merkleTree.toJSON(),senderAddresses:Array.from(e.payload.senderAddresses),latestBlockNumber:e.latestBlockNumber,reserveBlockNumber:e.reserveBlockNumber,senderAddressIndexMap:Array.from(e.payload.senderAddressIndexMap).map(([s,r])=>({address:s,index:r}))}}deserializeSnapshot(e){let s,r;return e.latestBlockNumber&&e.merkleTree?s=u.contructMerkleTreeFromSerialized(e.merkleTree):s=o.MerkleTree.create(a.poseidonFunction,0n),e.latestBlockNumber&&e.senderAddressIndexMap?r=new Map(e.senderAddressIndexMap.map(({address:d,index:t})=>[d,t])):r=new Map,{latestBlockNumber:e.latestBlockNumber??0,reserveBlockNumber:e.reserveBlockNumber??0,payload:{merkleTree:s,senderAddresses:e.senderAddresses??[],senderAddressIndexMap:r}}}acceptEvent(e,s){try{return this._merkleTree.insert(e.accessKey,e.index),this._senderAddressIndexMap.set(e.senderAddress,Math.max(Number(e.index),this._senderAddressIndexMap.get(e.senderAddress)??0)),this._senderAddresses.includes(e.senderAddress)||this._senderAddresses.push(e.senderAddress),e.accessKey===0n&&e.senderAddress===c.zeroAddress&&this._merkleTree.remove(e.index),!0}catch(r){return console.error(r),!1}}mapEvent(e){const{accessKey:s,index:r,senderAddress:d}=e;return{accessKey:n.toBigInt(s),index:n.toBigInt(r),senderAddress:d}}getSnapshotPayload(){return{merkleTree:this._merkleTree,senderAddresses:this._senderAddresses,senderAddressIndexMap:this._senderAddressIndexMap}}populateSnapshot({payload:{merkleTree:e,senderAddresses:s,senderAddressIndexMap:r}}){this._merkleTree=e,this._senderAddresses=s,this._senderAddressIndexMap=r}}exports.AbstractAccessTokenSnapshotService=i;
|
|
@@ -49,7 +49,7 @@ class f extends c {
|
|
|
49
49
|
}
|
|
50
50
|
deserializeSnapshot(e) {
|
|
51
51
|
let s, r;
|
|
52
|
-
return e.latestBlockNumber && e.merkleTree ? s = l(e.merkleTree) : s = a.create(o,
|
|
52
|
+
return e.latestBlockNumber && e.merkleTree ? s = l(e.merkleTree) : s = a.create(o, 0n), e.latestBlockNumber && e.senderAddressIndexMap ? r = new Map(
|
|
53
53
|
e.senderAddressIndexMap.map(({ address: d, index: n }) => [d, n])
|
|
54
54
|
) : r = /* @__PURE__ */ new Map(), {
|
|
55
55
|
latestBlockNumber: e.latestBlockNumber ?? 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../crypto/poseidon.cjs");require("circomlibjs-hinkal-fork");require("libsodium-wrappers");require("process");require("buffer");const n=require("../merkle-tree/MerkleTree.cjs");require("ethers");require("../../error-handling/error-codes.constants.cjs");const s=require("../../functions/utils/amounts.utils.cjs"),c=require("./AbstractSnapshotService.cjs"),l=require("../../functions/utils/merkleTree.utils.cjs");class m extends c.AbstractSnapshotService{constructor(e,t,r,u){super(e,{name:"NewCommitment",args:["commitment","index","encryptedOutput"]},t,r,u)}_merkleTree;_encryptedOutputs;get merkleTree(){return this._merkleTree}get encryptedOutputs(){return this._encryptedOutputs}serializeSnapshot(e){return{merkleTree:e.payload.merkleTree.toJSON(),latestBlockNumber:e.latestBlockNumber,reserveBlockNumber:e.reserveBlockNumber,encryptedOutputs:e.payload.encryptedOutputs.map(t=>({value:t.value,isPositive:String(t.isPositive)}))}}deserializeSnapshot(e){let t;e.latestBlockNumber&&e.merkleTree?t=l.contructMerkleTreeFromSerialized(e.merkleTree):t=n.MerkleTree.create(i.poseidonFunction,
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../crypto/poseidon.cjs");require("circomlibjs-hinkal-fork");require("libsodium-wrappers");require("process");require("buffer");const n=require("../merkle-tree/MerkleTree.cjs");require("ethers");require("../../error-handling/error-codes.constants.cjs");const s=require("../../functions/utils/amounts.utils.cjs"),c=require("./AbstractSnapshotService.cjs"),l=require("../../functions/utils/merkleTree.utils.cjs");class m extends c.AbstractSnapshotService{constructor(e,t,r,u){super(e,{name:"NewCommitment",args:["commitment","index","encryptedOutput"]},t,r,u)}_merkleTree;_encryptedOutputs;get merkleTree(){return this._merkleTree}get encryptedOutputs(){return this._encryptedOutputs}serializeSnapshot(e){return{merkleTree:e.payload.merkleTree.toJSON(),latestBlockNumber:e.latestBlockNumber,reserveBlockNumber:e.reserveBlockNumber,encryptedOutputs:e.payload.encryptedOutputs.map(t=>({value:t.value,isPositive:String(t.isPositive)}))}}deserializeSnapshot(e){let t;e.latestBlockNumber&&e.merkleTree?t=l.contructMerkleTreeFromSerialized(e.merkleTree):t=n.MerkleTree.create(i.poseidonFunction,0n);const r=e.encryptedOutputs?.map(u=>({value:u.value,isPositive:JSON.parse(u.isPositive)}));return{latestBlockNumber:e.latestBlockNumber??0,reserveBlockNumber:e.reserveBlockNumber??0,payload:{merkleTree:t,encryptedOutputs:r||[]}}}getSnapshotPayload(){return{merkleTree:this._merkleTree,encryptedOutputs:this._encryptedOutputs}}populateSnapshot({payload:{merkleTree:e,encryptedOutputs:t}}){this._merkleTree=e,this._encryptedOutputs=t}mapEvent(e){const{commitment:t,index:r,encryptedOutput:u}=e;return{commitment:s.toBigInt(t),index:s.toBigInt(r),encryptedOutput:u}}acceptEvent(e,t){if(!this.encryptedOutputs.map(r=>r.value).includes(e.encryptedOutput)){if(!this._merkleTree.insert(e.commitment,e.index>=0?e.index:-1n*e.index))return!1;const u={value:e.encryptedOutput,isPositive:e.index>=0n};return this._encryptedOutputs.push(u),!0}return!1}}exports.AbstractCommitmentsSnapshotService=m;
|
|
@@ -8,7 +8,7 @@ import "ethers";
|
|
|
8
8
|
import "../../error-handling/error-codes.constants.mjs";
|
|
9
9
|
import { toBigInt as m } from "../../functions/utils/amounts.utils.mjs";
|
|
10
10
|
import { AbstractSnapshotService as p } from "./AbstractSnapshotService.mjs";
|
|
11
|
-
import { contructMerkleTreeFromSerialized as
|
|
11
|
+
import { contructMerkleTreeFromSerialized as c } from "../../functions/utils/merkleTree.utils.mjs";
|
|
12
12
|
class _ extends p {
|
|
13
13
|
constructor(e, t, r, u) {
|
|
14
14
|
super(
|
|
@@ -43,7 +43,7 @@ class _ extends p {
|
|
|
43
43
|
}
|
|
44
44
|
deserializeSnapshot(e) {
|
|
45
45
|
let t;
|
|
46
|
-
e.latestBlockNumber && e.merkleTree ? t =
|
|
46
|
+
e.latestBlockNumber && e.merkleTree ? t = c(e.merkleTree) : t = i.create(s, 0n);
|
|
47
47
|
const r = e.encryptedOutputs?.map((u) => ({
|
|
48
48
|
value: u.value,
|
|
49
49
|
isPositive: JSON.parse(u.isPositive)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../constants/protocol.constants.cjs"),c=require("../../error-handling/logError.cjs"),u=require("./MerkleTreeIncompleteError.cjs");class l{constructor(t,e,r,n,s,i,h){this.hashFunction=t,this.levels=e,this.defaultNodeValue=r,this.tree=n??new Map,this.count=h??0n,this.index=i??2n**(e-1n),s?this.reverseTree=s:this.reverseTree=this.createReverseTree()}tree;count;index;reverseTree;static createWithData(t,e,r,n,s,i,h){return new l(s,i,h,t,e,r,n)}static create(t,e,r=o.MERKLE_LEVELS){return new l(t,r,e)}createReverseTree(){const t=new Map;for(let e=this.getStartIndex();e<this.getStartIndex()+this.count;e+=1n){const r=this.tree.get(e);r!==void 0&&t.set(r,e)}return t}getStartIndex(){return 2n**(this.levels-1n)}logarithm2(t){let e=0n;for(;2n**e<t;)e+=1n;return e}bigIntMax(t,e){return t>e?t:e}forceInsert(t,e){if(e<this.getStartIndex())throw new RangeError;this.tree.set(e,t),this.reverseTree.set(t,e);const r=this.index-this.getStartIndex(),n=this.logarithm2(r);let s=e;for(let i=1n;i<=n;i+=1n){s/=2n;const h=this.hashFunction(this.tree.get(s*2n)||this.defaultNodeValue,this.tree.get(s*2n+1n)||this.defaultNodeValue);this.tree.set(s,h)}}insert(t,e){let r=!1;return this.tree.has(e)&&(r=!0,c.logError(`Editing commitment index: ${e} `)),r||(this.count+=1n),this.index=this.bigIntMax(this.index,e+1n),this.forceInsert(t,e),!0}remove(t){this.forceInsert(this.defaultNodeValue,t)}completenessCheck(){if(this.count!==this.index-this.getStartIndex())throw new u.MerkleTreeIncompleteError}getRootHash(){this.completenessCheck();for(let t=1n;t<2n**this.levels;t*=2n)if(this.tree.get(t))return this.tree.get(t);return this.defaultNodeValue}getMerkleData(){return this.completenessCheck(),new Map(this.tree)}getSiblingIndex(t){return t===1n?1n:t%2n===1n?t-1n:t+1n}getSiblingHashesForVerification(t){this.completenessCheck();let e=this.reverseTree.get(t);if(e===void 0)return new Array(Number(o.CIRCOM_MERKLE_LENGTH)).fill(0n);const r=[];for(;e!==0n;)r.push(this.tree.get(this.getSiblingIndex(e))||this.defaultNodeValue),e/=2n;return r.slice(0,o.CIRCOM_MERKLE_LENGTH)}getSiblingSides(t){this.completenessCheck();let e=this.reverseTree.get(t);if(e===void 0)return new Array(Number(o.CIRCOM_MERKLE_LENGTH)).fill(0n);const r=[];for(;e!==0n;){const n=e%2n===0n?0n:1n;r.push(n),e/=2n}return r.slice(0,o.CIRCOM_MERKLE_LENGTH)}toJSON(){const{tree:t,reverseTree:e,count:r,index:n}=this;return{tree:Object.fromEntries(t),reverseTree:Object.fromEntries(e),count:r.toString(),index:n.toString()}}clone(){return l.createWithData(new Map(this.tree),new Map(this.reverseTree),this.index,this.count,this.hashFunction,this.levels,this.defaultNodeValue)}getIndex(){return this.index}}exports.MerkleTree=l;
|
|
@@ -33,7 +33,7 @@ export declare class MerkleTree<T> {
|
|
|
33
33
|
* @param levels the amount of layers in the merkle tree
|
|
34
34
|
* @param defaultNodeValue the default value of an empty node in the merkle tree
|
|
35
35
|
*/
|
|
36
|
-
static create<T>(hashFunction: (a: T, b: T) => T,
|
|
36
|
+
static create<T>(hashFunction: (a: T, b: T) => T, defaultNodeValue: T, levels?: bigint): MerkleTree<T>;
|
|
37
37
|
private createReverseTree;
|
|
38
38
|
private constructor();
|
|
39
39
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { MERKLE_LEVELS as a, CIRCOM_MERKLE_LENGTH as o } from "../../constants/protocol.constants.mjs";
|
|
2
|
+
import { logError as u } from "../../error-handling/logError.mjs";
|
|
3
|
+
import { MerkleTreeIncompleteError as c } from "./MerkleTreeIncompleteError.mjs";
|
|
4
|
+
class l {
|
|
4
5
|
constructor(t, e, r, i, s, n, h) {
|
|
5
6
|
this.hashFunction = t, this.levels = e, this.defaultNodeValue = r, this.tree = i ?? /* @__PURE__ */ new Map(), this.count = h ?? 0n, this.index = n ?? 2n ** (e - 1n), s ? this.reverseTree = s : this.reverseTree = this.createReverseTree();
|
|
6
7
|
}
|
|
@@ -20,15 +21,15 @@ class o {
|
|
|
20
21
|
index;
|
|
21
22
|
reverseTree;
|
|
22
23
|
static createWithData(t, e, r, i, s, n, h) {
|
|
23
|
-
return new
|
|
24
|
+
return new l(s, n, h, t, e, r, i);
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* @param hashFunction the hashFunction used to fill the upper layers of the merkle tree
|
|
27
28
|
* @param levels the amount of layers in the merkle tree
|
|
28
29
|
* @param defaultNodeValue the default value of an empty node in the merkle tree
|
|
29
30
|
*/
|
|
30
|
-
static create(t, e, r) {
|
|
31
|
-
return new
|
|
31
|
+
static create(t, e, r = a) {
|
|
32
|
+
return new l(t, r, e);
|
|
32
33
|
}
|
|
33
34
|
createReverseTree() {
|
|
34
35
|
const t = /* @__PURE__ */ new Map();
|
|
@@ -80,14 +81,14 @@ class o {
|
|
|
80
81
|
*/
|
|
81
82
|
insert(t, e) {
|
|
82
83
|
let r = !1;
|
|
83
|
-
return this.tree.has(e) && (r = !0,
|
|
84
|
+
return this.tree.has(e) && (r = !0, u(`Editing commitment index: ${e} `)), r || (this.count += 1n), this.index = this.bigIntMax(this.index, e + 1n), this.forceInsert(t, e), !0;
|
|
84
85
|
}
|
|
85
86
|
remove(t) {
|
|
86
87
|
this.forceInsert(this.defaultNodeValue, t);
|
|
87
88
|
}
|
|
88
89
|
completenessCheck() {
|
|
89
90
|
if (this.count !== this.index - this.getStartIndex())
|
|
90
|
-
throw new
|
|
91
|
+
throw new c();
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
93
94
|
* get root hash of the merkle tree
|
|
@@ -115,11 +116,11 @@ class o {
|
|
|
115
116
|
this.completenessCheck();
|
|
116
117
|
let e = this.reverseTree.get(t);
|
|
117
118
|
if (e === void 0)
|
|
118
|
-
return new Array(Number(
|
|
119
|
+
return new Array(Number(o)).fill(0n);
|
|
119
120
|
const r = [];
|
|
120
121
|
for (; e !== 0n; )
|
|
121
122
|
r.push(this.tree.get(this.getSiblingIndex(e)) || this.defaultNodeValue), e /= 2n;
|
|
122
|
-
return r;
|
|
123
|
+
return r.slice(0, o);
|
|
123
124
|
}
|
|
124
125
|
/**
|
|
125
126
|
* get item's sibling hashes side
|
|
@@ -130,13 +131,13 @@ class o {
|
|
|
130
131
|
this.completenessCheck();
|
|
131
132
|
let e = this.reverseTree.get(t);
|
|
132
133
|
if (e === void 0)
|
|
133
|
-
return new Array(Number(
|
|
134
|
+
return new Array(Number(o)).fill(0n);
|
|
134
135
|
const r = [];
|
|
135
136
|
for (; e !== 0n; ) {
|
|
136
137
|
const i = e % 2n === 0n ? 0n : 1n;
|
|
137
138
|
r.push(i), e /= 2n;
|
|
138
139
|
}
|
|
139
|
-
return r;
|
|
140
|
+
return r.slice(0, o);
|
|
140
141
|
}
|
|
141
142
|
toJSON() {
|
|
142
143
|
const { tree: t, reverseTree: e, count: r, index: i } = this;
|
|
@@ -148,7 +149,7 @@ class o {
|
|
|
148
149
|
};
|
|
149
150
|
}
|
|
150
151
|
clone() {
|
|
151
|
-
return
|
|
152
|
+
return l.createWithData(
|
|
152
153
|
new Map(this.tree),
|
|
153
154
|
new Map(this.reverseTree),
|
|
154
155
|
this.index,
|
|
@@ -163,5 +164,5 @@ class o {
|
|
|
163
164
|
}
|
|
164
165
|
}
|
|
165
166
|
export {
|
|
166
|
-
|
|
167
|
+
l as MerkleTree
|
|
167
168
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../functions/web3/etherFunctions.cjs"),c=require("../../crypto/poseidon.cjs"),i=require("./MerkleTree.cjs"),g=(r,n,o,t)=>{if(!t||o){const e=i.MerkleTree.create(c.poseidonFunction,
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../functions/web3/etherFunctions.cjs"),c=require("../../crypto/poseidon.cjs"),i=require("./MerkleTree.cjs"),g=(r,n,o,t)=>{if(!t||o){const e=i.MerkleTree.create(c.poseidonFunction,0n);return e.insert(BigInt(n.getAccessKey()),e.getStartIndex()),t||e.insert(s.randomBigInt(31),e.getStartIndex()+1n),e}return r};exports.getPatchedAccessTokenMerkleTree=g;
|
|
@@ -3,7 +3,7 @@ import { poseidonFunction as s } from "../../crypto/poseidon.mjs";
|
|
|
3
3
|
import { MerkleTree as c } from "./MerkleTree.mjs";
|
|
4
4
|
const f = (r, n, o, t) => {
|
|
5
5
|
if (!t || o) {
|
|
6
|
-
const e = c.create(s,
|
|
6
|
+
const e = c.create(s, 0n);
|
|
7
7
|
return e.insert(BigInt(n.getAccessKey()), e.getStartIndex()), t || e.insert(i(31), e.getStartIndex() + 1n), e;
|
|
8
8
|
}
|
|
9
9
|
return r;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../crypto/poseidon.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../constants/protocol.constants.cjs"),c=require("../../crypto/poseidon.cjs"),s=require("../../data-structures/merkle-tree/MerkleTree.cjs"),n=e=>new Map(Object.entries(e).map(([r,t])=>[BigInt(r),BigInt(t)])),i=e=>{const r=n(e.tree),t=e.reverseTree?n(e.reverseTree):void 0;return s.MerkleTree.createWithData(r,t,BigInt(e.index),BigInt(e.count),c.poseidonFunction,o.MERKLE_LEVELS,0n)};exports.contructMerkleTreeFromSerialized=i;
|