Contract 0xd83c880037eabfe01ccf4b0e0e8464686ce23e70

Contract Overview

Balance:
0 BNB
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x26d3dd07f2bba907fccfc698a50924d486aed7c0d7a0e41e27125a4e356f668aInitialize31046072020-10-26 4:10:40326 days 12 hrs ago0xd5b5b26521665cb37623dca0e49c553b41dbf076 IN  0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB0.003437
0x86f74a75aba032a6537a4bedd79ad62ca712e03bc33192eaa6a404a8376db1ad0x6080604031045872020-10-26 4:09:40326 days 12 hrs ago0xd5b5b26521665cb37623dca0e49c553b41dbf076 IN  Contract Creation0 BNB0.0500511
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x24fff97f3a59b0e223cf10d684ab6d38f059a550940fb609febc20523c5de326106331992021-07-16 5:27:3563 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x24fff97f3a59b0e223cf10d684ab6d38f059a550940fb609febc20523c5de326106331992021-07-16 5:27:3563 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x24fff97f3a59b0e223cf10d684ab6d38f059a550940fb609febc20523c5de326106331992021-07-16 5:27:3563 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x79216f0191babff044b5f86cf314e0c0205eec96fedf7a36d9cc72179d06ce76106329742021-07-16 5:16:2063 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x79216f0191babff044b5f86cf314e0c0205eec96fedf7a36d9cc72179d06ce76106329742021-07-16 5:16:2063 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x79216f0191babff044b5f86cf314e0c0205eec96fedf7a36d9cc72179d06ce76106329742021-07-16 5:16:2063 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x280ada4d885c98f4277917294f62a259f549d28728df6bb6abb231cc13ddac55106328552021-07-16 5:10:2363 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x280ada4d885c98f4277917294f62a259f549d28728df6bb6abb231cc13ddac55106328552021-07-16 5:10:2363 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x280ada4d885c98f4277917294f62a259f549d28728df6bb6abb231cc13ddac55106328552021-07-16 5:10:2363 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x280ada4d885c98f4277917294f62a259f549d28728df6bb6abb231cc13ddac55106328552021-07-16 5:10:2363 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x280ada4d885c98f4277917294f62a259f549d28728df6bb6abb231cc13ddac55106328552021-07-16 5:10:2363 days 11 hrs ago 0x5eb4f537889ec3c7ec397f1acb33c70d8c0ee438 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xa76efdf6964da8a5f04bccbfd01b363e1216ac3d243d448a036b6ebb3a1e5e4c103450372021-07-06 3:14:1773 days 13 hrs ago 0xdc42759e28e41898bde199ab044f366dacbf3436 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xb059ff7e90c1d926e0d5bbd23267170a0c44b69531e876d6b0b4303aca01c344103450322021-07-06 3:14:0273 days 13 hrs ago 0xdc42759e28e41898bde199ab044f366dacbf3436 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xd98b154c3279872be6674ab840a738947764e7b9faf5f52c7e3c13609541448a103449972021-07-06 3:12:1773 days 13 hrs ago 0xdc42759e28e41898bde199ab044f366dacbf3436 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x5b12cdb63d5e4955d47168a1200cfd74b58ecbbf4f80d2160fa26357daf80aa6101276312021-06-28 11:37:2881 days 4 hrs ago 0x2c82a39549858a0ff1a369d84695d983791d0786 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x5b12cdb63d5e4955d47168a1200cfd74b58ecbbf4f80d2160fa26357daf80aa6101276312021-06-28 11:37:2881 days 4 hrs ago 0x2c82a39549858a0ff1a369d84695d983791d0786 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x5b12cdb63d5e4955d47168a1200cfd74b58ecbbf4f80d2160fa26357daf80aa6101276312021-06-28 11:37:2881 days 4 hrs ago 0x2c82a39549858a0ff1a369d84695d983791d0786 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xdef02251cd4f2b0aa0b6142893e493fab34714f4f2b8f445932c63ab895ffc53101276202021-06-28 11:36:5581 days 4 hrs ago 0xe8163f31a7a23167d21252bcc0a996a1a40e7d61 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xdef02251cd4f2b0aa0b6142893e493fab34714f4f2b8f445932c63ab895ffc53101276202021-06-28 11:36:5581 days 4 hrs ago 0xe8163f31a7a23167d21252bcc0a996a1a40e7d61 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xdef02251cd4f2b0aa0b6142893e493fab34714f4f2b8f445932c63ab895ffc53101276202021-06-28 11:36:5581 days 4 hrs ago 0xe8163f31a7a23167d21252bcc0a996a1a40e7d61 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xedc3ac0632827bb6e4cc90cd00e20db0fc5fca57a007c8d60ca08820fec83fa9101276052021-06-28 11:36:1081 days 4 hrs ago 0x8c0248ab26fcd6868cc5aaea954f0ce28f8e103f 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xedc3ac0632827bb6e4cc90cd00e20db0fc5fca57a007c8d60ca08820fec83fa9101276052021-06-28 11:36:1081 days 4 hrs ago 0x8c0248ab26fcd6868cc5aaea954f0ce28f8e103f 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0xedc3ac0632827bb6e4cc90cd00e20db0fc5fca57a007c8d60ca08820fec83fa9101276052021-06-28 11:36:1081 days 4 hrs ago 0x8c0248ab26fcd6868cc5aaea954f0ce28f8e103f 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x93c8ba0e0d902a04961ddd3cfdf4d5114d77045a830df5d31174c6d9984dccef101275922021-06-28 11:35:3181 days 4 hrs ago 0xe980bc9e17094eb273c6b5a1139b3a30ecdf05e0 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
0x93c8ba0e0d902a04961ddd3cfdf4d5114d77045a830df5d31174c6d9984dccef101275922021-06-28 11:35:3181 days 4 hrs ago 0xe980bc9e17094eb273c6b5a1139b3a30ecdf05e0 0xd83c880037eabfe01ccf4b0e0e8464686ce23e700 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RenERC20LogicV1

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-24
*/

