@biconomy/abstractjs
Version:
SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.
106 lines • 3.91 kB
JavaScript
;
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