4 "github.com/bytom/errors"
5 "github.com/bytom/protocol/bc/legacy"
6 "github.com/bytom/protocol/validation"
9 // ErrBadTx is returned for transactions failing validation
10 var ErrBadTx = errors.New("invalid transaction")
12 // ValidateTx validates the given transaction. A cache holds
13 // per-transaction validation results and is consulted before
14 // performing full validation.
15 func (c *Chain) ValidateTx(tx *legacy.Tx) error {
17 if ok := c.txPool.HaveTransaction(&newTx.ID); ok {
18 return c.txPool.GetErrCache(&newTx.ID)
21 oldBlock, err := c.GetBlockByHash(c.state.hash)
25 block := legacy.MapBlock(oldBlock)
26 fee, err := validation.ValidateTx(newTx, block)
29 c.txPool.AddErrCache(&newTx.ID, err)
33 c.txPool.AddTransaction(tx, block.BlockHeader.Height, fee)
34 return errors.Sub(ErrBadTx, err)