From dfedac499692d2f79f6938df4111ff75e8063334 Mon Sep 17 00:00:00 2001 From: Paladz Date: Sat, 24 Mar 2018 14:37:48 +0800 Subject: [PATCH] modify the folder struct (#476) --- account/accounts_test.go | 6 ++-- account/reserve_test.go | 8 ++--- asset/asset_test.go | 6 ++-- {blockchain/txdb => database/leveldb}/cache.go | 2 +- {blockchain/txdb => database/leveldb}/mainchain.go | 4 +-- .../txdb => database/leveldb}/mainchain_test.go | 2 +- {blockchain/txdb => database/leveldb}/store.go | 35 ++++++++-------------- {blockchain/txdb => database/leveldb}/utxo_view.go | 4 +-- .../txdb => database/leveldb}/utxo_view_test.go | 4 +-- .../txdb => database}/storage/storage.pb.go | 0 .../txdb => database}/storage/storage.proto | 0 .../txdb => database}/storage/utxo_entry.go | 0 database/store.go | 30 +++++++++++++++++++ node/node.go | 10 +++---- protocol/protocol.go | 30 +++---------------- protocol/state/utxo_view.go | 2 +- protocol/state/utxo_view_test.go | 2 +- protocol/txpool.go | 2 +- protocol/validation/validation.go | 6 +--- test/util.go | 4 +-- wallet/wallet_test.go | 6 ++-- 21 files changed, 79 insertions(+), 84 deletions(-) rename {blockchain/txdb => database/leveldb}/cache.go (98%) rename {blockchain/txdb => database/leveldb}/mainchain.go (97%) rename {blockchain/txdb => database/leveldb}/mainchain_test.go (98%) rename {blockchain/txdb => database/leveldb}/store.go (89%) rename {blockchain/txdb => database/leveldb}/utxo_view.go (96%) rename {blockchain/txdb => database/leveldb}/utxo_view_test.go (98%) rename {blockchain/txdb => database}/storage/storage.pb.go (100%) rename {blockchain/txdb => database}/storage/storage.proto (100%) rename {blockchain/txdb => database}/storage/utxo_entry.go (100%) create mode 100644 database/store.go diff --git a/account/accounts_test.go b/account/accounts_test.go index ec1765da..85f7988f 100644 --- a/account/accounts_test.go +++ b/account/accounts_test.go @@ -9,8 +9,8 @@ import ( dbm "github.com/tendermint/tmlibs/db" - "github.com/bytom/blockchain/txdb" "github.com/bytom/crypto/ed25519/chainkd" + "github.com/bytom/database/leveldb" "github.com/bytom/errors" "github.com/bytom/protocol" "github.com/bytom/protocol/bc" @@ -96,7 +96,7 @@ func TestUpdateAccountTags(t *testing.T) { testDB := dbm.NewDB("testdb", "leveldb", "temp") defer os.RemoveAll("temp") - store := txdb.NewStore(testDB) + store := leveldb.NewStore(testDB) txPool := protocol.NewTxPool() chain, err := protocol.NewChain(bc.Hash{}, store, txPool) if err != nil { @@ -193,7 +193,7 @@ func mockAccountManager(t *testing.T) *Manager { testDB := dbm.NewDB("testdb", "leveldb", "temp") defer os.RemoveAll("temp") - store := txdb.NewStore(testDB) + store := leveldb.NewStore(testDB) txPool := protocol.NewTxPool() chain, err := protocol.NewChain(bc.Hash{}, store, txPool) if err != nil { diff --git a/account/reserve_test.go b/account/reserve_test.go index cea0bd67..58438107 100644 --- a/account/reserve_test.go +++ b/account/reserve_test.go @@ -11,10 +11,10 @@ import ( dbm "github.com/tendermint/tmlibs/db" "github.com/bytom/blockchain/pseudohsm" - "github.com/bytom/blockchain/txdb" - "github.com/bytom/blockchain/txdb/storage" "github.com/bytom/consensus" "github.com/bytom/crypto/ed25519/chainkd" + "github.com/bytom/database/leveldb" + "github.com/bytom/database/storage" "github.com/bytom/protocol" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/state" @@ -73,7 +73,7 @@ func TestCancelReservation(t *testing.T) { view := state.NewUtxoViewpoint() view.Entries[utxoE.hash] = utxoE.utxoEntry - txdb.SaveUtxoView(batch, view) + leveldb.SaveUtxoView(batch, view) batch.Write() utxoDB := newReserver(chain, testDB) @@ -116,7 +116,7 @@ func TestCancelReservation(t *testing.T) { } func mockChain(testDB dbm.DB) (*protocol.Chain, error) { - store := txdb.NewStore(testDB) + store := leveldb.NewStore(testDB) txPool := protocol.NewTxPool() chain, err := protocol.NewChain(bc.Hash{}, store, txPool) if err != nil { diff --git a/asset/asset_test.go b/asset/asset_test.go index 88eca729..375c12ce 100644 --- a/asset/asset_test.go +++ b/asset/asset_test.go @@ -9,8 +9,8 @@ import ( dbm "github.com/tendermint/tmlibs/db" - "github.com/bytom/blockchain/txdb" "github.com/bytom/crypto/ed25519/chainkd" + "github.com/bytom/database/leveldb" "github.com/bytom/protocol" "github.com/bytom/protocol/bc" "github.com/bytom/testutil" @@ -63,7 +63,7 @@ func TestUpdateAssetTags(t *testing.T) { testDB := dbm.NewDB("testdb", "leveldb", "temp") defer os.RemoveAll("temp") - store := txdb.NewStore(testDB) + store := leveldb.NewStore(testDB) txPool := protocol.NewTxPool() chain, err := protocol.NewChain(bc.Hash{}, store, txPool) if err != nil { @@ -121,7 +121,7 @@ func TestUpdateAssetTags(t *testing.T) { } func mockChain(testDB dbm.DB) (*protocol.Chain, error) { - store := txdb.NewStore(testDB) + store := leveldb.NewStore(testDB) txPool := protocol.NewTxPool() chain, err := protocol.NewChain(bc.Hash{}, store, txPool) if err != nil { diff --git a/blockchain/txdb/cache.go b/database/leveldb/cache.go similarity index 98% rename from blockchain/txdb/cache.go rename to database/leveldb/cache.go index 1164ff5a..1c4f6e68 100644 --- a/blockchain/txdb/cache.go +++ b/database/leveldb/cache.go @@ -1,4 +1,4 @@ -package txdb +package leveldb import ( "fmt" diff --git a/blockchain/txdb/mainchain.go b/database/leveldb/mainchain.go similarity index 97% rename from blockchain/txdb/mainchain.go rename to database/leveldb/mainchain.go index 28e3cf0f..44774393 100644 --- a/blockchain/txdb/mainchain.go +++ b/database/leveldb/mainchain.go @@ -1,4 +1,4 @@ -package txdb +package leveldb import ( "bytes" @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/proto" dbm "github.com/tendermint/tmlibs/db" - "github.com/bytom/blockchain/txdb/storage" + "github.com/bytom/database/storage" "github.com/bytom/errors" "github.com/bytom/protocol/bc" ) diff --git a/blockchain/txdb/mainchain_test.go b/database/leveldb/mainchain_test.go similarity index 98% rename from blockchain/txdb/mainchain_test.go rename to database/leveldb/mainchain_test.go index 6fcd1986..bc721083 100644 --- a/blockchain/txdb/mainchain_test.go +++ b/database/leveldb/mainchain_test.go @@ -1,4 +1,4 @@ -package txdb +package leveldb import ( "bytes" diff --git a/blockchain/txdb/store.go b/database/leveldb/store.go similarity index 89% rename from blockchain/txdb/store.go rename to database/leveldb/store.go index 8ed8bef0..1f3db46c 100644 --- a/blockchain/txdb/store.go +++ b/database/leveldb/store.go @@ -1,4 +1,4 @@ -package txdb +package leveldb import ( "encoding/json" @@ -7,7 +7,8 @@ import ( "github.com/tendermint/tmlibs/common" dbm "github.com/tendermint/tmlibs/db" - "github.com/bytom/blockchain/txdb/storage" + "github.com/bytom/database" + "github.com/bytom/database/storage" "github.com/bytom/errors" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/bc/types" @@ -22,28 +23,14 @@ var ( txStatusPrefix = []byte("BTS:") ) -// BlockStoreStateJSON represents the core's db status -type BlockStoreStateJSON struct { - Height uint64 - Hash *bc.Hash -} - -func (bsj BlockStoreStateJSON) save(batch dbm.Batch) { - bytes, err := json.Marshal(bsj) - if err != nil { - common.PanicSanity(common.Fmt("Could not marshal state bytes: %v", err)) - } - batch.Set(blockStoreKey, bytes) -} - -func loadBlockStoreStateJSON(db dbm.DB) BlockStoreStateJSON { +func loadBlockStoreStateJSON(db dbm.DB) database.BlockStoreStateJSON { bytes := db.Get(blockStoreKey) if bytes == nil { - return BlockStoreStateJSON{ + return database.BlockStoreStateJSON{ Height: 0, } } - bsj := BlockStoreStateJSON{} + bsj := database.BlockStoreStateJSON{} if err := json.Unmarshal(bytes, &bsj); err != nil { common.PanicCrisis(common.Fmt("Could not unmarshal bytes: %X", bytes)) } @@ -159,7 +146,7 @@ func (s *Store) GetTransactionStatus(hash *bc.Hash) (*bc.TransactionStatus, erro } // GetStoreStatus return the BlockStoreStateJSON -func (s *Store) GetStoreStatus() BlockStoreStateJSON { +func (s *Store) GetStoreStatus() database.BlockStoreStateJSON { return loadBlockStoreStateJSON(s.db) } @@ -213,9 +200,13 @@ func (s *Store) SaveChainStatus(block *types.Block, view *state.UtxoViewpoint, m return err } - BlockStoreStateJSON{Height: block.Height, Hash: &hash}.save(batch) - batch.Write() + bytes, err := json.Marshal(database.BlockStoreStateJSON{Height: block.Height, Hash: &hash}) + if err != nil { + return err + } + batch.Set(blockStoreKey, bytes) + batch.Write() cleanMainchainDB(s.db, &hash) return nil } diff --git a/blockchain/txdb/utxo_view.go b/database/leveldb/utxo_view.go similarity index 96% rename from blockchain/txdb/utxo_view.go rename to database/leveldb/utxo_view.go index acf4971d..2a566132 100644 --- a/blockchain/txdb/utxo_view.go +++ b/database/leveldb/utxo_view.go @@ -1,9 +1,9 @@ -package txdb +package leveldb import ( dbm "github.com/tendermint/tmlibs/db" - "github.com/bytom/blockchain/txdb/storage" + "github.com/bytom/database/storage" "github.com/bytom/errors" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/state" diff --git a/blockchain/txdb/utxo_view_test.go b/database/leveldb/utxo_view_test.go similarity index 98% rename from blockchain/txdb/utxo_view_test.go rename to database/leveldb/utxo_view_test.go index a4064958..8e456064 100644 --- a/blockchain/txdb/utxo_view_test.go +++ b/database/leveldb/utxo_view_test.go @@ -1,4 +1,4 @@ -package txdb +package leveldb import ( "os" @@ -6,7 +6,7 @@ import ( dbm "github.com/tendermint/tmlibs/db" - "github.com/bytom/blockchain/txdb/storage" + "github.com/bytom/database/storage" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/state" "github.com/bytom/testutil" diff --git a/blockchain/txdb/storage/storage.pb.go b/database/storage/storage.pb.go similarity index 100% rename from blockchain/txdb/storage/storage.pb.go rename to database/storage/storage.pb.go diff --git a/blockchain/txdb/storage/storage.proto b/database/storage/storage.proto similarity index 100% rename from blockchain/txdb/storage/storage.proto rename to database/storage/storage.proto diff --git a/blockchain/txdb/storage/utxo_entry.go b/database/storage/utxo_entry.go similarity index 100% rename from blockchain/txdb/storage/utxo_entry.go rename to database/storage/utxo_entry.go diff --git a/database/store.go b/database/store.go new file mode 100644 index 00000000..bbe13fcc --- /dev/null +++ b/database/store.go @@ -0,0 +1,30 @@ +package database + +import ( + "github.com/bytom/database/storage" + "github.com/bytom/protocol/bc" + "github.com/bytom/protocol/bc/types" + "github.com/bytom/protocol/state" +) + +// Store provides storage interface for blockchain data +type Store interface { + BlockExist(*bc.Hash) bool + + GetBlock(*bc.Hash) (*types.Block, error) + GetMainchain(*bc.Hash) (map[uint64]*bc.Hash, error) + GetStoreStatus() BlockStoreStateJSON + GetSeed(*bc.Hash) (*bc.Hash, error) + GetTransactionStatus(*bc.Hash) (*bc.TransactionStatus, error) + GetTransactionsUtxo(*state.UtxoViewpoint, []*bc.Tx) error + GetUtxo(*bc.Hash) (*storage.UtxoEntry, error) + + SaveBlock(*types.Block, *bc.TransactionStatus, *bc.Hash) error + SaveChainStatus(*types.Block, *state.UtxoViewpoint, map[uint64]*bc.Hash) error +} + +// BlockStoreStateJSON represents the core's db status +type BlockStoreStateJSON struct { + Height uint64 + Hash *bc.Hash +} diff --git a/node/node.go b/node/node.go index 59457f73..6236fc8e 100755 --- a/node/node.go +++ b/node/node.go @@ -13,22 +13,22 @@ import ( cmn "github.com/tendermint/tmlibs/common" dbm "github.com/tendermint/tmlibs/db" - "github.com/bytom/crypto/ed25519/chainkd" - bc "github.com/bytom/blockchain" "github.com/bytom/accesstoken" "github.com/bytom/account" "github.com/bytom/asset" + bc "github.com/bytom/blockchain" "github.com/bytom/blockchain/pseudohsm" - "github.com/bytom/blockchain/txdb" "github.com/bytom/blockchain/txfeed" - w "github.com/bytom/wallet" cfg "github.com/bytom/config" + "github.com/bytom/crypto/ed25519/chainkd" + "github.com/bytom/database/leveldb" "github.com/bytom/env" "github.com/bytom/p2p" "github.com/bytom/protocol" "github.com/bytom/types" "github.com/bytom/util/browser" "github.com/bytom/version" + w "github.com/bytom/wallet" ) const ( @@ -58,7 +58,7 @@ func NewNode(config *cfg.Config) *Node { // Get store txDB := dbm.NewDB("txdb", config.DBBackend, config.DBDir()) - store := txdb.NewStore(txDB) + store := leveldb.NewStore(txDB) tokenDB := dbm.NewDB("accesstoken", config.DBBackend, config.DBDir()) accessTokens := accesstoken.NewStore(tokenDB) diff --git a/protocol/protocol.go b/protocol/protocol.go index 5092ee25..38f405df 100755 --- a/protocol/protocol.go +++ b/protocol/protocol.go @@ -5,9 +5,9 @@ import ( "sync" "time" - "github.com/bytom/blockchain/txdb" - "github.com/bytom/blockchain/txdb/storage" "github.com/bytom/consensus" + "github.com/bytom/database" + "github.com/bytom/database/storage" "github.com/bytom/errors" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/bc/types" @@ -23,28 +23,6 @@ var ( ErrTheDistantFuture = errors.New("block height too far in future") ) -// Store provides storage for blockchain data: blocks and state tree -// snapshots. -// -// Note, this is different from a state snapshot. A state snapshot -// provides access to the state at a given point in time -- outputs -// and issuance memory. The Chain type uses Store to load state -// from storage and persist validated data. -type Store interface { - BlockExist(*bc.Hash) bool - - GetBlock(*bc.Hash) (*types.Block, error) - GetMainchain(*bc.Hash) (map[uint64]*bc.Hash, error) - GetStoreStatus() txdb.BlockStoreStateJSON - GetSeed(*bc.Hash) (*bc.Hash, error) - GetTransactionStatus(*bc.Hash) (*bc.TransactionStatus, error) - GetTransactionsUtxo(*state.UtxoViewpoint, []*bc.Tx) error - GetUtxo(*bc.Hash) (*storage.UtxoEntry, error) - - SaveBlock(*types.Block, *bc.TransactionStatus, *bc.Hash) error - SaveChainStatus(*types.Block, *state.UtxoViewpoint, map[uint64]*bc.Hash) error -} - // OrphanManage is use to handle all the orphan block type OrphanManage struct { //TODO: add orphan cached block limit @@ -132,11 +110,11 @@ type Chain struct { hash *bc.Hash mainChain map[uint64]*bc.Hash } - store Store + store database.Store } // NewChain returns a new Chain using store as the underlying storage. -func NewChain(initialBlockHash bc.Hash, store Store, txPool *TxPool) (*Chain, error) { +func NewChain(initialBlockHash bc.Hash, store database.Store, txPool *TxPool) (*Chain, error) { c := &Chain{ InitialBlockHash: initialBlockHash, orphanManage: NewOrphanManage(), diff --git a/protocol/state/utxo_view.go b/protocol/state/utxo_view.go index 25cd83b1..94ffb114 100644 --- a/protocol/state/utxo_view.go +++ b/protocol/state/utxo_view.go @@ -3,8 +3,8 @@ package state import ( "errors" - "github.com/bytom/blockchain/txdb/storage" "github.com/bytom/consensus" + "github.com/bytom/database/storage" "github.com/bytom/protocol/bc" ) diff --git a/protocol/state/utxo_view_test.go b/protocol/state/utxo_view_test.go index 09a09b4f..3780ab3b 100644 --- a/protocol/state/utxo_view_test.go +++ b/protocol/state/utxo_view_test.go @@ -3,7 +3,7 @@ package state import ( "testing" - "github.com/bytom/blockchain/txdb/storage" + "github.com/bytom/database/storage" "github.com/bytom/protocol/bc" "github.com/bytom/testutil" ) diff --git a/protocol/txpool.go b/protocol/txpool.go index ca390577..c177cef5 100644 --- a/protocol/txpool.go +++ b/protocol/txpool.go @@ -8,8 +8,8 @@ import ( "github.com/golang/groupcache/lru" - "github.com/bytom/blockchain/txdb/storage" "github.com/bytom/consensus" + "github.com/bytom/database/storage" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/bc/types" "github.com/bytom/protocol/state" diff --git a/protocol/validation/validation.go b/protocol/validation/validation.go index 6e3bd881..85462243 100644 --- a/protocol/validation/validation.go +++ b/protocol/validation/validation.go @@ -554,8 +554,7 @@ func ValidateBlock(b, prev *bc.Block, seed *bc.Hash) error { if prev == nil { return errors.WithDetailf(errNoPrevBlock, "height %d", b.Height) } - err := validateBlockAgainstPrev(b, prev) - if err != nil { + if err := validateBlockAgainstPrev(b, prev); err != nil { return err } } @@ -642,9 +641,6 @@ func validateBlockAgainstPrev(b, prev *bc.Block) error { if prev.ID != *b.PreviousBlockId { return errors.WithDetailf(errMismatchedBlock, "previous block ID %x, current block wants %x", prev.ID.Bytes(), b.PreviousBlockId.Bytes()) } - if b.Timestamp <= prev.Timestamp { - return errors.WithDetailf(errMisorderedBlockTime, "previous block time %d, current block time %d", prev.Timestamp, b.Timestamp) - } return nil } diff --git a/test/util.go b/test/util.go index a89a4bf9..62767080 100644 --- a/test/util.go +++ b/test/util.go @@ -9,10 +9,10 @@ import ( "github.com/bytom/account" "github.com/bytom/blockchain/pseudohsm" "github.com/bytom/blockchain/txbuilder" - "github.com/bytom/blockchain/txdb" cfg "github.com/bytom/config" "github.com/bytom/consensus" "github.com/bytom/crypto/ed25519/chainkd" + "github.com/bytom/database/leveldb" "github.com/bytom/protocol" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/bc/types" @@ -25,7 +25,7 @@ func MockTxPool() *protocol.TxPool { } func MockChain(testDB dbm.DB) (*protocol.Chain, error) { - store := txdb.NewStore(testDB) + store := leveldb.NewStore(testDB) txPool := MockTxPool() genesisBlock := cfg.GenerateGenesisBlock() chain, err := protocol.NewChain(genesisBlock.Hash(), store, txPool) diff --git a/wallet/wallet_test.go b/wallet/wallet_test.go index 2eff5f13..6e486a78 100755 --- a/wallet/wallet_test.go +++ b/wallet/wallet_test.go @@ -14,11 +14,11 @@ import ( "github.com/bytom/asset" "github.com/bytom/blockchain/pseudohsm" "github.com/bytom/blockchain/txbuilder" - "github.com/bytom/blockchain/txdb" cfg "github.com/bytom/config" "github.com/bytom/consensus" "github.com/bytom/crypto/ed25519/chainkd" "github.com/bytom/crypto/sha3pool" + "github.com/bytom/database/leveldb" "github.com/bytom/protocol" "github.com/bytom/protocol/bc" "github.com/bytom/protocol/bc/types" @@ -34,7 +34,7 @@ func TestWalletUpdate(t *testing.T) { testDB := dbm.NewDB("testdb", "leveldb", "temp") defer os.RemoveAll("temp") - store := txdb.NewStore(testDB) + store := leveldb.NewStore(testDB) txPool := protocol.NewTxPool() chain, err := protocol.NewChain(bc.Hash{}, store, txPool) @@ -108,7 +108,7 @@ func TestExportAndImportPrivKey(t *testing.T) { testDB := dbm.NewDB("testdb", "leveldb", "temp") defer os.RemoveAll("temp") - store := txdb.NewStore(testDB) + store := leveldb.NewStore(testDB) txPool := protocol.NewTxPool() chain, err := protocol.NewChain(bc.Hash{}, store, txPool) -- 2.11.0