import { safeAbi } from "@mezo-org/orangekit-contracts" import { Address, getContract, PublicClient } from "viem" import { OrangeKitContracts } from "../contracts" import { toNetwork } from "./network" import SafeFactory from "./safe-factory" function createSafeContract( safeAddress: Address, client: PublicClient, ): ReturnType { const safeContract = getContract({ address: safeAddress, abi: safeAbi, client, }) return { getAddress: () => safeContract.address, getSafeOwnerAddress: async () => { const [safeOwner] = await safeContract.read.getOwners() return safeOwner }, nonce: async () => { const nonce = await safeContract.read.nonce() return Number(nonce) }, getAbi: () => safeContract.abi, } } // eslint-disable-next-line import/prefer-default-export export function getEthereumContracts( client: PublicClient, chainId: number, ): OrangeKitContracts { const network = toNetwork(chainId) if (!network) throw new Error("Unsupported network") const safeFactory = new SafeFactory(client) return { safeFactory, getSafeContract: (address: Address) => createSafeContract(address, client), } }