From e24460b0b7d97b096fc272846dcc0ffa34233e32 Mon Sep 17 00:00:00 2001 From: NguyenNguyen Date: Mon, 28 Jan 2019 18:17:39 +0700 Subject: [PATCH] Tomochain: isMasterNode function gets snapshot at parent block --- eth/backend.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index c7a922596a..a49e034494 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -384,9 +384,17 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { eth.txPool.IsMasterNode = func(address common.Address) bool { currentHeader := eth.blockchain.CurrentHeader() - snap, err := c.GetSnapshot(eth.blockchain, currentHeader) + header := currentHeader + // Sometimes, the latest block hasn't been inserted to chain yet + // getSnapshot from parent block if it exists + parentHeader := eth.blockchain.GetHeader(currentHeader.ParentHash, currentHeader.Number.Uint64() - 1) + if parentHeader != nil { + // not genesis block + header = parentHeader + } + snap, err := c.GetSnapshot(eth.blockchain, header) if err != nil { - log.Error("Can't get snapshot with current header ", "number", currentHeader.Number, "hash", currentHeader.Hash().Hex(), "err", err) + log.Error("Can't get snapshot with at ", "number", header.Number, "hash", header.Hash().Hex(), "err", err) return false } if _, ok := snap.Signers[address]; ok {