Skip to content

Commit 8df1d15

Browse files
authored
Improve gas cost estimation (#337)
1 parent 73e5711 commit 8df1d15

File tree

5 files changed

+14
-28
lines changed

5 files changed

+14
-28
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tesseract/evm/src/gas_oracle.rs

+4-22
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ pub async fn get_current_gas_cost_in_usd(
102102
chain: StateMachine,
103103
api_keys: &str,
104104
client: Arc<Provider<Http>>,
105-
gas_price_buffer: Option<u32>,
106105
) -> Result<GasBreakdown, Error> {
107106
let mut gas_price_cost = U256::zero();
108107
let mut gas_price = U256::zero();
@@ -288,11 +287,6 @@ pub async fn get_current_gas_cost_in_usd(
288287
ethers::utils::format_units(gas_price, "gwei").unwrap()
289288
);
290289

291-
let buffer = gas_price_buffer
292-
.map(|buffer| (U256::from(buffer) * gas_price) / U256::from(100u32))
293-
.unwrap_or_default();
294-
gas_price = gas_price + buffer;
295-
296290
Ok(GasBreakdown { gas_price, gas_price_cost: gas_price_cost.into(), unit_wei_cost: unit_wei })
297291
}
298292

@@ -423,7 +417,6 @@ mod test {
423417
StateMachine::Evm(SEPOLIA_CHAIN_ID),
424418
&ethereum_etherscan_api_key,
425419
client.clone(),
426-
None,
427420
)
428421
.await
429422
.unwrap();
@@ -446,7 +439,6 @@ mod test {
446439
StateMachine::Evm(SEPOLIA_CHAIN_ID),
447440
&ethereum_etherscan_api_key,
448441
client.clone(),
449-
None,
450442
)
451443
.await
452444
.unwrap();
@@ -469,7 +461,6 @@ mod test {
469461
StateMachine::Evm(POLYGON_TESTNET_CHAIN_ID),
470462
&ethereum_etherscan_api_key,
471463
client.clone(),
472-
None,
473464
)
474465
.await
475466
.unwrap();
@@ -486,14 +477,10 @@ mod test {
486477
let provider = Provider::<Http>::try_from(ethereum_rpc_uri).unwrap();
487478
let client = Arc::new(provider.clone());
488479

489-
let ethereum_gas_cost_in_usd = get_current_gas_cost_in_usd(
490-
StateMachine::Evm(GNOSIS_CHAIN_ID),
491-
"",
492-
client.clone(),
493-
None,
494-
)
495-
.await
496-
.unwrap();
480+
let ethereum_gas_cost_in_usd =
481+
get_current_gas_cost_in_usd(StateMachine::Evm(GNOSIS_CHAIN_ID), "", client.clone())
482+
.await
483+
.unwrap();
497484

498485
println!("Ethereum Gas Cost Gnosis Mainnet: {:?}", ethereum_gas_cost_in_usd);
499486
}
@@ -513,7 +500,6 @@ mod test {
513500
StateMachine::Evm(POLYGON_TESTNET_CHAIN_ID),
514501
&ethereum_etherscan_api_key,
515502
client.clone(),
516-
None,
517503
)
518504
.await
519505
.unwrap();
@@ -536,7 +522,6 @@ mod test {
536522
StateMachine::Evm(BSC_TESTNET_CHAIN_ID),
537523
&ethereum_etherscan_api_key,
538524
client.clone(),
539-
None,
540525
)
541526
.await
542527
.unwrap();
@@ -558,7 +543,6 @@ mod test {
558543
StateMachine::Evm(ARBITRUM_SEPOLIA_CHAIN_ID),
559544
&ethereum_etherscan_api_key,
560545
client.clone(),
561-
None,
562546
)
563547
.await
564548
.unwrap();
@@ -580,7 +564,6 @@ mod test {
580564
StateMachine::Evm(OPTIMISM_SEPOLIA_CHAIN_ID),
581565
&ethereum_etherscan_api_key,
582566
client.clone(),
583-
None,
584567
)
585568
.await
586569
.unwrap();
@@ -601,7 +584,6 @@ mod test {
601584
StateMachine::Evm(OPTIMISM_SEPOLIA_CHAIN_ID),
602585
&ethereum_etherscan_api_key,
603586
client.clone(),
604-
None,
605587
)
606588
.await
607589
.unwrap();

tesseract/evm/src/provider.rs

-1
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ impl IsmpProvider for EvmClient {
376376
self.state_machine,
377377
&self.config.etherscan_api_key.clone(),
378378
self.client.clone(),
379-
self.config.gas_price_buffer,
380379
)
381380
.await?;
382381
let mut gas_estimates = vec![];

tesseract/evm/src/tx.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ where
132132
client.state_machine,
133133
&client.config.etherscan_api_key.clone(),
134134
client.client.clone(),
135-
client.config.gas_price_buffer,
136135
)
137136
.await?
138137
.gas_price * 2; // for good measure
@@ -228,19 +227,25 @@ pub async fn generate_contract_calls(
228227
// Erigon does not support block overrides when tracing so we don't have the option of omiting
229228
// the gas price by overriding the base fee
230229
let set_gas_price = || !debug_trace || client.client_type.erigon();
231-
let gas_price = if set_gas_price() {
230+
let mut gas_price = if set_gas_price() {
232231
get_current_gas_cost_in_usd(
233232
client.state_machine,
234233
&client.config.etherscan_api_key.clone(),
235234
client.client.clone(),
236-
client.config.gas_price_buffer,
237235
)
238236
.await?
239237
.gas_price
240238
} else {
241239
Default::default()
242240
};
243241

242+
// Only use gas price buffer when submitting transactions
243+
if !debug_trace && client.config.gas_price_buffer.is_some() {
244+
let buffer = (U256::from(client.config.gas_price_buffer.unwrap_or_default()) * gas_price) /
245+
U256::from(100u32);
246+
gas_price = gas_price + buffer
247+
}
248+
244249
for message in messages {
245250
match message {
246251
Message::Consensus(msg) => {

tesseract/relayer/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "tesseract"
3-
version = "1.0.0"
3+
version = "1.0.1"
44
edition = "2021"
55
description = "Chain agnostic relayer implementation for Hyperbridge"
66
authors = ["Polytope Labs <[email protected]>"]

0 commit comments

Comments
 (0)