type ContractWithMetadata = { address: Address; chainId: number; contractType: () => Promise<ContractType>; extensions: () => Promise<string[]>; metadata: () => Promise<{ image?: string; name: string }>; };