Skip to content

Merge develop into release for 0.5.6 #6269

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 111 commits into from
Mar 13, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
d70da68
Run external tests with and without optimizer.
chriseth Mar 5, 2019
a27ef34
Allow encoding and decoding functions with empty type list.
chriseth Mar 4, 2019
a370551
ossfuzz: Reduce test input size to less than equal to 600 bytes.
bshastry Mar 5, 2019
77c3352
Some missed entries and set version to 0.6.0.
chriseth Mar 5, 2019
bc7be64
Updates release checklist.
erak Mar 5, 2019
8d401ba
Update pragmas.
chriseth Mar 5, 2019
acfbc62
Merge pull request #6194 from ethereum/release-checklist-0.5.5
chriseth Mar 5, 2019
fb4a58c
Merge pull request #6191 from ethereum/ossfuzzreducetestinputsize
chriseth Mar 5, 2019
921d52b
Move Literal to u256 conversions to extra functions
Marenz Mar 5, 2019
a52b50d
libyul: Change assertThrow() to yulAssert()
Marenz Mar 5, 2019
f6e09d6
YulOpt: Extend StructuralSimplifier to work with all types
Marenz Mar 5, 2019
17adcca
Merge pull request #6192 from ethereum/prepare060
chriseth Mar 5, 2019
8db88e9
Merge pull request #6196 from ethereum/release
chriseth Mar 5, 2019
4740dc6
Merge pull request #6193 from ethereum/yul-opt-different-types-6181
chriseth Mar 5, 2019
f35694f
Run yul optimizer until it has no effect anymore.
chriseth Mar 4, 2019
d515d77
Extract utility functions from ABI encoder.
chriseth Mar 5, 2019
3f5b5fd
Begin polish to import docs
Feb 25, 2019
b2262d6
Remove unused variable Contractdefinition::m_linearizedBaseContracts
Marenz Feb 28, 2019
8d747ad
Add ErrorReporter::fatalTypeError() with secondary location
Marenz Mar 4, 2019
9052a8f
Move FunctionType::returnParameters() to CallableDeclaration
Marenz Mar 4, 2019
ee4beaf
Merge pull request #6153 from ethereum/docs-imports
chriseth Mar 6, 2019
9919670
Check base contracts for abi encoder compatibility
Marenz Mar 4, 2019
a2fe19c
Fix wrong formatting in ErrorReporter
Marenz Mar 5, 2019
e74f581
Add SMT type support to Solidity arrays
Feb 20, 2019
cb6c2b3
Add tests
Feb 20, 2019
467c349
Do not throw on string literals
Feb 20, 2019
297703b
Changelog entry
Feb 20, 2019
29b2ab6
Handle aliasing
Feb 21, 2019
54d0d15
Reduce input file size for solc and constant optimizer fuzzers.
bshastry Mar 6, 2019
831353c
Merge pull request #6172 from ethereum/runYulOptAsLongAsHelpful
chriseth Mar 6, 2019
449141d
Merge pull request #6190 from ethereum/allowEncodeDecodeWithZeroParam…
chriseth Mar 6, 2019
3059734
Merge pull request #6199 from ethereum/ossfuzzsolcreduceinputsize
chriseth Mar 6, 2019
dc69152
Merge pull request #6143 from ethereum/fix-unimplemented-assert-5659
chriseth Mar 6, 2019
6dcc368
Small polish to prgama docs
Feb 27, 2019
9193fcb
Merge pull request #6130 from ethereum/docs-pragma
chriseth Mar 6, 2019
ab31c28
Adds support for arrays in function signatures.
erak Mar 6, 2019
cdf2927
Merge pull request #6055 from ethereum/smt_arrays
chriseth Mar 6, 2019
f7c6eda
Allow calldata arrays with dynamically encoded base type.
ekpyron Feb 13, 2019
f9dc30c
Add generalized dynamic array encoding to ExecutionFramework.
ekpyron Mar 5, 2019
e3148b5
Tests for arrays with dynamically encoded base types.
ekpyron Mar 4, 2019
3ccf73b
Merge pull request #6204 from ethereum/soltest-signature-arrays
chriseth Mar 6, 2019
a40fbf0
Right-aligns hex numbers and introduces alignment built-ins.
erak Feb 28, 2019
db3bea7
Use reference for so we have to type less
Marenz Mar 5, 2019
433175b
YulOpt: Add comment about optimization
Marenz Mar 5, 2019
3ce7069
YulOpt: Remove empty cases
Marenz Mar 5, 2019
08146c7
Merge pull request #6197 from ethereum/yul-opt-switch-rem-6189
chriseth Mar 6, 2019
be52aa3
YulOpt: Move if-branches into functions
Marenz Mar 6, 2019
21322da
YulOpt: Remove empty cases
Marenz Mar 6, 2019
281c04c
Merge pull request #6206 from ethereum/switchSimplifierFix
chriseth Mar 6, 2019
21115f8
Fix visitation order bug for structural simplifier.
chriseth Mar 6, 2019
0f7b1b3
Merge pull request #5996 from ethereum/calldataArrays
chriseth Mar 6, 2019
0f336f3
Merge pull request #6207 from ethereum/fixStructuralVisitationOrder
chriseth Mar 6, 2019
aa06222
Tabs, not spaces!
chriseth Mar 6, 2019
791fde9
First simplify switch with known constant expression.
chriseth Mar 6, 2019
553f578
Fix compilation error.
chriseth Mar 6, 2019
f0a3a56
Merge pull request #6208 from ethereum/simplifyConstantSwitchFirst
chriseth Mar 6, 2019
8d9be8b
Merge pull request #6211 from ethereum/fixFormatting
chriseth Mar 6, 2019
7241aa7
Merge pull request #6186 from ethereum/runExternalTestsWithOptimizer
chriseth Mar 7, 2019
02d0e60
[SMTChecker] Support enums
Mar 6, 2019
c753b6b
Merge pull request #6198 from ethereum/smt_enum
chriseth Mar 7, 2019
e0d1b2f
Peephole optimizer for "iszero iszero <tag> jumpi".
chriseth Mar 6, 2019
0eb7994
Merge pull request #6183 from ethereum/soltest-alignment
chriseth Mar 7, 2019
8b20ecb
Refactor StandardCompiler to split into input parsing/validating and …
chriseth Mar 7, 2019
e466935
Merge pull request #6219 from ethereum/refactorStandardCompiler
chriseth Mar 7, 2019
5c4a3aa
Merge pull request #6213 from ethereum/iszeroJump
chriseth Mar 7, 2019
4d8c570
Merge pull request #6195 from ethereum/extractYulUtils
chriseth Mar 7, 2019
f11f6ab
Add mention of high s
Mar 6, 2019
12f34c8
Add onlyMetadata helper in test/Metadata
axic Feb 5, 2019
a8209e9
[SMTChecker] Shortcut RationalNumber expressions
Mar 11, 2019
61220eb
Add tiny CBOR parser
axic Mar 4, 2019
67c15a2
Use CBOR parser in metadata tests
axic Mar 5, 2019
13bb9b6
Merge pull request #6200 from ethereum/docs-high-s
chriseth Mar 11, 2019
4704ef8
Merge pull request #6235 from ethereum/smt_large_rational
chriseth Mar 11, 2019
dce8469
Fix wrong error concatenation
Marenz Mar 11, 2019
d70cb37
isImplicitlyConvertibleTo(): Add better error messages
Marenz Mar 11, 2019
365b59b
Add MerkleProof test that used to crash
Mar 11, 2019
6718b62
Merge pull request #6233 from ethereum/metadata-tests
axic Mar 11, 2019
cd9c091
Allows struct array in soltest function.
erak Mar 7, 2019
ba56c30
Reset version to 0.5.6.
chriseth Mar 11, 2019
0f98f2a
Merge pull request #6236 from ethereum/better-errors
chriseth Mar 11, 2019
05e2d36
[Yul] Adds break/continue statements and some general tests for for-l…
Mar 4, 2019
859f905
Merge pull request #6237 from ethereum/smt_merkle_proof_test
axic Mar 11, 2019
f805939
Merge pull request #6221 from ethereum/soltest-signature-struct-arrays
ekpyron Mar 11, 2019
189983a
Merge pull request #6238 from ethereum/reset-version
axic Mar 11, 2019
e411a50
Fix missing trailing dot in error message
Marenz Mar 11, 2019
fbbd03d
Exclude internal functions in library ABIs
Marenz Mar 5, 2019
66fc7ff
Allow dynamically encoded calldata structs with ABIEncoderV2.
ekpyron Mar 6, 2019
e277632
Merge pull request #6240 from ethereum/fix-error
chriseth Mar 11, 2019
6683ec9
Merge pull request #6209 from ethereum/dynamicCalldataStructs
chriseth Mar 11, 2019
8445449
Merge pull request #6187 from ethereum/filter-library-abi-3409
chriseth Mar 11, 2019
cfefa2c
Merge pull request #6136 from ethereum/yul-break-continue
christianparpart Mar 11, 2019
243096f
Changelog cleanup.
chriseth Mar 12, 2019
62d8080
Update optimiser readme.
chriseth Mar 6, 2019
18c5309
Merge pull request #6203 from ethereum/updateOptimiserReadme
chriseth Mar 12, 2019
2f37cd0
Merge pull request #6250 from ethereum/cleanupChangelog
chriseth Mar 12, 2019
39c45ac
Moves ecrecover tests to isoltest.
erak Feb 28, 2019
f0f9f5e
Clarify shift operator
Feb 25, 2019
515fa87
Fixes u256 overflow in logical shift optimization rule and adds tests.
bshastry Mar 12, 2019
d977815
Merge pull request #6184 from ethereum/soltest-extract-ecrecover
chriseth Mar 13, 2019
9ccd5df
Merge pull request #6083 from ethereum/docs-shift-clarify
chriseth Mar 13, 2019
571f400
Complete the GT/LT rules.
chriseth Mar 13, 2019
920f752
Add mention of docs testing to contribution docs
Mar 13, 2019
58a3f3c
Merge pull request #6248 from ethereum/shiftopt-fix-overflow
chriseth Mar 13, 2019
addb360
Prepare 0.5.6 release.
chriseth Mar 13, 2019
4c1a9aa
Merge pull request #6256 from ethereum/completeLtGtRules
chriseth Mar 13, 2019
9c9053d
Merge pull request #6257 from ethereum/docs-testing
chriseth Mar 13, 2019
25ddf85
Adds support for hex string literals in soltest.
erak Feb 25, 2019
b29bb6c
Merge pull request #6258 from ethereum/prepare056
christianparpart Mar 13, 2019
2896d61
Merge pull request #6120 from ethereum/soltest-hex-strings
chriseth Mar 13, 2019
55c66b0
Fix gas costs.
chriseth Mar 13, 2019
d17ad81
Merge pull request #6260 from ethereum/fixGasCosts
chriseth Mar 13, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ include(EthPolicy)
eth_policy()

