Skip to content

Update Crowdsale.sol #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 141 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
388bdab
Update Crowdsale.sol
vclcash123 Aug 31, 2021
233e564
Update ERC20.sol
vclcash123 Aug 31, 2021
b5477e0
Update BasicToken.sol
vclcash123 Aug 31, 2021
877faa1
Update CappedCrowdsale.sol
vclcash123 Aug 31, 2021
0b6d22e
Update Ownable.sol
vclcash123 Aug 31, 2021
018180f
Update MintableToken.sol
vclcash123 Aug 31, 2021
66642a8
Update BurnableToken.sol
vclcash123 Aug 31, 2021
c97a1db
Update DetailedERC20.sol
vclcash123 Aug 31, 2021
e1265cd
Update ERC20Basic.sol
vclcash123 Aug 31, 2021
d4c25b8
Update ERC20Basic.sol
vclcash123 Aug 31, 2021
0b44ff8
Update SafeERC20.sol
vclcash123 Aug 31, 2021
45ab3d4
Update ERC20.sol
vclcash123 Aug 31, 2021
4ec5b70
Update Crowdsale.sol
vclcash123 Aug 31, 2021
dbfafbf
Create IERC20.sol
vclcash123 Aug 31, 2021
be434b0
Create IERC20Metadata.sol
vclcash123 Aug 31, 2021
37630bf
Update IERC20Metadata.sol
vclcash123 Aug 31, 2021
bfc22d8
Update Crowdsale.sol
vclcash123 Aug 31, 2021
68b6001
Update ERC20.sol
vclcash123 Aug 31, 2021
3129e06
Create Context.sol
vclcash123 Aug 31, 2021
aef56aa
Update StandardToken.sol
vclcash123 Aug 31, 2021
a170a0d
Update CappedToken.sol
vclcash123 Aug 31, 2021
b503fa4
Update PausableToken.sol
vclcash123 Aug 31, 2021
5712c81
Create Pausable.sol
vclcash123 Aug 31, 2021
2142c67
Update SafeERC20.sol
vclcash123 Aug 31, 2021
ae7c797
Update TokenTimelock.sol
vclcash123 Aug 31, 2021
e86b06d
Create SafeMath.sol
vclcash123 Aug 31, 2021
c4b3a88
Update TokenVesting.sol
vclcash123 Aug 31, 2021
9f8be96
Update BurnableToken.sol
vclcash123 Aug 31, 2021
c5d5a34
Update BasicToken.sol
vclcash123 Aug 31, 2021
b4d0881
Update StandardBurnableToken.sol
vclcash123 Aug 31, 2021
167bf57
Update RBACMintableToken.sol
vclcash123 Aug 31, 2021
26f0d5e
Update Roles.sol
vclcash123 Aug 31, 2021
0dd547b
Update RBAC.sol
vclcash123 Aug 31, 2021
8d3856e
Update BurnableToken.sol
vclcash123 Aug 31, 2021
7669959
Update BasicToken.sol
vclcash123 Aug 31, 2021
f5c57b8
Update DetailedERC20.sol
vclcash123 Aug 31, 2021
149196f
Update ERC20Basic.sol
vclcash123 Aug 31, 2021
db976b2
Update MintableToken.sol
vclcash123 Aug 31, 2021
b33b6ca
Update ERC20.sol
vclcash123 Aug 31, 2021
2fc9d88
Update PausableToken.sol
vclcash123 Aug 31, 2021
9cb3086
Update StandardBurnableToken.sol
vclcash123 Aug 31, 2021
a86e9ee
Update TokenVesting.sol
vclcash123 Aug 31, 2021
cab62af
Update IndividuallyCappedCrowdsale.sol
vclcash123 Sep 1, 2021
4abf2f0
Update TimedCrowdsale.sol
vclcash123 Sep 1, 2021
7f63ec7
Update WhitelistedCrowdsale.sol
vclcash123 Sep 1, 2021
f5ffc6c
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
0cb66b5
Create PausableCrowdsale.sol
vclcash123 Sep 1, 2021
c8b20a5
Update ERC20.sol
vclcash123 Sep 1, 2021
87d2016
Update Crowdsale.sol
vclcash123 Sep 1, 2021
c5608af
Update AllowanceCrowdsale.sol
vclcash123 Sep 1, 2021
bca4019
Update IncreasingPriceCrowdsale.sol
vclcash123 Sep 1, 2021
1f7392b
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
1d9ca0e
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
d9196ad
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
63a9e44
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
c8bd05c
Update CappedCrowdsale.sol
vclcash123 Sep 1, 2021
9f80076
Update Crowdsale.sol
vclcash123 Sep 1, 2021
c1efcb1
Update StandardToken.sol
vclcash123 Sep 1, 2021
d42b880
Update StandardToken.sol
vclcash123 Sep 1, 2021
87a18ba
Update Crowdsale.sol
vclcash123 Sep 1, 2021
31a5a0d
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
1f2c4fb
Update CappedCrowdsale.sol
vclcash123 Sep 1, 2021
9b3bb07
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
8c747f8
Update CappedCrowdsale.sol
vclcash123 Sep 1, 2021
b660d71
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
b6b3258
Update CappedCrowdsale.sol
vclcash123 Sep 1, 2021
59eb799
Update StandardToken.sol
vclcash123 Sep 1, 2021
518eab6
Update Crowdsale.sol
vclcash123 Sep 1, 2021
442dac8
Update CappedCrowdsale.sol
vclcash123 Sep 1, 2021
ddec4b4
Update MintedCrowdsale.sol
vclcash123 Sep 1, 2021
848995b
Update Crowdsale.sol
vclcash123 Sep 1, 2021
0ff56cb
Update StandardToken.sol
vclcash123 Sep 1, 2021
d9da03f
Update SafeMath.sol
vclcash123 Sep 1, 2021
0a1b0c8
Update ERC20.sol
vclcash123 Sep 1, 2021
a906110
Update ERC20.sol
vclcash123 Sep 1, 2021
2a6b847
Update IERC20.sol
vclcash123 Sep 1, 2021
10bf773
Update BasicToken.sol
vclcash123 Sep 1, 2021
b214d22
Update Ownable.sol
vclcash123 Sep 1, 2021
84d40ec
Update ERC20.sol
vclcash123 Sep 1, 2021
c4b10d5
Update IndividuallyCappedCrowdsale.sol
vclcash123 Sep 1, 2021
0a4f931
Update Ownable.sol
vclcash123 Sep 1, 2021
0f8b01d
Update ERC20.sol
vclcash123 Sep 1, 2021
ce02dc5
Update ERC20Basic.sol
vclcash123 Sep 1, 2021
6725c52
Update BasicToken.sol
vclcash123 Sep 1, 2021
e721b97
Update Ownable.sol
vclcash123 Sep 2, 2021
b664994
Update ERC20Basic.sol
vclcash123 Sep 2, 2021
ead8a76
Update BasicToken.sol
vclcash123 Sep 2, 2021
acfd8a2
Update ERC20Basic.sol
vclcash123 Sep 2, 2021
e0ea43a
Update ERC20Basic.sol
vclcash123 Sep 2, 2021
37f4bfb
Update BasicToken.sol
vclcash123 Sep 2, 2021
e3a0f91
Update ERC20Basic.sol
vclcash123 Sep 2, 2021
c2909ef
Update ERC20Basic.sol
vclcash123 Sep 2, 2021
7a8b637
Delete ERC20Basic.sol
vclcash123 Sep 2, 2021
687711b
Update FinalizableCrowdsale.sol
vclcash123 Sep 2, 2021
8d59388
Update TimedCrowdsale.sol
vclcash123 Sep 2, 2021
ce86cc8
Delete Ownable.sol
vclcash123 Sep 2, 2021
bbec66d
Create Ownable.sol
vclcash123 Sep 2, 2021
1838f76
Delete BasicToken.sol
vclcash123 Sep 2, 2021
80d5663
Create BasicToken.sol
vclcash123 Sep 2, 2021
f09646f
Update TimedCrowdsale.sol
vclcash123 Sep 2, 2021
e8dcea3
Delete TimedCrowdsale.sol
vclcash123 Sep 2, 2021
0bbe556
Create TimedCrowdsale.sol
vclcash123 Sep 2, 2021
6ab01b4
Delete FinalizableCrowdsale.sol
vclcash123 Sep 2, 2021
fe51114
Create FinalizableCrowdsale.sol
vclcash123 Sep 2, 2021
6f031cb
Create ERC20Basic.sol
vclcash123 Sep 2, 2021
43f9ab0
Update BasicToken.sol
vclcash123 Sep 2, 2021
56abc32
Update ERC20Basic.sol
vclcash123 Sep 2, 2021
07c3e32
Update ERC20Basic.sol
vclcash123 Sep 3, 2021
0c1ccd7
Update BasicToken.sol
vclcash123 Sep 3, 2021
a1fc9b1
Update BasicToken.sol
vclcash123 Sep 3, 2021
f236d04
Update StandardToken.sol
vclcash123 Sep 3, 2021
1bac07a
Update BasicToken.sol
vclcash123 Sep 3, 2021
5669a5e
Update TimedCrowdsale.sol
vclcash123 Sep 3, 2021
7b2dbeb
Update CappedCrowdsale.sol
vclcash123 Sep 3, 2021
65caf86
Update Crowdsale.sol
vclcash123 Sep 3, 2021
67fb9e7
Update TimedCrowdsale.sol
vclcash123 Sep 3, 2021
e393209
Update CappedCrowdsale.sol
vclcash123 Sep 3, 2021
ce5e89d
Update Crowdsale.sol
vclcash123 Sep 3, 2021
9b966fe
Update Crowdsale.sol
vclcash123 Sep 9, 2021
d5a5167
Update SafeERC20.sol
vclcash123 Sep 9, 2021
d69aff9
Update SafeERC20.sol
vclcash123 Sep 9, 2021
9602875
Update SafeERC20.sol
vclcash123 Sep 9, 2021
a075ce6
Update Crowdsale.sol
vclcash123 Sep 9, 2021
b844e69
Update Crowdsale.sol
vclcash123 Sep 9, 2021
0a30bec
Update ERC20.sol
vclcash123 Sep 9, 2021
5dde528
Update StandardToken.sol
vclcash123 Sep 9, 2021
ab53b6e
Update MintableToken.sol
vclcash123 Sep 9, 2021
e45f824
Update BasicToken.sol
vclcash123 Sep 9, 2021
5305756
Update BasicToken.sol
vclcash123 Sep 9, 2021
b9b3d55
Update Context.sol
vclcash123 Sep 10, 2021
1ab8acf
Update Crowdsale.sol
vclcash123 Sep 10, 2021
5cc18fa
Update BasicToken.sol
vclcash123 Sep 10, 2021
ed9773d
Update CappedCrowdsale.sol
vclcash123 Sep 12, 2021
629c504
Update CappedCrowdsale.sol
vclcash123 Sep 12, 2021
e339504
Update Crowdsale.sol
vclcash123 Sep 13, 2021
cee41e9
Update IERC20Metadata.sol
vclcash123 Jan 26, 2022
66f8fdd
Update IERC20Metadata.sol
vclcash123 Jan 26, 2022
bcedf6b
Update SafeMath.sol
vclcash123 Sep 13, 2023
67e0f7f
Update IERC20.sol
vclcash123 Sep 13, 2023
ca1db62
Update SafeMath.sol
vclcash123 Sep 14, 2023
601b618
Update Crowdsale.sol
vclcash123 Sep 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 61 additions & 45 deletions contracts/crowdsale/Crowdsale.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
pragma solidity ^0.4.23;
// SPDX-License-Identifier: MIT License

