import { ethers } from 'ethers'; import { Provider as ZKSyncProvider } from 'zksync-ethers'; import { z } from 'zod'; import { Address, ChainId } from '@hyperlane-xyz/utils'; import { AnnotatedEV5Transaction } from '../providers/ProviderType.js'; import { DeployedOwnableConfig } from '../types.js'; export type EthersLikeProvider = ethers.providers.Provider | ZKSyncProvider; export declare const EIP1967_IMPLEMENTATION_SLOT = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; export declare const EIP1967_ADMIN_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; export declare const EIP1967_BEACON_SLOT: string; export declare const UpgradeConfigSchema: z.ZodObject<{ timelock: z.ZodObject<{ delay: z.ZodNumber; roles: z.ZodObject<{ executor: z.ZodString; proposer: z.ZodString; }, z.core.$strip>; }, z.core.$strip>; }, z.core.$strip>; export type UpgradeConfig = z.infer; /** * Checks if a storage value represents empty/uninitialized storage. * Some RPC providers (e.g., Somnia) return empty hex strings ('0x' or '') * instead of the standard '0x0' for uninitialized storage slots. * @param rawValue - The raw storage value from provider.getStorageAt() * @returns true if the storage slot is empty/uninitialized */ export declare function isStorageEmpty(rawValue: string): boolean; export declare function contractHasCode(provider: EthersLikeProvider, contract: Address): Promise; export declare function proxyImplementation(provider: EthersLikeProvider, proxy: Address): Promise
; export declare function isInitialized(provider: EthersLikeProvider, contract: Address): Promise; export declare function proxyAdmin(provider: EthersLikeProvider, proxy: Address): Promise
; export declare function proxyConstructorArgs(implementation: C, proxyAdmin: string, initializeArgs?: Parameters, initializeFnSignature?: string): [string, string, string]; export declare function isProxy(provider: EthersLikeProvider, proxy: Address): Promise; export declare function proxyAdminUpdateTxs(chainId: ChainId, proxyAddress: Address, actualConfig: Readonly<{ owner: string; ownerOverrides?: Record; proxyAdmin?: DeployedOwnableConfig; }>, expectedConfig: Readonly<{ owner: string; ownerOverrides?: Record; proxyAdmin?: DeployedOwnableConfig; }>): AnnotatedEV5Transaction[]; /** * Check if contract bytecode matches ProxyAdmin patterns * This is more efficient than function calls but less reliable * @param provider The provider to use * @param address The contract address * @returns true if the bytecode suggests it's a ProxyAdmin */ export declare function isProxyAdminFromBytecode(provider: EthersLikeProvider, address: Address): Promise; //# sourceMappingURL=proxy.d.ts.map