# project name and version should be set after cmake_policy CMP0048
set(PROJECT_VERSION "0.5.5")
set(PROJECT_VERSION "0.5.6")
project(solidity VERSION ${PROJECT_VERSION} LANGUAGES CXX)

option(LLL "Build LLL" OFF)
Expand Down
35 changes: 35 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,35 @@
### 0.5.6 (2019-03-13)

Important Bugfixes:
* Yul Optimizer: Fix visitation order bug for the structural simplifier.
* Optimizer: Fix overflow in optimization rule that simplifies double shift by constant.

Language Features:
* Allow calldata arrays with dynamically encoded base types with ABIEncoderV2.
* Allow dynamically encoded calldata structs with ABIEncoderV2.


Compiler Features:
* Optimizer: Add rules for ``lt``-comparisons with constants.
* Peephole Optimizer: Remove double ``iszero`` before ``jumpi``.
* SMTChecker: Support enums without typecast.
* SMTChecker: Support one-dimensional arrays.
* Type Checker: Provide better error messages for some literal conversions.
* Yul Optimizer: Add rule to remove empty default switch cases.
* Yul Optimizer: Add rule to remove empty cases if no default exists.
* Yul Optimizer: Add rule to replace a switch with no cases with ``pop(expression)``.


Bugfixes:
* JSON ABI: Json description of library ABIs no longer contains functions with internal types like storage structs.
* SMTChecker: Fix internal compiler error when contract contains too large rational number.
* Type system: Detect if a contract's base uses types that require the experimental abi encoder while the contract still uses the old encoder.


