+ if c.hasSeenTx(tx) {
+ return false, nil
+ }
+
+ c.markTransactions(tx)
+ bh := c.BestBlockHeader()
+ return c.validateTx(tx, bh)
+}
+
+// validateTx validates the given transaction without checking duplication.
+func (c *Chain) validateTx(tx *types.Tx, bh *types.BlockHeader) (bool, error) {