update hashing of empty inputs, and initial block LastResultsHash (#141)

This commit is contained in:
Erik Grinaker
2020-08-11 16:52:23 +02:00
committed by GitHub
parent 95acfdead1
commit 89ac8f6e62
2 changed files with 7 additions and 2 deletions

View File

@@ -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

View File

@@ -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: