PackageTrack
Sign in Get early access

solang-parser

Solang Solidity Parser

0.3.5 8.0M downloads/mo #3507 most downloaded on crates.io hyperledger-solang/solang

What this package is like to depend on

Last release 1 years ago

22 Jun 2025

Release timing varies

gaps range from 3 weeks to 13 months

Most releases are documented

notes for 14 of 23 stable releases

Nothing withdrawn

no release was ever pulled

5 years old

23 releases · first in 2021

0 releases in the last 12 months

see the full history below

Release timeline

23 releases · Dec 2021 to Jun 2025
2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 23
  1. 0.3.5 22 Jun 2025
    Release notes

    Release 0.3.5 Luxor (#1930)

    Cuts the **v0.3.5 "Luxor"** release.

    ## Contents
    - Bump `solang` to 0.3.5 (`Cargo.toml`), the VS Code extension to 0.3.5,
    and the version references in `docs/installing.rst` /
    `docs/extension.rst`.
    - New `## v0.3.5 Luxor` section in `CHANGELOG.md` and
    `vscode/CHANGELOG.md`.
    - Refreshed `Cargo.lock`.

    `solang-parser` intentionally **stays at 0.3.5**: its only change since
    v0.3.4 is an inert clippy allow, 0.3.5 is already published, and
    `solang` consumes the published `solang-forge-fmt 0.2.0` (which depends
    on registry `solang-parser 0.3.5`) — so no parser republish is needed
    and the lock keeps its validated structure.

    ## Depends on / includes the CI reproducibility fixes (#1929)
    The release build only succeeds with the dependency fix, so this branch
    is built on top of it. The first two commits are the same ones in #1929:
    - `ci: commit Cargo.lock to pin ed25519-dalek and unbreak main` — a
    newly-released `ed25519-dalek 3.0.0` broke `soroban-env-host`
    compilation; committing `Cargo.lock` (un-ignored in `.gitignore` and
    `.dockerignore`) pins it to 2.2.0 and makes CI/release builds
    reproducible.
    - `fix(vscode): exclude node_modules from test-suite glob` — the
    extension test runner was collecting stray `*.test.js` files from
    `node_modules` and aborting.

    If #1929 is merged first, only the `Release 0.3.5 Luxor` commit remains
    in this diff.

    ## Highlights since v0.3.4
    - **Soroban**: `string`/`bytes`/`bytesN`, structs, (u)int256, dynamic
    memory arrays, vectors-as-`VecObject`s in storage, integer width
    rounding, `contract_event`-based events, and a `pause` example.
    - **codegen**: large internal refactor introducing a `TargetCodegen`
    trait and relocating the Solana/Polkadot/Soroban backends under
    `src/codegen/targets/` (plus an `EvmTarget` scaffold).
    - Toolchain moved to Rust 1.90; inkwell bumped to 0.5.0.

    See `CHANGELOG.md` for the full, attributed list.

    Signed-off-by: salaheldinsoliman <[email protected]>

    Open source →
    Release notes

    Added

    Changed

    • codegen Large internal refactor: introduced a TargetCodegen trait and moved the Solana, Polkadot and Soroban backends under src/codegen/targets/, threading the target through the lowering call graph and routing target-specific hooks (abi encode/decode, storage arrays, events, builtins, load/store) through the trait. Added an EvmTarget scaffold. Islam-Imad
    • Soroban Updated the Soroban protocol version to match testnet. Ahmad Sameh
    • Bumped the inkwell crate to 0.5.0. seanyoung
    • Migrated the toolchain to Rust 1.90 (via 1.88). salaheldinsoliman
    • Expanded the Soroban integration tests and examples, and reorganized the docs to clarify Soroban support status. salaheldinsoliman, Mohamed Basuony
    • Binaries are uploaded on every push to the main branch. salaheldinsoliman
    • Moved Lucas and Xermicus to Emeritus Maintainers. seanyoung

    Fixed

    • Committed Cargo.lock (pinning ed25519-dalek to 2.2.0) so CI and release builds are reproducible and no longer break on semver-compatible upstream dependency drift; the lock is un-ignored in both .gitignore and .dockerignore. salaheldinsoliman
    • The VS Code extension test runner no longer collects stray *.test.js files from node_modules. salaheldinsoliman
    • Soroban Improved error reporting. mohamedbasuony
    • Soroban Use the instance storage modifier to match upstream. Amit Singhmar
    • Soroban Propagate strict_soroban_types and re-enable the Soroban testcases. Pratyksh Gupta
    • Silenced the mismatched_lifetime_syntaxes lint. Samuel Moelius
    • Fixed clippy warnings for Rust 1.86 and 1.88, and fixed the docs test. seanyoung
    • Fixed typos in the documentation. Pratyksh Gupta, John Wick
    Open source →
  2. 0.3.4 05 Jun 2024
    Release notes

    This release brings out the Soroban target support, updates llvm to version 16, and fixes many smaller bugs.

    Added

    Changed

    • Polkadot/BREAKING: Event encoding and topics follow ink! v5.0
    • BREAKING The non-standard extension of concatenating strings using the + operator
      has been removed, use string.concat() instead. seanyoung
    • Removed the --no-log-api-return-codes compile flag as this is now done by the runtime xermicus
    • Solana/BREAKING: Remove balance, transfer, and send builtins from Solana LucasSte
    • No longer support numbers in octal notation seanyoung
    • Moved to LLVM version 16 seanyoung
    • Improve overloaded function call diagnostics: From Solidity 0.6 onwards, overloaded functions or events
      resolving to multiple candidates are an error. In earlier versions, the first result is used.
      seanyoung
    • Polkadot: Implement the caller_is_root runtime API as a builtin xermicus

    Fixed

    • Two Infinite loops in codegen, thanks to @smoelius.
    • Handle abi.encode() with infinite empty arguments, thanks to @smoelius.
    • Unreachable code, function types with parameter/return names and unknown assembly flags are warnings
      instead of errors, matching with solc. xermicus
    • Fixed a bunch of typos in the documentation divdeploy
    • Clean up the LLD linker context after linking each contract, preventing potential issues when compiling
      multiple contracts at once. xermicus
    • Expression statement should be followed by a semicolon, fixing a bug where "_;" was incorrectly parsed
      as a variable. seanyoung
    • Represent type(T) correctly in the AST, fixing various related issues seanyoung
    • Fix a bug in abi.encodeCall() argument parsing when there is only a single argument seanyoung
    • Fixed a codegen bug when the RHS of a shift expression is a struct member PaddyClark0

    Full Changelog: v0.3.3...v0.3.4

    Open source →
    Release notes

    Added

    Changed

    • Polkadot/BREAKING: Event encoding and topics follow ink! v5.0
    • BREAKING The non-standard extension of concatenating strings using the + operator has been removed, use string.concat() instead. seanyoung
    • Removed the --no-log-api-return-codes compile flag as this is now done by the runtime xermicus
    • Solana/BREAKING: Remove balance, transfer, and send builtins from Solana LucasSte
    • No longer support numbers in octal notation seanyoung
    • Moved to LLVM version 16 seanyoung
    • Improve overloaded function call diagnostics: From Solidity 0.6 onwards, overloaded functions or events resolving to multiple candidates are an error. In earlier versions, the first result is used. seanyoung
    • Polkadot: Implement the caller_is_root runtime API as a builtin xermicus

    Fixed

    • Two Infinite loops in codegen, thanks to @smoelius.
    • Handle abi.encode() with infinite empty arguments, thanks to @smoelius.
    • Unreachable code, function types with parameter/return names and unknown assembly flags are warnings instead of errors, matching with solc. xermicus
    • Fixed a bunch of typos in the documentation divdeploy
    • Clean up the LLD linker context after linking each contract, preventing potential issues when compiling multiple contracts at once. xermicus
    • Expression statement should be followed by a semicolon, fixing a bug where "_;" was incorrectly parsed as a variable. seanyoung
    • Represent type(T) correctly in the AST, fixing various related issues seanyoung
    • Fix a bug in abi.encodeCall() argument parsing when there is only a single argument seanyoung
    • Fixed a codegen bug when the RHS of a shift expression is a struct member PaddyClark0
    Open source →
  3. 0.3.3 24 Oct 2023
    Release notes

    This release improves the Solana developer experience, since now required
    accounts can be specified using annotations. For Polkadot, compatibility with
    Ethereum Solidity has been increased further, it is now possible to write
    EIP-1967 compatible proxy contracts.
    There are many fixes all over the code base.

    Added

    • Solana the required accounts for instructions can now be specified
      using function annotations. LucasSte
      contract Foo {
          @account(oneAccount)
          @signer(mySigner)
          @mutableAccount(otherAccount)
          @mutableSigner(otherSigner)
          function bar() external returns (uint64) {}
      }
      
    • The language server can now format Solidity source code using the
      forge-fmt crate. chioni16
    • The langauge server can now do go references, go to implementation, and go to type
      definition. chioni16
    • Polkadot Panic errors can now be caught in try-catch statements
      xermicus
    • Polkadot custom errors are now supported
      xermicus
    • Polkadot now supporting the address.code builtin
      xermicus

    Fixed

    • Solana the data field of AccountInfo can now be modified.
      LucasSte
    • The vscode extension now uses the solang binary in the path, if
      available. seanyoung
    • Fixed a bug in the ABI encoding of dynamic arrays.
      xermicus
    • Fixed a bug where loading from a storage struct member was not
      considered a storage read. xermicus seanyoung
    • Fixed a compiler crash caused by chained assignments like return a = b. xermicus
    • Variables declared in the return parameters no longer ignore the storage location. xermicus

    Changed

    • BREAKING: Solana the contract Solidity type can no longer be used. This type
      used to represent a single address, but this does not make sense asthere are many
      accounts associated with a contract call. LucasSte
    Open source →
    Release notes

    This release improves the Solana developer experience, since now required accounts can be specified using annotations. For Polkadot, compatibility with Ethereum Solidity has been increased further, it is now possible to write EIP-1967 compatible proxy contracts. There are many fixes all over the code base.

    Added

    • Solana the required accounts for instructions can now be specified using function annotations. LucasSte
      contract Foo {
          @account(oneAccount)
          @signer(mySigner)
          @mutableAccount(otherAccount)
          @mutableSigner(otherSigner)
          function bar() external returns (uint64) {}
      }
      
    • The language server can now format Solidity source code using the forge-fmt crate. chioni16
    • The language server can now do go references, go to implementation, and go to type definition. chioni16
    • Polkadot Panic errors can now be caught in try-catch statements xermicus
    • Polkadot custom errors are now supported xermicus
    • Polkadot now supporting the address.code builtin xermicus

    Fixed

    • Solana the data field of AccountInfo can now be modified. LucasSte
    • The vscode extension now uses the solang binary in the path, if available. seanyoung
    • Fixed a bug in the ABI encoding of dynamic arrays. xermicus
    • Fixed a bug where loading from a storage struct member was not considered a storage read. xermicus seanyoung
    • Fixed a compiler crash caused by chained assignments like return a = b. xermicus
    • Variables declared in the return parameters no longer ignore the storage location. xermicus

    Changed

    • BREAKING: Solana the contract Solidity type can no longer be used. This type used to represent a single address, but this does not make sense as there are many accounts associated with a contract call. LucasSte
    Open source →
  4. 0.3.2 24 Aug 2023
    Release notes

    The language server is much improved, and many fixes all over.

    Added

    • Go to definition is now implemented in the language server.
      chioni16
    • The parser has been updated to be compatible with Ethereum Solidity
      v0.8.21. seanyoung

    Fixed

    • breaking Resolving import paths now matches solc more closely, and
      only resolves relative paths when specified as ./foo or ../foo.
      seanyoung
    • Solana The lamports and data fields of tx.accounts can be
      modified again. LucasSte
    • It is not longer necessary to save a Solidity file, in order for the
      language server to pick up changes to the file.
      chioni16
    • The negate operator - now checks for overflow at runtime, and other
      math overflow fixes. seanyoung

    Changed

    • The Substrate target has been renamed to Polkadot.
      xermicus
    • Polkadot assert() and require() is now implemented as a
      transction revert, rather than a trap. The error data is returned, and
      encoded the same as on Ethereum. Error data is now passed to the calling
      contract, all the way up the call stack.
      xermicus
    • Polkadot constructor can be non-payable.
      xermicus
    Open source →
    Release notes

    The language server is much improved, and many fixes all over.

    Added

    • Go to definition is now implemented in the language server. chioni16
    • The parser has been updated to be compatible with Ethereum Solidity v0.8.21. seanyoung
    • Polkadot Support for runtimes built with on polkadot-v1.0.0

    Fixed

    • breaking Resolving import paths now matches solc more closely, and only resolves relative paths when specified as ./foo or ../foo. seanyoung
    • Solana The lamports and data fields of tx.accounts can be modified again. LucasSte
    • Solana The address.transfer() and address.send() functions no longer change any balances in the error case if there was an overflow (e.g. not enough balance). LucasSte
    • Solana When collecting the required accounts, ensure that the writer and signer bits are set correctly if the same account is used multiple times. LucasSte
    • It is not longer necessary to save a Solidity file, in order for the language server to pick up changes to the file. chioni16
    • The negate operator - now checks for overflow at runtime, and other math overflow fixes. seanyoung
    • Fixed a bug where accessing the function selector of virtual functions might cause a compiler panic. xermicus
    • Fixed a bug where the strength reduce optimization pass removed overflow checks on optimized multiplications. xermicus
    • Fixed a bug where external function variables were not marked as read when they were called by the semantic analyzer, which could lead to the external function call being eliminated spuriously. xermicus
    • Fixed a bug in try-catch where a failed transfer trapped the contract instead of handling it in a catch all block. xermicus

    Changed

    • The Substrate target has been renamed to Polkadot. xermicus
    • Polkadot assert() and require() is now implemented as a transaction revert, rather than a trap. The error data is returned, and encoded the same as on Ethereum. Error data is now passed to the calling contract, all the way up the call stack. xermicus
    • Polkadot constructor can be non-payable. xermicus
    • Storage variables are now always written to, regardless whether the contract does read them or not. Prior behavior was to not write to storage variables if they are not read, which can remove wanted side effects, because unused storage variables may be used in future versions of the contract. xermicus
    • Solana seeds can now be of type address or bytesN, in addition to bytes. seanyoung
    Open source →
  5. 0.3.1 30 Jun 2023
    Release notes

    Added

    • Write environment configuration into Substrate metadata. xermicus
    • Tornado cash as an exemplary integration test for Substrate chain extensions. xermicus
    • is_contract runtime API is available as a builtin for Substrate. xermicus
    • The wasm-opt optimizer now optimizes the Wasm bytecode on the Substrate target. xermicus
    • Call flags are now available for Substrate. xermicus
    • Read compiler configurations from toml file. salaheldinsoliman
    • Accounts declared with @payer(my_account) can be accessed with the
      syntax tx.accounts.my_account. LucasSte
    • delegatecall() builtin has been added for Substrate. xermicus
    • get_contents_of_file_no for Solang parser. BenTheKush
    • set_code_hash() builtin has been aded for Substrate. xermicus

    Fixed

    • Diagnostics do not include large numbers anymore. seanyoung
    • Correctly parse and resolve require(i < 2**255). seanyoung
    • Virtual function are available for call. xermicus
    • Allow .wrap() and .unwrap() user defined type methods in constants. xermicus
    • @inheritdoc now works with bases of bases. seanyoung
    • Allow destructures to assign to storage variables. seanyoung
    • Do not allow push and pop in fixed length arrays. LucasSte
    • Improve unused variable elimination to remove unused arrays. LucasSte
    • Salt argument should be of type bytes32. seanyoung
    • Allow return vallues to be ignored in try-catch statements. seanyoung
    • Optimize modifiers' CFGs. xermicus
    • Fix an error whereby building large contracts would cause an LLVM error. LucasSte
    • A constructor for a Solana contract cannot run twice on the same data account. seanyoung
    • Split the call and deploy dispatches on Substrate. xermicus

    Changed

    • Minimum Supported Rust Version (MSRV) is Rust 1.68.
    • @payer annotation declares an account in a constructor. LucasSte
    • Do not allow .call() functions in functions declared as view. seanyoung
    • Storage accessor function matches solc, and returns struct members if the sole return value is a single struct seanyoung
    • breaking Constructor annotations above a constructor can either declare an account or receive a literal parameter. LucasSte
      contract MyContract {
        @payer(acc) // Declares account acc
        @space(2+3) // Only literals or constant expressions allowed
        @seed(myseed) // NOT ALLOWED
        constructor(bytes myseed) {}
      }
      
    • Annotations placed before constructor arguments refer to the latter. LucasSte
      contract MyContract {
        @payer(acc) // Declares account acc
        @space(2+3) // Only literals or constant expressions allowed
        constructor(@seed bytes myseed) {}
        // When an annotations refers to a parameter, the former must appear right before the latter.
      }
      
    Open source →
    Release notes

    Added

    • Write environment configuration into Substrate metadata. xermicus
    • Tornado cash as an exemplary integration test for Substrate chain extensions. xermicus
    • is_contract runtime API is available as a builtin for Substrate. xermicus
    • The wasm-opt optimizer now optimizes the Wasm bytecode on the Substrate target. xermicus
    • Call flags are now available for Substrate. xermicus
    • Read compiler configurations from toml file. salaheldinsoliman
    • Accounts declared with @payer(my_account) can be accessed with the syntax tx.accounts.my_account. LucasSte
    • delegatecall() builtin has been added for Substrate. xermicus
    • get_contents_of_file_no for Solang parser. BenTheKush
    • set_code_hash() builtin has been added for Substrate. xermicus

    Fixed

    • Diagnostics do not include large numbers anymore. seanyoung
    • Correctly parse and resolve require(i < 2**255). seanyoung
    • Virtual function are available for call. xermicus
    • Allow .wrap() and .unwrap() user defined type methods in constants. xermicus
    • @inheritdoc now works with bases of bases. seanyoung
    • Allow destructures to assign to storage variables. seanyoung
    • Do not allow push and pop in fixed length arrays. LucasSte
    • Improve unused variable elimination to remove unused arrays. LucasSte
    • Salt argument should be of type bytes32. seanyoung
    • Allow return values to be ignored in try-catch statements. seanyoung
    • Optimize modifiers' CFGs. xermicus
    • Fix an error whereby building large contracts would cause an LLVM error. LucasSte
    • A constructor for a Solana contract cannot run twice on the same data account. seanyoung
    • Split the call and deploy dispatches on Substrate. xermicus

    Changed

    • Minimum Supported Rust Version (MSRV) is Rust 1.68.
    • @payer annotation declares an account in a constructor. LucasSte
    • Do not allow .call() functions in functions declared as view. seanyoung
    • Storage accessor function matches solc, and returns struct members if the sole return value is a single struct seanyoung
    • breaking Constructor annotations above a constructor can either declare an account or receive a literal parameter. LucasSte
      contract MyContract {
        @payer(acc) // Declares account acc
        @space(2+3) // Only literals or constant expressions allowed
        @seed(myseed) // NOT ALLOWED
        constructor(bytes myseed) {}
      }
      
    • Annotations placed before constructor arguments refer to the latter. LucasSte
      contract MyContract {
        @payer(acc) // Declares account acc
        @space(2+3) // Only literals or constant expressions allowed
        constructor(@seed bytes myseed) {}
        // When an annotations refers to a parameter, the former must appear right before the latter.
      }
      
    Open source →
  6. 0.3.0 22 May 2023
    Release notes

    The parser and semantic analysis stage of Solang have gone through
    a security audit. All security issues have been fixed.

    Added

    • The CLI now has a --release option, which disables printing of errors. salaheldinsoliman
    • Substrate: chain extensions can be now used. xermicus

    Fixed

    • Solidity error definitions are now parsed. seanyoung
    • The Ethereum Solidity parser and semantic analysis tests are now run on Solang sema during
      cargo test. seanyoung
    • If a function returns a storage reference, then not returning a value explicitly is an error, since
      the reference must refer to an existing storage variable. seanyoung
    • Many small improvements have been made to the parser and semantic analysis, improving compatibility
      with Ethereum Solidity. seanyoung xermicus LucasSte

    Changed

    • Solana: Addresses are now base58 encoded when formated with "address:{}".format(address). LucasSte
    • Substrate: No longer use the prefixed names for seal runtime API calls, which grants small improvements in contract sizes. xermicus
    Open source →
    Release notes

    The parser and semantic analysis stage of Solang have gone through a security audit. All security issues have been fixed.

    Added

    • The CLI now has a --release option, which disables printing of errors salaheldinsoliman
    • Substrate: chain extensions can be now used. xermicus

    Fixed

    • Solidity error definitions are now parsed. seanyoung
    • The Ethereum Solidity parser and semantic analysis tests are now run on Solang sema during cargo test. seanyoung
    • If a function returns a storage reference, then not returning a value explicitly is an error, since the reference must refer to an existing storage variable. seanyoung
    • Many small improvements have been made to the parser and semantic analysis, improving compatibility with Ethereum Solidity. seanyoung xermicus LucasSte

    Changed

    • Solana: Addresses are now base58 encoded when formatted with "address:{}".format(address). LucasSte
    • Substrate: No longer use the prefixed names for seal runtime API calls, which grants small improvements in contract sizes. xermicus
    Open source →
  7. 0.2.4 06 Apr 2023

    Nothing published for this version

  8. 0.2.3 03 Mar 2023
    Release notes

    Added

    • The Solana units sol and lamports are now supported, e.g. 10 sol and 100 lamports. seanyoung
    • User defined operators are now supported. This is a feature in Ethereum Solidity v0.8.19. seanyoung
    • Solana: if a contract uses the SystemAccount, ClockAccount, or other standard builtin accounts, then this is automatically added to the IDL. LucasSte
    • Substrate: The content of the debug buffer is formatted in a human readable way. This vastly improves its readability, allowing to spot API runtime return codes, runtime errors and debug prints much easier. salaheldinsoliman

    Fixed

    • Solana: contracts with a seed for the constructor do not require a signer in the Anchor IDL seanyoung
    • Fix panic when lexing ".9" at the beginning of a file. seanyoung
    • Forbid ABI encoding and decoding of recursive types. xermicus
    • Treat enums as 8bit uint in constant hashing. xermicus
    • Fix compilation failure with -g for the substrate target. salaheldinsoliman
    • Fixed incorrect ABI encoding for user defined types. xermicus seanyoung
    • Fixed incorrect ABI encoding for struct with fields of type bytesN xermicus
    • Fixed incorrect handling of recursive struct fields. xermicus
    • Fixed a bug in our Common Subexpression Elimination optimization pass LucasSte

    Changed

    • Math overflow is now always enabled, unless the math happens with an unchecked { .. } block. The --math-overflow command line option has been removed. seanyoung
    • Substrate: the SCALE encoder and decoder now uses a much better implementation written in our CFG intermediate format. xermicus
    • Substrate: When instantiating a new contract without providing a salt, the salt we be derived from the output of the new instantiation_nonce runtime API. xermicus
    • Minimal Supported Rust Version is 1.65.0
    • No longer silently overwrite contract artifacts, if the same contract is defined more than once in different locations seanyoung
    Open source →
  9. 0.2.2 10 Feb 2023
    Release notes

    Added

    • Solidity mappings can now have named key and named value types. seanyoung

    Changed

    • Solang now uses LLVM 15. LucasSte
    • Solidity on Solana now required the Anchor framework for the client code, and the @solana/solidity.js Typescript library is no longer compatible with Solidity.
    • When casting hex literal numbers into the bytesN type, the hex literal may use leading zeros to match the size with the according bytesN, which aligns solang with solc. xermicus

    Fixed

    Open source →
  10. 0.2.1 03 Jan 2023
    Release notes

    Added

    • The Anchor IDL data structure is now generated for every Solana contract, although the actual IDL json file is not yet saved.
      LucasSte

    Changed

    • The Solana target now utilizes eight byte Anchor discriminators for function dispatch instead
      of the four byte Ethereum selectors. LucasSte
    • The deployment of contracts on Solana now follows the same scheme as Anchor. seanyoung
    • Compares between rational literals and integers are not allowed. seanyoung
    • Overriding the function selector value is now done using the @selector([1, 2, 3, 4])
      syntax, and the old syntax selector=hex"12345678" has been removed.
    • msg.sender was not implemented correctly on Solana, and
      has now been removed.
      seanyoung
    • Solang now uses LLVM 14. LucasSte

    Fixed

    Open source →
    Release notes

    Added

    • The Anchor IDL data structure is now generated for every Solana contract, although the actual IDL json file is not yet saved. LucasSte

    Changed

    • The Solana target now utilizes eight byte Anchor discriminators for function dispatch instead of the four byte Ethereum selectors. LucasSte
    • The deployment of contracts on Solana now follows the same scheme as Anchor. seanyoung
    • Compares between rational literals and integers are not allowed. seanyoung
    • Overriding the function selector value is now done using the @selector([1, 2, 3, 4]) syntax, and the old syntax selector=hex"12345678" has been removed.
    • msg.sender was not implemented correctly on Solana, and has now been removed. seanyoung
    • Solang now uses LLVM 14. LucasSte

    Fixed

    Open source →
  11. 0.2.0 02 Dec 2022
    Release notes

    We are happy to release solang v0.2.0 codenamed Berlin today. Aside from containing many small fixes and improvements, this release marks a milestone towards maturing our Substrate compilation target: Any regressions building up since ink! v3.0 are fixed, most notably the metadata format (shoutout and many thanks to external contributor extraymond) and event topics. Furthermore, we are leaving ink! version 3 behind us, in favor of introducing compatibility with the recent ink! 4 beta release and the latest substrate contract node v0.22.1.

    Added

    • Solana / breaking: The try-catch construct is no longer permitted on Solana, as it
      never worked. Any CPI error will abort the transaction.
      seanyoung
    • Solana: Introduce new sub-command solang idl which can be used for generating
      a Solidity interface file from an Anchor IDL file. This can be used for calling
      Anchor Contracts on Solana. seanyoung
    • Substrate: Provide specific Substrate builtins via a "substrate" file. The
      Hash type from ink! is the first ink! specific type made available for Solidity
      contracts.
      xermicus
    • Substrate: Introduce the --log-api-return-codes CLI flag, which changes the
      emitted code to print return codes for seal API calls into the debug buffer.
      xermicus
    • Introduce function name mangling for overloaded functions and constructors, so
      that they can be represented properly in the metadata.
      xermicus

    Changed

    • The Solana target now uses Borsh encoding rather than eth abi
      encoding. This is aimed at making Solang contracts Anchor compatible.
      LucasSte
    • Substrate / breaking: Supported node version is now pallet contracts v0.22.1.
      xermicus
    • Substrate / breaking: Remove the deprecated random builtin.
      xermicus

    Fixed

    • Whenever possible, the parser does not give up after the first error.
      salaheldinsoliman
    • Constant expressions are checked for overflow.
      salaheldinsoliman
    • AddMod and MulMod were broken. This is now fixed.
      LucasSte
    • Substrate / breaking: Solang is now compatible with ink! version 4 (beta).
      xermicus
    • Substrate: Switched ABI generation to use official ink! crates, which fixes all
      remaining metadata regressions.
      extraymond and xermicus
    • Substrate: Allow constructors to have a name, so that multiple constructors are
      supported, like in ink!.
      xermicus
    • All provided examples as well as most of the Solidity code snippets in our
      documentation are now checked for succesful compilation on the Solang CI.
      xermicus
    • Substrate: Fix events with topics. The topic hashes generated by Solang
      contracts are now exactly the same as those generated by ink!.
      xermicus
    Open source →
    Release notes

    We are happy to release solang v0.2.0 codenamed Berlin today. Aside from containing many small fixes and improvements, this release marks a milestone towards maturing our Substrate compilation target: any regressions building up since ink! v3.0 are fixed, most notably the metadata format (shoutout and many thanks to external contributor extraymond) and event topics. Furthermore, we are leaving ink! version 3 behind us, in favor of introducing compatibility with the recent ink! 4 beta release and the latest substrate contracts node v0.22.1.

    Added

    • Solana / breaking: The try-catch construct is no longer permitted on Solana, as it never worked. Any CPI error will abort the transaction. seanyoung
    • Solana: Introduce new sub-command solang idl which can be used for generating a Solidity interface file from an Anchor IDL file. This can be used for calling Anchor Contracts on Solana. seanyoung
    • Substrate: Provide specific Substrate builtins via a "substrate" file. The Hash type from ink! is the first ink! specific type made available for Solidity contracts. xermicus
    • Substrate: Introduce the --log-api-return-codes CLI flag, which changes the emitted code to print return codes for seal API calls into the debug buffer. xermicus
    • Introduce function name mangling for overloaded functions and constructors, so that they can be represented properly in the metadata. xermicus

    Changed

    • The Solana target now uses Borsh encoding rather than eth abi encoding. This is aimed at making Solang contracts Anchor compatible. LucasSte
    • Substrate / breaking: Supported node version is now pallet contracts v0.22.1. xermicus
    • Substrate / breaking: Remove the deprecated random builtin. xermicus

    Fixed

    • Whenever possible, the parser does not give up after the first error. salaheldinsoliman
    • Constant expressions are checked for overflow. salaheldinsoliman
    • AddMod and MulMod were broken. This is now fixed. LucasSte
    • Substrate / breaking: Solang is now compatible with ink! version 4 (beta). xermicus
    • Substrate: Switched ABI generation to use official ink! crates, which fixes all remaining metadata regressions. extraymond and xermicus
    • Substrate: Allow constructors to have a name, so that multiple constructors are supported, like in ink!. xermicus
    • All provided examples as well as most of the Solidity code snippets in our documentation are now checked for successful compilation on the Solang CI. xermicus
    • Substrate: Fix events with topics. The topic hashes generated by Solang contracts are now exactly the same as those generated by ink!. xermicus
    Open source →
  12. 0.1.18 16 Sep 2022

    Nothing published for this version

  13. 0.1.17 02 Aug 2022

    Nothing published for this version

  14. 0.1.16 04 Jul 2022

    Nothing published for this version

  15. 0.1.15 03 Jul 2022

    Nothing published for this version

  16. 0.1.14 09 Jun 2022

    Nothing published for this version

  17. 0.1.13 13 May 2022
    Release notes

    Changed

    • Introduce sub-commands to the CLI. Now we have dedicated sub-commands for compile, doc, shell-completion and the language-server, which makes for a cleaner CLI. seanyoung
    • On Solana, emitted events are encoded with Borsh encoding following the Anchor format. LucasSte
    • The ewasm target has been removed, since ewasm is not going to implemented on Ethereum. The target has been reused for an new EVM target, which is not complete yet. seanyoung
    • Substrate: Concrete contracts must now have at least one public function. A public function is in a contract, if it has public or external functions, if it has a receive or any fallback function or if it has public storage items (those will yield public getters). This aligns solang up with ink!. xermicus

    Added

    • Solana v1.11 is now supported. seanyoung
    • On Solana, programs now use a custom heap implementation, just like on Substrate. As result, it is now possible to .push() and .pop() on dynamic arrays in memory. seanyoung
    • Arithmetic overflow tests are implemented for all integer widths, salaheldinsoliman
    • Add an NFT example for Solana LucasSte
    • Add a wrapper for the Solana System Program LucasSte
    • The selector for functions can be overridden with the selector=hex"abcd0123" syntax. seanyoung
    • Shell completion is available using the solang shell-completion subcommand. xermicus
    • Add support for the create_program_address() and try_find_program_address() system call on Solana seanyoung
    • Substrate: The print() builtin is now supported and will write to the debug buffer. Additionally, error messages from the require statements will now be written to the debug buffer as well. The Substrate contracts pallet prints the contents of the debug buffer to the console for RPC ("dry-run") calls in case the runtime::contracts=debug log level is configured. xermicus

    Fixed

    • DocComments /** ... */ are now permitted anywhere. seanyoung
    • Function calls to contract functions via contract name are no longer possible, except for functions of base contracts. xermicus
    Open source →
  18. 0.1.12 16 Apr 2022
    Release notes

    Added

    • Added spl-token integration for Solana
    • Solang now generates code for inline assembly, including many Yul builtins

    Changed

    • The documentation has been re-arranged for readability.
    • The solang parser can parse the same syntax as Ethereum Solidity 0.8.

    Fixed

    • Fixed many parser issues. Now solang-parser parses all files in the Ethereum Solidity test suite. First run git submodule update --init --recursive to fetch the test files, and then run the test with cargo test --workspace.
    Open source →
  19. 0.1.11 03 Apr 2022
    Release notes

    Added

    • Added support for Solidity user types
    • Support using syntax on file scope
    • Support binding functions with using
    • Implemented parsing and semantic analysis of yul (code generation is to follow)
    • The language server uses the --import and --importmap arguments
    • On Solana, it is possible to set the accounts during CPI using the accounts: call argument.

    Fixed

    • Fixed associativity of the power operator
    • A huge amount of fixes improving compatibility with solc
    Open source →
  20. 0.1.10 02 Mar 2022
    Release notes

    Added

    • On Solana, the accounts that were passed into the transactions are listed in the tx.accounts builtin. There is also a builtin struct AccountInfo
    • A new common subexpression elimination pass was added, thanks to LucasSte
    • A graphviz dot file can be generated from the ast, using --emit ast-dot
    • Many improvements to the solidity parser, and the parser has been spun out in it's own create solang-parser.

    Changed

    • Solang now uses LLVM 13.0, based on the Solana LLVM tree
    • The ast datastructure has been simplified.
    • Many bugfixes across the entire tree.
    Open source →
  21. 0.1.2 11 Feb 2022

    Nothing published for this version

  22. 0.1.1 06 Jan 2022

    Nothing published for this version

  23. 0.1.0 31 Dec 2021

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive