본문 바로가기
블록체인/Ethereum

이더리움의 구조

by G0Yang 2021. 6. 10.
 

이더리움은 어떻게 동작할까?

먼저, 블록체인(Not 이더리움)을 한 문장으로 정의하자면 아래와 같습니다. “암호학적으로 안전하고, 모두에게 공유되는 상태값을 가지며 상태의 전환이 가능한 싱글톤 머신” 상기의 문장을

HERSHEYTHINGS.XYZ

 

 

 

 

 

 

1. Accounts ( === 주소 ==? 지갑 )

  1. 사용자 계정 (EOA: Externally Owned Account)
  2. 개인키를 이용하여 제어가 가능한 계정
  3. 스마트 컨트랙트 계정 (CA: Contract Account)
    • 컴파일된 코드의 정보를 담은 주소
    • truffle로 배포한 컨트랙트의 정보
    •  

 

2. State

이더리움의 Global State는 어카운트(EOA, CA)의 주소와 어카운트 간의 (key, value) 맵핑으로 구성된다.

블록체인이라는 데이터베이스의 상태값을 나타낸다.

  1. State Trie : 해당 블록을 통해서 변경된 어카운트 정보 저장.
  2. Transaction Trie : 현재 블록의 트랜잭션 정보 저장.
  3. Receipts Trie : 현재 블록의 receipt(거래 영수증) 정보 저장.

 

3. Gas and Payment

 

4. Transaction and Message

트랜잭션은 EOA에 의해서만 발생

  • 트랜잭션 속성값
    • 1. nonce : 송신자에 의해 보내진 트랜잭션의 개수 
    • 2. gasPrice : 트랜잭션이 실행될 때 발신자가 지불할 의향이 있는 가스의 가격을 Wei로 표현한 값 
    • 3. gasLimit : 트랜잭션 발신자가 트랜잭션이 실행될 때 트랜잭션의 가스 소모량의 최대값. (23165-토큰 21000-이더) 전송
    • 4. to : 트랜잭션 수신자의 주소. 컨트랙트를 생성하는 트랜잭션의 경우, CA의 주소가 존재하지 않기 때문에 empty 값이 사용된다.
    • 5. value : 발신자에서 수신자로 전송되는 wei의 양. 컨트랙트 생성 트랜잭션의 경우, 이 값은 바이트코드가 된다.
    • 6. v, r, s : 트랜잭션 발신자를 식별할 서명을 생성할 때 사용되는 변수, 개인키로 도출한 특정 해시값들. 다시 개인키로 복호화는 지원하지 않는다.
    • 7. init (CA에서만 존재) : 새로운 CA를 생성하는데 사용되는 EVM 코드 조각. init은 오직 한번만 수행되고 버려진다. 처음 init이 수행될 때는 account code의 body를 호출하는데, 이는 CA와 관련있는 코드 조각이다.
    • 8. data (메시지 콜에서만 존재) : 메시지 콜의 입력 데이터 (인자들). 함수, 매개변수
    • 9. from : 트랜잭션 송신자의 주소.
  • 트랜잭션이 이루어지는 과정

 

5. Blocks

  • 블록 속성들
    • 1. 블록 헤더
    • 2. 해당 블록에 포함된 트랜잭션 집합에 대한 정보
    • 3. 현재 블록의 ommers 블록에 대한 블록 헤더 집합
    • 블록 해더
      • 블록 해더 속성들
        • 1) parentHash : 부모 블록의 해시값(이는 블록 집합을 체인으로 만들어 준다)
        • 2) ommerhash : 현재 블록의 ommers 해시값의 리스트
        • 3) beneficiary : 이 블록 채굴에 대한 수수료를 받을 account 주소
        • 4) stateRoot : state 트리의 루트 노드 해시값(헤더에서 state 트리가 어떻게 저장되고, 이를 통해서 라이트 클라이언트들이 state를 어떻게 쉽게 입증하는지를 다시 생각해보자)
        • 5) transactionsRoot : 이 블록에 포함된 모든 트랜잭션을 포함한 트리의 루트 노드의 해시값
        • 6) receiptsRoot : 이 블록에서의 모든 트랜잭션의 receipt(일종의 거래 영수증)를 포함한 트리의 루트 노드의 해시값
        • 7) logsBloom : log 정보를 구성하는 bloom filter라는 자료 구조의 형태
        • 8) difficulty : 블록 생성 난이도
        • 9) number : 현재 블록의 count(제네시스 블록이 0일 때, 이 후 블록들에 대해서 이 값이 하나씩 증가)
        • 10) gasLimit : 블록 당 현재 gas 제한량
        • 11) gasUsed : 현재 블록에서 사용된 가스의 총량
        • 12) timestamp : 현재 블록 시작 시 unix 타임 스탬프
        • 13) mixHash : nonce와 더불어 현재 블록이 충분한 연산을 실행됐음을 입증하는 해시값(nonce를 조절하여 구한 유효한 범위 내의 해시값인 것 같다) 1
        • 4) nonce : mixHash와 더불어 현재 블록이 충분한 연산을 행했음을 입증하는 해시값(유효한 mixHash값을 찾았을 때의 nonce값을 말한다)
    • 블록 
    • ommers이더리움에서는 depth 1의 fork는 인정한다.origin chain의 block은 채굴당시에 채굴보상(2 ETH)와 트랜잭션 수수료(+Alpha)를 받는다.
    • ommers를 채굴한 노드는 채굴보상(1.75 ETH)만 보상받는다.
    •  
    • 이를 uncle block이라고 하고, ommers라고도 불린다.
    • ommer는 현재 블록의 부모와 동일한 부모를 두고 있는 블록

 

6. 트랜잭션 실행 (=State의 변화)

링크 참조: https://hersheythings.xyz/entry/ethtereumstructure#:~:text=6. 트랜잭션 실행 (=State의 변화)

 

7. TX Execution Model과 EVM

 

8. Mining : Proof of Work

'블록체인 > Ethereum' 카테고리의 다른 글

web3 사용법  (0) 2021.06.28

댓글