Skip to content

Commit 8dbe201

Browse files
Use alchemy instead of blast as free provider (#3883)
<!-- Reference any GitHub issues resolved by this PR --> Closes # ## Introduced changes Change blast to alchemy as rpc provider in sncast, due to blast termination. ## Checklist <!-- Make sure all of these are complete --> - [ ] Linked relevant issue - [ ] Updated relevant documentation - [ ] Added relevant tests - [ ] Performed self-review of the code - [ ] Added changes to `CHANGELOG.md`
1 parent e411614 commit 8dbe201

File tree

11 files changed

+56
-21
lines changed

11 files changed

+56
-21
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ concurrency:
1212
group: ${{ github.head_ref || github.run_id }}
1313
cancel-in-progress: true
1414

15+
env:
16+
ALCHEMY_API_KEY: ${{ secrets.ALCHEMY_API_KEY }}
17+
1518
jobs:
1619
test-forge-unit:
1720
name: Test Forge / Unit Tests

crates/forge/src/new.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use include_dir::{Dir, DirEntry, include_dir};
66
use indoc::formatdoc;
77
use scarb_api::{ScarbCommand, ensure_scarb_available};
88
use semver::Version;
9-
use shared::consts::FREE_RPC_PROVIDER_URL;
9+
use shared::consts::free_rpc_provider_url;
1010
use std::env;
1111
use std::fs::{self, OpenOptions};
1212
use std::io::Write;
@@ -160,7 +160,7 @@ fn create_snfoundry_manifest(path: &PathBuf) -> Result<()> {
160160
# block-explorer = "StarkScan" # Block explorer service used to display links to transaction details
161161
# show-explorer-links = true # Print links pointing to pages with transaction details in the chosen block explorer
162162
"#,
163-
default_rpc_url = FREE_RPC_PROVIDER_URL,
163+
default_rpc_url = free_rpc_provider_url(),
164164
},
165165
)?;
166166

