"github.com/bytom/vapor/protocol"
"github.com/bytom/vapor/protocol/bc"
"github.com/bytom/vapor/protocol/bc/types"
+ "github.com/bytom/vapor/toolbar/measure"
)
var (
// ApplyBlock parse pending order and cancel from the the transactions of block
// and add pending order to the dex db, remove cancel order from dex db.
func (m *Core) ApplyBlock(block *types.Block) error {
+ measure.Start()
+ defer measure.End()
+
if block.Height < m.startBlockHeight {
return nil
}
// ValidateBlock no need to verify the block header, because the first module has been verified.
// just need to verify the transactions in the block.
func (m *Core) ValidateBlock(block *types.Block, verifyResults []*bc.TxVerifyResult) error {
+ measure.Start()
+ defer measure.End()
+
for i, tx := range block.Transactions {
if err := m.ValidateTx(tx, verifyResults[i], block.Height); err != nil {
return err
"github.com/bytom/vapor/protocol/bc"
"github.com/bytom/vapor/protocol/bc/types"
"github.com/bytom/vapor/protocol/state"
+ "github.com/bytom/vapor/toolbar/measure"
)
const (
// GetTransactionsUtxo will return all the utxo that related to the input txs
func (s *Store) GetTransactionsUtxo(view *state.UtxoViewpoint, txs []*bc.Tx) error {
+ measure.Start()
+ defer measure.End()
+
return getTransactionsUtxo(s.db, view, txs)
}
// SaveBlock persists a new block in the protocol.
func (s *Store) SaveBlock(block *types.Block, ts *bc.TransactionStatus) error {
+ measure.Start()
+ defer measure.End()
+
startTime := time.Now()
binaryBlockHeader, err := block.MarshalTextForBlockHeader()
if err != nil {
"github.com/bytom/vapor/protocol/state"
"github.com/bytom/vapor/protocol/validation"
"github.com/bytom/vapor/protocol/vm/vmutil"
+ "github.com/bytom/vapor/toolbar/measure"
)
const (
}
func newBlockBuilder(chain *protocol.Chain, accountManager *account.Manager, timestamp uint64, warnDuration, criticalDuration time.Duration) *blockBuilder {
+ measure.Start()
+ defer measure.End()
+
preBlockHeader := chain.BestBlockHeader()
block := &types.Block{
BlockHeader: types.BlockHeader{
}
func (b *blockBuilder) applyTransactions(txs []*types.Tx, timeoutStatus uint8) error {
+ measure.Start()
+ defer measure.End()
+
tempTxs := []*types.Tx{}
for i := 0; i < len(txs); i++ {
if tempTxs = append(tempTxs, txs[i]); len(tempTxs) < batchApplyNum && i != len(txs)-1 {
}
func (b *blockBuilder) applyTransactionFromPool() error {
+ measure.Start()
+ defer measure.End()
+
txDescList := b.chain.GetTxPool().GetTransactions()
sort.Sort(byTime(txDescList))
}
func (b *blockBuilder) applyTransactionFromSubProtocol() error {
+ measure.Start()
+ defer measure.End()
+
isTimeout := func() bool {
return b.getTimeoutStatus() > timeoutOk
}
}
func (b *blockBuilder) build() (*types.Block, error) {
+ measure.Start()
+ defer measure.End()
+
if err := b.applyCoinbaseTransaction(); err != nil {
return nil, err
}
}
func (b *blockBuilder) calcBlockCommitment() (err error) {
+ measure.Start()
+ defer measure.End()
+
var txEntries []*bc.Tx
for _, tx := range b.block.Transactions {
txEntries = append(txEntries, tx.Tx)
}
func (b *blockBuilder) preValidateTxs(txs []*types.Tx, chain *protocol.Chain, view *state.UtxoViewpoint, gasLeft int64) ([]*validateTxResult, int64) {
+ measure.Start()
+ defer measure.End()
+
var results []*validateTxResult
bcBlock := &bc.Block{BlockHeader: &bc.BlockHeader{Height: chain.BestBlockHeight() + 1}}
bcTxs := make([]*bc.Tx, len(txs))
}
func (b *blockBuilder) validateBySubProtocols(tx *types.Tx, statusFail bool, subProtocols []protocol.SubProtocol) error {
+ measure.Start()
+ defer measure.End()
+
for _, subProtocol := range subProtocols {
verifyResult := &bc.TxVerifyResult{StatusFail: statusFail}
if err := subProtocol.ValidateTx(tx, verifyResult, b.block.Height); err != nil {
"github.com/bytom/vapor/protocol/bc"
"github.com/bytom/vapor/protocol/bc/types"
"github.com/bytom/vapor/protocol/state"
+ "github.com/bytom/vapor/toolbar/measure"
)
const (
// if some signature is invalid, they will be reset to nil
// if the block does not have the signature of blocker, it will return error
func (c *Chain) validateSign(block *types.Block) error {
+ measure.Start()
+ defer measure.End()
+
consensusNodeMap, err := c.getConsensusNodes(&block.PreviousBlockHash)
if err != nil {
return err
}
func (c *Chain) applyBlockSign(blockHeader *types.BlockHeader) error {
+ measure.Start()
+ defer measure.End()
+
signature, err := c.signBlockHeader(blockHeader)
if err != nil {
return err
"github.com/bytom/vapor/protocol/bc/types"
"github.com/bytom/vapor/protocol/state"
"github.com/bytom/vapor/protocol/validation"
+ "github.com/bytom/vapor/toolbar/measure"
)
var (
}
func (c *Chain) connectBlock(block *types.Block) (err error) {
+ measure.Start()
+ defer measure.End()
+
bcBlock := types.MapBlock(block)
if bcBlock.TransactionStatus, err = c.store.GetTransactionStatus(&bcBlock.ID); err != nil {
return err
// SaveBlock will validate and save block into storage
func (c *Chain) saveBlock(block *types.Block) error {
+ measure.Start()
+ defer measure.End()
+
if err := c.validateSign(block); err != nil {
return errors.Sub(ErrBadBlock, err)
}
// ProcessBlock is the entry for handle block insert
func (c *Chain) processBlock(block *types.Block) (bool, error) {
+ measure.Start()
+ defer measure.End()
+
blockHash := block.Hash()
if c.BlockExist(&blockHash) {
log.WithFields(log.Fields{"module": logModule, "hash": blockHash.String(), "height": block.Height}).Debug("block has been processed")
"github.com/bytom/vapor/protocol/bc"
"github.com/bytom/vapor/protocol/bc/types"
"github.com/bytom/vapor/protocol/state"
+ "github.com/bytom/vapor/toolbar/measure"
)
var (
)
func (c *Chain) getBestConsensusResult() (*state.ConsensusResult, error) {
+ measure.Start()
+ defer measure.End()
+
bestBlockHeader := c.bestBlockHeader
seq := state.CalcVoteSeq(bestBlockHeader.Height)
return c.getConsensusResult(seq, bestBlockHeader)
"github.com/bytom/vapor/protocol/bc"
"github.com/bytom/vapor/protocol/bc/types"
"github.com/bytom/vapor/protocol/state"
+ "github.com/bytom/vapor/toolbar/measure"
)
const (
// This function must be called with mu lock in above level
func (c *Chain) setState(blockHeader, irrBlockHeader *types.BlockHeader, mainBlockHeaders []*types.BlockHeader, view *state.UtxoViewpoint, consensusResults []*state.ConsensusResult) error {
+ measure.Start()
+ defer measure.End()
+
if err := c.store.SaveChainStatus(blockHeader, irrBlockHeader, mainBlockHeaders, view, consensusResults); err != nil {
return err
}
"github.com/bytom/vapor/database/storage"
"github.com/bytom/vapor/errors"
"github.com/bytom/vapor/protocol/bc"
+ "github.com/bytom/vapor/toolbar/measure"
)
// UtxoViewpoint represents a view into the set of unspent transaction outputs
}
func (view *UtxoViewpoint) ApplyBlock(block *bc.Block, txStatus *bc.TransactionStatus) error {
+ measure.Start()
+ defer measure.End()
+
for i, tx := range block.Transactions {
statusFail, err := txStatus.GetStatus(i)
if err != nil {
"github.com/bytom/vapor/protocol/bc"
"github.com/bytom/vapor/protocol/bc/types"
"github.com/bytom/vapor/protocol/state"
+ "github.com/bytom/vapor/toolbar/measure"
)
const logModule = "leveldb"
// ValidateBlock validates a block and the transactions within.
func ValidateBlock(b *bc.Block, parent *types.BlockHeader, rewards []state.CoinbaseReward) error {
+ measure.Start()
+ defer measure.End()
+
startTime := time.Now()
if err := ValidateBlockHeader(b, parent); err != nil {
return err
"github.com/bytom/vapor/math/checked"
"github.com/bytom/vapor/protocol/bc"
"github.com/bytom/vapor/protocol/vm"
+ "github.com/bytom/vapor/toolbar/measure"
)
// validate transaction error
// ValidateTxs validates txs in async mode
func ValidateTxs(txs []*bc.Tx, block *bc.Block) []*ValidateTxResult {
+ measure.Start()
+ defer measure.End()
+
txSize := len(txs)
validateWorkerNum := runtime.NumCPU()
//init the goroutine validate worker