• R/O
  • HTTP
  • SSH
  • HTTPS

bytom: Commit

Official Go implementation of the Bytom protocol


Commit MetaInfo

Revision2eccb08bff712f0e765e41c06c04200348f7ecdf (tree)
Zeit2021-06-18 19:00:50
AutorPaladz <yzhu101@uott...>
CommiterGitHub

Log Message

Merge branch 'btm2.0' into remove_pop_int64

Ändern Zusammenfassung

Diff

--- a/database/store.go
+++ b/database/store.go
@@ -196,7 +196,7 @@ func (s *Store) GetStoreStatus() *protocol.BlockStoreState {
196196 }
197197
198198 // SaveChainStatus save the core's newest status && delete old status
199-func (s *Store) SaveChainStatus(blockHeader, finalizedBlockHeader *types.BlockHeader, mainBlockHeaders []*types.BlockHeader, view *state.UtxoViewpoint, contractView *state.ContractViewpoint) error {
199+func (s *Store) SaveChainStatus(blockHeader *types.BlockHeader, mainBlockHeaders []*types.BlockHeader, view *state.UtxoViewpoint, contractView *state.ContractViewpoint, finalizedHeight uint64, finalizedHash *bc.Hash) error {
200200 batch := s.db.NewBatch()
201201 if err := saveUtxoView(batch, view); err != nil {
202202 return err
@@ -211,13 +211,12 @@ func (s *Store) SaveChainStatus(blockHeader, finalizedBlockHeader *types.BlockHe
211211 }
212212
213213 blockHeaderHash := blockHeader.Hash()
214- finalizedHash := finalizedBlockHeader.Hash()
215214 bytes, err := json.Marshal(
216215 protocol.BlockStoreState{
217216 Height: blockHeader.Height,
218217 Hash: &blockHeaderHash,
219- FinalizedHeight: finalizedBlockHeader.Height,
220- FinalizedHash: &finalizedHash,
218+ FinalizedHeight: finalizedHeight,
219+ FinalizedHash: finalizedHash,
221220 })
222221 if err != nil {
223222 return err
--- a/database/store_test.go
+++ b/database/store_test.go
@@ -30,11 +30,11 @@ func TestSaveChainStatus(t *testing.T) {
3030 }
3131
3232 contractView := state.NewContractViewpoint()
33- if err := store.SaveChainStatus(blockHeader, blockHeader, []*types.BlockHeader{blockHeader}, view, contractView); err != nil {
33+ if err := store.SaveChainStatus(blockHeader, []*types.BlockHeader{blockHeader}, view, contractView, 0, &bc.Hash{}); err != nil {
3434 t.Fatal(err)
3535 }
3636
37- expectStatus := &protocol.BlockStoreState{Height: blockHeader.Height, Hash: &blockHash, FinalizedHeight: blockHeader.Height, FinalizedHash: &blockHash}
37+ expectStatus := &protocol.BlockStoreState{Height: blockHeader.Height, Hash: &blockHash, FinalizedHeight: 0, FinalizedHash: &bc.Hash{}}
3838 if !testutil.DeepEqual(store.GetStoreStatus(), expectStatus) {
3939 t.Errorf("got block status:%v, expect block status:%v", store.GetStoreStatus(), expectStatus)
4040 }
--- a/protocol/auth_verification_test.go
+++ b/protocol/auth_verification_test.go
@@ -108,7 +108,7 @@ func (s *mockStore2) GetMainChainHash(uint64) (*bc.Hash, error) {
108108 func (s *mockStore2) GetContract([32]byte) ([]byte, error) { return nil, nil }
109109 func (s *mockStore2) SaveBlock(*types.Block) error { return nil }
110110 func (s *mockStore2) SaveBlockHeader(*types.BlockHeader) error { return nil }
111-func (s *mockStore2) SaveChainStatus(*types.BlockHeader, *types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, *state.ContractViewpoint) error {
111+func (s *mockStore2) SaveChainStatus(*types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, *state.ContractViewpoint, uint64, *bc.Hash) error {
112112 return nil
113113 }
114114 func (s *mockStore2) GetBlockHeader(hash *bc.Hash) (*types.BlockHeader, error) {
--- a/protocol/block.go
+++ b/protocol/block.go
@@ -118,16 +118,7 @@ func (c *Chain) connectBlock(block *types.Block) (err error) {
118118 return err
119119 }
120120
121- finalizedBlockHeader := c.finalizedBlockHeader
122- lastJustifiedHeader, err := c.LastJustifiedHeader()
123- if err != nil {
124- return err
125- }
126-
127- if block.Height > lastJustifiedHeader.Height {
128- finalizedBlockHeader = &block.BlockHeader
129- }
130- if err := c.setState(&block.BlockHeader, finalizedBlockHeader, []*types.BlockHeader{&block.BlockHeader}, utxoView, contractView); err != nil {
121+ if err := c.setState(&block.BlockHeader, []*types.BlockHeader{&block.BlockHeader}, utxoView, contractView); err != nil {
131122 return err
132123 }
133124
@@ -174,7 +165,6 @@ func (c *Chain) reorganizeChain(blockHeader *types.BlockHeader) error {
174165 }
175166
176167 txsToRemove := map[bc.Hash]*types.Tx{}
177- finalizedBlockHeader := c.finalizedBlockHeader
178168 for _, attachNode := range attachNodes {
179169 hash := attachNode.Hash()
180170 b, err := c.store.GetBlock(&hash)
@@ -195,15 +185,6 @@ func (c *Chain) reorganizeChain(blockHeader *types.BlockHeader) error {
195185 return err
196186 }
197187
198- lastJustifiedHeader, err := c.LastJustifiedHeader()
199- if err != nil {
200- return err
201- }
202-
203- if attachBlock.Height > lastJustifiedHeader.Height {
204- finalizedBlockHeader = attachNode
205- }
206-
207188 for _, tx := range b.Transactions {
208189 if _, ok := txsToRestore[tx.ID]; !ok {
209190 txsToRemove[tx.ID] = tx
@@ -215,7 +196,7 @@ func (c *Chain) reorganizeChain(blockHeader *types.BlockHeader) error {
215196 log.WithFields(log.Fields{"module": logModule, "height": attachNode.Height, "hash": hash.String()}).Debug("attach from mainchain")
216197 }
217198
218- if err := c.setState(blockHeader, finalizedBlockHeader, []*types.BlockHeader{blockHeader}, utxoView, contractView); err != nil {
199+ if err := c.setState(blockHeader, []*types.BlockHeader{blockHeader}, utxoView, contractView); err != nil {
219200 return err
220201 }
221202
@@ -367,8 +348,6 @@ func (c *Chain) processBlock(block *types.Block) (bool, error) {
367348 bestBlock := c.saveSubBlock(block)
368349 bestBlockHeader := &bestBlock.BlockHeader
369350
370- c.cond.L.Lock()
371- defer c.cond.L.Unlock()
372351 if bestBlockHeader.PreviousBlockHash == c.bestBlockHeader.Hash() {
373352 log.WithFields(log.Fields{"module": logModule}).Debug("append block to the end of mainchain")
374353 return false, c.connectBlock(bestBlock)
--- a/protocol/protocol.go
+++ b/protocol/protocol.go
@@ -32,7 +32,6 @@ type Chain struct {
3232
3333 cond sync.Cond
3434 bestBlockHeader *types.BlockHeader // the last block on current main chain
35- finalizedBlockHeader *types.BlockHeader
3635 }
3736
3837 // NewChain returns a new Chain using store as the underlying storage.
@@ -65,11 +64,6 @@ func NewChainWithOrphanManage(store Store, txPool *TxPool, manage *OrphanManage,
6564 return nil, err
6665 }
6766
68- c.finalizedBlockHeader, err = c.store.GetBlockHeader(storeStatus.FinalizedHash)
69- if err != nil {
70- return nil, err
71- }
72-
7367 casper, err := newCasper(store, storeStatus, c.processRollbackCh)
7468 if err != nil {
7569 return nil, err
@@ -105,7 +99,7 @@ func (c *Chain) initChainStatus() error {
10599
106100 contractView := state.NewContractViewpoint()
107101 genesisBlockHeader := &genesisBlock.BlockHeader
108- return c.store.SaveChainStatus(genesisBlockHeader, genesisBlockHeader, []*types.BlockHeader{genesisBlockHeader}, utxoView, contractView)
102+ return c.store.SaveChainStatus(genesisBlockHeader, []*types.BlockHeader{genesisBlockHeader}, utxoView, contractView, 0, &checkpoint.Hash)
109103 }
110104
111105 func newCasper(store Store, storeStatus *BlockStoreState, rollbackCh chan *rollbackMsg) (*Casper, error) {
@@ -212,8 +206,9 @@ func (c *Chain) SignBlockHeader(blockHeader *types.BlockHeader) {
212206 }
213207
214208 // This function must be called with mu lock in above level
215-func (c *Chain) setState(blockHeader, finalizedBlockHeader *types.BlockHeader, mainBlockHeaders []*types.BlockHeader, view *state.UtxoViewpoint, contractView *state.ContractViewpoint) error {
216- if err := c.store.SaveChainStatus(blockHeader, finalizedBlockHeader, mainBlockHeaders, view, contractView); err != nil {
209+func (c *Chain) setState(blockHeader *types.BlockHeader, mainBlockHeaders []*types.BlockHeader, view *state.UtxoViewpoint, contractView *state.ContractViewpoint) error {
210+ finalizedHeight, finalizedHash := c.casper.LastFinalized()
211+ if err := c.store.SaveChainStatus(blockHeader, mainBlockHeaders, view, contractView, finalizedHeight, &finalizedHash); err != nil {
217212 return err
218213 }
219214
@@ -221,7 +216,6 @@ func (c *Chain) setState(blockHeader, finalizedBlockHeader *types.BlockHeader, m
221216 defer c.cond.L.Unlock()
222217
223218 c.bestBlockHeader = blockHeader
224- c.finalizedBlockHeader = finalizedBlockHeader
225219
226220 hash := c.bestBlockHeader.Hash()
227221 log.WithFields(log.Fields{"module": logModule, "height": c.bestBlockHeader.Height, "hash": hash.String()}).Debug("chain best status has been update")
--- a/protocol/store.go
+++ b/protocol/store.go
@@ -26,7 +26,7 @@ type Store interface {
2626
2727 SaveBlock(*types.Block) error
2828 SaveBlockHeader(*types.BlockHeader) error
29- SaveChainStatus(*types.BlockHeader, *types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, *state.ContractViewpoint) error
29+ SaveChainStatus(*types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, *state.ContractViewpoint, uint64, *bc.Hash) error
3030 }
3131
3232 // BlockStoreState represents the core's db status
--- a/protocol/txpool_test.go
+++ b/protocol/txpool_test.go
@@ -113,7 +113,7 @@ func (s *mockStore) GetMainChainHash(uint64) (*bc.Hash, error) {
113113 func (s *mockStore) GetContract(hash [32]byte) ([]byte, error) { return nil, nil }
114114 func (s *mockStore) SaveBlock(*types.Block) error { return nil }
115115 func (s *mockStore) SaveBlockHeader(*types.BlockHeader) error { return nil }
116-func (s *mockStore) SaveChainStatus(*types.BlockHeader, *types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, *state.ContractViewpoint) error {
116+func (s *mockStore) SaveChainStatus(*types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, *state.ContractViewpoint, uint64, *bc.Hash) error {
117117 return nil
118118 }
119119
@@ -612,12 +612,12 @@ func (s *mockStore1) GetTransactionsUtxo(utxoView *state.UtxoViewpoint, tx []*bc
612612 }
613613 return nil
614614 }
615-func (s *mockStore1) GetUtxo(*bc.Hash) (*storage.UtxoEntry, error) { return nil, nil }
616-func (s *mockStore1) GetMainChainHash(uint64) (*bc.Hash, error) { return nil, nil }
617-func (s *mockStore1) GetContract(hash [32]byte) ([]byte, error) { return nil, nil }
618-func (s *mockStore1) SaveBlock(*types.Block) error { return nil }
619-func (s *mockStore1) SaveBlockHeader(*types.BlockHeader) error { return nil }
620-func (s *mockStore1) SaveChainStatus(*types.BlockHeader, *types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, *state.ContractViewpoint) error {
615+func (s *mockStore1) GetUtxo(*bc.Hash) (*storage.UtxoEntry, error) { return nil, nil }
616+func (s *mockStore1) GetMainChainHash(uint64) (*bc.Hash, error) { return nil, nil }
617+func (s *mockStore1) GetContract(hash [32]byte) ([]byte, error) { return nil, nil }
618+func (s *mockStore1) SaveBlock(*types.Block) error { return nil }
619+func (s *mockStore1) SaveBlockHeader(*types.BlockHeader) error { return nil }
620+func (s *mockStore1) SaveChainStatus(*types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, *state.ContractViewpoint, uint64, *bc.Hash) error {
621621 return nil
622622 }
623623
--- a/test/utxo_view/utxo_view_test.go
+++ b/test/utxo_view/utxo_view_test.go
@@ -188,7 +188,7 @@ func TestAttachOrDetachBlocks(t *testing.T) {
188188 utxoViewpoint.Entries[k] = v
189189 }
190190 contractView := state.NewContractViewpoint()
191- if err := store.SaveChainStatus(mockBlockHeader, mockBlockHeader, []*types.BlockHeader{mockBlockHeader}, utxoViewpoint, contractView); err != nil {
191+ if err := store.SaveChainStatus(mockBlockHeader, []*types.BlockHeader{mockBlockHeader}, utxoViewpoint, contractView, 0, &bc.Hash{}); err != nil {
192192 t.Error(err)
193193 }
194194
@@ -210,7 +210,7 @@ func TestAttachOrDetachBlocks(t *testing.T) {
210210 t.Error(err)
211211 }
212212 }
213- if err := store.SaveChainStatus(mockBlockHeader, mockBlockHeader, []*types.BlockHeader{mockBlockHeader}, utxoViewpoint, contractView); err != nil {
213+ if err := store.SaveChainStatus(mockBlockHeader, []*types.BlockHeader{mockBlockHeader}, utxoViewpoint, contractView, 0, &bc.Hash{}); err != nil {
214214 t.Error(err)
215215 }
216216
Show on old repository browser