diff --git a/beacon_node/libp2p/src/rpc/methods.rs b/beacon_node/libp2p/src/rpc/methods.rs index 4ba19befd..ddfbf80b5 100644 --- a/beacon_node/libp2p/src/rpc/methods.rs +++ b/beacon_node/libp2p/src/rpc/methods.rs @@ -6,6 +6,7 @@ use types::{Epoch, Hash256, Slot}; pub enum RPCMethod { Hello, Goodbye, + RequestBeaconBlockRoots, Unknown, } @@ -14,6 +15,7 @@ impl From for RPCMethod { match method_id { 0 => RPCMethod::Hello, 1 => RPCMethod::Goodbye, + 10 => RPCMethod::RequestBeaconBlockRoots, _ => RPCMethod::Unknown, } } @@ -24,6 +26,7 @@ impl Into for RPCMethod { match self { RPCMethod::Hello => 0, RPCMethod::Goodbye => 1, + RPCMethod::RequestBeaconBlockRoots => 10, _ => 0, } } @@ -33,19 +36,53 @@ impl Into for RPCMethod { pub enum RPCRequest { Hello(HelloMessage), Goodbye(u64), + RequestBeaconBlockRoots(BeaconBlockRootsRequest), } #[derive(Debug, Clone)] pub enum RPCResponse { Hello(HelloMessage), + RequestBeaconBlockRoots(BeaconBlockRootsResponse), } -// request/response structs for RPC methods +/* Request/Response data structures for RPC methods */ + +/// The HELLO request/response handshake message. #[derive(Encode, Decode, Clone, Debug)] pub struct HelloMessage { + /// The network ID of the peer. pub network_id: u8, + /// The peers last finalized root. pub latest_finalized_root: Hash256, + /// The peers last finalized epoch. pub latest_finalized_epoch: Epoch, + /// The peers last block root. pub best_root: Hash256, + /// The peers last slot. pub best_slot: Slot, } + +/// Request a number of beacon block roots from a peer. +#[derive(Encode, Decode, Clone, Debug)] +pub struct BeaconBlockRootsRequest { + /// The starting slot of the requested blocks. + start_slot: Slot, + /// The number of blocks from the start slot. + count: u64, // this must be less than 32768. //TODO: Enforce this in the lower layers +} + +/// Response a number of beacon block roots from a peer. +#[derive(Encode, Decode, Clone, Debug)] +pub struct BeaconBlockRootsResponse { + /// List of requested blocks and associated slots. + roots: Vec, +} + +/// Contains a block root and associated slot. +#[derive(Encode, Decode, Clone, Debug)] +pub struct BlockRootSlot { + /// The block root. + block_root: Hash256, + /// The block slot. + slot: Slot, +}