387 lines
14 KiB
OCaml
387 lines
14 KiB
OCaml
(*****************************************************************************)
|
|
(* *)
|
|
(* 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. *)
|
|
(* *)
|
|
(*****************************************************************************)
|
|
|
|
let version_number_004 = "\000"
|
|
|
|
let version_number = "\001"
|
|
|
|
let proof_of_work_nonce_size = 8
|
|
|
|
let nonce_length = 32
|
|
|
|
let max_revelations_per_block = 32
|
|
|
|
let max_proposals_per_delegate = 20
|
|
|
|
let max_operation_data_length = 16 * 1024 (* 16kB *)
|
|
|
|
type fixed = {
|
|
proof_of_work_nonce_size : int;
|
|
nonce_length : int;
|
|
max_revelations_per_block : int;
|
|
max_operation_data_length : int;
|
|
max_proposals_per_delegate : int;
|
|
}
|
|
|
|
let fixed_encoding =
|
|
let open Data_encoding in
|
|
conv
|
|
(fun c ->
|
|
( c.proof_of_work_nonce_size,
|
|
c.nonce_length,
|
|
c.max_revelations_per_block,
|
|
c.max_operation_data_length,
|
|
c.max_proposals_per_delegate ))
|
|
(fun ( proof_of_work_nonce_size,
|
|
nonce_length,
|
|
max_revelations_per_block,
|
|
max_operation_data_length,
|
|
max_proposals_per_delegate ) ->
|
|
{
|
|
proof_of_work_nonce_size;
|
|
nonce_length;
|
|
max_revelations_per_block;
|
|
max_operation_data_length;
|
|
max_proposals_per_delegate;
|
|
})
|
|
(obj5
|
|
(req "proof_of_work_nonce_size" uint8)
|
|
(req "nonce_length" uint8)
|
|
(req "max_revelations_per_block" uint8)
|
|
(req "max_operation_data_length" int31)
|
|
(req "max_proposals_per_delegate" uint8))
|
|
|
|
let fixed =
|
|
{
|
|
proof_of_work_nonce_size;
|
|
nonce_length;
|
|
max_revelations_per_block;
|
|
max_operation_data_length;
|
|
max_proposals_per_delegate;
|
|
}
|
|
|
|
type parametric = {
|
|
preserved_cycles : int;
|
|
blocks_per_cycle : int32;
|
|
blocks_per_commitment : int32;
|
|
blocks_per_roll_snapshot : int32;
|
|
blocks_per_voting_period : int32;
|
|
time_between_blocks : Period_repr.t list;
|
|
endorsers_per_block : int;
|
|
hard_gas_limit_per_operation : Z.t;
|
|
hard_gas_limit_per_block : Z.t;
|
|
proof_of_work_threshold : int64;
|
|
tokens_per_roll : Tez_repr.t;
|
|
michelson_maximum_type_size : int;
|
|
seed_nonce_revelation_tip : Tez_repr.t;
|
|
origination_size : int;
|
|
block_security_deposit : Tez_repr.t;
|
|
endorsement_security_deposit : Tez_repr.t;
|
|
baking_reward_per_endorsement : Tez_repr.t list;
|
|
endorsement_reward : Tez_repr.t list;
|
|
cost_per_byte : Tez_repr.t;
|
|
hard_storage_limit_per_operation : Z.t;
|
|
test_chain_duration : int64;
|
|
(* in seconds *)
|
|
quorum_min : int32;
|
|
quorum_max : int32;
|
|
min_proposal_quorum : int32;
|
|
initial_endorsers : int;
|
|
delay_per_missing_endorsement : Period_repr.t;
|
|
}
|
|
|
|
let parametric_encoding =
|
|
let open Data_encoding in
|
|
conv
|
|
(fun c ->
|
|
( ( c.preserved_cycles,
|
|
c.blocks_per_cycle,
|
|
c.blocks_per_commitment,
|
|
c.blocks_per_roll_snapshot,
|
|
c.blocks_per_voting_period,
|
|
c.time_between_blocks,
|
|
c.endorsers_per_block,
|
|
c.hard_gas_limit_per_operation,
|
|
c.hard_gas_limit_per_block ),
|
|
( ( c.proof_of_work_threshold,
|
|
c.tokens_per_roll,
|
|
c.michelson_maximum_type_size,
|
|
c.seed_nonce_revelation_tip,
|
|
c.origination_size,
|
|
c.block_security_deposit,
|
|
c.endorsement_security_deposit,
|
|
c.baking_reward_per_endorsement ),
|
|
( c.endorsement_reward,
|
|
c.cost_per_byte,
|
|
c.hard_storage_limit_per_operation,
|
|
c.test_chain_duration,
|
|
c.quorum_min,
|
|
c.quorum_max,
|
|
c.min_proposal_quorum,
|
|
c.initial_endorsers,
|
|
c.delay_per_missing_endorsement ) ) ))
|
|
(fun ( ( preserved_cycles,
|
|
blocks_per_cycle,
|
|
blocks_per_commitment,
|
|
blocks_per_roll_snapshot,
|
|
blocks_per_voting_period,
|
|
time_between_blocks,
|
|
endorsers_per_block,
|
|
hard_gas_limit_per_operation,
|
|
hard_gas_limit_per_block ),
|
|
( ( proof_of_work_threshold,
|
|
tokens_per_roll,
|
|
michelson_maximum_type_size,
|
|
seed_nonce_revelation_tip,
|
|
origination_size,
|
|
block_security_deposit,
|
|
endorsement_security_deposit,
|
|
baking_reward_per_endorsement ),
|
|
( endorsement_reward,
|
|
cost_per_byte,
|
|
hard_storage_limit_per_operation,
|
|
test_chain_duration,
|
|
quorum_min,
|
|
quorum_max,
|
|
min_proposal_quorum,
|
|
initial_endorsers,
|
|
delay_per_missing_endorsement ) ) ) ->
|
|
{
|
|
preserved_cycles;
|
|
blocks_per_cycle;
|
|
blocks_per_commitment;
|
|
blocks_per_roll_snapshot;
|
|
blocks_per_voting_period;
|
|
time_between_blocks;
|
|
endorsers_per_block;
|
|
hard_gas_limit_per_operation;
|
|
hard_gas_limit_per_block;
|
|
proof_of_work_threshold;
|
|
tokens_per_roll;
|
|
michelson_maximum_type_size;
|
|
seed_nonce_revelation_tip;
|
|
origination_size;
|
|
block_security_deposit;
|
|
endorsement_security_deposit;
|
|
baking_reward_per_endorsement;
|
|
endorsement_reward;
|
|
cost_per_byte;
|
|
hard_storage_limit_per_operation;
|
|
test_chain_duration;
|
|
quorum_min;
|
|
quorum_max;
|
|
min_proposal_quorum;
|
|
initial_endorsers;
|
|
delay_per_missing_endorsement;
|
|
})
|
|
(merge_objs
|
|
(obj9
|
|
(req "preserved_cycles" uint8)
|
|
(req "blocks_per_cycle" int32)
|
|
(req "blocks_per_commitment" int32)
|
|
(req "blocks_per_roll_snapshot" int32)
|
|
(req "blocks_per_voting_period" int32)
|
|
(req "time_between_blocks" (list Period_repr.encoding))
|
|
(req "endorsers_per_block" uint16)
|
|
(req "hard_gas_limit_per_operation" z)
|
|
(req "hard_gas_limit_per_block" z))
|
|
(merge_objs
|
|
(obj8
|
|
(req "proof_of_work_threshold" int64)
|
|
(req "tokens_per_roll" Tez_repr.encoding)
|
|
(req "michelson_maximum_type_size" uint16)
|
|
(req "seed_nonce_revelation_tip" Tez_repr.encoding)
|
|
(req "origination_size" int31)
|
|
(req "block_security_deposit" Tez_repr.encoding)
|
|
(req "endorsement_security_deposit" Tez_repr.encoding)
|
|
(req "baking_reward_per_endorsement" (list Tez_repr.encoding)))
|
|
(obj9
|
|
(req "endorsement_reward" (list Tez_repr.encoding))
|
|
(req "cost_per_byte" Tez_repr.encoding)
|
|
(req "hard_storage_limit_per_operation" z)
|
|
(req "test_chain_duration" int64)
|
|
(req "quorum_min" int32)
|
|
(req "quorum_max" int32)
|
|
(req "min_proposal_quorum" int32)
|
|
(req "initial_endorsers" uint16)
|
|
(req "delay_per_missing_endorsement" Period_repr.encoding))))
|
|
|
|
type t = {fixed : fixed; parametric : parametric}
|
|
|
|
let encoding =
|
|
let open Data_encoding in
|
|
conv
|
|
(fun {fixed; parametric} -> (fixed, parametric))
|
|
(fun (fixed, parametric) -> {fixed; parametric})
|
|
(merge_objs fixed_encoding parametric_encoding)
|
|
|
|
module Proto_005 = struct
|
|
type parametric = {
|
|
preserved_cycles : int;
|
|
blocks_per_cycle : int32;
|
|
blocks_per_commitment : int32;
|
|
blocks_per_roll_snapshot : int32;
|
|
blocks_per_voting_period : int32;
|
|
time_between_blocks : Period_repr.t list;
|
|
endorsers_per_block : int;
|
|
hard_gas_limit_per_operation : Z.t;
|
|
hard_gas_limit_per_block : Z.t;
|
|
proof_of_work_threshold : int64;
|
|
tokens_per_roll : Tez_repr.t;
|
|
michelson_maximum_type_size : int;
|
|
seed_nonce_revelation_tip : Tez_repr.t;
|
|
origination_size : int;
|
|
block_security_deposit : Tez_repr.t;
|
|
endorsement_security_deposit : Tez_repr.t;
|
|
block_reward : Tez_repr.t;
|
|
endorsement_reward : Tez_repr.t;
|
|
cost_per_byte : Tez_repr.t;
|
|
hard_storage_limit_per_operation : Z.t;
|
|
test_chain_duration : int64;
|
|
(* in seconds *)
|
|
quorum_min : int32;
|
|
quorum_max : int32;
|
|
min_proposal_quorum : int32;
|
|
initial_endorsers : int;
|
|
delay_per_missing_endorsement : Period_repr.t;
|
|
}
|
|
|
|
let parametric_encoding =
|
|
let open Data_encoding in
|
|
conv
|
|
(fun c ->
|
|
( ( c.preserved_cycles,
|
|
c.blocks_per_cycle,
|
|
c.blocks_per_commitment,
|
|
c.blocks_per_roll_snapshot,
|
|
c.blocks_per_voting_period,
|
|
c.time_between_blocks,
|
|
c.endorsers_per_block,
|
|
c.hard_gas_limit_per_operation,
|
|
c.hard_gas_limit_per_block ),
|
|
( ( c.proof_of_work_threshold,
|
|
c.tokens_per_roll,
|
|
c.michelson_maximum_type_size,
|
|
c.seed_nonce_revelation_tip,
|
|
c.origination_size,
|
|
c.block_security_deposit,
|
|
c.endorsement_security_deposit,
|
|
c.block_reward ),
|
|
( c.endorsement_reward,
|
|
c.cost_per_byte,
|
|
c.hard_storage_limit_per_operation,
|
|
c.test_chain_duration,
|
|
c.quorum_min,
|
|
c.quorum_max,
|
|
c.min_proposal_quorum,
|
|
c.initial_endorsers,
|
|
c.delay_per_missing_endorsement ) ) ))
|
|
(fun ( ( preserved_cycles,
|
|
blocks_per_cycle,
|
|
blocks_per_commitment,
|
|
blocks_per_roll_snapshot,
|
|
blocks_per_voting_period,
|
|
time_between_blocks,
|
|
endorsers_per_block,
|
|
hard_gas_limit_per_operation,
|
|
hard_gas_limit_per_block ),
|
|
( ( proof_of_work_threshold,
|
|
tokens_per_roll,
|
|
michelson_maximum_type_size,
|
|
seed_nonce_revelation_tip,
|
|
origination_size,
|
|
block_security_deposit,
|
|
endorsement_security_deposit,
|
|
block_reward ),
|
|
( endorsement_reward,
|
|
cost_per_byte,
|
|
hard_storage_limit_per_operation,
|
|
test_chain_duration,
|
|
quorum_min,
|
|
quorum_max,
|
|
min_proposal_quorum,
|
|
initial_endorsers,
|
|
delay_per_missing_endorsement ) ) ) ->
|
|
{
|
|
preserved_cycles;
|
|
blocks_per_cycle;
|
|
blocks_per_commitment;
|
|
blocks_per_roll_snapshot;
|
|
blocks_per_voting_period;
|
|
time_between_blocks;
|
|
endorsers_per_block;
|
|
hard_gas_limit_per_operation;
|
|
hard_gas_limit_per_block;
|
|
proof_of_work_threshold;
|
|
tokens_per_roll;
|
|
michelson_maximum_type_size;
|
|
seed_nonce_revelation_tip;
|
|
origination_size;
|
|
block_security_deposit;
|
|
endorsement_security_deposit;
|
|
block_reward;
|
|
endorsement_reward;
|
|
cost_per_byte;
|
|
hard_storage_limit_per_operation;
|
|
test_chain_duration;
|
|
quorum_min;
|
|
quorum_max;
|
|
min_proposal_quorum;
|
|
initial_endorsers;
|
|
delay_per_missing_endorsement;
|
|
})
|
|
(merge_objs
|
|
(obj9
|
|
(req "preserved_cycles" uint8)
|
|
(req "blocks_per_cycle" int32)
|
|
(req "blocks_per_commitment" int32)
|
|
(req "blocks_per_roll_snapshot" int32)
|
|
(req "blocks_per_voting_period" int32)
|
|
(req "time_between_blocks" (list Period_repr.encoding))
|
|
(req "endorsers_per_block" uint16)
|
|
(req "hard_gas_limit_per_operation" z)
|
|
(req "hard_gas_limit_per_block" z))
|
|
(merge_objs
|
|
(obj8
|
|
(req "proof_of_work_threshold" int64)
|
|
(req "tokens_per_roll" Tez_repr.encoding)
|
|
(req "michelson_maximum_type_size" uint16)
|
|
(req "seed_nonce_revelation_tip" Tez_repr.encoding)
|
|
(req "origination_size" int31)
|
|
(req "block_security_deposit" Tez_repr.encoding)
|
|
(req "endorsement_security_deposit" Tez_repr.encoding)
|
|
(req "block_reward" Tez_repr.encoding))
|
|
(obj9
|
|
(req "endorsement_reward" Tez_repr.encoding)
|
|
(req "cost_per_byte" Tez_repr.encoding)
|
|
(req "hard_storage_limit_per_operation" z)
|
|
(req "test_chain_duration" int64)
|
|
(req "quorum_min" int32)
|
|
(req "quorum_max" int32)
|
|
(req "min_proposal_quorum" int32)
|
|
(req "initial_endorsers" uint16)
|
|
(req "delay_per_missing_endorsement" Period_repr.encoding))))
|
|
end
|