Skip to content
Open
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
298 changes: 187 additions & 111 deletions Cargo.lock

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ bounded-collections = { version = "0.3", default-features = false }
scale-info = { version = "2", default-features = false, features = ["derive"] }

# Polkadot SDK
binary-merkle-tree = { git = "https://github.com/availproject/polkadot-sdk", rev = "a4836791828373eb1e274b77738d2ee77b715818", default-features = false }
sp-std = { git = "https://github.com/availproject/polkadot-sdk", rev = "a4836791828373eb1e274b77738d2ee77b715818", default-features = false }
sp-trie = { git = "https://github.com/availproject/polkadot-sdk", rev = "a4836791828373eb1e274b77738d2ee77b715818", default-features = false }
sp-runtime = { git = "https://github.com/availproject/polkadot-sdk", rev = "a4836791828373eb1e274b77738d2ee77b715818", default-features = false }
frame-support = { git = "https://github.com/availproject/polkadot-sdk", rev = "a4836791828373eb1e274b77738d2ee77b715818", default-features = false }
sp-runtime-interface = { git = "https://github.com/availproject/polkadot-sdk", rev = "a4836791828373eb1e274b77738d2ee77b715818", default-features = false }
sp-storage = { git = "https://github.com/availproject/polkadot-sdk.git", rev = "a4836791828373eb1e274b77738d2ee77b715818", default-features = false }
sp-debug-derive = { git = "https://github.com/availproject/polkadot-sdk.git", rev = "a4836791828373eb1e274b77738d2ee77b715818", default-features = false }
binary-merkle-tree = { git = "https://github.com/availproject/polkadot-sdk", rev = "95ce81f7624de3a385fbf77bd954e041730e17f4", default-features = false }
sp-std = { git = "https://github.com/availproject/polkadot-sdk", rev = "95ce81f7624de3a385fbf77bd954e041730e17f4", default-features = false }
sp-trie = { git = "https://github.com/availproject/polkadot-sdk", rev = "95ce81f7624de3a385fbf77bd954e041730e17f4", default-features = false }
sp-runtime = { git = "https://github.com/availproject/polkadot-sdk", rev = "95ce81f7624de3a385fbf77bd954e041730e17f4", default-features = false }
frame-support = { git = "https://github.com/availproject/polkadot-sdk", rev = "95ce81f7624de3a385fbf77bd954e041730e17f4", default-features = false }
sp-runtime-interface = { git = "https://github.com/availproject/polkadot-sdk", rev = "95ce81f7624de3a385fbf77bd954e041730e17f4", default-features = false }
sp-storage = { git = "https://github.com/availproject/polkadot-sdk.git", rev = "95ce81f7624de3a385fbf77bd954e041730e17f4", default-features = false }
sp-debug-derive = { git = "https://github.com/availproject/polkadot-sdk.git", rev = "95ce81f7624de3a385fbf77bd954e041730e17f4", default-features = false }

primitive-types = { version = "0.13.1", default-features = false, features = ["codec", "scale-info"] }

Expand Down
36 changes: 18 additions & 18 deletions build_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,25 @@ cargo check --target wasm32-unknown-unknown --no-default-features --features "se
cargo check --target wasm32-unknown-unknown --no-default-features --features "runtime"
cargo check --target wasm32-unknown-unknown --no-default-features --features "runtime, serde"

# Kate
cd ../kate
cargo check
cargo check --no-default-features
cargo check --no-default-features --features "serde"
cargo check --no-default-features --features "std"
cargo check --no-default-features --features "std, serde"
cargo check --target wasm32-unknown-unknown --no-default-features
cargo check --target wasm32-unknown-unknown --no-default-features --features "serde"
# # Kate
# cd ../kate
# cargo check
# cargo check --no-default-features
# cargo check --no-default-features --features "serde"
# cargo check --no-default-features --features "std"
# cargo check --no-default-features --features "std, serde"
# cargo check --target wasm32-unknown-unknown --no-default-features
# cargo check --target wasm32-unknown-unknown --no-default-features --features "serde"

# Kate Recovery
cd ./recovery
cargo check
cargo check --no-default-features
cargo check --no-default-features --features "serde"
cargo check --no-default-features --features "std"
cargo check --no-default-features --features "std, serde"
cargo check --target wasm32-unknown-unknown --no-default-features
cargo check --target wasm32-unknown-unknown --no-default-features --features "serde"
# # Kate Recovery
# cd ./recovery
# cargo check
# cargo check --no-default-features
# cargo check --no-default-features --features "serde"
# cargo check --no-default-features --features "std"
# cargo check --no-default-features --features "std, serde"
# cargo check --target wasm32-unknown-unknown --no-default-features
# cargo check --target wasm32-unknown-unknown --no-default-features --features "serde"


# Fri
Expand Down
106 changes: 92 additions & 14 deletions core/src/da_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,21 @@
use std::fmt;

use crate::traits::{ExtendedBlock, ExtendedHeader};
use codec::{Codec, Decode, DecodeWithMemTracking, Encode};
use codec::{Codec, Decode, DecodeWithMemTracking, Encode, EncodeLike};
use sp_runtime::{
traits::{
self, Block as BlockT, Header as HeaderT, MaybeSerializeDeserialize, Member, NumberFor,
},
Justifications,
Justifications, OpaqueExtrinsic,
};
use sp_std::prelude::*;

#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "runtime")]
use sp_debug_derive::RuntimeDebug;

/// Something to identify a block.
#[derive(PartialEq, Eq, Clone, Encode, Decode)]
#[cfg_attr(feature = "runtime", derive(RuntimeDebug))]
#[cfg_attr(feature = "runtime", derive(Debug))]
pub enum BlockId<Block: BlockT> {
/// Identify by block header hash.
Hash(Block::Hash),
Expand Down Expand Up @@ -81,7 +79,7 @@ impl<Block: BlockT> fmt::Display for BlockId<Block> {

/// Abstraction over a substrate block.
#[derive(
PartialEq, Eq, Clone, Encode, Decode, DecodeWithMemTracking, RuntimeDebug, scale_info::TypeInfo,
PartialEq, Eq, Clone, Encode, Decode, DecodeWithMemTracking, Debug, scale_info::TypeInfo,
)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
Expand All @@ -97,6 +95,78 @@ where
pub extrinsics: Vec<Extrinsic>,
}

/// A shadow DA block that lazily decodes its extrinsics.
#[derive(Debug, Encode, Decode, scale_info::TypeInfo)]
pub struct DaLazyBlock<Header, Extrinsic> {
/// The block header.
pub header: Header,
/// The encoded extrinsics.
pub extrinsics: Vec<OpaqueExtrinsic>,
_phantom: core::marker::PhantomData<Extrinsic>,
}

impl<Header, Extrinsic: Into<OpaqueExtrinsic>> DaLazyBlock<Header, Extrinsic> {
/// Creates a lazy DA block from its decoded parts.
pub fn new(header: Header, extrinsics: Vec<Extrinsic>) -> Self {
Self {
header,
extrinsics: extrinsics.into_iter().map(Into::into).collect(),
_phantom: Default::default(),
}
}
}

impl<Header, Extrinsic: Codec + Into<OpaqueExtrinsic>> From<DaBlock<Header, Extrinsic>>
for DaLazyBlock<Header, Extrinsic>
where
Header: Codec,
{
fn from(block: DaBlock<Header, Extrinsic>) -> Self {
Self::new(block.header, block.extrinsics)
}
}

impl<Header, Extrinsic> EncodeLike<DaLazyBlock<Header, Extrinsic>> for DaBlock<Header, Extrinsic>
where
Header: Codec,
Extrinsic: Codec,
DaBlock<Header, Extrinsic>: Encode,
DaLazyBlock<Header, Extrinsic>: Encode,
{
}

impl<Header, Extrinsic> EncodeLike<DaBlock<Header, Extrinsic>> for DaLazyBlock<Header, Extrinsic>
where
Header: Codec,
Extrinsic: Codec,
DaBlock<Header, Extrinsic>: Encode,
DaLazyBlock<Header, Extrinsic>: Encode,
{
}

impl<Header, Extrinsic> traits::LazyBlock for DaLazyBlock<Header, Extrinsic>
where
Header: HeaderT,
Extrinsic: core::fmt::Debug + traits::LazyExtrinsic,
{
type Extrinsic = Extrinsic;
type Header = Header;

fn header(&self) -> &Self::Header {
&self.header
}

fn header_mut(&mut self) -> &mut Self::Header {
&mut self.header
}

fn extrinsics(&self) -> impl Iterator<Item = Result<Self::Extrinsic, codec::Error>> {
self.extrinsics
.iter()
.map(|extrinsic| Self::Extrinsic::decode_unprefixed(extrinsic.inner()))
}
}

impl<Header, Extrinsic> traits::HeaderProvider for DaBlock<Header, Extrinsic>
where
Header: Codec + HeaderT,
Expand All @@ -108,12 +178,18 @@ where
impl<Header, Extrinsic> BlockT for DaBlock<Header, Extrinsic>
where
Header: Codec + HeaderT + MaybeSerializeDeserialize,
Extrinsic:
Member + Codec + DecodeWithMemTracking + MaybeSerializeDeserialize + traits::ExtrinsicLike,
Extrinsic: Member
+ Codec
+ DecodeWithMemTracking
+ MaybeSerializeDeserialize
+ traits::ExtrinsicLike
+ Into<OpaqueExtrinsic>
+ traits::LazyExtrinsic,
{
type Extrinsic = Extrinsic;
type Header = Header;
type Hash = <Self::Header as traits::Header>::Hash;
type LazyBlock = DaLazyBlock<Header, Extrinsic>;

fn header(&self) -> &Self::Header {
&self.header
Expand All @@ -127,22 +203,24 @@ where
fn new(header: Self::Header, extrinsics: Vec<Self::Extrinsic>) -> Self {
DaBlock { header, extrinsics }
}
fn encode_from(header: &Self::Header, extrinsics: &[Self::Extrinsic]) -> Vec<u8> {
(header, extrinsics).encode()
}
}

impl<Header, Extrinsic> ExtendedBlock for DaBlock<Header, Extrinsic>
where
Header: Codec + ExtendedHeader + MaybeSerializeDeserialize,
Extrinsic:
Member + Codec + DecodeWithMemTracking + traits::ExtrinsicLike + MaybeSerializeDeserialize,
Extrinsic: Member
+ Codec
+ DecodeWithMemTracking
+ traits::ExtrinsicLike
+ MaybeSerializeDeserialize
+ Into<OpaqueExtrinsic>
+ traits::LazyExtrinsic,
{
type ExtHeader = Header;
}

/// Abstraction over a substrate block and justification.
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug)]
#[derive(PartialEq, Eq, Clone, Encode, Decode, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
Expand Down
4 changes: 1 addition & 3 deletions core/src/fri_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ use scale_info::TypeInfo;

