Skip to content

Commit 578ddd0

Browse files
committed
refactor: ♻️ use struct instead of tuple for transaction costs
1 parent 275c7bd commit 578ddd0

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

src/standard/gasometer/mod.rs

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ impl GasometerState {
7979
Ok(())
8080
}
8181

82+
/// Record real and floor costs of a transaction.
83+
pub fn records_transaction_cost(&mut self, cost: TransactionCost) -> Result<(), ExitError> {
84+
self.record_gas64(cost.real)?;
85+
self.floor_gas = cost.floor;
86+
Ok(())
87+
}
88+
8289
/// Set memory gas usage.
8390
pub fn set_memory_gas(&mut self, memory_cost: u64) -> Result<(), ExitError> {
8491
let all_gas_cost = self.used_gas.checked_add(memory_cost);
@@ -120,10 +127,9 @@ impl GasometerState {
120127
};
121128

122129
let mut s = Self::new(gas_limit, false);
123-
let (transaction_cost, floor_cost) = TransactionCost::call(data, access_list).cost(config);
130+
let cost = Transaction::call(data, access_list).cost(config);
124131

125-
s.record_gas64(transaction_cost)?;
126-
s.floor_gas = floor_cost;
132+
s.records_transaction_cost(cost)?;
127133
Ok(s)
128134
}
129135

@@ -141,11 +147,9 @@ impl GasometerState {
141147
};
142148

143149
let mut s = Self::new(gas_limit, false);
144-
let (transaction_cost, floor_cost) =
145-
TransactionCost::create(code, access_list).cost(config);
150+
let cost = Transaction::create(code, access_list).cost(config);
146151

147-
s.record_gas64(transaction_cost)?;
148-
s.floor_gas = floor_cost;
152+
s.records_transaction_cost(cost)?;
149153
Ok(s)
150154
}
151155

@@ -923,7 +927,7 @@ impl MemoryCost {
923927

924928
/// Transaction cost.
925929
#[derive(Debug, Clone, Copy)]
926-
enum TransactionCost {
930+
enum Transaction {
927931
/// Call transaction cost.
928932
Call {
929933
/// Length of zeros in transaction data.
@@ -950,27 +954,32 @@ enum TransactionCost {
950954
},
951955
}
952956

953-
impl TransactionCost {
954-
pub fn call(data: &[u8], access_list: &[(H160, Vec<H256>)]) -> TransactionCost {
957+
pub struct TransactionCost {
958+
real: u64,
959+
floor: u64,
960+
}
961+
962+
impl Transaction {
963+
pub fn call(data: &[u8], access_list: &[(H160, Vec<H256>)]) -> Transaction {
955964
let zero_data_len = data.iter().filter(|v| **v == 0).count();
956965
let non_zero_data_len = data.len() - zero_data_len;
957966
let (access_list_address_len, access_list_storage_len) = count_access_list(access_list);
958967

959-
TransactionCost::Call {
968+
Transaction::Call {
960969
zero_data_len,
961970
non_zero_data_len,
962971
access_list_address_len,
963972
access_list_storage_len,
964973
}
965974
}
966975

967-
pub fn create(data: &[u8], access_list: &[(H160, Vec<H256>)]) -> TransactionCost {
976+
pub fn create(data: &[u8], access_list: &[(H160, Vec<H256>)]) -> Transaction {
968977
let zero_data_len = data.iter().filter(|v| **v == 0).count();
969978
let non_zero_data_len = data.len() - zero_data_len;
970979
let (access_list_address_len, access_list_storage_len) = count_access_list(access_list);
971980
let initcode_cost = init_code_cost(data.len());
972981

973-
TransactionCost::Create {
982+
Transaction::Create {
974983
zero_data_len,
975984
non_zero_data_len,
976985
access_list_address_len,
@@ -979,9 +988,9 @@ impl TransactionCost {
979988
}
980989
}
981990

982-
pub fn cost(&self, config: &Config) -> (u64, u64) {
991+
pub fn cost(&self, config: &Config) -> TransactionCost {
983992
match self {
984-
TransactionCost::Call {
993+
Transaction::Call {
985994
zero_data_len,
986995
non_zero_data_len,
987996
access_list_address_len,
@@ -997,9 +1006,9 @@ impl TransactionCost {
9971006
+ *zero_data_len as u64 * config.gas_floor_transaction_zero_data()
9981007
+ *non_zero_data_len as u64 * config.gas_floor_transaction_non_zero_data();
9991008

1000-
(cost, floor)
1009+
TransactionCost { real: cost, floor }
10011010
}
1002-
TransactionCost::Create {
1011+
Transaction::Create {
10031012
zero_data_len,
10041013
non_zero_data_len,
10051014
access_list_address_len,
@@ -1020,7 +1029,7 @@ impl TransactionCost {
10201029
+ *zero_data_len as u64 * config.gas_floor_transaction_zero_data()
10211030
+ *non_zero_data_len as u64 * config.gas_floor_transaction_non_zero_data();
10221031

1023-
(cost, floor)
1032+
TransactionCost { real: cost, floor }
10241033
}
10251034
}
10261035
}

0 commit comments

Comments
 (0)