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