Trait mmr_rpc::MmrApiServer

source ·
pub trait MmrApiServer<BlockHash, BlockNumber, MmrHash>: Sized + Send + Sync + 'static {
    fn mmr_root(&self, at: Option<BlockHash>) -> RpcResult<MmrHash>;
    fn generate_proof(
        &self,
        block_numbers: Vec<BlockNumber>,
        best_known_block_number: Option<BlockNumber>,
        at: Option<BlockHash>
    ) -> RpcResult<LeavesProof<BlockHash>>; fn verify_proof(&self, proof: LeavesProof<BlockHash>) -> RpcResult<bool>; fn verify_proof_stateless(
        &self,
        mmr_root: MmrHash,
        proof: LeavesProof<BlockHash>
    ) -> RpcResult<bool>; fn into_rpc(self) -> RpcModule<Self>
    where
        BlockHash: Send + Sync + 'static + DeserializeOwned + Serialize,
        BlockNumber: Send + Sync + 'static + DeserializeOwned,
        MmrHash: Send + Sync + 'static + DeserializeOwned + Serialize
, { ... } }
Expand description

Server trait implementation for the MmrApi RPC API.

Required Methods§

source

fn mmr_root(&self, at: Option<BlockHash>) -> RpcResult<MmrHash>

Get the MMR root hash for the current best block.

source

fn generate_proof(
    &self,
    block_numbers: Vec<BlockNumber>,
    best_known_block_number: Option<BlockNumber>,
    at: Option<BlockHash>
) -> RpcResult<LeavesProof<BlockHash>>

Generate an MMR proof for the given block_numbers.

This method calls into a runtime with MMR pallet included and attempts to generate an MMR proof for the set of blocks that have the given block_numbers with the MMR root at best_known_block_number. best_known_block_number must be larger than all the block_numbers for the function to succeed.

Optionally via at, a block hash at which the runtime should be queried can be specified. Optionally via best_known_block_number, the proof can be generated using the MMR’s state at a specific best block. Note that if best_known_block_number is provided, then also specifying the block hash via at isn’t super-useful here, unless you’re generating proof using non-finalized blocks where there are several competing forks. That’s because MMR state will be fixed to the state with best_known_block_number, which already points to some historical block.

Returns the (full) leaves and a proof for these leaves (compact encoding, i.e. hash of the leaves). Both parameters are SCALE-encoded. The order of entries in the leaves field of the returned struct is the same as the order of the entries in block_numbers supplied

source

fn verify_proof(&self, proof: LeavesProof<BlockHash>) -> RpcResult<bool>

Verify an MMR proof.

This method calls into a runtime with MMR pallet included and attempts to verify an MMR proof.

Returns true if the proof is valid, else returns the verification error.

source

fn verify_proof_stateless(
    &self,
    mmr_root: MmrHash,
    proof: LeavesProof<BlockHash>
) -> RpcResult<bool>

Verify an MMR proof statelessly given an mmr_root.

This method calls into a runtime with MMR pallet included and attempts to verify an MMR proof against a provided MMR root.

Returns true if the proof is valid, else returns the verification error.

Provided Methods§

source

fn into_rpc(self) -> RpcModule<Self>where
    BlockHash: Send + Sync + 'static + DeserializeOwned + Serialize,
    BlockNumber: Send + Sync + 'static + DeserializeOwned,
    MmrHash: Send + Sync + 'static + DeserializeOwned + Serialize,

Collects all the methods and subscriptions defined in the trait and adds them into a single RpcModule.

Implementors§

source§

impl<Client, Block, MmrHash> MmrApiServer<<Block as Block>::Hash, <<Block as Block>::Header as Header>::Number, MmrHash> for Mmr<Client, (Block, MmrHash)>where
    Block: BlockT,
    Client: Send + Sync + 'static + ProvideRuntimeApi<Block> + HeaderBackend<Block>,
    Client::Api: MmrRuntimeApi<Block, MmrHash, NumberFor<Block>>,
    MmrHash: Codec + Send + Sync + 'static,