- 블록체인이지만 이더리움을 제외한 다른 것들은 생각하지 말자.
- 아래 블로그 글을 공부하고 정리한 내용입니다.
- https://hersheythings.xyz/entry/ethtereumstructure
1. Accounts ( === 주소 ==? 지갑 )
- 사용자 계정 (EOA: Externally Owned Account)
- 개인키를 이용하여 제어가 가능한 계정
- 스마트 컨트랙트 계정 (CA: Contract Account)
- 컴파일된 코드의 정보를 담은 주소
- truffle로 배포한 컨트랙트의 정보
2. State
이더리움의 Global State는 어카운트(EOA, CA)의 주소와 어카운트 간의 (key, value) 맵핑으로 구성된다.
블록체인이라는 데이터베이스의 상태값을 나타낸다.
- State Trie : 해당 블록을 통해서 변경된 어카운트 정보 저장.
- Transaction Trie : 현재 블록의 트랜잭션 정보 저장.
- Receipts Trie : 현재 블록의 receipt(거래 영수증) 정보 저장.
3. Gas and Payment
- 단위: ether = gas = wei = gwei
- 수수료 계산gas price 단위: gwei
- gas price가 다른 경우 트랜잭션 비교 https://etherscan.io/tx/0x77b14bbaa4503fe3f1f5e3f28a14c6c953f65077e70801f5d36a190e6ae5d921 https://etherscan.io/tx/0x9bfca0015d8e1e86658b1f73e8b5c7a0edebd1ec3bae2e6eda8b7587f5708467
- gas limit이 다른 경우 트랜잭션 비교 https://etherscan.io/tx/0x04c0c706f333ef48c1892e04b1db5bd53a261ecbc01f160223f438ebf8835dfa https://etherscan.io/tx/0x9bfca0015d8e1e86658b1f73e8b5c7a0edebd1ec3bae2e6eda8b7587f5708467
- 트랜잭션 성공의 경우연산1에 50 사용남은 170은 반환
- 연산2에 30 사용
- 250 가스 사용량 제출
- 트랜잭션 실패의 경우 연산에 가스를 소모 중이전 연산을 롤백한다.
- 남은 가스가 없을 경우 이벤트 발생
- 250 가스 사용량 제출
- 그래서 가스는 어디로 가는가?
- 연산을 수행할때마다 채굴자에게 넘어가지는 않는다.
- Operation 별 가스 사용량
- EIP 150 스펙 정의: https://docs.google.com/spreadsheets/d/1n6mRqkBz3iWcOlRem_mO09GtSKEKrAsfO7Frgx18pNU/edit#gid=0
- gas limit 단위: UNIT
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의 변화)
- 트랜잭션의 특징
- https://jerryjerryjerry.tistory.com/48
- mempool
- 블록화 되어있지 않은 트랜잭션의 집합.
- pennding 트랜잭션의 집합.
7. TX Execution Model과 EVM
8. Mining : Proof of Work
댓글