Add complex crowdsale example #331 requested changes

pull/342/head
Jakub Wojciechowski 8 years ago
parent 04e0b2e5c2
commit a9e1fcd623
  1. 48
      contracts/examples/SampleCrowdsale.sol
  2. 27
      contracts/examples/crowdsale/SampleCrowdsale.sol
  3. 18
      contracts/examples/crowdsale/SampleCrowdsaleToken.sol
  4. 2
      test/SampleCrowdsale.js

@ -0,0 +1,48 @@
pragma solidity ^0.4.11;
import "../crowdsale/CappedCrowdsale.sol";
import "../crowdsale/RefundableCrowdsale.sol";
import "../token/MintableToken.sol";
/**
* @title SampleCrowdsaleToken
* @dev Very simple ERC20 Token that can be minted.
* It is meant to be used in a crowdsale contract.
*/
contract SampleCrowdsaleToken is MintableToken {
string public constant name = "Sample Crowdsale Token";
string public constant symbol = "SCT";
uint8 public constant decimals = 18;
}
/**
* @title SampleCrowdsale
* @dev This is an example of a fully fledged crowdsale.
* The way to add new features to a base crowdsale is by multiple inheritance.
* In this example we are providing following extensions:
* CappedCrowdsale - sets a max boundary for raised funds
* RefundableCrowdsale - set a min goal to be reached and returns funds if it's not met
*
* After adding multiple features it's good practice to run integration tests
* to ensure that subcontracts works together as intended.
*/
contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale {
function SampleCrowdsale(uint256 _startBlock, uint256 _endBlock, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet)
CappedCrowdsale(_cap)
FinalizableCrowdsale()
RefundableCrowdsale(_goal)
Crowdsale(_startBlock, _endBlock, _rate, _wallet)
{
//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);
}
function createTokenContract() internal returns (MintableToken) {
return new SampleCrowdsaleToken();
}
}

@ -1,27 +0,0 @@
pragma solidity ^0.4.11;
import "../../crowdsale/CappedCrowdsale.sol";
import "../../crowdsale/RefundableCrowdsale.sol";
import "./SampleCrowdsaleToken.sol";
/**
* @title SampleCrowdsale
* @dev This is an example of a fully fledged crowdsale that incorporates
* ability to finalize sale and checks for both cap and goal.
*/
contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale {
function SampleCrowdsale(uint256 _startBlock, uint256 _endBlock, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet)
CappedCrowdsale(_cap)
FinalizableCrowdsale()
RefundableCrowdsale(_goal)
Crowdsale(_startBlock, _endBlock, _rate, _wallet)
{
require(_goal <= _cap);
}
function createTokenContract() internal returns (MintableToken) {
return new SampleCrowdsaleToken();
}
}

@ -1,18 +0,0 @@
pragma solidity ^0.4.11;
import "../../token/MintableToken.sol";
/**
* @title SampleCrowdsaleToken
* @dev Very simple ERC20 Token that can be minted.
* It is meant to be used in a crowdsale contract.
*/
contract SampleCrowdsaleToken is MintableToken {
string public constant name = "Sample Crowdsale Token";
string public constant symbol = "SCT";
uint256 public constant decimals = 18;
}

@ -34,7 +34,7 @@ contract('Crowdsale', function ([owner, wallet, investor]) {
(await this.crowdsale.startBlock()).should.be.bignumber.equal(this.startBlock);
(await this.crowdsale.endBlock()).should.be.bignumber.equal(this.endBlock);
(await this.crowdsale.rate()).should.be.bignumber.equal(RATE);
(await this.crowdsale.wallet()).should.be.bignumber.equal(wallet);
(await this.crowdsale.wallet()).should.be.equal(wallet);
(await this.crowdsale.goal()).should.be.bignumber.equal(GOAL);
(await this.crowdsale.cap()).should.be.bignumber.equal(CAP);
});

Loading…
Cancel
Save