Skip to content

Blazingly fast, modular and contributor friendly Solidity compiler, written in Rust

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

paradigmxyz/solar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

solar

Crates.io Downloads MIT License Apache-2.0 License Actions Status Telegram Chat

Blazingly fast, modular and contributor friendly Solidity compiler, written in Rust.

Solar cover

Features and Goals

Caution

Solar is under active development and is not yet feature complete. Use it to speed up your development workflows and tooling. Please do not use it in production environments.

  • ⚡ Instant compiles and low memory usage
  • 🔍 Expressive and useful diagnostics
  • 🧩 Modular, library-based architecture
  • 💻 Simple and hackable code base
  • 🔄 Compatibility with the latest Solidity language breaking version (0.8.*)

Terminal screenshot showing Solar is 40x faster than solc at generating ABI using hyperfine

Getting started

Solar is available through a command-line interface, or as a Rust library.

Library usage

You can add Solar to your Rust project by adding the following to your Cargo.toml:

[dependencies]
solar = { version = "0.1.0", package = "solar-compiler" }

Or through the CLI:

cargo add solar-compiler --rename solar

You can see examples of how to use Solar as a library in the examples directory.

Binary usage

Pre-built binaries are available for macOS, Linux and Windows on the releases page and can be installed with the following commands:

  • On macOS and Linux:
    curl -LsSf https://paradigm.xyz/solar/install.sh | sh
  • On Windows:
    powershell -c "irm https://paradigm.xyz/solar/install.ps1 | iex"
  • For a specific version:
    curl -LsSf https://paradigm.xyz/solar/v0.1.0/install.sh | sh
    powershell -c "irm https://paradigm.xyz/solar/v0.1.0/install.ps1 | iex"

You can also build Solar from source:

  • From crates.io:
    cargo install solar-compiler --locked
  • From GitHub:
    cargo install --git https://github.com/paradigmxyz/solar --locked
  • From a Git checkout:
    git clone https://github.com/paradigmxyz/solar
    cd solar
    cargo install --locked --path crates/solar

Once installed, check out the available options:

solar -h

Here's a few examples:

# Compile a single file and emit ABI to stdout.
solar Counter.sol --emit abi

# Compile a contract through standard input (`-` file).
echo "contract C {}" | solar -
solar - <<EOF
contract HelloWorld {
    function helloWorld() external pure returns (string memory) {
        return "Hello, World!";
    }
}
EOF

# Compile a file with a Foundry project's remappings.
solar $(forge re) src/Contract.sol

Roadmap

You can find a more detailed list in the pinned GitHub issue.

  • Front-end
    • Lexing
    • Parsing
    • Semantic analysis
      • Symbol resolution
      • Type checker
      • Static analysis
  • Middle-end
  • Back-end

Semver Compatibility

Solar's versioning tracks compatibility for the binaries, not the API. If using this as a library, be sure to pin the version with a = version requirement operator.

Supported Rust Versions (MSRV)

Solar always aims to stay up-to-date with the latest stable Rust release.

The Minimum Supported Rust Version (MSRV) may be updated at any time, so we can take advantage of new features and improvements in Rust.

Contributing

Contributions are welcome and highly appreciated. To get started, check out the contributing guidelines.

Support

Having trouble? Check out the existing issues on GitHub, or feel free to open a new one.

You can also ask for help on Telegram.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in these crates by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.