import "../token/ERC20/ERC20.sol";
import "../math/SafeMath.sol";
pragma solidity ^0.8.9;

import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/token/ERC20/SafeMath.sol";
import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/token/ERC20/IERC20.sol";


/**
Expand All @@ -19,18 +21,29 @@ import "../math/SafeMath.sol";
contract Crowdsale {
using SafeMath for uint256;

// The token being sold
ERC20 public token;
// How many token units a buyer gets per wei.
// The rate is the conversion between wei and the smallest and indivisible token unit.
// So, if you are using a rate of 1 with a DetailedERC20 token with 3 decimals called TOK
// 1 wei will give you 1 unit, or 0.001 TOK.
uint256 public rate;

// Address where funds are collected
address public wallet;
// Address where funds are collected
address payable wallet;

// How many token units a buyer gets per wei
uint256 public rate;
// The token being sold
address public token;

// Amount of wei raised
uint256 public weiRaised;

// Public Supply
uint256 public publicSupply;

// start and end timestamps where investments are allowed (both inclusive)
uint256 public startTime;
uint256 public endTime;


/**
* Event for token purchase logging
* @param purchaser who paid for the tokens
Expand All @@ -46,58 +59,66 @@ contract Crowdsale {
);

/**
* @param _rate Number of token units a buyer gets per wei
* @param _wallet Address where collected funds will be forwarded to
* @param _token Address of the token being sold
* param _rate Number of token units a buyer gets per wei
* param _wallet Address where collected funds will be forwarded to
* param _token Address of the token being sold
*/
constructor(uint256 _rate, address _wallet, ERC20 _token) public {

constructor (uint256 _startTime, uint256 _endTime, uint256 _rate, address payable _wallet, address _token) {
require(_startTime >= block.timestamp);
require(_endTime >= _startTime);
require(_rate > 0);
require(_wallet != address(0));
require(_token != address(0));

require(address(token) != address(0));
startTime = _startTime;
endTime = _endTime;
rate = _rate;
wallet = _wallet;
token = _token;

}



// -----------------------------------------
// Crowdsale external interface
// -----------------------------------------

/**
* @dev fallback function ***DO NOT OVERRIDE***
*/
function () external payable {
fallback () external payable {
buyTokens(msg.sender);
}

receive () external payable {
buyTokens(msg.sender);
}


/**
* @dev low level token purchase ***DO NOT OVERRIDE***
* @param _beneficiary Address performing the token purchase
*/
function buyTokens(address _beneficiary) public payable {

function buyTokens(address _beneficiary) public payable {
require(_beneficiary != address(0));
uint256 weiAmount = msg.value;
_preValidatePurchase(_beneficiary, weiAmount);
// _preValidatePurchase(_beneficiary, weiAmount);

// calculate token amount to be created
uint256 tokens = _getTokenAmount(weiAmount);

// update state
weiRaised = weiRaised.add(weiAmount);

_processPurchase(_beneficiary, tokens);
emit TokenPurchase(
msg.sender,
_beneficiary,
weiAmount,
tokens
);
// _processPurchase(_beneficiary, token);
emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens);

_updatePurchasingState(_beneficiary, weiAmount);

_forwardFunds();
_postValidatePurchase(_beneficiary, weiAmount);


}

// -----------------------------------------
Expand All @@ -108,7 +129,7 @@ contract Crowdsale {
* @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. Use super to concatenate validations.
* @param _beneficiary Address performing the token purchase
* @param _weiAmount Value in wei involved in the purchase
*/

function _preValidatePurchase(
address _beneficiary,
uint256 _weiAmount
Expand All @@ -118,40 +139,32 @@ contract Crowdsale {
require(_beneficiary != address(0));
require(_weiAmount != 0);
}

/**
* @dev Validation of an executed purchase. Observe state and use revert statements to undo rollback when valid conditions are not met.
* @param _beneficiary Address performing the token purchase
* @param _weiAmount Value in wei involved in the purchase
*/
function _postValidatePurchase(
address _beneficiary,
uint256 _weiAmount
)
internal
{
// optional override
}

*/

/**
* @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens.
* @param _beneficiary Address performing the token purchase
* @param _tokenAmount Number of tokens to be emitted
*/


function _deliverTokens(
address _beneficiary,
uint256 _tokenAmount
)
internal
{
token.transfer(_beneficiary, _tokenAmount);
token.transfer(_beneficiary, _tokenAmount);
}

*/


/**
* @dev Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens.
* @param _beneficiary Address receiving the tokens
* @param _tokenAmount Number of tokens to be purchased
*/

function _processPurchase(
address _beneficiary,
uint256 _tokenAmount
Expand All @@ -161,6 +174,9 @@ contract Crowdsale {
_deliverTokens(_beneficiary, _tokenAmount);
}

*/


/**
* @dev Override for extensions that require an internal state to check for validity (current user contributions, etc.)
* @param _beneficiary Address receiving the tokens
Expand Down
20 changes: 9 additions & 11 deletions contracts/crowdsale/distribution/FinalizableCrowdsale.sol
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
pragma solidity ^0.4.23;
// SPDX-License-Identifier: MIT

import "../../math/SafeMath.sol";
import "../../ownership/Ownable.sol";
import "../validation/TimedCrowdsale.sol";
pragma solidity ^0.8.7;

import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/crowdsale/validation/TimedCrowdsale.sol";
import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/ownership/Ownable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol";

/**
* @title FinalizableCrowdsale
* @dev Extension of Crowdsale where an owner can do extra work
* after finishing.
* title FinalizableCrowdsale
* dev Extension of Crowdsale where an owner can do extra work after finishing.
*/
contract FinalizableCrowdsale is TimedCrowdsale, Ownable {
using SafeMath for uint256;

bool public isFinalized = false;

event Finalized();

using SafeMath for uint256;

/**
* @dev Must be called after crowdsale ends, to do some extra finalization
* work. Calls the contract's finalization function.
Expand Down
10 changes: 6 additions & 4 deletions contracts/crowdsale/emission/AllowanceCrowdsale.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
pragma solidity ^0.4.23;
// SPDX-License-Identifier: MIT

import "../Crowdsale.sol";
import "../../token/ERC20/ERC20.sol";
import "../../math/SafeMath.sol";
pragma solidity ^0.8.4;

import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/crowdsale/Crowdsale.sol";
import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/token/ERC20/ERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol";


/**
Expand Down
8 changes: 5 additions & 3 deletions contracts/crowdsale/emission/MintedCrowdsale.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
pragma solidity ^0.4.23;
// SPDX-License-Identifier: MIT License Modern Variant

import "../Crowdsale.sol";
import "../../token/ERC20/MintableToken.sol";
pragma solidity ^0.8.7;

import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/crowdsale/Crowdsale.sol";
import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/token/ERC20/MintableToken.sol";


/**
Expand Down
8 changes: 5 additions & 3 deletions contracts/crowdsale/price/IncreasingPriceCrowdsale.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
pragma solidity ^0.4.23;
// SPDX-License-Identifier: MIT

import "../validation/TimedCrowdsale.sol";
import "../../math/SafeMath.sol";
pragma solidity ^0.8.4;

import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/crowdsale/validation/TimedCrowdsale.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol";


/**
Expand Down
86 changes: 47 additions & 39 deletions contracts/crowdsale/validation/CappedCrowdsale.sol
Original file line number Diff line number Diff line change
@@ -1,48 +1,56 @@
pragma solidity ^0.4.23;
// SPDX-License-Identifier: MIT License Modern Variant

import "../../math/SafeMath.sol";
import "../Crowdsale.sol";
pragma solidity ^0.8.7;

import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/token/ERC20/ERC20.sol";

/**
* @title CappedCrowdsale
* @dev Crowdsale with a limit for total contributions.
*/
contract CappedCrowdsale is Crowdsale {
using SafeMath for uint256;

uint256 public cap;

/**
* @dev Constructor, takes maximum amount of wei accepted in the crowdsale.
* @param _cap Max amount of wei to be contributed
*/
constructor(uint256 _cap) public {
require(_cap > 0);
cap = _cap;
}

/**
* @dev Checks whether the cap has been reached.
* @return Whether the cap was reached
*/
function capReached() public view returns (bool) {
return weiRaised >= cap;
}

/**
* @dev Extend parent behavior requiring purchase to respect the funding cap.
* @param _beneficiary Token purchaser
* @param _weiAmount Amount of wei contributed
*/
function _preValidatePurchase(
address _beneficiary,
uint256 _weiAmount
)
internal
{
super._preValidatePurchase(_beneficiary, _weiAmount);
require(weiRaised.add(_weiAmount) <= cap);
}

abstract contract ERC20Capped is ERC20 {

uint256 public _cap=300000000000000000000; // 300 ETH = 300*10^18 wei = 300000000000000000000 wei;

//minimum investor Contribution - 1
//maximum investor Contribution - 300 wei is similar maxium daily 300 ETH crowdsale
uint256 public investorMinCap = 1000000000000000000; // 1 ETH = 10^18 wei = 1000000000000000000 wei
uint256 public investorHardCap = 300000000000000000000; // 300 ETH = 300*10^18 wei = 300000000000000000000 wei

// start and end timestamps where investments are allowed (both inclusive)
uint256 public startTime;
uint256 public endTime;

mapping(address => uint256) public contributions;

/**
* @dev Sets the value of the `cap`. This value is immutable, it can only be
* set once during construction.
*/
constructor(uint256 cap_, uint256 _openingTime, uint256 _closingTime) {
require(cap_ > 0, "ERC20Capped: cap is 300000000000000000000");
require(_openingTime >= block.timestamp);
require(_closingTime >= _openingTime);
_cap = cap_;
}

/**
* @dev Returns the cap on the token's total supply.
*/
function cap() public view virtual returns (uint256) {
return _cap;
}

/**
* @dev See {ERC20-_mint}.
*/
function _mint(address account, uint256 amount) internal virtual override {
require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded");
super._mint(account, amount);
}



}

10 changes: 6 additions & 4 deletions contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
pragma solidity ^0.4.23;
// SPDX-License-Identifier: MIT License Modern Variant

import "../../math/SafeMath.sol";
import "../Crowdsale.sol";
import "../../ownership/Ownable.sol";
pragma solidity ^0.8.7;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol";
import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/crowdsale/Crowdsale.sol";
import "https://github.com/vclcash123/openzeppelin-solidity/blob/patch-2/contracts/ownership/Ownable.sol";


/**
Expand Down
Loading