pragma solidity ^0.4.19;
// ----------------------------------------------------------------------------
//
// Funds Gateway contract
//
// ----------------------------------------------------------------------------
contract Owned {
address public owner;
address public newOwner;
event OwnershipTransferProposed(address indexed _from, address indexed _to);
event OwnershipTransferConfirmed(address indexed _from, address indexed _to);
modifier onlyOwner {
require(msg.sender == owner);
_;
}
function Owned() public{
owner = msg.sender;
}
function transferOwnership(address _newOwner) onlyOwner public{
require(_newOwner != owner);
OwnershipTransferProposed(owner, _newOwner);
newOwner = _newOwner;
}
function confirmOwnership() public{
assert(msg.sender == newOwner);
OwnershipTransferConfirmed(owner, newOwner);
owner = newOwner;
}
}
contract Gateway is Owned{
address public targetWallet;
address public whitelistWallet;
bool public gatewayOpened = false;
mapping(address => bool) public whitelist;
event TargetWalletUpdated(address _newWallet);
event WhitelistWalletUpdated(address _newWhitelistWallet);
event GatewayStatusUpdated(bool _status);
event WhitelistUpdated(address indexed _participant, bool _status);
event PassedGateway(address _participant, uint _value);
function Gateway() public{
targetWallet = owner;
whitelistWallet = owner;
newOwner = address(0x0);
}
function () payable public{
passGateway();
}
function addToWhitelist(address _participant) external{
require(msg.sender == whitelistWallet || msg.sender == owner);
whitelist[_participant] = true;
WhitelistUpdated(_participant, true);
}
function addToWhitelistMultiple(address[] _participants) external{
require(msg.sender == whitelistWallet || msg.sender == owner);
for (uint i = 0; i < _participants.length; i++) {
whitelist[_participants[i]] = true;
WhitelistUpdated(_participants[i], true);
}
}
function removeFromWhitelist(address _participant) external{
require(msg.sender == whitelistWallet || msg.sender == owner);
whitelist[_participant] = false;
WhitelistUpdated(_participant, false);
}
function removeFromWhitelistMultiple(address[] _participants) external{
require(msg.sender == whitelistWallet || msg.sender == owner);
for (uint i = 0; i < _participants.length; i++) {
whitelist[_participants[i]] = false;
WhitelistUpdated(_participants[i], false);
}
}
function setTargetWallet(address _wallet) onlyOwner external{
require(_wallet != address(0x0));
targetWallet = _wallet;
TargetWalletUpdated(_wallet);
}
function setWhitelistWallet(address _wallet) onlyOwner external{
whitelistWallet = _wallet;
WhitelistWalletUpdated(_wallet);
}
function openGateway() onlyOwner external{
require(!gatewayOpened);
gatewayOpened = true;
GatewayStatusUpdated(true);
}
function closeGateway() onlyOwner external{
require(gatewayOpened);
gatewayOpened = false;
GatewayStatusUpdated(false);
}
function passGateway() private{
require(gatewayOpened);
require(whitelist[msg.sender]);
// sends Eth forward; covers edge case of mining/selfdestructing Eth to the contract address
targetWallet.transfer(this.balance);
// log event
PassedGateway(msg.sender, msg.value);
}
}
{
"compilationTarget": {
"Gateway.sol": "Gateway"
},
"libraries": {},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"setWhitelistWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gatewayOpened","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeGateway","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"openGateway","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participants","type":"address[]"}],"name":"removeFromWhitelistMultiple","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"setTargetWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"removeFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_participants","type":"address[]"}],"name":"addToWhitelistMultiple","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"targetWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"confirmOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newWallet","type":"address"}],"name":"TargetWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newWhitelistWallet","type":"address"}],"name":"WhitelistWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_status","type":"bool"}],"name":"GatewayStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_participant","type":"address"},{"indexed":false,"name":"_status","type":"bool"}],"name":"WhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_participant","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"PassedGateway","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferConfirmed","type":"event"}]