impl Resource Unavailable RPC error (#2072)
## Issue Addressed Related to #1891, The error is not in the spec yet (see ethereum/eth2.0-specs#2131) ## Proposed Changes Implement the proposed error, banning peers that send it ## Additional Info NA
This commit is contained in:
parent
701843aaa0
commit
11c299cbf6
@ -412,6 +412,12 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
|
|||||||
}
|
}
|
||||||
RPCError::ErrorResponse(code, _) => match code {
|
RPCError::ErrorResponse(code, _) => match code {
|
||||||
RPCResponseErrorCode::Unknown => PeerAction::HighToleranceError,
|
RPCResponseErrorCode::Unknown => PeerAction::HighToleranceError,
|
||||||
|
RPCResponseErrorCode::ResourceUnavailable => {
|
||||||
|
// NOTE: This error only makes sense for the `BlocksByRange` and `BlocksByRoot`
|
||||||
|
// protocols. For the time being, there is no reason why a peer should send
|
||||||
|
// this error.
|
||||||
|
PeerAction::Fatal
|
||||||
|
}
|
||||||
RPCResponseErrorCode::ServerError => PeerAction::MidToleranceError,
|
RPCResponseErrorCode::ServerError => PeerAction::MidToleranceError,
|
||||||
RPCResponseErrorCode::InvalidRequest => PeerAction::LowToleranceError,
|
RPCResponseErrorCode::InvalidRequest => PeerAction::LowToleranceError,
|
||||||
RPCResponseErrorCode::RateLimited => match protocol {
|
RPCResponseErrorCode::RateLimited => match protocol {
|
||||||
|
@ -262,6 +262,8 @@ pub enum RPCResponseErrorCode {
|
|||||||
RateLimited,
|
RateLimited,
|
||||||
InvalidRequest,
|
InvalidRequest,
|
||||||
ServerError,
|
ServerError,
|
||||||
|
/// Error spec'd to indicate that a peer does not have blocks on a requested range.
|
||||||
|
ResourceUnavailable,
|
||||||
Unknown,
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,6 +287,7 @@ impl<T: EthSpec> RPCCodedResponse<T> {
|
|||||||
let code = match response_code {
|
let code = match response_code {
|
||||||
1 => RPCResponseErrorCode::InvalidRequest,
|
1 => RPCResponseErrorCode::InvalidRequest,
|
||||||
2 => RPCResponseErrorCode::ServerError,
|
2 => RPCResponseErrorCode::ServerError,
|
||||||
|
3 => RPCResponseErrorCode::ResourceUnavailable,
|
||||||
139 => RPCResponseErrorCode::RateLimited,
|
139 => RPCResponseErrorCode::RateLimited,
|
||||||
_ => RPCResponseErrorCode::Unknown,
|
_ => RPCResponseErrorCode::Unknown,
|
||||||
};
|
};
|
||||||
@ -318,6 +321,7 @@ impl RPCResponseErrorCode {
|
|||||||
match self {
|
match self {
|
||||||
RPCResponseErrorCode::InvalidRequest => 1,
|
RPCResponseErrorCode::InvalidRequest => 1,
|
||||||
RPCResponseErrorCode::ServerError => 2,
|
RPCResponseErrorCode::ServerError => 2,
|
||||||
|
RPCResponseErrorCode::ResourceUnavailable => 3,
|
||||||
RPCResponseErrorCode::Unknown => 255,
|
RPCResponseErrorCode::Unknown => 255,
|
||||||
RPCResponseErrorCode::RateLimited => 139,
|
RPCResponseErrorCode::RateLimited => 139,
|
||||||
}
|
}
|
||||||
@ -328,6 +332,7 @@ impl std::fmt::Display for RPCResponseErrorCode {
|
|||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
let repr = match self {
|
let repr = match self {
|
||||||
RPCResponseErrorCode::InvalidRequest => "The request was invalid",
|
RPCResponseErrorCode::InvalidRequest => "The request was invalid",
|
||||||
|
RPCResponseErrorCode::ResourceUnavailable => "Resource unavailable",
|
||||||
RPCResponseErrorCode::ServerError => "Server error occurred",
|
RPCResponseErrorCode::ServerError => "Server error occurred",
|
||||||
RPCResponseErrorCode::Unknown => "Unknown error occurred",
|
RPCResponseErrorCode::Unknown => "Unknown error occurred",
|
||||||
RPCResponseErrorCode::RateLimited => "Rate limited",
|
RPCResponseErrorCode::RateLimited => "Rate limited",
|
||||||
|
@ -577,6 +577,7 @@ impl RPCError {
|
|||||||
RPCResponseErrorCode::RateLimited => "rate_limited",
|
RPCResponseErrorCode::RateLimited => "rate_limited",
|
||||||
RPCResponseErrorCode::InvalidRequest => "invalid_request",
|
RPCResponseErrorCode::InvalidRequest => "invalid_request",
|
||||||
RPCResponseErrorCode::ServerError => "server_error",
|
RPCResponseErrorCode::ServerError => "server_error",
|
||||||
|
RPCResponseErrorCode::ResourceUnavailable => "resource_unavailable",
|
||||||
RPCResponseErrorCode::Unknown => "unknown_response_code",
|
RPCResponseErrorCode::Unknown => "unknown_response_code",
|
||||||
},
|
},
|
||||||
RPCError::StreamTimeout => "stream_timeout",
|
RPCError::StreamTimeout => "stream_timeout",
|
||||||
|
Loading…
Reference in New Issue
Block a user