use codec::{Decode, Encode};
use sc_client_api::StorageProof;
use sc_network_common::message::RequestId;
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteCallResponse {
pub id: RequestId,
pub proof: StorageProof,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteReadResponse {
pub id: RequestId,
pub proof: StorageProof,
}
pub mod generic {
use codec::{Decode, Encode, Input};
use sc_client_api::StorageProof;
use sc_network_common::{message::RequestId, role::Roles};
use sp_runtime::ConsensusEngineId;
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct ConsensusMessage {
pub protocol: ConsensusEngineId,
pub data: Vec<u8>,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct CompactStatus<Hash, Number> {
pub version: u32,
pub min_supported_version: u32,
pub roles: Roles,
pub best_number: Number,
pub best_hash: Hash,
pub genesis_hash: Hash,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode)]
#[allow(dead_code)]
pub struct Status<Hash, Number> {
pub version: u32,
pub min_supported_version: u32,
pub roles: Roles,
pub best_number: Number,
pub best_hash: Hash,
pub genesis_hash: Hash,
pub chain_status: Vec<u8>,
}
impl<Hash: Decode, Number: Decode> Decode for Status<Hash, Number> {
fn decode<I: Input>(value: &mut I) -> Result<Self, codec::Error> {
const LAST_CHAIN_STATUS_VERSION: u32 = 5;
let compact = CompactStatus::decode(value)?;
let chain_status = match <Vec<u8>>::decode(value) {
Ok(v) => v,
Err(e) => {
if compact.version <= LAST_CHAIN_STATUS_VERSION {
return Err(e);
} else {
Vec::new()
}
},
};
let CompactStatus {
version,
min_supported_version,
roles,
best_number,
best_hash,
genesis_hash,
} = compact;
Ok(Self {
version,
min_supported_version,
roles,
best_number,
best_hash,
genesis_hash,
chain_status,
})
}
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteCallRequest<H> {
pub id: RequestId,
pub block: H,
pub method: String,
pub data: Vec<u8>,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteReadRequest<H> {
pub id: RequestId,
pub block: H,
pub keys: Vec<Vec<u8>>,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteReadChildRequest<H> {
pub id: RequestId,
pub block: H,
pub storage_key: Vec<u8>,
pub keys: Vec<Vec<u8>>,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteHeaderRequest<N> {
pub id: RequestId,
pub block: N,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteHeaderResponse<Header> {
pub id: RequestId,
pub header: Option<Header>,
pub proof: StorageProof,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteChangesRequest<H> {
pub id: RequestId,
pub first: H,
pub last: H,
pub min: H,
pub max: H,
pub storage_key: Option<Vec<u8>>,
pub key: Vec<u8>,
}
#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
#[allow(dead_code)]
pub struct RemoteChangesResponse<N, H> {
pub id: RequestId,
pub max: N,
pub proof: Vec<Vec<u8>>,
pub roots: Vec<(N, H)>,
pub roots_proof: StorageProof,
}
}