Skip to content

Commit cde2700

Browse files
committed
add gas
1 parent 168bbbe commit cde2700

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE request
2+
DROP COLUMN gas_used;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE request
2+
ADD COLUMN gas_used VARCHAR(100); -- U256 max value is 78 digits, so 100 is a safe upper bound

apps/fortuna/src/history.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ pub enum RequestEntryState {
2525
#[schema(example = "a905ab56567d31a7fda38ed819d97bc257f3ebe385fc5c72ce226d3bb855f0fe")]
2626
#[serde_as(as = "serde_with::hex::Hex")]
2727
provider_random_number: [u8; 32],
28+
/// The gas used for the reveal transaction in the smallest unit of the chain.
29+
/// For example, if the native currency is ETH, this will be in wei.
30+
#[schema(example = "567890", value_type = String)]
31+
gas_used: U256,
2832
},
2933
Failed {
3034
reason: String,
@@ -77,6 +81,7 @@ struct RequestRow {
7781
reveal_block_number: Option<i64>,
7882
reveal_tx_hash: Option<String>,
7983
provider_random_number: Option<String>,
84+
gas_used: Option<String>,
8085
info: Option<String>,
8186
}
8287

@@ -111,10 +116,16 @@ impl TryFrom<RequestRow> for RequestStatus {
111116
))?;
112117
let provider_random_number: [u8; 32] =
113118
hex::FromHex::from_hex(provider_random_number)?;
119+
let gas_used = row.gas_used.ok_or(anyhow::anyhow!(
120+
"Gas used is missing for completed request"
121+
))?;
122+
let gas_used = U256::from_dec_str(&gas_used)
123+
.map_err(|_| anyhow::anyhow!("Failed to parse gas used"))?;
114124
RequestEntryState::Completed {
115125
reveal_block_number,
116126
reveal_tx_hash,
117127
provider_random_number,
128+
gas_used,
118129
}
119130
}
120131
"Failed" => RequestEntryState::Failed {
@@ -220,22 +231,31 @@ impl History {
220231
reveal_block_number,
221232
reveal_tx_hash,
222233
provider_random_number,
234+
gas_used
223235
} => {
224236
let reveal_block_number = reveal_block_number as i64;
225237
let reveal_tx_hash: String = reveal_tx_hash.encode_hex();
226238
let provider_random_number: String = provider_random_number.encode_hex();
227-
sqlx::query!("UPDATE request SET state = ?, last_updated_at = ?, reveal_block_number = ?, reveal_tx_hash = ?, provider_random_number = ? WHERE chain_id = ? AND sequence = ? AND provider = ? AND request_tx_hash = ?",
239+
let gas_used: String = gas_used.to_string();
240+
let result = sqlx::query!("UPDATE request SET state = ?, last_updated_at = ?, reveal_block_number = ?, reveal_tx_hash = ?, provider_random_number =?, gas_used = ? WHERE chain_id = ? AND sequence = ? AND provider = ? AND request_tx_hash = ?",
228241
"Completed",
229242
new_status.last_updated_at,
230243
reveal_block_number,
231244
reveal_tx_hash,
232245
provider_random_number,
246+
gas_used,
233247
chain_id,
234248
sequence,
235249
provider,
236250
request_tx_hash)
237251
.execute(pool)
238-
.await
252+
.await;
253+
if let Ok(query_result) = &result {
254+
if query_result.rows_affected() == 0 {
255+
tracing::error!("Failed to update request status to complete: No rows affected. Chain ID: {}, Sequence: {}, Request TX Hash: {}", chain_id, sequence, request_tx_hash);
256+
}
257+
}
258+
result
239259
}
240260
RequestEntryState::Failed {
241261
reason,
@@ -422,6 +442,7 @@ mod test {
422442
reveal_block_number: 1,
423443
reveal_tx_hash,
424444
provider_random_number: [40; 32],
445+
gas_used: U256::from(567890),
425446
};
426447
History::update_request_status(&history.pool, status.clone()).await;
427448

@@ -472,6 +493,7 @@ mod test {
472493
reveal_block_number: 1,
473494
reveal_tx_hash,
474495
provider_random_number: [40; 32],
496+
gas_used: U256::from(567890),
475497
};
476498
History::update_request_status(&history.pool, status.clone()).await;
477499
let mut failed_status = status.clone();

apps/fortuna/src/keeper/process_event.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ pub async fn process_event_with_backoff(
9292
reveal_block_number: result.receipt.block_number.unwrap_or_default().as_u64(),
9393
reveal_tx_hash: result.receipt.transaction_hash,
9494
provider_random_number: provider_revelation,
95+
gas_used: result.receipt.gas_used.unwrap_or_default(),
9596
};
9697
history.add(&status);
9798
tracing::info!(

0 commit comments

Comments
 (0)