/**

Deployed by Ren Project, https://renproject.io

Commit hash: bbc788e
Repository: https://github.com/renproject/gateway-sol
Issues: https://github.com/renproject/gateway-sol/issues

Licenses
@openzeppelin/contracts: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/LICENSE
gateway-sol: https://github.com/renproject/gateway-sol/blob/master/LICENSE

*/

pragma solidity ^0.5.16;


contract Initializable {

  
  bool private initialized;

  
  bool private initializing;

  
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  
  function isConstructor() private view returns (bool) {
    
    
    
    
    
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  
  uint256[50] private ______gap;
}

contract Context is Initializable {
    
    
    constructor () internal { }
    

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; 
        return msg.data;
    }
}

contract Ownable is Initializable, Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    
    function initialize(address sender) public initializer {
        _owner = sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    
    function owner() public view returns (address) {
        return _owner;
    }

    
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    
    function isOwner() public view returns (bool) {
        return _msgSender() == _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), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    uint256[50] private ______gap;
}

contract Proxy {
  
  function () payable external {
    _fallback();
  }

  
  function _implementation() internal view returns (address);

  
  function _delegate(address implementation) internal {
    assembly {
      
      
      
      calldatacopy(0, 0, calldatasize)

      
      
      let result := delegatecall(gas, implementation, 0, calldatasize, 0, 0)

      
      returndatacopy(0, 0, returndatasize)

      switch result
      
      case 0 { revert(0, returndatasize) }
      default { return(0, returndatasize) }
    }
  }

  
  function _willFallback() internal {
  }

  
  function _fallback() internal {
    _willFallback();
    _delegate(_implementation());
  }
}

library OpenZeppelinUpgradesAddress {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        
        
        
        
        
        
        
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

contract BaseUpgradeabilityProxy is Proxy {
  
  event Upgraded(address indexed implementation);

  
  bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

  
  function _implementation() internal view returns (address impl) {
    bytes32 slot = IMPLEMENTATION_SLOT;
    assembly {
      impl := sload(slot)
    }
  }

  
  function _upgradeTo(address newImplementation) internal {
    _setImplementation(newImplementation);
    emit Upgraded(newImplementation);
  }

  
  function _setImplementation(address newImplementation) internal {
    require(OpenZeppelinUpgradesAddress.isContract(newImplementation), "Cannot set a proxy implementation to a non-contract address");

    bytes32 slot = IMPLEMENTATION_SLOT;

    assembly {
      sstore(slot, newImplementation)
    }
  }
}

contract UpgradeabilityProxy is BaseUpgradeabilityProxy {
  
  constructor(address _logic, bytes memory _data) public payable {
    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));
    _setImplementation(_logic);
    if(_data.length > 0) {
      (bool success,) = _logic.delegatecall(_data);
      require(success);
    }
  }  
}

