>  기사  >  백엔드 개발  >  하이퍼레저 체인코드와 함께 gRPC를 사용할 수 있습니까? 그렇다면 테스트 네트워크에서 호출하는 동안 오류를 방지하는 방법은 무엇입니까?

하이퍼레저 체인코드와 함께 gRPC를 사용할 수 있습니까? 그렇다면 테스트 네트워크에서 호출하는 동안 오류를 방지하는 방법은 무엇입니까?

PHPz
PHPz앞으로
2024-02-13 09:12:09644검색

是否可以在 hyperledger-chaincode 中使用 gRPC,如果可以,如何避免在测试网络上调用期间出现错误?

php 편집기 Xigua가 귀하의 질문에 답변해 드립니다. 예, Hyperledger Chaincode와 함께 gRPC를 사용할 수 있습니다. gRPC는 체인코드가 다른 서비스와 통신할 수 있게 해주는 고성능 오픈 소스 원격 프로시저 호출(RPC) 프레임워크입니다. 테스트 네트워크에서 호출하는 동안 오류를 방지하기 위해 취할 수 있는 몇 가지 단계가 있습니다. 먼저 테스트 네트워크가 올바르게 구성되어 실행되고 있는지 확인하세요. 둘째, 코드와 구성 파일을 확인하여 gRPC를 올바르게 사용하고 있는지 확인하세요. 마지막으로 모든 문제를 즉시 발견하고 해결할 수 있도록 적절한 오류 처리 및 로깅을 수행하십시오. 이러한 단계를 수행하면 테스트 네트워크에서 호출하는 동안 오류를 방지하고 gRPC를 사용하여 원활하게 통신할 수 있습니다.

질문 내용

패브릭 SDK를 사용하는 대신 크로스 체인 통신을 구현하기 위해 패브릭 체인코드에서 grpc를 사용하고 싶습니다. 하지만 fabric-sample/test-network에서 체인코드 함수를 호출하면 항상 오류가 발생합니다.

으아악

이 오류의 원인을 알려주실 수 있나요? 내 체인코드에 버그가 있거나 grpc를 체인코드 기능에 사용할 수 없나요?

내 grpc 체인코드:

으아악

server.go

으아악

client.go

error: endorsement failure during invoke. response: status:500 message:"error in simulation: failed to execute transaction eb5e480bd4075a767f56ae263741ca0f5f19620ef88952e26b7f1952bdbe83cd: could not launch chaincode chaincode_1.2:d3f97f15a635e73d3de230c8e5899e5fb95a68cf897c03e19f9e4eeca7ca3fd5: chaincode registration failed: container exited with 2"

Solution

이 오류의 원인을 누가 알 수 있나요?

자세한 내용은 hyperledger fabric v2.x/ 로그 제어 를 참조하세요. 오류 500 (내부 서버 오류)은 서버 로그입니다.

원인을 알 수 있는 내용

실행 방법에 따라:

으아악

이는 체인코드의 문제(예: grpc 코드의 버그) 때문일 수도 있고, 체인코드가 실행되는 환경 때문일 수도 있습니다.

코드에서 체인코드()로 grpc 서버를 시작하지 않는 것을 server.main()고려할 수도 있습니다. 체인코드는 하이퍼레저 패브릭 네트워크 내에서 실행되며 독립형 애플리케이션과 같은 네트워크 통신을 처리하지 않습니다.
대신, grpc 서버를 독립적으로 실행되는 별도의 서비스로 만들어야 하며 그러면 체인코드가 필요에 따라 해당 서비스와 통신할 수 있습니다.

plus client.clientfunc() 기능은 grpc 연결을 설정하고 요청을 보내고 응답을 기다리는 것 같습니다. 이는 동기 작업이므로 응답이 도착하는 데 오랜 시간이 걸릴 경우 문제가 발생할 수 있습니다. 체인코드 실행을 차단하지 않으려면 비동기 작업(예: 요청 보내기 및 콜백 함수에서 응답 처리)을 사용하는 것이 좋습니다.
그리고... client.send() ;)

의 오류를 무시하면 안 됩니다.

grpc 서버에 보안 연결이 필요하지 않은지 확인하세요. 그렇지 않으면 grpc.withtransportcredentials(insecure.newcredentials())(ssl/tls가 없는 안전하지 않은 연결)이 실패합니다.

일반적으로 체인코드 자체보다는 패브릭 클라이언트 애플리케이션 내에서 외부 시스템(예: grpc를 통해)과의 통신을 처리하는 것이 좋습니다.

패브릭 애플리케이션 대신 체인코드만 사용하고 싶은 경우, 서로 다른 채널의 조직 간에 통신할 수 있는 방법이 있나요?

데이터 프라이버시를 유지하기 위해 채널 을 서로 격리하는 것이 하이퍼레저 패브릭 디자인의 기본 측면이므로 서로 다른 채널의 조직 간 통신은 복잡할 수 있습니다.

다음을 고려해 보세요:

  • 체인코드 기능: 조직은 자체 채널에서 체인코드 기능을 호출할 수 있으며, 이는 차례로 다른 채널에서 체인코드 기능을 호출합니다. 이는 체인코드가 여러 채널과 연결될 수 있기 때문에 가능합니다.
    이 접근 방식에는 두 번째 함수 호출이 첫 번째 함수 호출과 동일한 트랜잭션에 속하지 않는다는 제한이 있으므로 첫 번째 트랜잭션이 실패하면 롤백할 수 없습니다.

  • 이중 멤버십: 조직은 여러 채널에 속할 수 있습니다. 따라서 한 채널에서 데이터를 읽고 다른 채널에 데이터를 쓸 수 있습니다. 그러나 이는 두 개의 별도 트랜잭션으로 수행되므로 원자성이 보장되지 않습니다.

  • 개인 데이터 수집(pdc): 목표가 특정 조직 간에(또는 심지어 다른 채널 간에) 개인 데이터를 공유하는 것이라면 pdc가 옵션일 수 있습니다. pdc를 사용하면 채널의 모든 조직에 데이터를 배포하지 않고도 개인 데이터를 보증, 제출 또는 쿼리할 수 있는 채널의 정의된 조직 하위 집합이 가능합니다.

  • 상호 운용성 솔루션: 다양한 패브릭 네트워크를 연결하는 데 사용할 수 있는 interledger 프로토콜(ilp)과 같은 블록체인 상호 운용성을 위한 고급 솔루션도 개발되고 있습니다. 블록체인 네트워크).
    그러나 이러한 기술은 여전히 ​​대부분 연구 개발 단계에 있으며 아직 생산에 사용할 준비가 되지 않았을 수 있습니다.

위 내용은 하이퍼레저 체인코드와 함께 gRPC를 사용할 수 있습니까? 그렇다면 테스트 네트워크에서 호출하는 동안 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제