Send rejects and apply DoS scoring for errors in direct block validation.
75f51f2a
introduced asynchronous processing for blocks, where reject messages
and DoS scoring could be applied outside of ProcessBlock, because block
validation may happen later.
However, some types of errors are still detected immediately (in particular,
CheckBlock violations), which need acting after ProcessBlock returns.
This commit is contained in:
parent
e81e2e8f7c
commit
40f5cb878e
1 changed files with 10 additions and 0 deletions
10
src/main.cpp
10
src/main.cpp
|
@ -3984,6 +3984,16 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||||
|
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
ProcessBlock(state, pfrom, &block);
|
ProcessBlock(state, pfrom, &block);
|
||||||
|
int nDoS;
|
||||||
|
if (state.IsInvalid(nDoS)) {
|
||||||
|
pfrom->PushMessage("reject", strCommand, state.GetRejectCode(),
|
||||||
|
state.GetRejectReason(), inv.hash);
|
||||||
|
if (nDoS > 0) {
|
||||||
|
LOCK(cs_main);
|
||||||
|
Misbehaving(pfrom->GetId(), nDoS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue