Unverified Commit b7d60f2f by Nicolás Venturo Committed by GitHub

Fix warnings (#1606)

* Bump required compiler version to 0.5.2.

* Fix shadowed variable warning in ERC20Migrator.

* Rename Counter to Counters.

* Add dummy state variable to SafeERC20Helper.

* Update changelog entry.

* Fix CountersImpl name.

* Improve changelog entry.
parent 7fb90a15
...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
## 2.2.0 (unreleased) ## 2.2.0 (unreleased)
### Improvements:
* Upgraded the minimum compiler version to v0.5.2: this removes many Solidity warnings that were false positives.
* Fixed variable shadowing issues.
### Bugfixes:
### Breaking changes:
## 2.1.1 (2019-04-01) ## 2.1.1 (2019-04-01)
* Version bump to avoid conflict in the npm registry. * Version bump to avoid conflict in the npm registry.
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title Roles * @title Roles
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Roles.sol"; import "../Roles.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Roles.sol"; import "../Roles.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Roles.sol"; import "../Roles.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Roles.sol"; import "../Roles.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Roles.sol"; import "../Roles.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Roles.sol"; import "../Roles.sol";
import "./WhitelistAdminRole.sol"; import "./WhitelistAdminRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../math/SafeMath.sol"; import "../math/SafeMath.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
import "../validation/TimedCrowdsale.sol"; import "../validation/TimedCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../validation/TimedCrowdsale.sol"; import "../validation/TimedCrowdsale.sol";
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
import "./FinalizableCrowdsale.sol"; import "./FinalizableCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "./RefundableCrowdsale.sol"; import "./RefundableCrowdsale.sol";
import "./PostDeliveryCrowdsale.sol"; import "./PostDeliveryCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Crowdsale.sol"; import "../Crowdsale.sol";
import "../../token/ERC20/IERC20.sol"; import "../../token/ERC20/IERC20.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Crowdsale.sol"; import "../Crowdsale.sol";
import "../../token/ERC20/ERC20Mintable.sol"; import "../../token/ERC20/ERC20Mintable.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../validation/TimedCrowdsale.sol"; import "../validation/TimedCrowdsale.sol";
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
import "../Crowdsale.sol"; import "../Crowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
import "../Crowdsale.sol"; import "../Crowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Crowdsale.sol"; import "../Crowdsale.sol";
import "../../lifecycle/Pausable.sol"; import "../../lifecycle/Pausable.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
import "../Crowdsale.sol"; import "../Crowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../Crowdsale.sol"; import "../Crowdsale.sol";
import "../../access/roles/WhitelistedRole.sol"; import "../../access/roles/WhitelistedRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title Elliptic curve signature operations * @title Elliptic curve signature operations
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title MerkleProof * @title MerkleProof
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title Counter * @title Counters
* @author Matt Condon (@shrugs) * @author Matt Condon (@shrugs)
* @dev Provides an incrementing uint256 id acquired by the `Counter#next` getter. * @dev Provides an incrementing uint256 id acquired by the `Counter#next` getter.
* Use this for issuing ERC721 ids or keeping track of request ids, anything you want, really. * Use this for issuing ERC721 ids or keeping track of request ids, anything you want, really.
* *
* Include with `using Counter for Counter.Counter;` * Include with `using Counters` for Counters.Counter;`
* @notice Does not allow an Id of 0, which is popularly used to signify a null state in solidity. * @notice Does not allow an Id of 0, which is popularly used to signify a null state in solidity.
* Does not protect from overflows, but if you have 2^256 ids, you have other problems. * Does not protect from overflows, but if you have 2^256 ids, you have other problems.
* (But actually, it's generally impossible to increment a counter this many times, energy wise * (But actually, it's generally impossible to increment a counter this many times, energy wise
* so it's not something you have to worry about.) * so it's not something you have to worry about.)
*/ */
library Counter { library Counters {
struct Counter { struct Counter {
uint256 current; // default: 0 uint256 current; // default: 0
} }
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../../token/ERC20/IERC20.sol"; import "../../token/ERC20/IERC20.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../token/ERC20/ERC20Mintable.sol"; import "../token/ERC20/ERC20Mintable.sol";
...@@ -65,14 +65,14 @@ contract ERC20Migrator { ...@@ -65,14 +65,14 @@ contract ERC20Migrator {
/** /**
* @dev Begins the migration by setting which is the new token that will be * @dev Begins the migration by setting which is the new token that will be
* minted. This contract must be a minter for the new token. * minted. This contract must be a minter for the new token.
* @param newToken the token that will be minted * @param newToken_ the token that will be minted
*/ */
function beginMigration(ERC20Mintable newToken) public { function beginMigration(ERC20Mintable newToken_) public {
require(address(_newToken) == address(0)); require(address(_newToken) == address(0));
require(address(newToken) != address(0)); require(address(newToken_) != address(0));
require(newToken.isMinter(address(this))); require(newToken_.isMinter(address(this)));
_newToken = newToken; _newToken = newToken_;
} }
/** /**
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/roles/SignerRole.sol"; import "../access/roles/SignerRole.sol";
import "../cryptography/ECDSA.sol"; import "../cryptography/ECDSA.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title SignedSafeMath * @title SignedSafeMath
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/SafeERC20.sol"; import "../token/ERC20/SafeERC20.sol";
import "../ownership/Ownable.sol"; import "../ownership/Ownable.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../crowdsale/validation/CappedCrowdsale.sol"; import "../crowdsale/validation/CappedCrowdsale.sol";
import "../crowdsale/distribution/RefundableCrowdsale.sol"; import "../crowdsale/distribution/RefundableCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20.sol"; import "../token/ERC20/ERC20.sol";
import "../token/ERC20/ERC20Detailed.sol"; import "../token/ERC20/ERC20Detailed.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "./IERC165.sol"; import "./IERC165.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title ERC165Checker * @title ERC165Checker
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title IERC165 * @title IERC165
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/roles/PauserRole.sol"; import "../access/roles/PauserRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title Math * @title Math
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title SafeMath * @title SafeMath
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
contract Acknowledger { contract Acknowledger {
event AcknowledgeFoo(uint256 a); event AcknowledgeFoo(uint256 a);
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../utils/Address.sol"; import "../utils/Address.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/emission/AllowanceCrowdsale.sol"; import "../crowdsale/emission/AllowanceCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../utils/Arrays.sol"; import "../utils/Arrays.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/validation/CappedCrowdsale.sol"; import "../crowdsale/validation/CappedCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/roles/CapperRole.sol"; import "../access/roles/CapperRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../payment/escrow/ConditionalEscrow.sol"; import "../payment/escrow/ConditionalEscrow.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../drafts/Counter.sol"; import "../drafts/Counters.sol";
contract CounterImpl { contract CountersImpl {
using Counter for Counter.Counter; using Counters for Counters.Counter;
uint256 public theId; uint256 public theId;
// use whatever key you want to track your counters // use whatever key you want to track your counters
mapping(string => Counter.Counter) private _counters; mapping(string => Counters.Counter) private _counters;
function doThing(string memory key) public returns (uint256) { function doThing(string memory key) public returns (uint256) {
theId = _counters[key].next(); theId = _counters[key].next();
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../crowdsale/Crowdsale.sol"; import "../crowdsale/Crowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../cryptography/ECDSA.sol"; import "../cryptography/ECDSA.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../../introspection/IERC165.sol"; import "../../introspection/IERC165.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
contract ERC165NotSupported { contract ERC165NotSupported {
// solhint-disable-previous-line no-empty-blocks // solhint-disable-previous-line no-empty-blocks
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../introspection/ERC165Checker.sol"; import "../introspection/ERC165Checker.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../introspection/ERC165.sol"; import "../introspection/ERC165.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20Burnable.sol"; import "../token/ERC20/ERC20Burnable.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20.sol"; import "../token/ERC20/ERC20.sol";
import "../token/ERC20/ERC20Detailed.sol"; import "../token/ERC20/ERC20Detailed.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20Mintable.sol"; import "../token/ERC20/ERC20Mintable.sol";
import "./MinterRoleMock.sol"; import "./MinterRoleMock.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20.sol"; import "../token/ERC20/ERC20.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20Pausable.sol"; import "../token/ERC20/ERC20Pausable.sol";
import "./PauserRoleMock.sol"; import "./PauserRoleMock.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20.sol"; import "../token/ERC20/ERC20.sol";
import "../drafts/ERC1046/TokenMetadata.sol"; import "../drafts/ERC1046/TokenMetadata.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC721/ERC721Full.sol"; import "../token/ERC721/ERC721Full.sol";
import "../token/ERC721/ERC721Mintable.sol"; import "../token/ERC721/ERC721Mintable.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC721/ERC721Full.sol"; import "../token/ERC721/ERC721Full.sol";
import "../token/ERC721/ERC721Mintable.sol"; import "../token/ERC721/ERC721Mintable.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC721/ERC721.sol"; import "../token/ERC721/ERC721.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC721/ERC721Pausable.sol"; import "../token/ERC721/ERC721Pausable.sol";
import "./PauserRoleMock.sol"; import "./PauserRoleMock.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC721/IERC721Receiver.sol"; import "../token/ERC721/IERC721Receiver.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
contract EventEmitter { contract EventEmitter {
event Argumentless(); event Argumentless();
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
contract Failer { contract Failer {
uint256[] private array; uint256[] private array;
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/distribution/FinalizableCrowdsale.sol"; import "../crowdsale/distribution/FinalizableCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../crowdsale/price/IncreasingPriceCrowdsale.sol"; import "../crowdsale/price/IncreasingPriceCrowdsale.sol";
import "../math/SafeMath.sol"; import "../math/SafeMath.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/validation/IndividuallyCappedCrowdsale.sol"; import "../crowdsale/validation/IndividuallyCappedCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../math/Math.sol"; import "../math/Math.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import { MerkleProof } from "../cryptography/MerkleProof.sol"; import { MerkleProof } from "../cryptography/MerkleProof.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20Mintable.sol"; import "../token/ERC20/ERC20Mintable.sol";
import "../crowdsale/emission/MintedCrowdsale.sol"; import "../crowdsale/emission/MintedCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/roles/MinterRole.sol"; import "../access/roles/MinterRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../ownership/Ownable.sol"; import "../ownership/Ownable.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../ownership/Ownable.sol"; import "../ownership/Ownable.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/ERC20.sol"; import "../token/ERC20/ERC20.sol";
import "../crowdsale/validation/PausableCrowdsale.sol"; import "../crowdsale/validation/PausableCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../lifecycle/Pausable.sol"; import "../lifecycle/Pausable.sol";
import "./PauserRoleMock.sol"; import "./PauserRoleMock.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/roles/PauserRole.sol"; import "../access/roles/PauserRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/distribution/PostDeliveryCrowdsale.sol"; import "../crowdsale/distribution/PostDeliveryCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../payment/PullPayment.sol"; import "../payment/PullPayment.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
contract ReentrancyAttack { contract ReentrancyAttack {
function callSender(bytes4 data) public { function callSender(bytes4 data) public {
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../utils/ReentrancyGuard.sol"; import "../utils/ReentrancyGuard.sol";
import "./ReentrancyAttack.sol"; import "./ReentrancyAttack.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/distribution/RefundableCrowdsale.sol"; import "../crowdsale/distribution/RefundableCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/distribution/RefundablePostDeliveryCrowdsale.sol"; import "../crowdsale/distribution/RefundablePostDeliveryCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/Roles.sol"; import "../access/Roles.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../token/ERC20/SafeERC20.sol"; import "../token/ERC20/SafeERC20.sol";
...@@ -6,19 +6,27 @@ import "../token/ERC20/SafeERC20.sol"; ...@@ -6,19 +6,27 @@ import "../token/ERC20/SafeERC20.sol";
contract ERC20FailingMock { contract ERC20FailingMock {
uint256 private _allowance; uint256 private _allowance;
// IERC20's functions are not pure, but these mock implementations are: to prevent Solidity from issuing warnings,
// we write to a dummy state variable.
uint256 private _dummy;
function transfer(address, uint256) public returns (bool) { function transfer(address, uint256) public returns (bool) {
_dummy = 0;
return false; return false;
} }
function transferFrom(address, address, uint256) public returns (bool) { function transferFrom(address, address, uint256) public returns (bool) {
_dummy = 0;
return false; return false;
} }
function approve(address, uint256) public returns (bool) { function approve(address, uint256) public returns (bool) {
_dummy = 0;
return false; return false;
} }
function allowance(address, address) public view returns (uint256) { function allowance(address, address) public view returns (uint256) {
require(_dummy == 0);
return 0; return 0;
} }
} }
...@@ -26,15 +34,22 @@ contract ERC20FailingMock { ...@@ -26,15 +34,22 @@ contract ERC20FailingMock {
contract ERC20SucceedingMock { contract ERC20SucceedingMock {
uint256 private _allowance; uint256 private _allowance;
// IERC20's functions are not pure, but these mock implementations are: to prevent Solidity from issuing warnings,
// we write to a dummy state variable.
uint256 private _dummy;
function transfer(address, uint256) public returns (bool) { function transfer(address, uint256) public returns (bool) {
_dummy = 0;
return true; return true;
} }
function transferFrom(address, address, uint256) public returns (bool) { function transferFrom(address, address, uint256) public returns (bool) {
_dummy = 0;
return true; return true;
} }
function approve(address, uint256) public returns (bool) { function approve(address, uint256) public returns (bool) {
_dummy = 0;
return true; return true;
} }
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../math/SafeMath.sol"; import "../math/SafeMath.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../ownership/Secondary.sol"; import "../ownership/Secondary.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../drafts/SignatureBouncer.sol"; import "../drafts/SignatureBouncer.sol";
import "./SignerRoleMock.sol"; import "./SignerRoleMock.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../drafts/SignedSafeMath.sol"; import "../drafts/SignedSafeMath.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/roles/SignerRole.sol"; import "../access/roles/SignerRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/validation/TimedCrowdsale.sol"; import "../crowdsale/validation/TimedCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/roles/WhitelistAdminRole.sol"; import "../access/roles/WhitelistAdminRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../token/ERC20/IERC20.sol"; import "../token/ERC20/IERC20.sol";
import "../crowdsale/validation/WhitelistCrowdsale.sol"; import "../crowdsale/validation/WhitelistCrowdsale.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../access/roles/WhitelistedRole.sol"; import "../access/roles/WhitelistedRole.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title Ownable * @title Ownable
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
/** /**
* @title Secondary * @title Secondary
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../math/SafeMath.sol"; import "../math/SafeMath.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "./escrow/Escrow.sol"; import "./escrow/Escrow.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "./Escrow.sol"; import "./Escrow.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
import "../../ownership/Secondary.sol"; import "../../ownership/Secondary.sol";
......
pragma solidity ^0.5.0; pragma solidity ^0.5.2;
import "./ConditionalEscrow.sol"; import "./ConditionalEscrow.sol";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment