Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 32 additions & 14 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ homepage = "https://www.availproject.org/"


[workspace.dependencies]
avail-core = { git = "https://github.com/availproject/avail-core", tag = "core-node-3", default-features = false, features = [ "runtime"] }
kate = { git = "https://github.com/availproject/avail-core", tag = "core-node-3", default-features = false }
kate-recovery = { git = "https://github.com/availproject/avail-core", tag = "core-node-3", default-features = false }
# avail-core = { path = "../avail-core/core", default-features = false, features = [ "runtime"] }
# kate = { path = "../avail-core/kate/", default-features = false }
# kate-recovery = { path = "../avail-core/kate/recovery/", default-features = false}
avail-core = { git = "https://github.com/utsire/avail-core", rev = "a4e539dedada70a103a1d364e36465b7bdeb533c", default-features = false, features = [ "runtime"] }
kate = { git = "https://github.com/utsire/avail-core", rev="a4e539dedada70a103a1d364e36465b7bdeb533c", default-features = false }
kate-recovery = { git = "https://github.com/utsire/avail-core", rev = "a4e539dedada70a103a1d364e36465b7bdeb533c", default-features = false }
#avail-core = { path = "../avail-core/core", default-features = false, features = [ "runtime"] }
#kate = { path = "../avail-core/kate/", default-features = false }
#kate-recovery = { path = "../avail-core/kate/recovery/", default-features = false}

avail-base = { path = "base", default-features = false }
da-control = { path = "pallets/dactr", default-features = false }
Expand Down
3 changes: 1 addition & 2 deletions pallets/system/src/native/build_extension_v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ use avail_core::{
use kate::{
couscous::multiproof_params,
gridgen::{AsBytes, EvaluationGrid},
pmp::m1_blst::M1NoPrecomp,
Seed,
M1NoPrecomp, Seed,
};
use sp_core::H256;
use sp_runtime::SaturatedConversion;
Expand Down
3 changes: 1 addition & 2 deletions pallets/system/src/native/build_extension_v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ use avail_core::{
use kate::{
couscous::multiproof_params,
gridgen::{AsBytes, EvaluationGrid},
pmp::m1_blst::M1NoPrecomp,
Seed,
M1NoPrecomp, Seed,
};
use sp_core::H256;
use sp_runtime::SaturatedConversion;
Expand Down
1 change: 1 addition & 0 deletions rpc/kate-rpc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ da-runtime.workspace = true
frame-system = { workspace = true, default-features = false }
avail-core = { workspace = true, default-features = false }
kate = { workspace = true, default-features = false }
kate-recovery = { workspace = true, default-features = false }

# 3rd party
jsonrpsee.workspace = true
Expand Down
47 changes: 46 additions & 1 deletion rpc/kate-rpc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use avail_core::{
data_proof::ProofResponse, header::HeaderExtension, traits::ExtendedHeader, OpaqueExtrinsic,
};
use da_runtime::apis::{DataAvailApi, KateApi as RTKateApi};
use da_runtime::kate::{GDataProof, GRow};
use da_runtime::kate::{GDataProof, GMultiProof, GRow};
use kate::com::Cell;

use frame_support::BoundedVec;
Expand Down Expand Up @@ -47,6 +47,13 @@ where
at: Option<HashOf<Block>>,
) -> RpcResult<Vec<GDataProof>>;

#[method(name = "kate_queryMultiProof")]
async fn query_multiproof(
&self,
cells: Cells,
at: Option<HashOf<Block>>,
) -> RpcResult<Vec<GMultiProof>>;

#[method(name = "kate_blockLength")]
async fn query_block_length(&self, at: Option<HashOf<Block>>) -> RpcResult<BlockLength>;

Expand Down Expand Up @@ -240,6 +247,44 @@ where
Ok(proof)
}

async fn query_multiproof(
&self,
cells: Cells,
at: Option<HashOf<Block>>,
) -> RpcResult<Vec<GMultiProof>> {
if cells.len() > self.max_cells_size {
return Err(
internal_err!(
"Cannot query ({}) more than {} amount of cells per request. Either increase the max cells size (--kate-max-cells-size) or query less amount of cells per request.",
cells.len(),
self.max_cells_size
)
);
}

let _metric_observer = MetricObserver::new(ObserveKind::KateQueryProof);

let (api, at, number, block_len, extrinsics, header) = self.scope(at)?;
match header.extension() {
HeaderExtension::V3(ext) => {
if ext.commitment.commitment.is_empty() {
return Err(internal_err!("Requested block {at} has empty commitments"));
}
},
};

let cells = cells
.into_iter()
.map(|cell| (cell.row.0, cell.col.0))
.collect::<Vec<_>>();
let proof = api
.multiproof(at, number, extrinsics, block_len, cells)
.map_err(|kate_err| internal_err!("KateApi::proof failed: {kate_err:?}"))?
.map_err(|api_err| internal_err!("Failed API: {api_err:?}"))?;

Ok(proof)
}

