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 2025Releases
latest 23-
0.3.522 Jun 2025Release notes
Open source →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]>
Release notes
Open source →Added
- Soroban Support for
string,bytesandbytesNtypes. Islam-Imad - Soroban Support for structs. salaheldinsoliman
- Soroban Support for (u)int256. Pratyksh Gupta
- Soroban Support for dynamic memory arrays. salaheldinsoliman
- Soroban Vectors are represented in storage as
VecObjects. salaheldinsoliman - Soroban Integer width rounding for unsupported integer widths. Pratyksh Gupta
- Soroban Events are emitted via the
contract_eventhost function. 0xull - Soroban Added a
pauseexample. Amit Singhmar
Changed
- codegen Large internal refactor: introduced a
TargetCodegentrait and moved the Solana, Polkadot and Soroban backends undersrc/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 anEvmTargetscaffold. 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(pinninged25519-dalekto 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.gitignoreand.dockerignore. salaheldinsoliman - The VS Code extension test runner no longer collects stray
*.test.jsfiles fromnode_modules. salaheldinsoliman - Soroban Improved error reporting. mohamedbasuony
- Soroban Use the instance storage modifier to match upstream. Amit Singhmar
- Soroban Propagate
strict_soroban_typesand re-enable the Soroban testcases. Pratyksh Gupta - Silenced the
mismatched_lifetime_syntaxeslint. 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
- Soroban Support for
-
0.3.405 Jun 2024Release notes
Open source →This release brings out the Soroban target support, updates llvm to version 16, and fixes many smaller bugs.
Added
- Soroban Support for Stellar Asset Contract(SAC)
- Soroban Support for Cross Contract Calls
- Soroban Support for Soroban Authorization Framework
- Soroban Support for different Soroban Storage types
- Soroban Work on adding support for Stellar's Soroban contracts platforms started, by adding a skeleton that supports the Soroban runtime. Salaheldin Soliman
- The
string.concat()andbytes.concat()builtin functions are supported. seanyoung - Experimental: Three address code format IR for the CFG has been implemented (disabled by default).
fanyi-zhao. - Polkadot: Compatibility with ink! v5.0 metadata and substrate-contracts-node v0.39.0
- Implement event selectors seanyoung
- Add a feature flag for compiling language server xermicus
- Parsing the pragma solidity version numbers, making this information available in the downstream
compilation pipeline seanyoung
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, usestring.concat()instead. seanyoung - Removed the
--no-log-api-return-codescompile 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
Release notes
Open source →Added
- Soroban Support for Stellar Asset Contract(SAC)
- Soroban Support for Cross Contract Calls
- Soroban Support for Soroban Authorization Framework
- Soroban Support for different Soroban Storage types
- Soroban Work on adding support for Stellar's Soroban contracts platforms started, by adding a skeleton that supports the Soroban runtime. Salaheldin Soliman
- The
string.concat()andbytes.concat()builtin functions are supported. seanyoung - Experimental: Three address code format IR for the CFG has been implemented (disabled by default). fanyi-zhao.
- Polkadot: Compatibility with ink! v5.0 metadata and substrate-contracts-node v0.39.0
- Implement event selectors seanyoung
- Add a feature flag for compiling language server xermicus
- Parsing the pragma solidity version numbers, making this information available in the downstream compilation pipeline seanyoung
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, usestring.concat()instead. seanyoung - Removed the
--no-log-api-return-codescompile 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
-
0.3.324 Oct 2023Release notes
Open source →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. LucasStecontract 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-fmtcrate. chioni16 - The langauge server can now do go references, go to implementation, and go to type
definition. chioni16 - Polkadot
Panicerrors can now be caught in try-catch statements
xermicus - Polkadot custom errors are now supported
xermicus - Polkadot now supporting the
address.codebuiltin
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
storagelocation. 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
Release notes
Open source →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-fmtcrate. chioni16 - The language server can now do go references, go to implementation, and go to type definition. chioni16
- Polkadot
Panicerrors can now be caught in try-catch statements xermicus - Polkadot custom errors are now supported xermicus
- Polkadot now supporting the
address.codebuiltin 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
storagelocation. 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
- Solana the required accounts for instructions can now be specified
-
0.3.224 Aug 2023Release notes
Open source →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./fooor../foo.
seanyoung - Solana The
lamportsanddatafields oftx.accountscan 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()andrequire()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
Release notes
Open source →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
./fooor../foo. seanyoung - Solana The
lamportsanddatafields oftx.accountscan be modified again. LucasSte - Solana The
address.transfer()andaddress.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
readwhen they were called by the semantic analyzer, which could lead to the external function call being eliminated spuriously. xermicus - Fixed a bug in
try-catchwhere 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()andrequire()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
addressorbytesN, in addition tobytes. seanyoung
- Go to definition is now implemented in the language server.
-
0.3.130 Jun 2023Release notes
Open source →Added
- Write environment configuration into Substrate metadata. xermicus
- Tornado cash as an exemplary integration test for Substrate chain extensions. xermicus
is_contractruntime API is available as a builtin for Substrate. xermicus- The
wasm-optoptimizer 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
syntaxtx.accounts.my_account. LucasSte delegatecall()builtin has been added for Substrate. xermicusget_contents_of_file_nofor Solang parser. BenTheKushset_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 @inheritdocnow 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
callanddeploydispatches on Substrate. xermicus
Changed
- Minimum Supported Rust Version (MSRV) is Rust
1.68. @payerannotation 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. }
Release notes
Open source →Added
- Write environment configuration into Substrate metadata. xermicus
- Tornado cash as an exemplary integration test for Substrate chain extensions. xermicus
is_contractruntime API is available as a builtin for Substrate. xermicus- The
wasm-optoptimizer 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 syntaxtx.accounts.my_account. LucasSte delegatecall()builtin has been added for Substrate. xermicusget_contents_of_file_nofor Solang parser. BenTheKushset_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 @inheritdocnow 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
callanddeploydispatches on Substrate. xermicus
Changed
- Minimum Supported Rust Version (MSRV) is Rust
1.68. @payerannotation 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. }
-
0.3.022 May 2023Release notes
Open source →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
--releaseoption, 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
storagereference, 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
Release notes
Open source →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
--releaseoption, 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
storagereference, 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
- The CLI now has a
-
0.2.406 Apr 2023Nothing published for this version
-
0.2.303 Mar 2023Release notes
Open source →Added
- The Solana units
solandlamportsare now supported, e.g.10 soland100 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
bytesNxermicus - 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-overflowcommand 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_nonceruntime 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
- The Solana units
-
0.2.210 Feb 2023Release notes
Open source →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.jsTypescript library is no longer compatible with Solidity. - When casting hex literal numbers into the
bytesNtype, the hex literal may use leading zeros to match the size with the accordingbytesN, which aligns solang withsolc. xermicus
Fixed
-
0.2.103 Jan 2023Release notes
Open source →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 syntaxselector=hex"12345678"has been removed. msg.senderwas not implemented correctly on Solana, and
has now been removed.
seanyoung- Solang now uses LLVM 14. LucasSte
Fixed
Release notes
Open source →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 syntaxselector=hex"12345678"has been removed. msg.senderwas not implemented correctly on Solana, and has now been removed. seanyoung- Solang now uses LLVM 14. LucasSte
Fixed
- The Anchor IDL data structure is now generated for every Solana contract, although the actual IDL json file is not yet saved.
-
0.2.002 Dec 2022Release notes
Open source →We are happy to release solang
v0.2.0codenamedBerlintoday. Aside from containing many small fixes and improvements, this release marks a milestone towards maturing our Substrate compilation target: Any regressions building up sinceink!v3.0 are fixed, most notably the metadata format (shoutout and many thanks to external contributor extraymond) and event topics. Furthermore, we are leavingink!version 3 behind us, in favor of introducing compatibility with the recentink!4 beta release and the latest substrate contract nodev0.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 idlwhich 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
Hashtype fromink!is the firstink!specific type made available for Solidity
contracts.
xermicus - Substrate: Introduce the
--log-api-return-codesCLI flag, which changes the
emitted code to print return codes forsealAPI 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
randombuiltin.
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 inink!.
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 byink!.
xermicus
Release notes
Open source →We are happy to release solang
v0.2.0codenamedBerlintoday. Aside from containing many small fixes and improvements, this release marks a milestone towards maturing our Substrate compilation target: any regressions building up sinceink!v3.0 are fixed, most notably the metadata format (shoutout and many thanks to external contributor extraymond) and event topics. Furthermore, we are leavingink!version 3 behind us, in favor of introducing compatibility with the recentink!4 beta release and the latest substrate contracts nodev0.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 idlwhich 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
Hashtype fromink!is the firstink!specific type made available for Solidity contracts. xermicus - Substrate: Introduce the
--log-api-return-codesCLI flag, which changes the emitted code to print return codes forsealAPI 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
randombuiltin. 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
- Solana / breaking: The try-catch construct is no longer permitted on Solana, as it
-
0.1.1816 Sep 2022Nothing published for this version
-
0.1.1702 Aug 2022Nothing published for this version
-
0.1.1604 Jul 2022Nothing published for this version
-
0.1.1503 Jul 2022Nothing published for this version
-
0.1.1409 Jun 2022Nothing published for this version
-
0.1.1313 May 2022Release notes
Open source →Changed
- Introduce sub-commands to the CLI. Now we have dedicated sub-commands for
compile,doc,shell-completionand thelanguage-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-completionsubcommand. xermicus - Add support for the
create_program_address()andtry_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 therequirestatements 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 theruntime::contracts=debuglog level is configured. xermicus
Fixed
- Introduce sub-commands to the CLI. Now we have dedicated sub-commands for
-
0.1.1216 Apr 2022Release notes
Open source →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 --recursiveto fetch the test files, and then run the test withcargo test --workspace.
-
0.1.1103 Apr 2022Release notes
Open source →Added
- Added support for Solidity user types
- Support
usingsyntax 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
--importand--importmaparguments - 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
-
0.1.1002 Mar 2022Release notes
Open source →Added
- On Solana, the accounts that were passed into the transactions are listed in
the
tx.accountsbuiltin. There is also a builtin structAccountInfo - 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.
- On Solana, the accounts that were passed into the transactions are listed in
the
-
0.1.211 Feb 2022Nothing published for this version
-
0.1.106 Jan 2022Nothing published for this version
-
0.1.031 Dec 2021Nothing published for this version