编译器
0.5.11+commit.c082d0b4
文件 1 的 11:BasicToken.sol
pragma solidity ^0.5.3;
import "./ERC20Basic.sol";
import "./SafeMath.sol";
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances[_owner];
}
}
文件 2 的 11:BurnableToken.sol
pragma solidity ^0.5.3;
import "./BasicToken.sol";
contract BurnableToken is BasicToken {
event Burn(address indexed burner, uint256 value);
function burn(uint256 _value) public {
require(_value <= balances[msg.sender]);
address burner = msg.sender;
balances[burner] = balances[burner].sub(_value);
totalSupply_ = totalSupply_.sub(_value);
emit Burn(burner, _value);
emit Transfer(burner, address(0), _value);
}
}
文件 3 的 11:ERC20.sol
pragma solidity ^0.5.3;
import "./ERC20Basic.sol";
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
文件 4 的 11:ERC20Basic.sol
pragma solidity ^0.5.3;
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
文件 5 的 11:GNTDeposit.sol
pragma solidity 0.5.11;
import "./Ownable.sol";
import "./GolemNetworkTokenBatching.sol";
import "./ReceivingContract.sol";
contract GNTDeposit is ReceivingContract, Ownable {
using SafeMath for uint256;
address public concent;
address public coldwallet;
uint256 public withdrawal_delay;
uint256 public maximum_deposits_total;
uint256 public maximum_deposit_amount;
uint256 public daily_reimbursement_limit;
uint256 private current_reimbursement_day;
uint256 private current_reimbursement_sum;
GolemNetworkTokenBatching public token;
mapping (address => uint256) public balances;
mapping (address => uint256) public locked_until;
event ConcentTransferred(address indexed _previousConcent, address indexed _newConcent);
event ColdwalletTransferred(address indexed _previousColdwallet, address indexed _newColdwallet);
event Deposit(address indexed _owner, uint256 _amount);
event Withdraw(address indexed _from, address indexed _to, uint256 _amount);
event Lock(address indexed _owner);
event Unlock(address indexed _owner);
event Burn(address indexed _who, uint256 _amount);
event ReimburseForSubtask(address indexed _requestor, address indexed _provider, uint256 _amount, bytes32 _subtask_id);
event ReimburseForNoPayment(address indexed _requestor, address indexed _provider, uint256 _amount, uint256 _closure_time);
event ReimburseForVerificationCosts(address indexed _from, uint256 _amount, bytes32 _subtask_id);
event ReimburseForCommunication(address indexed _from, uint256 _amount);
constructor(
GolemNetworkTokenBatching _token,
address _concent,
address _coldwallet,
uint256 _withdrawal_delay
)
public
{
token = _token;
concent = _concent;
coldwallet = _coldwallet;
withdrawal_delay = _withdrawal_delay;
}
modifier onlyUnlocked() {
require(isUnlocked(msg.sender), "Deposit is not unlocked");
_;
}
modifier onlyConcent() {
require(msg.sender == concent, "Concent only method");
_;
}
modifier onlyToken() {
require(msg.sender == address(token), "Token only method");
_;
}
function balanceOf(address _owner) external view returns (uint256) {
return balances[_owner];
}
function isLocked(address _owner) external view returns (bool) {
return locked_until[_owner] == 0;
}
function isTimeLocked(address _owner) external view returns (bool) {
return locked_until[_owner] > block.timestamp;
}
function isUnlocked(address _owner) public view returns (bool) {
return locked_until[_owner] != 0 && locked_until[_owner] < block.timestamp;
}
function getTimelock(address _owner) external view returns (uint256) {
return locked_until[_owner];
}
function isDepositPossible(address _owner, uint256 _amount) external view returns (bool) {
return !_isTotalDepositsLimitHit(_amount) && !_isMaximumDepositLimitHit(_owner, _amount);
}
function transferConcent(address _newConcent) onlyOwner external {
require(_newConcent != address(0), "New concent address cannot be 0");
emit ConcentTransferred(concent, _newConcent);
concent = _newConcent;
}
function transferColdwallet(address _newColdwallet) onlyOwner external {
require(_newColdwallet != address(0), "New coldwallet address cannot be 0");
emit ColdwalletTransferred(coldwallet, _newColdwallet);
coldwallet = _newColdwallet;
}
function setMaximumDepositsTotal(uint256 _value) onlyOwner external {
maximum_deposits_total = _value;
}
function setMaximumDepositAmount(uint256 _value) onlyOwner external {
maximum_deposit_amount = _value;
}
function setDailyReimbursementLimit(uint256 _value) onlyOwner external {
daily_reimbursement_limit = _value;
}
function unlock() external {
locked_until[msg.sender] = block.timestamp + withdrawal_delay;
emit Unlock(msg.sender);
}
function lock() external {
locked_until[msg.sender] = 0;
emit Lock(msg.sender);
}
function onTokenReceived(address _from, uint256 _amount, bytes calldata ) external onlyToken {
require(!_isTotalDepositsLimitHit(0), "Total deposits limit hit");
require(!_isMaximumDepositLimitHit(_from, _amount), "Maximum deposit limit hit");
balances[_from] += _amount;
locked_until[_from] = 0;
emit Deposit(_from, _amount);
}
function withdraw(address _to) onlyUnlocked external {
uint256 _amount = balances[msg.sender];
balances[msg.sender] = 0;
locked_until[msg.sender] = 0;
require(token.transfer(_to, _amount));
emit Withdraw(msg.sender, _to, _amount);
}
function burn(address _whom, uint256 _amount) onlyConcent external {
require(balances[_whom] >= _amount, "Not enough funds to burn");
balances[_whom] -= _amount;
if (balances[_whom] == 0) {
locked_until[_whom] = 0;
}
token.burn(_amount);
emit Burn(_whom, _amount);
}
function reimburseForSubtask(
address _requestor,
address _provider,
uint256 _amount,
bytes32 _subtask_id,
uint8 _v,
bytes32 _r,
bytes32 _s,
uint256 _reimburse_amount
)
onlyConcent
external
{
require(_isValidSignature(_requestor, _provider, _amount, _subtask_id, _v, _r, _s), "Invalid signature");
require(_reimburse_amount <= _amount, "Reimburse amount exceeds allowed");
_reimburse(_requestor, _provider, _reimburse_amount);
emit ReimburseForSubtask(_requestor, _provider, _reimburse_amount, _subtask_id);
}
function reimburseForNoPayment(
address _requestor,
address _provider,
uint256[] calldata _amount,
bytes32[] calldata _subtask_id,
uint8[] calldata _v,
bytes32[] calldata _r,
bytes32[] calldata _s,
uint256 _reimburse_amount,
uint256 _closure_time
)
onlyConcent
external
{
require(_amount.length == _subtask_id.length);
require(_amount.length == _v.length);
require(_amount.length == _r.length);
require(_amount.length == _s.length);
for (uint256 i = 0; i < _amount.length; i++) {
require(_isValidSignature(_requestor, _provider, _amount[i], _subtask_id[i], _v[i], _r[i], _s[i]), "Invalid signature");
}
uint256 total_amount = 0;
for (uint256 i = 0; i < _amount.length; i++) {
total_amount += _amount[i];
}
require(_reimburse_amount <= total_amount, "Reimburse amount exceeds total");
_reimburse(_requestor, _provider, _reimburse_amount);
emit ReimburseForNoPayment(_requestor, _provider, _reimburse_amount, _closure_time);
}
function reimburseForVerificationCosts(
address _from,
uint256 _amount,
bytes32 _subtask_id,
uint8 _v,
bytes32 _r,
bytes32 _s,
uint256 _reimburse_amount
)
onlyConcent
external
{
require(_isValidSignature(_from, address(this), _amount, _subtask_id, _v, _r, _s), "Invalid signature");
require(_reimburse_amount <= _amount, "Reimburse amount exceeds allowed");
_reimburse(_from, coldwallet, _reimburse_amount);
emit ReimburseForVerificationCosts(_from, _reimburse_amount, _subtask_id);
}
function reimburseForCommunication(
address _from,
uint256 _amount
)
onlyConcent
external
{
_reimburse(_from, coldwallet, _amount);
emit ReimburseForCommunication(_from, _amount);
}
function _reimburse(address _from, address _to, uint256 _amount) private {
require(balances[_from] >= _amount, "Not enough funds to reimburse");
if (daily_reimbursement_limit != 0) {
if (current_reimbursement_day != block.timestamp / 1 days) {
current_reimbursement_day = block.timestamp / 1 days;
current_reimbursement_sum = 0;
}
require(current_reimbursement_sum + _amount <= daily_reimbursement_limit, "Daily reimbursement limit hit");
current_reimbursement_sum += _amount;
}
balances[_from] -= _amount;
if (balances[_from] == 0) {
locked_until[_from] = 0;
}
require(token.transfer(_to, _amount));
}
function _isTotalDepositsLimitHit(uint256 _amount) private view returns (bool) {
if (maximum_deposits_total == 0) {
return false;
}
return token.balanceOf(address(this)).add(_amount) > maximum_deposits_total;
}
function _isMaximumDepositLimitHit(address _owner, uint256 _amount) private view returns (bool) {
if (maximum_deposit_amount == 0) {
return false;
}
return balances[_owner].add(_amount) > maximum_deposit_amount;
}
function _isValidSignature(
address _from,
address _to,
uint256 _amount,
bytes32 _subtask_id,
uint8 _v,
bytes32 _r,
bytes32 _s
) public view returns (bool) {
if (uint256(_s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
return false;
}
if (_v != 27 && _v != 28) {
return false;
}
return _from == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n124", address(this), _from, _to, _amount, _subtask_id)), _v, _r, _s);
}
}
文件 6 的 11:GolemNetworkTokenBatching.sol
pragma solidity ^0.5.3;
import "./ReceivingContract.sol";
import "./TokenProxy.sol";
contract GolemNetworkTokenBatching is TokenProxy {
string public constant name = "Golem Network Token Batching";
string public constant symbol = "GNTB";
uint8 public constant decimals = 18;
event BatchTransfer(address indexed from, address indexed to, uint256 value,
uint64 closureTime);
constructor(ERC20Basic _gntToken) TokenProxy(_gntToken) public {
}
function batchTransfer(bytes32[] calldata payments, uint64 closureTime) external {
require(block.timestamp >= closureTime);
uint balance = balances[msg.sender];
for (uint i = 0; i < payments.length; ++i) {
bytes32 payment = payments[i];
address addr = address(uint256(payment));
require(addr != address(0) && addr != msg.sender);
uint v = uint(payment) / 2**160;
require(v <= balance);
balances[addr] += v;
balance -= v;
emit BatchTransfer(msg.sender, addr, v, closureTime);
}
balances[msg.sender] = balance;
}
function transferAndCall(address to, uint256 value, bytes calldata data) external {
transfer(to, value);
ReceivingContract(to).onTokenReceived(msg.sender, value, data);
}
}
文件 7 的 11:Ownable.sol
pragma solidity ^0.5.3;
contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () internal {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(isOwner(), "Owner only method");
_;
}
function isOwner() public view returns (bool) {
return msg.sender == _owner;
}
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0));
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
文件 8 的 11:ReceivingContract.sol
pragma solidity 0.5.11;
contract ReceivingContract {
function onTokenReceived(address _from, uint _value, bytes calldata _data) external;
}
文件 9 的 11:SafeMath.sol
pragma solidity ^0.5.3;
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a / b;
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
文件 10 的 11:StandardToken.sol
pragma solidity ^0.5.3;
import "./BasicToken.sol";
import "./ERC20.sol";
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public returns (bool) {
require(allowed[msg.sender][_spender] == 0);
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
文件 11 的 11:TokenProxy.sol
pragma solidity ^0.5.3;
import "./BurnableToken.sol";
import "./StandardToken.sol";
contract Gate {
ERC20Basic private TOKEN;
address private PROXY;
constructor(ERC20Basic _token, address _proxy) public {
TOKEN = _token;
PROXY = _proxy;
}
function transferToProxy(uint256 _value) public {
require(msg.sender == PROXY);
require(TOKEN.transfer(PROXY, _value));
}
}
contract TokenProxy is StandardToken, BurnableToken {
ERC20Basic public TOKEN;
mapping(address => address) private gates;
event GateOpened(address indexed gate, address indexed user);
event Mint(address indexed to, uint256 amount);
constructor(ERC20Basic _token) public {
TOKEN = _token;
}
function getGateAddress(address _user) external view returns (address) {
return gates[_user];
}
function openGate() external {
address user = msg.sender;
require(gates[user] == address(0));
address gate = address(new Gate(TOKEN, address(this)));
gates[user] = gate;
emit GateOpened(gate, user);
}
function transferFromGate() external {
address user = msg.sender;
address gate = gates[user];
require(gate != address(0));
uint256 value = TOKEN.balanceOf(gate);
Gate(gate).transferToProxy(value);
totalSupply_ += value;
balances[user] += value;
emit Mint(user, value);
}
function withdraw(uint256 _value) external {
withdrawTo(_value, msg.sender);
}
function withdrawTo(uint256 _value, address _destination) public {
require(_value > 0 && _destination != address(0));
burn(_value);
TOKEN.transfer(_destination, _value);
}
}
{
"compilationTarget": {
"GNTDeposit.sol": "GNTDeposit"
},
"evmVersion": "petersburg",
"libraries": {},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"coldwallet","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setDailyReimbursementLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"concent","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newColdwallet","type":"address"}],"name":"transferColdwallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_subtask_id","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"_isValidSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_requestor","type":"address"},{"internalType":"address","name":"_provider","type":"address"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"},{"internalType":"bytes32[]","name":"_subtask_id","type":"bytes32[]"},{"internalType":"uint8[]","name":"_v","type":"uint8[]"},{"internalType":"bytes32[]","name":"_r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_s","type":"bytes32[]"},{"internalType":"uint256","name":"_reimburse_amount","type":"uint256"},{"internalType":"uint256","name":"_closure_time","type":"uint256"}],"name":"reimburseForNoPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_requestor","type":"address"},{"internalType":"address","name":"_provider","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_subtask_id","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint256","name":"_reimburse_amount","type":"uint256"}],"name":"reimburseForSubtask","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"reimburseForCommunication","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maximum_deposit_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_whom","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"daily_reimbursement_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_subtask_id","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint256","name":"_reimburse_amount","type":"uint256"}],"name":"reimburseForVerificationCosts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"isTimeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onTokenReceived","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"locked_until","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximum_deposits_total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaximumDepositAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"isDepositPossible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newConcent","type":"address"}],"name":"transferConcent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"withdrawal_delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaximumDepositsTotal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"lock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"contract GolemNetworkTokenBatching","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract GolemNetworkTokenBatching","name":"_token","type":"address"},{"internalType":"address","name":"_concent","type":"address"},{"internalType":"address","name":"_coldwallet","type":"address"},{"internalType":"uint256","name":"_withdrawal_delay","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_previousConcent","type":"address"},{"indexed":true,"internalType":"address","name":"_newConcent","type":"address"}],"name":"ConcentTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_previousColdwallet","type":"address"},{"indexed":true,"internalType":"address","name":"_newColdwallet","type":"address"}],"name":"ColdwalletTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"Unlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_who","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_requestor","type":"address"},{"indexed":true,"internalType":"address","name":"_provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_subtask_id","type":"bytes32"}],"name":"ReimburseForSubtask","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_requestor","type":"address"},{"indexed":true,"internalType":"address","name":"_provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_closure_time","type":"uint256"}],"name":"ReimburseForNoPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_subtask_id","type":"bytes32"}],"name":"ReimburseForVerificationCosts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ReimburseForCommunication","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]