Note: Version 0.4.0 is unable to compile libraries. Please upgrade to 0.4.1. This release deliberately breaks backwards compatibility mostly to enforce some safety features. The most important change is that you have to explicitly specify if functions can receive ether via the payable modifier. Furthermore, more situations cause exceptions to be thrown. Minimal changes to be made for upgrade: Add payable to all functions that want to receive Ether (including the constructor and the fallback function). Change _ to _;...
[Read More]
Dev Update: Formal Methods
This post was originally published on the Ethereum blog. Today, I am delighted to announce that Yoichi Hirai (@pirapira on github) is joining the Ethereum project as a formal verification engineer. He holds a PhD from the University of Tokyo on the topic of formalizing communicating parallel processes and created formal verification tools for Ethereum in his spare time. In his own words: I’m joining Ethereum as a formal verification engineer. My reasoning: formal verification makes sense as a profession...
[Read More]
Solidity 0.3.6 Release Announcement
This is the first release from the new “solidity-standalone” repository. It does not have dependencies to cpp-ethereum anymore and can be built just from the solidity github repository. Note that the optimizer was disabled in some situations which could lead to larger (but correcter) code. Features: Formal verification: Take external effects on a contract into account. Type Checker: Warning about unused return value of low-level calls and send. Output: Source location and node id as part of AST output Output:...
[Read More]
Solidity 0.3.5 Release Announcement
Features:
Context-dependent path remappings (different modules can use the same library in different versions)
Bugfixes:
Type Checking: Dynamic return types were removed when fetching data from external calls, now they are replaced by an “unusable” type.
Type Checking: Overrides by constructors were considered making a function non-abstract.
A big thank you to all contributors who helped make this release possible!
Download the new version of Solidity here.
Smart Contract Security
This post was originally published on the Ethereum blog. Solidity was started in October 2014 when neither the Ethereum network nor the virtual machine had any real-world testing, the gas costs at that time were even drastically different from what they are now. Furthermore, some of the early design decisions were taken over from Serpent. During the last couple of months, examples and patterns that were initially considered best-practice were exposed to reality and some of them actually turned out...
[Read More]
Solidity 0.3.4 Release Announcement
This release contains no changes outside of the documentation.
A big thank you to all contributors who helped make this release possible!
Download the new version of Solidity here.
Solidity 0.3.3 Release Announcement
This release mainly makes libraries more flexible in that it allows internal functions to be called. Features Allow internal library functions to be called (by “inlining”) Fractional/rational constants (only usable with fixed point types, which are still in progress) Inline assembly has access to internal functions (as jump labels) Running solc without arguments on a terminal will print help. Fixes Code Generation: Remove some non-determinism in code generation. Code Generation: Corrected usage of not / bnot / iszero in inline...
[Read More]
Solidity 0.3.2 Release Announcement
This is mainly a bugfix release. Under the hood, we are in the process of separating the Solidity source code from the rest of the cpp-ethereum source code so that it can soon be built (and released) in isolation. Fixes: Code generation: Dynamic arrays of structs were not deleted correctly. Code generation: Static arrays in constructor parameter list were not decoded correctly. Parser: Inline assembly parser: byte opcode was unusable Error reporting: tokens for variably-sized types were not converted to...
[Read More]
Solidity 0.3.1 Release Announcement
This release mainly introduces inline assembly (documentation). Inline assembly provides a way to write low-level but still well readable code. Together with the coming features of inline library functions and templates, it allows to move much of the development that had to be done in the compiler itself into libraries written in Solidity. In the future, it will be possible to introduce new versatile types that still look like builtins. Features: inline assembly Fixes: Code generation: array access with narrow...
[Read More]
Solidity 0.3.0 Release Announcement
This version is synchronized to the Homestead changes on the main Ethereum network and introduces various breaking changes. BREAKING CHANGES: You should not rely on division for literals resulting in a (truncated) integer. This is still the case but will change once we implement fixed point types, i.e. in the future 1/2 == 0.5 will be true, currently we have 1/2 == 0. Note that this only applies to literals ((2 + 7) / 2) and not variables (x /...
[Read More]