public async Task <RawResponse> PrivateRequest(SignedRequest req) { if (apiKey == null || apiSecret == null) { throw new BinanceClientNotConfigured($"API key and API secret must be set before making private/signed requests. Provided: {apiKey}, {apiSecret}"); } if (!req.IsValid()) { //TODO: proper exception throw new Exception("Signed Request not valid"); } var response = await ReqAsync(req.BuildSignedUrl(apiSecret), req.Method, req.UseApiKey); Console.WriteLine("URL: " + response.RequestMessage.RequestUri.ToString()); Console.WriteLine(response.StatusCode); if (!response.IsSuccessStatusCode) { throw new BinanceFailedRequest($"Request failed with status code: {response.StatusCode}. Request URL: {response.RequestMessage.RequestUri.ToString()}"); } _lastResponse = await RawResponse.FromHttpResponse(response); return(_lastResponse); }
public Response <User> Register(SignedRequest <RegisterRequest> request) { var response = new Response <User>(); try { if (request == null || request.RequestData == null) { response.Code = -1; response.Description = "请求参数为空!"; response.ResponseData = null; } else { NoteUserManager manager = new NoteUserManager(request.Version); ManagerResult <User> result = manager.Register(request.RequestData.User, request.RequestData.PwdHashStr); response.GetResultInfo(result); response.ResponseData = result.ResultData; } } catch (Exception ex) { LogHelper.WriteLog(LogType.Error, ex); response.Code = -1; } return(response); }
public Response <Verification> GetVerificationByPhoneNumber(GetVerificationByPhoneNumberRequest request, SignatureCheckInfo signatureCheckInfo) { try { Signature signature = Signature.NewSignature(signatureCheckInfo.AppId); SignedRequest <GetVerificationByPhoneNumberRequest> requestValue = new SignedRequest <GetVerificationByPhoneNumberRequest>() { RequestData = request, AppId = signature.AppId, Nonce = signature.Nonce, TimeStamp = signature.TimeStamp, Signature = signature.Sign, Version = signatureCheckInfo.Version }; string requestUri = this.baseAddr + @"api/verification/GetVerificationByPhoneNumber"; HttpResponseMessage httpResponse = HttpClientHelper.Client.PostAsJsonAsync <SignedRequest <GetVerificationByPhoneNumberRequest> >(requestUri, requestValue).Result; if (httpResponse.IsSuccessStatusCode) { return(httpResponse.Content.ReadAsAsync <Response <Verification> >().Result); } else { LogHelper.WriteLog(LogType.Error, "VerificationManager", "GetVerificationByPhoneNumber", "HTTP响应失败:" + requestUri); return(null); } } catch (Exception ex) { LogHelper.WriteLog(LogType.Error, ex); return(null); } }
protected override User GetUser(HttpContextBase context) { string signedRequestValue = context.Request["signed_request"]; try { ValidateSignedRequest(signedRequestValue); } catch (Exception ex) { _errorLogger.Log(ex); return(null); } SignedRequest signedRequest = _facebookClient.ParseSignedRequest(signedRequestValue); User user = _userService.GetUser(signedRequest.UserId); if (user == null) { user = new User { FacebookUserId = signedRequest.UserId }; } user.AccessToken = signedRequest.AccessToken; user.SignedRequest = signedRequestValue; return(user); }
public Response <bool> CheckVerification(SignedRequest <CheckVerificationRequest> request) { Response <bool> response = new Response <bool>(); try { if (request == null || request.RequestData == null) { response.Code = -1; response.Description = "请求参数为空!"; response.ResponseData = false; } else { VerificationManager verificationManager = new VerificationManager(request.Version); ManagerResult <bool> result = verificationManager.CheckVerification(request.RequestData.PhoneNumber, request.RequestData.Code); response.GetResultInfo(result); response.ResponseData = result.ResultData; } } catch (Exception ex) { LogHelper.WriteLog(LogType.Error, ex); response.Code = -1; } return(response); }
private User GetUser(HttpContextBase context) { string signedRequestValue = context.Request["signed_request"]; try { ValidateSignedRequest(signedRequestValue); } catch (Exception ex) { //_errorLogger.Log(ex); return(null); } // parse the signed request SignedRequest signedRequest = _facebookClient.ParseSignedRequest(signedRequestValue); // get the user User user = _userService.GetUser(signedRequest.UserId); if (user == null) { user = new User { FacebookUserId = signedRequest.UserId }; } // update access token and signed request user.AccessToken = signedRequest.AccessToken; user.SignedRequest = signedRequestValue; return(user); }
public Response <Verification> AddVerification(SignedRequest <Verification> request) { Response <Verification> response = new Response <Verification>(); try { if (request == null || request.RequestData == null) { response.Code = -1; response.Description = "请求参数为空!"; response.ResponseData = null; } else { VerificationManager verificationManager = new VerificationManager(request.Version); ManagerResult <Verification> result = verificationManager.AddVerification(request.RequestData); response.GetResultInfo(result); response.ResponseData = result.ResultData; } } catch (Exception ex) { LogHelper.WriteLog(LogType.Error, ex); response.Code = -1; } return(response); }
// Sign() will calculate relevant account signiture information and insert into your message request body private Request Sign(SignedRequest request) { request.ClientRequestId = Guid.NewGuid().ToString("N"); request.Account = credentials.Account; request.Date = DateTime.UtcNow.ToString("yyyyMMdd"); request.Signature = $"ALPHA-{SignatureEngine.ComputeSignature(SignatureEngine.ComputeHash(credentials.Key), SignatureEngine.PrepareMessage(request, SignatureEngine.MessageSignatureOrdering.Alphabetical))}"; return(request); }
public static bool IsPageLiked(object SignedRequest) { if (SignedRequest != null) { string signedRequest = (new FacebookClient()).ParseSignedRequest(GlobalFacebookConfiguration.Configuration.AppSecret, SignedRequest.ToString()).ToString(); SignedRequest signedRequestObj = ParseJsonObject <SignedRequest>(signedRequest); return((signedRequestObj.Page != null) && (signedRequestObj.Page.Liked)); } return(false); }
public virtual Task <Response> SendDiscoveryRequestAsync(SignedRequest signedRequest, int?milliseconds = null, CancellationToken token = default(CancellationToken)) { if (shutdown) { throw new PeerException("Shutdown"); } if (milliseconds.HasValue && milliseconds > 0) { return(SendDiscoveryRequestInternalAsync(signedRequest, token).TimeoutAsync(TimeSpan.FromMilliseconds(milliseconds.Value), token)); } return(SendDiscoveryRequestInternalAsync(signedRequest, token)); }
public string GetPayload(Transaction transaction) { var data = Johny.HashtablePool.Claim(); data["orderId"] = EB.Encoding.ToHexString(EB.Crypto.RandomBytes(32)); data["productId"] = transaction.productId; data["algorithm"] = "sha1"; var bytes = Encoding.GetBytes(JSON.Stringify(data)); var hmac = Hmac.Sha1(Encoding.GetBytes(_config.PublicKey)); var payload = SignedRequest.Stringify(bytes, hmac); return(payload); }
public string GetPayload(Transaction transaction) { var data = new Hashtable(); data["orderId"] = EB.Encoding.ToHexString(EB.Crypto.RandomBytes(32)); data["productId"] = transaction.productId; data["algorithm"] = "sha1"; var bytes = Encoding.GetBytes(JSON.Stringify(data)); var hmac = Hmac.Sha1(Encoding.GetBytes(_config.PublicKey)); var payload = SignedRequest.Stringify(bytes, hmac); EB.Debug.Log("---Apple---GetPayload():这里是苹果版本的支付信息,但是不知道是否有地方调用"); return(payload); }
public void PurchaseItem(Item item) { var data = Johny.HashtablePool.Claim(); data["orderId"] = EB.Encoding.ToHexString(EB.Crypto.RandomBytes(32)); data["productId"] = item.productId; data["algorithm"] = "sha1"; if (!string.IsNullOrEmpty(item.LimitedTimeGiftId)) { data["limitedTimeGiftId"] = item.LimitedTimeGiftId; } var bytes = Encoding.GetBytes(JSON.Stringify(data)); var hmac = Hmac.Sha1(Encoding.GetBytes(_config.PublicKey)); var payload = SignedRequest.Stringify(bytes, hmac); Transaction transaction = new Transaction(); transaction.transactionId = data["orderId"].ToString(); transaction.payload = payload; transaction.productId = item.productId; if (!string.IsNullOrEmpty(item.LimitedTimeGiftId)) { transaction.limitedTimeGiftId = item.LimitedTimeGiftId; } if (_config.Verify != null) { _config.Verify(transaction); } else { Complete(transaction); } }
public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpContextBase context = filterContext.HttpContext; string signedRequestValue = context.Request["signed_request"]; HttpSessionStateBase session = context.Session; if (session[_userSettingsKey] == null && !String.IsNullOrEmpty(signedRequestValue)) { SignedRequest signedRequest = _facebookClient.ParseSignedRequest(signedRequestValue); User user = _userService.GetUser(signedRequest.UserId); if (user == null) { user = new User { FacebookUserId = signedRequest.UserId }; } user.AccessToken = signedRequest.AccessToken; user.SignedRequest = signedRequestValue; session[_userSettingsKey] = user; } }
public Manager(Config config) { if (Enabled == true) { _config = config; _rpcs = Johny.HashtablePool.Claim(); _deferred = new EB.Deferred(8); _updateHandle = EB.Coroutines.SetUpdate(_deferred.Dispatch); // load certs //EB.Net.TcpClientFactory.LoadCertStore("Crypto/Certs"); // make the signed request Hashtable data = Johny.HashtablePool.Claim(); data["_id"] = EB.Version.GetMACAddress(); data["type"] = Application.platform.ToString(); data["game"] = _config.game; data["last"] = EB.Time.Now; data["algorithm"] = "hmac-sha1"; var json = EB.JSON.Stringify(data); var key = SignedRequest.Stringify(Encoding.GetBytes(json), Hmac.Sha1(Encoding.GetBytes(_config.serverKey))); var url = _config.serverUrl + "?access_token=" + key; _wsUrl = new EB.Uri(url); Debug.Log("GameTalk Url: " + url); _socket = new EB.Net.TalkWebSocket(); _socket.OnError += this.OnError; _socket.OnRPC += this.OnRPC; Bind(string.Empty, new RPC.Global()); ConnectIfNeeded(); } }
private async Task <Response> SendDiscoveryRequestInternalAsync(SignedRequest signedRequest, CancellationToken token) { return(await dfs.DiscoverAsync(signedRequest, null, null, token)); }
public Response SendDiscoveryRequest(SignedRequest signedRequest, int?milliseconds = null) { return(SendDiscoveryRequestAsync(signedRequest, milliseconds).RunAndUnwrap()); }
public async Task <SDNetwork> NetworkDiscoveryAsync(TransactionContext ltransactionContext, bool force, CancellationToken token = default(CancellationToken)) { using (await discoverLock.LockAsync(token).ConfigureAwait(false)) { logger.Trace($"Network discovery force: {force}"); List <Peer> speers = serviceDiscoveryPeers.Shuffle().ToList(); SDNetwork ret = sdNetwork; if (!force && null != ret && !ret.TimeElapsed) { return(ret); } ret = null; foreach (Peer serviceDiscoveryPeer in speers) { try { SDNetwork lsdNetwork = new SDNetwork(SERVICE_DISCOVER_FREQ_SECONDS); byte[] clientTLSCertificateDigest = serviceDiscoveryPeer.GetClientTLSCertificateDigest(); logger.Info($"Channel {channelName} doing discovery with peer: {serviceDiscoveryPeer}"); if (null == clientTLSCertificateDigest) { throw new ArgumentException($"Channel {channelName}, peer {serviceDiscoveryPeer} requires mutual tls for service discovery."); } ByteString clientIdent = ltransactionContext.Identity.ToByteString(); ByteString tlshash = ByteString.CopyFrom(clientTLSCertificateDigest); AuthInfo authentication = new AuthInfo(); authentication.ClientIdentity = clientIdent; authentication.ClientTlsCertHash = tlshash; List <Query> fq = new List <Query>(2); Query cq = new Query(); Query pq = new Query(); cq.Channel = channelName; pq.Channel = channelName; cq.ConfigQuery = new ConfigQuery(); pq.PeerQuery = new PeerMembershipQuery(); fq.Add(cq); fq.Add(pq); Request request = new Request(); request.Queries.AddRange(fq); request.Authentication = authentication; ByteString payloadBytes = request.ToByteString(); ByteString signatureBytes = ltransactionContext.SignByteStrings(payloadBytes); SignedRequest sr = new SignedRequest(); sr.Payload = payloadBytes; sr.Signature = signatureBytes; if (IS_TRACE_LEVEL && null != diagnosticFileDumper) // dump protobuf we sent { logger.Trace($"Service discovery channel {channelName} {serviceDiscoveryPeer} service chaincode query sent {diagnosticFileDumper.CreateDiagnosticProtobufFile(sr.ToByteArray())}"); } Response response = await serviceDiscoveryPeer.SendDiscoveryRequestAsync(sr, SERVICE_DISCOVERY_WAITTIME, token).ConfigureAwait(false); if (IS_TRACE_LEVEL && null != diagnosticFileDumper) // dump protobuf we get { logger.Trace($"Service discovery channel {channelName} {serviceDiscoveryPeer} service discovery returned {diagnosticFileDumper.CreateDiagnosticProtobufFile(response.ToByteArray())}"); } //serviceDiscoveryPeer.HasConnected; ??? List <QueryResult> resultsList = response.Results.ToList(); QueryResult queryResult = resultsList[0]; //configquery if (queryResult.ResultCase == QueryResult.ResultOneofCase.Error) { logger.Warn($"Channel {channelName} peer: {serviceDiscoveryPeer} error during service discovery {queryResult.Error.Content}"); continue; } QueryResult queryResult2 = resultsList[1]; if (queryResult2.ResultCase == QueryResult.ResultOneofCase.Error) { logger.Warn($"Channel {channelName} peer: {serviceDiscoveryPeer} error during service discovery {queryResult2.Error.Content}"); continue; } ConfigResult configResult = queryResult.ConfigResult; Dictionary <string, FabricMSPConfig> msps = configResult.Msps.ToDictionary(a => a.Key, a => a.Value); HashSet <ByteString> cbbs = new HashSet <ByteString>(); foreach (string i in msps.Keys) { FabricMSPConfig value = msps[i]; string mspid = value.Name; cbbs.AddRange(value.RootCerts); cbbs.AddRange(value.IntermediateCerts); value.RootCerts.ToList().ForEach(a => lsdNetwork.AddTlsCert(mspid, a.ToByteArray())); value.TlsIntermediateCerts.ToList().ForEach(a => lsdNetwork.AddTlsIntermCert(mspid, a.ToByteArray())); } List <byte[]> toaddCerts = new List <byte[]>(); AddCerts(cbbs, toaddCerts); if (toaddCerts.Count > 0) // add them to crypto store. { toaddCerts.ForEach(a => channel.Client.CryptoSuite.Store.AddCertificate(a.ToUTF8String())); } Dictionary <string, SDOrderer> ordererEndpoints = new Dictionary <string, SDOrderer>(); Dictionary <string, Endpoints> orderersMap = configResult.Orderers.ToDictionary(a => a.Key, a => a.Value); foreach (string mspid in orderersMap.Keys) { Endpoints value = orderersMap[mspid]; foreach (Protos.Discovery.Endpoint l in value.Endpoint) { string endpoint = l.Host + ":" + l.Port.ToString().ToLowerInvariant().Trim(); logger.Trace($"Channel {channelName} discovered orderer MSPID: {mspid}, endpoint: {endpoint}"); SDOrderer sdOrderer = new SDOrderer(channel, mspid, endpoint, lsdNetwork.GetTlsCerts(mspid), lsdNetwork.GetTlsIntermediateCerts(mspid)); ordererEndpoints[sdOrderer.Endpoint] = sdOrderer; } } lsdNetwork.SetOrdererEndpoints(ordererEndpoints); PeerMembershipResult membership = queryResult2.Members; Dictionary <string, SDEndorser> endorsers = new Dictionary <string, SDEndorser>(); foreach (string mspId in membership.PeersByOrg.Keys) { Peers peer = membership.PeersByOrg[mspId]; foreach (Protos.Discovery.Peer pp in peer.Peers_) { SDEndorser ppp = new SDEndorser(channel, pp, lsdNetwork.GetTlsCerts(mspId), lsdNetwork.GetTlsIntermediateCerts(mspId)); logger.Trace($"Channel {channelName} discovered peer MSPID: {mspId}, endpoint: {ppp.Endpoint}"); endorsers[ppp.Endpoint] = ppp; } } lsdNetwork.SetEndorsers(endorsers); lsdNetwork.End(); sdNetwork = lsdNetwork; ret = lsdNetwork; break; } catch (Exception e) { logger.Warn($"Channel {channelName} peer {serviceDiscoveryPeer} service discovery error {e.Message}"); } } logger.Debug($"Channel {channelName} service discovery completed: {ret != null}"); return(ret); } }
public async Task <Dictionary <string, SDChaindcode> > DiscoverEndorserEndpointsAsync(TransactionContext tContext, List <List <ServiceDiscoveryChaincodeCalls> > chaincodeNames, CancellationToken token = default(CancellationToken)) { if (null == chaincodeNames) { logger.Warn("Discover of chaincode names was null."); return(new Dictionary <string, SDChaindcode>()); } if (chaincodeNames.Count == 0) { logger.Warn("Discover of chaincode names was empty."); return(new Dictionary <string, SDChaindcode>()); } if (IS_DEBUG_LEVEL) { StringBuilder cns = new StringBuilder(1000); string sep = ""; cns.Append("["); foreach (List <ServiceDiscoveryChaincodeCalls> s in chaincodeNames) { ServiceDiscoveryChaincodeCalls n = s[0]; cns.Append(sep).Append(n.Write(s.GetRange(1, s.Count - 1))); sep = ", "; } cns.Append("]"); logger.Debug($"Channel {channelName} doing discovery for chaincodes: {cns}"); } List <Peer> speers = serviceDiscoveryPeers.Shuffle().ToList(); Dictionary <string, SDChaindcode> ret = new Dictionary <string, SDChaindcode>(); sdNetwork = await NetworkDiscoveryAsync(tContext, false, token).ConfigureAwait(false); token.ThrowIfCancellationRequested(); ServiceDiscoveryException serviceDiscoveryException = null; foreach (Peer serviceDiscoveryPeer in speers) { serviceDiscoveryException = null; try { logger.Debug($"Channel {channelName} doing discovery for chaincodes on peer: {serviceDiscoveryPeer}"); TransactionContext ltransactionContext = tContext.RetryTransactionSameContext(); byte[] clientTLSCertificateDigest = serviceDiscoveryPeer.GetClientTLSCertificateDigest(); if (null == clientTLSCertificateDigest) { logger.Warn($"Channel {channelName} peer {serviceDiscoveryPeer} requires mutual tls for service discovery."); continue; } ByteString clientIdent = ltransactionContext.Identity.ToByteString(); ByteString tlshash = ByteString.CopyFrom(clientTLSCertificateDigest); AuthInfo authentication = new AuthInfo(); authentication.ClientIdentity = clientIdent; authentication.ClientTlsCertHash = tlshash; List <Query> fq = new List <Query>(chaincodeNames.Count); foreach (List <ServiceDiscoveryChaincodeCalls> chaincodeName in chaincodeNames) { if (ret.ContainsKey(chaincodeName[0].Name)) { continue; } List <ChaincodeCall> chaincodeCalls = new List <ChaincodeCall>(); chaincodeName.ForEach(serviceDiscoveryChaincodeCalls => chaincodeCalls.Add(serviceDiscoveryChaincodeCalls.Build())); List <ChaincodeInterest> cinn = new List <ChaincodeInterest>(1); //chaincodeName.ForEach(ServiceDiscoveryChaincodeCalls.Build); ChaincodeInterest cci = new ChaincodeInterest(); cci.Chaincodes.Add(chaincodeCalls); cinn.Add(cci); ChaincodeQuery chaincodeQuery = new ChaincodeQuery(); chaincodeQuery.Interests.AddRange(cinn); Query q = new Query(); q.Channel = channelName; q.CcQuery = chaincodeQuery; fq.Add(q); } if (fq.Count == 0) { //this would be odd but lets take care of it. break; } Request request = new Request(); request.Queries.AddRange(fq); request.Authentication = authentication; ByteString payloadBytes = request.ToByteString(); ByteString signatureBytes = ltransactionContext.SignByteStrings(payloadBytes); SignedRequest sr = new SignedRequest(); sr.Payload = payloadBytes; sr.Signature = signatureBytes; if (IS_TRACE_LEVEL && null != diagnosticFileDumper) // dump protobuf we sent { logger.Trace($"Service discovery channel {channelName} {serviceDiscoveryPeer} service chaincode query sent {diagnosticFileDumper.CreateDiagnosticProtobufFile(sr.ToByteArray())}"); } logger.Debug($"Channel {channelName} peer {serviceDiscoveryPeer} sending chaincode query request"); Response response = await serviceDiscoveryPeer.SendDiscoveryRequestAsync(sr, SERVICE_DISCOVERY_WAITTIME, token).ConfigureAwait(false); if (IS_TRACE_LEVEL && null != diagnosticFileDumper) // dump protobuf we get { logger.Trace($"Service discovery channel {channelName} {serviceDiscoveryPeer} query returned {diagnosticFileDumper.CreateDiagnosticProtobufFile(response.ToByteArray())}"); } logger.Debug($"Channel {channelName} peer {serviceDiscoveryPeer} completed chaincode query request"); //serviceDiscoveryPeer.HasConnected(); foreach (QueryResult queryResult in response.Results) { if (queryResult.ResultCase == QueryResult.ResultOneofCase.Error) { ServiceDiscoveryException discoveryException = new ServiceDiscoveryException($"Error {queryResult.Error.Content}"); logger.Error(discoveryException.Message); continue; } if (queryResult.ResultCase != QueryResult.ResultOneofCase.CcQueryRes) { ServiceDiscoveryException discoveryException = new ServiceDiscoveryException($"Error expected chaincode endorsement query but got {queryResult.ResultCase.ToString()}"); logger.Error(discoveryException.Message); continue; } ChaincodeQueryResult ccQueryRes = queryResult.CcQueryRes; if (ccQueryRes.Content.Count == 0) { throw new ServiceDiscoveryException($"Error {queryResult.Error.Content}"); } foreach (EndorsementDescriptor es in ccQueryRes.Content) { string chaincode = es.Chaincode; List <SDLayout> layouts = new List <SDLayout>(); foreach (Layout layout in es.Layouts) { SDLayout sdLayout = null; Dictionary <string, uint> quantitiesByGroupMap = layout.QuantitiesByGroup.ToDictionary(a => a.Key, a => a.Value); foreach (string key in quantitiesByGroupMap.Keys) { uint quantity = quantitiesByGroupMap[key]; if (quantity < 1) { continue; } Peers peers = es.EndorsersByGroups.GetOrNull(key); if (peers == null || peers.Peers_.Count == 0) { continue; } List <SDEndorser> sdEndorsers = new List <SDEndorser>(); foreach (Protos.Discovery.Peer pp in peers.Peers_) { SDEndorser ppp = new SDEndorser(channel, pp, null, null); string endPoint = ppp.Endpoint; SDEndorser nppp = sdNetwork.GetEndorserByEndpoint(endPoint); if (null == nppp) { sdNetwork = await NetworkDiscoveryAsync(tContext, true, token).ConfigureAwait(false); if (null == sdNetwork) { throw new ServiceDiscoveryException("Failed to discover network resources."); } nppp = sdNetwork.GetEndorserByEndpoint(ppp.Endpoint); if (null == nppp) { throw new ServiceDiscoveryException($"Failed to discover peer endpoint information {ppp.Endpoint} for chaincode {chaincode}"); } } sdEndorsers.Add(nppp); } if (sdLayout == null) { sdLayout = new SDLayout(); layouts.Add(sdLayout); } sdLayout.AddGroup(key, (int)quantity, sdEndorsers); } } if (layouts.Count == 0) { logger.Warn($"Channel {channelName} chaincode {chaincode} discovered no layouts!"); } else { if (IS_DEBUG_LEVEL) { StringBuilder sb = new StringBuilder(1000); sb.Append("Channel ").Append(channelName).Append(" found ").Append(layouts.Count).Append(" layouts for chaincode: ").Append(es.Chaincode); sb.Append(", layouts: ["); string sep = ""; foreach (SDLayout layout in layouts) { sb.Append(sep).Append(layout); sep = ", "; } sb.Append("]"); logger.Debug(sb.ToString()); } ret[chaincode] = new SDChaindcode(es.Chaincode, layouts); } } } if (ret.Count == chaincodeNames.Count) { break; // found them all. } } catch (ServiceDiscoveryException e) { logger.Warn($"Service discovery error on peer {serviceDiscoveryPeer}. Error: {e.Message}"); serviceDiscoveryException = e; } catch (Exception e) { logger.Warn($"Service discovery error on peer {serviceDiscoveryPeer}. Error: {e.Message}"); serviceDiscoveryException = new ServiceDiscoveryException(e.Message, e); } } if (null != serviceDiscoveryException) { throw serviceDiscoveryException; } if (ret.Count != chaincodeNames.Count()) { logger.Warn($"Channel {channelName} failed to find all layouts for chaincodes. Expected: {chaincodeNames.Count} and found: {ret.Count}"); } return(ret); }