2017-09-09 17 views
1

Hyperledger Fabric, ChaincodeA 및 ChaincodeB에 두 개의 chaincode가 있다고 가정 해 봅시다.invokeChaincode에서 Chaincode 상태를 변경하면 끔찍한 일이 생깁니 까?

ChaincodeA의 일부 이벤트는 ChaincodeB에서 상태를 변경해야합니다 (예 : 균형 조정). invokeChaincode()이 ChaincodeA에서 ChaincodeB의 상태를 변경하기 위해 putState()을 호출하는 ChaincodeB의 일부 논리를 호출하는 데 사용되는 경우 컨센서스를 획득 할 때 모든 경쟁 조건이 발생할 수 있습니까? 이 문제를 처리하는 가장 좋은 방법은 무엇입니까?

답변

1

chaincode을 호출하는 동안 현재 상태를 기반으로 트랜잭션 실행 만 시뮬레이션하는 상태는 변경하지 않습니다. 한번 거래가 주문 서비스에 의해 블록에 놓여지고, 그곳에 도달해야하는 피어에 도달하면 VSCCMVCC은 최종적으로이를 확정 할 것입니다. MVCC은 가능한 경쟁 조건을 처리합니다. 다음과 같이 Transaction execution 작품 :

  1. 클라이언트는
  2. 피어 트랜잭션 결과를 서명하고 서명 거래 제안에 넣어 시뮬레이션 피어에 거래 제안서를 보냅니다
  3. 클라이언트가 기대 보증 정책
  4. 을 기반으로 단계 2를 반복한다 그는
  5. 주문 서비스는 블록 순서 모든 거래
  6. 블록 델리 인하 주문 서비스로 보낼 클라이언트 수집 충분한 보증되면
  7. 피어의 유효성을 검사하는 동료에 베 레드와 나는 두 개의 서로 다른 채널에 배치 된 두 개의 chaincode을 절제된으로 결국 블록