Commit 8653db6d authored by Matthew Wampler-Doty's avatar Matthew Wampler-Doty

Introducign MixDigest and SeedHash

parent 5912f0a8
...@@ -41,12 +41,16 @@ type Header struct { ...@@ -41,12 +41,16 @@ type Header struct {
Extra string Extra string
// Block Nonce for verification // Block Nonce for verification
Nonce ethutil.Bytes Nonce ethutil.Bytes
// Mix digest for quick checking to prevent DOS
MixDigest ethutil.Bytes
// SeedHash used for light client verification
SeedHash ethutil.Bytes
} }
func (self *Header) rlpData(withNonce bool) []interface{} { func (self *Header) rlpData(withNonce bool) []interface{} {
fields := []interface{}{self.ParentHash, self.UncleHash, self.Coinbase, self.Root, self.TxHash, self.ReceiptHash, self.Bloom, self.Difficulty, self.Number, self.GasLimit, self.GasUsed, self.Time, self.Extra} fields := []interface{}{self.ParentHash, self.UncleHash, self.Coinbase, self.Root, self.TxHash, self.ReceiptHash, self.Bloom, self.Difficulty, self.Number, self.GasLimit, self.GasUsed, self.Time, self.Extra}
if withNonce { if withNonce {
fields = append(fields, self.Nonce) fields = append(fields, self.Nonce, self.MixDigest, self.SeedHash)
} }
return fields return fields
...@@ -176,6 +180,8 @@ func (self *Block) RlpDataForStorage() interface{} { ...@@ -176,6 +180,8 @@ func (self *Block) RlpDataForStorage() interface{} {
// Header accessors (add as you need them) // Header accessors (add as you need them)
func (self *Block) Number() *big.Int { return self.header.Number } func (self *Block) Number() *big.Int { return self.header.Number }
func (self *Block) NumberU64() uint64 { return self.header.Number.Uint64() } func (self *Block) NumberU64() uint64 { return self.header.Number.Uint64() }
func (self *Block) MixDigest() []byte { return self.header.MixDigest }
func (self *Block) SeedHash() []byte { return self.header.SeedHash }
func (self *Block) Nonce() []byte { return self.header.Nonce } func (self *Block) Nonce() []byte { return self.header.Nonce }
func (self *Block) Bloom() []byte { return self.header.Bloom } func (self *Block) Bloom() []byte { return self.header.Bloom }
func (self *Block) Coinbase() []byte { return self.header.Coinbase } func (self *Block) Coinbase() []byte { return self.header.Coinbase }
...@@ -200,7 +206,6 @@ func (self *Block) GetUncle(i int) *Header { ...@@ -200,7 +206,6 @@ func (self *Block) GetUncle(i int) *Header {
// Implement pow.Block // Implement pow.Block
func (self *Block) Difficulty() *big.Int { return self.header.Difficulty } func (self *Block) Difficulty() *big.Int { return self.header.Difficulty }
func (self *Block) N() []byte { return self.header.Nonce }
func (self *Block) HashNoNonce() []byte { return self.header.HashNoNonce() } func (self *Block) HashNoNonce() []byte { return self.header.HashNoNonce() }
func (self *Block) Hash() []byte { func (self *Block) Hash() []byte {
......
...@@ -5,6 +5,6 @@ import "math/big" ...@@ -5,6 +5,6 @@ import "math/big"
type Block interface { type Block interface {
Difficulty() *big.Int Difficulty() *big.Int
HashNoNonce() []byte HashNoNonce() []byte
N() []byte Nonce() []byte
Number() *big.Int Number() *big.Int
} }
...@@ -96,5 +96,5 @@ func verify(hash []byte, diff *big.Int, nonce []byte) bool { ...@@ -96,5 +96,5 @@ func verify(hash []byte, diff *big.Int, nonce []byte) bool {
} }
func Verify(block pow.Block) bool { func Verify(block pow.Block) bool {
return verify(block.HashNoNonce(), block.Difficulty(), block.N()) return verify(block.HashNoNonce(), block.Difficulty(), block.Nonce())
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment