Skip to content

Commit 66b5b67

Browse files
committed
fix: add headers + auto-blake detection
1 parent a5f84ba commit 66b5b67

File tree

4 files changed

+61
-13
lines changed

4 files changed

+61
-13
lines changed

bin/sozo/src/commands/declare.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,17 @@ impl DeclareArgs {
4848
return Err(anyhow!("At least one Sierra artifact path must be provided."));
4949
}
5050

51-
// TODO: allow cutom headers form the CLI.
52-
let headers = None;
53-
let account = get_account_from_env(account, &starknet, headers).await?;
51+
let account = get_account_from_env(account, &starknet).await?;
5452

55-
// TODO: maybe add the detection from the provider URL too.
56-
let use_blake2s = starknet.use_blake2s_casm_class_hash;
53+
let use_blake2s = if let Some(rpc_url) = starknet.rpc_url {
54+
if rpc_url.to_string().contains("sepolia") || rpc_url.to_string().contains("testnet") {
55+
true
56+
} else {
57+
starknet.use_blake2s_casm_class_hash
58+
}
59+
} else {
60+
starknet.use_blake2s_casm_class_hash
61+
};
5762

5863
let txn_config: TxnConfig = transaction.try_into()?;
5964

bin/sozo/src/commands/deploy.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,7 @@ impl DeployArgs {
7070

7171
let txn_config: TxnConfig = transaction.try_into()?;
7272

73-
// TODO: allow custom headers from the CLI.
74-
let headers = None;
75-
let account = get_account_from_env(account, &starknet, headers).await?;
73+
let account = get_account_from_env(account, &starknet).await?;
7674

7775
ui.title("Deploy contract");
7876
ui.step("Deploying contract via UDC");

bin/sozo/src/commands/options/starknet.rs

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
use std::fmt::{Display, Formatter};
2+
use std::str::FromStr;
13
use std::time::Duration;
24

3-
use anyhow::Result;
5+
use anyhow::{anyhow, Result};
46
use clap::Args;
57
use dojo_utils::env::STARKNET_RPC_URL_ENV_VAR;
68
use dojo_world::config::Environment;
@@ -26,6 +28,12 @@ pub struct StarknetOptions {
2628
Otherwise, use this flag to manually set it.")]
2729
#[arg(global = true)]
2830
pub use_blake2s_casm_class_hash: bool,
31+
32+
#[arg(long = "rpc-header")]
33+
#[arg(value_name = "HEADER")]
34+
#[arg(help = "Custom header(s) to add to Starknet RPC requests. Format: Name:Value")]
35+
#[arg(global = true)]
36+
pub rpc_headers: Vec<RpcHeader>,
2937
}
3038

3139
impl StarknetOptions {
@@ -54,6 +62,10 @@ impl StarknetOptions {
5462
}
5563
}
5664

65+
for header in &self.rpc_headers {
66+
transport.add_header(header.name.clone(), header.value.clone());
67+
}
68+
5769
Ok((JsonRpcClient::new(transport), url.to_string()))
5870
}
5971

@@ -70,9 +82,13 @@ impl StarknetOptions {
7082
client,
7183
);
7284

85+
for header in &self.rpc_headers {
86+
transport.add_header(header.name.clone(), header.value.clone());
87+
}
88+
7389
if let Some(headers) = headers {
74-
for header in headers.iter() {
75-
transport.add_header(header.0.clone(), header.1.clone());
90+
for header in headers.into_iter() {
91+
transport.add_header(header.0, header.1);
7692
}
7793
}
7894

@@ -97,6 +113,36 @@ impl StarknetOptions {
97113
}
98114
}
99115

116+
#[derive(Clone, Debug)]
117+
pub struct RpcHeader {
118+
pub name: String,
119+
pub value: String,
120+
}
121+
122+
impl FromStr for RpcHeader {
123+
type Err = anyhow::Error;
124+
125+
fn from_str(s: &str) -> Result<Self, Self::Err> {
126+
let (name, value) =
127+
s.split_once(':').ok_or_else(|| anyhow!("Invalid header format. Use `Name:Value`"))?;
128+
129+
let name = name.trim();
130+
let value = value.trim();
131+
132+
if name.is_empty() || value.is_empty() {
133+
return Err(anyhow!("Header name and value must be non-empty."));
134+
}
135+
136+
Ok(RpcHeader { name: name.to_string(), value: value.to_string() })
137+
}
138+
}
139+
140+
impl Display for RpcHeader {
141+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
142+
write!(f, "{}: {}", self.name, self.value)
143+
}
144+
}
145+
100146
#[cfg(test)]
101147
mod tests {
102148
use clap::Parser;

bin/sozo/src/utils.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,8 @@ pub async fn get_world_diff_and_account(
190190
pub async fn get_account_from_env(
191191
account: AccountOptions,
192192
starknet: &StarknetOptions,
193-
headers: Option<Vec<(String, String)>>,
194193
) -> Result<SozoAccount<JsonRpcClient<HttpTransport>>> {
195-
let provider = starknet.provider_from_url(headers)?;
194+
let provider = starknet.provider_from_url(None)?;
196195

197196
account.account(provider, None, starknet, &HashMap::new()).await
198197
}

0 commit comments

Comments
 (0)