Build System:
* Soltest: Add support for arrays in function signatures.
* Soltest: Add support for struct arrays in function signatures.

### 0.5.5 (2019-03-05)

Language Features:
Expand All @@ -7,10 +39,12 @@ Language Features:

Compiler Features:
* Support ``petersburg`` as ``evmVersion`` and set as default.
* Commandline Interface: Option to activate the experimental yul optimizer using ``-optimize-yul``.
* Inline Assembly: Consider ``extcodehash`` as part of Constantinople.
* Inline Assembly: Instructions unavailable to the currently configured EVM are errors now.
* SMTChecker: Do not report underflow/overflow if they always revert. This removes false positives when using ``SafeMath``.
* Standard JSON Interface: Allow retrieving metadata without triggering bytecode generation.
* Standard JSON Interface: Provide fine-grained control over the optimizer via the settings.
* Static Analyzer: Warn about expressions with custom types when they have no effect.
* Optimizer: Add new rules with constants including ``LT``, ``GT``, ``AND`` and ``BYTE``.
* Optimizer: Add rule for shifts with constants for Constantinople.
Expand All @@ -36,6 +70,7 @@ Bugfixes:

Build System:
* Soltest: Add support for left-aligned, padded hex literals.
* Soltest: Add support for left-aligned, unpadded hex string literals.
* Soltest: Add support for right-aligned, padded boolean literals.

