Alpha: ignore delegate with unrevealed keys when freezing rolls

This commit is contained in:
Grégoire Henry 2018-02-22 13:53:07 -05:00 committed by Benjamin Canou
parent c78dd51f3d
commit a875a5f2e9
8 changed files with 18 additions and 14 deletions

View File

@ -37,6 +37,7 @@
"Level_storage", "Level_storage",
"Nonce_storage", "Nonce_storage",
"Seed_storage", "Seed_storage",
"Public_key_storage",
"Roll_storage", "Roll_storage",
"Contract_storage", "Contract_storage",
"Reward_storage", "Reward_storage",
@ -44,7 +45,6 @@
"Fitness_storage", "Fitness_storage",
"Vote_storage", "Vote_storage",
"Init_storage", "Init_storage",
"Public_key_storage",
"Alpha_context", "Alpha_context",

View File

@ -696,10 +696,10 @@ module Roll : sig
val clear_cycle: context -> Cycle.t -> context tzresult Lwt.t val clear_cycle: context -> Cycle.t -> context tzresult Lwt.t
val baking_rights_owner: val baking_rights_owner:
context -> Level.t -> priority:int -> public_key_hash tzresult Lwt.t context -> Level.t -> priority:int -> public_key tzresult Lwt.t
val endorsement_rights_owner: val endorsement_rights_owner:
context -> Level.t -> slot:int -> public_key_hash tzresult Lwt.t context -> Level.t -> slot:int -> public_key tzresult Lwt.t
end end

View File

@ -123,7 +123,7 @@ let check_baking_rights c { Block_header.priority ; _ }
let level = Level.current c in let level = Level.current c in
Roll.baking_rights_owner c level ~priority >>=? fun delegate -> Roll.baking_rights_owner c level ~priority >>=? fun delegate ->
check_timestamp c priority pred_timestamp >>=? fun () -> check_timestamp c priority pred_timestamp >>=? fun () ->
return delegate return (Ed25519.Public_key.hash delegate)
let pay_baking_bond c { Block_header.priority ; _ } id = let pay_baking_bond c { Block_header.priority ; _ } id =
if Compare.Int.(priority >= Constants.first_free_baking_slot c) if Compare.Int.(priority >= Constants.first_free_baking_slot c)
@ -143,6 +143,7 @@ let check_signing_rights c slot delegate =
(Invalid_endorsement_slot (Constants.max_signing_slot c, slot)) >>=? fun () -> (Invalid_endorsement_slot (Constants.max_signing_slot c, slot)) >>=? fun () ->
let level = Level.current c in let level = Level.current c in
Roll.endorsement_rights_owner c level ~slot >>=? fun owning_delegate -> Roll.endorsement_rights_owner c level ~slot >>=? fun owning_delegate ->
let owning_delegate = Ed25519.Public_key.hash owning_delegate in
fail_unless (Ed25519.Public_key_hash.equal owning_delegate delegate) fail_unless (Ed25519.Public_key_hash.equal owning_delegate delegate)
(Wrong_delegate (owning_delegate, delegate)) (Wrong_delegate (owning_delegate, delegate))
@ -187,9 +188,9 @@ let select_delegate delegate delegate_list max_priority =
if Compare.Int.(n >= max_priority) if Compare.Int.(n >= max_priority)
then return (List.rev acc) then return (List.rev acc)
else else
let LCons (pkh, t) = l in let LCons (pk, t) = l in
let acc = let acc =
if Ed25519.Public_key_hash.equal delegate pkh if Ed25519.Public_key_hash.equal delegate (Ed25519.Public_key.hash pk)
then n :: acc then n :: acc
else acc in else acc in
t () >>=? fun t -> t () >>=? fun t ->

View File

