P2P: allow to limit the size of block header
This commit is contained in:
parent
85a25e200d
commit
8072d413fc
@ -77,6 +77,11 @@ let encoding =
|
|||||||
shell_header_encoding
|
shell_header_encoding
|
||||||
(obj1 (req "protocol_data" Variable.bytes)))
|
(obj1 (req "protocol_data" Variable.bytes)))
|
||||||
|
|
||||||
|
let bounded_encoding ?max_size () =
|
||||||
|
match max_size with
|
||||||
|
| None -> encoding
|
||||||
|
| Some max_size -> Data_encoding.check_size max_size encoding
|
||||||
|
|
||||||
let pp ppf op =
|
let pp ppf op =
|
||||||
Data_encoding.Json.pp ppf
|
Data_encoding.Json.pp ppf
|
||||||
(Data_encoding.Json.construct encoding op)
|
(Data_encoding.Json.construct encoding op)
|
||||||
|
@ -28,3 +28,5 @@ type t = {
|
|||||||
include S.HASHABLE with type t := t
|
include S.HASHABLE with type t := t
|
||||||
and type hash := Block_hash.t
|
and type hash := Block_hash.t
|
||||||
val of_bytes_exn: MBytes.t -> t
|
val of_bytes_exn: MBytes.t -> t
|
||||||
|
|
||||||
|
val bounded_encoding: ?max_size:int -> unit -> t Data_encoding.t
|
||||||
|
@ -41,7 +41,17 @@ let encoding =
|
|||||||
(* TODO add a [description] *)
|
(* TODO add a [description] *)
|
||||||
(obj2
|
(obj2
|
||||||
(req "current_head" (dynamic_size Block_header.encoding))
|
(req "current_head" (dynamic_size Block_header.encoding))
|
||||||
(req "history" (dynamic_size (list Block_hash.encoding))))
|
(req "history" (Variable.list Block_hash.encoding)))
|
||||||
|
|
||||||
|
let bounded_encoding ?max_header_size ?max_length () =
|
||||||
|
let open Data_encoding in
|
||||||
|
(* TODO add a [description] *)
|
||||||
|
(obj2
|
||||||
|
(req "current_head"
|
||||||
|
(dynamic_size
|
||||||
|
(Block_header.bounded_encoding ?max_size:max_header_size ())))
|
||||||
|
(req "history" (Variable.list ?max_length Block_hash.encoding)))
|
||||||
|
|
||||||
|
|
||||||
type seed = {
|
type seed = {
|
||||||
sender_id: P2p_peer.Id.t ;
|
sender_id: P2p_peer.Id.t ;
|
||||||
|
@ -17,6 +17,10 @@ val raw: t -> raw
|
|||||||
val pp: Format.formatter -> t -> unit
|
val pp: Format.formatter -> t -> unit
|
||||||
val pp_short: Format.formatter -> t -> unit
|
val pp_short: Format.formatter -> t -> unit
|
||||||
val encoding: t Data_encoding.t
|
val encoding: t Data_encoding.t
|
||||||
|
val bounded_encoding:
|
||||||
|
?max_header_size:int ->
|
||||||
|
?max_length:int ->
|
||||||
|
unit -> t Data_encoding.t
|
||||||
|
|
||||||
type seed = {
|
type seed = {
|
||||||
sender_id: P2p_peer.Id.t ;
|
sender_id: P2p_peer.Id.t ;
|
||||||
|
@ -7,6 +7,28 @@
|
|||||||
(* *)
|
(* *)
|
||||||
(**************************************************************************)
|
(**************************************************************************)
|
||||||
|
|
||||||
|
module Bounded_encoding = struct
|
||||||
|
|
||||||
|
open Data_encoding
|
||||||
|
|
||||||
|
let block_header_max_size = ref None
|
||||||
|
let block_header_cache = ref Block_header.encoding
|
||||||
|
let block_locator_cache = ref Block_locator.encoding
|
||||||
|
|
||||||
|
let update_block_header_encoding () =
|
||||||
|
block_header_cache :=
|
||||||
|
Block_header.bounded_encoding ?max_size:!block_header_max_size () ;
|
||||||
|
block_locator_cache :=
|
||||||
|
Block_locator.bounded_encoding ?max_header_size:!block_header_max_size ()
|
||||||
|
|
||||||
|
let set_block_header_max_size max =
|
||||||
|
block_header_max_size := max ;
|
||||||
|
update_block_header_encoding ()
|
||||||
|
let block_header = delayed (fun () -> !block_header_cache)
|
||||||
|
let block_locator = delayed (fun () -> !block_locator_cache)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
type t =
|
type t =
|
||||||
|
|
||||||
| Get_current_branch of Chain_id.t
|
| Get_current_branch of Chain_id.t
|
||||||
@ -53,7 +75,7 @@ let encoding =
|
|||||||
~title:"Current_branch"
|
~title:"Current_branch"
|
||||||
(obj2
|
(obj2
|
||||||
(req "chain_id" Chain_id.encoding)
|
(req "chain_id" Chain_id.encoding)
|
||||||
(req "current_branch" Block_locator.encoding))
|
(req "current_branch" Bounded_encoding.block_locator))
|
||||||
(function
|
(function
|
||||||
| Current_branch (chain_id, locator) -> Some (chain_id, locator)
|
| Current_branch (chain_id, locator) -> Some (chain_id, locator)
|
||||||
| _ -> None)
|
| _ -> None)
|
||||||
@ -81,7 +103,7 @@ let encoding =
|
|||||||
~title:"Current_head"
|
~title:"Current_head"
|
||||||
(obj3
|
(obj3
|
||||||
(req "chain_id" Chain_id.encoding)
|
(req "chain_id" Chain_id.encoding)
|
||||||
(req "current_block_header" (dynamic_size Block_header.encoding))
|
(req "current_block_header" (dynamic_size Bounded_encoding.block_header))
|
||||||
(req "current_mempool" Mempool.encoding))
|
(req "current_mempool" Mempool.encoding))
|
||||||
(function
|
(function
|
||||||
| Current_head (chain_id, bh, mempool) -> Some (chain_id, bh, mempool)
|
| Current_head (chain_id, bh, mempool) -> Some (chain_id, bh, mempool)
|
||||||
@ -98,7 +120,7 @@ let encoding =
|
|||||||
|
|
||||||
case ~tag:0x21
|
case ~tag:0x21
|
||||||
~title:"Block_header"
|
~title:"Block_header"
|
||||||
(obj1 (req "block_header" Block_header.encoding))
|
(obj1 (req "block_header" Bounded_encoding.block_header))
|
||||||
(function
|
(function
|
||||||
| Block_header bh -> Some bh
|
| Block_header bh -> Some bh
|
||||||
| _ -> None)
|
| _ -> None)
|
||||||
|
@ -40,3 +40,7 @@ type t =
|
|||||||
val cfg : t P2p.message_config
|
val cfg : t P2p.message_config
|
||||||
|
|
||||||
val pp_json : Format.formatter -> t -> unit
|
val pp_json : Format.formatter -> t -> unit
|
||||||
|
|
||||||
|
module Bounded_encoding : sig
|
||||||
|
val set_block_header_max_size: int option -> unit
|
||||||
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user