|
|
|
@ -29,6 +29,7 @@ import ( |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
|
"github.com/ethereum/go-ethereum/common/mclock" |
|
|
|
|
"github.com/ethereum/go-ethereum/core/state" |
|
|
|
|
"github.com/ethereum/go-ethereum/core/types" |
|
|
|
|
"github.com/ethereum/go-ethereum/core/vm" |
|
|
|
@ -799,7 +800,7 @@ func (self *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain |
|
|
|
|
if stats.ignored > 0 { |
|
|
|
|
ignored = fmt.Sprintf(" (%d ignored)", stats.ignored) |
|
|
|
|
} |
|
|
|
|
glog.V(logger.Info).Infof("imported %d receipts in %9v. #%d [%x… / %x…]%s", stats.processed, common.PrettyDuration(time.Since(start)), last.Number(), first.Hash().Bytes()[:4], last.Hash().Bytes()[:4], ignored) |
|
|
|
|
glog.V(logger.Info).Infof("imported %4d receipts in %9v. #%d [%x… / %x…]%s", stats.processed, common.PrettyDuration(time.Since(start)), last.Number(), first.Hash().Bytes()[:4], last.Hash().Bytes()[:4], ignored) |
|
|
|
|
|
|
|
|
|
return 0, nil |
|
|
|
|
} |
|
|
|
@ -875,7 +876,7 @@ func (self *BlockChain) InsertChain(chain types.Blocks) (int, error) { |
|
|
|
|
// faster than direct delivery and requires much less mutex
|
|
|
|
|
// acquiring.
|
|
|
|
|
var ( |
|
|
|
|
stats = insertStats{startTime: time.Now()} |
|
|
|
|
stats = insertStats{startTime: mclock.Now()} |
|
|
|
|
events = make([]interface{}, 0, len(chain)) |
|
|
|
|
coalescedLogs []*types.Log |
|
|
|
|
nonceChecked = make([]bool, len(chain)) |
|
|
|
@ -1031,7 +1032,7 @@ type insertStats struct { |
|
|
|
|
queued, processed, ignored int |
|
|
|
|
usedGas uint64 |
|
|
|
|
lastIndex int |
|
|
|
|
startTime time.Time |
|
|
|
|
startTime mclock.AbsTime |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// statsReportLimit is the time limit during import after which we always print
|
|
|
|
@ -1043,12 +1044,9 @@ const statsReportLimit = 8 * time.Second |
|
|
|
|
func (st *insertStats) report(chain []*types.Block, index int) { |
|
|
|
|
// Fetch the timings for the batch
|
|
|
|
|
var ( |
|
|
|
|
now = time.Now() |
|
|
|
|
elapsed = now.Sub(st.startTime) |
|
|
|
|
now = mclock.Now() |
|
|
|
|
elapsed = time.Duration(now) - time.Duration(st.startTime) |
|
|
|
|
) |
|
|
|
|
if elapsed == 0 { // Yes Windows, I'm looking at you
|
|
|
|
|
elapsed = 1 |
|
|
|
|
} |
|
|
|
|
// If we're at the last block of the batch or report period reached, log
|
|
|
|
|
if index == len(chain)-1 || elapsed >= statsReportLimit { |
|
|
|
|
start, end := chain[st.lastIndex], chain[index] |
|
|
|
@ -1063,7 +1061,7 @@ func (st *insertStats) report(chain []*types.Block, index int) { |
|
|
|
|
} else { |
|
|
|
|
hashes = fmt.Sprintf("%x…", end.Hash().Bytes()[:4]) |
|
|
|
|
} |
|
|
|
|
glog.Infof("imported %d blocks, %5d txs (%7.3f Mg) in %9v (%6.3f Mg/s). #%v [%s]%s", st.processed, txcount, float64(st.usedGas)/1000000, common.PrettyDuration(elapsed), float64(st.usedGas)*1000/float64(elapsed), end.Number(), hashes, extra) |
|
|
|
|
glog.Infof("imported %4d blocks, %5d txs (%7.3f Mg) in %9v (%6.3f Mg/s). #%v [%s]%s", st.processed, txcount, float64(st.usedGas)/1000000, common.PrettyDuration(elapsed), float64(st.usedGas)*1000/float64(elapsed), end.Number(), hashes, extra) |
|
|
|
|
|
|
|
|
|
*st = insertStats{startTime: now, lastIndex: index} |
|
|
|
|
} |
|
|
|
|