Skip to content

Commit 94c802d

Browse files
authored
Devel (#237)
* add internal_bearer_token to config * cargo upgrade && cargo update * 1.43.91 * explicit eth_blockNumber * simpler Debug impl * 1.43.92 * save the db less often * 1.43.93 * skip biased semaphore * 1.43.94
1 parent 4969c63 commit 94c802d

File tree

19 files changed

+232
-166
lines changed

19 files changed

+232
-166
lines changed

Cargo.lock

Lines changed: 95 additions & 109 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

entities/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ path = "src/mod.rs"
1010
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1111

1212
[dependencies]
13-
ethers = { version = "2.0.10", default-features = false }
13+
ethers = { version = "2.0.11", default-features = false }
1414
sea-orm = "0.12.6"
15-
serde = "1.0.192"
15+
serde = "1.0.193"
1616
ulid = "1.1.0"

latency/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ edition = "2021"
77

88
[dependencies]
99
portable-atomic = { version = "1.5.1", features = ["float"] }
10-
serde = { version = "1.0.192", features = [] }
10+
serde = { version = "1.0.193", features = [] }
1111
tokio = { version = "1.34.0", features = ["full"] }
1212
tracing = "0.1.40"
1313
watermill = "0.1.1"

payment-contracts/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ edition = "2021"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[build-dependencies]
9-
ethers = { version = "2.0.10", default-features = false }
9+
ethers = { version = "2.0.11", default-features = false }
1010
glob = "0.3.1"
1111

1212
[dependencies]
13-
ethers = { version = "2.0.10", default-features = false }
13+
ethers = { version = "2.0.11", default-features = false }

web3_proxy/Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "web3_proxy"
3-
version = "1.43.90"
3+
version = "1.43.94"
44
edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -49,15 +49,15 @@ bytes = "1.5.0"
4949
chrono = { version = "0.4.31" }
5050
derivative = "2.2.0"
5151
derive_more = { version = "0.99.17", features = ["nightly"] }
52-
ethers = { version = "2.0.10", default-features = false, features = ["rustls", "ws"] }
52+
ethers = { version = "2.0.11", default-features = false, features = ["rustls", "ws"] }
5353
fdlimit = "0.3.0"
5454
fstrings = "0.2"
5555
futures = { version = "0.3.29" }
5656
futures-util = "0.3.29"
5757
glob = "0.3.1"
5858
handlebars = "4.5.0"
5959
hashbrown = { version = "0.14.2", features = ["serde", "nightly"] }
60-
hdrhistogram = "7.5.3"
60+
hdrhistogram = "7.5.4"
6161
hostname = "0.3.1"
6262
http = "0.2.11"
6363
hyper = { version = "0.14.27", features = ["full", "nightly"] }
@@ -75,10 +75,10 @@ pagerduty-rs = { version = "0.1.6", default-features = false, features = ["async
7575
parking_lot = { version = "0.12.1", features = ["arc_lock", "nightly"] }
7676
rdkafka = { version = "0.36.0", default-features = false, features = ["tokio", "tracing"], optional = true }
7777
reqwest = { version = "0.11.22", default-features = false, features = ["json", "rustls"] }
78-
rust_decimal = { version = "1.33.0" }
78+
rust_decimal = { version = "1.33.1" }
7979
sentry = { version = "0.31.8", default-features = false, features = ["anyhow", "backtrace", "contexts", "panic", "reqwest", "rustls", "serde_json", "tracing"] }
8080
sentry-tracing = "0.31.8"
81-
serde = { version = "1.0.192" }
81+
serde = { version = "1.0.193" }
8282
serde-inline-default = "0.1.1"
8383
serde_json = { version = "1.0.108", default-features = false, features = ["raw_value"] }
8484
serde_prometheus = "0.2.4"
@@ -93,7 +93,7 @@ tower-service = "0.3.2"
9393
tracing = "0.1"
9494
ulid = { version = "1.1.0", features = ["rand", "uuid", "serde"] }
9595
url = { version = "2.4.1" }
96-
uuid = { version = "1.5.0", default-features = false }
96+
uuid = { version = "1.6.1", default-features = false }
9797

9898
# TODO: why doesn't this work in dev-dependencies. i think because of how we split web3_proxy and web3_proxy_cli. im not sure that is even helping anymore
9999
test-log = { version = "0.2.13", default-features = false, features = ["trace"] }

web3_proxy/src/app/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ impl App {
307307
let stat_sender = if let Some(spawned_stat_buffer) = StatBuffer::try_spawn(
308308
BILLING_PERIOD_SECONDS,
309309
top_config.app.chain_id,
310-
30,
310+
120,
311311
top_config.app.influxdb_bucket.clone(),
312312
influxdb_client.clone(),
313313
rpc_secret_key_cache.clone(),

web3_proxy/src/block_number.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,11 @@ impl CacheMode {
355355
// TODO: make sure re-orgs work properly!
356356
Ok(Self::SuccessForever)
357357
}
358+
"eth_blockNumber" => Ok(Self::Standard {
359+
block_needed: head_block.into(),
360+
cache_block: head_block.into(),
361+
cache_errors: true,
362+
}),
358363
"eth_gasPrice" => Ok(Self::Never),
359364
"eth_getBlockByHash" => {
360365
// TODO: double check that any node can serve this

web3_proxy/src/config.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ pub struct AppConfig {
150150
/// percentage to increase eth_estimateGas results. 100 == 100%
151151
pub gas_increase_percent: Option<U256>,
152152

153+
/// bearer token for internal requests. keep this secret
154+
pub internal_bearer_token: Option<String>,
155+
153156
/// Restrict user registration.
154157
/// None = no code needed
155158
pub invite_code: Option<String>,

web3_proxy/src/frontend/admin.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ pub async fn admin_increase_balance(
5656
TypedHeader(Authorization(bearer)): TypedHeader<Authorization<Bearer>>,
5757
Json(payload): Json<AdminIncreaseBalancePost>,
5858
) -> Web3ProxyResponse {
59-
let caller = app.bearer_is_authorized(bearer).await?;
59+
let caller = app
60+
.bearer_is_authorized(bearer)
61+
.await?
62+
.ok_or(Web3ProxyError::InvalidUserKey)?;
6063

6164
// Establish connections
6265
let db_conn = global_db_conn()?;

web3_proxy/src/frontend/authorization.rs

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -551,16 +551,18 @@ impl App {
551551
})
552552
.await;
553553

554-
let semaphore_permit = tokio::select! {
555-
biased;
554+
let semaphore_permit = semaphore.acquire_owned().await?;
556555

557-
p = semaphore.acquire_owned() => {
558-
p
559-
}
560-
p = self.bonus_ip_concurrency.clone().acquire_owned() => {
561-
p
562-
}
563-
}?;
556+
// let semaphore_permit = tokio::select! {
557+
// biased;
558+
559+
// p = semaphore.acquire_owned() => {
560+
// p
561+
// }
562+
// p = self.bonus_ip_concurrency.clone().acquire_owned() => {
563+
// p
564+
// }
565+
// }?;
564566

565567
Ok(Some(semaphore_permit))
566568
} else {
@@ -590,19 +592,21 @@ impl App {
590592
})
591593
.await;
592594

593-
let semaphore_permit = tokio::select! {
594-
biased;
595+
let semaphore_permit = semaphore.acquire_owned().await?;
595596

596-
p = semaphore.acquire_owned() => {
597-
p
598-
}
599-
p = self.bonus_user_concurrency.clone().acquire_owned() => {
600-
p
601-
}
602-
p = self.bonus_ip_concurrency.clone().acquire_owned() => {
603-
p
604-
}
605-
}?;
597+
// let semaphore_permit = tokio::select! {
598+
// biased;
599+
600+
// p = semaphore.acquire_owned() => {
601+
// p
602+
// }
603+
// p = self.bonus_user_concurrency.clone().acquire_owned() => {
604+
// p
605+
// }
606+
// p = self.bonus_ip_concurrency.clone().acquire_owned() => {
607+
// p
608+
// }
609+
// }?;
606610

607611
Ok(Some(semaphore_permit))
608612
} else {
@@ -614,7 +618,16 @@ impl App {
614618
/// Verify that the given bearer token and address are allowed to take the specified action.
615619
/// This includes concurrent request limiting.
616620
/// keep the semaphore alive until the user's request is entirely complete
617-
pub async fn bearer_is_authorized(&self, bearer: Bearer) -> Web3ProxyResult<user::Model> {
621+
pub async fn bearer_is_authorized(
622+
&self,
623+
bearer: Bearer,
624+
) -> Web3ProxyResult<Option<user::Model>> {
625+
if let Some(internal_token) = &self.config.internal_bearer_token {
626+
if internal_token == bearer.token() {
627+
return Ok(None);
628+
}
629+
}
630+
618631
// get the user id for this bearer token
619632
let user_bearer_token = UserBearerToken::try_from(bearer)?;
620633

@@ -631,7 +644,7 @@ impl App {
631644
.web3_context("fetching user from db by bearer token")?
632645
.web3_context("unknown bearer token")?;
633646

634-
Ok(user)
647+
Ok(Some(user))
635648
}
636649

637650
pub async fn rate_limit_login(

0 commit comments

Comments
 (0)