#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "runtime")]
use sp_debug_derive::RuntimeDebug;
/// Parameters that Avail config / node code will set.
#[derive(Clone, Copy, Debug)]
pub struct FriParamsConfig {
Expand All @@ -24,7 +22,7 @@ pub struct FriParamsConfig {
/// codeword length and sampling domain.
#[derive(Clone, Copy, PartialEq, Eq, Encode, Decode, DecodeWithMemTracking, Default, TypeInfo)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "runtime", derive(RuntimeDebug))]
#[cfg_attr(feature = "runtime", derive(Debug))]
pub enum FriParamsVersion {
#[default]
V0,
Expand Down
6 changes: 2 additions & 4 deletions core/src/header/extension/fri_v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,12 @@ use sp_std::vec::Vec;

#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "runtime")]
use sp_debug_derive::RuntimeDebug;

/// Metadata needed for DA sampling + PCS verification of one blob.
#[derive(Clone, PartialEq, Eq, Encode, Decode, DecodeWithMemTracking, Default, TypeInfo)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "runtime", derive(RuntimeDebug))]
#[cfg_attr(feature = "runtime", derive(Debug))]
pub struct FriBlobCommitment {
/// Blob hash
pub blob_hash: H256,
Expand All @@ -27,7 +25,7 @@ pub struct FriBlobCommitment {
#[derive(Clone, PartialEq, Eq, Encode, Decode, DecodeWithMemTracking, Default, TypeInfo)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "runtime", derive(RuntimeDebug))]
#[cfg_attr(feature = "runtime", derive(Debug))]
pub struct HeaderExtension {
/// All blob commitments in canonical block order.
pub blobs: Vec<FriBlobCommitment>,
Expand Down
4 changes: 1 addition & 3 deletions core/src/header/extension/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ use scale_info::TypeInfo;

#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "runtime")]
use sp_debug_derive::RuntimeDebug;

pub mod fri_v1;

Expand All @@ -15,7 +13,7 @@ pub mod fri_v1;
/// header format evolution, not scheme selection.
#[derive(PartialEq, Eq, Clone, Encode, Decode, DecodeWithMemTracking, TypeInfo)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "runtime", derive(RuntimeDebug))]
#[cfg_attr(feature = "runtime", derive(Debug))]
#[cfg_attr(not(feature = "runtime"), derive(Debug))]
pub enum HeaderExtension {
V1(fri_v1::HeaderExtension),
Expand Down
4 changes: 1 addition & 3 deletions core/src/keccak256.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@ use scale_info::TypeInfo;

#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "runtime")]
use sp_debug_derive::RuntimeDebug;

/// Keccak 256 wrapper which supports `binary-merkle-tree::Hasher`.
#[derive(PartialEq, Eq, Clone, TypeInfo)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "runtime", derive(RuntimeDebug))]
#[cfg_attr(feature = "runtime", derive(Debug))]
pub struct Keccak256 {}

impl Hasher for Keccak256 {
Expand Down
5 changes: 1 addition & 4 deletions core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ use derive_more::{Add, Constructor, Deref, Into, Mul};
use num_traits::Zero;
use scale_info::TypeInfo;

#[cfg(feature = "runtime")]
use sp_debug_derive::RuntimeDebug;

#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};

Expand Down Expand Up @@ -85,7 +82,7 @@ pub enum InvalidTransactionCustomId {
MaxEncodedLen,
)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "runtime", derive(RuntimeDebug))]
#[cfg_attr(feature = "runtime", derive(Debug))]
#[cfg_attr(not(feature = "runtime"), derive(Debug))]
pub struct AppId(#[codec(compact)] pub u32);

Expand Down
5 changes: 1 addition & 4 deletions core/src/sha2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@ use scale_info::TypeInfo;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};

#[cfg(feature = "runtime")]
use sp_debug_derive::RuntimeDebug;

/// Sha2 256 wrapper which supports `binary-merkle-tree::Hasher`.
#[derive(PartialEq, Eq, Clone, TypeInfo)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "runtime", derive(RuntimeDebug))]
#[cfg_attr(feature = "runtime", derive(Debug))]
pub struct ShaTwo256 {}

impl Hasher for ShaTwo256 {
Expand Down