### 0.5.4 (2019-02-12)
Expand Down
7 changes: 4 additions & 3 deletions ReleaseChecklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,15 @@
- [ ] Update the version and the hash (``sha256sum solidity_x.x.x.tar.gz``) in https://github.com/ethereum/homebrew-ethereum/blob/master/solidity.rb

### Documentation
- [ ] Update the default version on readthedocs.
- [ ] Build the new version on https://readthedocs.org/projects/solidity/ (select `latest` on the bottom of the page and click `BUILD`)
- [ ] In the admin panel, select `Versions` in the menu and set the default version to the released one.

### Release solc-js
- [ ] Increment the version number, create a pull request for that, merge it after tests succeeded.
- [ ] Run ``npm publish`` in the updated ``solc-js`` repository.
- [ ] Create a commit to increase the version number on ``develop`` in ``CMakeLists.txt`` and add a new skeleton changelog entry.
- [ ] Merge ``release`` back into ``develop``.

### Post-release
- [ ] Create a commit to increase the version number on ``develop`` in ``CMakeLists.txt`` and add a new skeleton changelog entry.
- [ ] Merge ``release`` back into ``develop``.
- [ ] Announce on Twitter and Reddit.
- [ ] Lean back, wait for bug reports and repeat from step 1 :)
8 changes: 4 additions & 4 deletions docs/050-breaking-changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ This will no longer compile with Solidity v0.5.0. However, you can define a comp

::