contract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {
  
  event AdminChanged(address previousAdmin, address newAdmin);

  

  bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

  
  modifier ifAdmin() {
    if (msg.sender == _admin()) {
      _;
    } else {
      _fallback();
    }
  }

  
  function admin() external ifAdmin returns (address) {
    return _admin();
  }

  
  function implementation() external ifAdmin returns (address) {
    return _implementation();
  }

  
  function changeAdmin(address newAdmin) external ifAdmin {
    require(newAdmin != address(0), "Cannot change the admin of a proxy to the zero address");
    emit AdminChanged(_admin(), newAdmin);
    _setAdmin(newAdmin);
  }

  
  function upgradeTo(address newImplementation) external ifAdmin {
    _upgradeTo(newImplementation);
  }

  
  function upgradeToAndCall(address newImplementation, bytes calldata data) payable external ifAdmin {
    _upgradeTo(newImplementation);
    (bool success,) = newImplementation.delegatecall(data);
    require(success);
  }

  
  function _admin() internal view returns (address adm) {
    bytes32 slot = ADMIN_SLOT;
    assembly {
      adm := sload(slot)
    }
  }

  
  function _setAdmin(address newAdmin) internal {
    bytes32 slot = ADMIN_SLOT;

    assembly {
      sstore(slot, newAdmin)
    }
  }

  
  function _willFallback() internal {
    require(msg.sender != _admin(), "Cannot call fallback function from the proxy admin");
    super._willFallback();
  }
}

contract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {
  
  function initialize(address _logic, bytes memory _data) public payable {
    require(_implementation() == address(0));
    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));
    _setImplementation(_logic);
    if(_data.length > 0) {
      (bool success,) = _logic.delegatecall(_data);
      require(success);
    }
  }  
}

contract InitializableAdminUpgradeabilityProxy is BaseAdminUpgradeabilityProxy, InitializableUpgradeabilityProxy {
  
  function initialize(address _logic, address _admin, bytes memory _data) public payable {
    require(_implementation() == address(0));
    InitializableUpgradeabilityProxy.initialize(_logic, _data);
    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));
    _setAdmin(_admin);
  }
}

interface IERC20 {
    
    function totalSupply() external view returns (uint256);

    
    function balanceOf(address account) external view returns (uint256);

    
    function transfer(address recipient, uint256 amount) external returns (bool);

    
    function allowance(address owner, address spender) external view returns (uint256);

    
    function approve(address spender, uint256 amount) external returns (bool);

    
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    
    event Transfer(address indexed from, address indexed to, uint256 value);

    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        
        
        
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        
        require(b > 0, errorMessage);
        uint256 c = a / b;
        

        return c;
    }

    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract ERC20 is Initializable, Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }

    uint256[50] private ______gap;
}

contract ERC20Detailed is Initializable, IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    
    function initialize(string memory name, string memory symbol, uint8 decimals) public initializer {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    
    function name() public view returns (string memory) {
        return _name;
    }

    
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    uint256[50] private ______gap;
}

contract Claimable is Initializable, Ownable {
    address public pendingOwner;

    function initialize(address _nextOwner) public initializer {
        Ownable.initialize(_nextOwner);
    }

    modifier onlyPendingOwner() {
        require(
            _msgSender() == pendingOwner,
            "Claimable: caller is not the pending owner"
        );
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(
            newOwner != owner() && newOwner != pendingOwner,
            "Claimable: invalid new owner"
        );
        pendingOwner = newOwner;
    }

    function claimOwnership() public onlyPendingOwner {
        _transferOwnership(pendingOwner);
        delete pendingOwner;
    }
}

