import { ethers } from 'ethers'; import { ChainId } from '../config/constants'; import { DiamondFacetsRegistry as BaseContract } from '../config/abi/DiamondFacetsRegistry'; import { DiamondFacetsRegistry__factory } from '../config/abi/factories/DiamondFacetsRegistry__factory'; import { normalizeChainId } from '../utils/chainUtils'; import { FacetId } from './constants'; import { ContractInitializer } from './ContractInitializer'; const iface = DiamondFacetsRegistry__factory.createInterface(); export class DiamondFacetsRegistry extends ContractInitializer { className = DiamondFacetsRegistry.name; static async create(signer: ethers.providers.JsonRpcSigner) { const chainId = normalizeChainId(await signer.getChainId()); if (!chainId) { throw new Error('chainId is not defined'); } const instance = new DiamondFacetsRegistry(chainId, iface, signer); instance.address = instance.contractAddress.diamondFacetsRegistry; instance.initialize(); return instance; } static _newInstance = (chainId: string) => { const selfInstance = new DiamondFacetsRegistry(chainId, iface); selfInstance.address = selfInstance.contractAddress.diamondFacetsRegistry; selfInstance.initialize(); return selfInstance; }; /** * Return all facet cuts for a given facet id * * @param {ChainId} chainId * @param {FacetId} facetId */ static getFacetCutData = async (chainId: ChainId, facetId: FacetId) => { const selfInstance = await DiamondFacetsRegistry._newInstance(chainId); selfInstance.logCall('getFacetCutData', { chainId, facetId }); return selfInstance.contractInstance.getFacetCutData( ethers.utils.solidityKeccak256(['string'], [facetId]) ); }; }