@@ -309,7 +309,7 @@ fn add_fork_config(document: &mut DocumentMut) -> Result<()> {
309309

310310
let mut fork_table = Table::new();
311311
fork_table.insert("name", Item::Value(Value::from("SEPOLIA_LATEST")));
312-
fork_table.insert("url", Item::Value(Value::from(FREE_RPC_PROVIDER_URL)));
312+
fork_table.insert("url", Item::Value(Value::from(free_rpc_provider_url())));
313313

314314
let mut block_id_table = Table::new();
315315
block_id_table.insert("tag", Item::Value(Value::from("latest")));

crates/forge/tests/e2e/new.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use forge::scarb::config::SCARB_MANIFEST_TEMPLATE_CONTENT;
77
use indoc::{formatdoc, indoc};
88
use regex::Regex;
99
use scarb_api::ScarbCommand;
10-
use shared::consts::FREE_RPC_PROVIDER_URL;
10+
use shared::consts::free_rpc_provider_url;
1111
use shared::test_utils::output_assert::assert_stdout_contains;
1212
use snapbox::assert_matches;
1313
use snapbox::cmd::Command as SnapboxCommand;
@@ -183,12 +183,13 @@ fn get_expected_manifest_content(template: &Template, validate_snforge_std: bool
183183

184184
let target_contract_entry = "[[target.starknet-contract]]\nsierra = true";
185185

186+
let free_rpc_provider_url = free_rpc_provider_url();
186187
let fork_config = if let Template::Erc20Contract = template {
187188
&formatdoc!(
188189
r#"
189190
[[tool.snforge.fork]]
190191
name = "SEPOLIA_LATEST"
191-
url = "{FREE_RPC_PROVIDER_URL}"
192+
url = "{free_rpc_provider_url}"
192193
block_id = {{ tag = "latest" }}
193194
"#
194195
)

crates/shared/src/consts.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
pub const EXPECTED_RPC_VERSION: &str = "0.9.0";
22
pub const RPC_URL_VERSION: &str = "v0_9";
33
pub const SNFORGE_TEST_FILTER: &str = "SNFORGE_TEST_FILTER";
4-
pub const FREE_RPC_PROVIDER_URL: &str = "https://starknet-sepolia.public.blastapi.io/rpc/v0_9";
4+
const ALCHEMY_API_KEY: &str = env!("ALCHEMY_API_KEY");
5+
6+
#[must_use]
7+
pub fn free_rpc_provider_url() -> String {
8+
format!(
9+
"https://starknet-sepolia.g.alchemy.com/starknet/version/rpc/{RPC_URL_VERSION}/{ALCHEMY_API_KEY}"
10+
)
11+
}

crates/sncast/src/helpers/rpc.rs

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ use foundry_ui::UI;
77
use shared::consts::RPC_URL_VERSION;
88
use shared::verify_and_warn_if_incompatible_rpc_version;
99
use starknet::providers::{JsonRpcClient, jsonrpc::HttpTransport};
10+
use std::env;
11+
12+
const ALCHEMY_API_KEY: &str = env!("ALCHEMY_API_KEY");
1013

1114
#[derive(Args, Clone, Debug, Default)]
1215
#[group(required = false, multiple = false)]
@@ -57,13 +60,35 @@ impl RpcArgs {
5760
}
5861

5962
pub enum FreeProvider {
60-
Blast,
63+
Alchemy,
6164
}
6265

6366
impl FreeProvider {
6467
#[must_use]
6568
pub fn semi_random() -> Self {
66-
Self::Blast
69+
Self::Alchemy
70+
}
71+
72+
#[must_use]
73+
pub fn mainnet_rpc(&self) -> String {
74+
match self {
75+
FreeProvider::Alchemy => {
76+
format!(
77+
"https://starknet-mainnet.g.alchemy.com/starknet/version/rpc/{RPC_URL_VERSION}/{ALCHEMY_API_KEY}"
78+
)
79+
}
80+
}
81+
}
82+
83+
#[must_use]
84+
pub fn sepolia_rpc(&self) -> String {
85+
match self {
86+
FreeProvider::Alchemy => {
87+
format!(
88+
"https://starknet-sepolia.g.alchemy.com/starknet/version/rpc/{RPC_URL_VERSION}/{ALCHEMY_API_KEY}"
89+
)
90+
}
91+
}
6792
}
6893
}
6994

@@ -76,12 +101,12 @@ impl Network {
76101
}
77102
}
78103

79-
fn free_mainnet_rpc(_provider: &FreeProvider) -> String {
80-
format!("https://starknet-mainnet.public.blastapi.io/rpc/{RPC_URL_VERSION}")
104+
fn free_mainnet_rpc(provider: &FreeProvider) -> String {
105+
provider.mainnet_rpc()
81106
}
82107

83-
fn free_sepolia_rpc(_provider: &FreeProvider) -> String {
84-
format!("https://starknet-sepolia.public.blastapi.io/rpc/{RPC_URL_VERSION}")
108+
fn free_sepolia_rpc(provider: &FreeProvider) -> String {
109+
provider.sepolia_rpc()
85110
}
86111

87112
async fn devnet_rpc(_provider: &FreeProvider) -> Result<String> {
@@ -111,14 +136,14 @@ mod tests {
111136

112137
#[tokio::test]
113138
async fn test_mainnet_url_happy_case() {
114-
let provider = get_provider(&Network::free_mainnet_rpc(&FreeProvider::Blast)).unwrap();
139+
let provider = get_provider(&Network::free_mainnet_rpc(&FreeProvider::Alchemy)).unwrap();
115140
let spec_version = provider.spec_version().await.unwrap();
116141
assert!(is_expected_version(&Version::parse(&spec_version).unwrap()));
117142
}
118143

119144
#[tokio::test]
120145
async fn test_sepolia_url_happy_case() {
121-
let provider = get_provider(&Network::free_sepolia_rpc(&FreeProvider::Blast)).unwrap();
146+
let provider = get_provider(&Network::free_sepolia_rpc(&FreeProvider::Alchemy)).unwrap();
122147
let spec_version = provider.spec_version().await.unwrap();
123148
assert!(is_expected_version(&Version::parse(&spec_version).unwrap()));
124149
}

docs/listings/fork_testing/Scarb.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ test = "snforge test"
1818

1919
[[tool.snforge.fork]]
2020
name = "SEPOLIA_LATEST"
21-
url = "https://starknet-sepolia.public.blastapi.io/rpc/v0_7"
21+
url = "<YOUR_RPC_URL>"
2222
block_id.tag = "latest"

docs/listings/fork_testing/tests/explicit/block_hash.cairo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const CONTRACT_ADDRESS: felt252 =
55

66
#[test]
77
#[fork(
8-
url: "https://starknet-sepolia.public.blastapi.io/rpc/v0_7",
8+
url: "<YOUR_RPC_URL>",
99
block_hash: 0x0690f8d584b52c2798d76b3346217a516778abee9b1bd8e400beb4f05dd9a4e7,
1010
)]
1111
fn test_using_forked_state() {

docs/listings/fork_testing/tests/explicit/block_number.cairo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const CONTRACT_ADDRESS: felt252 =
66
0x0522dc7cbe288037382a02569af5a4169531053d284193623948eac8dd051716;
77

88
#[test]
9-
#[fork(url: "https://starknet-sepolia.public.blastapi.io/rpc/v0_7", block_number: 77864)]
9+
#[fork(url: "<YOUR_RPC_URL>", block_number: 77864)]
1010
fn test_using_forked_state() {
1111
// instantiate the dispatcher
1212
let dispatcher = IPokemonGalleryDispatcher {

docs/listings/fork_testing/tests/explicit/block_tag.cairo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const CONTRACT_ADDRESS: felt252 =
44
0x0522dc7cbe288037382a02569af5a4169531053d284193623948eac8dd051716;
55

66
#[test]
7-
#[fork(url: "https://starknet-sepolia.public.blastapi.io/rpc/v0_7", block_tag: latest)]
7+
#[fork(url: "<YOUR_RPC_URL>", block_tag: latest)]
88
fn test_using_forked_state() {
99
let dispatcher = IPokemonGalleryDispatcher {
1010
contract_address: CONTRACT_ADDRESS.try_into().unwrap(),

docs/listings/map3/snfoundry.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[sncast.default]
22
url = "http://127.0.0.1:5050/rpc"
33
# [sncast.default]
4-
# url = "https://starknet-sepolia.public.blastapi.io/rpc/v0_7"
4+
# url = "<YOUR_RPC_URL>"

0 commit comments

Comments
 (0)