diff --git a/Cargo.lock b/Cargo.lock index c38bd39e..5173bfd1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -330,6 +330,12 @@ dependencies = [ "serde", ] +[[package]] +name = "build_const" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" + [[package]] name = "bumpalo" version = "3.9.1" @@ -1405,6 +1411,7 @@ dependencies = [ "sha2 0.9.9", "solang-parser", "svm-rs", + "svm-rs-builds", "tempfile", "thiserror", "tiny-keccak", @@ -3312,9 +3319,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.78" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085" +checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" dependencies = [ "itoa 1.0.1", "ryu", @@ -3576,7 +3583,7 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "svm-rs" version = "0.2.9" -source = "git+https://github.com/roynalnaruto/svm-rs#37d0095eeac73546c507b706c51e8f901541a7c1" +source = "git+https://github.com/roynalnaruto/svm-rs#496888fdcd9d2316a52020a09e281414755de3f8" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -3601,6 +3608,18 @@ dependencies = [ "url", ] +[[package]] +name = "svm-rs-builds" +version = "0.1.0" +source = "git+https://github.com/roynalnaruto/svm-rs#496888fdcd9d2316a52020a09e281414755de3f8" +dependencies = [ + "build_const", + "hex", + "semver", + "serde_json", + "svm-rs", +] + [[package]] name = "syn" version = "1.0.89" diff --git a/ethers-solc/Cargo.toml b/ethers-solc/Cargo.toml index 26e03d0f..c902b24f 100644 --- a/ethers-solc/Cargo.toml +++ b/ethers-solc/Cargo.toml @@ -44,6 +44,7 @@ home = "0.5.3" # SVM is not WASM compatible yet. # svm = { package = "svm-rs", default-features = false, version = "0.2.7", optional = true } svm = { package = "svm-rs", default-features = false, git = "https://github.com/roynalnaruto/svm-rs", optional = true, features = ["blocking"] } +svm-builds = { package = "svm-rs-builds", git = "https://github.com/roynalnaruto/svm-rs", optional = true} [target.'cfg(target_arch = "wasm32")'.dependencies] # NOTE: this enables wasm compatibility for getrandom indirectly @@ -69,17 +70,17 @@ harness = false [[test]] name = "project" path = "tests/project.rs" -required-features = ["async", "svm", "project-util"] +required-features = ["async", "svm", "svm-builds", "project-util"] [[test]] name = "mocked" path = "tests/mocked.rs" -required-features = ["async", "svm", "project-util"] +required-features = ["async", "svm", "svm-builds", "project-util"] [features] default = ["rustls"] async = ["tokio", "futures-util"] -full = ["async", "svm", "svm/blocking"] +full = ["async", "svm", "svm/blocking", "svm-builds"] # Utilities for creating and testing project workspaces project-util = ["tempfile", "fs_extra", "rand"] tests = [] diff --git a/ethers-solc/src/compile/mod.rs b/ethers-solc/src/compile/mod.rs index c7c4d136..46a36131 100644 --- a/ethers-solc/src/compile/mod.rs +++ b/ethers-solc/src/compile/mod.rs @@ -63,17 +63,19 @@ pub(crate) fn take_solc_installer_lock() -> std::sync::MutexGuard<'static, ()> { /// A list of upstream Solc releases, used to check which version /// we should download. -/// The boolean value marks whether there was an error. -#[cfg(all(feature = "svm"))] +/// The boolean value marks whether there was an error accessing the release list +#[cfg(all(feature = "svm", feature = "svm-builds"))] pub static RELEASES: once_cell::sync::Lazy<(svm::Releases, Vec, bool)> = - once_cell::sync::Lazy::new(|| match svm::blocking_all_releases(svm::platform()) { - Ok(releases) => { - let sorted_versions = releases.clone().into_versions(); - (releases, sorted_versions, true) - } - Err(err) => { - tracing::error!("{:?}", err); - (svm::Releases::default(), Vec::new(), false) + once_cell::sync::Lazy::new(|| { + match serde_json::from_str::(svm_builds::RELEASE_LIST_JSON) { + Ok(releases) => { + let sorted_versions = releases.clone().into_versions(); + (releases, sorted_versions, true) + } + Err(err) => { + tracing::error!("{:?}", err); + (svm::Releases::default(), Vec::new(), false) + } } });