burned fee locker/recycler
This commit is contained in:
parent
5be48d084c
commit
4a8f336c7c
|
@ -0,0 +1,46 @@
|
|||
pragma solidity ^0.4.17;
|
||||
|
||||
import "../token/MiniMeToken.sol";
|
||||
import "../token/ApproveAndCallFallBack.sol";
|
||||
|
||||
contract BurnedFeeLocker is ApproveAndCallFallBack {
|
||||
|
||||
address public SNT;
|
||||
address public recyclerManager;
|
||||
mapping (address => uint256) burnedFee;
|
||||
uint256 availableToRecycle;
|
||||
|
||||
function BurnedFeeLocker(address _recyclerManager, address _SNT) public {
|
||||
SNT = _SNT;
|
||||
recyclerManager = _recyclerManager;
|
||||
}
|
||||
|
||||
function recycleFee(address _from, address _to, uint256 _amount) external {
|
||||
require(msg.sender == recyclerManager);
|
||||
require(burnedFee[_from] >= _amount);
|
||||
MiniMeToken(SNT).approveAndCall(_to, _amount, new bytes(0));
|
||||
availableToRecycle -= _amount;
|
||||
}
|
||||
|
||||
function withdrawToken(address _token, address _to) external {
|
||||
require(msg.sender == recyclerManager);
|
||||
uint256 available = MiniMeToken(_token).balanceOf(address(this));
|
||||
if (_token == SNT) {
|
||||
available -= availableToRecycle;
|
||||
}
|
||||
if (available > 0) {
|
||||
MiniMeToken(_token).transfer(_to, available);
|
||||
}
|
||||
}
|
||||
|
||||
function receiveApproval(address _from, uint256 _amount, address _token, bytes _data) public {
|
||||
require(_token == SNT);
|
||||
if (_amount == 0 || _data.length > 0) {
|
||||
require(msg.sender == _token);
|
||||
}
|
||||
if (MiniMeToken(SNT).transferFrom(_from, address(this), _amount)) {
|
||||
burnedFee[_from] += _amount;
|
||||
availableToRecycle += _amount;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue