2019-09-05 17:21:01 +04:00
|
|
|
(*****************************************************************************)
|
|
|
|
(* *)
|
|
|
|
(* Open Source License *)
|
|
|
|
(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
|
|
|
(* *)
|
|
|
|
(* Permission is hereby granted, free of charge, to any person obtaining a *)
|
|
|
|
(* copy of this software and associated documentation files (the "Software"),*)
|
|
|
|
(* to deal in the Software without restriction, including without limitation *)
|
|
|
|
(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *)
|
|
|
|
(* and/or sell copies of the Software, and to permit persons to whom the *)
|
|
|
|
(* Software is furnished to do so, subject to the following conditions: *)
|
|
|
|
(* *)
|
|
|
|
(* The above copyright notice and this permission notice shall be included *)
|
|
|
|
(* in all copies or substantial portions of the Software. *)
|
|
|
|
(* *)
|
|
|
|
(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*)
|
|
|
|
(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *)
|
|
|
|
(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *)
|
|
|
|
(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*)
|
|
|
|
(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *)
|
|
|
|
(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *)
|
|
|
|
(* DEALINGS IN THE SOFTWARE. *)
|
|
|
|
(* *)
|
|
|
|
(*****************************************************************************)
|
|
|
|
|
|
|
|
open Protocol
|
|
|
|
|
2019-10-17 13:45:27 +04:00
|
|
|
let constants_mainnet = Constants_repr.{
|
|
|
|
preserved_cycles = 5 ;
|
|
|
|
blocks_per_cycle = 4096l ;
|
|
|
|
blocks_per_commitment = 32l ;
|
|
|
|
blocks_per_roll_snapshot = 256l ;
|
|
|
|
blocks_per_voting_period = 32768l ;
|
|
|
|
time_between_blocks =
|
|
|
|
List.map Period_repr.of_seconds_exn [ 60L ; 40L ] ;
|
|
|
|
endorsers_per_block = 32 ;
|
|
|
|
hard_gas_limit_per_operation = Z.of_int 800_000 ;
|
|
|
|
hard_gas_limit_per_block = Z.of_int 8_000_000 ;
|
|
|
|
proof_of_work_threshold =
|
|
|
|
Int64.(sub (shift_left 1L 46) 1L) ;
|
|
|
|
tokens_per_roll = Tez_repr.(mul_exn one 8_000) ;
|
|
|
|
michelson_maximum_type_size = 1000 ;
|
|
|
|
seed_nonce_revelation_tip = begin
|
|
|
|
match Tez_repr.(one /? 8L) with
|
|
|
|
| Ok c -> c
|
|
|
|
| Error _ -> assert false
|
|
|
|
end ;
|
|
|
|
origination_size = 257 ;
|
|
|
|
block_security_deposit = Tez_repr.(mul_exn one 512) ;
|
|
|
|
endorsement_security_deposit = Tez_repr.(mul_exn one 64) ;
|
|
|
|
block_reward = Tez_repr.(mul_exn one 16) ;
|
|
|
|
endorsement_reward = Tez_repr.(mul_exn one 2) ;
|
|
|
|
hard_storage_limit_per_operation = Z.of_int 60_000 ;
|
|
|
|
cost_per_byte = Tez_repr.of_mutez_exn 1_000L ;
|
|
|
|
test_chain_duration = Int64.mul 32768L 60L ;
|
|
|
|
quorum_min = 20_00l ; (* quorum is in centile of a percentage *)
|
|
|
|
quorum_max = 70_00l ;
|
|
|
|
min_proposal_quorum = 5_00l ;
|
|
|
|
initial_endorsers = 24 ;
|
|
|
|
delay_per_missing_endorsement = Period_repr.of_seconds_exn 8L ;
|
|
|
|
}
|
2019-09-05 17:21:01 +04:00
|
|
|
|
2019-10-17 13:45:27 +04:00
|
|
|
let constants_sandbox = Constants_repr.{
|
|
|
|
constants_mainnet with
|
|
|
|
preserved_cycles = 2 ;
|
|
|
|
blocks_per_cycle = 8l ;
|
|
|
|
blocks_per_commitment = 4l ;
|
|
|
|
blocks_per_roll_snapshot = 4l ;
|
|
|
|
blocks_per_voting_period = 64l ;
|
|
|
|
time_between_blocks =
|
|
|
|
List.map Period_repr.of_seconds_exn [ 1L ; 0L ] ;
|
|
|
|
proof_of_work_threshold = Int64.of_int (-1) ;
|
|
|
|
initial_endorsers = 1 ;
|
|
|
|
delay_per_missing_endorsement = Period_repr.of_seconds_exn 1L ;
|
|
|
|
}
|
2019-09-05 17:21:01 +04:00
|
|
|
|
2019-10-17 13:45:27 +04:00
|
|
|
let constants_test = Constants_repr.{
|
|
|
|
constants_mainnet with
|
|
|
|
blocks_per_cycle = 128l ;
|
|
|
|
blocks_per_commitment = 4l ;
|
|
|
|
blocks_per_roll_snapshot = 32l ;
|
|
|
|
blocks_per_voting_period = 256l ;
|
|
|
|
time_between_blocks =
|
|
|
|
List.map Period_repr.of_seconds_exn [ 1L ; 0L ] ;
|
|
|
|
proof_of_work_threshold = Int64.of_int (-1) ;
|
|
|
|
initial_endorsers = 1 ;
|
|
|
|
delay_per_missing_endorsement = Period_repr.of_seconds_exn 1L ;
|
|
|
|
}
|
2019-09-05 17:21:01 +04:00
|
|
|
|
2019-10-17 13:45:27 +04:00
|
|
|
let bootstrap_accounts_strings = [
|
|
|
|
"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav" ;
|
|
|
|
"edpktzNbDAUjUk697W7gYg2CRuBQjyPxbEg8dLccYYwKSKvkPvjtV9" ;
|
|
|
|
"edpkuTXkJDGcFd5nh6VvMz8phXxU3Bi7h6hqgywNFi1vZTfQNnS1RV" ;
|
|
|
|
"edpkuFrRoDSEbJYgxRtLx2ps82UdaYc1WwfS9sE11yhauZt5DgCHbU" ;
|
|
|
|
"edpkv8EUUH68jmo3f7Um5PezmfGrRF24gnfLpH3sVNwJnV5bVCxL2n" ;
|
|
|
|
]
|
2019-09-05 17:21:01 +04:00
|
|
|
let boostrap_balance = Tez_repr.of_mutez_exn 4_000_000_000_000L
|
2019-10-17 13:45:27 +04:00
|
|
|
let bootstrap_accounts = List.map (fun s ->
|
|
|
|
let public_key = Signature.Public_key.of_b58check_exn s in
|
|
|
|
let public_key_hash = Signature.Public_key.hash public_key in
|
|
|
|
Parameters_repr.{
|
|
|
|
public_key_hash ;
|
|
|
|
public_key = Some public_key ;
|
|
|
|
amount = boostrap_balance ;
|
|
|
|
})
|
2019-09-05 17:21:01 +04:00
|
|
|
bootstrap_accounts_strings
|
|
|
|
|
|
|
|
(* TODO this could be generated from OCaml together with the faucet
|
|
|
|
for now these are harcoded values in the tests *)
|
|
|
|
let commitments =
|
2019-10-17 13:45:27 +04:00
|
|
|
let json_result = Data_encoding.Json.from_string {json|
|
2019-09-05 17:21:01 +04:00
|
|
|
[
|
|
|
|
[ "btz1bRL4X5BWo2Fj4EsBdUwexXqgTf75uf1qa", "23932454669343" ],
|
|
|
|
[ "btz1SxjV1syBgftgKy721czKi3arVkVwYUFSv", "72954577464032" ],
|
|
|
|
[ "btz1LtoNCjiW23txBTenALaf5H6NKF1L3c1gw", "217487035428348" ],
|
|
|
|
[ "btz1SUd3mMhEBcWudrn8u361MVAec4WYCcFoy", "4092742372031" ],
|
|
|
|
[ "btz1MvBXf4orko1tsGmzkjLbpYSgnwUjEe81r", "17590039016550" ],
|
|
|
|
[ "btz1LoDZ3zsjgG3k3cqTpUMc9bsXbchu9qMXT", "26322312350555" ],
|
|
|
|
[ "btz1RMfq456hFV5AeDiZcQuZhoMv2dMpb9hpP", "244951387881443" ],
|
|
|
|
[ "btz1Y9roTh4A7PsMBkp8AgdVFrqUDNaBE59y1", "80065050465525" ],
|
|
|
|
[ "btz1Q1N2ePwhVw5ED3aaRVek6EBzYs1GDkSVD", "3569618927693" ],
|
|
|
|
[ "btz1VFFVsVMYHd5WfaDTAt92BeQYGK8Ri4eLy", "9034781424478" ]
|
|
|
|
]|json}
|
|
|
|
in
|
|
|
|
match json_result with
|
2019-10-17 13:45:27 +04:00
|
|
|
| Error err -> raise (Failure err)
|
|
|
|
| Ok json -> Data_encoding.Json.destruct
|
|
|
|
(Data_encoding.list Commitment_repr.encoding) json
|
2019-09-05 17:21:01 +04:00
|
|
|
|
|
|
|
let make_bootstrap_account (pkh, pk, amount) =
|
2019-10-17 13:45:27 +04:00
|
|
|
Parameters_repr.{ public_key_hash = pkh ; public_key = Some pk ; amount }
|
2019-09-05 17:21:01 +04:00
|
|
|
|
2019-10-17 13:45:27 +04:00
|
|
|
let parameters_of_constants
|
|
|
|
?(bootstrap_accounts = bootstrap_accounts)
|
|
|
|
?(bootstrap_contracts = [])
|
|
|
|
?(with_commitments = false)
|
|
|
|
constants =
|
2019-09-05 17:21:01 +04:00
|
|
|
let commitments = if with_commitments then commitments else [] in
|
2019-10-17 13:45:27 +04:00
|
|
|
Parameters_repr.{
|
|
|
|
bootstrap_accounts ;
|
|
|
|
bootstrap_contracts ;
|
|
|
|
commitments ;
|
|
|
|
constants ;
|
|
|
|
security_deposit_ramp_up_cycles = None ;
|
|
|
|
no_reward_cycles = None ;
|
|
|
|
}
|
2019-09-05 17:21:01 +04:00
|
|
|
|
|
|
|
let json_of_parameters parameters =
|
|
|
|
Data_encoding.Json.construct Parameters_repr.encoding parameters
|