arbos/l2_pricing/
gas_constraint.rs1use revm::Database;
2
3use arb_storage::{Storage, StorageBackedUint64};
4
5const TARGET_OFFSET: u64 = 0;
6const ADJUSTMENT_WINDOW_OFFSET: u64 = 1;
7const BACKLOG_OFFSET: u64 = 2;
8
9pub struct GasConstraint<D> {
11 target: StorageBackedUint64<D>,
12 adjustment_window: StorageBackedUint64<D>,
13 backlog: StorageBackedUint64<D>,
14}
15
16pub fn open_gas_constraint<D: Database>(sto: Storage<D>) -> GasConstraint<D> {
17 let state = sto.state_ptr();
18 let base_key = sto.base_key();
19 GasConstraint {
20 target: StorageBackedUint64::new(state, base_key, TARGET_OFFSET),
21 adjustment_window: StorageBackedUint64::new(state, base_key, ADJUSTMENT_WINDOW_OFFSET),
22 backlog: StorageBackedUint64::new(state, base_key, BACKLOG_OFFSET),
23 }
24}
25
26impl<D: Database> GasConstraint<D> {
27 pub fn target(&self) -> Result<u64, ()> {
28 self.target.get()
29 }
30
31 pub fn set_target(&self, val: u64) -> Result<(), ()> {
32 self.target.set(val)
33 }
34
35 pub fn adjustment_window(&self) -> Result<u64, ()> {
36 self.adjustment_window.get()
37 }
38
39 pub fn set_adjustment_window(&self, val: u64) -> Result<(), ()> {
40 self.adjustment_window.set(val)
41 }
42
43 pub fn backlog(&self) -> Result<u64, ()> {
44 self.backlog.get()
45 }
46
47 pub fn set_backlog(&self, val: u64) -> Result<(), ()> {
48 self.backlog.set(val)
49 }
50
51 pub fn clear(&self) -> Result<(), ()> {
52 self.target.set(0)?;
53 self.adjustment_window.set(0)?;
54 self.backlog.set(0)
55 }
56}