convert SampleCrowdsale and SampleCrowdsaleToken to initializers

This commit is contained in:
Francisco Giordano
2018-09-28 17:47:48 -03:00
parent 2108641a37
commit 693907d3c8
3 changed files with 63 additions and 7 deletions

View File

@ -1,5 +1,6 @@
pragma solidity ^0.4.24;
import "../Initializable.sol";
import "../crowdsale/validation/CappedCrowdsale.sol";
import "../crowdsale/distribution/RefundableCrowdsale.sol";
import "../crowdsale/emission/MintedCrowdsale.sol";
@ -11,11 +12,19 @@ import "../token/ERC20/ERC20Mintable.sol";
* @dev Very simple ERC20 Token that can be minted.
* It is meant to be used in a crowdsale contract.
*/
contract SampleCrowdsaleToken is ERC20Mintable {
contract SampleCrowdsaleToken is Initializable, ERC20Mintable {
string public constant name = "Sample Crowdsale Token";
string public constant symbol = "SCT";
uint8 public constant decimals = 18;
string public name;
string public symbol;
uint8 public decimals;
function initialize() public initializer {
ERC20Mintable.initialize();
name = "Sample Crowdsale Token";
symbol = "SCT";
decimals = 18;
}
}
@ -35,7 +44,7 @@ contract SampleCrowdsaleToken is ERC20Mintable {
// https://github.com/duaraghav8/Solium/issues/205
// --elopio - 2018-05-10
// solium-disable-next-line max-len
contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale, MintedCrowdsale {
contract SampleCrowdsale is Initializable, Crowdsale, CappedCrowdsale, RefundableCrowdsale, MintedCrowdsale {
constructor(
uint256 openingTime,
@ -52,6 +61,25 @@ contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale, MintedCrowdsal
TimedCrowdsale(openingTime, closingTime)
RefundableCrowdsale(goal)
{
}
function initialize(
uint256 openingTime,
uint256 closingTime,
uint256 rate,
address wallet,
uint256 cap,
ERC20Mintable token,
uint256 goal
)
public
initializer
{
Crowdsale.initialize(rate, wallet, token);
CappedCrowdsale.initialize(cap);
TimedCrowdsale.initialize(openingTime, closingTime);
RefundableCrowdsale.initialize(goal);
//As goal needs to be met for a successful crowdsale
//the value needs to less or equal than a cap which is limit for accepted funds
require(goal <= cap);

View File

@ -0,0 +1,28 @@
pragma solidity ^0.4.24;
import "../Initializable.sol";
import "../examples/SampleCrowdsale.sol";
contract SampleCrowdsaleTokenMock is Initializable, SampleCrowdsaleToken {
constructor() public {
SampleCrowdsaleToken.initialize();
}
}
contract SampleCrowdsaleMock is Initializable, SampleCrowdsale {
constructor(
uint256 openingTime,
uint256 closingTime,
uint256 rate,
address wallet,
uint256 cap,
ERC20Mintable token,
uint256 goal
)
public
SampleCrowdsale(openingTime, closingTime, rate, wallet, cap, token, goal)
{
SampleCrowdsale.initialize(openingTime, closingTime, rate, wallet, cap, token, goal);
}
}

View File

@ -13,8 +13,8 @@ const should = require('chai')
.use(require('chai-bignumber')(BigNumber))
.should();
const SampleCrowdsale = artifacts.require('SampleCrowdsale');
const SampleCrowdsaleToken = artifacts.require('SampleCrowdsaleToken');
const SampleCrowdsale = artifacts.require('SampleCrowdsaleMock');
const SampleCrowdsaleToken = artifacts.require('SampleCrowdsaleTokenMock');
contract('SampleCrowdsale', function ([_, deployer, owner, wallet, investor]) {
const RATE = new BigNumber(10);