async fn query_block_length(&self, at: Option<HashOf<Block>>) -> RpcResult<BlockLength> {
let _metric_observer = MetricObserver::new(ObserveKind::KateQueryBlockLength);

Expand Down
1 change: 1 addition & 0 deletions runtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
avail-base = { workspace = true, default-features = false }
avail-core = { workspace = true, default-features = false }
kate = { workspace = true, default-features = false }
kate-recovery = { workspace = true, default-features = false }

da-control = { workspace = true, default-features = false }
pallet-mandate = { workspace = true, default-features = false }
Expand Down
16 changes: 12 additions & 4 deletions runtime/src/apis.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use super::kate::{Error as RTKateError, GDataProof, GRow};
use crate::{
constants, mmr, version::VERSION, AccountId, AuthorityDiscovery, Babe, Block, BlockNumber,
EpochDuration, Executive, Grandpa, Historical, Index, InherentDataExt, Mmr, NominationPools,
OpaqueMetadata, Runtime, RuntimeCall, RuntimeGenesisConfig, SessionKeys, Staking, System,
TransactionPayment, LOG_TARGET,
constants, kate::GMultiProof, mmr, version::VERSION, AccountId, AuthorityDiscovery, Babe,
Block, BlockNumber, EpochDuration, Executive, Grandpa, Historical, Index, InherentDataExt, Mmr,
NominationPools, OpaqueMetadata, Runtime, RuntimeCall, RuntimeGenesisConfig, SessionKeys,
Staking, System, TransactionPayment, LOG_TARGET,
};
use avail_base::{HeaderExtensionBuilderData, ProvidePostInherent};
use avail_core::{
Expand Down Expand Up @@ -66,6 +66,7 @@ decl_runtime_apis! {
fn data_proof(block_number: u32, extrinsics: Vec<OpaqueExtrinsic>, tx_idx: u32) -> Option<ProofResponse>;
fn rows(block_number: u32, extrinsics: Vec<OpaqueExtrinsic>, block_len: BlockLength, rows: Vec<u32>) -> Result<Vec<GRow>, RTKateError >;
fn proof(block_number: u32, extrinsics: Vec<OpaqueExtrinsic>, block_len: BlockLength, cells: Vec<(u32,u32)> ) -> Result<Vec<GDataProof>, RTKateError>;
fn multiproof(block_number: u32, extrinsics: Vec<OpaqueExtrinsic>, block_len: BlockLength, cells: Vec<(u32,u32)> ) -> Result<Vec<GMultiProof>, RTKateError>;
}
}

Expand Down Expand Up @@ -443,6 +444,13 @@ impl_runtime_apis! {
log::trace!(target: LOG_TARGET, "KateApi::proof: data_proofs={data_proofs:#?}");
Ok(data_proofs)
}

fn multiproof(block_number: u32, extrinsics: Vec<OpaqueExtrinsic>, block_len: BlockLength, cells: Vec<(u32,u32)> ) -> Result<Vec<GMultiProof>, RTKateError> {
let app_extrinsics = HeaderExtensionBuilderData::from_opaque_extrinsics::<RTExtractor>(block_number, &extrinsics).to_app_extrinsics();
let data_proofs = super::kate::multiproof::<Runtime>(app_extrinsics, block_len, cells)?;
log::trace!(target: LOG_TARGET, "KateApi::proof: data_proofs={data_proofs:#?}");
Ok(data_proofs)
}
}

impl avail_base::PostInherentsProvider<Block> for Runtime {
Expand Down
3 changes: 2 additions & 1 deletion runtime/src/kate/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ pub mod native;
pub mod runtime;

// Reexport
pub use runtime::{grid, proof};
pub use runtime::{grid, multiproof, proof};

use codec::{Decode, Encode};
use core::num::TryFromIntError;
Expand All @@ -20,6 +20,7 @@ use kate::{com::Error as KateError, gridgen::AppRowError as KateAppRowError};
pub type GRawScalar = U256;
pub type GRow = Vec<GRawScalar>;
pub type GDataProof = (GRawScalar, GProof);
pub type GMultiProof = (Vec<GRawScalar>, GProof);

/// # NOTE
/// `Serde` requires a custom implementation for `GProof` due to the array size (greater than `[T;32]`).
Expand Down
Loading
Loading