@ -75,12 +75,12 @@ val endorsement_reward: block_priority:int -> Tez.t tzresult Lwt.t
(** [baking_priorities ctxt level] is the lazy list of contract's (** [baking_priorities ctxt level] is the lazy list of contract's
public key hashes that are allowed to bake for [level]. *) public key hashes that are allowed to bake for [level]. *)
val baking_priorities: val baking_priorities:
context -> Level.t -> public_key_hash lazy_list context -> Level.t -> public_key lazy_list
(** [endorsement_priorities ctxt level] is the lazy list of contract's (** [endorsement_priorities ctxt level] is the lazy list of contract's
public key hashes that are allowed to endorse for [level]. *) public key hashes that are allowed to endorse for [level]. *)
val endorsement_priorities: val endorsement_priorities:
context -> Level.t -> public_key_hash lazy_list context -> Level.t -> public_key lazy_list
(** [first_baking_priorities ctxt ?max_priority contract_hash level] (** [first_baking_priorities ctxt ?max_priority contract_hash level]
is a list of priorities of max [?max_priority] elements, where the is a list of priorities of max [?max_priority] elements, where the

View File

@ -107,7 +107,7 @@ module Baker = struct
let Misc.LCons (h, t) = l in let Misc.LCons (h, t) = l in
t () >>=? fun t -> t () >>=? fun t ->
loop t (pred n) >>=? fun t -> loop t (pred n) >>=? fun t ->
return (h :: t) return (Ed25519.Public_key.hash h :: t)
in in
loop contract_list max >>=? fun prio -> loop contract_list max >>=? fun prio ->
return (level.level, prio) return (level.level, prio)
@ -266,7 +266,7 @@ module Endorser = struct
let Misc.LCons (h, t) = l in let Misc.LCons (h, t) = l in
t () >>=? fun t -> t () >>=? fun t ->
loop t (pred n) >>=? fun t -> loop t (pred n) >>=? fun t ->
return (h :: t) return (Ed25519.Public_key.hash h :: t)
in in
loop contract_list max >>=? fun prio -> loop contract_list max >>=? fun prio ->
return (level.level, prio) return (level.level, prio)

View File

@ -134,7 +134,8 @@ module I = struct
| Some (shell, contents) -> | Some (shell, contents) ->
let operation = { hash ; shell ; contents ; signature } in let operation = { hash ; shell ; contents ; signature } in
let level = Alpha_context.Level.current ctxt in let level = Alpha_context.Level.current ctxt in
Baking.baking_priorities ctxt level >>=? fun (Misc.LCons (baker_pkh, _)) -> Baking.baking_priorities ctxt level >>=? fun (Misc.LCons (baker_pk, _)) ->
let baker_pkh = Ed25519.Public_key.hash baker_pk in
let baker_contract = Contract.implicit_contract baker_pkh in let baker_contract = Contract.implicit_contract baker_pkh in
let block_prio = 0 in let block_prio = 0 in
Apply.apply_operation Apply.apply_operation

View File

@ -80,7 +80,9 @@ module Random = struct
| None -> | None ->
loop sequence loop sequence
| Some delegate -> | Some delegate ->
return delegate Public_key_storage.get_option c delegate >>=? function
| None -> loop sequence
| Some delegate -> return delegate
in in
Storage.Roll.Owner.snapshot_exists c cycle >>= fun snapshot_exists -> Storage.Roll.Owner.snapshot_exists c cycle >>= fun snapshot_exists ->
fail_unless snapshot_exists (No_roll_snapshot_for_cycle cycle) >>=? fun () -> fail_unless snapshot_exists (No_roll_snapshot_for_cycle cycle) >>=? fun () ->

View File

@ -36,11 +36,11 @@ val clear_cycle :
val baking_rights_owner : val baking_rights_owner :
Raw_context.t -> Level_repr.t -> priority:int -> Raw_context.t -> Level_repr.t -> priority:int ->
Ed25519.Public_key_hash.t tzresult Lwt.t Ed25519.Public_key.t tzresult Lwt.t
val endorsement_rights_owner : val endorsement_rights_owner :
Raw_context.t -> Level_repr.t -> slot:int -> Raw_context.t -> Level_repr.t -> slot:int ->
Ed25519.Public_key_hash.t tzresult Lwt.t Ed25519.Public_key.t tzresult Lwt.t
module Contract : sig module Contract : sig