From b781b1b6d4a878f73fb31da5509cf268b6fc7012 Mon Sep 17 00:00:00 2001 From: Suntzu Date: Sat, 26 Sep 2026 00:26:01 +0200 Subject: [PATCH] fix: set gas price explicitly when submitting votes Both deny_many implementations submitted votes without setting any fee field, so ethers filled in the EIP-1559 values using eip1559_default_estimator. That estimator returns a flat EIP1559_FEE_ESTIMATION_DEFAULT_PRIORITY_FEE of 3 gwei whenever the base fee is below 100 gwei, which on Arbitrum is always the case - the base fee there is around 0.02 gwei. This was harmless while Arbitrum discarded priority fees. Since 2026-09-23 the tip is actually charged, and the effective gas price on oracle votes went from 0.0200 to 3.0200 gwei, a 151x increase. Set the gas price explicitly, the way data_edge.rs already does, so the effective price stays at the base fee. --- availability-oracle/src/contract.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/availability-oracle/src/contract.rs b/availability-oracle/src/contract.rs index 3b7a023..4f1dfe0 100644 --- a/availability-oracle/src/contract.rs +++ b/availability-oracle/src/contract.rs @@ -119,7 +119,17 @@ impl StateManager for RewardsManagerContract { // Increase the estimated gas by 20% let increased_estimate = estimated_gas * U256::from(120) / U256::from(100); - tx.gas(increased_estimate).send().await?.await?; + // Set a legacy gas price explicitly. Left unset, ethers fills the + // EIP-1559 fields from its default estimator, which hardcodes a + // 3 gwei priority fee - roughly 150x the Arbitrum base fee. + let gas_price = self.contract.client().get_gas_price().await?; + let gas_price_with_buffer = gas_price * U256::from(120) / U256::from(100); + + tx.gas(increased_estimate) + .gas_price(gas_price_with_buffer) + .send() + .await? + .await?; METRICS.denied_subgraphs_total.inc_by(num_subgraphs); } @@ -156,7 +166,17 @@ impl StateManager for SubgraphAvailabilityManagerContract { // Increase the estimated gas by 20% let increased_estimate = estimated_gas * U256::from(120) / U256::from(100); - tx.gas(increased_estimate).send().await?.await?; + // Set a legacy gas price explicitly. Left unset, ethers fills the + // EIP-1559 fields from its default estimator, which hardcodes a + // 3 gwei priority fee - roughly 150x the Arbitrum base fee. + let gas_price = self.contract.client().get_gas_price().await?; + let gas_price_with_buffer = gas_price * U256::from(120) / U256::from(100); + + tx.gas(increased_estimate) + .gas_price(gas_price_with_buffer) + .send() + .await? + .await?; METRICS.denied_subgraphs_total.inc_by(num_subgraphs); }