Skip to content

Events: parameterize gas for events #1109

Closed
@raulk

Description

@raulk

The events implementation has introduced the following gas formula:

#[inline]
pub fn on_actor_event(&self, evt: &ActorEvent) -> GasCharge {
    let (mut indexed_entries, mut total_bytes) = (0, 0);
    for evt in evt.entries.iter() {
        indexed_entries += evt
            .flags
            .intersection(Flags::FLAG_INDEXED_KEY | Flags::FLAG_INDEXED_VALUE)
            .bits()
            .count_ones();
        total_bytes += evt.key.len() + evt.value.bytes().len();
    }

    GasCharge::new(
        "OnActorEvent",
        self.event_emit_base_cost + (self.event_per_entry_cost * evt.entries.len() as i64),
        (self.event_entry_index_cost * indexed_entries as i64)
            + (self.event_per_byte_cost * total_bytes as i64),
    )
}

In short:

  • event_emit_base_cost: base emission cost for an event.
  • event_per_byte_cost: variable cost per byte.
  • event_per_entry_cost: cost per event entry.
  • event_entry_index_cost: variable cost per indexed entry (should probably account for number of bytes indexed).

The goal of this issue is to find the right pricing. And, of course, to determine if we want to enhance or refine this model in any manner.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions