mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-22 11:25:42 +00:00
Update MMR Runtime API - add proof batching (#4700)
* update runtime apis
* rebase
* update apis
* update apis
* minor fix
* minor fix
* minro fixes
* update api
* style fix
* update lockfile for {"substrate"}
Co-authored-by: acatangiu <adrian@parity.io>
Co-authored-by: parity-processbot <>
This commit is contained in:
Generated
+173
-173
File diff suppressed because it is too large
Load Diff
@@ -40,7 +40,8 @@ use pallet_grandpa::{
|
|||||||
fg_primitives, AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList,
|
fg_primitives, AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList,
|
||||||
};
|
};
|
||||||
use sp_mmr_primitives::{
|
use sp_mmr_primitives::{
|
||||||
DataOrHash, EncodableOpaqueLeaf, Error as MmrError, LeafDataProvider, Proof as MmrProof,
|
DataOrHash, EncodableOpaqueLeaf, Error as MmrError, LeafDataProvider,
|
||||||
|
BatchProof as MmrBatchProof, Proof as MmrProof, LeafIndex as MmrLeafIndex
|
||||||
};
|
};
|
||||||
use pallet_transaction_payment::{FeeDetails, Multiplier, RuntimeDispatchInfo};
|
use pallet_transaction_payment::{FeeDetails, Multiplier, RuntimeDispatchInfo};
|
||||||
use sp_api::impl_runtime_apis;
|
use sp_api::impl_runtime_apis;
|
||||||
@@ -575,6 +576,7 @@ mod benches {
|
|||||||
[pallet_bridge_token_swap, BridgeRialtoTokenSwap]
|
[pallet_bridge_token_swap, BridgeRialtoTokenSwap]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
type MmrHashing = <Runtime as pallet_mmr::Config>::Hashing;
|
||||||
|
|
||||||
impl_runtime_apis! {
|
impl_runtime_apis! {
|
||||||
impl sp_api::Core<Block> for Runtime {
|
impl sp_api::Core<Block> for Runtime {
|
||||||
@@ -681,25 +683,27 @@ impl_runtime_apis! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl sp_mmr_primitives::MmrApi<Block, MmrHash> for Runtime {
|
impl sp_mmr_primitives::MmrApi<Block, MmrHash> for Runtime {
|
||||||
fn generate_proof(leaf_index: u64)
|
fn generate_proof(leaf_index: MmrLeafIndex)
|
||||||
-> Result<(EncodableOpaqueLeaf, MmrProof<MmrHash>), MmrError>
|
-> Result<(EncodableOpaqueLeaf, MmrProof<MmrHash>), MmrError>
|
||||||
{
|
{
|
||||||
Mmr::generate_proof(leaf_index)
|
Mmr::generate_batch_proof(vec![leaf_index])
|
||||||
.map(|(leaf, proof)| (EncodableOpaqueLeaf::from_leaf(&leaf), proof))
|
.and_then(|(leaves, proof)| Ok((
|
||||||
|
EncodableOpaqueLeaf::from_leaf(&leaves[0]),
|
||||||
|
MmrBatchProof::into_single_leaf_proof(proof)?
|
||||||
|
)))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof(leaf: EncodableOpaqueLeaf, proof: MmrProof<MmrHash>)
|
fn verify_proof(leaf: EncodableOpaqueLeaf, proof: MmrProof<MmrHash>)
|
||||||
-> Result<(), MmrError>
|
-> Result<(), MmrError>
|
||||||
{
|
{
|
||||||
pub type Leaf = <
|
|
||||||
<Runtime as pallet_mmr::Config>::LeafData as LeafDataProvider
|
|
||||||
>::LeafData;
|
|
||||||
|
|
||||||
let leaf: Leaf = leaf
|
type MmrLeaf = <<Runtime as pallet_mmr::Config>::LeafData as LeafDataProvider>::LeafData;
|
||||||
|
let leaf: MmrLeaf = leaf
|
||||||
.into_opaque_leaf()
|
.into_opaque_leaf()
|
||||||
.try_decode()
|
.try_decode()
|
||||||
.ok_or(MmrError::Verify)?;
|
.ok_or(MmrError::Verify)?;
|
||||||
Mmr::verify_leaf(leaf, proof)
|
Mmr::verify_leaves(vec![leaf], MmrProof::into_batch_proof(proof))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof_stateless(
|
fn verify_proof_stateless(
|
||||||
@@ -707,9 +711,35 @@ impl_runtime_apis! {
|
|||||||
leaf: EncodableOpaqueLeaf,
|
leaf: EncodableOpaqueLeaf,
|
||||||
proof: MmrProof<MmrHash>
|
proof: MmrProof<MmrHash>
|
||||||
) -> Result<(), MmrError> {
|
) -> Result<(), MmrError> {
|
||||||
type MmrHashing = <Runtime as pallet_mmr::Config>::Hashing;
|
|
||||||
let node = DataOrHash::Data(leaf.into_opaque_leaf());
|
let node = DataOrHash::Data(leaf.into_opaque_leaf());
|
||||||
pallet_mmr::verify_leaf_proof::<MmrHashing, _>(root, node, proof)
|
pallet_mmr::verify_leaves_proof::<MmrHashing, _>(root, vec![node], MmrProof::into_batch_proof(proof))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate_batch_proof(leaf_indices: Vec<MmrLeafIndex>)
|
||||||
|
-> Result<(Vec<EncodableOpaqueLeaf>, MmrBatchProof<MmrHash>), MmrError>
|
||||||
|
{
|
||||||
|
Mmr::generate_batch_proof(leaf_indices)
|
||||||
|
.map(|(leaves, proof)| (leaves.into_iter().map(|leaf| EncodableOpaqueLeaf::from_leaf(&leaf)).collect(), proof))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof(leaves: Vec<EncodableOpaqueLeaf>, proof: MmrBatchProof<MmrHash>)
|
||||||
|
-> Result<(), MmrError>
|
||||||
|
{
|
||||||
|
type MmrLeaf = <<Runtime as pallet_mmr::Config>::LeafData as LeafDataProvider>::LeafData;
|
||||||
|
let leaves = leaves.into_iter().map(|leaf|
|
||||||
|
leaf.into_opaque_leaf()
|
||||||
|
.try_decode()
|
||||||
|
.ok_or(MmrError::Verify)).collect::<Result<Vec<MmrLeaf>, MmrError>>()?;
|
||||||
|
Mmr::verify_leaves(leaves, proof)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof_stateless(
|
||||||
|
root: MmrHash,
|
||||||
|
leaves: Vec<EncodableOpaqueLeaf>,
|
||||||
|
proof: MmrBatchProof<MmrHash>
|
||||||
|
) -> Result<(), MmrError> {
|
||||||
|
let nodes = leaves.into_iter().map(|leaf|DataOrHash::Data(leaf.into_opaque_leaf())).collect();
|
||||||
|
pallet_mmr::verify_leaves_proof::<MmrHashing, _>(root, nodes, proof)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ use pallet_grandpa::{
|
|||||||
fg_primitives, AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList,
|
fg_primitives, AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList,
|
||||||
};
|
};
|
||||||
use sp_mmr_primitives::{
|
use sp_mmr_primitives::{
|
||||||
DataOrHash, EncodableOpaqueLeaf, Error as MmrError, LeafDataProvider, Proof as MmrProof,
|
DataOrHash, EncodableOpaqueLeaf, Error as MmrError, LeafDataProvider,
|
||||||
|
BatchProof as MmrBatchProof, Proof as MmrProof, LeafIndex as MmrLeafIndex
|
||||||
};
|
};
|
||||||
use pallet_transaction_payment::{FeeDetails, Multiplier, RuntimeDispatchInfo};
|
use pallet_transaction_payment::{FeeDetails, Multiplier, RuntimeDispatchInfo};
|
||||||
use sp_api::impl_runtime_apis;
|
use sp_api::impl_runtime_apis;
|
||||||
@@ -571,6 +572,7 @@ mod benches {
|
|||||||
[pallet_bridge_grandpa, BridgeMillauGrandpa]
|
[pallet_bridge_grandpa, BridgeMillauGrandpa]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
pub type MmrHashing = <Runtime as pallet_mmr::Config>::Hashing;
|
||||||
|
|
||||||
impl_runtime_apis! {
|
impl_runtime_apis! {
|
||||||
impl sp_api::Core<Block> for Runtime {
|
impl sp_api::Core<Block> for Runtime {
|
||||||
@@ -630,22 +632,23 @@ impl_runtime_apis! {
|
|||||||
fn generate_proof(leaf_index: u64)
|
fn generate_proof(leaf_index: u64)
|
||||||
-> Result<(EncodableOpaqueLeaf, MmrProof<Hash>), MmrError>
|
-> Result<(EncodableOpaqueLeaf, MmrProof<Hash>), MmrError>
|
||||||
{
|
{
|
||||||
Mmr::generate_proof(leaf_index)
|
Mmr::generate_batch_proof(vec![leaf_index])
|
||||||
.map(|(leaf, proof)| (EncodableOpaqueLeaf::from_leaf(&leaf), proof))
|
.and_then(|(leaves, proof)| Ok((
|
||||||
|
EncodableOpaqueLeaf::from_leaf(&leaves[0]),
|
||||||
|
MmrBatchProof::into_single_leaf_proof(proof)?
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof(leaf: EncodableOpaqueLeaf, proof: MmrProof<Hash>)
|
fn verify_proof(leaf: EncodableOpaqueLeaf, proof: MmrProof<Hash>)
|
||||||
-> Result<(), MmrError>
|
-> Result<(), MmrError>
|
||||||
{
|
{
|
||||||
pub type Leaf = <
|
|
||||||
<Runtime as pallet_mmr::Config>::LeafData as LeafDataProvider
|
|
||||||
>::LeafData;
|
|
||||||
|
|
||||||
let leaf: Leaf = leaf
|
pub type MmrLeaf = <<Runtime as pallet_mmr::Config>::LeafData as LeafDataProvider>::LeafData;
|
||||||
|
let leaf: MmrLeaf = leaf
|
||||||
.into_opaque_leaf()
|
.into_opaque_leaf()
|
||||||
.try_decode()
|
.try_decode()
|
||||||
.ok_or(MmrError::Verify)?;
|
.ok_or(MmrError::Verify)?;
|
||||||
Mmr::verify_leaf(leaf, proof)
|
Mmr::verify_leaves(vec![leaf], MmrProof::into_batch_proof(proof))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof_stateless(
|
fn verify_proof_stateless(
|
||||||
@@ -653,9 +656,35 @@ impl_runtime_apis! {
|
|||||||
leaf: EncodableOpaqueLeaf,
|
leaf: EncodableOpaqueLeaf,
|
||||||
proof: MmrProof<Hash>
|
proof: MmrProof<Hash>
|
||||||
) -> Result<(), MmrError> {
|
) -> Result<(), MmrError> {
|
||||||
type MmrHashing = <Runtime as pallet_mmr::Config>::Hashing;
|
|
||||||
let node = DataOrHash::Data(leaf.into_opaque_leaf());
|
let node = DataOrHash::Data(leaf.into_opaque_leaf());
|
||||||
pallet_mmr::verify_leaf_proof::<MmrHashing, _>(root, node, proof)
|
pallet_mmr::verify_leaves_proof::<MmrHashing, _>(root, vec![node], MmrProof::into_batch_proof(proof))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate_batch_proof(leaf_indices: Vec<MmrLeafIndex>)
|
||||||
|
-> Result<(Vec<EncodableOpaqueLeaf>, MmrBatchProof<Hash>), MmrError>
|
||||||
|
{
|
||||||
|
Mmr::generate_batch_proof(leaf_indices)
|
||||||
|
.map(|(leaves, proof)| (leaves.into_iter().map(|leaf| EncodableOpaqueLeaf::from_leaf(&leaf)).collect(), proof))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof(leaves: Vec<EncodableOpaqueLeaf>, proof: MmrBatchProof<Hash>)
|
||||||
|
-> Result<(), MmrError>
|
||||||
|
{
|
||||||
|
pub type MmrLeaf = <<Runtime as pallet_mmr::Config>::LeafData as LeafDataProvider>::LeafData;
|
||||||
|
let leaves = leaves.into_iter().map(|leaf|
|
||||||
|
leaf.into_opaque_leaf()
|
||||||
|
.try_decode()
|
||||||
|
.ok_or(MmrError::Verify)).collect::<Result<Vec<MmrLeaf>, MmrError>>()?;
|
||||||
|
Mmr::verify_leaves(leaves, proof)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof_stateless(
|
||||||
|
root: Hash,
|
||||||
|
leaves: Vec<EncodableOpaqueLeaf>,
|
||||||
|
proof: MmrBatchProof<Hash>
|
||||||
|
) -> Result<(), MmrError> {
|
||||||
|
let nodes = leaves.into_iter().map(|leaf|DataOrHash::Data(leaf.into_opaque_leaf())).collect();
|
||||||
|
pallet_mmr::verify_leaves_proof::<MmrHashing, _>(root, nodes, proof)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1774,15 +1774,13 @@ sp_api::impl_runtime_apis! {
|
|||||||
fn generate_proof(_leaf_index: u64)
|
fn generate_proof(_leaf_index: u64)
|
||||||
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
||||||
{
|
{
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::GenerateProof)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof(_leaf: mmr::EncodableOpaqueLeaf, _proof: mmr::Proof<Hash>)
|
fn verify_proof(_leaf: mmr::EncodableOpaqueLeaf, _proof: mmr::Proof<Hash>)
|
||||||
-> Result<(), mmr::Error>
|
-> Result<(), mmr::Error>
|
||||||
{
|
{
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof_stateless(
|
fn verify_proof_stateless(
|
||||||
@@ -1790,15 +1788,32 @@ sp_api::impl_runtime_apis! {
|
|||||||
_leaf: mmr::EncodableOpaqueLeaf,
|
_leaf: mmr::EncodableOpaqueLeaf,
|
||||||
_proof: mmr::Proof<Hash>
|
_proof: mmr::Proof<Hash>
|
||||||
) -> Result<(), mmr::Error> {
|
) -> Result<(), mmr::Error> {
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mmr_root() -> Result<Hash, mmr::Error> {
|
fn mmr_root() -> Result<Hash, mmr::Error> {
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generate_batch_proof(_leaf_indices: Vec<u64>)
|
||||||
|
-> Result<(Vec<mmr::EncodableOpaqueLeaf>, mmr::BatchProof<Hash>), mmr::Error>
|
||||||
|
{
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof(_leaves: Vec<mmr::EncodableOpaqueLeaf>, _proof: mmr::BatchProof<Hash>)
|
||||||
|
-> Result<(), mmr::Error>
|
||||||
|
{
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof_stateless(
|
||||||
|
_root: Hash,
|
||||||
|
_leaves: Vec<mmr::EncodableOpaqueLeaf>,
|
||||||
|
_proof: mmr::BatchProof<Hash>
|
||||||
|
) -> Result<(), mmr::Error> {
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fg_primitives::GrandpaApi<Block> for Runtime {
|
impl fg_primitives::GrandpaApi<Block> for Runtime {
|
||||||
|
|||||||
@@ -1720,15 +1720,13 @@ sp_api::impl_runtime_apis! {
|
|||||||
fn generate_proof(_leaf_index: u64)
|
fn generate_proof(_leaf_index: u64)
|
||||||
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
||||||
{
|
{
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::GenerateProof)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof(_leaf: mmr::EncodableOpaqueLeaf, _proof: mmr::Proof<Hash>)
|
fn verify_proof(_leaf: mmr::EncodableOpaqueLeaf, _proof: mmr::Proof<Hash>)
|
||||||
-> Result<(), mmr::Error>
|
-> Result<(), mmr::Error>
|
||||||
{
|
{
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof_stateless(
|
fn verify_proof_stateless(
|
||||||
@@ -1736,13 +1734,31 @@ sp_api::impl_runtime_apis! {
|
|||||||
_leaf: mmr::EncodableOpaqueLeaf,
|
_leaf: mmr::EncodableOpaqueLeaf,
|
||||||
_proof: mmr::Proof<Hash>
|
_proof: mmr::Proof<Hash>
|
||||||
) -> Result<(), mmr::Error> {
|
) -> Result<(), mmr::Error> {
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mmr_root() -> Result<Hash, mmr::Error> {
|
fn mmr_root() -> Result<Hash, mmr::Error> {
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
}
|
||||||
|
|
||||||
|
fn generate_batch_proof(_leaf_indices: Vec<u64>)
|
||||||
|
-> Result<(Vec<mmr::EncodableOpaqueLeaf>, mmr::BatchProof<Hash>), mmr::Error>
|
||||||
|
{
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof(_leaves: Vec<mmr::EncodableOpaqueLeaf>, _proof: mmr::BatchProof<Hash>)
|
||||||
|
-> Result<(), mmr::Error>
|
||||||
|
{
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof_stateless(
|
||||||
|
_root: Hash,
|
||||||
|
_leaves: Vec<mmr::EncodableOpaqueLeaf>,
|
||||||
|
_proof: mmr::BatchProof<Hash>
|
||||||
|
) -> Result<(), mmr::Error> {
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1100,6 +1100,8 @@ mod benches {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type MmrHashing = <Runtime as pallet_mmr::Config>::Hashing;
|
||||||
|
|
||||||
#[cfg(not(feature = "disable-runtime-api"))]
|
#[cfg(not(feature = "disable-runtime-api"))]
|
||||||
sp_api::impl_runtime_apis! {
|
sp_api::impl_runtime_apis! {
|
||||||
impl sp_api::Core<Block> for Runtime {
|
impl sp_api::Core<Block> for Runtime {
|
||||||
@@ -1376,22 +1378,22 @@ sp_api::impl_runtime_apis! {
|
|||||||
fn generate_proof(leaf_index: u64)
|
fn generate_proof(leaf_index: u64)
|
||||||
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
||||||
{
|
{
|
||||||
Mmr::generate_proof(leaf_index)
|
Mmr::generate_batch_proof(vec![leaf_index])
|
||||||
.map(|(leaf, proof)| (mmr::EncodableOpaqueLeaf::from_leaf(&leaf), proof))
|
.and_then(|(leaves, proof)| Ok((
|
||||||
|
mmr::EncodableOpaqueLeaf::from_leaf(&leaves[0]),
|
||||||
|
mmr::BatchProof::into_single_leaf_proof(proof)?
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof(leaf: mmr::EncodableOpaqueLeaf, proof: mmr::Proof<Hash>)
|
fn verify_proof(leaf: mmr::EncodableOpaqueLeaf, proof: mmr::Proof<Hash>)
|
||||||
-> Result<(), mmr::Error>
|
-> Result<(), mmr::Error>
|
||||||
{
|
{
|
||||||
pub type Leaf = <
|
pub type MmrLeaf = <<Runtime as pallet_mmr::Config>::LeafData as mmr::LeafDataProvider>::LeafData;
|
||||||
<Runtime as pallet_mmr::Config>::LeafData as pallet_mmr::LeafDataProvider
|
let leaf: MmrLeaf = leaf
|
||||||
>::LeafData;
|
|
||||||
|
|
||||||
let leaf: Leaf = leaf
|
|
||||||
.into_opaque_leaf()
|
.into_opaque_leaf()
|
||||||
.try_decode()
|
.try_decode()
|
||||||
.ok_or(mmr::Error::Verify)?;
|
.ok_or(mmr::Error::Verify)?;
|
||||||
Mmr::verify_leaf(leaf, proof)
|
Mmr::verify_leaves(vec![leaf], mmr::Proof::into_batch_proof(proof))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof_stateless(
|
fn verify_proof_stateless(
|
||||||
@@ -1399,14 +1401,40 @@ sp_api::impl_runtime_apis! {
|
|||||||
leaf: mmr::EncodableOpaqueLeaf,
|
leaf: mmr::EncodableOpaqueLeaf,
|
||||||
proof: mmr::Proof<Hash>
|
proof: mmr::Proof<Hash>
|
||||||
) -> Result<(), mmr::Error> {
|
) -> Result<(), mmr::Error> {
|
||||||
type MmrHashing = <Runtime as pallet_mmr::Config>::Hashing;
|
|
||||||
let node = mmr::DataOrHash::Data(leaf.into_opaque_leaf());
|
let node = mmr::DataOrHash::Data(leaf.into_opaque_leaf());
|
||||||
pallet_mmr::verify_leaf_proof::<MmrHashing, _>(root, node, proof)
|
pallet_mmr::verify_leaves_proof::<MmrHashing, _>(root, vec![node], mmr::Proof::into_batch_proof(proof))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mmr_root() -> Result<Hash, mmr::Error> {
|
fn mmr_root() -> Result<Hash, mmr::Error> {
|
||||||
Ok(Mmr::mmr_root())
|
Ok(Mmr::mmr_root())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generate_batch_proof(leaf_indices: Vec<mmr::LeafIndex>)
|
||||||
|
-> Result<(Vec<mmr::EncodableOpaqueLeaf>, mmr::BatchProof<Hash>), mmr::Error>
|
||||||
|
{
|
||||||
|
Mmr::generate_batch_proof(leaf_indices)
|
||||||
|
.map(|(leaves, proof)| (leaves.into_iter().map(|leaf| mmr::EncodableOpaqueLeaf::from_leaf(&leaf)).collect(), proof))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof(leaves: Vec<mmr::EncodableOpaqueLeaf>, proof: mmr::BatchProof<Hash>)
|
||||||
|
-> Result<(), mmr::Error>
|
||||||
|
{
|
||||||
|
pub type MmrLeaf = <<Runtime as pallet_mmr::Config>::LeafData as mmr::LeafDataProvider>::LeafData;
|
||||||
|
let leaves = leaves.into_iter().map(|leaf|
|
||||||
|
leaf.into_opaque_leaf()
|
||||||
|
.try_decode()
|
||||||
|
.ok_or(mmr::Error::Verify)).collect::<Result<Vec<MmrLeaf>, mmr::Error>>()?;
|
||||||
|
Mmr::verify_leaves(leaves, proof)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof_stateless(
|
||||||
|
root: Hash,
|
||||||
|
leaves: Vec<mmr::EncodableOpaqueLeaf>,
|
||||||
|
proof: mmr::BatchProof<Hash>
|
||||||
|
) -> Result<(), mmr::Error> {
|
||||||
|
let nodes = leaves.into_iter().map(|leaf|mmr::DataOrHash::Data(leaf.into_opaque_leaf())).collect();
|
||||||
|
pallet_mmr::verify_leaves_proof::<MmrHashing, _>(root, nodes, proof)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl bp_rococo::RococoFinalityApi<Block> for Runtime {
|
impl bp_rococo::RococoFinalityApi<Block> for Runtime {
|
||||||
|
|||||||
@@ -919,15 +919,13 @@ sp_api::impl_runtime_apis! {
|
|||||||
fn generate_proof(_leaf_index: u64)
|
fn generate_proof(_leaf_index: u64)
|
||||||
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
||||||
{
|
{
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::GenerateProof)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof(_leaf: mmr::EncodableOpaqueLeaf, _proof: mmr::Proof<Hash>)
|
fn verify_proof(_leaf: mmr::EncodableOpaqueLeaf, _proof: mmr::Proof<Hash>)
|
||||||
-> Result<(), mmr::Error>
|
-> Result<(), mmr::Error>
|
||||||
{
|
{
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof_stateless(
|
fn verify_proof_stateless(
|
||||||
@@ -935,15 +933,32 @@ sp_api::impl_runtime_apis! {
|
|||||||
_leaf: mmr::EncodableOpaqueLeaf,
|
_leaf: mmr::EncodableOpaqueLeaf,
|
||||||
_proof: mmr::Proof<Hash>
|
_proof: mmr::Proof<Hash>
|
||||||
) -> Result<(), mmr::Error> {
|
) -> Result<(), mmr::Error> {
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mmr_root() -> Result<Hash, mmr::Error> {
|
fn mmr_root() -> Result<Hash, mmr::Error> {
|
||||||
// dummy implementation due to lack of MMR pallet.
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
Err(mmr::Error::Verify)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generate_batch_proof(_leaf_indices: Vec<u64>)
|
||||||
|
-> Result<(Vec<mmr::EncodableOpaqueLeaf>, mmr::BatchProof<Hash>), mmr::Error>
|
||||||
|
{
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof(_leaves: Vec<mmr::EncodableOpaqueLeaf>, _proof: mmr::BatchProof<Hash>)
|
||||||
|
-> Result<(), mmr::Error>
|
||||||
|
{
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof_stateless(
|
||||||
|
_root: Hash,
|
||||||
|
_leaves: Vec<mmr::EncodableOpaqueLeaf>,
|
||||||
|
_proof: mmr::BatchProof<Hash>
|
||||||
|
) -> Result<(), mmr::Error> {
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fg_primitives::GrandpaApi<Block> for Runtime {
|
impl fg_primitives::GrandpaApi<Block> for Runtime {
|
||||||
|
|||||||
@@ -1362,15 +1362,15 @@ sp_api::impl_runtime_apis! {
|
|||||||
fn generate_proof(_leaf_index: u64)
|
fn generate_proof(_leaf_index: u64)
|
||||||
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
-> Result<(mmr::EncodableOpaqueLeaf, mmr::Proof<Hash>), mmr::Error>
|
||||||
{
|
{
|
||||||
// dummy implementation due to lack of MMR pallet.
|
|
||||||
Err(mmr::Error::GenerateProof)
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof(_leaf: mmr::EncodableOpaqueLeaf, _proof: mmr::Proof<Hash>)
|
fn verify_proof(_leaf: mmr::EncodableOpaqueLeaf, _proof: mmr::Proof<Hash>)
|
||||||
-> Result<(), mmr::Error>
|
-> Result<(), mmr::Error>
|
||||||
{
|
{
|
||||||
// dummy implementation due to lack of MMR pallet.
|
|
||||||
Err(mmr::Error::Verify)
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_proof_stateless(
|
fn verify_proof_stateless(
|
||||||
@@ -1378,13 +1378,36 @@ sp_api::impl_runtime_apis! {
|
|||||||
_leaf: mmr::EncodableOpaqueLeaf,
|
_leaf: mmr::EncodableOpaqueLeaf,
|
||||||
_proof: mmr::Proof<Hash>
|
_proof: mmr::Proof<Hash>
|
||||||
) -> Result<(), mmr::Error> {
|
) -> Result<(), mmr::Error> {
|
||||||
// dummy implementation due to lack of MMR pallet.
|
|
||||||
Err(mmr::Error::Verify)
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mmr_root() -> Result<Hash, mmr::Error> {
|
fn mmr_root() -> Result<Hash, mmr::Error> {
|
||||||
// dummy implementation due to lack of MMR pallet.
|
|
||||||
Err(mmr::Error::Verify)
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate_batch_proof(_leaf_indices: Vec<u64>)
|
||||||
|
-> Result<(Vec<mmr::EncodableOpaqueLeaf>, mmr::BatchProof<Hash>), mmr::Error>
|
||||||
|
{
|
||||||
|
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof(_leaves: Vec<mmr::EncodableOpaqueLeaf>, _proof: mmr::BatchProof<Hash>)
|
||||||
|
-> Result<(), mmr::Error>
|
||||||
|
{
|
||||||
|
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_batch_proof_stateless(
|
||||||
|
_root: Hash,
|
||||||
|
_leaves: Vec<mmr::EncodableOpaqueLeaf>,
|
||||||
|
_proof: mmr::BatchProof<Hash>
|
||||||
|
) -> Result<(), mmr::Error> {
|
||||||
|
|
||||||
|
Err(mmr::Error::PalletNotIncluded)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user