import { ethers } from 'ethers'; import { SystemContext__factory } from '../config/abi/factories/SystemContext__factory'; import { SystemContext as BaseContract } from '../config/abi/SystemContext'; import { SystemContextContracts } from './constants'; import { ContractInitializer } from './ContractInitializer'; const iface = SystemContext__factory.createInterface(); export class SystemContext extends ContractInitializer { className = SystemContext.name; static create( signer: ethers.providers.JsonRpcSigner, address: string, chainId: string ) { const instance = new SystemContext(chainId, iface, signer); instance.address = address; instance.initialize(); return instance; } static _newInstance = (chainId: string) => { const selfInstance = new SystemContext(chainId, iface); selfInstance.address = selfInstance.chainConfig.contractAddress.systemContext; selfInstance.initialize(); return selfInstance; }; static getSystemConfig = async (chainId: string) => { const selfInstance = SystemContext._newInstance(chainId); const [ omniteLayerZeroBridgeSender, omniteLayerZeroBridgeReceiver, omniteAxelarBridgeSender, omniteAxelarBridgeReceiver, collectionRegistry, diamondFacetsRegistry, contractFactory, ] = await Promise.all([ selfInstance.contractInstance.getContractAddress( SystemContextContracts.OmniteLayerZeroBridgeSender ), selfInstance.contractInstance.getContractAddress( SystemContextContracts.OmniteLayerZeroBridgeReceiver ), selfInstance.contractInstance.getContractAddress( SystemContextContracts.OmniteAxelarBridgeSender ), selfInstance.contractInstance.getContractAddress( SystemContextContracts.OmniteAxelarBridgeReceiver ), selfInstance.contractInstance.getContractAddress( SystemContextContracts.CollectionsRegistry ), selfInstance.contractInstance.getContractAddress( SystemContextContracts.DiamondFacetsRegistry ), selfInstance.contractInstance.getContractAddress( SystemContextContracts.Create2BlueprintContractsFactory ), ]); return { contractFactory, omniteLayerZeroBridgeSender, omniteLayerZeroBridgeReceiver, omniteAxelarBridgeSender, omniteAxelarBridgeReceiver, collectionRegistry, diamondFacetsRegistry, }; }; }