import { Web3Client } from '../../clients/Web3Client'; import { ContractBase } from '../ContractBase'; import { IAccount } from '../../models/TAccount'; import { TEth } from '../../models/TEth'; import { ParametersFromSecond } from '../../utils/types'; import { Constructor } from '../../utils/types'; import { IBeacon, IBeaconProxy, IProxy, IProxyAdmin } from './proxy/ProxyDeployment'; import { DeploymentsStorage, IDeployment } from './storage/DeploymentsStorage'; import { TAddress } from '../../models/TAddress'; type TDeploymentOptions = { id?: string; /** Will deploy the contract */ force?: boolean; /** Will check if local bytecode has changed and will deploy */ latest?: boolean; verification?: boolean | 'silent'; proxyFor?: TAddress; deployment?: { tx?: TEth.Hex; upgradeProxy?: boolean; owner?: TEth.IAccount; }; }; export declare class Deployments { client: Web3Client; deployer: IAccount; opts: { owner?: IAccount; Proxy?: Constructor; ProxyAdmin?: Constructor; directory?: string; name?: string; fork?: string; Beacon?: { Beacon: Constructor; BeaconProxy: Constructor; }; verification?: boolean; checkBytecode?: boolean; whenBytecodeChanged?: 'redeploy' | 'ignore' | 'throw'; whenUpgradeRequired?: 'ignore'; }; store: DeploymentsStorage; private _logger; private _hh; private _proxyDeployment; private _config; constructor(client: Web3Client, deployer: IAccount, opts?: { owner?: IAccount; Proxy?: Constructor; ProxyAdmin?: Constructor; directory?: string; name?: string; fork?: string; Beacon?: { Beacon: Constructor; BeaconProxy: Constructor; }; verification?: boolean; checkBytecode?: boolean; whenBytecodeChanged?: 'redeploy' | 'ignore' | 'throw'; whenUpgradeRequired?: 'ignore'; }); has(Ctor: Constructor, opts?: { id?: string; params?: ConstructorParameters>; }): Promise; get(Ctor: Constructor, opts?: { id?: string; address?: TAddress; version?: string; }): Promise; getIfExists(Ctor: Constructor, opts?: { id?: string; address?: TAddress; }): Promise; private getOrNull; /** * Get the deployment for Ctor, but returns the CtorWrapped instance. Useful for proxies, etc. * e.g. deployments.getAs(SomeProxy, SomeImplementation); */ getAs(Ctor: Constructor, CtorWrapped: Constructor, opts?: { id?: string; }): Promise; verify(params: { id: string; address?: TAddress; Ctor: Constructor; constructorParams?: any[]; }): Promise; ensureContract(Ctor: Constructor, opts?: TConstructorArgs & { id?: string; force?: boolean; }): Promise; ensure(Ctor: Constructor, opts?: TConstructorArgs & TDeploymentOptions): Promise<{ contract: T; receipt?: TEth.TxReceipt; deployment: IDeployment; }>; ensureWithProxy(CtorImpl: Constructor, opts?: TConstructorArgs & TDeploymentOptions & { initialize?: ParametersFromSecond; }): Promise<{ contract: T; contractReceipt?: TEth.TxReceipt; contractProxy: IProxy; contractProxyAdmin: IProxyAdmin; contractImplementation: T; deployment: IDeployment; }>; /** * Deploys the Beacon contract. Implementation is the target contract (can be a proxy or normal contract) * https://docs.openzeppelin.com/contracts/5.x/api/proxy#beacon **/ ensureWithBeacon(CtorImpl: Constructor, opts: TConstructorArgs & TDeploymentOptions & { id: string; initialize?: ParametersFromSecond; }): Promise<{ contract: T; contractReceipt?: TEth.TxReceipt; contractDeployment: IDeployment; contractBeacon: IBeacon; contractBeaconDeployment: IDeployment; contractBeaconProxy: IBeaconProxy; contractBeaconProxyDeployment: IDeployment; }>; private isSameBytecode; private ensureVerification; fixBytecodeHashesByReread(): Promise; private getBytecodeHash; /** * A simple method to configure the contracts state */ configure(Ctor: Constructor | T, opts: { id?: string; value?: TValue; current?: TValue | Promise | ((x: T) => Promise); shouldUpdate?: boolean | (() => boolean | Promise); updater: (x: T, value: TValue) => Promise; title?: string; }): Promise; } type TInitializer = (...args: any[]) => any; type TContract = ContractBase & { $constructor?: (...args: any[]) => any; }; type TConstructorArgs = T['$constructor'] extends Function ? { arguments: ParametersFromSecond; } : { arguments?: any[]; }; export {};