/**
*
Watchtower
*/
//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.6;
contract Watchtower
{
address private owner;
uint256 private registerPrice;
mapping (address => bool) private members;
uint256 memberCount;
uint256 maxMembers;
constructor()
{
owner = msg.sender;
memberCount = 0;
maxMembers = 250;
registerPrice = 0.2 ether;
}
// Readers
function getRegisterPrice() external view returns(uint256)
{
return(registerPrice);
}
function getMaxMembers() external view returns(uint256)
{
return(maxMembers);
}
function getMemberCount() external view returns(uint256)
{
return(memberCount);
}
function getOwner() external view returns(address)
{
return(owner);
}
function isMember(address _account) external view returns(bool)
{
return(members[_account]);
}
// Functions
function setOwner(address _owner) external
{
require(msg.sender == owner, "Function only callable by owner!");
owner = _owner;
}
function setRegisterPrice(uint256 _registerPrice) external
{
require(msg.sender == owner, "Function only callable by owner!");
registerPrice = _registerPrice;
}
function setMaxMembers(uint256 _maxMembers) external
{
require(msg.sender == owner, "Function only callable by owner!");
maxMembers = _maxMembers;
}
// Register functions
receive() external payable
{
register();
}
function register() public payable
{
require(!members[msg.sender], "Address already registered!");
require(msg.value >= registerPrice, "Amount sent below register price!");
require(memberCount < maxMembers, "We're currently at maximum members");
memberCount += 1;
members[msg.sender] = true;
}
// Withdraw Ether
function withdraw(uint256 _amount, address _receiver) external
{
require(msg.sender == owner, "Function only callable by owner!");
payable(_receiver).transfer(_amount);
}
}
{
"compilationTarget": {
"Watchtower.sol": "Watchtower"
},
"evmVersion": "berlin",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"getMaxMembers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRegisterPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"register","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMembers","type":"uint256"}],"name":"setMaxMembers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_registerPrice","type":"uint256"}],"name":"setRegisterPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]