library Address {
    
    function isContract(address account) internal view returns (bool) {
        
        
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        
        
        
        
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        
        

        
        
        
        
        
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { 
            
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract CanReclaimTokens is Claimable {
    using SafeERC20 for ERC20;

    mapping(address => bool) private recoverableTokensBlacklist;

    function initialize(address _nextOwner) public initializer {
        Claimable.initialize(_nextOwner);
    }

    function blacklistRecoverableToken(address _token) public onlyOwner {
        recoverableTokensBlacklist[_token] = true;
    }

    
    
    function recoverTokens(address _token) external onlyOwner {
        require(
            !recoverableTokensBlacklist[_token],
            "CanReclaimTokens: token is not recoverable"
        );

        if (_token == address(0x0)) {
            msg.sender.transfer(address(this).balance);
        } else {
            ERC20(_token).safeTransfer(
                msg.sender,
                ERC20(_token).balanceOf(address(this))
            );
        }
    }
}

contract ERC20WithRate is Initializable, Ownable, ERC20 {
    using SafeMath for uint256;

    uint256 public constant _rateScale = 1e18;
    uint256 internal _rate;

    event LogRateChanged(uint256 indexed _rate);

    
    function initialize(address _nextOwner, uint256 _initialRate)
        public
        initializer
    {
        Ownable.initialize(_nextOwner);
        _setRate(_initialRate);
    }

    function setExchangeRate(uint256 _nextRate) public onlyOwner {
        _setRate(_nextRate);
    }

    function exchangeRateCurrent() public view returns (uint256) {
        require(_rate != 0, "ERC20WithRate: rate has not been initialized");
        return _rate;
    }

    function _setRate(uint256 _nextRate) internal {
        require(_nextRate > 0, "ERC20WithRate: rate must be greater than zero");
        _rate = _nextRate;
    }

    function balanceOfUnderlying(address _account)
        public
        view
        returns (uint256)
    {
        return toUnderlying(balanceOf(_account));
    }

    function toUnderlying(uint256 _amount) public view returns (uint256) {
        return _amount.mul(_rate).div(_rateScale);
    }

    function fromUnderlying(uint256 _amountUnderlying)
        public
        view
        returns (uint256)
    {
        return _amountUnderlying.mul(_rateScale).div(_rate);
    }
}

contract ERC20WithPermit is Initializable, ERC20, ERC20Detailed {
    using SafeMath for uint256;

    mapping(address => uint256) public nonces;

    
    
    string public version;

    
    bytes32 public DOMAIN_SEPARATOR;
    
    
    bytes32
        public constant PERMIT_TYPEHASH = 0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb;

    function initialize(
        uint256 _chainId,
        string memory _version,
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) public initializer {
        ERC20Detailed.initialize(_name, _symbol, _decimals);
        version = _version;
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(name())),
                keccak256(bytes(version)),
                _chainId,
                address(this)
            )
        );
    }

    
    function permit(
        address holder,
        address spender,
        uint256 nonce,
        uint256 expiry,
        bool allowed,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        holder,
                        spender,
                        nonce,
                        expiry,
                        allowed
                    )
                )
            )
        );

        require(holder != address(0), "ERC20WithRate: address must not be 0x0");
        require(
            holder == ecrecover(digest, v, r, s),
            "ERC20WithRate: invalid signature"
        );
        require(
            expiry == 0 || now <= expiry,
            "ERC20WithRate: permit has expired"
        );
        require(nonce == nonces[holder]++, "ERC20WithRate: invalid nonce");
        uint256 amount = allowed ? uint256(-1) : 0;
        _approve(holder, spender, amount);
    }
}

