update to solidity 0.8.19 (#1)

This commit is contained in:
Ricardo Guilherme Schmidt 2023-09-12 11:22:43 -03:00 committed by GitHub
parent 4d63c8448a
commit 2a8505f3b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 90 additions and 87 deletions

View File

@ -1,17 +1,18 @@
pragma solidity ^0.4.18; // SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract Controlled { contract Controlled {
/// @notice The address of the controller is the only address that can call /// @notice The address of the controller is the only address that can call
/// a function with this modifier /// a function with this modifier
modifier onlyController { require(msg.sender == controller); _; } modifier onlyController { require(msg.sender == controller); _; }
address public controller; address payable public controller;
function Controlled() public { controller = msg.sender;} constructor() { controller = payable(msg.sender);}
/// @notice Changes the controller of the contract /// @notice Changes the controller of the contract
/// @param _newController The new controller of the contract /// @param _newController The new controller of the contract
function changeController(address _newController) public onlyController { function changeController(address payable _newController) public onlyController {
controller = _newController; controller = _newController;
} }
} }

View File

@ -1,4 +1,5 @@
pragma solidity ^0.4.18; // SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
/* /*
Copyright 2016, Jordi Baylina Copyright 2016, Jordi Baylina
@ -28,8 +29,8 @@ pragma solidity ^0.4.18;
import "./Controlled.sol"; import "./Controlled.sol";
import "./TokenController.sol"; import "./TokenController.sol";
contract ApproveAndCallFallBack { abstract contract ApproveAndCallFallBack {
function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; function receiveApproval(address from, uint256 _amount, address _token, bytes memory _data) virtual public;
} }
/// @dev The actual token contract, the default controller is the msg.sender /// @dev The actual token contract, the default controller is the msg.sender
@ -100,20 +101,20 @@ contract MiniMeToken is Controlled {
/// @param _decimalUnits Number of decimals of the new token /// @param _decimalUnits Number of decimals of the new token
/// @param _tokenSymbol Token Symbol for the new token /// @param _tokenSymbol Token Symbol for the new token
/// @param _transfersEnabled If true, tokens will be able to be transferred /// @param _transfersEnabled If true, tokens will be able to be transferred
function MiniMeToken( constructor(
address _tokenFactory, MiniMeTokenFactory _tokenFactory,
address _parentToken, MiniMeToken _parentToken,
uint _parentSnapShotBlock, uint _parentSnapShotBlock,
string _tokenName, string memory _tokenName,
uint8 _decimalUnits, uint8 _decimalUnits,
string _tokenSymbol, string memory _tokenSymbol,
bool _transfersEnabled bool _transfersEnabled
) public { ) {
tokenFactory = MiniMeTokenFactory(_tokenFactory); tokenFactory = _tokenFactory;
name = _tokenName; // Set the name name = _tokenName; // Set the name
decimals = _decimalUnits; // Set the decimals decimals = _decimalUnits; // Set the decimals
symbol = _tokenSymbol; // Set the symbol symbol = _tokenSymbol; // Set the symbol
parentToken = MiniMeToken(_parentToken); parentToken = _parentToken;
parentSnapShotBlock = _parentSnapShotBlock; parentSnapShotBlock = _parentSnapShotBlock;
transfersEnabled = _transfersEnabled; transfersEnabled = _transfersEnabled;
creationBlock = block.number; creationBlock = block.number;
@ -127,7 +128,7 @@ contract MiniMeToken is Controlled {
/// @notice Send `_amount` tokens to `_to` from `msg.sender` /// @notice Send `_amount` tokens to `_to` from `msg.sender`
/// @param _to The address of the recipient /// @param _to The address of the recipient
/// @param _amount The amount of tokens to be transferred /// @param _amount The amount of tokens to be transferred
/// @return Whether the transfer was successful or not /// @return success Whether the transfer was successful or not
function transfer(address _to, uint256 _amount) public returns (bool success) { function transfer(address _to, uint256 _amount) public returns (bool success) {
require(transfersEnabled); require(transfersEnabled);
doTransfer(msg.sender, _to, _amount); doTransfer(msg.sender, _to, _amount);
@ -139,7 +140,7 @@ contract MiniMeToken is Controlled {
/// @param _from The address holding the tokens being transferred /// @param _from The address holding the tokens being transferred
/// @param _to The address of the recipient /// @param _to The address of the recipient
/// @param _amount The amount of tokens to be transferred /// @param _amount The amount of tokens to be transferred
/// @return True if the transfer was successful /// @return success True if the transfer was successful
function transferFrom(address _from, address _to, uint256 _amount function transferFrom(address _from, address _to, uint256 _amount
) public returns (bool success) { ) public returns (bool success) {
@ -163,23 +164,22 @@ contract MiniMeToken is Controlled {
/// @param _from The address holding the tokens being transferred /// @param _from The address holding the tokens being transferred
/// @param _to The address of the recipient /// @param _to The address of the recipient
/// @param _amount The amount of tokens to be transferred /// @param _amount The amount of tokens to be transferred
/// @return True if the transfer was successful
function doTransfer(address _from, address _to, uint _amount function doTransfer(address _from, address _to, uint _amount
) internal { ) internal {
if (_amount == 0) { if (_amount == 0) {
Transfer(_from, _to, _amount); // Follow the spec to louch the event when transfer 0 emit Transfer(_from, _to, _amount); // Follow the spec to louch the event when transfer 0
return; return;
} }
require(parentSnapShotBlock < block.number); require(parentSnapShotBlock < block.number);
// Do not allow transfer to 0x0 or the token contract itself // Do not allow transfer to 0x0 or the token contract itself
require((_to != 0) && (_to != address(this))); require((_to != address(0)) && (_to != address(this)));
// If the amount being transfered is more than the balance of the // If the amount being transfered is more than the balance of the
// account the transfer throws // account the transfer throws
var previousBalanceFrom = balanceOfAt(_from, block.number); uint256 previousBalanceFrom = balanceOfAt(_from, block.number);
require(previousBalanceFrom >= _amount); require(previousBalanceFrom >= _amount);
@ -194,18 +194,18 @@ contract MiniMeToken is Controlled {
// Then update the balance array with the new value for the address // Then update the balance array with the new value for the address
// receiving the tokens // receiving the tokens
var previousBalanceTo = balanceOfAt(_to, block.number); uint256 previousBalanceTo = balanceOfAt(_to, block.number);
require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
updateValueAtNow(balances[_to], previousBalanceTo + _amount); updateValueAtNow(balances[_to], previousBalanceTo + _amount);
// An event to make the transfer easy to find on the blockchain // An event to make the transfer easy to find on the blockchain
Transfer(_from, _to, _amount); emit Transfer(_from, _to, _amount);
} }
/// @param _owner The address that's balance is being requested /// @param _owner The address that's balance is being requested
/// @return The balance of `_owner` at the current block /// @return balance The balance of `_owner` at the current block
function balanceOf(address _owner) public constant returns (uint256 balance) { function balanceOf(address _owner) public view returns (uint256 balance) {
return balanceOfAt(_owner, block.number); return balanceOfAt(_owner, block.number);
} }
@ -214,7 +214,7 @@ contract MiniMeToken is Controlled {
/// to be a little bit safer /// to be a little bit safer
/// @param _spender The address of the account able to transfer the tokens /// @param _spender The address of the account able to transfer the tokens
/// @param _amount The amount of tokens to be approved for transfer /// @param _amount The amount of tokens to be approved for transfer
/// @return True if the approval was successful /// @return success True if the approval was successful
function approve(address _spender, uint256 _amount) public returns (bool success) { function approve(address _spender, uint256 _amount) public returns (bool success) {
require(transfersEnabled); require(transfersEnabled);
@ -230,17 +230,17 @@ contract MiniMeToken is Controlled {
} }
allowed[msg.sender][_spender] = _amount; allowed[msg.sender][_spender] = _amount;
Approval(msg.sender, _spender, _amount); emit Approval(msg.sender, _spender, _amount);
return true; return true;
} }
/// @dev This function makes it easy to read the `allowed[]` map /// @dev This function makes it easy to read the `allowed[]` map
/// @param _owner The address of the account that owns the token /// @param _owner The address of the account that owns the token
/// @param _spender The address of the account able to transfer the tokens /// @param _spender The address of the account able to transfer the tokens
/// @return Amount of remaining tokens of _owner that _spender is allowed /// @return remaining Amount of remaining tokens of _owner that _spender is allowed
/// to spend /// to spend
function allowance(address _owner, address _spender function allowance(address _owner, address _spender
) public constant returns (uint256 remaining) { ) public view returns (uint256 remaining) {
return allowed[_owner][_spender]; return allowed[_owner][_spender];
} }
@ -250,15 +250,15 @@ contract MiniMeToken is Controlled {
/// interact with contracts in one function call instead of two /// interact with contracts in one function call instead of two
/// @param _spender The address of the contract able to transfer the tokens /// @param _spender The address of the contract able to transfer the tokens
/// @param _amount The amount of tokens to be approved for transfer /// @param _amount The amount of tokens to be approved for transfer
/// @return True if the function call was successful /// @return success True if the function call was successful
function approveAndCall(address _spender, uint256 _amount, bytes _extraData function approveAndCall(address _spender, uint256 _amount, bytes memory _extraData
) public returns (bool success) { ) public returns (bool success) {
require(approve(_spender, _amount)); require(approve(_spender, _amount));
ApproveAndCallFallBack(_spender).receiveApproval( ApproveAndCallFallBack(_spender).receiveApproval(
msg.sender, msg.sender,
_amount, _amount,
this, address(this),
_extraData _extraData
); );
@ -267,7 +267,7 @@ contract MiniMeToken is Controlled {
/// @dev This function makes it easy to get the total number of tokens /// @dev This function makes it easy to get the total number of tokens
/// @return The total number of tokens /// @return The total number of tokens
function totalSupply() public constant returns (uint) { function totalSupply() public view returns (uint) {
return totalSupplyAt(block.number); return totalSupplyAt(block.number);
} }
@ -280,7 +280,7 @@ contract MiniMeToken is Controlled {
/// @param _owner The address from which the balance will be retrieved /// @param _owner The address from which the balance will be retrieved
/// @param _blockNumber The block number when the balance is queried /// @param _blockNumber The block number when the balance is queried
/// @return The balance at `_blockNumber` /// @return The balance at `_blockNumber`
function balanceOfAt(address _owner, uint _blockNumber) public constant function balanceOfAt(address _owner, uint _blockNumber) public view
returns (uint) { returns (uint) {
// These next few lines are used when the balance of the token is // These next few lines are used when the balance of the token is
@ -290,7 +290,7 @@ contract MiniMeToken is Controlled {
// this token // this token
if ((balances[_owner].length == 0) if ((balances[_owner].length == 0)
|| (balances[_owner][0].fromBlock > _blockNumber)) { || (balances[_owner][0].fromBlock > _blockNumber)) {
if (address(parentToken) != 0) { if (address(parentToken) != address(0)) {
return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));
} else { } else {
// Has no parent // Has no parent
@ -306,7 +306,7 @@ contract MiniMeToken is Controlled {
/// @notice Total amount of tokens at a specific `_blockNumber`. /// @notice Total amount of tokens at a specific `_blockNumber`.
/// @param _blockNumber The block number when the totalSupply is queried /// @param _blockNumber The block number when the totalSupply is queried
/// @return The total amount of tokens at `_blockNumber` /// @return The total amount of tokens at `_blockNumber`
function totalSupplyAt(uint _blockNumber) public constant returns(uint) { function totalSupplyAt(uint _blockNumber) public view returns(uint) {
// These next few lines are used when the totalSupply of the token is // These next few lines are used when the totalSupply of the token is
// requested before a check point was ever created for this token, it // requested before a check point was ever created for this token, it
@ -315,7 +315,7 @@ contract MiniMeToken is Controlled {
// token at this block number. // token at this block number.
if ((totalSupplyHistory.length == 0) if ((totalSupplyHistory.length == 0)
|| (totalSupplyHistory[0].fromBlock > _blockNumber)) { || (totalSupplyHistory[0].fromBlock > _blockNumber)) {
if (address(parentToken) != 0) { if (address(parentToken) != address(0)) {
return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));
} else { } else {
return 0; return 0;
@ -342,9 +342,9 @@ contract MiniMeToken is Controlled {
/// @param _transfersEnabled True if transfers are allowed in the clone /// @param _transfersEnabled True if transfers are allowed in the clone
/// @return The address of the new MiniMeToken Contract /// @return The address of the new MiniMeToken Contract
function createCloneToken( function createCloneToken(
string _cloneTokenName, string memory _cloneTokenName,
uint8 _cloneDecimalUnits, uint8 _cloneDecimalUnits,
string _cloneTokenSymbol, string memory _cloneTokenSymbol,
uint _snapshotBlock, uint _snapshotBlock,
bool _transfersEnabled bool _transfersEnabled
) public returns(address) { ) public returns(address) {
@ -358,10 +358,10 @@ contract MiniMeToken is Controlled {
_transfersEnabled _transfersEnabled
); );
cloneToken.changeController(msg.sender); cloneToken.changeController(payable(msg.sender));
// An event to make the token easy to find on the blockchain // An event to make the token easy to find on the blockchain
NewCloneToken(address(cloneToken), _snapshotBlock); emit NewCloneToken(address(cloneToken), _snapshotBlock);
return address(cloneToken); return address(cloneToken);
} }
@ -381,7 +381,7 @@ contract MiniMeToken is Controlled {
require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
updateValueAtNow(balances[_owner], previousBalanceTo + _amount); updateValueAtNow(balances[_owner], previousBalanceTo + _amount);
Transfer(0, _owner, _amount); emit Transfer(address(0), _owner, _amount);
return true; return true;
} }
@ -398,7 +398,7 @@ contract MiniMeToken is Controlled {
require(previousBalanceFrom >= _amount); require(previousBalanceFrom >= _amount);
updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount);
updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); updateValueAtNow(balances[_owner], previousBalanceFrom - _amount);
Transfer(_owner, 0, _amount); emit Transfer(_owner, address(0), _amount);
return true; return true;
} }
@ -422,7 +422,7 @@ contract MiniMeToken is Controlled {
/// @param _block The block number to retrieve the value at /// @param _block The block number to retrieve the value at
/// @return The number of tokens being queried /// @return The number of tokens being queried
function getValueAt(Checkpoint[] storage checkpoints, uint _block function getValueAt(Checkpoint[] storage checkpoints, uint _block
) constant internal returns (uint) { ) view internal returns (uint) {
if (checkpoints.length == 0) return 0; if (checkpoints.length == 0) return 0;
// Shortcut for the actual value // Shortcut for the actual value
@ -452,7 +452,7 @@ contract MiniMeToken is Controlled {
) internal { ) internal {
if ((checkpoints.length == 0) if ((checkpoints.length == 0)
|| (checkpoints[checkpoints.length -1].fromBlock < block.number)) { || (checkpoints[checkpoints.length -1].fromBlock < block.number)) {
Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; Checkpoint storage newCheckPoint = checkpoints.push();
newCheckPoint.fromBlock = uint128(block.number); newCheckPoint.fromBlock = uint128(block.number);
newCheckPoint.value = uint128(_value); newCheckPoint.value = uint128(_value);
} else { } else {
@ -464,9 +464,9 @@ contract MiniMeToken is Controlled {
/// @dev Internal function to determine if an address is a contract /// @dev Internal function to determine if an address is a contract
/// @param _addr The address being queried /// @param _addr The address being queried
/// @return True if `_addr` is a contract /// @return True if `_addr` is a contract
function isContract(address _addr) constant internal returns(bool) { function isContract(address _addr) view internal returns(bool) {
uint size; uint size;
if (_addr == 0) return false; if (_addr == address(0)) return false;
assembly { assembly {
size := extcodesize(_addr) size := extcodesize(_addr)
} }
@ -481,9 +481,9 @@ contract MiniMeToken is Controlled {
/// @notice The fallback function: If the contract's controller has not been /// @notice The fallback function: If the contract's controller has not been
/// set to 0, then the `proxyPayment` method is called which relays the /// set to 0, then the `proxyPayment` method is called which relays the
/// ether and creates tokens as described in the token controller contract /// ether and creates tokens as described in the token controller contract
function () public payable { receive() external payable {
require(isContract(controller)); require(isContract(controller));
require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); require(TokenController(controller).proxyPayment{value: msg.value}(msg.sender));
} }
////////// //////////
@ -494,16 +494,16 @@ contract MiniMeToken is Controlled {
/// sent tokens to this contract. /// sent tokens to this contract.
/// @param _token The address of the token contract that you want to recover /// @param _token The address of the token contract that you want to recover
/// set to 0 in case you want to extract ether. /// set to 0 in case you want to extract ether.
function claimTokens(address _token) public onlyController { function claimTokens(MiniMeToken _token) public onlyController { //TODO: change is to generic ERC20 interface
if (_token == 0x0) { if (address(_token) == address(0)) {
controller.transfer(this.balance); controller.transfer(address(this).balance);
return; return;
} }
MiniMeToken token = MiniMeToken(_token); MiniMeToken token = _token;
uint balance = token.balanceOf(this); uint balance = token.balanceOf(address(this));
token.transfer(controller, balance); token.transfer(controller, balance);
ClaimedTokens(_token, controller, balance); emit ClaimedTokens(address(_token), controller, balance);
} }
//////////////// ////////////////
@ -541,11 +541,11 @@ contract MiniMeTokenFactory {
/// @param _transfersEnabled If true, tokens will be able to be transferred /// @param _transfersEnabled If true, tokens will be able to be transferred
/// @return The address of the new token contract /// @return The address of the new token contract
function createCloneToken( function createCloneToken(
address _parentToken, MiniMeToken _parentToken,
uint _snapshotBlock, uint _snapshotBlock,
string _tokenName, string memory _tokenName,
uint8 _decimalUnits, uint8 _decimalUnits,
string _tokenSymbol, string memory _tokenSymbol,
bool _transfersEnabled bool _transfersEnabled
) public returns (MiniMeToken) { ) public returns (MiniMeToken) {
MiniMeToken newToken = new MiniMeToken( MiniMeToken newToken = new MiniMeToken(
@ -558,7 +558,7 @@ contract MiniMeTokenFactory {
_transfersEnabled _transfersEnabled
); );
newToken.changeController(msg.sender); newToken.changeController(payable(msg.sender));
return newToken; return newToken;
} }
} }

View File

@ -1,4 +1,5 @@
pragma solidity ^0.4.6; // SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
/* /*
Copyright 2017, Jordi Baylina Copyright 2017, Jordi Baylina
@ -24,7 +25,7 @@ pragma solidity ^0.4.6;
/// funds for non-profit causes, but it can be customized for any variety of /// funds for non-profit causes, but it can be customized for any variety of
/// purposes. /// purposes.
import "MiniMeToken.sol"; import "./MiniMeToken.sol";
/// @dev `Owned` is a base level contract that assigns an `owner` that can be /// @dev `Owned` is a base level contract that assigns an `owner` that can be
@ -37,12 +38,12 @@ contract Owned {
address public owner; address public owner;
/// @notice The Constructor assigns the message sender to be `owner` /// @notice The Constructor assigns the message sender to be `owner`
function Owned() { owner = msg.sender;} constructor() { owner = msg.sender;}
/// @notice `owner` can step down and assign some other address to this role /// @notice `owner` can step down and assign some other address to this role
/// @param _newOwner The address of the new owner. 0x0 can be used to create /// @param _newOwner The address of the new owner. 0x0 can be used to create
/// an unowned neutral vault, however that cannot be undone /// an ublock.timestampned neutral vault, however that cannot be undone
function changeOwner(address _newOwner) onlyOwner { function changeOwner(address _newOwner) public onlyOwner {
owner = _newOwner; owner = _newOwner;
} }
} }
@ -59,7 +60,7 @@ contract Campaign is TokenController, Owned {
uint public maximumFunding; // In wei uint public maximumFunding; // In wei
uint public totalCollected; // In wei uint public totalCollected; // In wei
MiniMeToken public tokenContract; // The new token for this Campaign MiniMeToken public tokenContract; // The new token for this Campaign
address public vaultAddress; // The address to hold the funds donated address payable public vaultAddress; // The address to hold the funds donated
/// @notice 'Campaign()' initiates the Campaign by setting its funding /// @notice 'Campaign()' initiates the Campaign by setting its funding
/// parameters /// parameters
@ -73,22 +74,22 @@ contract Campaign is TokenController, Owned {
/// @param _vaultAddress The address that will store the donated funds /// @param _vaultAddress The address that will store the donated funds
/// @param _tokenAddress Address of the token contract this contract controls /// @param _tokenAddress Address of the token contract this contract controls
function Campaign( constructor(
uint _startFundingTime, uint _startFundingTime,
uint _endFundingTime, uint _endFundingTime,
uint _maximumFunding, uint _maximumFunding,
address _vaultAddress, address payable _vaultAddress,
address _tokenAddress MiniMeToken _tokenAddress
) { ) {
require ((_endFundingTime >= now) && // Cannot end in the past require ((_endFundingTime >= block.timestamp) && // Cannot end in the past
(_endFundingTime > _startFundingTime) && (_endFundingTime > _startFundingTime) &&
(_maximumFunding <= 10000 ether) && // The Beta is limited (_maximumFunding <= 10000 ether) && // The Beta is limited
(_vaultAddress != 0)); // To prevent burning ETH (_vaultAddress != address(0))); // To prevent burning ETH
startFundingTime = _startFundingTime; startFundingTime = _startFundingTime;
endFundingTime = _endFundingTime; endFundingTime = _endFundingTime;
maximumFunding = _maximumFunding; maximumFunding = _maximumFunding;
tokenContract = MiniMeToken(_tokenAddress);// The Deployed Token Contract tokenContract = _tokenAddress;// The Deployed Token Contract
vaultAddress = _vaultAddress; vaultAddress = _vaultAddress;
} }
@ -97,7 +98,7 @@ contract Campaign is TokenController, Owned {
/// `_owner`. Payable is a required solidity modifier for functions to receive /// `_owner`. Payable is a required solidity modifier for functions to receive
/// ether, without this modifier functions will throw if ether is sent to them /// ether, without this modifier functions will throw if ether is sent to them
function () payable { receive() external payable {
doPayment(msg.sender); doPayment(msg.sender);
} }
@ -109,7 +110,7 @@ contract Campaign is TokenController, Owned {
/// have the tokens created in an address of their choosing /// have the tokens created in an address of their choosing
/// @param _owner The address that will hold the newly created tokens /// @param _owner The address that will hold the newly created tokens
function proxyPayment(address _owner) payable returns(bool) { function proxyPayment(address _owner) public override payable returns(bool) {
doPayment(_owner); doPayment(_owner);
return true; return true;
} }
@ -120,7 +121,7 @@ contract Campaign is TokenController, Owned {
/// @param _to The destination of the transfer /// @param _to The destination of the transfer
/// @param _amount The amount of the transfer /// @param _amount The amount of the transfer
/// @return False if the controller does not authorize the transfer /// @return False if the controller does not authorize the transfer
function onTransfer(address _from, address _to, uint _amount) returns(bool) { function onTransfer(address _from, address _to, uint _amount) public override returns(bool) {
return true; return true;
} }
@ -130,7 +131,7 @@ contract Campaign is TokenController, Owned {
/// @param _spender The spender in the `approve()` call /// @param _spender The spender in the `approve()` call
/// @param _amount The amount in the `approve()` call /// @param _amount The amount in the `approve()` call
/// @return False if the controller does not authorize the approval /// @return False if the controller does not authorize the approval
function onApprove(address _owner, address _spender, uint _amount) function onApprove(address _owner, address _spender, uint _amount) public override
returns(bool) returns(bool)
{ {
return true; return true;
@ -145,9 +146,9 @@ contract Campaign is TokenController, Owned {
function doPayment(address _owner) internal { function doPayment(address _owner) internal {
// First check that the Campaign is allowed to receive this donation // First check that the Campaign is allowed to receive this donation
require ((now >= startFundingTime) && require ((block.timestamp >= startFundingTime) &&
(now <= endFundingTime) && (block.timestamp <= endFundingTime) &&
(tokenContract.controller() != 0) && // Extra check (tokenContract.controller() != address(0)) && // Extra check
(msg.value != 0) && (msg.value != 0) &&
(totalCollected + msg.value <= maximumFunding)); (totalCollected + msg.value <= maximumFunding));
@ -169,16 +170,16 @@ contract Campaign is TokenController, Owned {
/// Campaign from receiving more ether /// Campaign from receiving more ether
/// @dev `finalizeFunding()` can only be called after the end of the funding period. /// @dev `finalizeFunding()` can only be called after the end of the funding period.
function finalizeFunding() { function finalizeFunding() external {
require(now >= endFundingTime); require(block.timestamp >= endFundingTime);
tokenContract.changeController(0); tokenContract.changeController(payable(address(0)));
} }
/// @notice `onlyOwner` changes the location that ether is sent /// @notice `onlyOwner` changes the location that ether is sent
/// @param _newVaultAddress The address that will receive the ether sent to this /// @param _newVaultAddress The address that will receive the ether sent to this
/// Campaign /// Campaign
function setVault(address _newVaultAddress) onlyOwner { function setVault(address payable _newVaultAddress) external onlyOwner {
vaultAddress = _newVaultAddress; vaultAddress = _newVaultAddress;
} }

View File

@ -1,11 +1,12 @@
pragma solidity ^0.4.18; // SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
/// @dev The token controller contract must implement these functions /// @dev The token controller contract must implement these functions
contract TokenController { abstract contract TokenController {
/// @notice Called when `_owner` sends ether to the MiniMe Token contract /// @notice Called when `_owner` sends ether to the MiniMe Token contract
/// @param _owner The address that sent the ether to create tokens /// @param _owner The address that sent the ether to create tokens
/// @return True if the ether is accepted, false if it throws /// @return True if the ether is accepted, false if it throws
function proxyPayment(address _owner) public payable returns(bool); function proxyPayment(address _owner) virtual public payable returns(bool);
/// @notice Notifies the controller about a token transfer allowing the /// @notice Notifies the controller about a token transfer allowing the
/// controller to react if desired /// controller to react if desired
@ -13,7 +14,7 @@ contract TokenController {
/// @param _to The destination of the transfer /// @param _to The destination of the transfer
/// @param _amount The amount of the transfer /// @param _amount The amount of the transfer
/// @return False if the controller does not authorize the transfer /// @return False if the controller does not authorize the transfer
function onTransfer(address _from, address _to, uint _amount) public returns(bool); function onTransfer(address _from, address _to, uint _amount) virtual public returns(bool);
/// @notice Notifies the controller about an approval allowing the /// @notice Notifies the controller about an approval allowing the
/// controller to react if desired /// controller to react if desired
@ -21,6 +22,6 @@ contract TokenController {
/// @param _spender The spender in the `approve()` call /// @param _spender The spender in the `approve()` call
/// @param _amount The amount in the `approve()` call /// @param _amount The amount in the `approve()` call
/// @return False if the controller does not authorize the approval /// @return False if the controller does not authorize the approval
function onApprove(address _owner, address _spender, uint _amount) public function onApprove(address _owner, address _spender, uint _amount) virtual public
returns(bool); returns(bool);
} }