import type { Address } from "viem"; import { Deployment, type DeploymentType } from "./releases"; export enum Version { ONE = "one", } export function isVersion(version: unknown): version is Version { return typeof version === "string" && Object.values(Version).includes(version); } export type VersionContracts< TVersion extends Version, TDeployment extends DeploymentType, > = TVersion extends Version.ONE ? VersionOneContracts : never; export interface CommonContracts { readonly AccountERC20TrackerFactory: Address; readonly AccountERC20Tracker: Address; readonly AddressListsSharesTransferValidatorFactory: Address; readonly AddressListsSharesTransferValidator: Address; readonly ContinuousFlatRateManagementFeeTrackerFactory: Address; readonly ContinuousFlatRateManagementFeeTracker: Address; readonly ContinuousFlatRatePerformanceFeeTrackerFactory: Address; readonly ContinuousFlatRatePerformanceFeeTracker: Address; readonly ERC7540LikeDepositQueueFactory: Address; readonly ERC7540LikeDepositQueue: Address; readonly ERC7540LikeRedeemQueueFactory: Address; readonly ERC7540LikeRedeemQueue: Address; readonly FeeHandlerFactory: Address; readonly FeeHandler: Address; readonly GlobalProxy: Address; readonly Global: Address; readonly LimitedAccessLimitedCallForwarderFactory: Address; readonly LimitedAccessLimitedCallForwarder: Address; readonly LinearCreditDebtTrackerFactory: Address; readonly LinearCreditDebtTracker: Address; readonly OwnableAddressListFactory: Address; readonly OwnableAddressList: Address; readonly SharesFactory: Address; readonly Shares: Address; readonly SharesDeployer: Address; readonly SharesOwnedAddressListFactory: Address; readonly SharesOwnedAddressList: Address; readonly SyncDepositHandlerFactory: Address; readonly SyncDepositHandler: Address; readonly ValuationHandlerFactory: Address; readonly ValuationHandler: Address; } type CreWorkflowConsumerContracts = { readonly CreWorkflowConsumerFactory: Address; readonly CreWorkflowConsumer: Address; }; type CCIPContracts = { readonly DepositorWallet: Address; readonly DepositorWalletFactory: Address; readonly WalletsManagerFactory: Address; readonly WalletsManager: Address; }; type DeploymentContractsMap = { [Deployment.ETHEREUM]: CreWorkflowConsumerContracts & CCIPContracts; [Deployment.BASE]: CreWorkflowConsumerContracts & CCIPContracts; [Deployment.MEGAETH]: CreWorkflowConsumerContracts & CCIPContracts; [Deployment.SEPOLIA]: CreWorkflowConsumerContracts & CCIPContracts; [Deployment.ARBITRUM]: CreWorkflowConsumerContracts & CCIPContracts; [Deployment.PLUME]: CCIPContracts; [Deployment.RAYLS]: Record; }; export type DeploymentContracts = DeploymentContractsMap[TDeployment]; export type VersionOneContracts = CommonContracts & DeploymentContracts;