Add complex crowdsale example #331 requested changes
parent
04e0b2e5c2
commit
a9e1fcd623
@ -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; |
||||
|
||||
} |
Loading…
Reference in new issue