Skip to content

Commit 8365e13

Browse files
authored
update map_response to parse json string response with quotes (#924)
## 📝 Summary fix unnecessary warning log `{message":{"fields":{"err":"Relay error: Unknown relay response, status: 200 OK, body: \"block received\"\n",...}}}`, previously the `block received` response was being turned into a `RelayError::UnknownRelayError` since the `trim()` function just removed whitespace but didn't remove the quotes around `block received`. this now changes it to be `Ok(())`. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> log clean up --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable)
1 parent 4132e6d commit 8365e13

1 file changed

Lines changed: 39 additions & 4 deletions

File tree

  • crates/rbuilder/src/mev_boost

crates/rbuilder/src/mev_boost/mod.rs

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,20 +1053,25 @@ async fn map_response(response: Response) -> Result<(), SubmitBlockErr> {
10531053
return Ok(());
10541054
}
10551055

1056-
match serde_json::from_slice::<RelayResponse<()>>(&bytes) {
1056+
map_response_body(status, &bytes)
1057+
}
1058+
1059+
fn map_response_body(status: StatusCode, bytes: &[u8]) -> Result<(), SubmitBlockErr> {
1060+
match serde_json::from_slice::<RelayResponse<()>>(bytes) {
10571061
Ok(RelayResponse::Ok(_)) => Ok(()),
10581062
Ok(RelayResponse::Error(error)) => Err(map_relay_error_message(&error.message, error.code)),
10591063
Err(_) => {
10601064
// bloxroute returns empty response in this format which we handle here because its not valid
10611065
// jsonrpc response
1062-
let data = String::from_utf8_lossy(&bytes).to_string();
1066+
let data = String::from_utf8_lossy(bytes).to_string();
10631067
let trimmed = data.trim();
10641068
if trimmed == "{}" {
10651069
return Ok(());
10661070
}
10671071

1068-
// bloxroute may return a plain-text success response instead of JSON
1069-
if status == StatusCode::OK && trimmed == "block received" {
1072+
// bloxroute may return a plain-text success response instead of JSON,
1073+
// sometimes wrapped in quotes as a JSON string literal
1074+
if status == StatusCode::OK && trimmed.trim_matches('"') == "block received" {
10701075
return Ok(());
10711076
}
10721077

@@ -1390,4 +1395,34 @@ mod tests {
13901395
.await
13911396
.expect("OPS!");
13921397
}
1398+
1399+
#[test]
1400+
fn test_map_response_body_block_received_plain() {
1401+
let result = map_response_body(StatusCode::OK, b"block received");
1402+
assert!(result.is_ok());
1403+
}
1404+
1405+
#[test]
1406+
fn test_map_response_body_block_received_quoted() {
1407+
let result = map_response_body(StatusCode::OK, b"\"block received\"");
1408+
assert!(result.is_ok());
1409+
}
1410+
1411+
#[test]
1412+
fn test_map_response_body_block_received_quoted_with_whitespace() {
1413+
let result = map_response_body(StatusCode::OK, b" \"block received\"\n");
1414+
assert!(result.is_ok());
1415+
}
1416+
1417+
#[test]
1418+
fn test_map_response_body_block_received_non_200() {
1419+
let result = map_response_body(StatusCode::BAD_REQUEST, b"block received");
1420+
assert!(result.is_err());
1421+
}
1422+
1423+
#[test]
1424+
fn test_map_response_body_empty_json_object() {
1425+
let result = map_response_body(StatusCode::OK, b"{}");
1426+
assert!(result.is_ok());
1427+
}
13931428
}

0 commit comments

Comments
 (0)