Alpha/Vote: faster refusal of too many proposals
This commit is contained in:
parent
30aa2ec204
commit
065d629e7c
@ -199,6 +199,16 @@ let () =
|
|||||||
(function Empty_proposal -> Some () | _ -> None)
|
(function Empty_proposal -> Some () | _ -> None)
|
||||||
(fun () -> Empty_proposal)
|
(fun () -> Empty_proposal)
|
||||||
|
|
||||||
|
(* @return [true] if [List.length l] > [n] w/o computing length *)
|
||||||
|
let rec longer_than l n =
|
||||||
|
if Compare.Int.(n < 0) then assert false else
|
||||||
|
match l with
|
||||||
|
| [] -> false
|
||||||
|
| _ :: rest ->
|
||||||
|
if Compare.Int.(n = 0) then true
|
||||||
|
else (* n > 0 *)
|
||||||
|
longer_than rest (n-1)
|
||||||
|
|
||||||
let record_proposals ctxt delegate proposals =
|
let record_proposals ctxt delegate proposals =
|
||||||
begin match proposals with
|
begin match proposals with
|
||||||
| [] -> fail Empty_proposal
|
| [] -> fail Empty_proposal
|
||||||
@ -208,14 +218,15 @@ let record_proposals ctxt delegate proposals =
|
|||||||
| Proposal ->
|
| Proposal ->
|
||||||
Vote.in_listings ctxt delegate >>= fun in_listings ->
|
Vote.in_listings ctxt delegate >>= fun in_listings ->
|
||||||
if in_listings then
|
if in_listings then
|
||||||
|
Vote.recorded_proposal_count_for_delegate ctxt delegate >>=? fun count ->
|
||||||
|
fail_when
|
||||||
|
(longer_than proposals (Constants.max_proposals_per_delegate - count))
|
||||||
|
Too_many_proposals >>=? fun () ->
|
||||||
fold_left_s
|
fold_left_s
|
||||||
(fun ctxt proposal ->
|
(fun ctxt proposal ->
|
||||||
Vote.record_proposal ctxt proposal delegate)
|
Vote.record_proposal ctxt proposal delegate)
|
||||||
ctxt proposals >>=? fun ctxt ->
|
ctxt proposals >>=? fun ctxt ->
|
||||||
Vote.recorded_proposal_count_for_delegate ctxt delegate >>=? fun count ->
|
return ctxt
|
||||||
if Compare.Int.(count > Constants.max_proposals_per_delegate) then
|
|
||||||
fail Too_many_proposals
|
|
||||||
else return ctxt
|
|
||||||
else
|
else
|
||||||
fail Unauthorized_proposal
|
fail Unauthorized_proposal
|
||||||
| Testing_vote | Testing | Promotion_vote ->
|
| Testing_vote | Testing | Promotion_vote ->
|
||||||
|
Loading…
Reference in New Issue
Block a user