UNPKG

@biconomy/abstractjs

Version:

SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.

106 lines 3.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStorageNameSpaceSlot = exports.getStorageNameSpace = exports.NAMESPACE_STORAGE_ABI = exports.NAMESPACE_STORAGE_CONTRACT_ADDRESS = void 0; const viem_1 = require("viem"); exports.NAMESPACE_STORAGE_CONTRACT_ADDRESS = "0x0000000671eb337E12fe5dB0e788F32e1D71B183"; exports.NAMESPACE_STORAGE_ABI = [ { inputs: [ { internalType: "bytes32", name: "slot", type: "bytes32" }, { internalType: "bytes32", name: "value", type: "bytes32" }, { internalType: "address", name: "account", type: "address" } ], name: "writeStorage", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "bytes32", name: "namespace", type: "bytes32" }, { internalType: "bytes32", name: "slot", type: "bytes32" } ], name: "readStorage", outputs: [ { internalType: "bytes32", name: "", type: "bytes32" } ], stateMutability: "view", type: "function" } ]; class NamespaceStorageManager { constructor() { Object.defineProperty(this, "isNameSpaceStorageSlotKeyBeingCalculated", { enumerable: true, configurable: true, writable: true, value: new Map() }); } static getInstance() { if (!NamespaceStorageManager.instance) { NamespaceStorageManager.instance = new NamespaceStorageManager(); } return NamespaceStorageManager.instance; } buildNameSpaceStorageKey(accountAddress, callerAddress, chainId) { return `${accountAddress.toLowerCase()}::${callerAddress.toLowerCase()}::${chainId}`; } async getDefaultStorageSlotKey(accountAddress, callerAddress, chainId) { const storeKey = this.buildNameSpaceStorageKey(accountAddress, callerAddress, chainId); while (this.isNameSpaceStorageSlotKeyBeingCalculated.get(storeKey)) { await new Promise((resolve) => setTimeout(resolve, 1)); } this.isNameSpaceStorageSlotKeyBeingCalculated.set(storeKey, true); const key = BigInt(Date.now()); await new Promise((resolve) => setTimeout(resolve, 1)); this.isNameSpaceStorageSlotKeyBeingCalculated.set(storeKey, false); return key; } getStorageNameSpace(accountAddress, callerAddress) { return (0, viem_1.keccak256)((0, viem_1.encodePacked)(["address", "address"], [accountAddress, callerAddress])); } async getStorageNameSpaceSlot(accountAddress, callerAddress, chainId) { const defaultKey = await this.getDefaultStorageSlotKey(accountAddress, callerAddress, chainId); return (0, viem_1.keccak256)((0, viem_1.encodePacked)(["address", "address", "uint256"], [ accountAddress, accountAddress, defaultKey ])); } } const getStorageNameSpace = (accountAddress, callerAddress) => { const manager = NamespaceStorageManager.getInstance(); return manager.getStorageNameSpace(accountAddress, callerAddress); }; exports.getStorageNameSpace = getStorageNameSpace; const getStorageNameSpaceSlot = async (accountAddress, callerAddress, chainId) => { const manager = NamespaceStorageManager.getInstance(); return manager.getStorageNameSpaceSlot(accountAddress, callerAddress, chainId); }; exports.getStorageNameSpaceSlot = getStorageNameSpaceSlot; //# sourceMappingURL=getNamespaceStorage.js.map