mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 04:11:07 +00:00
pallet-mmr: RPC API and Runtime API work with block numbers (#12345)
* pallet-mmr: RPC API works with block_numbers * fixes * update rpc * fmt * final touches in the rpc * temporary fix * fix * fmt * docs * Update lib.rs * use NumberFor * validate input * update runtime * convert block_number to u64 * small edit * update runtime api * test fix * runtime fix * update test function * fmt * fix nits * remove block_num_to_leaf_index from runtime api * Update frame/merkle-mountain-range/src/lib.rs Co-authored-by: Robert Hambrock <roberthambrock@gmail.com> * fix tests * get the code to compile after merge * get the tests to compile * fix in tests? * fix test * Update frame/merkle-mountain-range/src/tests.rs Co-authored-by: Adrian Catangiu <adrian@parity.io> * Update frame/merkle-mountain-range/src/lib.rs Co-authored-by: Adrian Catangiu <adrian@parity.io> * Update primitives/merkle-mountain-range/src/lib.rs Co-authored-by: Adrian Catangiu <adrian@parity.io> * fix errors & nits * change block_num_to_leaf_index * don't make any assumptions * Update frame/merkle-mountain-range/src/tests.rs Co-authored-by: Adrian Catangiu <adrian@parity.io> * Update frame/merkle-mountain-range/src/tests.rs Co-authored-by: Adrian Catangiu <adrian@parity.io> * Update frame/merkle-mountain-range/src/tests.rs Co-authored-by: Adrian Catangiu <adrian@parity.io> * fix * small fix * use best_known_block_number * best_known_block_number instead of leaves_count * more readable? * remove warning * Update frame/merkle-mountain-range/src/lib.rs Co-authored-by: Robert Hambrock <roberthambrock@gmail.com> * simplify * update docs * nits * fmt & fix * merge fixes * fix * small fix * docs & nit fixes * Nit fixes * remove leaf_indices_to_block_numbers() * fmt Co-authored-by: Robert Hambrock <roberthambrock@gmail.com> Co-authored-by: Adrian Catangiu <adrian@parity.io>
This commit is contained in:
@@ -142,7 +142,7 @@ pub use mmr_root_provider::MmrRootProvider;
|
||||
mod mmr_root_provider {
|
||||
use super::*;
|
||||
use crate::{known_payloads, payload::PayloadProvider, Payload};
|
||||
use sp_api::ProvideRuntimeApi;
|
||||
use sp_api::{NumberFor, ProvideRuntimeApi};
|
||||
use sp_mmr_primitives::MmrApi;
|
||||
use sp_runtime::generic::BlockId;
|
||||
use sp_std::{marker::PhantomData, sync::Arc};
|
||||
@@ -159,7 +159,7 @@ mod mmr_root_provider {
|
||||
where
|
||||
B: Block,
|
||||
R: ProvideRuntimeApi<B>,
|
||||
R::Api: MmrApi<B, MmrRootHash>,
|
||||
R::Api: MmrApi<B, MmrRootHash, NumberFor<B>>,
|
||||
{
|
||||
/// Create new BEEFY Payload provider with MMR Root as payload.
|
||||
pub fn new(runtime: Arc<R>) -> Self {
|
||||
@@ -182,7 +182,7 @@ mod mmr_root_provider {
|
||||
where
|
||||
B: Block,
|
||||
R: ProvideRuntimeApi<B>,
|
||||
R::Api: MmrApi<B, MmrRootHash>,
|
||||
R::Api: MmrApi<B, MmrRootHash, NumberFor<B>>,
|
||||
{
|
||||
fn payload(&self, header: &B::Header) -> Option<Payload> {
|
||||
self.mmr_root_from_digest_or_runtime(header).map(|mmr_root| {
|
||||
|
||||
@@ -387,6 +387,8 @@ impl<Hash> Proof<Hash> {
|
||||
/// Merkle Mountain Range operation error.
|
||||
#[derive(RuntimeDebug, codec::Encode, codec::Decode, PartialEq, Eq)]
|
||||
pub enum Error {
|
||||
/// Error during translation of a block number into a leaf index.
|
||||
BlockNumToLeafIndex,
|
||||
/// Error while pushing new node.
|
||||
Push,
|
||||
/// Error getting the new root.
|
||||
@@ -403,8 +405,8 @@ pub enum Error {
|
||||
PalletNotIncluded,
|
||||
/// Cannot find the requested leaf index
|
||||
InvalidLeafIndex,
|
||||
/// The provided leaves count is larger than the actual leaves count.
|
||||
InvalidLeavesCount,
|
||||
/// The provided best know block number is invalid.
|
||||
InvalidBestKnownBlock,
|
||||
}
|
||||
|
||||
impl Error {
|
||||
@@ -434,9 +436,9 @@ impl Error {
|
||||
|
||||
sp_api::decl_runtime_apis! {
|
||||
/// API to interact with MMR pallet.
|
||||
pub trait MmrApi<Hash: codec::Codec> {
|
||||
/// Generate MMR proof for a leaf under given index.
|
||||
fn generate_proof(leaf_index: LeafIndex) -> Result<(EncodableOpaqueLeaf, Proof<Hash>), Error>;
|
||||
pub trait MmrApi<Hash: codec::Codec, BlockNumber: codec::Codec> {
|
||||
/// Generate MMR proof for a block with a specified `block_number`.
|
||||
fn generate_proof(block_number: BlockNumber) -> Result<(EncodableOpaqueLeaf, Proof<Hash>), Error>;
|
||||
|
||||
/// Verify MMR proof against on-chain MMR.
|
||||
///
|
||||
@@ -457,14 +459,13 @@ sp_api::decl_runtime_apis! {
|
||||
/// Return the on-chain MMR root hash.
|
||||
fn mmr_root() -> Result<Hash, Error>;
|
||||
|
||||
/// Generate MMR proof for a series of leaves under given indices.
|
||||
fn generate_batch_proof(leaf_indices: Vec<LeafIndex>)
|
||||
-> Result<(Vec<EncodableOpaqueLeaf>, BatchProof<Hash>), Error>;
|
||||
/// Generate MMR proof for a series of blocks with the specified block numbers.
|
||||
fn generate_batch_proof(block_numbers: Vec<BlockNumber>) -> Result<(Vec<EncodableOpaqueLeaf>, BatchProof<Hash>), Error>;
|
||||
|
||||
/// Generate MMR proof for a series of leaves under given indices, using MMR at given `leaves_count` size.
|
||||
/// Generate MMR proof for a series of `block_numbers`, given the `best_known_block_number`.
|
||||
fn generate_historical_batch_proof(
|
||||
leaf_indices: Vec<LeafIndex>,
|
||||
leaves_count: LeafIndex
|
||||
block_numbers: Vec<BlockNumber>,
|
||||
best_known_block_number: BlockNumber
|
||||
) -> Result<(Vec<EncodableOpaqueLeaf>, BatchProof<Hash>), Error>;
|
||||
|
||||
/// Verify MMR proof against on-chain MMR for a batch of leaves.
|
||||
|
||||
Reference in New Issue
Block a user