@@ -2596,7 +2596,8 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
2596
2596
for (size_t o = 0 ; o < tx->vout .size (); o++) {
2597
2597
if (view.HaveCoin (COutPoint (tx->GetHash (), o))) {
2598
2598
LogPrintf (" ERROR: ConnectBlock(): tried to overwrite transaction\n " );
2599
- return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-txns-BIP30" );
2599
+ return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-txns-BIP30" ,
2600
+ " tried to overwrite transaction" );
2600
2601
}
2601
2602
}
2602
2603
}
@@ -2646,14 +2647,16 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
2646
2647
if (!Consensus::CheckTxInputs (tx, tx_state, view, pindex->nHeight , txfee)) {
2647
2648
// Any transaction validation failure in ConnectBlock is a block consensus failure
2648
2649
state.Invalid (BlockValidationResult::BLOCK_CONSENSUS,
2649
- tx_state.GetRejectReason (), tx_state.GetDebugMessage ());
2650
+ tx_state.GetRejectReason (),
2651
+ tx_state.GetDebugMessage () + " in transaction " + tx.GetHash ().ToString ());
2650
2652
LogError (" %s: Consensus::CheckTxInputs: %s, %s\n " , __func__, tx.GetHash ().ToString (), state.ToString ());
2651
2653
return false ;
2652
2654
}
2653
2655
nFees += txfee;
2654
2656
if (!MoneyRange (nFees)) {
2655
2657
LogPrintf (" ERROR: %s: accumulated fee in the block out of range.\n " , __func__);
2656
- return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-txns-accumulated-fee-outofrange" );
2658
+ return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-txns-accumulated-fee-outofrange" ,
2659
+ " accumulated fee in the block out of range" );
2657
2660
}
2658
2661
2659
2662
// Check that transaction is BIP68 final
@@ -2666,7 +2669,8 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
2666
2669
2667
2670
if (!SequenceLocks (tx, nLockTimeFlags, prevheights, *pindex)) {
2668
2671
LogPrintf (" ERROR: %s: contains a non-BIP68-final transaction\n " , __func__);
2669
- return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-txns-nonfinal" );
2672
+ return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-txns-nonfinal" ,
2673
+ " contains a non-BIP68-final transaction " + tx.GetHash ().ToString ());
2670
2674
}
2671
2675
}
2672
2676
@@ -2677,7 +2681,7 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
2677
2681
nSigOpsCost += GetTransactionSigOpCost (tx, view, flags);
2678
2682
if (nSigOpsCost > MAX_BLOCK_SIGOPS_COST) {
2679
2683
LogPrintf (" ERROR: ConnectBlock(): too many sigops\n " );
2680
- return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-blk-sigops" );
2684
+ return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-blk-sigops" , " too many sigops " );
2681
2685
}
2682
2686
2683
2687
if (!tx.IsCoinBase ())
@@ -2712,7 +2716,8 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
2712
2716
CAmount blockReward = nFees + GetBlockSubsidy (pindex->nHeight , params.GetConsensus ());
2713
2717
if (block.vtx [0 ]->GetValueOut () > blockReward) {
2714
2718
LogPrintf (" ERROR: ConnectBlock(): coinbase pays too much (actual=%d vs limit=%d)\n " , block.vtx [0 ]->GetValueOut (), blockReward);
2715
- return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-cb-amount" );
2719
+ return state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-cb-amount" ,
2720
+ strprintf (" coinbase pays too much (actual=%d vs limit=%d)" , block.vtx [0 ]->GetValueOut (), blockReward));
2716
2721
}
2717
2722
2718
2723
auto parallel_result = control.Complete ();
0 commit comments