// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;
contract BridgeDeposit {
address private owner;
uint256 private maxDepositAmount;
uint256 private maxBalance;
bool private canReceiveDeposit;
constructor(
uint256 _maxDepositAmount,
uint256 _maxBalance,
bool _canReceiveDeposit
) {
owner = msg.sender;
maxDepositAmount = _maxDepositAmount;
maxBalance = _maxBalance;
canReceiveDeposit = _canReceiveDeposit;
emit OwnerSet(address(0), msg.sender);
emit MaxDepositAmountSet(0, _maxDepositAmount);
emit MaxBalanceSet(0, _maxBalance);
emit CanReceiveDepositSet(_canReceiveDeposit);
}
// Send the contract's balance to the owner
function withdrawBalance() public isOwner {
uint256 balance = address(this).balance;
payable(owner).transfer(balance);
emit BalanceWithdrawn(owner, balance);
}
function destroy() public isOwner {
emit Destructed(owner, address(this).balance);
selfdestruct(payable(owner));
}
// Receive function which reverts if amount > maxDepositAmount and canReceiveDeposit = false
receive() external payable isLowerThanMaxDepositAmount canReceive isLowerThanMaxBalance {
emit EtherReceived(msg.sender, msg.value);
}
// Setters
function setMaxAmount(uint256 _maxDepositAmount) public isOwner {
emit MaxDepositAmountSet(maxDepositAmount, _maxDepositAmount);
maxDepositAmount = _maxDepositAmount;
}
function setOwner(address newOwner) public isOwner {
emit OwnerSet(owner, newOwner);
owner = newOwner;
}
function setCanReceiveDeposit(bool _canReceiveDeposit) public isOwner {
emit CanReceiveDepositSet(_canReceiveDeposit);
canReceiveDeposit = _canReceiveDeposit;
}
function setMaxBalance(uint256 _maxBalance) public isOwner {
emit MaxBalanceSet(maxBalance, _maxBalance);
maxBalance = _maxBalance;
}
// Getters
function getMaxDepositAmount() external view returns (uint256) {
return maxDepositAmount;
}
function getMaxBalance() external view returns (uint256) {
return maxBalance;
}
function getOwner() external view returns (address) {
return owner;
}
function getCanReceiveDeposit() external view returns (bool) {
return canReceiveDeposit;
}
// Modifiers
modifier isLowerThanMaxDepositAmount() {
require(msg.value <= maxDepositAmount, "Deposit amount is too big");
_;
}
modifier isOwner() {
require(msg.sender == owner, "Caller is not owner");
_;
}
modifier canReceive() {
require(canReceiveDeposit == true, "Contract is not allowed to receive ether");
_;
}
modifier isLowerThanMaxBalance() {
require(address(this).balance <= maxBalance, "Contract reached the max balance allowed");
_;
}
// Events
event OwnerSet(address indexed oldOwner, address indexed newOwner);
event MaxDepositAmountSet(uint256 previousAmount, uint256 newAmount);
event CanReceiveDepositSet(bool canReceiveDeposit);
event MaxBalanceSet(uint256 previousBalance, uint256 newBalance);
event BalanceWithdrawn(address indexed owner, uint256 balance);
event EtherReceived(address indexed emitter, uint256 amount);
event Destructed(address indexed owner, uint256 amount);
}
{
"compilationTarget": {
"BridgeDeposit.sol": "BridgeDeposit"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"uint256","name":"_maxDepositAmount","type":"uint256"},{"internalType":"uint256","name":"_maxBalance","type":"uint256"},{"internalType":"bool","name":"_canReceiveDeposit","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"BalanceWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"canReceiveDeposit","type":"bool"}],"name":"CanReceiveDepositSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Destructed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"emitter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"MaxBalanceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxDepositAmountSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"inputs":[],"name":"destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCanReceiveDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxDepositAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_canReceiveDeposit","type":"bool"}],"name":"setCanReceiveDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDepositAmount","type":"uint256"}],"name":"setMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBalance","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]