Skip to content

Elementrem Solidity Programming Language 0.4.10

Compare
Choose a tag to compare
@elementrem elementrem released this 06 Apr 20:25
· 7 commits to master since this release

Features:

  • Inline assembly: support both suicide and selfdestruct opcodes
  • Inline assembly: issue warning if stack is not balanced after block.
  • Include keccak256() as an alias to sha3().
  • Support shifting constant numbers.
  • Do-while loops: support for a do while (); control structure
  • Inline assembly: support invalidJumpLabel as a jump label.
  • Type checker: now more eagerly searches for a common type of an inline array with mixed types
  • Code generator: generates a runtime error when an out-of-range value is converted into an enum type.
  • Type checker: Warn when msg.value is used in non-payable function.
  • Code generator: Inject the Swarm hash of a metadata file into the bytecode.
  • Code generator: Replace expensive memcpy precompile by simple assembly loop.
  • Optimizer: Some dead code elimination.
  • Optimiser: Performance improvements.
  • Output: Print assembly in new standardized Solidity assembly format.
  • Compiler interface: Contracts and libraries can be referenced with a file: prefix to make them unique.
  • Compiler interface: Report source location for "stack too deep" errors.
  • AST: Use deterministic node identifiers.
  • Inline assembly: introduce invalid (EIP141) as an opcode.
  • Type system: Introduce type identifier strings.
  • Type checker: Warn about invalid checksum for addresses and deduce type from valid ones.
  • Metadata: Do not include platform in the version number.
  • Metadata: Add option to store sources as literal content.
  • Code generator: Extract array utils into low-level functions.
  • Code generator: Internal errors (array out of bounds, etc.) now cause a reversion by using an invalid
  • instruction (0xfe - EIP141) instead of an invalid jump. Invalid jump is still kept for explicit throws.
  • Add assert(condition), which throws if condition is false (meant for internal errors).
  • Add require(condition), which throws if condition is false (meant for invalid input).
  • Commandline interface: Do not overwrite files unless forced.
  • Introduce .transfer(value) for sending Ether.
  • Code generator: Support revert() to abort with rolling back, but not consuming all gas.
  • Inline assembly: Support revert (EIP140) as an opcode.
  • Parser: Support scientific notation in numbers (e.g. 2e8 and 200e-2).
  • Type system: Support explicit conversion of external function to address.
  • Type system: Warn if base of exponentiation is literal (result type might be unexpected).
  • Type system: Warn if constant state variables are not compile-time constants.

Fixes:

  • Commandline interface: Disallow unknown options in solc.
  • Name resolver: Allow inheritance of enum definitions.
  • Type checker: Proper type checking for bound functions.
  • Type checker: fixed crash related to invalid fixed point constants
  • Type checker: fixed crash related to invalid literal numbers.
  • Type checker: super.x does not look up x in the current contract.
  • Code generator: expect zero stack increase after super as an expression.
  • Code generator: fix an internal compiler error for L.Foo for enum Foo defined in library L.
  • Code generator: allow inheritance of enum definitions.
  • Inline assembly: support the address opcode.
  • Inline assembly: fix parsing of assignment after a label.
  • Inline assembly: external variables of unsupported type (such as this, super, etc.) are properly detected as unusable.
  • Inline assembly: support variables within modifiers.
  • Optimizer: fix related to stale knowledge about SHA3 operations
  • Type checker: forbid signed exponential that led to an incorrect use of EXP opcode.
  • Code generator: properly clean higher order bytes before storing in storage.
  • Inline assembly: calculate stack height warning correctly even when local variables are used.
  • Code generator: check for value transfer in non-payable constructors.
  • Parser: disallow empty enum definitions.
  • Type checker: disallow conversion between different enum types.
  • Interface JSON: do not include trailing new line.
  • Code generator: throw if calling the identity precompile failed during memory (array) copying.
  • Type checker: string literals that are not valid UTF-8 cannot be converted to string type
  • Code generator: any non-zero value given as a boolean argument is now converted into 1.
  • AST Json Converter: replace VariableDefinitionStatement nodes with VariableDeclarationStatement
  • AST Json Converter: fix the camel case in ElementaryTypeNameExpression
  • AST Json Converter: replace public field with visibility in the function definition nodes
  • Remappings: Prefer longer context over longer prefix.
  • Type checker, code generator: enable access to events of base contracts' names.
  • Imports: import ".dir/a" is not a relative path. Relative paths begin with directory . or ...
  • Type checker: disallow inheritances of different kinds (e.g. a function and a modifier) of members of the same name
  • Code generator: Allow recursive structs.
  • Inline assembly: Disallow variables named like opcodes.
  • Type checker: Allow multiple events of the same name (but with different arities or argument types)
  • Natspec parser: Fix error with @param parsing and whitespace.
  • Commandline interface: Always escape filenames (replace /, : and . with _).
  • Commandline interface: Do not try creating paths . and ...
  • Commandline interface: Allow long library names.
  • Parser: Disallow octal literals.
  • Type system: Fix a crash caused by continuing on fatal errors in the code.
  • Type system: Disallow compound assignment for tuples.
  • Type system: Detect cyclic dependencies between constants.
  • Type system: Disallow arrays with negative length.
  • Type system: Fix a crash related to invalid binary operators.
  • Type system: Disallow var declaration with empty tuple type.
  • Type system: Correctly convert function argument types to pointers for member functions.
  • Type system: Move privateness of constructor into AST itself.
  • Inline assembly: Charge one stack slot for non-value types during analysis.
  • Assembly output: Print source location before the operation it refers to instead of after.
  • Optimizer: Stop trying to optimize tricky constants after a while.

Binary install step by step (Ubuntu Xenial 16.04)

  • Download and extract the following files.
    Elementrem-Solidity-0.4.10.tar.gz
    Elementrem-solidity-dependencies(0.4.10).tar.gz
  1. Move the bin, lib, and share directories to the /usr directory.
  2. Install the following dependencies: (You can find it at the release of https://github.com/elementrem/solidity.)
	sudo dpkg -i libboost-program-options1.58.0_1.58.0+dfsg-5ubuntu3_amd64.deb
	sudo dpkg -i libjsoncpp1_1.7.2-1_amd64.deb
	sudo dpkg -i libboost-system1.58.0_1.58.0+dfsg-5ubuntu3_amd64.deb
	sudo dpkg -i libboost-filesystem1.58.0_1.58.0+dfsg-5ubuntu3_amd64.deb
	sudo apt-get -y install libboost-filesystem-dev
	sudo dpkg -i libboost-filesystem-dev_1.58.0.1ubuntu1_amd64.deb
  1. In gele console
> admin.setSolc("/usr/bin/solc")
"solc, the solidity compiler commandline interface\nVersion: 0.4.10-develop.2017.4.4+commit.63bb23e8.mod.Linux.g++\n\npath: /usr/bin/solc"
> ele.getCompilers()
["Solidity"]