From 0826bd64ff765250ff5a4b2448eadc98d3285c03 Mon Sep 17 00:00:00 2001 From: Sonic Date: Fri, 18 Jan 2019 11:55:51 +0800 Subject: core, dex: use block hash as witness data (#160) Using only state root and receipt root as witness data can not protect other fields in block header, ex: bloom, difficulty, gas limit, gas used... So that everyone can manipulate these fields to create as many valid blocks at the same height as he want. Although this will not effect the state, one can spam us when syncing. Using block hash as witness data can solve this. --- core/blockchain.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'core/blockchain.go') diff --git a/core/blockchain.go b/core/blockchain.go index 80d11becd..2567505b8 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -1834,13 +1834,13 @@ func (bc *BlockChain) processBlock( ) bstart := time.Now() - var witnessData types.WitnessData - if err := rlp.Decode(bytes.NewReader(witness.Data), &witnessData); err != nil { + var witnessBlockHash common.Hash + if err := rlp.Decode(bytes.NewReader(witness.Data), &witnessBlockHash); err != nil { log.Error("Witness rlp decode failed", "error", err) return nil, nil, nil, fmt.Errorf("rlp decode fail: %v", err) } - if err := bc.Validator().ValidateWitnessData(witness.Height, witnessData); err != nil { + if err := bc.Validator().ValidateWitnessData(witness.Height, witnessBlockHash); err != nil { return nil, nil, nil, fmt.Errorf("validate witness data error: %v", err) } -- cgit v1.2.3