SOLL Versions Save

SOLL is a new compiler for generate Ewasm from solidity and yul. See a demo here: https://asciinema.org/a/ezJqNLicn5fya02zwu4VXIo8a

0.1.1

3 years ago

0.1.1 (2020-07-24)

Dependencies:

  • Update llvm from 8 to 10
  • Update pre-built docker images

0.1.0

4 years ago

0.1.0 (2020-04-29)

Language Features:

  • Solidity:
    • Support abi.encode and abi.encodePacked. (including array type) [Experimental]

Compiler Features:

  • Support optimization options:
    • --O0: Disable optimizations
    • --O1: Enable trivial optimizations
    • --O2: Enable default optimizations
    • --O3: Enable expensive optimizations
    • --Os: Enable default optimizations for size
    • --Oz: Enable expensive optimizations for size
  • Support EVM backend via EVM_LLVM 8
    • In current stage, SOLL will generate LLVM IR for EVM backend target only.
    • Developers should use generated LLVM IR files and compile them with llc from EVM_LLVM 8 to get EVM bytecodes.
    • Disable integer lowering when using EVM backend. Only allow 256 bits integer type.

Bugfixes:

  • Fix bad APInt trunc in parser
  • Fix bad array size and index trunc in codegen
  • Fix syntax error on revert() and array access

0.0.6

4 years ago

0.0.6 (2020-03-31)

Language Features:

  • Solidity:
    • Support abi.encode and abi.encodePacked. (excluding array type)
    • Support fallback keyword. (solidity spec >= 0.6.0)
    • Support struct decleration. (with limited members’ types)
  • Yul:
    • Support tuple usage.
      • return, declaration, assignment
    • Support built-in functions.
      • return, revert
      • log0, log1, log2, log3, log4
      • blockcoinbase, blockdifficulty, blockgaslimit
      • blocknumber, blocktimestamp, txorigin, txgasprice, gasleft
      • caller, callvalue, calldatasize
      • codecopy, datacopy
      • datasize, dataoffset (limitation: couldn't be used apply on object itself)
    • Support leave statement. (Yul spec >= 0.6.0)
    • Support generate and deploy ewasm from Yul file. (Yul file was compiled from solc)

Compiler Features:

  • Diagnostic Tool:
    • Throw error messages for unimplemented features:
      • Redefine constructor or fallback function.
    • Add color on/off option.
  • Add command-line action options for distinguishing generate ewasm could be deployed on-chain or normal case.
    • -deploy=Chain: Ewasm VM (Hera) not support keccak256 yet, so for workaround use sha256 instead. (Default)
    • -deploy=Normal: Normal behavior.
  • Add command-line action options for generating object files.
    • -action=EmitAssembly: Emit a .s file.
    • -action=EmitBC: Emit a .bc file.
    • -action=EmitLLVM: Emit a .bc file.
    • -action=EmitLLVMOnly: Generate LLVM IR, but do not emit anything.
    • -action=EmitCodeGenOnly: Generate machine code, but don't emit anything.
    • -action=EmitObj: Emit a .o file.
    • -action=EmitWasm: Emit a .wasm file.
  • Add command-line action options for misc.
    • -action=ParseSyntaxOnly: Parse and perform semantic analysis.

Bugfixes:

  • Add ImplicitCastExpr on return statement.
  • Fix mismatch EEI functions blockhash.
  • Keep full event signature as topic 0 field when emitting event.
  • Fix built-in function minor issues:
    • iszero, shl, shr, sar
  • Remove unexpected message when soll -action=EmitFuncSig.
  • Remove redundant slot access when load/store storage with bytes and string.

0.0.5

4 years ago

0.0.5 (2020-01-18)

Language Features:

  • Common:
    • Support big number literal (> uint64)
  • Solidity:
    • Support built-in units:
      • ether, finney, szabo, wei
      • weeks, days, hours, minutes, seconds
    • Replace keccak256 and sha256 with sha3 for EVM backend.
    • Implement exponentiation operator.
    • Support this to access member functions in the same contract.
  • Yul:
    • Support switch statement.
    • Support function definition.
    • Implement scoping logic and delay identifier lookup
    • Support alias operators:
      • slt -> lts256
      • sgt -> gts256
      • sdiv -> divs256
    • Handle memory relative mechanism:
      • Use global variable to record memory size.
      • Use __heap_size as memory offset.
      • Add helper functions to increase memory usage.
    • Implement built-in functions:
      • calldataload
      • mload, mstore, mstore8, msize
      • exp
  • Diagnostic Tool:
    • Throw error messages for unimplemented features:
      • Constructor doesn’t support parameters. SOLL only accept constructor without any parameters.
      • SOLL doesn’t support array.push, array.pop
    • Terminate codegen when error occurs

Bugfixes:

  • Hex number literal:
    • Support hex number literal (0x...)
  • <address>.balance should return uint256 instead of uint128.
  • Reduce some useless endian transformation.
  • Fix mismatch EEI functions:
    • <address>.balance, <address>.send, blockhash

0.0.4

4 years ago

0.0.4 (2019-12-25)

Language Features:

  • Support limited Yul language. See details here.
    • Basic arithmetical, compare, sstore and sload built-in functions.
    • For loop, If, Var declare and Assignment statements.

Compiler Features:

  • Add command-line version option for checking current SOLL version.
    • -version
  • Add command-line language options for supporting Yul input file.
    • -lang=Sol: Input file is written in Solidity. (Default)
    • -lang=Yul: Input file is written in Yul.
  • Add testing framework for unittest and regrasion test.
  • Integrate Solidity compilation test and libyul test from ethereum/solidity.

Regression Test:

  • Solidity test suite (Total 66 tests from compilationTests):
Expected Passes    : 10 # Solidity has 66 testing contract, and SOLL can pass 10.
Unsupported Tests  : 56 # Unimplemented by SOLL
Pass Rate: 15%
  • Yul test suite (Total 499 tests from libyul):
Expected Passes    : 63  # libyul has 499 testing contracts, and SOLL can pass 63.
Unsupported Tests  : 436 # Unimplemented by SOLL
Pass Rate: 13%

0.0.3

4 years ago

0.0.3 (2019-11-19)

Language Features:

  • Support partial builtin global variable
    • msg.sender, msg.value, msg.data.
    • tx.gasprice, tx.origin.
    • block.coinbase, block.difficulty, block.gaslimit, block.number, block.timestamp.
  • Support Constructor, Fallback function.
  • Support Event mechanism.
  • Support Payable mechanism.
  • Support dynamic type. (Bytes/String)

Compiler Features:

  • Be able to generate deployable Ewasm files.
  • Support diagnostic message.
  • Add command-line options for generating metadata of Solidity contracts.
    • EmitABI: Generate ABI
    • EmitFuncSig: Generate function signatures
  • Support EVM1 bytecode target. (Depends on EVM_LLVM)

Bugfixes:

  • Fix an endian issue that happened when someone calls the EEI function from wasm.
  • Fix a parsing issue on array type.

0.0.3-pre

4 years ago

0.0.3-pre

This is a prerelease version of SOLL 0.0.3.

Backend

  • Support EVM target via EVM_LLVM project.
  • Replace EEI runtime with EVM builtin intrinsic functions.
  • Provide two phases compilation to generate Ewasm runtime and deployer bytecode.

Language Feature

  • Handle event declarations, emit event.
  • Handle constructor declaration