|
|
El blockchain esta hecho por una cadena de bloques. Ese cadena empieza con bloque 0 (cero), llamado Genesis, y sigue desde ahí aumentando +1 por bloque. Cada bloque en realidad es un *block header* con un raíz (`Root`), el `TxHash` y el `ReceiptHash` que son 3 "tries" (arboles) colgando abajo de cada *block header*.
|
|
|
|
|
|
El trie `Root` contiene el estado actual del blockchain. Si hay cambios en el *world state* (cualquier cambio en todo el blockchain), el `Root` va a apuntar a otro raíz que en el bloque anterior. Eso técnicamente significa que, si querés ver el estado del blockchain en, p.ej, bloque 5153 se hace eso leyendo el trie `Root` del bloque que esta situado 5153 bloques después del Genesis.
|
|
|
|
|
|
Como esta definido en `core/block.go`, un *block header* (cabeza de bloque) tiene el siguiente formato:
|
|
|
|
|
|
| **Tamaño** | **Nombre en Go** | **Tipo** | **Nombre en geth** |
|
|
|
|-------:|--------------|----------------|-------------------------|
|
|
|
| 64 | ParentHash | common.Hash | json:"parentHash" |
|
|
|
| 64 | UncleHash | common.Hash | json:"sha3Uncles" |
|
|
|
| 40 | Coinbase | common.Address | json:"miner" |
|
|
|
| 64 | Root | common.Hash | json:"stateRoot" |
|
|
|
| 64 | TxHash | common.Hash | json:"transactionsRoot" |
|
|
|
| 64 | ReceiptHash | common.Hash | json:"receiptsRoot" |
|
|
|
|256 | Bloom | [256]byte | json:"logsBloom" |
|
|
|
| 8 | Difficulty | int64 | json:"difficulty" |
|
|
|
| 8 | Number | int64 | json:"number" |
|
|
|
| 8 | GasLimit | uint64 | json:"gasLimit" |
|
|
|
| 8 | GasUsed | uint64 | json:"gasUsed" |
|
|
|
| 8 | Time | int64 | json:"timestamp" |
|
|
|
| 97[^1] | Extra | []byte | json:"extraData" |
|
|
|
| 64 | MixDigest | common.Hash | json:"mixHash" |
|
|
|
| 8 | Nonce | [8]byte | json:"nonce" |
|
|
|
|
|
|
[^1]: El único campo con un tamaño flexible es el `Extra`. Este compuesto por 32 bytes de Vanity + 65 bytes con la firma del bloque. Cada 30.000 bloques (un epoch), también tiene una lista (n * 64 bytes) de todos los selladores. |
|
|
\ No newline at end of file |