diff --git a/src/proto_alpha/lib_protocol/sc_rollup_costs.ml b/src/proto_alpha/lib_protocol/sc_rollup_costs.ml index 570a42142116aa9fcc6a9edf3280b0aae3b5b798..88d2f3facd5d5247b8368b37e222f793d5dd8e30 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_costs.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_costs.ml @@ -55,12 +55,12 @@ end (* We assume that the gas cost of adding messages [[ m_1; ... ; m_n]] at level [l] is linear in the sum of lengths of the messages, and it is logarithmic - in [l]. That is, [cost_add_external_messages([m_1; .. ; m_n], l)] = + in [l]. That is, [cost_add_serialized_messages([m_1; .. ; m_n], l)] = `n * cost_add_message_base + cost_add_message_per_bytes * \sum_{i=1}^n length(m_i) + cost_add_inbox_per_level * l`. *) -let cost_add_external_messages ~num_messages ~total_messages_size l = +let cost_add_serialized_messages ~num_messages ~total_messages_size l = let open S_syntax in let log_level = if Int32.equal l Int32.zero then Saturation_repr.safe_int 0 diff --git a/src/proto_alpha/lib_protocol/sc_rollup_costs.mli b/src/proto_alpha/lib_protocol/sc_rollup_costs.mli index 3e75d0e43a1fb4ba96bc5a693c26540d449a3907..72d850c0d6405b76d786c2faba61b0ab541b5550 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_costs.mli +++ b/src/proto_alpha/lib_protocol/sc_rollup_costs.mli @@ -41,11 +41,11 @@ end val is_valid_parameters_ty_cost : ty_size:'a Saturation_repr.t -> Saturation_repr.may_saturate Saturation_repr.t -(** [cost_add_external_messages ~num_messages ~total_messages_length level] +(** [cost_add_serialized_messages ~num_messages ~total_messages_length level] returns the cost of adding [num_messages] with total messages size [total_messages_size] to a sc-rollup inbox at level [level]. This function is used internally in the [Sc_rollup_storage] module. *) -val cost_add_external_messages : +val cost_add_serialized_messages : num_messages:int -> total_messages_size:int -> int32 -> Gas_limit_repr.cost (** [cost_serialize_internal_inbox_message internal_inbox_message] is the cost diff --git a/src/proto_alpha/lib_protocol/sc_rollup_inbox_storage.ml b/src/proto_alpha/lib_protocol/sc_rollup_inbox_storage.ml index 0e20cfb8c211821b2ee7a6e0fa28877fc3e4babe..3b21d84ed353bdb06f7bef5c053ba332e2f143d7 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_inbox_storage.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_inbox_storage.ml @@ -119,13 +119,13 @@ let add_messages ctxt rollup messages = let*? current_messages, ctxt = Sc_rollup_in_memory_inbox.current_messages ctxt rollup in - let gas_cost_add_external_messages = - Sc_rollup_costs.cost_add_external_messages + let cost_add_serialized_messages = + Sc_rollup_costs.cost_add_serialized_messages ~num_messages ~total_messages_size levels in - let*? ctxt = Raw_context.consume_gas ctxt gas_cost_add_external_messages in + let*? ctxt = Raw_context.consume_gas ctxt cost_add_serialized_messages in (* Notice that the protocol is forgetful: it throws away the inbox history. On the contrary, the history is stored by the rollup @@ -153,12 +153,17 @@ let add_external_messages ctxt rollup external_messages = let add_internal_message ctxt rollup ~payload ~sender ~source = let open Lwt_result_syntax in - (* TODO: #2951 - Charge gas for serializing the internal message. - *) + let internal_message = + {Sc_rollup_inbox_message_repr.payload; sender; source} + in + (* Pay gas for serializing an internal message. *) + let*? ctxt = + Raw_context.consume_gas + ctxt + (Sc_rollup_costs.cost_serialize_internal_inbox_message internal_message) + in let*? message = - Sc_rollup_inbox_message_repr.( - to_bytes @@ Internal {payload; sender; source}) + Sc_rollup_inbox_message_repr.(to_bytes @@ Internal internal_message) in add_messages ctxt rollup [message]