Elementrem Solidity Programming Language 0.4.10
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
- Move the
bin, lib, and share
directories to the/usr
directory. - 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
- 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"]
- You can build the source directly without using binaries.
Build from source