mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-04 04:04:00 +00:00
update hashing of empty inputs, and initial block LastResultsHash (#141)
This commit is contained in:
@@ -423,7 +423,7 @@ block.LastResultsHash == MerkleRoot([]ResponseDeliverTx)
|
||||
|
||||
`LastResultsHash` is the root hash of a Merkle tree built from `ResponseDeliverTx` responses (`Log`,`Info`, `Codespace` and `Events` fields are ignored).
|
||||
|
||||
The first block has `block.Header.ResultsHash == []byte{}`.
|
||||
The first block has `block.Header.ResultsHash == MerkleRoot(nil)`, i.e. the hash of an empty input, for RFC-6962 conformance.
|
||||
|
||||
## EvidenceHash
|
||||
|
||||
|
||||
@@ -216,6 +216,11 @@ h0 h1 h2 h3 h0 h1 h2 h3 h4 h5
|
||||
The function `MerkleRoot` is a simple recursive function defined as follows:
|
||||
|
||||
```go
|
||||
// SHA256([]byte{})
|
||||
func emptyHash() []byte {
|
||||
return tmhash.Sum([]byte{})
|
||||
}
|
||||
|
||||
// SHA256(0x00 || leaf)
|
||||
func leafHash(leaf []byte) []byte {
|
||||
return tmhash.Sum(append(0x00, leaf...))
|
||||
@@ -232,7 +237,7 @@ func getSplitPoint(k int) { ... }
|
||||
func MerkleRoot(items [][]byte) []byte{
|
||||
switch len(items) {
|
||||
case 0:
|
||||
return nil
|
||||
return empthHash()
|
||||
case 1:
|
||||
return leafHash(items[0])
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user