Skip to content

Commit 444d0f3

Browse files
committed
gas calculation refactors
1 parent 16729a8 commit 444d0f3

File tree

1 file changed

+31
-15
lines changed

1 file changed

+31
-15
lines changed

src/tasks/submit.rs

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ use signet_zenith::{
2727
use std::time::{Instant, UNIX_EPOCH};
2828
use tokio::{sync::mpsc, task::JoinHandle};
2929

30+
// NB: Consider pulling the below gas parameters out into env vars
31+
/// Base maximum fee per gas to use as a starting point for retry bumps
32+
pub const BASE_FEE_PER_GAS: u128 = 10_000_000_000; // 10 Gwei
33+
/// Base max priority fee per gas to use as a starting point for retry bumps
34+
pub const BASE_MAX_PRIORITY_FEE_PER_GAS: u128 = 2_000_000_000; // 2 Gwei
35+
/// Base maximum fee per blob gas to use as a starting point for retry bumps
36+
pub const BASE_MAX_FEE_PER_BLOB_GAS: u128 = 1_000_000_000; // 1 Gwei
37+
3038
macro_rules! spawn_provider_send {
3139
($provider:expr, $tx:expr) => {
3240
{
@@ -88,7 +96,7 @@ impl SubmitTask {
8896
})
8997
}
9098

91-
/// Builds blob transaction from the provided header and signature values
99+
/// Builds blob transaction and encodes the sidecar for it from the provided header and signature values
92100
fn build_blob_tx(
93101
&self,
94102
fills: Vec<FillPermit2>,
@@ -187,17 +195,23 @@ impl SubmitTask {
187195
) -> Result<TransactionRequest, eyre::Error> {
188196
// TODO: ENG-1082 Implement fills
189197
let fills = vec![];
198+
199+
// manually retrieve nonce
200+
let nonce =
201+
self.provider().get_transaction_count(self.provider().default_signer_address()).await?;
202+
debug!(nonce, "assigned nonce");
203+
190204
// Extract the signature components from the response
191205
let (v, r, s) = extract_signature_components(&resp.sig);
192206

193207
// Calculate gas limits based on retry attempts
194208
let (max_fee_per_gas, max_priority_fee_per_gas, max_fee_per_blob_gas) =
195-
calculate_gas_limits(retry_count);
196-
197-
// manually retrieve nonce // TODO: Maybe this should be done in Env task and passed through elsewhere
198-
let nonce =
199-
self.provider().get_transaction_count(self.provider().default_signer_address()).await?;
200-
debug!(nonce, "assigned nonce");
209+
calculate_gas_limits(
210+
retry_count,
211+
BASE_FEE_PER_GAS,
212+
BASE_MAX_PRIORITY_FEE_PER_GAS,
213+
BASE_MAX_FEE_PER_BLOB_GAS,
214+
);
201215

202216
// Build the block header
203217
let header: BlockHeader = BlockHeader {
@@ -429,18 +443,20 @@ impl SubmitTask {
429443
}
430444
}
431445

432-
fn calculate_gas_limits(retry_count: usize) -> (u128, u128, u128) {
433-
let base_fee_per_gas: u128 = 100_000_000_000;
434-
let base_priority_fee_per_gas: u128 = 2_000_000_000;
435-
let base_fee_per_blob_gas: u128 = 1_000_000_000;
436-
446+
// Returns gas parameters based on retry counts. This uses
447+
fn calculate_gas_limits(
448+
retry_count: usize,
449+
base_max_fee_per_gas: u128,
450+
base_max_priority_fee_per_gas: u128,
451+
base_max_fee_per_blob_gas: u128,
452+
) -> (u128, u128, u128) {
437453
let bump_multiplier = 1150u128.pow(retry_count as u32); // 15% bump
438454
let blob_bump_multiplier = 2000u128.pow(retry_count as u32); // 100% bump (double each time) for blob gas
439455
let bump_divisor = 1000u128.pow(retry_count as u32);
440456

441-
let max_fee_per_gas = base_fee_per_gas * bump_multiplier / bump_divisor;
442-
let max_priority_fee_per_gas = base_priority_fee_per_gas * bump_multiplier / bump_divisor;
443-
let max_fee_per_blob_gas = base_fee_per_blob_gas * blob_bump_multiplier / bump_divisor;
457+
let max_fee_per_gas = base_max_fee_per_gas * bump_multiplier / bump_divisor;
458+
let max_priority_fee_per_gas = base_max_priority_fee_per_gas * bump_multiplier / bump_divisor;
459+
let max_fee_per_blob_gas = base_max_fee_per_blob_gas * blob_bump_multiplier / bump_divisor;
444460

445461
debug!(
446462
retry_count,

0 commit comments

Comments
 (0)