Add back WhitelistedCrowdsale (#1525)

* Added WhitelisterRole.

* Added WhitelisteeRole and WhitelistedCrowdsale.

* Added WhitelistedCrowdsale tests.

* Whitelisters can now remove Whitelistees.

* PublicRole.behavior now supports a manager account, added Whitelistee tests.

* Rephrased tests, added test for whitelistees doing invalid purchases.

* Fixed linter error.

* Fixed typos

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Working around JS quirks

Co-Authored-By: nventuro <nicolas.venturo@gmail.com>

* Update PublicRole.behavior.js

* Renamed WhitelisteeRole to WhitelistedRole.

* Renamed WhitelistedCrowdsale to WhitelistCrowdsale.

* Now using the new test helper.

* Added basic documentation.
This commit is contained in:
Nicolás Venturo
2018-12-12 14:46:07 -03:00
committed by GitHub
parent dd2e947976
commit 7142e25e78
10 changed files with 276 additions and 32 deletions

View File

@ -0,0 +1,50 @@
pragma solidity ^0.4.24;
import "../Roles.sol";
import "./WhitelisterRole.sol";
/**
* @title WhitelistedRole
* @dev Whitelisted accounts have been approved by a Whitelister to perform certain actions (e.g. participate in a
* crowdsale). This role is special in that the only accounts that can add it are Whitelisters (who can also remove it),
* and not Whitelisteds themselves.
*/
contract WhitelistedRole is WhitelisterRole {
using Roles for Roles.Role;
event WhitelistedAdded(address indexed account);
event WhitelistedRemoved(address indexed account);
Roles.Role private _whitelisteds;
modifier onlyWhitelisted() {
require(isWhitelisted(msg.sender));
_;
}
function isWhitelisted(address account) public view returns (bool) {
return _whitelisteds.has(account);
}
function addWhitelisted(address account) public onlyWhitelister {
_addWhitelisted(account);
}
function removeWhitelisted(address account) public onlyWhitelister {
_removeWhitelisted(account);
}
function renounceWhitelisted() public {
_removeWhitelisted(msg.sender);
}
function _addWhitelisted(address account) internal {
_whitelisteds.add(account);
emit WhitelistedAdded(account);
}
function _removeWhitelisted(address account) internal {
_whitelisteds.remove(account);
emit WhitelistedRemoved(account);
}
}

View File

@ -0,0 +1,47 @@
pragma solidity ^0.4.24;
import "../Roles.sol";
/**
* @title WhitelisterRole
* @dev Whitelisters are responsible for assigning and removing Whitelisted accounts.
*/
contract WhitelisterRole {
using Roles for Roles.Role;
event WhitelisterAdded(address indexed account);
event WhitelisterRemoved(address indexed account);
Roles.Role private _whitelisters;
constructor () internal {
_addWhitelister(msg.sender);
}
modifier onlyWhitelister() {
require(isWhitelister(msg.sender));
_;
}
function isWhitelister(address account) public view returns (bool) {
return _whitelisters.has(account);
}
function addWhitelister(address account) public onlyWhitelister {
_addWhitelister(account);
}
function renounceWhitelister() public {
_removeWhitelister(msg.sender);
}
function _addWhitelister(address account) internal {
_whitelisters.add(account);
emit WhitelisterAdded(account);
}
function _removeWhitelister(address account) internal {
_whitelisters.remove(account);
emit WhitelisterRemoved(account);
}
}