forked from paritytech/polkadot-sdk
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
archive: Implement height, hashByHeight and call (paritytech#1582)
This PR implements: - `archive_unstable_finalized_height`: Get the height of the most recent finalized block - `archive_unstable_hash_by_height`: Get the hashes (possible empty) of blocks from the given height - `archive_unstable_call`: Call into the runtime of a block Builds on top of: paritytech#1560 ### Testing Done - unit tests for the methods with custom block tree for different heights / forks Closes: paritytech#1510 Closes: paritytech#1513 Closes: paritytech#1511 @paritytech/subxt-team --------- Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> Co-authored-by: Sebastian Kunert <skunert49@gmail.com>
- Loading branch information
Showing
6 changed files
with
435 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// This file is part of Substrate. | ||
|
||
// Copyright (C) Parity Technologies (UK) Ltd. | ||
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 | ||
|
||
// This program is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
|
||
// This program is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
|
||
// You should have received a copy of the GNU General Public License | ||
// along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
|
||
//! Error helpers for `archive` RPC module. | ||
use jsonrpsee::{ | ||
core::Error as RpcError, | ||
types::error::{CallError, ErrorObject}, | ||
}; | ||
|
||
/// ChainHead RPC errors. | ||
#[derive(Debug, thiserror::Error)] | ||
pub enum Error { | ||
/// Invalid parameter provided to the RPC method. | ||
#[error("Invalid parameter: {0}")] | ||
InvalidParam(String), | ||
/// Runtime call failed. | ||
#[error("Runtime call: {0}")] | ||
RuntimeCall(String), | ||
/// Failed to fetch leaves. | ||
#[error("Failed to fetch leaves of the chain: {0}")] | ||
FetchLeaves(String), | ||
} | ||
|
||
// Base code for all `archive` errors. | ||
const BASE_ERROR: i32 = 3000; | ||
/// Invalid parameter error. | ||
const INVALID_PARAM_ERROR: i32 = BASE_ERROR + 1; | ||
/// Runtime call error. | ||
const RUNTIME_CALL_ERROR: i32 = BASE_ERROR + 2; | ||
/// Failed to fetch leaves. | ||
const FETCH_LEAVES_ERROR: i32 = BASE_ERROR + 3; | ||
|
||
impl From<Error> for ErrorObject<'static> { | ||
fn from(e: Error) -> Self { | ||
let msg = e.to_string(); | ||
|
||
match e { | ||
Error::InvalidParam(_) => ErrorObject::owned(INVALID_PARAM_ERROR, msg, None::<()>), | ||
Error::RuntimeCall(_) => ErrorObject::owned(RUNTIME_CALL_ERROR, msg, None::<()>), | ||
Error::FetchLeaves(_) => ErrorObject::owned(FETCH_LEAVES_ERROR, msg, None::<()>), | ||
} | ||
.into() | ||
} | ||
} | ||
|
||
impl From<Error> for RpcError { | ||
fn from(e: Error) -> Self { | ||
CallError::Custom(e.into()).into() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,5 +27,6 @@ mod tests; | |
|
||
pub mod api; | ||
pub mod archive; | ||
pub mod error; | ||
|
||
pub use api::ArchiveApiServer; |
Oops, something went wrong.