Эх сурвалжийг харах

Release v2.1.0 solc 0.5.x (#1568)

* Now compiling in a separate directory using truffle 5.

* Ported to 0.5.1, now compiling using 0.5.1.

* test now also compiles using the truffle 5 hack.

* Downgraded to 0.5.0.

* Sorted scripts.

* Cleaned up the compile script a bit.
Nicolás Venturo 6 жил өмнө
parent
commit
be5ed7364b
100 өөрчлөгдсөн 189 нэмэгдсэн , 184 устгасан
  1. 3 0
      .gitignore
  2. 1 1
      contracts/access/Roles.sol
  3. 1 1
      contracts/access/roles/CapperRole.sol
  4. 1 1
      contracts/access/roles/MinterRole.sol
  5. 1 1
      contracts/access/roles/PauserRole.sol
  6. 1 1
      contracts/access/roles/SignerRole.sol
  7. 1 1
      contracts/access/roles/WhitelistedRole.sol
  8. 1 1
      contracts/access/roles/WhitelisterRole.sol
  9. 5 5
      contracts/crowdsale/Crowdsale.sol
  10. 1 1
      contracts/crowdsale/distribution/FinalizableCrowdsale.sol
  11. 1 1
      contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol
  12. 2 2
      contracts/crowdsale/distribution/RefundableCrowdsale.sol
  13. 1 1
      contracts/crowdsale/distribution/RefundablePostDeliveryCrowdsale.sol
  14. 2 2
      contracts/crowdsale/emission/AllowanceCrowdsale.sol
  15. 1 1
      contracts/crowdsale/emission/MintedCrowdsale.sol
  16. 1 1
      contracts/crowdsale/price/IncreasingPriceCrowdsale.sol
  17. 1 1
      contracts/crowdsale/validation/CappedCrowdsale.sol
  18. 1 1
      contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol
  19. 1 1
      contracts/crowdsale/validation/PausableCrowdsale.sol
  20. 1 1
      contracts/crowdsale/validation/TimedCrowdsale.sol
  21. 1 1
      contracts/crowdsale/validation/WhitelistCrowdsale.sol
  22. 2 2
      contracts/cryptography/ECDSA.sol
  23. 2 2
      contracts/cryptography/MerkleProof.sol
  24. 1 1
      contracts/drafts/Counter.sol
  25. 4 4
      contracts/drafts/ERC1046/TokenMetadata.sol
  26. 7 7
      contracts/drafts/ERC20Migrator.sol
  27. 8 8
      contracts/drafts/SignatureBouncer.sol
  28. 9 9
      contracts/drafts/TokenVesting.sol
  29. 2 2
      contracts/examples/SampleCrowdsale.sol
  30. 4 3
      contracts/examples/SimpleToken.sol
  31. 1 1
      contracts/introspection/ERC165.sol
  32. 2 2
      contracts/introspection/ERC165Checker.sol
  33. 1 1
      contracts/introspection/IERC165.sol
  34. 1 1
      contracts/lifecycle/Pausable.sol
  35. 1 1
      contracts/math/Math.sol
  36. 1 1
      contracts/math/SafeMath.sol
  37. 1 1
      contracts/mocks/Acknowledger.sol
  38. 1 1
      contracts/mocks/AddressImpl.sol
  39. 2 2
      contracts/mocks/AllowanceCrowdsaleImpl.sol
  40. 2 2
      contracts/mocks/ArraysImpl.sol
  41. 2 2
      contracts/mocks/CappedCrowdsaleImpl.sol
  42. 1 1
      contracts/mocks/CapperRoleMock.sol
  43. 1 1
      contracts/mocks/ConditionalEscrowMock.sol
  44. 2 2
      contracts/mocks/CounterImpl.sol
  45. 2 2
      contracts/mocks/CrowdsaleMock.sol
  46. 2 2
      contracts/mocks/DetailedERC20Mock.sol
  47. 2 2
      contracts/mocks/ECDSAMock.sol
  48. 2 2
      contracts/mocks/ERC165/ERC165InterfacesSupported.sol
  49. 1 1
      contracts/mocks/ERC165/ERC165NotSupported.sol
  50. 2 2
      contracts/mocks/ERC165CheckerMock.sol
  51. 1 1
      contracts/mocks/ERC165Mock.sol
  52. 1 1
      contracts/mocks/ERC20BurnableMock.sol
  53. 1 1
      contracts/mocks/ERC20MintableMock.sol
  54. 1 1
      contracts/mocks/ERC20Mock.sol
  55. 1 1
      contracts/mocks/ERC20PausableMock.sol
  56. 2 2
      contracts/mocks/ERC20WithMetadataMock.sol
  57. 3 3
      contracts/mocks/ERC721FullMock.sol
  58. 1 1
      contracts/mocks/ERC721MintableBurnableImpl.sol
  59. 1 1
      contracts/mocks/ERC721Mock.sol
  60. 1 1
      contracts/mocks/ERC721PausableMock.sol
  61. 2 2
      contracts/mocks/ERC721ReceiverMock.sol
  62. 6 6
      contracts/mocks/EventEmitter.sol
  63. 1 1
      contracts/mocks/Failer.sol
  64. 2 2
      contracts/mocks/FinalizableCrowdsaleImpl.sol
  65. 2 2
      contracts/mocks/IncreasingPriceCrowdsaleImpl.sol
  66. 2 2
      contracts/mocks/IndividuallyCappedCrowdsaleImpl.sol
  67. 1 1
      contracts/mocks/MathMock.sol
  68. 2 2
      contracts/mocks/MerkleProofWrapper.sol
  69. 2 2
      contracts/mocks/MintedCrowdsaleImpl.sol
  70. 1 1
      contracts/mocks/MinterRoleMock.sol
  71. 1 1
      contracts/mocks/OwnableInterfaceId.sol
  72. 1 1
      contracts/mocks/OwnableMock.sol
  73. 2 2
      contracts/mocks/PausableCrowdsaleImpl.sol
  74. 1 1
      contracts/mocks/PausableMock.sol
  75. 1 1
      contracts/mocks/PauserRoleMock.sol
  76. 2 2
      contracts/mocks/PostDeliveryCrowdsaleImpl.sol
  77. 1 1
      contracts/mocks/PullPaymentMock.sol
  78. 3 2
      contracts/mocks/ReentrancyAttack.sol
  79. 3 3
      contracts/mocks/ReentrancyMock.sol
  80. 2 2
      contracts/mocks/RefundableCrowdsaleImpl.sol
  81. 2 2
      contracts/mocks/RefundablePostDeliveryCrowdsaleImpl.sol
  82. 1 1
      contracts/mocks/RolesMock.sol
  83. 4 4
      contracts/mocks/SafeERC20Helper.sol
  84. 1 1
      contracts/mocks/SafeMathMock.sol
  85. 1 1
      contracts/mocks/SecondaryMock.sol
  86. 8 8
      contracts/mocks/SignatureBouncerMock.sol
  87. 1 1
      contracts/mocks/SignerRoleMock.sol
  88. 2 2
      contracts/mocks/TimedCrowdsaleImpl.sol
  89. 2 2
      contracts/mocks/WhitelistCrowdsaleImpl.sol
  90. 1 1
      contracts/mocks/WhitelistedRoleMock.sol
  91. 1 1
      contracts/mocks/WhitelisterRoleMock.sol
  92. 1 1
      contracts/ownership/Ownable.sol
  93. 1 1
      contracts/ownership/Secondary.sol
  94. 3 3
      contracts/payment/PaymentSplitter.sol
  95. 2 2
      contracts/payment/PullPayment.sol
  96. 2 2
      contracts/payment/escrow/ConditionalEscrow.sol
  97. 2 2
      contracts/payment/escrow/Escrow.sol
  98. 3 3
      contracts/payment/escrow/RefundEscrow.sol
  99. 1 1
      contracts/token/ERC20/ERC20.sol
  100. 1 1
      contracts/token/ERC20/ERC20Burnable.sol

+ 3 - 0
.gitignore

@@ -37,3 +37,6 @@ build/
 
 # truffle
 .node-xmlhttprequest-*
+
+# Temporary directory for 0.5.x compilation
+solc-0.5

+ 1 - 1
contracts/access/Roles.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title Roles

+ 1 - 1
contracts/access/roles/CapperRole.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../Roles.sol";
 

+ 1 - 1
contracts/access/roles/MinterRole.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../Roles.sol";
 

+ 1 - 1
contracts/access/roles/PauserRole.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../Roles.sol";
 

+ 1 - 1
contracts/access/roles/SignerRole.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../Roles.sol";
 

+ 1 - 1
contracts/access/roles/WhitelistedRole.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../Roles.sol";
 import "./WhitelisterRole.sol";

+ 1 - 1
contracts/access/roles/WhitelisterRole.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../Roles.sol";
 

+ 5 - 5
contracts/crowdsale/Crowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../math/SafeMath.sol";
@@ -25,7 +25,7 @@ contract Crowdsale is ReentrancyGuard {
     IERC20 private _token;
 
     // Address where funds are collected
-    address private _wallet;
+    address payable private _wallet;
 
     // How many token units a buyer gets per wei.
     // The rate is the conversion between wei and the smallest and indivisible token unit.
@@ -53,10 +53,10 @@ contract Crowdsale is ReentrancyGuard {
      * @param wallet Address where collected funds will be forwarded to
      * @param token Address of the token being sold
      */
-    constructor (uint256 rate, address wallet, IERC20 token) public {
+    constructor (uint256 rate, address payable wallet, IERC20 token) public {
         require(rate > 0);
         require(wallet != address(0));
-        require(token != address(0));
+        require(address(token) != address(0));
 
         _rate = rate;
         _wallet = wallet;
@@ -87,7 +87,7 @@ contract Crowdsale is ReentrancyGuard {
     /**
      * @return the address where funds are collected.
      */
-    function wallet() public view returns (address) {
+    function wallet() public view returns (address payable) {
         return _wallet;
     }
 

+ 1 - 1
contracts/crowdsale/distribution/FinalizableCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../../math/SafeMath.sol";
 import "../validation/TimedCrowdsale.sol";

+ 1 - 1
contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../validation/TimedCrowdsale.sol";
 import "../../math/SafeMath.sol";

+ 2 - 2
contracts/crowdsale/distribution/RefundableCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../../math/SafeMath.sol";
 import "./FinalizableCrowdsale.sol";
@@ -44,7 +44,7 @@ contract RefundableCrowdsale is FinalizableCrowdsale {
      * @dev Investors can claim refunds here if crowdsale is unsuccessful
      * @param refundee Whose refund will be claimed.
      */
-    function claimRefund(address refundee) public {
+    function claimRefund(address payable refundee) public {
         require(finalized());
         require(!goalReached());
 

+ 1 - 1
contracts/crowdsale/distribution/RefundablePostDeliveryCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "./RefundableCrowdsale.sol";
 import "./PostDeliveryCrowdsale.sol";

+ 2 - 2
contracts/crowdsale/emission/AllowanceCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../Crowdsale.sol";
 import "../../token/ERC20/IERC20.sol";
@@ -37,7 +37,7 @@ contract AllowanceCrowdsale is Crowdsale {
      * @return Amount of tokens left in the allowance
      */
     function remainingTokens() public view returns (uint256) {
-        return Math.min(token().balanceOf(_tokenWallet), token().allowance(_tokenWallet, this));
+        return Math.min(token().balanceOf(_tokenWallet), token().allowance(_tokenWallet, address(this)));
     }
 
     /**

+ 1 - 1
contracts/crowdsale/emission/MintedCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../Crowdsale.sol";
 import "../../token/ERC20/ERC20Mintable.sol";

+ 1 - 1
contracts/crowdsale/price/IncreasingPriceCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../validation/TimedCrowdsale.sol";
 import "../../math/SafeMath.sol";

+ 1 - 1
contracts/crowdsale/validation/CappedCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../../math/SafeMath.sol";
 import "../Crowdsale.sol";

+ 1 - 1
contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../../math/SafeMath.sol";
 import "../Crowdsale.sol";

+ 1 - 1
contracts/crowdsale/validation/PausableCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.18;
+pragma solidity ^0.5.0;
 
 import "../Crowdsale.sol";
 import "../../lifecycle/Pausable.sol";

+ 1 - 1
contracts/crowdsale/validation/TimedCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../../math/SafeMath.sol";
 import "../Crowdsale.sol";

+ 1 - 1
contracts/crowdsale/validation/WhitelistCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 import "../Crowdsale.sol";
 import "../../access/roles/WhitelistedRole.sol";
 

+ 2 - 2
contracts/cryptography/ECDSA.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title Elliptic curve signature operations
@@ -13,7 +13,7 @@ library ECDSA {
      * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
      * @param signature bytes signature, the signature is generated using web3.eth.sign()
      */
-    function recover(bytes32 hash, bytes signature) internal pure returns (address) {
+    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
         bytes32 r;
         bytes32 s;
         uint8 v;

+ 2 - 2
contracts/cryptography/MerkleProof.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title MerkleProof
@@ -13,7 +13,7 @@ library MerkleProof {
      * @param root Merkle root
      * @param leaf Leaf of Merkle tree
      */
-    function verify(bytes32[] proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
+    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
         bytes32 computedHash = leaf;
 
         for (uint256 i = 0; i < proof.length; i++) {

+ 1 - 1
contracts/drafts/Counter.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title Counter

+ 4 - 4
contracts/drafts/ERC1046/TokenMetadata.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../../token/ERC20/IERC20.sol";
 
@@ -9,17 +9,17 @@ import "../../token/ERC20/IERC20.sol";
  * @dev TODO - update https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/token/ERC721/IERC721.sol#L17 when 1046 is finalized
  */
 contract ERC20TokenMetadata is IERC20 {
-    function tokenURI() external view returns (string);
+    function tokenURI() external view returns (string memory);
 }
 
 contract ERC20WithMetadata is ERC20TokenMetadata {
     string private _tokenURI;
 
-    constructor (string tokenURI) public {
+    constructor (string memory tokenURI) public {
         _tokenURI = tokenURI;
     }
 
-    function tokenURI() external view returns (string) {
+    function tokenURI() external view returns (string memory) {
         return _tokenURI;
     }
 }

+ 7 - 7
contracts/drafts/ERC20Migrator.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../token/ERC20/ERC20Mintable.sol";
@@ -44,7 +44,7 @@ contract ERC20Migrator {
      * @param legacyToken address of the old token contract
      */
     constructor (IERC20 legacyToken) public {
-        require(legacyToken != address(0));
+        require(address(legacyToken) != address(0));
         _legacyToken = legacyToken;
     }
 
@@ -68,9 +68,9 @@ contract ERC20Migrator {
      * @param newToken the token that will be minted
      */
     function beginMigration(ERC20Mintable newToken) public {
-        require(_newToken == address(0));
-        require(newToken != address(0));
-        require(newToken.isMinter(this));
+        require(address(_newToken) == address(0));
+        require(address(newToken) != address(0));
+        require(newToken.isMinter(address(this)));
 
         _newToken = newToken;
     }
@@ -82,7 +82,7 @@ contract ERC20Migrator {
      * @param amount amount of tokens to be migrated
      */
     function migrate(address account, uint256 amount) public {
-        _legacyToken.safeTransferFrom(account, this, amount);
+        _legacyToken.safeTransferFrom(account, address(this), amount);
         _newToken.mint(account, amount);
     }
 
@@ -93,7 +93,7 @@ contract ERC20Migrator {
      */
     function migrateAll(address account) public {
         uint256 balance = _legacyToken.balanceOf(account);
-        uint256 allowance = _legacyToken.allowance(account, this);
+        uint256 allowance = _legacyToken.allowance(account, address(this));
         uint256 amount = Math.min(balance, allowance);
         migrate(account, amount);
     }

+ 8 - 8
contracts/drafts/SignatureBouncer.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/roles/SignerRole.sol";
 import "../cryptography/ECDSA.sol";
@@ -48,7 +48,7 @@ contract SignatureBouncer is SignerRole {
     /**
      * @dev requires that a valid signature of a signer was provided
      */
-    modifier onlyValidSignature(bytes signature) {
+    modifier onlyValidSignature(bytes memory signature) {
         require(_isValidSignature(msg.sender, signature));
         _;
     }
@@ -56,7 +56,7 @@ contract SignatureBouncer is SignerRole {
     /**
      * @dev requires that a valid signature with a specifed method of a signer was provided
      */
-    modifier onlyValidSignatureAndMethod(bytes signature) {
+    modifier onlyValidSignatureAndMethod(bytes memory signature) {
         require(_isValidSignatureAndMethod(msg.sender, signature));
         _;
     }
@@ -64,7 +64,7 @@ contract SignatureBouncer is SignerRole {
     /**
      * @dev requires that a valid signature with a specifed method and params of a signer was provided
      */
-    modifier onlyValidSignatureAndData(bytes signature) {
+    modifier onlyValidSignatureAndData(bytes memory signature) {
         require(_isValidSignatureAndData(msg.sender, signature));
         _;
     }
@@ -73,7 +73,7 @@ contract SignatureBouncer is SignerRole {
      * @dev is the signature of `this + sender` from a signer?
      * @return bool
      */
-    function _isValidSignature(address account, bytes signature) internal view returns (bool) {
+    function _isValidSignature(address account, bytes memory signature) internal view returns (bool) {
         return _isValidDataHash(keccak256(abi.encodePacked(address(this), account)), signature);
     }
 
@@ -81,7 +81,7 @@ contract SignatureBouncer is SignerRole {
      * @dev is the signature of `this + sender + methodId` from a signer?
      * @return bool
      */
-    function _isValidSignatureAndMethod(address account, bytes signature) internal view returns (bool) {
+    function _isValidSignatureAndMethod(address account, bytes memory signature) internal view returns (bool) {
         bytes memory data = new bytes(_METHOD_ID_SIZE);
         for (uint i = 0; i < data.length; i++) {
             data[i] = msg.data[i];
@@ -94,7 +94,7 @@ contract SignatureBouncer is SignerRole {
         * @notice the signature parameter of the method being validated must be the "last" parameter
         * @return bool
         */
-    function _isValidSignatureAndData(address account, bytes signature) internal view returns (bool) {
+    function _isValidSignatureAndData(address account, bytes memory signature) internal view returns (bool) {
         require(msg.data.length > _SIGNATURE_SIZE);
 
         bytes memory data = new bytes(msg.data.length - _SIGNATURE_SIZE);
@@ -110,7 +110,7 @@ contract SignatureBouncer is SignerRole {
      * and then recover the signature and check it against the signer role
      * @return bool
      */
-    function _isValidDataHash(bytes32 hash, bytes signature) internal view returns (bool) {
+    function _isValidDataHash(bytes32 hash, bytes memory signature) internal view returns (bool) {
         address signer = hash.toEthSignedMessageHash().recover(signature);
 
         return signer != address(0) && isSigner(signer);

+ 9 - 9
contracts/drafts/TokenVesting.sol

@@ -1,6 +1,6 @@
 /* solium-disable security/no-block-members */
 
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/SafeERC20.sol";
 import "../ownership/Ownable.sol";
@@ -112,11 +112,11 @@ contract TokenVesting is Ownable {
 
         require(unreleased > 0);
 
-        _released[token] = _released[token].add(unreleased);
+        _released[address(token)] = _released[address(token)].add(unreleased);
 
         token.safeTransfer(_beneficiary, unreleased);
 
-        emit TokensReleased(token, unreleased);
+        emit TokensReleased(address(token), unreleased);
     }
 
     /**
@@ -126,18 +126,18 @@ contract TokenVesting is Ownable {
      */
     function revoke(IERC20 token) public onlyOwner {
         require(_revocable);
-        require(!_revoked[token]);
+        require(!_revoked[address(token)]);
 
         uint256 balance = token.balanceOf(address(this));
 
         uint256 unreleased = _releasableAmount(token);
         uint256 refund = balance.sub(unreleased);
 
-        _revoked[token] = true;
+        _revoked[address(token)] = true;
 
         token.safeTransfer(owner(), refund);
 
-        emit TokenVestingRevoked(token);
+        emit TokenVestingRevoked(address(token));
     }
 
     /**
@@ -145,7 +145,7 @@ contract TokenVesting is Ownable {
      * @param token ERC20 token which is being vested
      */
     function _releasableAmount(IERC20 token) private view returns (uint256) {
-        return _vestedAmount(token).sub(_released[token]);
+        return _vestedAmount(token).sub(_released[address(token)]);
     }
 
     /**
@@ -154,11 +154,11 @@ contract TokenVesting is Ownable {
      */
     function _vestedAmount(IERC20 token) private view returns (uint256) {
         uint256 currentBalance = token.balanceOf(address(this));
-        uint256 totalBalance = currentBalance.add(_released[token]);
+        uint256 totalBalance = currentBalance.add(_released[address(token)]);
 
         if (block.timestamp < _cliff) {
             return 0;
-        } else if (block.timestamp >= _start.add(_duration) || _revoked[token]) {
+        } else if (block.timestamp >= _start.add(_duration) || _revoked[address(token)]) {
             return totalBalance;
         } else {
             return totalBalance.mul(block.timestamp.sub(_start)).div(_duration);

+ 2 - 2
contracts/examples/SampleCrowdsale.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../crowdsale/validation/CappedCrowdsale.sol";
 import "../crowdsale/distribution/RefundableCrowdsale.sol";
@@ -38,7 +38,7 @@ contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale, MintedCrowdsal
         uint256 openingTime,
         uint256 closingTime,
         uint256 rate,
-        address wallet,
+        address payable wallet,
         uint256 cap,
         ERC20Mintable token,
         uint256 goal

+ 4 - 3
contracts/examples/SimpleToken.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20.sol";
 import "../token/ERC20/ERC20Detailed.sol";
@@ -10,12 +10,13 @@ import "../token/ERC20/ERC20Detailed.sol";
  * `ERC20` functions.
  */
 contract SimpleToken is ERC20, ERC20Detailed {
-    uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals()));
+    uint8 public constant DECIMALS = 18;
+    uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(DECIMALS));
 
     /**
      * @dev Constructor that gives msg.sender all of existing tokens.
      */
-    constructor () public ERC20Detailed("SimpleToken", "SIM", 18) {
+    constructor () public ERC20Detailed("SimpleToken", "SIM", DECIMALS) {
         _mint(msg.sender, INITIAL_SUPPLY);
     }
 }

+ 1 - 1
contracts/introspection/ERC165.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "./IERC165.sol";
 

+ 2 - 2
contracts/introspection/ERC165Checker.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title ERC165Checker
@@ -49,7 +49,7 @@ library ERC165Checker {
      * interfaceIds list, false otherwise
      * @dev Interface identification is specified in ERC-165.
      */
-    function _supportsAllInterfaces(address account, bytes4[] interfaceIds) internal view returns (bool) {
+    function _supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
         // query support of ERC165 itself
         if (!_supportsERC165(account)) {
             return false;

+ 1 - 1
contracts/introspection/IERC165.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title IERC165

+ 1 - 1
contracts/lifecycle/Pausable.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/roles/PauserRole.sol";
 

+ 1 - 1
contracts/math/Math.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title Math

+ 1 - 1
contracts/math/SafeMath.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title SafeMath

+ 1 - 1
contracts/mocks/Acknowledger.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 contract Acknowledger {
     event AcknowledgeFoo(uint256 a);

+ 1 - 1
contracts/mocks/AddressImpl.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../utils/Address.sol";
 

+ 2 - 2
contracts/mocks/AllowanceCrowdsaleImpl.sol

@@ -1,10 +1,10 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/emission/AllowanceCrowdsale.sol";
 
 contract AllowanceCrowdsaleImpl is AllowanceCrowdsale {
-    constructor (uint256 rate, address wallet, IERC20 token, address tokenWallet)
+    constructor (uint256 rate, address payable wallet, IERC20 token, address tokenWallet)
         public
         Crowdsale(rate, wallet, token)
         AllowanceCrowdsale(tokenWallet)

+ 2 - 2
contracts/mocks/ArraysImpl.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../utils/Arrays.sol";
 
@@ -7,7 +7,7 @@ contract ArraysImpl {
 
     uint256[] private array;
 
-    constructor (uint256[] _array) public {
+    constructor (uint256[] memory _array) public {
         array = _array;
     }
 

+ 2 - 2
contracts/mocks/CappedCrowdsaleImpl.sol

@@ -1,10 +1,10 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/validation/CappedCrowdsale.sol";
 
 contract CappedCrowdsaleImpl is CappedCrowdsale {
-    constructor (uint256 rate, address wallet, IERC20 token, uint256 cap)
+    constructor (uint256 rate, address payable wallet, IERC20 token, uint256 cap)
         public
         Crowdsale(rate, wallet, token)
         CappedCrowdsale(cap)

+ 1 - 1
contracts/mocks/CapperRoleMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/roles/CapperRole.sol";
 

+ 1 - 1
contracts/mocks/ConditionalEscrowMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../payment/escrow/ConditionalEscrow.sol";
 

+ 2 - 2
contracts/mocks/CounterImpl.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../drafts/Counter.sol";
 
@@ -10,7 +10,7 @@ contract CounterImpl {
     // use whatever key you want to track your counters
     mapping(string => Counter.Counter) private _counters;
 
-    function doThing(string key) public returns (uint256) {
+    function doThing(string memory key) public returns (uint256) {
         theId = _counters[key].next();
         return theId;
     }

+ 2 - 2
contracts/mocks/CrowdsaleMock.sol

@@ -1,7 +1,7 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../crowdsale/Crowdsale.sol";
 
 contract CrowdsaleMock is Crowdsale {
-    constructor (uint256 rate, address wallet, IERC20 token) public Crowdsale(rate, wallet, token) {}
+    constructor (uint256 rate, address payable wallet, IERC20 token) public Crowdsale(rate, wallet, token) {}
 }

+ 2 - 2
contracts/mocks/DetailedERC20Mock.sol

@@ -1,8 +1,8 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20.sol";
 import "../token/ERC20/ERC20Detailed.sol";
 
 contract ERC20DetailedMock is ERC20, ERC20Detailed {
-    constructor (string name, string symbol, uint8 decimals) ERC20Detailed(name, symbol, decimals) public {}
+    constructor (string memory name, string memory symbol, uint8 decimals) ERC20Detailed(name, symbol, decimals) public {}
 }

+ 2 - 2
contracts/mocks/ECDSAMock.sol

@@ -1,11 +1,11 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../cryptography/ECDSA.sol";
 
 contract ECDSAMock {
     using ECDSA for bytes32;
 
-    function recover(bytes32 hash, bytes signature) public pure returns (address) {
+    function recover(bytes32 hash, bytes memory signature) public pure returns (address) {
         return hash.recover(signature);
     }
 

+ 2 - 2
contracts/mocks/ERC165/ERC165InterfacesSupported.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../../introspection/IERC165.sol";
 
@@ -47,7 +47,7 @@ contract SupportsInterfaceWithLookupMock is IERC165 {
 }
 
 contract ERC165InterfacesSupported is SupportsInterfaceWithLookupMock {
-    constructor (bytes4[] interfaceIds) public {
+    constructor (bytes4[] memory interfaceIds) public {
         for (uint256 i = 0; i < interfaceIds.length; i++) {
             _registerInterface(interfaceIds[i]);
         }

+ 1 - 1
contracts/mocks/ERC165/ERC165NotSupported.sol

@@ -1,3 +1,3 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 contract ERC165NotSupported {}

+ 2 - 2
contracts/mocks/ERC165CheckerMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../introspection/ERC165Checker.sol";
 
@@ -13,7 +13,7 @@ contract ERC165CheckerMock {
         return account._supportsInterface(interfaceId);
     }
 
-    function supportsAllInterfaces(address account, bytes4[] interfaceIds) public view returns (bool) {
+    function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) public view returns (bool) {
         return account._supportsAllInterfaces(interfaceIds);
     }
 }

+ 1 - 1
contracts/mocks/ERC165Mock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../introspection/ERC165.sol";
 

+ 1 - 1
contracts/mocks/ERC20BurnableMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20Burnable.sol";
 

+ 1 - 1
contracts/mocks/ERC20MintableMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20Mintable.sol";
 import "./MinterRoleMock.sol";

+ 1 - 1
contracts/mocks/ERC20Mock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20.sol";
 

+ 1 - 1
contracts/mocks/ERC20PausableMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20Pausable.sol";
 import "./PauserRoleMock.sol";

+ 2 - 2
contracts/mocks/ERC20WithMetadataMock.sol

@@ -1,8 +1,8 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20.sol";
 import "../drafts/ERC1046/TokenMetadata.sol";
 
 contract ERC20WithMetadataMock is ERC20, ERC20WithMetadata {
-    constructor (string tokenURI) public ERC20WithMetadata(tokenURI) {}
+    constructor (string memory tokenURI) public ERC20WithMetadata(tokenURI) {}
 }

+ 3 - 3
contracts/mocks/ERC721FullMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC721/ERC721Full.sol";
 import "../token/ERC721/ERC721Mintable.sol";
@@ -11,7 +11,7 @@ import "../token/ERC721/ERC721Burnable.sol";
  * checking token existence, removal of a token from an address
  */
 contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, ERC721Burnable {
-    constructor (string name, string symbol) public ERC721Mintable() ERC721Full(name, symbol) {}
+    constructor (string memory name, string memory symbol) public ERC721Mintable() ERC721Full(name, symbol) {}
 
     function exists(uint256 tokenId) public view returns (bool) {
         return _exists(tokenId);
@@ -21,7 +21,7 @@ contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, E
         return _tokensOfOwner(owner);
     }
 
-    function setTokenURI(uint256 tokenId, string uri) public {
+    function setTokenURI(uint256 tokenId, string memory uri) public {
         _setTokenURI(tokenId, uri);
     }
 }

+ 1 - 1
contracts/mocks/ERC721MintableBurnableImpl.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC721/ERC721Full.sol";
 import "../token/ERC721/ERC721Mintable.sol";

+ 1 - 1
contracts/mocks/ERC721Mock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC721/ERC721.sol";
 

+ 1 - 1
contracts/mocks/ERC721PausableMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC721/ERC721Pausable.sol";
 import "./PauserRoleMock.sol";

+ 2 - 2
contracts/mocks/ERC721ReceiverMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC721/IERC721Receiver.sol";
 
@@ -13,7 +13,7 @@ contract ERC721ReceiverMock is IERC721Receiver {
         _reverts = reverts;
     }
 
-    function onERC721Received(address operator, address from, uint256 tokenId, bytes data) public returns (bytes4) {
+    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4) {
         require(!_reverts);
         emit Received(operator, from, tokenId, data, gasleft());
         return _retval;

+ 6 - 6
contracts/mocks/EventEmitter.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 contract EventEmitter {
     event Argumentless();
@@ -11,7 +11,7 @@ contract EventEmitter {
     event String(string value);
     event LongUintBooleanString(uint256 uintValue, bool booleanValue, string stringValue);
 
-    constructor (uint8 uintValue, bool booleanValue, string stringValue) public {
+    constructor (uint8 uintValue, bool booleanValue, string memory stringValue) public {
         emit ShortUint(uintValue);
         emit Boolean(booleanValue);
         emit String(stringValue);
@@ -45,11 +45,11 @@ contract EventEmitter {
         emit Boolean(value);
     }
 
-    function emitString(string value) public {
+    function emitString(string memory value) public {
         emit String(value);
     }
 
-    function emitLongUintBooleanString(uint256 uintValue, bool booleanValue, string stringValue) public {
+    function emitLongUintBooleanString(uint256 uintValue, bool booleanValue, string memory stringValue) public {
         emit LongUintBooleanString(uintValue, booleanValue, stringValue);
     }
 
@@ -58,7 +58,7 @@ contract EventEmitter {
         emit Boolean(boolValue);
     }
 
-    function emitStringAndEmitIndirectly(string value, IndirectEventEmitter emitter) public {
+    function emitStringAndEmitIndirectly(string memory value, IndirectEventEmitter emitter) public {
         emit String(value);
         emitter.emitStringIndirectly(value);
     }
@@ -67,7 +67,7 @@ contract EventEmitter {
 contract IndirectEventEmitter {
     event IndirectString(string value);
 
-    function emitStringIndirectly(string value) public {
+    function emitStringIndirectly(string memory value) public {
         emit IndirectString(value);
     }
 }

+ 1 - 1
contracts/mocks/Failer.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 contract Failer {
     uint256[] private array;

+ 2 - 2
contracts/mocks/FinalizableCrowdsaleImpl.sol

@@ -1,11 +1,11 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/distribution/FinalizableCrowdsale.sol";
 
 contract FinalizableCrowdsaleImpl is FinalizableCrowdsale {
 
-    constructor (uint256 openingTime, uint256 closingTime, uint256 rate, address wallet, IERC20 token)
+    constructor (uint256 openingTime, uint256 closingTime, uint256 rate, address payable wallet, IERC20 token)
         public
         Crowdsale(rate, wallet, token)
         TimedCrowdsale(openingTime, closingTime)

+ 2 - 2
contracts/mocks/IncreasingPriceCrowdsaleImpl.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../crowdsale/price/IncreasingPriceCrowdsale.sol";
 import "../math/SafeMath.sol";
@@ -7,7 +7,7 @@ contract IncreasingPriceCrowdsaleImpl is IncreasingPriceCrowdsale {
     constructor (
         uint256 openingTime,
         uint256 closingTime,
-        address wallet,
+        address payable wallet,
         IERC20 token,
         uint256 initialRate,
         uint256 finalRate

+ 2 - 2
contracts/mocks/IndividuallyCappedCrowdsaleImpl.sol

@@ -1,10 +1,10 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/validation/IndividuallyCappedCrowdsale.sol";
 import "./CapperRoleMock.sol";
 
 contract IndividuallyCappedCrowdsaleImpl is IndividuallyCappedCrowdsale, CapperRoleMock {
-    constructor (uint256 rate, address wallet, IERC20 token) public Crowdsale(rate, wallet, token)
+    constructor (uint256 rate, address payable wallet, IERC20 token) public Crowdsale(rate, wallet, token)
     {}
 }

+ 1 - 1
contracts/mocks/MathMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../math/Math.sol";
 

+ 2 - 2
contracts/mocks/MerkleProofWrapper.sol

@@ -1,9 +1,9 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import { MerkleProof } from "../cryptography/MerkleProof.sol";
 
 contract MerkleProofWrapper {
-    function verify(bytes32[] proof, bytes32 root, bytes32 leaf) public pure returns (bool) {
+    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) public pure returns (bool) {
         return MerkleProof.verify(proof, root, leaf);
     }
 }

+ 2 - 2
contracts/mocks/MintedCrowdsaleImpl.sol

@@ -1,8 +1,8 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20Mintable.sol";
 import "../crowdsale/emission/MintedCrowdsale.sol";
 
 contract MintedCrowdsaleImpl is MintedCrowdsale {
-    constructor (uint256 rate, address wallet, ERC20Mintable token) public Crowdsale(rate, wallet, token) {}
+    constructor (uint256 rate, address payable wallet, ERC20Mintable token) public Crowdsale(rate, wallet, token) {}
 }

+ 1 - 1
contracts/mocks/MinterRoleMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/roles/MinterRole.sol";
 

+ 1 - 1
contracts/mocks/OwnableInterfaceId.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../ownership/Ownable.sol";
 

+ 1 - 1
contracts/mocks/OwnableMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../ownership/Ownable.sol";
 

+ 2 - 2
contracts/mocks/PausableCrowdsaleImpl.sol

@@ -1,9 +1,9 @@
-pragma solidity ^0.4.18;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/ERC20.sol";
 import "../crowdsale/validation/PausableCrowdsale.sol";
 
 contract PausableCrowdsaleImpl is PausableCrowdsale {
-    constructor (uint256 _rate, address _wallet, ERC20 _token) public Crowdsale(_rate, _wallet, _token) {
+    constructor (uint256 _rate, address payable _wallet, ERC20 _token) public Crowdsale(_rate, _wallet, _token) {
     }
 }

+ 1 - 1
contracts/mocks/PausableMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../lifecycle/Pausable.sol";
 import "./PauserRoleMock.sol";

+ 1 - 1
contracts/mocks/PauserRoleMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/roles/PauserRole.sol";
 

+ 2 - 2
contracts/mocks/PostDeliveryCrowdsaleImpl.sol

@@ -1,10 +1,10 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/distribution/PostDeliveryCrowdsale.sol";
 
 contract PostDeliveryCrowdsaleImpl is PostDeliveryCrowdsale {
-    constructor (uint256 openingTime, uint256 closingTime, uint256 rate, address wallet, IERC20 token)
+    constructor (uint256 openingTime, uint256 closingTime, uint256 rate, address payable wallet, IERC20 token)
         public
         TimedCrowdsale(openingTime, closingTime)
         Crowdsale(rate, wallet, token)

+ 1 - 1
contracts/mocks/PullPaymentMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../payment/PullPayment.sol";
 

+ 3 - 2
contracts/mocks/ReentrancyAttack.sol

@@ -1,10 +1,11 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 contract ReentrancyAttack {
 
     function callSender(bytes4 data) public {
         // solium-disable-next-line security/no-low-level-calls
-        require(msg.sender.call(abi.encodeWithSelector(data)));
+        (bool success,) = msg.sender.call(abi.encodeWithSelector(data));
+        require(success);
     }
 
 }

+ 3 - 3
contracts/mocks/ReentrancyMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../utils/ReentrancyGuard.sol";
 import "./ReentrancyAttack.sol";
@@ -25,8 +25,8 @@ contract ReentrancyMock is ReentrancyGuard {
         if (n > 0) {
             count();
             // solium-disable-next-line security/no-low-level-calls
-            bool result = address(this).call(abi.encodeWithSignature("countThisRecursive(uint256)", n - 1));
-            require(result == true);
+            (bool success,) = address(this).call(abi.encodeWithSignature("countThisRecursive(uint256)", n - 1));
+            require(success);
         }
     }
 

+ 2 - 2
contracts/mocks/RefundableCrowdsaleImpl.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/distribution/RefundableCrowdsale.sol";
@@ -8,7 +8,7 @@ contract RefundableCrowdsaleImpl is RefundableCrowdsale {
         uint256 openingTime,
         uint256 closingTime,
         uint256 rate,
-        address wallet,
+        address payable wallet,
         IERC20 token,
         uint256 goal
     )

+ 2 - 2
contracts/mocks/RefundablePostDeliveryCrowdsaleImpl.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/distribution/RefundablePostDeliveryCrowdsale.sol";
@@ -8,7 +8,7 @@ contract RefundablePostDeliveryCrowdsaleImpl is RefundablePostDeliveryCrowdsale
         uint256 openingTime,
         uint256 closingTime,
         uint256 rate,
-        address wallet,
+        address payable wallet,
         IERC20 token,
         uint256 goal
     )

+ 1 - 1
contracts/mocks/RolesMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/Roles.sol";
 

+ 4 - 4
contracts/mocks/SafeERC20Helper.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../token/ERC20/SafeERC20.sol";
@@ -54,8 +54,8 @@ contract SafeERC20Helper {
     IERC20 private _succeeding;
 
     constructor () public {
-        _failing = IERC20(new ERC20FailingMock());
-        _succeeding = IERC20(new ERC20SucceedingMock());
+        _failing = IERC20(address(new ERC20FailingMock()));
+        _succeeding = IERC20(address(new ERC20SucceedingMock()));
     }
 
     // Using _failing
@@ -103,7 +103,7 @@ contract SafeERC20Helper {
     }
 
     function setAllowance(uint256 allowance_) public {
-        ERC20SucceedingMock(_succeeding).setAllowance(allowance_);
+        ERC20SucceedingMock(address(_succeeding)).setAllowance(allowance_);
     }
 
     function allowance() public view returns (uint256) {

+ 1 - 1
contracts/mocks/SafeMathMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 
 import "../math/SafeMath.sol";

+ 1 - 1
contracts/mocks/SecondaryMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../ownership/Secondary.sol";
 

+ 8 - 8
contracts/mocks/SignatureBouncerMock.sol

@@ -1,28 +1,28 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../drafts/SignatureBouncer.sol";
 import "./SignerRoleMock.sol";
 
 contract SignatureBouncerMock is SignatureBouncer, SignerRoleMock {
-    function checkValidSignature(address account, bytes signature) public view returns (bool) {
+    function checkValidSignature(address account, bytes memory signature) public view returns (bool) {
         return _isValidSignature(account, signature);
     }
 
-    function onlyWithValidSignature(bytes signature) public onlyValidSignature(signature) view {}
+    function onlyWithValidSignature(bytes memory signature) public onlyValidSignature(signature) view {}
 
-    function checkValidSignatureAndMethod(address account, bytes signature) public view returns (bool) {
+    function checkValidSignatureAndMethod(address account, bytes memory signature) public view returns (bool) {
         return _isValidSignatureAndMethod(account, signature);
     }
 
-    function onlyWithValidSignatureAndMethod(bytes signature) public onlyValidSignatureAndMethod(signature) view {}
+    function onlyWithValidSignatureAndMethod(bytes memory signature) public onlyValidSignatureAndMethod(signature) view {}
 
-    function checkValidSignatureAndData(address account, bytes, uint, bytes signature) public view returns (bool) {
+    function checkValidSignatureAndData(address account, bytes memory, uint, bytes memory signature) public view returns (bool) {
         return _isValidSignatureAndData(account, signature);
     }
 
-    function onlyWithValidSignatureAndData(uint, bytes signature) public onlyValidSignatureAndData(signature) view {}
+    function onlyWithValidSignatureAndData(uint, bytes memory signature) public onlyValidSignatureAndData(signature) view {}
 
-    function theWrongMethod(bytes) public pure {}
+    function theWrongMethod(bytes memory) public pure {}
 
     function tooShortMsgData() public onlyValidSignatureAndData("") view {}
 }

+ 1 - 1
contracts/mocks/SignerRoleMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/roles/SignerRole.sol";
 

+ 2 - 2
contracts/mocks/TimedCrowdsaleImpl.sol

@@ -1,10 +1,10 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/validation/TimedCrowdsale.sol";
 
 contract TimedCrowdsaleImpl is TimedCrowdsale {
-    constructor (uint256 openingTime, uint256 closingTime, uint256 rate, address wallet, IERC20 token)
+    constructor (uint256 openingTime, uint256 closingTime, uint256 rate, address payable wallet, IERC20 token)
         public
         Crowdsale(rate, wallet, token)
         TimedCrowdsale(openingTime, closingTime)

+ 2 - 2
contracts/mocks/WhitelistCrowdsaleImpl.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../token/ERC20/IERC20.sol";
 import "../crowdsale/validation/WhitelistCrowdsale.sol";
@@ -6,5 +6,5 @@ import "../crowdsale/Crowdsale.sol";
 
 
 contract WhitelistCrowdsaleImpl is Crowdsale, WhitelistCrowdsale {
-    constructor (uint256 _rate, address _wallet, IERC20 _token) Crowdsale(_rate, _wallet, _token) public {}
+    constructor (uint256 _rate, address payable _wallet, IERC20 _token) Crowdsale(_rate, _wallet, _token) public {}
 }

+ 1 - 1
contracts/mocks/WhitelistedRoleMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/roles/WhitelistedRole.sol";
 

+ 1 - 1
contracts/mocks/WhitelisterRoleMock.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../access/roles/WhitelisterRole.sol";
 

+ 1 - 1
contracts/ownership/Ownable.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title Ownable

+ 1 - 1
contracts/ownership/Secondary.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 /**
  * @title Secondary

+ 3 - 3
contracts/payment/PaymentSplitter.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../math/SafeMath.sol";
 
@@ -24,7 +24,7 @@ contract PaymentSplitter {
     /**
      * @dev Constructor
      */
-    constructor (address[] payees, uint256[] shares) public payable {
+    constructor (address[] memory payees, uint256[] memory shares) public payable {
         require(payees.length == shares.length);
         require(payees.length > 0);
 
@@ -79,7 +79,7 @@ contract PaymentSplitter {
      * @dev Release one of the payee's proportional payment.
      * @param account Whose payments will be released.
      */
-    function release(address account) public {
+    function release(address payable account) public {
         require(_shares[account] > 0);
 
         uint256 totalReceived = address(this).balance.add(_totalReleased);

+ 2 - 2
contracts/payment/PullPayment.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "./escrow/Escrow.sol";
 
@@ -18,7 +18,7 @@ contract PullPayment {
     * @dev Withdraw accumulated balance.
     * @param payee Whose balance will be withdrawn.
     */
-    function withdrawPayments(address payee) public {
+    function withdrawPayments(address payable payee) public {
         _escrow.withdraw(payee);
     }
 

+ 2 - 2
contracts/payment/escrow/ConditionalEscrow.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "./Escrow.sol";
 
@@ -15,7 +15,7 @@ contract ConditionalEscrow is Escrow {
     */
     function withdrawalAllowed(address payee) public view returns (bool);
 
-    function withdraw(address payee) public {
+    function withdraw(address payable payee) public {
         require(withdrawalAllowed(payee));
         super.withdraw(payee);
     }

+ 2 - 2
contracts/payment/escrow/Escrow.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "../../math/SafeMath.sol";
 import "../../ownership/Secondary.sol";
@@ -42,7 +42,7 @@ contract Escrow is Secondary {
     * @dev Withdraw accumulated balance for a payee.
     * @param payee The address whose funds will be withdrawn and transferred to.
     */
-    function withdraw(address payee) public onlyPrimary {
+    function withdraw(address payable payee) public onlyPrimary {
         uint256 payment = _deposits[payee];
 
         _deposits[payee] = 0;

+ 3 - 3
contracts/payment/escrow/RefundEscrow.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "./ConditionalEscrow.sol";
 
@@ -20,13 +20,13 @@ contract RefundEscrow is ConditionalEscrow {
     event RefundsEnabled();
 
     State private _state;
-    address private _beneficiary;
+    address payable private _beneficiary;
 
     /**
      * @dev Constructor.
      * @param beneficiary The beneficiary of the deposits.
      */
-    constructor (address beneficiary) public {
+    constructor (address payable beneficiary) public {
         require(beneficiary != address(0));
         _beneficiary = beneficiary;
         _state = State.Active;

+ 1 - 1
contracts/token/ERC20/ERC20.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "./IERC20.sol";
 import "../../math/SafeMath.sol";

+ 1 - 1
contracts/token/ERC20/ERC20Burnable.sol

@@ -1,4 +1,4 @@
-pragma solidity ^0.4.24;
+pragma solidity ^0.5.0;
 
 import "./ERC20.sol";
 

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно