이더리움 - 블록을 체인에 넣을때 생기는 일
안녕하세요,
오늘은 blockchain 패키지의 insertChain 함수를 조금 정리해 보고자 합니다.
예전 몇몇 글을 통해 블록을 체인에 넣을때 트렌젝션 처리와 상태의 변화가 일어나는것을 알아보았었고, 담당하는 함수가 insertChain이라는것도 이미 알고 있었죠.
(https://steemit.com/ethereum/@sigmoid/state 참조)
그럼에도 불구하고 또 이 글을 쓰게된 이유는,
오늘 쌩뚱맞게도 과연 EVM이란 무엇인가?! 라는 생각을 정리하는 과정에서 그림을 그리기 시작했는데
어쩌다보니 그림이 이렇게까지 되어버려서...입니다.
그림 보시죠.
그림을 설명 드리자면.
- 한개 또는 여러개의 블록을 체인에 삽입하는 함수를 호출합니다. 여러개인경우는 아마 sync일때일꺼고, 그이후부터는 주로 1~2개정도를 처리하게 될것입니다.
(2개부터는 엉클일 확률이 높겠고요)- 블록을 처리합니다. Processing의 의미를 이 그림으로 좀 더 쉽게 이해하실수 있을것 같습니다.
2.1 하나의 트렌젝션 처리를 위한 EVM을 생성하고요
2.2 계약을 실행합니다
2.3 트렌젝션을 실행하고 남은가스는 원래 주인에게 돌려주고요
2.4 영수증과 로그를 생성합니다.- 블록을 Finalize합니다.
3.1 상태 트라이의 루트해시를 업데이트하고
3.2 트렌젝션들과 영수중의 해시를 만들고
3.3 엉클 해시를 만듭니다.- 반복
입니다.
여기서 파란 부분이 EVM이 처리하는 영역입니다 계약을 생성하거나, 실행하는 과정에서 잔고 수/발신 처리가 됩니다. 즉 EVM입장에서는 transaction은 다 계약 메시지인거죠. 실행할 코드가 있으면 실행하는거고 아니면 돈만 보내고 마는 겁니다. 계약의 생성이라면 계약의 계정도 함께 만들어 주고요. 거기다가 소모되고 남은 가스를 돌려주고, 영수증을 생성하네요.
솔리디티 코드를 실행해준다는 측면에서는 VM이지만 사실 VM으로서의 역할보다는, callback함수로서의 역할이 더 크지 않나 생각됩니다.
원래는 여기까지 쓸려고 했는데, 그림에서 몇 개 건질 게 있어서 추가.
- 매 트렌젝션마다 EVM을 생성합니다
- 전송자의 논스가 1 증가하는 부분이 여기네요 ( 색칠하다보니 그렇게 되었는데 사실 이부분은 EVM의 역할은 아니고 applyTransaction함수의 역할입니다.). 트렌젝션 풀의 동작 원리상 greedy한 트렌젝션이 먼저 처리될것이므로, 어카운트가 트렌젝션에 숫자를 미리 붙여놓으면 안되겠죠.
- 블록의 최종화란 무엇인가?: 블록을 최종 체인에 저장할 상태로 만드는것. 블록 헤더상의 해시 필드를 업데이트합니다. 트렌젝션을 처리해야 영수증이나오고 영수증이 있어야 해시를 만들고 그래야 헤더가 완성되니 이부분도 당연한거네요.
- 블록보상에 쓰이는 함수가 무려 state.AddBalance!! 보상은 어디서 나오나요? 누군가한테서 나와야 하지 않나요?의 답변은 결국 아니요 허공에서 찍어내서 줍니다 입니다.
뻘생각에서 시작했지만, 제 나름대로는 많은 도움이 되는 시간이였던것 같습니다.
여러분의 up vote 가 큰 도움이 됩니다.
후원: 0x62467Ca1b449c854c4720395Dd9a7c6Ed5df47B7(ethereum)
이제야 로그인하여 업보팅 드립니다! 항상 감사히 읽고 있습니다
Congratulations @sigmoid! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP
To support your work, I also upvoted your post!