diff --git a/portal-bridge/src/types/beacon.rs b/portal-bridge/src/types/beacon.rs index 6c58b6c..9ef05b7 100644 --- a/portal-bridge/src/types/beacon.rs +++ b/portal-bridge/src/types/beacon.rs @@ -3,24 +3,24 @@ use serde::{Deserialize, Serialize}; use crate::types::witness::ExecutionWitness; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct SignedBeaconBlock { pub message: BeaconBlock, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct BeaconBlock { pub parent_root: B256, pub state_root: B256, pub body: BeaconBlockBody, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct BeaconBlockBody { pub execution_payload: ExecutionPayload, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct ExecutionPayload { pub block_number: U64, pub block_hash: B256, diff --git a/portal-bridge/src/types/mod.rs b/portal-bridge/src/types/mod.rs index c52ece8..fce94ce 100644 --- a/portal-bridge/src/types/mod.rs +++ b/portal-bridge/src/types/mod.rs @@ -6,7 +6,7 @@ pub mod beacon; pub mod genesis; pub mod witness; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonResponseMessage { pub data: SignedBeaconBlock, } diff --git a/portal-bridge/src/types/witness.rs b/portal-bridge/src/types/witness.rs index d906d14..8dfb5d2 100644 --- a/portal-bridge/src/types/witness.rs +++ b/portal-bridge/src/types/witness.rs @@ -1,9 +1,9 @@ use alloy_primitives::{Bytes, U8}; use serde::{Deserialize, Serialize}; use serde_nested_with::serde_nested; -use verkle_core::{constants::VERKLE_NODE_WIDTH_BITS, Point, ScalarField, Stem, TrieValue}; +use verkle_core::{proof::IpaProof, Point, Stem, TrieValue}; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct ExecutionWitness { #[serde(alias = "stateDiff")] @@ -12,7 +12,7 @@ pub struct ExecutionWitness { pub verkle_proof: VerkleProof, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct StemStateDiff { pub stem: Stem, @@ -20,7 +20,7 @@ pub struct StemStateDiff { pub suffix_diffs: Vec, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct SuffixStateDiff { pub suffix: U8, @@ -31,7 +31,7 @@ pub struct SuffixStateDiff { } #[serde_nested] -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct VerkleProof { #[serde(alias = "otherStems")] @@ -44,13 +44,3 @@ pub struct VerkleProof { #[serde(alias = "ipaProof")] pub ipa_proof: IpaProof, } - -#[serde_nested] -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct IpaProof { - pub cl: [Point; VERKLE_NODE_WIDTH_BITS], - pub cr: [Point; VERKLE_NODE_WIDTH_BITS], - #[serde(alias = "finalEvaluation")] - pub final_evaluation: ScalarField, -} diff --git a/verkle-core/src/lib.rs b/verkle-core/src/lib.rs index 4ee36e6..16afcd4 100644 --- a/verkle-core/src/lib.rs +++ b/verkle-core/src/lib.rs @@ -6,6 +6,7 @@ pub mod constants; mod ec; pub mod msm; +pub mod proof; mod stem; pub mod storage; mod trie_key; diff --git a/verkle-core/src/proof/mod.rs b/verkle-core/src/proof/mod.rs new file mode 100644 index 0000000..33b9a22 --- /dev/null +++ b/verkle-core/src/proof/mod.rs @@ -0,0 +1,25 @@ +use serde::{Deserialize, Serialize}; +use ssz_derive::{Decode, Encode}; +use ssz_types::{typenum, FixedVector}; + +use crate::{Point, ScalarField}; + +/// The multi-point proof based on IPA. +#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode)] +#[serde(deny_unknown_fields)] +pub struct MultiPointProof { + #[serde(alias = "ipaProof")] + pub ipa_proof: IpaProof, + #[serde(alias = "gX")] + pub g_x: Point, +} + +/// The inner product argument proof. +#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode)] +#[serde(deny_unknown_fields)] +pub struct IpaProof { + pub cl: FixedVector, + pub cr: FixedVector, + #[serde(alias = "finalEvaluation")] + pub final_evaluation: ScalarField, +}