You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
world state db에 쓰는 작업을 먼저하고, 이 작업이 성공적으로 완료된 후 block을 쓰는게 좋을 것 같습니다. block은 되도록 한번 쓴 것을 롤백하는 일이 없어야 하기 때문이구요. block 자체가 쓰는데 오류날 일은 거의 없을 것 같기도 하구요. block을 추가하는건 world state db처럼 어떤 값을 세부적으로 update 하는 것이 아니라, 그냥 새로운 item을 추가하는 것이니까요.
다만 world state db에 쓸 때, transaction의 결과로 나온 write set을 순서대로 쓰게 될텐데, 우리가 쓰고 있는 levelDB는 일반 RDBMS가 지원하는 DB트랜잭션 기반의 롤백을 지원하지 않는거 같습니다. 그래서 leveldb_wrapper에 이 기능이 추가되야 할 것으로 보이구요.
그래서 전반적인 순서는,
iCode 서비스는 Transaction 리스트를 순차적으로 world state db에 적용
1-1. 성공적으로 완료: 2로 이동.
1-2. 중간에 실패: 앞서 성공했던 Transaction들까지 포함해서 모두 롤백
Blockchain 서비스에 Transaction 적용 완료 이벤트 전송
Blockchain 서비스는 Block을 추가.
3-1. 성공적으로 완료: 끝.
3-2. 실패: 4로 이동.
Blockchain 서비스는 Block 추가 실패 이벤트를 전송.
iCode 서비스는 Block 추가 실패 이벤트를 받을 경우, world state db를 롤백.
#173 [SC.BC] Block 생성(a.k.a. Consensus): 합의 과정에 대한 시나리오 에 나와있는 문제
block체인저장하는부분과 실행부분이 하나가되어야할텐데
둘중 하나라도 에러가나서 한쪽만 실행되면 안될 듯 합니다.
아니면 최소한 한쪽 에러에대한 상황에 대처하는 코드가 필요할 것 같습니다.
The text was updated successfully, but these errors were encountered: