Skip to content

Commit 11c5b22

Browse files
avilagaston9PatStiles
authored andcommitted
refactor: separate batcher retry constants properly (#1408)
1 parent 58affcf commit 11c5b22

File tree

3 files changed

+62
-56
lines changed

3 files changed

+62
-56
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: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ 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, PERCENTAGE_DIVIDER,
27-
RESPOND_TO_TASK_FEE_LIMIT_PERCENTAGE_MULTIPLIER,
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,
28+
PERCENTAGE_DIVIDER, RESPOND_TO_TASK_FEE_LIMIT_PERCENTAGE_MULTIPLIER,
2829
};
2930
use aligned_sdk::core::types::{
3031
ClientMessage, GetNonceResponseMessage, NoncedVerificationData, ProofInvalidReason,
@@ -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())
@@ -921,7 +922,7 @@ impl Batcher {
921922
}
922923

923924
/// Gets the user nonce from Ethereum.
924-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
925+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
925926
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
926927
async fn get_user_nonce_from_ethereum(
927928
&self,
@@ -935,10 +936,10 @@ impl Batcher {
935936
addr,
936937
)
937938
},
938-
DEFAULT_MIN_RETRY_DELAY,
939-
DEFAULT_BACKOFF_FACTOR,
940-
DEFAULT_MAX_RETRIES,
941-
DEFAULT_MAX_RETRY_DELAY,
939+
ETHEREUM_CALL_MIN_RETRY_DELAY,
940+
ETHEREUM_CALL_BACKOFF_FACTOR,
941+
ETHEREUM_CALL_MAX_RETRIES,
942+
ETHEREUM_CALL_MAX_RETRY_DELAY,
942943
)
943944
.await
944945
}
@@ -1379,7 +1380,7 @@ impl Batcher {
13791380
}
13801381

13811382
/// Sends a `create_new_task` transaction to Ethereum and waits for a maximum of 3 blocks for the receipt.
1382-
/// Retries up to `DEFAULT_MAX_RETRIES` times using exponential backoff on recoverable errors while trying to send the transaction:
1383+
/// Retries up to `ETHEREUM_CALL_MAX_RETRIES` times using exponential backoff on recoverable errors while trying to send the transaction:
13831384
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
13841385
/// `ReceiptNotFoundError` is treated as non-recoverable, and the transaction will be canceled using `cancel_create_new_task_tx` in that case.
13851386
async fn create_new_task(
@@ -1401,10 +1402,10 @@ impl Batcher {
14011402
&self.payment_service_fallback,
14021403
)
14031404
},
1404-
DEFAULT_MIN_RETRY_DELAY,
1405-
DEFAULT_BACKOFF_FACTOR,
1406-
DEFAULT_MAX_RETRIES,
1407-
DEFAULT_MAX_RETRY_DELAY,
1405+
ETHEREUM_CALL_MIN_RETRY_DELAY,
1406+
ETHEREUM_CALL_BACKOFF_FACTOR,
1407+
ETHEREUM_CALL_MAX_RETRIES,
1408+
ETHEREUM_CALL_MAX_RETRY_DELAY,
14081409
)
14091410
.await;
14101411
match result {
@@ -1466,10 +1467,10 @@ impl Batcher {
14661467
)
14671468
.await
14681469
},
1469-
DEFAULT_MIN_RETRY_DELAY,
1470-
DEFAULT_BACKOFF_FACTOR,
1471-
CANCEL_TRANSACTION_MAX_RETRIES,
1472-
DEFAULT_MAX_RETRY_DELAY,
1470+
BUMP_MIN_RETRY_DELAY,
1471+
BUMP_BACKOFF_FACTOR,
1472+
BUMP_MAX_RETRIES,
1473+
BUMP_MAX_RETRY_DELAY,
14731474
)
14741475
.await
14751476
{
@@ -1563,7 +1564,7 @@ impl Batcher {
15631564
}
15641565

15651566
/// Gets the balance of user with address `addr` from Ethereum.
1566-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
1567+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
15671568
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs)
15681569
/// Returns `None` if the balance couldn't be returned
15691570
/// FIXME: This should return a `Result` instead.
@@ -1576,17 +1577,17 @@ impl Batcher {
15761577
addr,
15771578
)
15781579
},
1579-
DEFAULT_MIN_RETRY_DELAY,
1580-
DEFAULT_BACKOFF_FACTOR,
1581-
DEFAULT_MAX_RETRIES,
1582-
DEFAULT_MAX_RETRY_DELAY,
1580+
ETHEREUM_CALL_MIN_RETRY_DELAY,
1581+
ETHEREUM_CALL_BACKOFF_FACTOR,
1582+
ETHEREUM_CALL_MAX_RETRIES,
1583+
ETHEREUM_CALL_MAX_RETRY_DELAY,
15831584
)
15841585
.await
15851586
.ok()
15861587
}
15871588

15881589
/// Checks if the user's balance is unlocked for a given address.
1589-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
1590+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
15901591
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
15911592
/// Returns `false` if an error occurs during the retries.
15921593
async fn user_balance_is_unlocked(&self, addr: &Address) -> bool {
@@ -1598,10 +1599,10 @@ impl Batcher {
15981599
addr,
15991600
)
16001601
},
1601-
DEFAULT_MIN_RETRY_DELAY,
1602-
DEFAULT_BACKOFF_FACTOR,
1603-
DEFAULT_MAX_RETRIES,
1604-
DEFAULT_MAX_RETRY_DELAY,
1602+
ETHEREUM_CALL_MIN_RETRY_DELAY,
1603+
ETHEREUM_CALL_BACKOFF_FACTOR,
1604+
ETHEREUM_CALL_MAX_RETRIES,
1605+
ETHEREUM_CALL_MAX_RETRY_DELAY,
16051606
)
16061607
.await
16071608
else {
@@ -1612,7 +1613,7 @@ impl Batcher {
16121613
}
16131614

16141615
/// Uploads the batch to s3.
1615-
/// Retries on recoverable errors using exponential backoff up to `DEFAULT_MAX_RETRIES` times:
1616+
/// Retries on recoverable errors using exponential backoff up to `ETHEREUM_CALL_MAX_RETRIES` times:
16161617
/// (0,5 secs - 1 secs - 2 secs - 4 secs - 8 secs).
16171618
async fn upload_batch_to_s3(
16181619
&self,
@@ -1628,10 +1629,10 @@ impl Batcher {
16281629
&self.s3_bucket_name,
16291630
)
16301631
},
1631-
DEFAULT_MIN_RETRY_DELAY,
1632-
DEFAULT_BACKOFF_FACTOR,
1633-
DEFAULT_MAX_RETRIES,
1634-
DEFAULT_MAX_RETRY_DELAY,
1632+
ETHEREUM_CALL_MIN_RETRY_DELAY,
1633+
ETHEREUM_CALL_BACKOFF_FACTOR,
1634+
ETHEREUM_CALL_MAX_RETRIES,
1635+
ETHEREUM_CALL_MAX_RETRY_DELAY,
16351636
)
16361637
.await
16371638
.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)