2017-02-24 18:38:42 +04:00
|
|
|
(**************************************************************************)
|
|
|
|
(* *)
|
|
|
|
(* Copyright (c) 2014 - 2016. *)
|
|
|
|
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
|
|
|
(* *)
|
|
|
|
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
|
|
|
(* *)
|
|
|
|
(**************************************************************************)
|
|
|
|
|
2017-04-05 01:35:41 +04:00
|
|
|
open Client_commands
|
|
|
|
|
2017-02-24 18:38:42 +04:00
|
|
|
let protocol =
|
2017-04-05 11:54:21 +04:00
|
|
|
Protocol_hash.of_b58check_exn
|
2017-02-24 18:38:42 +04:00
|
|
|
"ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im"
|
|
|
|
|
2017-04-06 00:33:46 +04:00
|
|
|
let call_service1 rpc_config s block a1 =
|
|
|
|
Client_rpcs.call_service1 rpc_config
|
2017-02-24 18:38:42 +04:00
|
|
|
(s Node_rpc_services.Blocks.proto_path) block a1
|
|
|
|
|
2017-04-06 00:33:46 +04:00
|
|
|
let call_error_service1 rpc_config s block a1 =
|
|
|
|
call_service1 rpc_config s block a1 >>= function
|
2017-04-05 01:35:41 +04:00
|
|
|
| Ok (Error _ as err) -> Lwt.return (wrap_error err)
|
|
|
|
| Ok (Ok v) -> return v
|
|
|
|
| Error _ as err -> Lwt.return err
|
2017-02-24 18:38:42 +04:00
|
|
|
|
2017-02-25 21:10:29 +04:00
|
|
|
let forge_block
|
2017-04-06 00:33:46 +04:00
|
|
|
rpc_config block net_id ?(timestamp = Time.now ()) command fitness =
|
2017-03-09 17:43:59 +04:00
|
|
|
let block =
|
|
|
|
match block with
|
|
|
|
| `Prevalidation -> `Head 0
|
|
|
|
| block -> block in
|
2017-04-06 00:33:46 +04:00
|
|
|
Client_blocks.get_block_hash rpc_config block >>=? fun pred ->
|
2017-04-10 15:01:22 +04:00
|
|
|
Client_node_rpcs.Blocks.level rpc_config block >>=? fun level ->
|
2017-03-09 17:43:59 +04:00
|
|
|
let proto_level =
|
|
|
|
match command with
|
|
|
|
| Data.Command.Activate _ -> 1
|
|
|
|
| Data.Command.Activate_testnet (_,_) -> 0 in
|
2017-04-06 00:33:46 +04:00
|
|
|
call_service1 rpc_config
|
2017-02-24 18:38:42 +04:00
|
|
|
Services.Forge.block block
|
2017-03-09 17:43:59 +04:00
|
|
|
((net_id, Int32.succ level, proto_level,
|
|
|
|
pred, timestamp, fitness), command)
|
2017-02-24 18:38:42 +04:00
|
|
|
|
2017-04-06 00:33:46 +04:00
|
|
|
let mine rpc_config ?timestamp block command fitness seckey =
|
|
|
|
Client_blocks.get_block_info rpc_config block >>=? fun bi ->
|
2017-04-10 19:06:11 +04:00
|
|
|
forge_block
|
|
|
|
rpc_config ?timestamp block bi.net_id command fitness >>=? fun blk ->
|
2017-02-28 05:56:40 +04:00
|
|
|
let signed_blk = Environment.Ed25519.Signature.append seckey blk in
|
2017-04-06 00:33:46 +04:00
|
|
|
Client_node_rpcs.inject_block rpc_config signed_blk [[]]
|
2017-02-24 18:38:42 +04:00
|
|
|
|
|
|
|
let commands () =
|
2017-03-06 18:54:05 +04:00
|
|
|
let timestamp = ref None in
|
|
|
|
let args =
|
|
|
|
[ "-timestamp",
|
|
|
|
Arg.String (fun t -> timestamp := Some (Time.of_notation_exn t)),
|
|
|
|
"Set the timestamp of the block (and initial time of the chain)" ] in
|
2017-02-24 18:38:42 +04:00
|
|
|
let open Cli_entries in
|
|
|
|
[
|
2017-03-30 15:16:21 +04:00
|
|
|
|
2017-03-06 18:54:05 +04:00
|
|
|
command ~args ~desc: "Activate a protocol" begin
|
2017-02-24 18:38:42 +04:00
|
|
|
prefixes [ "activate" ; "protocol" ] @@
|
2017-04-05 12:22:41 +04:00
|
|
|
Protocol_hash.param ~name:"version" ~desc:"Protocol version (b58check)" @@
|
2017-02-24 18:38:42 +04:00
|
|
|
prefixes [ "with" ; "fitness" ] @@
|
|
|
|
param ~name:"fitness"
|
|
|
|
~desc:"Hardcoded fitness of the first block (integer)"
|
2017-04-05 12:22:41 +04:00
|
|
|
(fun _ p ->
|
|
|
|
try return (Int64.of_string p)
|
|
|
|
with _ -> failwith "Cannot read int64") @@
|
2017-02-24 18:38:42 +04:00
|
|
|
prefixes [ "and" ; "key" ] @@
|
2017-02-28 11:18:06 +04:00
|
|
|
Client_keys.Secret_key.source_param
|
|
|
|
~name:"password" ~desc:"Dictator's key" @@
|
|
|
|
stop
|
2017-03-30 15:16:21 +04:00
|
|
|
end begin fun hash fitness seckey cctxt ->
|
2017-03-06 18:54:05 +04:00
|
|
|
let timestamp = !timestamp in
|
2017-02-25 21:01:29 +04:00
|
|
|
let fitness =
|
|
|
|
Client_embedded_proto_alpha.Fitness_repr.from_int64 fitness in
|
2017-04-06 00:33:46 +04:00
|
|
|
mine cctxt.rpc_config ?timestamp cctxt.config.block
|
|
|
|
(Activate hash) fitness seckey >>=? fun hash ->
|
|
|
|
cctxt.answer "Injected %a" Block_hash.pp_short hash >>= fun () ->
|
|
|
|
return ()
|
2017-03-30 15:16:21 +04:00
|
|
|
end ;
|
|
|
|
|
|
|
|
command ~args ~desc: "Fork a test protocol" begin
|
2017-02-24 18:38:42 +04:00
|
|
|
prefixes [ "fork" ; "test" ; "protocol" ] @@
|
2017-04-05 12:22:41 +04:00
|
|
|
Protocol_hash.param ~name:"version" ~desc:"Protocol version (b58check)" @@
|
2017-02-24 18:38:42 +04:00
|
|
|
prefixes [ "with" ; "fitness" ] @@
|
|
|
|
param ~name:"fitness"
|
|
|
|
~desc:"Hardcoded fitness of the first block (integer)"
|
2017-04-05 12:22:41 +04:00
|
|
|
(fun _ p ->
|
|
|
|
try return (Int64.of_string p)
|
|
|
|
with _ -> failwith "Cannot read int64") @@
|
2017-02-24 18:38:42 +04:00
|
|
|
prefixes [ "and" ; "key" ] @@
|
2017-04-05 12:22:41 +04:00
|
|
|
Environment.Ed25519.Secret_key.param
|
|
|
|
~name:"password" ~desc:"Dictator's key" @@
|
2017-03-30 15:16:21 +04:00
|
|
|
stop
|
|
|
|
end begin fun hash fitness seckey cctxt ->
|
|
|
|
let timestamp = !timestamp in
|
|
|
|
let fitness =
|
|
|
|
Client_embedded_proto_alpha.Fitness_repr.from_int64 fitness in
|
2017-04-06 00:33:46 +04:00
|
|
|
mine cctxt.rpc_config ?timestamp cctxt.config.block
|
2017-04-10 23:14:17 +04:00
|
|
|
(Activate_testnet (hash, Int64.mul 24L 3600L))
|
|
|
|
fitness seckey >>=? fun hash ->
|
2017-04-06 00:33:46 +04:00
|
|
|
cctxt.answer "Injected %a" Block_hash.pp_short hash >>= fun () ->
|
|
|
|
return ()
|
2017-03-30 15:16:21 +04:00
|
|
|
end ;
|
|
|
|
|
2017-02-24 18:38:42 +04:00
|
|
|
]
|
|
|
|
|
|
|
|
let () =
|
|
|
|
Client_commands.register protocol @@
|
|
|
|
commands ()
|