syntax = "proto3";
package tendermint.blocksync;

option go_package = "github.com/cometbft/cometbft/proto/tendermint/blocksync";

import "tendermint/types/block.proto";
import "tendermint/types/types.proto";

// BlockRequest requests a block for a specific height
message BlockRequest {
  int64 height = 1;
}

// NoBlockResponse informs the node that the peer does not have block at the requested height
message NoBlockResponse {
  int64 height = 1;
}

// BlockResponse returns block to the requested
message BlockResponse {
  tendermint.types.Block          block      = 1;
  tendermint.types.ExtendedCommit ext_commit = 2;
}

// StatusRequest requests the status of a peer.
message StatusRequest {
}

// StatusResponse is a peer response to inform their status.
message StatusResponse {
  int64 height = 1;
  int64 base   = 2;
}

message Message {
  oneof sum {
    BlockRequest    block_request     = 1;
    NoBlockResponse no_block_response = 2;
    BlockResponse   block_response    = 3;
    StatusRequest   status_request    = 4;
    StatusResponse  status_response   = 5;
  }
}
