diff --git a/crates/iroha_torii/src/lib.rs b/crates/iroha_torii/src/lib.rs index d4ceb686c0..151eee66b3 100644 --- a/crates/iroha_torii/src/lib.rs +++ b/crates/iroha_torii/src/lib.rs @@ -327,10 +327,14 @@ impl Error { match self { Query(e) => Self::query_status_code(e), - AcceptTransaction(_) => StatusCode::BAD_REQUEST, + AcceptTransaction(err) => match err { + iroha_core::tx::AcceptTransactionFail::SignatureVerification(_) => StatusCode::UNAUTHORIZED, + iroha_core::tx::AcceptTransactionFail::UnexpectedGenesisAccountSignature => StatusCode::FORBIDDEN, + _ => StatusCode::BAD_REQUEST, + }, Config(_) | StatusSegmentNotFound(_) => StatusCode::NOT_FOUND, PushIntoQueue(err) => match **err { - queue::Error::Full => StatusCode::INTERNAL_SERVER_ERROR, + queue::Error::Full => StatusCode::SERVICE_UNAVAILABLE, _ => StatusCode::BAD_REQUEST, }, #[cfg(feature = "telemetry")] diff --git a/crates/iroha_torii/src/routing.rs b/crates/iroha_torii/src/routing.rs index b50d3fee97..717b6eeb4c 100644 --- a/crates/iroha_torii/src/routing.rs +++ b/crates/iroha_torii/src/routing.rs @@ -24,7 +24,7 @@ pub async fn handle_transaction( queue: Arc, state: Arc, tx: SignedTransaction, -) -> Result<()> { +) -> Result { let (max_clock_drift, tx_limits) = { let state_view = state.world.view(); let params = state_view.parameters(); @@ -44,7 +44,9 @@ pub async fn handle_transaction( Box::new(err) }) - .map_err(Error::PushIntoQueue) + .map_err(Error::PushIntoQueue)?; + + Ok((StatusCode::ACCEPTED, ())) } #[iroha_futures::telemetry_future]