En utilisant les limites de mainnet:
let test_inbox_max_number_of_messages_per_level () =
let* block, (account1, account2) =
context_init
~hard_gas_limit_per_block:Gas.Arith.(integral_of_int_exn 2_600_000)
~hard_gas_limit_per_operation:Gas.Arith.(integral_of_int_exn 1_040_000)
Context.T2
in
let* block, _rollup = sc_originate block account1 "unit" in
let _max_number_of_messages_per_level =
Constants.sc_rollup_max_number_of_messages_per_level
in
let* incr = Incremental.begin_construction block in
(* This just one message below the limit *)
let messages = List.repeat 400_000 "foo" in
let* op =
Op.sc_rollup_add_messages ~gas_limit:Max (I incr) account1 messages
in
let* incr = Incremental.add_operation ~check_size:false incr op in
let messages = List.repeat 395_000 "foo" in
let* op =
Op.sc_rollup_add_messages ~gas_limit:Max (I incr) account2 messages
in
let* incr = Incremental.add_operation ~check_size:false incr op in
let* _b = Incremental.finalize_block incr in
return_unit
L'ajout de seulement quelques messages après 795_000
fait dépasser la limite
en gas du block. On a donc au maximum ~= 800_000
messages par block, pas
loin du 1M.
(Peut être refaire les tests avec message = "x"
, pour avoir le coût minimal de hash)
On a vu que la preuve de 800k à 1M fait ~= 7Kb.
Nombres de blocks par jour: 4 * 60 * 24 = 5760
1_000_000 / 5760 = 173
Il faut 173 jours de retard pour atteindre 1M, on peut donc dire que la condition
taille opération tezos > preuve inbox + preuve message + preuve read_input
est
respecter tant que preuve read_input < 32000 - (7000 + 7000); preuve read_input < 18000