From 35785a8f9e4415ddf23faa48d26cd8d90f9cf326 Mon Sep 17 00:00:00 2001 From: Paladz Date: Mon, 9 Apr 2018 15:01:39 +0800 Subject: [PATCH] fix the store block header index bug (#559) --- database/leveldb/store.go | 2 +- database/leveldb/store_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 database/leveldb/store_test.go diff --git a/database/leveldb/store.go b/database/leveldb/store.go index 45a3faa5..7834a5c3 100644 --- a/database/leveldb/store.go +++ b/database/leveldb/store.go @@ -51,7 +51,7 @@ func calcBlockKey(hash *bc.Hash) []byte { func calcBlockHeaderKey(height uint64, hash *bc.Hash) []byte { buf := [8]byte{} - binary.LittleEndian.PutUint64(buf[:], height) + binary.BigEndian.PutUint64(buf[:], height) key := append(blockHeaderPrefix, buf[:]...) return append(key, hash.Bytes()...) } diff --git a/database/leveldb/store_test.go b/database/leveldb/store_test.go new file mode 100644 index 00000000..97e2e7b5 --- /dev/null +++ b/database/leveldb/store_test.go @@ -0,0 +1,48 @@ +package leveldb + +import ( + "os" + "testing" + + "github.com/bytom/config" + "github.com/bytom/protocol/bc" + + dbm "github.com/tendermint/tmlibs/db" +) + +func TestLoadBlockIndex(t *testing.T) { + defer os.RemoveAll("temp") + testDB := dbm.NewDB("testdb", "leveldb", "temp") + store := NewStore(testDB) + + block := config.GenerateGenesisBlock() + txStatus := bc.NewTransactionStatus() + + if err := store.SaveBlock(block, txStatus); err != nil { + t.Fatal(err) + } + + for block.Height <= 128 { + preHash := block.Hash() + block.PreviousBlockHash = preHash + block.Height += 1 + if err := store.SaveBlock(block, txStatus); err != nil { + t.Fatal(err) + } + + if block.Height%32 != 0 { + continue + } + + for i := uint64(0); i < block.Height/32; i++ { + block.Nonce += 1 + if err := store.SaveBlock(block, txStatus); err != nil { + t.Fatal(err) + } + } + } + + if _, err := store.LoadBlockIndex(); err != nil { + t.Fatal(err) + } +} -- 2.11.0