aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/types/block.go5
-rw-r--r--core/types/block_test.go16
2 files changed, 20 insertions, 1 deletions
diff --git a/core/types/block.go b/core/types/block.go
index d611885f1..f754c3c48 100644
--- a/core/types/block.go
+++ b/core/types/block.go
@@ -34,7 +34,7 @@ import (
var (
EmptyRootHash = DeriveSha(Transactions{})
- EmptyUncleHash = CalcUncleHash(nil)
+ EmptyUncleHash = rlpHash([]*Header(nil))
)
// A BlockNonce is a 64-bit hash which proves (combined with the
@@ -324,6 +324,9 @@ func (c *writeCounter) Write(b []byte) (int, error) {
}
func CalcUncleHash(uncles []*Header) common.Hash {
+ if len(uncles) == 0 {
+ return EmptyUncleHash
+ }
return rlpHash(uncles)
}
diff --git a/core/types/block_test.go b/core/types/block_test.go
index 2576f2fbc..bdd0b6571 100644
--- a/core/types/block_test.go
+++ b/core/types/block_test.go
@@ -68,3 +68,19 @@ func TestBlockEncoding(t *testing.T) {
t.Errorf("encoded block mismatch:\ngot: %x\nwant: %x", ourBlockEnc, blockEnc)
}
}
+
+func TestUncleHash(t *testing.T) {
+ uncles := make([]*Header, 0)
+ h := CalcUncleHash(uncles)
+ exp := common.HexToHash("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347")
+ if h != exp {
+ t.Fatalf("empty uncle hash is wrong, got %x != %x", h, exp)
+ }
+}
+func BenchmarkUncleHash(b *testing.B) {
+ uncles := make([]*Header, 0)
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ CalcUncleHash(uncles)
+ }
+}