[블록체인 스터디] 이더리움 작동원리의 이해 - 땡글 블록체인 강의(1)

in #kr7 years ago

안녕하세요, 이댕댕입니다.
이더리움 코어에 대한 강의 자료가 있어서 해당 강의 영상을 보면서 공부하고, 정리를 해보았습니다.

이 링크를 통해 강의를 들으러 갈 수 있습니다. 강의 pdf를 활용하여 정리를 하는 시간을 갖겠습니다. 혹시 저작권 문제가 되면 글을 내리겠습니다.

너무 앞부분은 생략하면서 정리할게요.

GHOST 프로토콜: 다중체인의 방지

채굴 과정에서 블록의 처리에 따라 uncle 블록이 생깁니다. uncle 블록은 블록 생성 과정 중 블록 수가 부족해서 낙오되는 uncle 블록입니다. (즉, 메인 체인에서 인정받지 못하는 블록) uncle 블록도 간만의 차로 uncle 블록이 된 것이기 때문에 보상을 받습니다. 이더리움에서는 한 블록에 uncle 블록을 2개까지 허용합니다. uncle 해시가 있어서 uncle 블록들을 담습니다. uncle inclusion을 한 블록은 uncle을 include 했다고 대가를 받습니다. uncle은 8세대까지 가능하다고 합니다. 또한, uncle의 uncle은 불가능합니다.

uncle 블록을 만든 이유는 한번 갈림길이 생기면 짧은 순간에 다른 체인이 생길 수 있기 때문에 포크를 방지하기 위해서 만들어졌다고 합니다.
uncle 블럭을 발견하는 알고리즘이 있어서 다음 블럭에서 항상 uncle을 찾는 게 아니라 uncle 블록 이후의 블록에서 uncle을 포함할 수도, 포함하지 못할 수도 있습니다.

Account

이더리움 백서를 보시면 계정에는 두 가지 종류가 있습니다. Externally Owned Account, 외부 소유 계정과 Contract Account 계약 계정이 있습니다. 외부 소유 계정은 다른 외부 소유 계정과 계약 계정에 메세지를 보낼 수 있고, 이 때 사람이 개인키로 서명을 합니다. 다만 계약 계정은 스스로가 먼저 메세지를 보내지 못합니다. 즉, input이 있어야 내부 계약에 있는대로 어떤 작업들을 수행할 수 있게 됩니다.

위 사진은 계정이 어떻게 만들어지냐에 대한 내용입니다. 먼저 랜덤으로 개인키가 생성된 후, 타원곡선알고리즘으로 public key가 생성됩니다. public key를 또 해당 알고리즘을 통해 address가 나오게 됩니다. 지갑 주소가 생성된 것 입니다!
지갑 주소가 공개키와 같은 역할을 한다고 했는데 1대1로 생성되고, 해시를 사용하기 때문에 공개키와 같은 역할을 할 수 있는 것 입니다.

외부 소유 계정과 계약 계정 모두 4가지 요소를 가지고 있습니다. 여기서 논스는 블록에 저장되는 논스와 다릅니다. 외부 소유 계정의 논스는 이 계정으로 얼마나 거래를 했는 가의 값이고, 계약 계정의 논스는 생성된 컨트랙트의 수입니다. Balance는 잔고 값이고 storageRoot 머클 패트리샤의 루트 값을 담고 있습니다. codeHash는 외부계정의 경우는 빈 문자열의 해시이고, 계약 계정의 경우는 코드의 해시입니다.

이런 4가지 요소와 앞의 키 관련 정보들(개인키, 공개키) 등이 어루어져 State를 이룹니다. 이 State는 컴퓨터가 풀 노드이든 라이트 노드이든 항상 같은 상태를 유지해야 합니다.

블록 구조는 다음과 같이 이뤄집니다.

블록 헤더에 State Root는 state 들의 변화를 담은 state 해시 값이 저장되어 있고, 이 state Root를 구성하는 데에 계정 정보가 들어가게 됩니다.

머클 패트리샤 구조

머클 패트리샤 구조는 거의 이더리움 root 값에 다 활용됩니다. State Root, Transaction Root, Receipt Root 등이 머클 패트리샤 구조를 통한 루트 값을 저장하고 있습니다.

머클 패트리샤 구조가 되게 어렵습니다,, 강의에도 간단히만 설명이 되어있어서 좀 더 찾아보았습니다. 아래 링크를 통해서 머클 패트리샤 구조에 대해서 어느정도 감이 잡히네요.

http://hamait.tistory.com/959

이더리움의 상태전이를 표현하면서, 패트리샤 구조를 활용하여 데이터를 효율적으로 저장하면서 머클 루트 값을 얻는 구조입니다. 궁금하신 분들은 좀 더 찾아봐도 좋은 공부가 될 것 같습니다.

Gas

전체 수수료는 Gas limit * gas 값으로 계산이 됩니다. Gas limit은 그림처럼 최대 몇 가스를 낼 것인지 용량으로 생각하시면 됩니다. 나는 얼마까지 가스를 지불할 용의가 있어!를 나타내는 것이 gas limit인 것이죠. 중요한 트렌젝션일 경우, Gas limit을 높게하는 이유는 마이너가 블록에 해당 트렌젝션을 우선순위에서 미루지 않고 넣을 수 있게 하기 위함입니다. 마이너는 수수료 높은 트렌젝션을 원하니깐요. 남은 GAS는 다시 본인의 계정으로 돌려받습니다.
이더리움은 튜링 완전 언어로, 반복 코드가 가능해 무한 반복이 가능하기 때문에 gas 수수료 개념을 제시하여 무한 반복을 막으려는 의도도 있습니다. 해당 gas가 모두 소모되면 더 이상 트렌젝션이나 코드를 실행하지 않습니다.

오늘은 여기까지 정리하는 것으로 하겠습니다. 머클 패트리샤 구조와 uncle 블록, 계정에 대해서 알아볼 수 있었습니다. 다음에는 마지막까지 정리해볼게요!


그럼 이댕댕으로 놀러왕~!


사본 -7fed16dd8192c5b969afcbc9999b05c7 (1).gif

Sort:  

쌍둥이 아빠님 온라인으로 다음강의나 오프라인강의할예정이시면 연락부탁드립니다. 참여하고싶습니다

짱짱맨 호출에 출동했습니다!!

Congratulations @dangdang! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of posts published

Click on any badge to view your Board of Honor.

To support your work, I also upvoted your post!
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last announcement from @steemitboard!

Do you like SteemitBoard's project? Vote for its witness and get one more award!