@@ -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