Skip to content

Commit 5505e82

Browse files
authored
refactor: separate batcher retry constants properly (#1408)
1 parent c99d3a3 commit 5505e82

File tree

3 files changed

+61
-55
lines changed

3 files changed

+61
-55
lines changed

batcher/aligned-batcher/src/eth/utils.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ use crate::{
99
},
1010
};
1111
use aligned_sdk::core::constants::{
12-
DEFAULT_BACKOFF_FACTOR, DEFAULT_MAX_RETRIES, DEFAULT_MAX_RETRY_DELAY, DEFAULT_MIN_RETRY_DELAY,
13-
GAS_PRICE_INCREMENT_PERCENTAGE_PER_ITERATION, OVERRIDE_GAS_PRICE_PERCENTAGE_MULTIPLIER,
14-
PERCENTAGE_DIVIDER,
12+
ETHEREUM_CALL_BACKOFF_FACTOR, ETHEREUM_CALL_MAX_RETRIES, ETHEREUM_CALL_MAX_RETRY_DELAY,
13+
ETHEREUM_CALL_MIN_RETRY_DELAY, GAS_PRICE_INCREMENT_PERCENTAGE_PER_ITERATION,
14+
OVERRIDE_GAS_PRICE_PERCENTAGE_MULTIPLIER, PERCENTAGE_DIVIDER,
1515
};
1616
use ethers::prelude::*;
1717
use ethers::providers::{Http, Provider};
@@ -62,7 +62,7 @@ pub fn calculate_bumped_gas_price(
6262
}
6363

6464
/// Gets the current nonce from Ethereum.
65-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
65+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
6666
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
6767
pub async fn get_current_nonce(
6868
eth_http_provider: &Provider<Http>,
@@ -71,10 +71,10 @@ pub async fn get_current_nonce(
7171
) -> Result<U256, ProviderError> {
7272
retry_function(
7373
|| get_current_nonce_retryable(eth_http_provider, eth_http_provider_fallback, addr),
74-
DEFAULT_MIN_RETRY_DELAY,
75-
DEFAULT_BACKOFF_FACTOR,
76-
DEFAULT_MAX_RETRIES,
77-
DEFAULT_MAX_RETRY_DELAY,
74+
ETHEREUM_CALL_MIN_RETRY_DELAY,
75+
ETHEREUM_CALL_BACKOFF_FACTOR,
76+
ETHEREUM_CALL_MAX_RETRIES,
77+
ETHEREUM_CALL_MAX_RETRY_DELAY,
7878
)
7979
.await
8080
.map_err(|e| {
@@ -84,18 +84,18 @@ pub async fn get_current_nonce(
8484
}
8585

8686
/// Gets the current gas price from Ethereum.
87-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
87+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
8888
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
8989
pub async fn get_gas_price(
9090
eth_http_provider: &Provider<Http>,
9191
eth_http_provider_fallback: &Provider<Http>,
9292
) -> Result<U256, ProviderError> {
9393
retry_function(
9494
|| get_gas_price_retryable(eth_http_provider, eth_http_provider_fallback),
95-
DEFAULT_MIN_RETRY_DELAY,
96-
DEFAULT_BACKOFF_FACTOR,
97-
DEFAULT_MAX_RETRIES,
98-
DEFAULT_MAX_RETRY_DELAY,
95+
ETHEREUM_CALL_MIN_RETRY_DELAY,
96+
ETHEREUM_CALL_BACKOFF_FACTOR,
97+
ETHEREUM_CALL_MAX_RETRIES,
98+
ETHEREUM_CALL_MAX_RETRY_DELAY,
9999
)
100100
.await
101101
.map_err(|e| {

batcher/aligned-batcher/src/lib.rs

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ use std::net::SocketAddr;
2020
use std::sync::Arc;
2121

2222
use aligned_sdk::core::constants::{
23-
ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF, AGGREGATOR_GAS_COST, CANCEL_TRANSACTION_MAX_RETRIES,
24-
CONSTANT_GAS_COST, DEFAULT_AGGREGATOR_FEE_PERCENTAGE_MULTIPLIER, DEFAULT_BACKOFF_FACTOR,
25-
DEFAULT_MAX_FEE_PER_PROOF, DEFAULT_MAX_RETRIES, DEFAULT_MAX_RETRY_DELAY,
26-
DEFAULT_MIN_RETRY_DELAY, GAS_PRICE_PERCENTAGE_MULTIPLIER, MIN_FEE_PER_PROOF,
23+
ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF, AGGREGATOR_GAS_COST, BUMP_BACKOFF_FACTOR,
24+
BUMP_MAX_RETRIES, BUMP_MAX_RETRY_DELAY, BUMP_MIN_RETRY_DELAY, CONSTANT_GAS_COST,
25+
DEFAULT_AGGREGATOR_FEE_PERCENTAGE_MULTIPLIER, DEFAULT_MAX_FEE_PER_PROOF,
26+
ETHEREUM_CALL_BACKOFF_FACTOR, ETHEREUM_CALL_MAX_RETRIES, ETHEREUM_CALL_MAX_RETRY_DELAY,
27+
ETHEREUM_CALL_MIN_RETRY_DELAY, GAS_PRICE_PERCENTAGE_MULTIPLIER, MIN_FEE_PER_PROOF,
2728
PERCENTAGE_DIVIDER, RESPOND_TO_TASK_FEE_LIMIT_PERCENTAGE_MULTIPLIER,
2829
};
2930
use aligned_sdk::core::types::{
@@ -280,10 +281,10 @@ impl Batcher {
280281
let app = self.clone();
281282
async move { app.listen_new_blocks_retryable().await }
282283
},
283-
DEFAULT_MIN_RETRY_DELAY,
284-
DEFAULT_BACKOFF_FACTOR,
284+
ETHEREUM_CALL_MIN_RETRY_DELAY,
285+
ETHEREUM_CALL_BACKOFF_FACTOR,
285286
LISTEN_NEW_BLOCKS_MAX_TIMES,
286-
DEFAULT_MAX_RETRY_DELAY,
287+
ETHEREUM_CALL_MAX_RETRY_DELAY,
287288
)
288289
.await
289290
.map_err(|e| e.inner())
@@ -908,7 +909,7 @@ impl Batcher {
908909
}
909910

910911
/// Gets the user nonce from Ethereum.
911-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
912+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
912913
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
913914
async fn get_user_nonce_from_ethereum(
914915
&self,
@@ -922,10 +923,10 @@ impl Batcher {
922923
addr,
923924
)
924925
},
925-
DEFAULT_MIN_RETRY_DELAY,
926-
DEFAULT_BACKOFF_FACTOR,
927-
DEFAULT_MAX_RETRIES,
928-
DEFAULT_MAX_RETRY_DELAY,
926+
ETHEREUM_CALL_MIN_RETRY_DELAY,
927+
ETHEREUM_CALL_BACKOFF_FACTOR,
928+
ETHEREUM_CALL_MAX_RETRIES,
929+
ETHEREUM_CALL_MAX_RETRY_DELAY,
929930
)
930931
.await
931932
}
@@ -1366,7 +1367,7 @@ impl Batcher {
13661367
}
13671368

13681369
/// Sends a `create_new_task` transaction to Ethereum and waits for a maximum of 3 blocks for the receipt.
1369-
/// Retries up to `DEFAULT_MAX_RETRIES` times using exponential backoff on recoverable errors while trying to send the transaction:
1370+
/// Retries up to `ETHEREUM_CALL_MAX_RETRIES` times using exponential backoff on recoverable errors while trying to send the transaction:
13701371
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
13711372
/// `ReceiptNotFoundError` is treated as non-recoverable, and the transaction will be canceled using `cancel_create_new_task_tx` in that case.
13721373
async fn create_new_task(
@@ -1388,10 +1389,10 @@ impl Batcher {
13881389
&self.payment_service_fallback,
13891390
)
13901391
},
1391-
DEFAULT_MIN_RETRY_DELAY,
1392-
DEFAULT_BACKOFF_FACTOR,
1393-
DEFAULT_MAX_RETRIES,
1394-
DEFAULT_MAX_RETRY_DELAY,
1392+
ETHEREUM_CALL_MIN_RETRY_DELAY,
1393+
ETHEREUM_CALL_BACKOFF_FACTOR,
1394+
ETHEREUM_CALL_MAX_RETRIES,
1395+
ETHEREUM_CALL_MAX_RETRY_DELAY,
13951396
)
13961397
.await;
13971398
match result {
@@ -1453,10 +1454,10 @@ impl Batcher {
14531454
)
14541455
.await
14551456
},
1456-
DEFAULT_MIN_RETRY_DELAY,
1457-
DEFAULT_BACKOFF_FACTOR,
1458-
CANCEL_TRANSACTION_MAX_RETRIES,
1459-
DEFAULT_MAX_RETRY_DELAY,
1457+
BUMP_MIN_RETRY_DELAY,
1458+
BUMP_BACKOFF_FACTOR,
1459+
BUMP_MAX_RETRIES,
1460+
BUMP_MAX_RETRY_DELAY,
14601461
)
14611462
.await
14621463
{
@@ -1550,7 +1551,7 @@ impl Batcher {
15501551
}
15511552

15521553
/// Gets the balance of user with address `addr` from Ethereum.
1553-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
1554+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
15541555
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs)
15551556
/// Returns `None` if the balance couldn't be returned
15561557
/// FIXME: This should return a `Result` instead.
@@ -1563,17 +1564,17 @@ impl Batcher {
15631564
addr,
15641565
)
15651566
},
1566-
DEFAULT_MIN_RETRY_DELAY,
1567-
DEFAULT_BACKOFF_FACTOR,
1568-
DEFAULT_MAX_RETRIES,
1569-
DEFAULT_MAX_RETRY_DELAY,
1567+
ETHEREUM_CALL_MIN_RETRY_DELAY,
1568+
ETHEREUM_CALL_BACKOFF_FACTOR,
1569+
ETHEREUM_CALL_MAX_RETRIES,
1570+
ETHEREUM_CALL_MAX_RETRY_DELAY,
15701571
)
15711572
.await
15721573
.ok()
15731574
}
15741575

15751576
/// Checks if the user's balance is unlocked for a given address.
1576-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
1577+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
15771578
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
15781579
/// Returns `false` if an error occurs during the retries.
15791580
async fn user_balance_is_unlocked(&self, addr: &Address) -> bool {
@@ -1585,10 +1586,10 @@ impl Batcher {
15851586
addr,
15861587
)
15871588
},
1588-
DEFAULT_MIN_RETRY_DELAY,
1589-
DEFAULT_BACKOFF_FACTOR,
1590-
DEFAULT_MAX_RETRIES,
1591-
DEFAULT_MAX_RETRY_DELAY,
1589+
ETHEREUM_CALL_MIN_RETRY_DELAY,
1590+
ETHEREUM_CALL_BACKOFF_FACTOR,
1591+
ETHEREUM_CALL_MAX_RETRIES,
1592+
ETHEREUM_CALL_MAX_RETRY_DELAY,
15921593
)
15931594
.await
15941595
else {
@@ -1599,7 +1600,7 @@ impl Batcher {
15991600
}
16001601

16011602
/// Uploads the batch to s3.
1602-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
1603+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
16031604
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
16041605
async fn upload_batch_to_s3(
16051606
&self,
@@ -1615,10 +1616,10 @@ impl Batcher {
16151616
&self.s3_bucket_name,
16161617
)
16171618
},
1618-
DEFAULT_MIN_RETRY_DELAY,
1619-
DEFAULT_BACKOFF_FACTOR,
1620-
DEFAULT_MAX_RETRIES,
1621-
DEFAULT_MAX_RETRY_DELAY,
1619+
ETHEREUM_CALL_MIN_RETRY_DELAY,
1620+
ETHEREUM_CALL_BACKOFF_FACTOR,
1621+
ETHEREUM_CALL_MAX_RETRIES,
1622+
ETHEREUM_CALL_MAX_RETRY_DELAY,
16221623
)
16231624
.await
16241625
.map_err(|e| BatcherError::BatchUploadError(e.to_string()))

batcher/aligned-sdk/src/core/constants.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/// Batcher ///
22
pub const GAS_PRICE_INCREMENT_PERCENTAGE_PER_ITERATION: usize = 5;
3-
pub const CANCEL_TRANSACTION_MAX_RETRIES: usize = 33; // ~ 1 day
43
pub const AGGREGATOR_GAS_COST: u128 = 400_000;
54
pub const BATCHER_SUBMISSION_BASE_GAS_COST: u128 = 125_000;
65
pub const ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF: u128 = 13_000;
@@ -27,8 +26,14 @@ pub const MAX_FEE_BATCH_PROOF_NUMBER: usize = 32;
2726
/// This corresponds to the number of proofs to compute for a default max_fee.
2827
pub const MAX_FEE_DEFAULT_PROOF_NUMBER: usize = 10;
2928

30-
/// retry
31-
pub const DEFAULT_MIN_RETRY_DELAY: u64 = 500; // milliseconds
32-
pub const DEFAULT_MAX_RETRIES: usize = 5;
33-
pub const DEFAULT_BACKOFF_FACTOR: f32 = 2.0;
34-
pub const DEFAULT_MAX_RETRY_DELAY: u64 = 3600; // seconds
29+
/// Ethereum calls retry constants
30+
pub const ETHEREUM_CALL_MIN_RETRY_DELAY: u64 = 500; // milliseconds
31+
pub const ETHEREUM_CALL_MAX_RETRIES: usize = 5;
32+
pub const ETHEREUM_CALL_BACKOFF_FACTOR: f32 = 2.0;
33+
pub const ETHEREUM_CALL_MAX_RETRY_DELAY: u64 = 3600; // seconds
34+
35+
/// Ethereum transaction retry constants
36+
pub const BUMP_MIN_RETRY_DELAY: u64 = 500; // milliseconds
37+
pub const BUMP_MAX_RETRIES: usize = 33; // ~ 1 day
38+
pub const BUMP_BACKOFF_FACTOR: f32 = 2.0;
39+
pub const BUMP_MAX_RETRY_DELAY: u64 = 3600; // seconds

0 commit comments

Comments
 (0)