txs := txPool.GetTransactions()
sort.Sort(byTime(txs))
- consensusResult, err := c.GetConsensusResultByHash(&preBlockHash)
- if err != nil {
- return nil, err
- }
-
entriesTxs := []*bc.Tx{}
for _, txDesc := range txs {
entriesTxs = append(entriesTxs, txDesc.Tx.Tx)
continue
}
- if err := consensusResult.ApplyTransaction(txDesc.Tx); err != nil {
- blkGenSkipTxForErr(txPool, &tx.ID, err)
- continue
- }
-
if err := txStatus.SetStatus(len(b.Transactions), gasOnlyTx); err != nil {
return nil, err
}
return nil, errors.Wrap(err, "fail on createCoinbaseTx")
}
+ consensusResult, err := c.GetConsensusResultByHash(&preBlockHash)
+ if err != nil {
+ return nil, err
+ }
+
if err := consensusResult.AttachCoinbaseReward(b); err != nil {
return nil, err
}
continue
}
- if voteOutput.Amount < consensus.ActiveNetParams.MinVoteOutputAmount {
- return errors.New("invalid vote transaction with vote amount less than MinVoteOutputAmount")
- }
-
pubkey := hex.EncodeToString(voteOutput.Vote)
- if _, ok := c.NumOfVote[pubkey]; !ok && voteOutput.Amount < consensus.ActiveNetParams.MinConsensusNodeVoteNum {
- return errors.New("invalid vote transaction with first vote amount less than MinConsensusNodeVoteNum")
- }
-
if c.NumOfVote[pubkey], ok = checked.AddUint64(c.NumOfVote[pubkey], voteOutput.Amount); !ok {
return checked.ErrOverflow
}
import (
log "github.com/sirupsen/logrus"
- "github.com/vapor/errors"
"github.com/vapor/protocol/bc"
"github.com/vapor/protocol/bc/types"
"github.com/vapor/protocol/state"
}
bh := c.BestBlockHeader()
- blockHash := bh.Hash()
- consensusResult, err := c.GetConsensusResultByHash(&blockHash)
- if err != nil {
- return false, err
- }
-
- if err := consensusResult.ApplyTransaction(tx); err != nil {
- return false, errors.Wrap(validation.ErrVoteOutputAmount, err)
- }
-
gasStatus, err := validation.ValidateTx(tx.Tx, types.MapBlock(&types.Block{BlockHeader: *bh}))
if !gasStatus.GasValid {
c.txPool.AddErrCache(&tx.ID, err)
return errors.Wrap(err, "checking vote output source")
}
+ if e.Source.Value.Amount < consensus.ActiveNetParams.MinVoteOutputAmount {
+ return ErrVoteOutputAmount
+ }
+
case *bc.Retirement:
vs2 := *vs
vs2.sourcePos = 0