Skip to content

Releases: hyperledger-solang/solang

v0.3.3: Atlantis

26 Oct 15:26
8a9ae7c
Compare
Choose a tag to compare

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

v0.3.2 Brasília (#1496)

24 Aug 10:01
3514264
Compare
Choose a tag to compare

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

v0.3.1 Göttingen

30 Jun 17:46
002954d
Compare
Choose a tag to compare

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.
    }
    

v0.3.0 Venice (#1319)

22 May 20:35
53172f3
Compare
Choose a tag to compare

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

Geneva

06 Apr 18:07
a47fe3f
Compare
Choose a tag to compare

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 it's 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

Alexandria

20 Feb 18:18
2e2e50a
Compare
Choose a tag to compare

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

V0.2.1: Rio

06 Jan 09:37
c444707
Compare
Choose a tag to compare

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

v0.2.0: Berlin

02 Dec 22:00
v0.2.0
1aa5263
Compare
Choose a tag to compare

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

v0.1.13: Genoa

16 Sep 21:08
409e42f
Compare
Choose a tag to compare

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 overriden 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

Signed-off-by: Sean Young sean@mess.org

v0.1.12: Cairo Release

09 Jun 08:25
ef350be
Compare
Choose a tag to compare

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.