pragma solidity ^0.5.0;
pragma solidity >=0.5.0 <0.7.0;
interface OldContract {
function someOldFunction(uint8 a) external;
function anotherOldFunction() external returns (bool);
Expand All @@ -325,7 +325,7 @@ Given the interface defined above, you can now easily use the already deployed p

::

pragma solidity ^0.5.0;
pragma solidity >=0.5.0 <0.7.0;

interface OldContract {
function someOldFunction(uint8 a) external;
Expand All @@ -345,7 +345,7 @@ commandline compiler for linking):

::

pragma solidity ^0.5.0;
pragma solidity >=0.5.0 <0.7.0;

library OldLibrary {
function someFunction(uint8 a) public returns(bool);
Expand Down Expand Up @@ -430,7 +430,7 @@ New version:

::

pragma solidity ^0.5.0;
pragma solidity >=0.5.0 <0.7.0;

contract OtherContract {
uint x;
Expand Down
6 changes: 3 additions & 3 deletions docs/abi-spec.rst
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ Given the contract:

::

pragma solidity >=0.4.16 <0.6.0;
pragma solidity >=0.4.16 <0.7.0;

contract Foo {
function bar(bytes3[2] memory) public pure {}
Expand Down Expand Up @@ -483,7 +483,7 @@ For example,

::

pragma solidity ^0.5.0;
pragma solidity >=0.5.0 <0.7.0;

contract Test {
constructor() public { b = hex"12345678901234567890123456789012"; }
Expand Down Expand Up @@ -530,7 +530,7 @@ As an example, the code

::

pragma solidity >=0.4.19 <0.6.0;
pragma solidity >=0.4.19 <0.7.0;
pragma experimental ABIEncoderV2;

contract Test {
Expand Down
10 changes: 5 additions & 5 deletions docs/assembly.rst
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ idea is that assembly libraries will be used to enhance the Solidity language.

.. code::

pragma solidity >=0.4.0 <0.6.0;
pragma solidity >=0.4.0 <0.7.0;

library GetCode {
function at(address _addr) public view returns (bytes memory o_code) {
Expand All @@ -101,7 +101,7 @@ efficient code, for example:

.. code::

pragma solidity >=0.4.16 <0.6.0;
pragma solidity >=0.4.16 <0.7.0;

library VectorSum {
// This function is less efficient because the optimizer currently fails to
Expand Down Expand Up @@ -394,7 +394,7 @@ Local Solidity variables are available for assignments, for example:

.. code::

pragma solidity >=0.4.11 <0.6.0;
pragma solidity >=0.4.11 <0.7.0;

contract C {
uint b;
Expand Down Expand Up @@ -433,7 +433,7 @@ be just ``0``, but it can also be a complex functional-style expression.

.. code::

pragma solidity >=0.4.16 <0.6.0;
pragma solidity >=0.4.16 <0.7.0;

contract C {
function f(uint x) public view returns (uint b) {
Expand Down Expand Up @@ -690,7 +690,7 @@ Example:
We will follow an example compilation from Solidity to assembly.
We consider the runtime bytecode of the following Solidity program::

pragma solidity >=0.4.16 <0.6.0;
pragma solidity >=0.4.16 <0.7.0;

contract C {
function f(uint x) public pure returns (uint y) {
Expand Down
12 changes: 12 additions & 0 deletions docs/bugs.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
[
{
"name": "DoubleShiftSizeOverflow",
"summary": "Double bitwise shifts by large constants whose sum overflows 256 bits can result in unexpected values.",
"description": "Nested logical shift operations whose total shift size is 2**256 or more are incorrectly optimized. This only applies to shifts by numbers of bits that are compile-time constant expressions.",
"introduced": "0.5.5",
"fixed": "0.5.6",
"severity": "low",
"conditions": {
"optimizer": true,
"evmVersion": ">=constantinople"
}
},
{
"name": "ExpExponentCleanup",
"summary": "Using the ** operator with an exponent of type shorter than 256 bits can result in unexpected values.",
Expand Down
10 changes: 8 additions & 2 deletions docs/bugs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,15 @@ severity
discoverability in contract tests, likelihood of occurrence and
potential damage by exploits.
conditions
Conditions that have to be met to trigger the bug. Currently, this
is an object that can contain a boolean value ``optimizer``, which
Conditions that have to be met to trigger the bug. The following
keys can be used:
``optimizer``, Boolean value which
means that the optimizer has to be switched on to enable the bug.
``evmVersion``, a string that indicates which EVM version compiler
settings trigger the bug. The string can contain comparison
operators. For example, ``">=constantinople"`` means that the bug
is present when the EVM version is set to ``constantinople`` or
later.
If no conditions are given, assume that the bug is present.
check
This field contains different checks that report whether the smart contract
Expand Down
8 changes: 7 additions & 1 deletion docs/bugs_by_version.json
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,13 @@
"released": "2019-02-12"
},
"0.5.5": {
"bugs": [],
"bugs": [
"DoubleShiftSizeOverflow"
],
"released": "2019-03-05"
},
"0.5.6": {
"bugs": [],
"released": "2019-03-13"
}
}
8 changes: 4 additions & 4 deletions docs/common-patterns.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ become the new richest.

::

pragma solidity ^0.5.0;
pragma solidity >=0.5.0 <0.7.0;

contract WithdrawalContract {
address public richest;
Expand Down Expand Up @@ -65,7 +65,7 @@ This is as opposed to the more intuitive sending pattern:

::

pragma solidity ^0.5.0;
pragma solidity >=0.5.0 <0.7.0;

contract SendContract {
address payable public richest;
Expand Down Expand Up @@ -130,7 +130,7 @@ restrictions highly readable.

::

pragma solidity >=0.4.22 <0.6.0;
pragma solidity >=0.4.22 <0.7.0;

contract AccessRestriction {
// These will be assigned at the construction
Expand Down Expand Up @@ -282,7 +282,7 @@ function finishes.

::

pragma solidity >=0.4.22 <0.6.0;
pragma solidity >=0.4.22 <0.7.0;

contract StateMachine {
enum Stages {
Expand Down
4 changes: 2 additions & 2 deletions docs/contracts/abstract-contracts.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ Abstract Contracts

Contracts are marked as abstract when at least one of their functions lacks an implementation as in the following example (note that the function declaration header is terminated by ``;``)::

pragma solidity >=0.4.0 <0.6.0;
pragma solidity >=0.4.0 <0.7.0;

contract Feline {
function utterance() public returns (bytes32);
}

Such contracts cannot be compiled (even if they contain implemented functions alongside non-implemented functions), but they can be used as base contracts::

pragma solidity >=0.4.0 <0.6.0;
pragma solidity >=0.4.0 <0.7.0;

contract Feline {
function utterance() public returns (bytes32);
Expand Down
2 changes: 1 addition & 1 deletion docs/contracts/constant-state-variables.rst
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ value types and strings.

::

pragma solidity >=0.4.0 <0.6.0;
pragma solidity >=0.4.0 <0.7.0;

contract C {
uint constant x = 32**22 + 8;
Expand Down
2 changes: 1 addition & 1 deletion docs/contracts/creating-contracts.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ This means that cyclic creation dependencies are impossible.

::

pragma solidity >=0.4.22 <0.6.0;
pragma solidity >=0.4.22 <0.7.0;

contract OwnedToken {
// `TokenCreator` is a contract type that is defined below.
Expand Down
4 changes: 2 additions & 2 deletions docs/contracts/events.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ not possible to filter for specific anonymous events by name.

::

pragma solidity >=0.4.21 <0.6.0;
pragma solidity >=0.4.21 <0.7.0;

contract ClientReceipt {
event Deposit(
Expand Down Expand Up @@ -136,7 +136,7 @@ as topics. The event call above can be performed in the same way as

::

pragma solidity >=0.4.10 <0.6.0;
pragma solidity >=0.4.10 <0.7.0;

contract C {
function f() public payable {
Expand Down
2 changes: 1 addition & 1 deletion docs/contracts/function-modifiers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ inheritable properties of contracts and may be overridden by derived contracts.

::

pragma solidity ^0.5.0;
pragma solidity >=0.5.0 <0.7.0;

contract owned {
constructor() public { owner = msg.sender; }
Expand Down
Loading