ETH Price: $2,480.84 (-0.30%)

Transaction Decoder

Block:
15310150 at Aug-09-2022 08:33:34 PM +UTC
Transaction Fee:
0.000601057284845823 ETH $1.49
Gas Used:
38,349 Gas / 15.673349627 Gwei

Account State Difference:

  Address   Before After State Difference Code
0x0B39E200...3F22C6154
0.001777792706525007 Eth
Nonce: 116
0.001176735421679184 Eth
Nonce: 117
0.000601057284845823
(Hiveon Pool)
17,255.456511677464097889 Eth17,255.456550026464097889 Eth0.000038349

Execution Trace

0x5603ce1a8a39e0c1416d07d515466cc17808ff5e.f242432a( )
  • 0x933b4b990b7bfd8276072dc857e5a650a05aed6e.f242432a( )
    • ETH_RUNE.balanceOf( account=0x0B39E2007b2020158A05641fFEA43363F22C6154 ) => ( 0 )
      // SPDX-License-Identifier: UNLICENSED
      pragma solidity 0.7.6;
      
      /**
      * Ownable, Mintable, Burnable ERC20. 
      * Max Supply of 500m (BNB.RUNE Supply)
      * 10m RUNE minted on construction. Owner can mint more if needed to control supply. 
      * ETH.RUNE is intended only to be a transitionary asset to be upgraded to native THOR.RUNE. 
      * Users should not hold ETH.RUNE indefinitely. 
      * Owner will be renounced when ETH.RUNE can be upgraded. 
      */
      
      interface iERC20 {
        function totalSupply() external view returns (uint256);
        function decimals() external view returns (uint8);
        function symbol() external view returns (string memory);
        function name() external view returns (string memory);
        function getOwner() external view returns (address);
        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;
        }
      }
      
      contract Context {
        constructor () { }
        function _msgSender() internal view returns (address payable) {
          return msg.sender;
        }
      }
      
      contract Ownable is Context {
        address private _owner;
      
        event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
      
        constructor () {
          address msgSender = _msgSender();
          _owner = msgSender;
          emit OwnershipTransferred(address(0), msgSender);
        }
      
        function owner() public view returns (address) {
          return _owner;
        }
      
        modifier onlyOwner() {
          require(_owner == _msgSender(), "Ownable: caller is not the 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;
        }
      }
      
      contract ETH_RUNE is iERC20, Context, Ownable {
        using SafeMath for uint256;
      
        mapping (address => uint256) private _balances;
        mapping (address => mapping (address => uint256)) private _allowances;
      
        uint256 private _totalSupply;
        uint8 public _decimals;
        string public _symbol;
        string public _name;
        uint256 public maxSupply;
      
        constructor() {
          _name = 'THORChain ETH.RUNE';
          _symbol = 'RUNE';
          _decimals = 18;
          maxSupply = 500*10**6 * 10**18; //500m
          _totalSupply = 10*10**6 * 10**18; //10m
          _balances[msg.sender] = _totalSupply;
          emit Transfer(address(0), msg.sender, _totalSupply);
        }
      
        function getOwner() external view virtual override returns (address) {
          return owner();
        }
      
        function decimals() external view virtual override returns (uint8) {
          return _decimals;
        }
      
        function symbol() external view virtual override returns (string memory) {
          return _symbol;
        }
      
        function name() external view virtual override returns (string memory) {
          return _name;
        }
      
        function totalSupply() external view virtual override returns (uint256) {
          return _totalSupply;
        }
      
        function balanceOf(address account) external view virtual override returns (uint256) {
          return _balances[account];
        }
      
        function transfer(address recipient, uint256 amount) external override returns (bool) {
          _transfer(_msgSender(), recipient, amount);
          return true;
        }
      
        function allowance(address owner, address spender) external view override returns (uint256) {
          return _allowances[owner][spender];
        }
      
        function approve(address spender, uint256 amount) external override returns (bool) {
          _approve(_msgSender(), spender, amount);
          return true;
        }
      
        function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
          _transfer(sender, recipient, amount);
          _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
          return true;
        }
      
        /**
         * Queries the origin of the tx to enable approval-less transactions, such as for upgrading ETH.RUNE to THOR.RUNE. 
         * Beware phishing contracts that could steal tokens by intercepting tx.origin.
         * The risks of this are the same as infinite-approved contracts which are widespread.  
         * Acknowledge it is non-standard, but the ERC-20 standard is less-than-desired. (Hi 0xEther).
         */
        function transferTo(address recipient, uint256 amount) public returns (bool) {
          _transfer(tx.origin, recipient, amount);
          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 mint(uint256 amount) public onlyOwner returns (bool) {
          _mint(_msgSender(), amount);
          return true;
        }
        
        function burn(uint256 amount) public virtual {
          _burn(_msgSender(), amount);
        }
      
        function burnFrom(address account, uint256 amount) public virtual {
          uint256 decreasedAllowance = _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance");
          _approve(account, _msgSender(), decreasedAllowance);
          _burn(account, amount);
        }
      
        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");
          require(_totalSupply.add(amount) <= maxSupply, "Must be less than maxSupply");
          _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);
        }
      }