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