안녕하세요,
오늘은 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함수로서의 역할이 더 크지 않나 생각됩니다.
원래는 여기까지 쓸려고 했는데, 그림에서 몇 개 건질 게 있어서 추가.
뻘생각에서 시작했지만, 제 나름대로는 많은 도움이 되는 시간이였던것 같습니다.
여러분의 up vote 가 큰 도움이 됩니다.
후원: 0x62467Ca1b449c854c4720395Dd9a7c6Ed5df47B7(ethereum)