Closed
Description
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.