public static async Task <WalletClient> ConnectAsync(string networkAddress, string rootCertificate) { if (networkAddress == null) { throw new ArgumentNullException(nameof(networkAddress)); } if (rootCertificate == null) { throw new ArgumentNullException(nameof(rootCertificate)); } var channel = new Channel(networkAddress, new SslCredentials(rootCertificate)); var deadline = DateTime.UtcNow.AddSeconds(3); try { await channel.ConnectAsync(deadline); } catch (TaskCanceledException) { await channel.ShutdownAsync(); throw new ConnectTimeoutException(); } // Ensure the server is running a compatible version. var versionClient = VersionService.NewClient(channel); var response = await versionClient.VersionAsync(new VersionRequest(), deadline : deadline); var serverVersion = new SemanticVersion(response.Major, response.Minor, response.Patch); SemanticVersion.AssertCompatible(RequiredRpcServerVersion, serverVersion); return(new WalletClient(channel)); }