Shell: do not validate blocks that don't increase the timestamp or fitness.

This commit is contained in:
Benjamin Canou 2017-02-28 18:46:40 +01:00 committed by Grégoire Henry
parent cb90e3e5c5
commit 85055aace6
2 changed files with 20 additions and 1 deletions

View File

@ -102,7 +102,10 @@ let rec may_set_head v (block: State.Valid_block.t) =
(** Block validation *) (** Block validation *)
type error += Invalid_operation of Operation_hash.t type error +=
| Invalid_operation of Operation_hash.t
| Non_increasing_timestamp
| Non_increasing_fitness
let apply_block net db let apply_block net db
(pred: State.Valid_block.t) hash (block: State.Block_header.t) = (pred: State.Valid_block.t) hash (block: State.Block_header.t) =
@ -125,6 +128,18 @@ let apply_block net db
failwith "This test network expired..." failwith "This test network expired..."
| None | Some _ -> return () | None | Some _ -> return ()
end >>=? fun () -> end >>=? fun () ->
begin
if Time.(pred.timestamp >= block.shell.timestamp) then
fail Non_increasing_timestamp
else
return ()
end >>=? fun () ->
begin
if Fitness.compare pred.fitness block.shell.fitness >= 0 then
fail Non_increasing_fitness
else
return ()
end >>=? fun () ->
begin begin
match pred.protocol with match pred.protocol with
| None -> fail (State.Unknown_protocol pred.protocol_hash) | None -> fail (State.Unknown_protocol pred.protocol_hash)

View File

@ -16,6 +16,10 @@ val notify_block: worker -> Block_hash.t -> State.Block_header.t -> unit Lwt.t
type t type t
type error +=
| Non_increasing_timestamp
| Non_increasing_fitness
val activate: worker -> State.Net.t -> t Lwt.t val activate: worker -> State.Net.t -> t Lwt.t
val get: worker -> State.Net_id.t -> t tzresult Lwt.t val get: worker -> State.Net_id.t -> t tzresult Lwt.t
val get_exn: worker -> State.Net_id.t -> t Lwt.t val get_exn: worker -> State.Net_id.t -> t Lwt.t