Project
Status
CII Badge
DescriptionSolang is a portable compiler for the Solidity language that targets Solana and Substrate (Polkadot). It is written in Rust, and leverages the LLVM infrastructure for the compiler backend.

Solang Logo

solang - Solidity Compiler for Solana and Polkadot

Discord CI Documentation Status license LoC

Welcome to Solang, a new Solidity compiler written in rust which uses llvm as the compiler backend. Solang can compile Solidity for Solana and Polkadot Parachains with the contracts pallet. Solang is source compatible with Solidity 0.8, with some caveats due to differences in the underlying blockchain.

Solang is under active development right now, and has extensive documentation.

Solana

Please follow the Solang Getting Started Guide.

Solang is part of the Solana Tools Suite (version v1.16.3 and higher). There is no need to install it separately.

Installation

Solang is available as a Brew cask for MacOS, with the following command:

brew install hyperledger/solang/solang

For other operating systems, please check the installation guide.

Build for Polkadot

Run the following command, selecting the flipper example available on Solang's repository:

solang compile --target polkadot examples/polkadot/flipper.sol

Alternatively if you want to use the solang container, run:

docker run --rm -it -v $(pwd):/sources ghcr.io/hyperledger/solang compile -v -o /sources --target polkadot /sources/flipper.sol

You will have a file called flipper.contract. You can use this directly in the Contracts UI, as if your smart contract was written using ink!.

Tentative roadmap

Solang has a high level of compatibility with many blockchains. We are trying to ensure the compiler stays up to date with the newest Solidity syntax and features. In addition, we focus on bringing new performance optimizations and improve developer experience. Here is a brief description of what we envision for the next versions.

V0.4

FeatureStatus
Improve management over optimization passesNot started
Adopt single static assignment for code generationIn progress
Support openzeppelin on Polkadot targetIn progress
Provide Solidity -> Polkadot porting guideNot started
Declare accounts for a Solidity function on SolanaIn progress
Tooling for calls between ink! <> solidityIn progress
Provide CLI for node interactionsDone

License

Apache 2.0

The Solidity language is the most popular programming language for smart contracts. However, the existing Solidity compiler only targets the Ethereum virtual machine. The Solang project aims to make Solidity available for other blockchains, and focuses on maintaining source code compatibility with Solc, so that developers can use their existing codebase for blockchains other than Ethereum with minimal modifications.

The purpose of Solang is two-fold: first of all, developers with Solidity language knowledge can develop new smart contracts for non-ethereum blockchains in Solidity, so they do not have to learn a new language. Secondly, there is a large amount of existing Solidity contracts available, which can be recompiled for a different blockchain.

Currently, Solang targets the following blockchains:

- Solana
- Substrate

At the time of writing, these chains are the 9th, and 11th by market capitalization according coinmarketcap.com (the coins are listed by market cap).

Any other blockchain that wishes to have Solidity language support is welcome to add a new target to the Solang project. The cosmos blockchain grant foundation has said it would support a grant for adding CosmWasm support.

The goal of Solang is to bring the Solidity language to as many blockchains as possible. Writing a production quality compiler is a complex task, so collaboration between blockchains will be hugely beneficial.

The success of the project can be measured by the number of projects that use Solang as a compiler.

Key Characteristics

Hyperledger Solang is a compiler: it knows how to transform Solidity source code into a binary program (or contract) which can be directly deployed on a blockchain. Hyperledger Solang does not provide tooling for this, however we do provide documentation on how to deploy and interact with your Solidity contracts, see the block-chain specific documentation below.

Hyperledger Solang has the following stages:

  1. Parser stage. This parser Solidity. This is in the `solang-parser` crate. This crate is used by another project: foundry uses it for its Solidity code formatter.
  2. Semantic Analysis Stage (sema). This validates that the source code is valid, and produces the AST. This is used by the Language Server.
  3. Code generation (codegen). This transforms the AST into a CFG (control flow graph). This deals with contract inheritance too, and includes a few code optimization passes.
  4. LLVM IR emit (emit). This transforms the CFG into LLVM IR.
  5. LLVM Backend. The LLVM Libraries further optimize and compile the code into optimized binary files
  6. LLD Linker. The LLVM Linker produces the final file.

Documentation

https://Solang.readthedocs.io/en/latest/

How to run Solang on command line: https://Solang.readthedocs.io/en/latest/running.html

Blockchain-specific instructions for:

Solana: https://solang.readthedocs.io/en/latest/targets/solana.html

Substrate: https://solang.readthedocs.io/en/latest/targets/substrate.html

Project Management and Issue Tracking

All Solang projects use GitHub for receiving issues, receiving pull requests and tracking releases.  The links to the GitHub repos for the project are below.

Repositories

https://github.com/hyperledger/solang

https://github.com/hyperledger/homebrew-solang

Communication

Mailing List

Chat (for questions and ephemeral discussions)

Questions are welcome and best asked in Hyperledger Discord.  

Learn more about Hyperledger Discord here, get the invite and check out one of the many Aries project channels.  

Meeting

People who want to learn about or contribute to Solang should join this call. This does not replace our asynchronous collaboration, but should help us keep everyone up-to-date and moving together.

Discussion items: upcoming releases, current PRs, work that will generate future PRs, architecture changes that will impact downstream teams, project standards, best practices, design, etc.

Calendar

History

  • Proposed by

    • Sean Young

    • Lucas Steuernagel

    • Tracy A. Kuhrt 

    • Cyrill Leutwiler 

  • Approved  by the TSC on 2022 -08-18

Getting Involved

You are invited to get involved with the Solang project.  Here are some ways you can get started.

  1. Join our team calls! We have a daily stand up meeting in discord.
  2. File us an issue report or pull request.
  3. Join communication channels and introduce yourself and ask questions (details below)
  4. Grab a good first issue based on your level of experience/technical area(s) of expertise or interests:
    1. All Good First Issues

Communication

Mailing List

Chat (for questions and ephemeral discussions)

Questions are welcome and best asked in Hyperledger Discord.  Learn more about Hyperledger Discord here, get the invite and check out one of the many Cactus project channels.  

Daily Meetings

Every day at 13:30 UTC we meet to discuss the project. Everyone is welcome.

https://lists.hyperledger.org/g/solang/calendar

Calendar of Public Meetings

Recent space activity

Space contributors

{"mode":"list","scope":"descendants","limit":"5","showLastTime":"true","order":"update","contextEntityId":71700591}