233 lines
6.7 KiB
OCaml
233 lines
6.7 KiB
OCaml
(**************************************************************************)
|
|
(* *)
|
|
(* Copyright (c) 2014 - 2018. *)
|
|
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
|
(* *)
|
|
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
|
(* *)
|
|
(**************************************************************************)
|
|
|
|
open Proto_alpha
|
|
open Alpha_context
|
|
open Clic
|
|
|
|
type error += Bad_tez_arg of string * string (* Arg_name * value *)
|
|
type error += Bad_max_priority of string
|
|
type error += Bad_endorsement_delay of string
|
|
|
|
let () =
|
|
register_error_kind
|
|
`Permanent
|
|
~id:"badTezArg"
|
|
~title:"Bad Tez Arg"
|
|
~description:("Invalid \xEA\x9C\xA9 notation in parameter.")
|
|
~pp:(fun ppf (arg_name, literal) ->
|
|
Format.fprintf ppf
|
|
"Invalid \xEA\x9C\xA9 notation in parameter %s: '%s'"
|
|
arg_name literal)
|
|
Data_encoding.(obj2
|
|
(req "parameter" string)
|
|
(req "literal" string))
|
|
(function Bad_tez_arg (parameter, literal) -> Some (parameter, literal) | _ -> None)
|
|
(fun (parameter, literal) -> Bad_tez_arg (parameter, literal)) ;
|
|
register_error_kind
|
|
`Permanent
|
|
~id:"badMaxPriorityArg"
|
|
~title:"Bad -max-priority arg"
|
|
~description:("invalid priority in -max-priority")
|
|
~pp:(fun ppf literal ->
|
|
Format.fprintf ppf "invalid priority '%s'in -max-priority" literal)
|
|
Data_encoding.(obj1 (req "parameter" string))
|
|
(function Bad_max_priority parameter -> Some parameter | _ -> None)
|
|
(fun parameter -> Bad_max_priority parameter) ;
|
|
register_error_kind
|
|
`Permanent
|
|
~id:"badEndorsementDelayArg"
|
|
~title:"Bad -endorsement-delay arg"
|
|
~description:("invalid priority in -endorsement-delay")
|
|
~pp:(fun ppf literal ->
|
|
Format.fprintf ppf "Bad argument value for -endorsement-delay. Expected an integer, but given '%s'" literal)
|
|
Data_encoding.(obj1 (req "parameter" string))
|
|
(function Bad_endorsement_delay parameter -> Some parameter | _ -> None)
|
|
(fun parameter -> Bad_endorsement_delay parameter)
|
|
|
|
|
|
let tez_sym =
|
|
"\xEA\x9C\xA9"
|
|
|
|
let string_parameter =
|
|
parameter (fun _ x -> return x)
|
|
|
|
let init_arg =
|
|
default_arg
|
|
~long:"init"
|
|
~placeholder:"data"
|
|
~doc:"initial value of the contract's storage"
|
|
~default:"Unit"
|
|
string_parameter
|
|
|
|
let arg_arg =
|
|
default_arg
|
|
~long:"arg"
|
|
~placeholder:"data"
|
|
~doc:"argument passed to the contract's script, if needed"
|
|
~default:"Unit"
|
|
string_parameter
|
|
|
|
let delegate_arg =
|
|
Client_keys.Public_key_hash.source_arg
|
|
~long:"delegate"
|
|
~placeholder:"identity"
|
|
~doc:"delegate of the contract\n\
|
|
Must be a known identity."
|
|
()
|
|
|
|
let source_arg =
|
|
arg
|
|
~long:"source"
|
|
~placeholder:"identity"
|
|
~doc:"source of the deposits to be paid\n\
|
|
Must be a known identity."
|
|
string_parameter
|
|
|
|
let spendable_switch =
|
|
switch
|
|
~long:"spendable"
|
|
~doc:"allow the manager to spend the contract's tokens"
|
|
()
|
|
|
|
let force_switch =
|
|
switch
|
|
~long:"force"
|
|
~short:'f'
|
|
~doc:"disables the node's injection checks\n\
|
|
Force the injection of branch-invalid operation or force \
|
|
\ the injection of block without a fitness greater than the \
|
|
\ current head."
|
|
()
|
|
|
|
let minimal_timestamp_switch =
|
|
switch
|
|
~long:"minimal-timestamp"
|
|
~doc:"Use the minimal timestamp instead of the current date \
|
|
as timestamp of the baked block."
|
|
()
|
|
|
|
let delegatable_switch =
|
|
switch
|
|
~long:"delegatable"
|
|
~doc:"allow future delegate change"
|
|
()
|
|
|
|
let tez_format =
|
|
"Text format: `DDDDDDD.DDDDDD`.\n\
|
|
Tez and mutez and separated by a period sign. Trailing and pending \
|
|
zeroes are allowed."
|
|
|
|
let tez_parameter param =
|
|
parameter
|
|
(fun _ s ->
|
|
match Tez.of_string s with
|
|
| Some tez -> return tez
|
|
| None -> fail (Bad_tez_arg (param, s)))
|
|
|
|
let tez_arg ~default ~parameter ~doc =
|
|
default_arg ~long:parameter ~placeholder:"amount" ~doc ~default
|
|
(tez_parameter ("--" ^ parameter))
|
|
|
|
let tez_param ~name ~desc next =
|
|
Clic.param
|
|
~name
|
|
~desc:(desc ^ " in \xEA\x9C\xA9\n" ^ tez_format)
|
|
(tez_parameter name)
|
|
next
|
|
|
|
let fee_arg =
|
|
tez_arg
|
|
~default:"0.05"
|
|
~parameter:"fee"
|
|
~doc:"fee in \xEA\x9C\xA9 to pay to the baker"
|
|
|
|
let gas_limit_arg =
|
|
arg
|
|
~long:"gas-limit"
|
|
~short:'G'
|
|
~placeholder:"amount"
|
|
~doc:"Set the gas limit of the transaction instead \
|
|
of letting the client decide based on a simulation"
|
|
(parameter (fun _ s ->
|
|
try
|
|
let v = Z.of_string s in
|
|
assert Compare.Z.(v >= Z.zero) ;
|
|
return v
|
|
with _ -> failwith "invalid gas limit (must be a positive number)"))
|
|
|
|
let storage_limit_arg =
|
|
arg
|
|
~long:"storage-limit"
|
|
~short:'S'
|
|
~placeholder:"amount"
|
|
~doc:"Set the storage limit of the transaction instead \
|
|
of letting the client decide based on a simulation"
|
|
(parameter (fun _ s ->
|
|
try
|
|
let v = Z.of_string s in
|
|
assert Compare.Z.(v >= Z.zero) ;
|
|
return v
|
|
with _ -> failwith "invalid storage limit (must be a positive number of bytes)"))
|
|
|
|
let max_priority_arg =
|
|
arg
|
|
~long:"max-priority"
|
|
~placeholder:"slot"
|
|
~doc:"maximum allowed baking slot"
|
|
(parameter (fun _ s ->
|
|
try return (int_of_string s)
|
|
with _ -> fail (Bad_max_priority s)))
|
|
|
|
let endorsement_delay_arg =
|
|
default_arg
|
|
~long:"endorsement-delay"
|
|
~placeholder:"seconds"
|
|
~doc:"delay before endorsing blocks\n\
|
|
Delay between notifications of new blocks from the node and \
|
|
production of endorsements for these blocks."
|
|
~default:"15"
|
|
(parameter (fun _ s ->
|
|
try return (int_of_string s)
|
|
with _ -> fail (Bad_endorsement_delay s)))
|
|
|
|
let no_print_source_flag =
|
|
switch
|
|
~long:"no-print-source"
|
|
~short:'q'
|
|
~doc:"don't print the source code\n\
|
|
If an error is encountered, the client will print the \
|
|
contract's source code by default.\n\
|
|
This option disables this behaviour."
|
|
()
|
|
|
|
let no_confirmation =
|
|
switch
|
|
~long:"no-confirmation"
|
|
~doc:"don't print wait for the operation to be confirmed."
|
|
()
|
|
|
|
module Daemon = struct
|
|
let baking_switch =
|
|
switch
|
|
~long:"baking"
|
|
~short:'B'
|
|
~doc:"run the baking daemon" ()
|
|
let endorsement_switch =
|
|
switch
|
|
~long:"endorsement"
|
|
~short:'E'
|
|
~doc:"run the endorsement daemon" ()
|
|
let denunciation_switch =
|
|
switch
|
|
~long:"denunciation"
|
|
~short:'D'
|
|
~doc:"run the denunciation daemon" ()
|
|
end
|