From e50c789c77eb28d06815b77a45c225e85d745d0f Mon Sep 17 00:00:00 2001 From: Nguyen Sy Thanh Son Date: Fri, 11 Jan 2019 04:58:10 +0000 Subject: [PATCH] move cache data to insert func --- consensus/posv/posv.go | 7 ++++--- contracts/utils.go | 2 +- core/blockchain.go | 4 ++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/consensus/posv/posv.go b/consensus/posv/posv.go index d30a4f2b32..893edca3e8 100644 --- a/consensus/posv/posv.go +++ b/consensus/posv/posv.go @@ -877,7 +877,7 @@ func (c *Posv) Finalize(chain consensus.ChainReader, header *types.Header, state } } - _ = c.cacheData(header, txs, receipts) + // _ = c.cacheData(header, txs, receipts) // the state remains as is and uncles are dropped header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) @@ -1033,7 +1033,7 @@ func (c *Posv) GetMasternodesFromCheckpointHeader(preCheckpointHeader *types.Hea return masternodes } -func (c *Posv) cacheData(header *types.Header, txs []*types.Transaction, receipts []*types.Receipt) error { +func (c *Posv) CacheData(header *types.Header, txs []*types.Transaction, receipts []*types.Receipt) error { var signTxs []*types.Transaction for _, tx := range txs { if tx.IsSigningTransaction() { @@ -1054,6 +1054,7 @@ func (c *Posv) cacheData(header *types.Header, txs []*types.Transaction, receipt } c.BlockSigners.Add(header.Hash(), signTxs) + fmt.Println("Add cache BLockSigners", header.Hash().String(), len(signTxs), c.BlockSigners.Len()) return nil } @@ -1071,7 +1072,7 @@ func (c *Posv) GetSignData(chain consensus.ChainReader, startBlockNumber uint64, data[blkHash] = append(data[blkHash], from) } } else { - return nil, errors.New("Failed get blocksigners from cache") + return nil, errors.New("Failed get blocksigners from cache " + block.Hash().String() + " " + block.Number.String()) } } return data, nil diff --git a/contracts/utils.go b/contracts/utils.go index 078a0b69be..f085c7b8f3 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -353,7 +353,7 @@ func GetRewardForCheckpoint(c *posv.Posv, chain consensus.ChainReader, blockSign } else { data, err := c.GetSignData(chain, startBlockNumber, endBlockNumber) if err != nil { - log.Crit("Fail to get signers from cache.", "endBlockNumber", startBlockNumber, "startBlockNumber", endBlockNumber) + log.Crit("Fail to get signers from cache.", "startBlockNumber", startBlockNumber, "endBlockNumber", endBlockNumber, "error", err) } for i := startBlockNumber; i <= endBlockNumber; i++ { diff --git a/core/blockchain.go b/core/blockchain.go index 4d6c2cc011..5bd0a709be 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -506,6 +506,10 @@ func (bc *BlockChain) insert(block *types.Block) { } bc.currentBlock.Store(block) + // save cache BlockSigners + engine := bc.Engine().(*posv.Posv) + engine.CacheData(block.Header(), block.Transactions(), bc.GetReceiptsByHash(block.Hash())) + // If the block is better than our head or is on a different chain, force update heads if updateHeads { bc.hc.SetCurrentHeader(block.Header())