Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

새 Block 연결과 Transaction 실행 동기문제 #178

Open
hea9549 opened this issue May 10, 2018 · 3 comments
Open

새 Block 연결과 Transaction 실행 동기문제 #178

hea9549 opened this issue May 10, 2018 · 3 comments
Assignees

Comments

@hea9549
Copy link
Member

hea9549 commented May 10, 2018

#173 [SC.BC] Block 생성(a.k.a. Consensus): 합의 과정에 대한 시나리오 에 나와있는 문제

image

이슈사항이 있는데 icode에서 worldstate db를 반영하기 위해 
transaction을 실행시키는 것과 block을 blockchain에 저장하는 부분이 
하나의 세트로 실행 되어야 할 것 같다.

block체인저장하는부분과 실행부분이 하나가되어야할텐데
둘중 하나라도 에러가나서 한쪽만 실행되면 안될 듯 합니다.
아니면 최소한 한쪽 에러에대한 상황에 대처하는 코드가 필요할 것 같습니다.

@junbeomlee
Copy link
Member

오 역시 기철... 그래서 어제 @byron1st 님과 같이 얘기를 해봤는데 두개를 하나의 로직흐름에 넣어서 transaction처럼 처리화 하는 방법에 대해서 공부를 조금 해야될듯?!!

@hea9549
Copy link
Member Author

hea9549 commented May 11, 2018

transaction 처럼 둘다 작업을 각각 임시 데이터로 한다음 완료되면
서로 메세지를 보내고 확인하고 둘다 ok면
실 데이터에 반영..?

뭔가 공부를 해서 방법을찾아야할둣해여

@byron1st
Copy link
Collaborator

byron1st commented May 11, 2018

world state db에 쓰는 작업을 먼저하고, 이 작업이 성공적으로 완료된 후 block을 쓰는게 좋을 것 같습니다. block은 되도록 한번 쓴 것을 롤백하는 일이 없어야 하기 때문이구요. block 자체가 쓰는데 오류날 일은 거의 없을 것 같기도 하구요. block을 추가하는건 world state db처럼 어떤 값을 세부적으로 update 하는 것이 아니라, 그냥 새로운 item을 추가하는 것이니까요.

다만 world state db에 쓸 때, transaction의 결과로 나온 write set을 순서대로 쓰게 될텐데, 우리가 쓰고 있는 levelDB는 일반 RDBMS가 지원하는 DB트랜잭션 기반의 롤백을 지원하지 않는거 같습니다. 그래서 leveldb_wrapper에 이 기능이 추가되야 할 것으로 보이구요.

그래서 전반적인 순서는,

  1. iCode 서비스는 Transaction 리스트를 순차적으로 world state db에 적용
    1-1. 성공적으로 완료: 2로 이동.
    1-2. 중간에 실패: 앞서 성공했던 Transaction들까지 포함해서 모두 롤백
  2. Blockchain 서비스에 Transaction 적용 완료 이벤트 전송
  3. Blockchain 서비스는 Block을 추가.
    3-1. 성공적으로 완료: 끝.
    3-2. 실패: 4로 이동.
  4. Blockchain 서비스는 Block 추가 실패 이벤트를 전송.
  5. iCode 서비스는 Block 추가 실패 이벤트를 받을 경우, world state db를 롤백.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants