Proto: move back max_operation_data_length
as a constants
This commit is contained in:
parent
39ca91cd57
commit
a5cec8fca0
@ -36,6 +36,7 @@ type operation = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let max_block_length = 42
|
let max_block_length = 42
|
||||||
|
let max_operation_data_length = 42
|
||||||
let validation_passes = []
|
let validation_passes = []
|
||||||
let acceptable_passes _op = []
|
let acceptable_passes _op = []
|
||||||
|
|
||||||
@ -80,7 +81,8 @@ end
|
|||||||
let precheck_block
|
let precheck_block
|
||||||
~ancestor_context:_
|
~ancestor_context:_
|
||||||
~ancestor_timestamp:_
|
~ancestor_timestamp:_
|
||||||
(_raw_block : block_header) =
|
(raw_block: block_header) =
|
||||||
|
Fitness.to_int64 raw_block.shell.fitness >>=? fun _ ->
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
let begin_application
|
let begin_application
|
||||||
@ -111,8 +113,7 @@ let finalize_block ctxt =
|
|||||||
let message = Some (Format.asprintf "fitness <- %Ld" fitness) in
|
let message = Some (Format.asprintf "fitness <- %Ld" fitness) in
|
||||||
let fitness = Fitness.from_int64 fitness in
|
let fitness = Fitness.from_int64 fitness in
|
||||||
return ({ Updater.message ; context = ctxt.context ; fitness ;
|
return ({ Updater.message ; context = ctxt.context ; fitness ;
|
||||||
max_operations_ttl = 0 ; max_operation_data_length = 0 ;
|
max_operations_ttl = 0 ; last_allowed_fork_level = 0l ;
|
||||||
last_allowed_fork_level = 0l ;
|
|
||||||
}, ())
|
}, ())
|
||||||
|
|
||||||
let rpc_services = RPC_directory.empty
|
let rpc_services = RPC_directory.empty
|
||||||
@ -121,6 +122,5 @@ let init ctxt block_header =
|
|||||||
let fitness = block_header.Block_header.fitness in
|
let fitness = block_header.Block_header.fitness in
|
||||||
let message = None in
|
let message = None in
|
||||||
return { Updater.message ; context = ctxt ; fitness ;
|
return { Updater.message ; context = ctxt ; fitness ;
|
||||||
max_operations_ttl = 0 ; max_operation_data_length = 0 ;
|
max_operations_ttl = 0 ; last_allowed_fork_level = 0l ;
|
||||||
last_allowed_fork_level = 0l ;
|
|
||||||
}
|
}
|
||||||
|
10
src/bin_client/test/demo/main.mli
Normal file
10
src/bin_client/test/demo/main.mli
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
(**************************************************************************)
|
||||||
|
(* *)
|
||||||
|
(* Copyright (c) 2014 - 2018. *)
|
||||||
|
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
||||||
|
(* *)
|
||||||
|
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
||||||
|
(* *)
|
||||||
|
(**************************************************************************)
|
||||||
|
|
||||||
|
include Updater.PROTOCOL
|
@ -31,7 +31,7 @@ done
|
|||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
# autogenerated from the demo source
|
# autogenerated from the demo source
|
||||||
protocol_version="PsgZ1PB2h82sTKznNbmZxtbsU432eKDv1W6cf1cJFhCFmGYSiJs"
|
protocol_version="PrqKneMJTqCkD5bXFb4w3nidsW9kem1DjmmchwFTHqztK7V3QRq"
|
||||||
|
|
||||||
$admin_client inject protocol "$test_dir/demo"
|
$admin_client inject protocol "$test_dir/demo"
|
||||||
$admin_client list protocols
|
$admin_client list protocols
|
||||||
|
@ -24,9 +24,6 @@ type validation_result = {
|
|||||||
(** An optional informative message to be used as in the 'git
|
(** An optional informative message to be used as in the 'git
|
||||||
commit' of the block's context. *)
|
commit' of the block's context. *)
|
||||||
|
|
||||||
max_operation_data_length: int ;
|
|
||||||
(** The maximum size of operations in bytes. *)
|
|
||||||
|
|
||||||
max_operations_ttl: int ;
|
max_operations_ttl: int ;
|
||||||
(** The "time-to-live" of operation for the next block: any
|
(** The "time-to-live" of operation for the next block: any
|
||||||
operations whose 'branch' is older than 'ttl' blocks in the
|
operations whose 'branch' is older than 'ttl' blocks in the
|
||||||
@ -58,9 +55,12 @@ type rpc_context = {
|
|||||||
access to the standard library and the Environment module. *)
|
access to the standard library and the Environment module. *)
|
||||||
module type PROTOCOL = sig
|
module type PROTOCOL = sig
|
||||||
|
|
||||||
(** The maximum size of block headers in bytes. *)
|
(** The maximum size of a block header in bytes. *)
|
||||||
val max_block_length: int
|
val max_block_length: int
|
||||||
|
|
||||||
|
(** The maximum size of an operation in bytes. *)
|
||||||
|
val max_operation_data_length: int
|
||||||
|
|
||||||
(** The number of validation passes (length of the list) and the
|
(** The number of validation passes (length of the list) and the
|
||||||
operation's quota for each pass. *)
|
operation's quota for each pass. *)
|
||||||
val validation_passes: quota list
|
val validation_passes: quota list
|
||||||
|
@ -35,7 +35,6 @@ module Make (Context : CONTEXT) = struct
|
|||||||
context: Context.t ;
|
context: Context.t ;
|
||||||
fitness: Fitness.t ;
|
fitness: Fitness.t ;
|
||||||
message: string option ;
|
message: string option ;
|
||||||
max_operation_data_length: int ;
|
|
||||||
max_operations_ttl: int ;
|
max_operations_ttl: int ;
|
||||||
last_allowed_fork_level: Int32.t ;
|
last_allowed_fork_level: Int32.t ;
|
||||||
}
|
}
|
||||||
@ -58,6 +57,7 @@ module Make (Context : CONTEXT) = struct
|
|||||||
type rpc_context
|
type rpc_context
|
||||||
type 'a tzresult
|
type 'a tzresult
|
||||||
val max_block_length: int
|
val max_block_length: int
|
||||||
|
val max_operation_data_length: int
|
||||||
val validation_passes: quota list
|
val validation_passes: quota list
|
||||||
type block_header_data
|
type block_header_data
|
||||||
val block_header_data_encoding: block_header_data Data_encoding.t
|
val block_header_data_encoding: block_header_data Data_encoding.t
|
||||||
@ -578,7 +578,6 @@ module Make (Context : CONTEXT) = struct
|
|||||||
context: Context.t ;
|
context: Context.t ;
|
||||||
fitness: Fitness.t ;
|
fitness: Fitness.t ;
|
||||||
message: string option ;
|
message: string option ;
|
||||||
max_operation_data_length: int ;
|
|
||||||
max_operations_ttl: int ;
|
max_operations_ttl: int ;
|
||||||
last_allowed_fork_level: Int32.t ;
|
last_allowed_fork_level: Int32.t ;
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,6 @@ module Make (Context : CONTEXT) : sig
|
|||||||
context: Context.t ;
|
context: Context.t ;
|
||||||
fitness: Fitness.t ;
|
fitness: Fitness.t ;
|
||||||
message: string option ;
|
message: string option ;
|
||||||
max_operation_data_length: int ;
|
|
||||||
max_operations_ttl: int ;
|
max_operations_ttl: int ;
|
||||||
last_allowed_fork_level: Int32.t ;
|
last_allowed_fork_level: Int32.t ;
|
||||||
}
|
}
|
||||||
@ -51,6 +50,7 @@ module Make (Context : CONTEXT) : sig
|
|||||||
type rpc_context
|
type rpc_context
|
||||||
type 'a tzresult
|
type 'a tzresult
|
||||||
val max_block_length: int
|
val max_block_length: int
|
||||||
|
val max_operation_data_length: int
|
||||||
val validation_passes: quota list
|
val validation_passes: quota list
|
||||||
type block_header_data
|
type block_header_data
|
||||||
val block_header_data_encoding: block_header_data Data_encoding.t
|
val block_header_data_encoding: block_header_data Data_encoding.t
|
||||||
|
@ -98,7 +98,7 @@ let build_raw_rpc_directory
|
|||||||
Block_services.protocol_data ;
|
Block_services.protocol_data ;
|
||||||
test_chain_status ;
|
test_chain_status ;
|
||||||
max_operations_ttl = State.Block.max_operations_ttl block ;
|
max_operations_ttl = State.Block.max_operations_ttl block ;
|
||||||
max_operation_data_length = State.Block.max_operation_data_length block ;
|
max_operation_data_length = Next_proto.max_operation_data_length ;
|
||||||
max_block_header_length = Next_proto.max_block_length ;
|
max_block_header_length = Next_proto.max_block_length ;
|
||||||
operation_list_quota =
|
operation_list_quota =
|
||||||
List.map
|
List.map
|
||||||
|
@ -129,15 +129,14 @@ let apply_block
|
|||||||
invalid_block hash @@
|
invalid_block hash @@
|
||||||
Too_many_operations
|
Too_many_operations
|
||||||
{ pass = i + 1 ; found = List.length ops ; max }) >>=? fun () ->
|
{ pass = i + 1 ; found = List.length ops ; max }) >>=? fun () ->
|
||||||
let max_size = State.Block.max_operation_data_length pred in
|
|
||||||
iter_p (fun op ->
|
iter_p (fun op ->
|
||||||
let size = Data_encoding.Binary.length Operation.encoding op in
|
let size = Data_encoding.Binary.length Operation.encoding op in
|
||||||
fail_unless
|
fail_unless
|
||||||
(size <= max_size)
|
(size <= Proto.max_operation_data_length)
|
||||||
(invalid_block hash @@
|
(invalid_block hash @@
|
||||||
Oversized_operation
|
Oversized_operation
|
||||||
{ operation = Operation.hash op ;
|
{ operation = Operation.hash op ;
|
||||||
size ; max = max_size })) ops >>=? fun () ->
|
size ; max = Proto.max_operation_data_length })) ops >>=? fun () ->
|
||||||
return ())
|
return ())
|
||||||
operations Proto.validation_passes >>=? fun () ->
|
operations Proto.validation_passes >>=? fun () ->
|
||||||
let operation_hashes = List.map (List.map Operation.hash) operations in
|
let operation_hashes = List.map (List.map Operation.hash) operations in
|
||||||
|
@ -49,8 +49,7 @@ let rec apply_operations apply_operation state r max_ops ~sort ops =
|
|||||||
|
|
||||||
type prevalidation_state =
|
type prevalidation_state =
|
||||||
State : { proto : 'a proto ; state : 'a ;
|
State : { proto : 'a proto ; state : 'a ;
|
||||||
max_number_of_operations : int ;
|
max_number_of_operations : int }
|
||||||
max_operation_data_length : int }
|
|
||||||
-> prevalidation_state
|
-> prevalidation_state
|
||||||
|
|
||||||
and 'a proto =
|
and 'a proto =
|
||||||
@ -64,8 +63,6 @@ let start_prevalidation
|
|||||||
timestamp = predecessor_timestamp ;
|
timestamp = predecessor_timestamp ;
|
||||||
level = predecessor_level } } =
|
level = predecessor_level } } =
|
||||||
State.Block.header predecessor in
|
State.Block.header predecessor in
|
||||||
let max_operation_data_length =
|
|
||||||
State.Block.max_operation_data_length predecessor in
|
|
||||||
State.Block.context predecessor >>= fun predecessor_context ->
|
State.Block.context predecessor >>= fun predecessor_context ->
|
||||||
Context.get_protocol predecessor_context >>= fun protocol ->
|
Context.get_protocol predecessor_context >>= fun protocol ->
|
||||||
let predecessor = State.Block.hash predecessor in
|
let predecessor = State.Block.hash predecessor in
|
||||||
@ -107,12 +104,12 @@ let start_prevalidation
|
|||||||
(* FIXME arbitrary value, to be customisable *)
|
(* FIXME arbitrary value, to be customisable *)
|
||||||
let max_number_of_operations = 1000 in
|
let max_number_of_operations = 1000 in
|
||||||
return (State { proto = (module Proto) ; state ;
|
return (State { proto = (module Proto) ; state ;
|
||||||
max_number_of_operations ; max_operation_data_length })
|
max_number_of_operations })
|
||||||
|
|
||||||
|
|
||||||
let prevalidate
|
let prevalidate
|
||||||
(State { proto = (module Proto) ; state ;
|
(State { proto = (module Proto) ; state ;
|
||||||
max_number_of_operations ; max_operation_data_length })
|
max_number_of_operations })
|
||||||
~sort (ops : (Operation_hash.t * Operation.t) list)=
|
~sort (ops : (Operation_hash.t * Operation.t) list)=
|
||||||
let ops =
|
let ops =
|
||||||
List.map
|
List.map
|
||||||
@ -145,8 +142,8 @@ let prevalidate
|
|||||||
let size = Data_encoding.Binary.length Operation.encoding op in
|
let size = Data_encoding.Binary.length Operation.encoding op in
|
||||||
if max_ops <= 0 then
|
if max_ops <= 0 then
|
||||||
fail Too_many_operations
|
fail Too_many_operations
|
||||||
else if size > max_operation_data_length then
|
else if size > Proto.max_operation_data_length then
|
||||||
fail (Oversized_operation { size ; max = max_operation_data_length })
|
fail (Oversized_operation { size ; max = Proto.max_operation_data_length })
|
||||||
else
|
else
|
||||||
Proto.apply_operation state parse_op >>=? fun (state, receipt) ->
|
Proto.apply_operation state parse_op >>=? fun (state, receipt) ->
|
||||||
return (state, receipt) in
|
return (state, receipt) in
|
||||||
@ -162,7 +159,7 @@ let prevalidate
|
|||||||
(fun map (h, op, err) -> Operation_hash.Map.add h (op, err) map)
|
(fun map (h, op, err) -> Operation_hash.Map.add h (op, err) map)
|
||||||
r.branch_refused invalid_ops } in
|
r.branch_refused invalid_ops } in
|
||||||
Lwt.return (State { proto = (module Proto) ; state ;
|
Lwt.return (State { proto = (module Proto) ; state ;
|
||||||
max_number_of_operations ; max_operation_data_length },
|
max_number_of_operations },
|
||||||
r)
|
r)
|
||||||
|
|
||||||
let end_prevalidation (State { proto = (module Proto) ; state }) =
|
let end_prevalidation (State { proto = (module Proto) ; state }) =
|
||||||
|
@ -221,9 +221,8 @@ module Locked_block = struct
|
|||||||
let header : Block_header.t = { shell ; protocol_data = MBytes.create 0 } in
|
let header : Block_header.t = { shell ; protocol_data = MBytes.create 0 } in
|
||||||
Store.Block.Contents.store (store, genesis.block)
|
Store.Block.Contents.store (store, genesis.block)
|
||||||
{ Store.Block.header ; message = Some "Genesis" ;
|
{ Store.Block.header ; message = Some "Genesis" ;
|
||||||
max_operations_ttl = 0 ; context ;
|
max_operations_ttl = 0 ;
|
||||||
max_operation_data_length = 0 ;
|
context ; metadata = MBytes.create 0 ;
|
||||||
metadata = MBytes.create 0 ;
|
|
||||||
} >>= fun () ->
|
} >>= fun () ->
|
||||||
Lwt.return header
|
Lwt.return header
|
||||||
|
|
||||||
@ -443,8 +442,6 @@ module Block = struct
|
|||||||
let message { contents = { message } } = message
|
let message { contents = { message } } = message
|
||||||
let max_operations_ttl { contents = { max_operations_ttl } } =
|
let max_operations_ttl { contents = { max_operations_ttl } } =
|
||||||
max_operations_ttl
|
max_operations_ttl
|
||||||
let max_operation_data_length { contents = { max_operation_data_length } } =
|
|
||||||
max_operation_data_length
|
|
||||||
|
|
||||||
let is_genesis b = Block_hash.equal b.hash b.chain_state.genesis.block
|
let is_genesis b = Block_hash.equal b.hash b.chain_state.genesis.block
|
||||||
|
|
||||||
@ -543,7 +540,7 @@ module Block = struct
|
|||||||
chain_state block_header block_header_metadata
|
chain_state block_header block_header_metadata
|
||||||
operations operations_metadata
|
operations operations_metadata
|
||||||
{ Tezos_protocol_environment_shell.context ; message ;
|
{ Tezos_protocol_environment_shell.context ; message ;
|
||||||
max_operations_ttl ; max_operation_data_length } =
|
max_operations_ttl } =
|
||||||
let bytes = Block_header.to_bytes block_header in
|
let bytes = Block_header.to_bytes block_header in
|
||||||
let hash = Block_header.hash_raw bytes in
|
let hash = Block_header.hash_raw bytes in
|
||||||
fail_unless
|
fail_unless
|
||||||
@ -580,7 +577,6 @@ module Block = struct
|
|||||||
block_header ;
|
block_header ;
|
||||||
message ;
|
message ;
|
||||||
max_operations_ttl ;
|
max_operations_ttl ;
|
||||||
max_operation_data_length ;
|
|
||||||
context = commit ;
|
context = commit ;
|
||||||
metadata = block_header_metadata ;
|
metadata = block_header_metadata ;
|
||||||
} in
|
} in
|
||||||
|
@ -119,7 +119,6 @@ module Block : sig
|
|||||||
val level: t -> Int32.t
|
val level: t -> Int32.t
|
||||||
val message: t -> string option
|
val message: t -> string option
|
||||||
val max_operations_ttl: t -> int
|
val max_operations_ttl: t -> int
|
||||||
val max_operation_data_length: t -> int
|
|
||||||
val metadata: t -> MBytes.t
|
val metadata: t -> MBytes.t
|
||||||
|
|
||||||
val is_genesis: t -> bool
|
val is_genesis: t -> bool
|
||||||
|
@ -84,7 +84,6 @@ module Block = struct
|
|||||||
header: Block_header.t ;
|
header: Block_header.t ;
|
||||||
message: string option ;
|
message: string option ;
|
||||||
max_operations_ttl: int ;
|
max_operations_ttl: int ;
|
||||||
max_operation_data_length: int;
|
|
||||||
context: Context_hash.t ;
|
context: Context_hash.t ;
|
||||||
metadata: MBytes.t ;
|
metadata: MBytes.t ;
|
||||||
}
|
}
|
||||||
@ -99,18 +98,16 @@ module Block = struct
|
|||||||
let open Data_encoding in
|
let open Data_encoding in
|
||||||
conv
|
conv
|
||||||
(fun { header ; message ; max_operations_ttl ;
|
(fun { header ; message ; max_operations_ttl ;
|
||||||
max_operation_data_length ; context ; metadata } ->
|
context ; metadata } ->
|
||||||
(message, max_operations_ttl,
|
(message, max_operations_ttl,
|
||||||
max_operation_data_length, context, metadata, header ))
|
context, metadata, header ))
|
||||||
(fun (message, max_operations_ttl,
|
(fun (message, max_operations_ttl,
|
||||||
max_operation_data_length, context, metadata, header ) ->
|
context, metadata, header ) ->
|
||||||
{ header ; message ; max_operations_ttl ;
|
{ header ; message ; max_operations_ttl ;
|
||||||
max_operation_data_length ;
|
|
||||||
context ; metadata })
|
context ; metadata })
|
||||||
(obj6
|
(obj5
|
||||||
(opt "message" string)
|
(opt "message" string)
|
||||||
(req "max_operations_ttl" uint16)
|
(req "max_operations_ttl" uint16)
|
||||||
(req "max_operation_data_length" uint16)
|
|
||||||
(req "context" Context_hash.encoding)
|
(req "context" Context_hash.encoding)
|
||||||
(req "metadata" bytes)
|
(req "metadata" bytes)
|
||||||
(req "header" Block_header.encoding))
|
(req "header" Block_header.encoding))
|
||||||
|
@ -88,7 +88,6 @@ module Block : sig
|
|||||||
header: Block_header.t ;
|
header: Block_header.t ;
|
||||||
message: string option ;
|
message: string option ;
|
||||||
max_operations_ttl: int ;
|
max_operations_ttl: int ;
|
||||||
max_operation_data_length: int;
|
|
||||||
context: Context_hash.t ;
|
context: Context_hash.t ;
|
||||||
metadata: MBytes.t ;
|
metadata: MBytes.t ;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,6 @@ let make_empty_chain (chain:State.Chain.t) n : Block_hash.t Lwt.t =
|
|||||||
context = empty_context ;
|
context = empty_context ;
|
||||||
fitness = [] ;
|
fitness = [] ;
|
||||||
message = None ;
|
message = None ;
|
||||||
max_operation_data_length = 0 ;
|
|
||||||
max_operations_ttl = 0 ;
|
max_operations_ttl = 0 ;
|
||||||
last_allowed_fork_level = 0l ;
|
last_allowed_fork_level = 0l ;
|
||||||
} in
|
} in
|
||||||
|
@ -89,7 +89,6 @@ let lolblock ?(operations = []) header =
|
|||||||
max_operations_ttl = 0 ;
|
max_operations_ttl = 0 ;
|
||||||
message = None ;
|
message = None ;
|
||||||
context = Context_hash.zero ;
|
context = Context_hash.zero ;
|
||||||
max_operation_data_length = 0 ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let b1 = lolblock "Blop !"
|
let b1 = lolblock "Blop !"
|
||||||
|
@ -129,9 +129,7 @@ let prepare = Init_storage.prepare
|
|||||||
let finalize ?commit_message:message c =
|
let finalize ?commit_message:message c =
|
||||||
let fitness = Fitness.from_int64 (Fitness.current c) in
|
let fitness = Fitness.from_int64 (Fitness.current c) in
|
||||||
let context = Raw_context.recover c in
|
let context = Raw_context.recover c in
|
||||||
let constants = Raw_context.constants c in
|
|
||||||
{ Updater.context ; fitness ; message ; max_operations_ttl = 60 ;
|
{ Updater.context ; fitness ; message ; max_operations_ttl = 60 ;
|
||||||
max_operation_data_length = constants.max_operation_data_length ;
|
|
||||||
last_allowed_fork_level =
|
last_allowed_fork_level =
|
||||||
Raw_level.to_int32 @@ Level.last_allowed_fork_level c;
|
Raw_level.to_int32 @@ Level.last_allowed_fork_level c;
|
||||||
}
|
}
|
||||||
|
@ -300,6 +300,7 @@ module Constants : sig
|
|||||||
proof_of_work_nonce_size : int ;
|
proof_of_work_nonce_size : int ;
|
||||||
nonce_length : int ;
|
nonce_length : int ;
|
||||||
max_revelations_per_block : int ;
|
max_revelations_per_block : int ;
|
||||||
|
max_operation_data_length : int ;
|
||||||
}
|
}
|
||||||
val fixed_encoding: fixed Data_encoding.t
|
val fixed_encoding: fixed Data_encoding.t
|
||||||
val fixed: fixed
|
val fixed: fixed
|
||||||
@ -307,7 +308,7 @@ module Constants : sig
|
|||||||
val proof_of_work_nonce_size: int
|
val proof_of_work_nonce_size: int
|
||||||
val nonce_length: int
|
val nonce_length: int
|
||||||
val max_revelations_per_block: int
|
val max_revelations_per_block: int
|
||||||
|
val max_operation_data_length: int
|
||||||
|
|
||||||
(** Constants parameterized by context *)
|
(** Constants parameterized by context *)
|
||||||
type parametric = {
|
type parametric = {
|
||||||
@ -322,7 +323,6 @@ module Constants : sig
|
|||||||
hard_gas_limit_per_block: Z.t ;
|
hard_gas_limit_per_block: Z.t ;
|
||||||
proof_of_work_threshold: int64 ;
|
proof_of_work_threshold: int64 ;
|
||||||
dictator_pubkey: Signature.Public_key.t ;
|
dictator_pubkey: Signature.Public_key.t ;
|
||||||
max_operation_data_length: int ;
|
|
||||||
tokens_per_roll: Tez.t ;
|
tokens_per_roll: Tez.t ;
|
||||||
michelson_maximum_type_size: int;
|
michelson_maximum_type_size: int;
|
||||||
seed_nonce_revelation_tip: Tez.t ;
|
seed_nonce_revelation_tip: Tez.t ;
|
||||||
@ -351,7 +351,6 @@ module Constants : sig
|
|||||||
val hard_storage_limit_per_block: context -> Int64.t
|
val hard_storage_limit_per_block: context -> Int64.t
|
||||||
val proof_of_work_threshold: context -> int64
|
val proof_of_work_threshold: context -> int64
|
||||||
val dictator_pubkey: context -> Signature.Public_key.t
|
val dictator_pubkey: context -> Signature.Public_key.t
|
||||||
val max_operation_data_length: context -> int
|
|
||||||
val tokens_per_roll: context -> Tez.t
|
val tokens_per_roll: context -> Tez.t
|
||||||
val michelson_maximum_type_size: context -> int
|
val michelson_maximum_type_size: context -> int
|
||||||
val block_reward: context -> Tez.t
|
val block_reward: context -> Tez.t
|
||||||
|
@ -11,36 +11,43 @@ let version_number = "\000"
|
|||||||
let proof_of_work_nonce_size = 8
|
let proof_of_work_nonce_size = 8
|
||||||
let nonce_length = 32
|
let nonce_length = 32
|
||||||
let max_revelations_per_block = 32
|
let max_revelations_per_block = 32
|
||||||
|
let max_operation_data_length = 16 * 1024 ; (* 16kB *)
|
||||||
|
|
||||||
type fixed = {
|
type fixed = {
|
||||||
proof_of_work_nonce_size : int ;
|
proof_of_work_nonce_size : int ;
|
||||||
nonce_length : int ;
|
nonce_length : int ;
|
||||||
max_revelations_per_block : int ;
|
max_revelations_per_block : int ;
|
||||||
|
max_operation_data_length : int ;
|
||||||
}
|
}
|
||||||
|
|
||||||
let fixed_encoding =
|
let fixed_encoding =
|
||||||
let open Data_encoding in
|
let open Data_encoding in
|
||||||
conv
|
conv
|
||||||
(fun c ->
|
(fun c ->
|
||||||
( c.proof_of_work_nonce_size,
|
(c.proof_of_work_nonce_size,
|
||||||
c.nonce_length,
|
c.nonce_length,
|
||||||
c.max_revelations_per_block ))
|
c.max_revelations_per_block,
|
||||||
(fun ( proof_of_work_nonce_size,
|
c.max_operation_data_length))
|
||||||
nonce_length,
|
(fun (proof_of_work_nonce_size,
|
||||||
max_revelations_per_block ) ->
|
nonce_length,
|
||||||
|
max_revelations_per_block,
|
||||||
|
max_operation_data_length) ->
|
||||||
{ proof_of_work_nonce_size ;
|
{ proof_of_work_nonce_size ;
|
||||||
nonce_length ;
|
nonce_length ;
|
||||||
max_revelations_per_block ;
|
max_revelations_per_block ;
|
||||||
|
max_operation_data_length ;
|
||||||
} )
|
} )
|
||||||
(obj3
|
(obj4
|
||||||
(req "proof_of_work_nonce_size" uint8)
|
(req "proof_of_work_nonce_size" uint8)
|
||||||
(req "nonce_length" uint8)
|
(req "nonce_length" uint8)
|
||||||
(req "max_revelations_per_block" uint8))
|
(req "max_revelations_per_block" uint8)
|
||||||
|
(req "max_operation_data_length" int31))
|
||||||
|
|
||||||
let fixed = {
|
let fixed = {
|
||||||
proof_of_work_nonce_size ;
|
proof_of_work_nonce_size ;
|
||||||
nonce_length ;
|
nonce_length ;
|
||||||
max_revelations_per_block ;
|
max_revelations_per_block ;
|
||||||
|
max_operation_data_length ;
|
||||||
}
|
}
|
||||||
|
|
||||||
type parametric = {
|
type parametric = {
|
||||||
@ -55,7 +62,6 @@ type parametric = {
|
|||||||
hard_gas_limit_per_block: Z.t ;
|
hard_gas_limit_per_block: Z.t ;
|
||||||
proof_of_work_threshold: int64 ;
|
proof_of_work_threshold: int64 ;
|
||||||
dictator_pubkey: Signature.Public_key.t ;
|
dictator_pubkey: Signature.Public_key.t ;
|
||||||
max_operation_data_length: int ;
|
|
||||||
tokens_per_roll: Tez_repr.t ;
|
tokens_per_roll: Tez_repr.t ;
|
||||||
michelson_maximum_type_size: int;
|
michelson_maximum_type_size: int;
|
||||||
seed_nonce_revelation_tip: Tez_repr.t ;
|
seed_nonce_revelation_tip: Tez_repr.t ;
|
||||||
@ -85,8 +91,6 @@ let default = {
|
|||||||
dictator_pubkey =
|
dictator_pubkey =
|
||||||
Signature.Public_key.of_b58check_exn
|
Signature.Public_key.of_b58check_exn
|
||||||
"edpkugeDwmwuwyyD3Q5enapgEYDxZLtEUFFSrvVwXASQMVEqsvTqWu" ;
|
"edpkugeDwmwuwyyD3Q5enapgEYDxZLtEUFFSrvVwXASQMVEqsvTqWu" ;
|
||||||
max_operation_data_length =
|
|
||||||
16 * 1024 ; (* 16kB *)
|
|
||||||
tokens_per_roll =
|
tokens_per_roll =
|
||||||
Tez_repr.(mul_exn one 10_000) ;
|
Tez_repr.(mul_exn one 10_000) ;
|
||||||
michelson_maximum_type_size = 1000 ;
|
michelson_maximum_type_size = 1000 ;
|
||||||
@ -122,7 +126,6 @@ let parametric_encoding =
|
|||||||
c.hard_gas_limit_per_block),
|
c.hard_gas_limit_per_block),
|
||||||
((c.proof_of_work_threshold,
|
((c.proof_of_work_threshold,
|
||||||
c.dictator_pubkey,
|
c.dictator_pubkey,
|
||||||
c.max_operation_data_length,
|
|
||||||
c.tokens_per_roll,
|
c.tokens_per_roll,
|
||||||
c.michelson_maximum_type_size,
|
c.michelson_maximum_type_size,
|
||||||
c.seed_nonce_revelation_tip,
|
c.seed_nonce_revelation_tip,
|
||||||
@ -145,7 +148,6 @@ let parametric_encoding =
|
|||||||
hard_gas_limit_per_block),
|
hard_gas_limit_per_block),
|
||||||
((proof_of_work_threshold,
|
((proof_of_work_threshold,
|
||||||
dictator_pubkey,
|
dictator_pubkey,
|
||||||
max_operation_data_length,
|
|
||||||
tokens_per_roll,
|
tokens_per_roll,
|
||||||
michelson_maximum_type_size,
|
michelson_maximum_type_size,
|
||||||
seed_nonce_revelation_tip,
|
seed_nonce_revelation_tip,
|
||||||
@ -168,7 +170,6 @@ let parametric_encoding =
|
|||||||
hard_gas_limit_per_block ;
|
hard_gas_limit_per_block ;
|
||||||
proof_of_work_threshold ;
|
proof_of_work_threshold ;
|
||||||
dictator_pubkey ;
|
dictator_pubkey ;
|
||||||
max_operation_data_length ;
|
|
||||||
tokens_per_roll ;
|
tokens_per_roll ;
|
||||||
michelson_maximum_type_size ;
|
michelson_maximum_type_size ;
|
||||||
seed_nonce_revelation_tip ;
|
seed_nonce_revelation_tip ;
|
||||||
@ -193,10 +194,9 @@ let parametric_encoding =
|
|||||||
(req "hard_gas_limit_per_operation" z)
|
(req "hard_gas_limit_per_operation" z)
|
||||||
(req "hard_gas_limit_per_block" z))
|
(req "hard_gas_limit_per_block" z))
|
||||||
(merge_objs
|
(merge_objs
|
||||||
(obj10
|
(obj9
|
||||||
(req "proof_of_work_threshold" int64)
|
(req "proof_of_work_threshold" int64)
|
||||||
(req "dictator_pubkey" Signature.Public_key.encoding)
|
(req "dictator_pubkey" Signature.Public_key.encoding)
|
||||||
(req "max_operation_data_length" int31)
|
|
||||||
(req "tokens_per_roll" Tez_repr.encoding)
|
(req "tokens_per_roll" Tez_repr.encoding)
|
||||||
(req "michelson_maximum_type_size" uint16)
|
(req "michelson_maximum_type_size" uint16)
|
||||||
(req "seed_nonce_revelation_tip" Tez_repr.encoding)
|
(req "seed_nonce_revelation_tip" Tez_repr.encoding)
|
||||||
|
@ -49,9 +49,6 @@ let proof_of_work_threshold c =
|
|||||||
let dictator_pubkey c =
|
let dictator_pubkey c =
|
||||||
let constants = Raw_context.constants c in
|
let constants = Raw_context.constants c in
|
||||||
constants.dictator_pubkey
|
constants.dictator_pubkey
|
||||||
let max_operation_data_length c =
|
|
||||||
let constants = Raw_context.constants c in
|
|
||||||
constants.max_operation_data_length
|
|
||||||
let tokens_per_roll c =
|
let tokens_per_roll c =
|
||||||
let constants = Raw_context.constants c in
|
let constants = Raw_context.constants c in
|
||||||
constants.tokens_per_roll
|
constants.tokens_per_roll
|
||||||
|
@ -43,6 +43,9 @@ let acceptable_passes = Alpha_context.Operation.acceptable_passes
|
|||||||
let max_block_length =
|
let max_block_length =
|
||||||
Alpha_context.Block_header.max_header_length
|
Alpha_context.Block_header.max_header_length
|
||||||
|
|
||||||
|
let max_operation_data_length =
|
||||||
|
Alpha_context.Constants.max_operation_data_length
|
||||||
|
|
||||||
let validation_passes =
|
let validation_passes =
|
||||||
Updater.[ { max_size = 32 * 1024 ; max_op = Some 32 } ; (* 32kB FIXME *)
|
Updater.[ { max_size = 32 * 1024 ; max_op = Some 32 } ; (* 32kB FIXME *)
|
||||||
{ max_size = 32 * 1024 ; max_op = None } ; (* 32kB FIXME *)
|
{ max_size = 32 * 1024 ; max_op = None } ; (* 32kB FIXME *)
|
||||||
|
@ -72,9 +72,6 @@ let constants_encoding =
|
|||||||
and dictator_pubkey =
|
and dictator_pubkey =
|
||||||
opt Signature.Public_key.(=)
|
opt Signature.Public_key.(=)
|
||||||
default.dictator_pubkey c.dictator_pubkey
|
default.dictator_pubkey c.dictator_pubkey
|
||||||
and max_operation_data_length =
|
|
||||||
opt Compare.Int.(=)
|
|
||||||
default.max_operation_data_length c.max_operation_data_length
|
|
||||||
and tokens_per_roll =
|
and tokens_per_roll =
|
||||||
opt Tez_repr.(=)
|
opt Tez_repr.(=)
|
||||||
default.tokens_per_roll c.tokens_per_roll
|
default.tokens_per_roll c.tokens_per_roll
|
||||||
@ -120,7 +117,6 @@ let constants_encoding =
|
|||||||
hard_gas_limit_per_block),
|
hard_gas_limit_per_block),
|
||||||
((proof_of_work_threshold,
|
((proof_of_work_threshold,
|
||||||
dictator_pubkey,
|
dictator_pubkey,
|
||||||
max_operation_data_length,
|
|
||||||
tokens_per_roll,
|
tokens_per_roll,
|
||||||
michelson_maximum_type_size,
|
michelson_maximum_type_size,
|
||||||
seed_nonce_revelation_tip,
|
seed_nonce_revelation_tip,
|
||||||
@ -143,7 +139,6 @@ let constants_encoding =
|
|||||||
hard_gas_limit_per_block),
|
hard_gas_limit_per_block),
|
||||||
((proof_of_work_threshold,
|
((proof_of_work_threshold,
|
||||||
dictator_pubkey,
|
dictator_pubkey,
|
||||||
max_operation_data_length,
|
|
||||||
tokens_per_roll,
|
tokens_per_roll,
|
||||||
michelson_maximum_type_size,
|
michelson_maximum_type_size,
|
||||||
seed_nonce_revelation_tip,
|
seed_nonce_revelation_tip,
|
||||||
@ -180,8 +175,6 @@ let constants_encoding =
|
|||||||
unopt default.proof_of_work_threshold proof_of_work_threshold ;
|
unopt default.proof_of_work_threshold proof_of_work_threshold ;
|
||||||
dictator_pubkey =
|
dictator_pubkey =
|
||||||
unopt default.dictator_pubkey dictator_pubkey ;
|
unopt default.dictator_pubkey dictator_pubkey ;
|
||||||
max_operation_data_length =
|
|
||||||
unopt default.max_operation_data_length max_operation_data_length ;
|
|
||||||
tokens_per_roll =
|
tokens_per_roll =
|
||||||
unopt default.tokens_per_roll tokens_per_roll ;
|
unopt default.tokens_per_roll tokens_per_roll ;
|
||||||
michelson_maximum_type_size =
|
michelson_maximum_type_size =
|
||||||
@ -217,10 +210,9 @@ let constants_encoding =
|
|||||||
(opt "hard_gas_limit_per_operation" z)
|
(opt "hard_gas_limit_per_operation" z)
|
||||||
(opt "hard_gas_limit_per_block" z))
|
(opt "hard_gas_limit_per_block" z))
|
||||||
(merge_objs
|
(merge_objs
|
||||||
(obj10
|
(obj9
|
||||||
(opt "proof_of_work_threshold" int64)
|
(opt "proof_of_work_threshold" int64)
|
||||||
(opt "dictator_pubkey" Signature.Public_key.encoding)
|
(opt "dictator_pubkey" Signature.Public_key.encoding)
|
||||||
(opt "max_operation_data_length" int31)
|
|
||||||
(opt "tokens_per_roll" Tez_repr.encoding)
|
(opt "tokens_per_roll" Tez_repr.encoding)
|
||||||
(opt "michelson_maximum_type_size" uint16)
|
(opt "michelson_maximum_type_size" uint16)
|
||||||
(opt "seed_nonce_revelation_tip" Tez_repr.encoding)
|
(opt "seed_nonce_revelation_tip" Tez_repr.encoding)
|
||||||
|
@ -234,7 +234,6 @@ let genesis
|
|||||||
?(hard_gas_limit_per_block = Constants_repr.default.hard_gas_limit_per_block)
|
?(hard_gas_limit_per_block = Constants_repr.default.hard_gas_limit_per_block)
|
||||||
?(proof_of_work_threshold = Int64.(neg one))
|
?(proof_of_work_threshold = Int64.(neg one))
|
||||||
?(dictator_pubkey = Constants_repr.default.dictator_pubkey)
|
?(dictator_pubkey = Constants_repr.default.dictator_pubkey)
|
||||||
?(max_operation_data_length = Constants_repr.default.max_operation_data_length)
|
|
||||||
?(tokens_per_roll = Constants_repr.default.tokens_per_roll)
|
?(tokens_per_roll = Constants_repr.default.tokens_per_roll)
|
||||||
?(michelson_maximum_type_size = Constants_repr.default.michelson_maximum_type_size)
|
?(michelson_maximum_type_size = Constants_repr.default.michelson_maximum_type_size)
|
||||||
?(seed_nonce_revelation_tip = Constants_repr.default.seed_nonce_revelation_tip)
|
?(seed_nonce_revelation_tip = Constants_repr.default.seed_nonce_revelation_tip)
|
||||||
@ -280,7 +279,6 @@ let genesis
|
|||||||
hard_gas_limit_per_block ;
|
hard_gas_limit_per_block ;
|
||||||
proof_of_work_threshold ;
|
proof_of_work_threshold ;
|
||||||
dictator_pubkey ;
|
dictator_pubkey ;
|
||||||
max_operation_data_length ;
|
|
||||||
tokens_per_roll ;
|
tokens_per_roll ;
|
||||||
michelson_maximum_type_size ;
|
michelson_maximum_type_size ;
|
||||||
seed_nonce_revelation_tip ;
|
seed_nonce_revelation_tip ;
|
||||||
|
@ -72,7 +72,6 @@ val genesis:
|
|||||||
?hard_gas_limit_per_block:Z.t ->
|
?hard_gas_limit_per_block:Z.t ->
|
||||||
?proof_of_work_threshold:int64 ->
|
?proof_of_work_threshold:int64 ->
|
||||||
?dictator_pubkey:public_key ->
|
?dictator_pubkey:public_key ->
|
||||||
?max_operation_data_length:int ->
|
|
||||||
?tokens_per_roll:Tez_repr.tez ->
|
?tokens_per_roll:Tez_repr.tez ->
|
||||||
?michelson_maximum_type_size:int ->
|
?michelson_maximum_type_size:int ->
|
||||||
?seed_nonce_revelation_tip:Tez_repr.tez ->
|
?seed_nonce_revelation_tip:Tez_repr.tez ->
|
||||||
|
@ -38,6 +38,7 @@ type operation = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let max_block_length = 42
|
let max_block_length = 42
|
||||||
|
let max_operation_data_length = 0
|
||||||
let validation_passes = []
|
let validation_passes = []
|
||||||
let acceptable_passes _op = []
|
let acceptable_passes _op = []
|
||||||
|
|
||||||
@ -114,8 +115,7 @@ let finalize_block ctxt =
|
|||||||
let message = Some (Format.asprintf "fitness <- %Ld" fitness) in
|
let message = Some (Format.asprintf "fitness <- %Ld" fitness) in
|
||||||
let fitness = Fitness.from_int64 fitness in
|
let fitness = Fitness.from_int64 fitness in
|
||||||
return ({ Updater.message ; context = ctxt.context ; fitness ;
|
return ({ Updater.message ; context = ctxt.context ; fitness ;
|
||||||
max_operations_ttl = 0 ; max_operation_data_length = 0 ;
|
max_operations_ttl = 0 ; last_allowed_fork_level = 0l ;
|
||||||
last_allowed_fork_level = 0l ;
|
|
||||||
}, ())
|
}, ())
|
||||||
|
|
||||||
let rpc_services = Services.rpc_services
|
let rpc_services = Services.rpc_services
|
||||||
@ -124,6 +124,5 @@ let init context block_header =
|
|||||||
return { Updater.message = None ; context ;
|
return { Updater.message = None ; context ;
|
||||||
fitness = block_header.Block_header.fitness ;
|
fitness = block_header.Block_header.fitness ;
|
||||||
max_operations_ttl = 0 ;
|
max_operations_ttl = 0 ;
|
||||||
max_operation_data_length = 0 ;
|
|
||||||
last_allowed_fork_level = block_header.level ;
|
last_allowed_fork_level = block_header.level ;
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,8 @@ let max_block_length =
|
|||||||
delay = 0L })
|
delay = 0L })
|
||||||
+ Signature.size
|
+ Signature.size
|
||||||
|
|
||||||
|
let max_operation_data_length = 0
|
||||||
|
|
||||||
let check_signature ctxt { shell ; protocol_data = { command ; signature } } =
|
let check_signature ctxt { shell ; protocol_data = { command ; signature } } =
|
||||||
let bytes = Data.Command.forge shell command in
|
let bytes = Data.Command.forge shell command in
|
||||||
Data.Pubkey.get_pubkey ctxt >>= fun public_key ->
|
Data.Pubkey.get_pubkey ctxt >>= fun public_key ->
|
||||||
@ -107,7 +109,6 @@ let prepare_application ctxt command level timestamp fitness =
|
|||||||
Updater.activate ctxt hash >>= fun ctxt ->
|
Updater.activate ctxt hash >>= fun ctxt ->
|
||||||
return { Updater.message ; context = ctxt ;
|
return { Updater.message ; context = ctxt ;
|
||||||
fitness ; max_operations_ttl = 0 ;
|
fitness ; max_operations_ttl = 0 ;
|
||||||
max_operation_data_length = 0 ;
|
|
||||||
last_allowed_fork_level = level ;
|
last_allowed_fork_level = level ;
|
||||||
}
|
}
|
||||||
| Activate_testchain { protocol = hash ; delay } ->
|
| Activate_testchain { protocol = hash ; delay } ->
|
||||||
@ -117,7 +118,6 @@ let prepare_application ctxt command level timestamp fitness =
|
|||||||
Updater.fork_test_chain ctxt ~protocol:hash ~expiration >>= fun ctxt ->
|
Updater.fork_test_chain ctxt ~protocol:hash ~expiration >>= fun ctxt ->
|
||||||
return { Updater.message ; context = ctxt ; fitness ;
|
return { Updater.message ; context = ctxt ; fitness ;
|
||||||
max_operations_ttl = 0 ;
|
max_operations_ttl = 0 ;
|
||||||
max_operation_data_length = 0 ;
|
|
||||||
last_allowed_fork_level = Int32.succ level ;
|
last_allowed_fork_level = Int32.succ level ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,7 +145,6 @@ let begin_construction
|
|||||||
(* Dummy result. *)
|
(* Dummy result. *)
|
||||||
return { Updater.message = None ; context = ctxt ;
|
return { Updater.message = None ; context = ctxt ;
|
||||||
fitness ; max_operations_ttl = 0 ;
|
fitness ; max_operations_ttl = 0 ;
|
||||||
max_operation_data_length = 0 ;
|
|
||||||
last_allowed_fork_level = 0l ;
|
last_allowed_fork_level = 0l ;
|
||||||
}
|
}
|
||||||
| Some { command ; _ }->
|
| Some { command ; _ }->
|
||||||
@ -183,6 +182,5 @@ let init ctxt block_header =
|
|||||||
return { Updater.message = None ; context = ctxt ;
|
return { Updater.message = None ; context = ctxt ;
|
||||||
fitness = block_header.Block_header.fitness ;
|
fitness = block_header.Block_header.fitness ;
|
||||||
max_operations_ttl = 0 ;
|
max_operations_ttl = 0 ;
|
||||||
max_operation_data_length = 0 ;
|
|
||||||
last_allowed_fork_level = block_header.level ;
|
last_allowed_fork_level = block_header.level ;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user