import type {DeployOptions} from '@rocketh/deploy'; import type {EIP1193Account} from 'eip-1193'; import type { Artifact, Deployment, DeploymentConstruction, Libraries, Abi, LinkedDataProvided, } from '@rocketh/core/types'; import type {ContractFunctionArgs, ContractFunctionName, WriteContractParameters} from 'viem'; export type {Artifact, Deployment, DeploymentConstruction, Libraries, Abi, LinkedDataProvided}; export type {ContractFunctionArgs, ContractFunctionName, WriteContractParameters}; type DeployMutuallyExclusiveOptions = {alwaysOverride?: boolean} | {strictBytecodeMatch?: boolean}; export type Facet = { facetAddress: `0x${string}`; functionSelectors: readonly `0x${string}`[]; }; export enum FacetCutAction { Add, Replace, Remove, } export type FacetCut = Facet & { action: FacetCutAction; }; export type FacetOptions = { name?: string; artifact: Artifact; args?: any[]; linkedData?: LinkedDataProvided; libraries?: Libraries; deterministic?: boolean | `0x${string}`; }; export type DiamondFacets = Array; export type ExecutionArgs< TAbi extends Abi, TFunctionName extends ContractFunctionName, TArgs extends ContractFunctionArgs = ContractFunctionArgs< TAbi, 'nonpayable' | 'payable', TFunctionName >, > = Pick, 'args' | 'functionName'>; export type ExecuteOptions< TAbi extends Abi, TFunctionName extends ContractFunctionName, TArgs extends ContractFunctionArgs = ContractFunctionArgs< TAbi, 'nonpayable' | 'payable', TFunctionName >, > = ExecutionArgs & { type: 'artifact'; artifact: Artifact; }; export type DiamondDeployOptions< TAbi extends Abi = Abi, TFunctionName extends ContractFunctionName = ContractFunctionName< TAbi, 'nonpayable' | 'payable' >, TArgs extends ContractFunctionArgs = ContractFunctionArgs< TAbi, 'nonpayable' | 'payable', TFunctionName >, > = Omit & DeployMutuallyExclusiveOptions & { facets: DiamondFacets; owner?: EIP1193Account; execute?: ExecuteOptions | {type: 'facet'; functionName: string; args: any[]}; defaultCutFacet?: boolean; defaultOwnershipFacet?: boolean; diamondContractArgs?: any[]; excludeSelectors?: { [facetName: string]: `0x${string}`[]; }; facetsArgs?: any[]; deterministicSalt?: `0x${string}`; }; // TODO omit nonce ? // TODO omit chain ? same for rocketh-deploy export type DiamondDeploymentConstruction = Omit< DeploymentConstruction, 'artifact' | 'args' > & { artifact?: Artifact; }; export type DeployViaDiamondFunction = ( name: string, params: DiamondDeploymentConstruction, options: DiamondDeployOptions, ) => Promise & {newlyDeployed: boolean}>;