4 Blocks, State and Transactions
4.1. World State
(1) The world state (state)
- Addr(160bits)와 계정 상태(RLP로 직렬화된 데이터 구조)의 매핑
- 블록체인에 저장되지 않지만, 구현체는 수정된 Merkle Patricia tree에서 이 매핑을 유지할 것으로 가정
- 트리에서 바이트 배열과 바이트 배열을 유지하는 데이터베이스 백엔드 필요 -> state database
- 루트 노드는 암호화적으로 모든 내부 데이터에 의존하며, 따라서 해시는 전체 시스템 상태에 대한 보안 ID로 사용될 수 있음
- 불변 데이터 구조, 루트 해시를 그에 따라 변경하여 모든 이전 상태를 호출할 수 있음
(2) World State의 네가지 구성 필드
- nonce: 이 계정에 의해 만들어진 계약 생성의 수
- balance: 이 주소가 소유한 Wei 수와 동일한 스칼라 값
- storageRoot: 계정의 저장 내용(256비트 정수 값 사이의 매핑)을 인코딩하는 Merkle Patricia 트리의 루트 노드의 256비트 해시
- codeHash: 이 계정의 EVM 코드의 해시, 이 주소가 메시지 호출을 받았을 때 실행되는 코드
- 이러한 모든 코드 조각은 나중에 검색할 수 있도록 해당 해시 아래의 상태 데이터베이스에 포함됨
- 해시는 공식적으로 β[a]c로 표시되며, 따라서 KEC(b) = β[a]c로 표시
4.2. The Tracsaction
(1) A transaction
- 행위자가 이더리움의 범위에 대해 외부에서 구성한 암호화 서명된 단일 명령어
- 외부 행위자는 인간으로 가정하지만 소프트웨어 도구는 구축과 보급에 사용
- 트랜잭션의 두 타입 -> 메시지 호출을 일으키는 트랜잭션과 관련 코드로 새 계정을 만드는 트랜잭션
- 두 타입의 트랜잭션 모두 공통 필드를 가짐
(2) Transactions의 구성 필드
- nonce: 보낸 사람이 보낸 트랜잭션 수와 동일한 스칼라 값 Tn
- gasPrice: 거래에 의해 발생하는 모든 비용에 대해 단위 가스 당 지급되는 Wei 수 Tp
- gasLimit: 이 트랜잭션을 실행하는 데 사용해야 하는 최대 가스 양, 미리 지불되어야 하며 늘릴 수 없음 Tg
- to: 계약 작성 트랜잭션의 경우 여기서 B0의 유일한 멤버를 나타내기 위해 사용되는 160bits 주소 Tt
- value: 메시지 통화의 수신자에게 전송될 Wei의 수 Tv
- 공식적으로는 TV. v, r, s: 거래의 서명에 해당하며 거래의 발신자를 결정하는 데 사용되는 값
(3) 이외 필드
- init: 계약 작성 거래시, 계정 초기화 절차를 위한 EVM 코드를 지정하는 무제한 크기의 바이트 배열
- 계정이 메시지 호출을 받을 때 마다 실행되는 두번째 EVM 코드 조각
- init은 계정 생성 시 한 번만 실행되며 이후 즉시 삭제됨
- data: 메시지 통화 트랜잭션 시, 메시지 호출의 입력 데이터를 지정하는 무제한 크기의 바이트 배열 Td
- 트랜잭션의 해시를 서명할 기준으로 사용
- T(S)
4.3. The Block
(1) The Block
- 트랜잭션에 해당하는 정보와 함께 관련 정보(블록 헤더라고 함)의 집합
- 블록 헤더에는 다음과 같은 내용이 포함됨
(2)The Block headers
- parentHash: 부모 블록의 헤더 전체 256비트 Hp
- ommersHash: 오머 목록 부분 Keccak 256비트 Ho
- beneficiary: 이 블록의 성공적인 채굴에서 수집된 모든 수수료가 전송되는 160비트 주소
- stateRoot: 모든 트랜잭션이 실행되고 최종화가 적용된 후 상태 트리의 루트 노드의 Keccak 256비트 해시
- transactionsRoot: 루트 노드의 Keccak 256비트 -> 해시는 블록의 트랜잭션 목록 부분에서 각 트랜잭션을 채움
- receiptsRoot: 루트 노드의 Keccak 256비트 -> 해시는 블록의 트랜잭션 목록 부분에서 각 트랜잭션의 수신으로 채움
- logsBloom: 각 로그 항목에 포함된 색인 가능한 정보로 구성
- difficulty: 이 블록의 난이도에 해당하는 스칼라 값
- number: 상위 블록의 수
- gasLimit: 블록당 가스 소비의 현재 한계
- gasUsed: 이 블록의 거래에 사용된 총 가스
- timestamp: 블록의 시작 시 유닉스 시간
- extraData: 이 블록과 관련된 데이터를 포함하는 임의 바이트 배열 -> 32바이트 이하
- mixHash: nonce와 결합된 256비트 해시 -> 블록에 대해 충분한 양의 계산이 수행되었음을 증명
-nonce: 믹스해시와 결합된 64비트 값 -> 이 블록에서 충분한 양의 계산이 수행되었음을 증명