contract RenERC20LogicV1 is
    Initializable,
    ERC20,
    ERC20Detailed,
    ERC20WithRate,
    ERC20WithPermit,
    Claimable,
    CanReclaimTokens
{
    
    function initialize(
        uint256 _chainId,
        address _nextOwner,
        uint256 _initialRate,
        string memory _version,
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) public initializer {
        ERC20Detailed.initialize(_name, _symbol, _decimals);
        ERC20WithRate.initialize(_nextOwner, _initialRate);
        ERC20WithPermit.initialize(
            _chainId,
            _version,
            _name,
            _symbol,
            _decimals
        );
        Claimable.initialize(_nextOwner);
        CanReclaimTokens.initialize(_nextOwner);
    }

    
    
    function mint(address _to, uint256 _amount) public onlyOwner {
        _mint(_to, _amount);
    }

    
    
    function burn(address _from, uint256 _amount) public onlyOwner {
        _burn(_from, _amount);
    }

    function transfer(address recipient, uint256 amount) public returns (bool) {
        
        
        
        require(
            recipient != address(this),
            "RenERC20: can't transfer to token address"
        );
        return super.transfer(recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public returns (bool) {
        
        
        require(
            recipient != address(this),
            "RenERC20: can't transfer to token address"
        );
        return super.transferFrom(sender, recipient, amount);
    }
}

contract RenERC20Proxy is InitializableAdminUpgradeabilityProxy {

}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"LogRateChanged","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rateScale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"blacklistRecoverableToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_amountUnderlying","type":"uint256"}],"name":"fromUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"address","name":"_nextOwner","type":"address"},{"internalType":"uint256","name":"_initialRate","type":"uint256"},{"internalType":"string","name":"_version","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"string","name":"_version","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_nextOwner","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_nextOwner","type":"address"},{"internalType":"uint256","name":"_initialRate","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_nextRate","type":"uint256"}],"name":"setExchangeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"toUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":true,"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]

6080604052612c4f806100136000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063715018a611610130578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e14610ad6578063e30c397814610b04578063eb438fc214610b0c578063f2fde38b14610b29578063f65d901c14610b4f57610227565b8063a9059cbb14610a33578063bd6d894d14610a5f578063c4d66de814610a67578063cd6dc68714610a8d578063db068e0e14610ab957610227565b80638fcbaf0c116100ff5780638fcbaf0c1461095c57806395d89b41146109b65780639dc29fac146109be578063a173b2f6146109ea578063a457c2d714610a0757610227565b8063715018a6146109025780637ecebe001461090a5780638da5cb5b146109305780638f32d59b1461095457610227565b80633644e515116101b35780634e71e0c8116101825780634e71e0c81461054357806353531e391461054b57806354fd4d501461071a5780635dca34521461072257806370a08231146108dc57610227565b80633644e515146104bd57806339509351146104c55780633af9e669146104f157806340c10f191461051757610227565b806318160ddd116101fa57806318160ddd1461043f57806323b872dd1461045957806325e27ed81461048f57806330adf81f14610497578063313ce5671461049f57610227565b806306fdde031461022c578063095ea7b3146102a957806316114acd146102e95780631624f6c614610311575b600080fd5b610234610b75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026e578181015183820152602001610256565b50505050905090810190601f16801561029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360408110156102bf57600080fd5b506001600160a01b038135169060200135610c0c565b604080519115158252519081900360200190f35b61030f600480360360208110156102ff57600080fd5b50356001600160a01b0316610c2a565b005b61030f6004803603606081101561032757600080fd5b810190602081018135600160201b81111561034157600080fd5b82018360208201111561035357600080fd5b803590602001918460018302840111600160201b8311171561037457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156103c657600080fd5b8201836020820111156103d857600080fd5b803590602001918460018302840111600160201b831117156103f957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610d9b9050565b610447610e77565b60408051918252519081900360200190f35b6102d56004803603606081101561046f57600080fd5b506001600160a01b03813581169160208101359091169060400135610e7d565b610447610eda565b610447610ee6565b6104a7610f0a565b6040805160ff9092168252519081900360200190f35b610447610f13565b6102d5600480360360408110156104db57600080fd5b506001600160a01b038135169060200135610f19565b6104476004803603602081101561050757600080fd5b50356001600160a01b0316610f72565b61030f6004803603604081101561052d57600080fd5b506001600160a01b038135169060200135610f85565b61030f610fda565b61030f600480360360e081101561056157600080fd5b8135916001600160a01b036020820135169160408201359190810190608081016060820135600160201b81111561059757600080fd5b8201836020820111156105a957600080fd5b803590602001918460018302840111600160201b831117156105ca57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561061c57600080fd5b82018360208201111561062e57600080fd5b803590602001918460018302840111600160201b8311171561064f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156106a157600080fd5b8201836020820111156106b357600080fd5b803590602001918460018302840111600160201b831117156106d457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff16915061105a9050565b610234611137565b61030f600480360360a081101561073857600080fd5b81359190810190604081016020820135600160201b81111561075957600080fd5b82018360208201111561076b57600080fd5b803590602001918460018302840111600160201b8311171561078c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156107de57600080fd5b8201836020820111156107f057600080fd5b803590602001918460018302840111600160201b8311171561081157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561086357600080fd5b82018360208201111561087557600080fd5b803590602001918460018302840111600160201b8311171561089657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff1691506111c59050565b610447600480360360208110156108f257600080fd5b50356001600160a01b0316611360565b61030f61137b565b6104476004803603602081101561092057600080fd5b50356001600160a01b031661140c565b61093861141e565b604080516001600160a01b039092168252519081900360200190f35b6102d561142d565b61030f600480360361010081101561097357600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e00135611453565b6102346116f2565b61030f600480360360408110156109d457600080fd5b506001600160a01b038135169060200135611753565b61044760048036036020811015610a0057600080fd5b50356117a4565b6102d560048036036040811015610a1d57600080fd5b506001600160a01b0381351690602001356117d2565b6102d560048036036040811015610a4957600080fd5b506001600160a01b038135169060200135611840565b61044761189b565b61030f60048036036020811015610a7d57600080fd5b50356001600160a01b03166118e6565b61030f60048036036040811015610aa357600080fd5b506001600160a01b038135169060200135611991565b61030f60048036036020811015610acf57600080fd5b5035611a47565b61044760048036036040811015610aec57600080fd5b506001600160a01b0381358116916020013516611a97565b610938611ac2565b61044760048036036020811015610b2257600080fd5b5035611ad1565b61030f60048036036020811015610b3f57600080fd5b50356001600160a01b0316611af4565b61030f60048036036020811015610b6557600080fd5b50356001600160a01b0316611be5565b609b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b505050505090505b90565b6000610c20610c19611c50565b8484611c54565b5060015b92915050565b610c3261142d565b610c71576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6e833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260d5602052604090205460ff1615610cc95760405162461bcd60e51b815260040180806020018281038252602a815260200180612936602a913960400191505060405180910390fd5b6001600160a01b038116610d095760405133904780156108fc02916000818181858888f19350505050158015610d03573d6000803e3d6000fd5b50610d98565b604080516370a0823160e01b81523060048201529051610d989133916001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610d5557600080fd5b505afa158015610d69573d6000803e3d6000fd5b505050506040513d6020811015610d7f57600080fd5b50516001600160a01b038416919063ffffffff611d4016565b50565b600054610100900460ff1680610db45750610db4611d92565b80610dc2575060005460ff16155b610dfd5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8e602e913960400191505060405180910390fd5b600054610100900460ff16158015610e28576000805460ff1961ff0019909116610100171660011790555b8351610e3b90609b906020870190612810565b508251610e4f90609c906020860190612810565b50609d805460ff191660ff84161790558015610e71576000805461ff00191690555b50505050565b60685490565b60006001600160a01b038316301415610ec75760405162461bcd60e51b8152600401808060200182810382526029815260200180612b2c6029913960400191505060405180910390fd5b610ed2848484611d98565b949350505050565b670de0b6b3a764000081565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b609d5460ff1690565b60d35481565b6000610c20610f26611c50565b84610f6d8560676000610f37611c50565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611e2016565b611c54565b6000610c24610f8083611360565b611ad1565b610f8d61142d565b610fcc576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6e833981519152604482015290519081900360640190fd5b610fd68282611e7a565b5050565b60d4546001600160a01b0316610fee611c50565b6001600160a01b0316146110335760405162461bcd60e51b815260040180806020018281038252602a815260200180612add602a913960400191505060405180910390fd5b60d454611048906001600160a01b0316611f6c565b60d480546001600160a01b0319169055565b600054610100900460ff16806110735750611073611d92565b80611081575060005460ff16155b6110bc5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8e602e913960400191505060405180910390fd5b600054610100900460ff161580156110e7576000805460ff1961ff0019909116610100171660011790555b6110f2848484610d9b565b6110fc8787611991565b61110988868686866111c5565b6111128761200d565b61111b876118e6565b801561112d576000805461ff00191690555b5050505050505050565b60d2805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156111bd5780601f10611192576101008083540402835291602001916111bd565b820191906000526020600020905b8154815290600101906020018083116111a057829003601f168201915b505050505081565b600054610100900460ff16806111de57506111de611d92565b806111ec575060005460ff16155b6112275760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8e602e913960400191505060405180910390fd5b600054610100900460ff16158015611252576000805460ff1961ff0019909116610100171660011790555b61125d848484610d9b565b84516112709060d2906020880190612810565b506040518060526129d3823960520190506040518091039020611291610b75565b8051906020012060d260405180828054600181600116156101000203166002900480156112f55780601f106112d35761010080835404028352918201916112f5565b820191906000526020600020905b8154815290600101906020018083116112e1575b505060408051918290038220602080840197909752828201959095526060820194909452608081018b90523060a0808301919091528451808303909101815260c09091019093525050805191012060d3558015611358576000805461ff00191690555b505050505050565b6001600160a01b031660009081526066602052604090205490565b61138361142d565b6113c2576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6e833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b60d16020526000908152604090205481565b6033546001600160a01b031690565b6033546000906001600160a01b0316611444611c50565b6001600160a01b031614905090565b60d354604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501819052908c166060840152608083018b905260a083018a905288151560c0808501919091528451808503909101815260e08401855280519083012061190160f01b610100850152610102840195909552610122808401959095528351808403909501855261014290920190925282519290910191909120906115455760405162461bcd60e51b8152600401808060200182810382526026815260200180612bf56026913960400191505060405180910390fd5b6040805160008152602080820180845284905260ff8716828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa15801561159c573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b03161461160b576040805162461bcd60e51b815260206004820181905260248201527f455243323057697468526174653a20696e76616c6964207369676e6174757265604482015290519081900360640190fd5b8515806116185750854211155b6116535760405162461bcd60e51b81526004018080602001828103825260218152602001806129b26021913960400191505060405180910390fd5b6001600160a01b038916600090815260d16020526040902080546001810190915587146116c7576040805162461bcd60e51b815260206004820152601c60248201527f455243323057697468526174653a20696e76616c6964206e6f6e636500000000604482015290519081900360640190fd5b6000856116d55760006116d9565b6000195b90506116e68a8a83611c54565b50505050505050505050565b609c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b61175b61142d565b61179a576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6e833981519152604482015290519081900360640190fd5b610fd682826120a3565b60d054600090610c24906117c684670de0b6b3a764000063ffffffff61219f16565b9063ffffffff6121f816565b6000610c206117df611c50565b84610f6d85604051806060016040528060258152602001612bd06025913960676000611809611c50565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61223a16565b60006001600160a01b03831630141561188a5760405162461bcd60e51b8152600401808060200182810382526029815260200180612b2c6029913960400191505060405180910390fd5b61189483836122d1565b9392505050565b600060d054600014156118df5760405162461bcd60e51b815260040180806020018281038252602c815260200180612960602c913960400191505060405180910390fd5b5060d05490565b600054610100900460ff16806118ff57506118ff611d92565b8061190d575060005460ff16155b6119485760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8e602e913960400191505060405180910390fd5b600054610100900460ff16158015611973576000805460ff1961ff0019909116610100171660011790555b61197c8261200d565b8015610fd6576000805461ff00191690555050565b600054610100900460ff16806119aa57506119aa611d92565b806119b8575060005460ff16155b6119f35760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8e602e913960400191505060405180910390fd5b600054610100900460ff16158015611a1e576000805460ff1961ff0019909116610100171660011790555b611a27836122e5565b611a30826123d6565b8015611a42576000805461ff00191690555b505050565b611a4f61142d565b611a8e576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6e833981519152604482015290519081900360640190fd5b610d98816123d6565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b60d4546001600160a01b031681565b6000610c24670de0b6b3a76400006117c660d0548561219f90919063ffffffff16565b611afc61142d565b611b3b576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6e833981519152604482015290519081900360640190fd5b611b4361141e565b6001600160a01b0316816001600160a01b031614158015611b72575060d4546001600160a01b03828116911614155b611bc3576040805162461bcd60e51b815260206004820152601c60248201527f436c61696d61626c653a20696e76616c6964206e6577206f776e657200000000604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b611bed61142d565b611c2c576040805162461bcd60e51b81526020600482018190526024820152600080516020612a6e833981519152604482015290519081900360640190fd5b6001600160a01b0316600090815260d560205260409020805460ff19166001179055565b3390565b6001600160a01b038316611c995760405162461bcd60e51b8152600401808060200182810382526024815260200180612b556024913960400191505060405180910390fd5b6001600160a01b038216611cde5760405162461bcd60e51b81526004018080602001828103825260228152602001806129146022913960400191505060405180910390fd5b6001600160a01b03808416600081815260676020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a4290849061241a565b303b1590565b6000611da58484846125d2565b611e1684611db1611c50565b610f6d85604051806060016040528060288152602001612a46602891396001600160a01b038a16600090815260676020526040812090611def611c50565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61223a16565b5060019392505050565b600082820183811015611894576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038216611ed5576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b606854611ee8908263ffffffff611e2016565b6068556001600160a01b038216600090815260666020526040902054611f14908263ffffffff611e2016565b6001600160a01b03831660008181526066602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116611fb15760405162461bcd60e51b81526004018080602001828103825260268152602001806128ee6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806120265750612026611d92565b80612034575060005460ff16155b61206f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8e602e913960400191505060405180910390fd5b600054610100900460ff1615801561209a576000805460ff1961ff0019909116610100171660011790555b61197c826122e5565b6001600160a01b0382166120e85760405162461bcd60e51b8152600401808060200182810382526021815260200180612abc6021913960400191505060405180910390fd5b61212b816040518060600160405280602281526020016128cc602291396001600160a01b038516600090815260666020526040902054919063ffffffff61223a16565b6001600160a01b038316600090815260666020526040902055606854612157908263ffffffff61273016565b6068556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000826121ae57506000610c24565b828202828482816121bb57fe5b04146118945760405162461bcd60e51b8152600401808060200182810382526021815260200180612a256021913960400191505060405180910390fd5b600061189483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612772565b600081848411156122c95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561228e578181015183820152602001612276565b50505050905090810190601f1680156122bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000610c206122de611c50565b84846125d2565b600054610100900460ff16806122fe57506122fe611d92565b8061230c575060005460ff16155b6123475760405162461bcd60e51b815260040180806020018281038252602e815260200180612a8e602e913960400191505060405180910390fd5b600054610100900460ff16158015612372576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015610fd6576000805461ff00191690555050565b600081116124155760405162461bcd60e51b815260040180806020018281038252602d815260200180612b79602d913960400191505060405180910390fd5b60d055565b61242c826001600160a01b03166127d7565b61247d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106124bb5780518252601f19909201916020918201910161249c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461251d576040519150601f19603f3d011682016040523d82523d6000602084013e612522565b606091505b509150915081612579576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610e715780806020019051602081101561259557600080fd5b5051610e715760405162461bcd60e51b815260040180806020018281038252602a815260200180612ba6602a913960400191505060405180910390fd5b6001600160a01b0383166126175760405162461bcd60e51b8152600401808060200182810382526025815260200180612b076025913960400191505060405180910390fd5b6001600160a01b03821661265c5760405162461bcd60e51b81526004018080602001828103825260238152602001806128a96023913960400191505060405180910390fd5b61269f8160405180606001604052806026815260200161298c602691396001600160a01b038616600090815260666020526040902054919063ffffffff61223a16565b6001600160a01b0380851660009081526066602052604080822093909355908416815220546126d4908263ffffffff611e2016565b6001600160a01b0380841660008181526066602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061189483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061223a565b600081836127c15760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561228e578181015183820152602001612276565b5060008385816127cd57fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610ed2575050151592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061285157805160ff191683800117855561287e565b8280016001018555821561287e579182015b8281111561287e578251825591602001919060010190612863565b5061288a92915061288e565b5090565b610c0991905b8082111561288a576000815560010161289456fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e5265636c61696d546f6b656e733a20746f6b656e206973206e6f74207265636f76657261626c65455243323057697468526174653a207261746520686173206e6f74206265656e20696e697469616c697a656445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365455243323057697468526174653a207065726d6974206861732065787069726564454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f2061646472657373436c61696d61626c653a2063616c6c6572206973206e6f74207468652070656e64696e67206f776e657245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737352656e45524332303a2063616e2774207472616e7366657220746f20746f6b656e206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373455243323057697468526174653a2072617465206d7573742062652067726561746572207468616e207a65726f5361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f455243323057697468526174653a2061646472657373206d757374206e6f7420626520307830a265627a7a72315820b62f18d6695f24f9a3c854289673baf71b37c07f49f6856cab0966383a8a79ee64736f6c63430005100032

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading