ETH Price: $2,043.92 (-1.81%)

Contract Diff Checker

Contract Name:
StableNOK

Contract Source Code:

<i class='far fa-question-circle text-muted ms-2' data-bs-trigger='hover' data-bs-toggle='tooltip' data-bs-html='true' data-bs-title='Click on the check box to select individual contract to compare. Only 1 contract can be selected from each side.'></i>

pragma solidity 0.7.2;
// SPDX-License-Identifier: MIT
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

<i class='far fa-question-circle text-muted ms-2' data-bs-trigger='hover' data-bs-toggle='tooltip' data-bs-html='true' data-bs-title='Click on the check box to select individual contract to compare. Only 1 contract can be selected from each side.'></i>

pragma solidity 0.7.2;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Author: Bitnord
// Website: https://bitnord.no
//
//===========================================================================================================
import "IERC20.sol";
//===========================================================================================================
/**
 * StableNOK ERC20 token contract
 * 
 * 
 */
contract StableNOK {

  //-------------------------------------------------------------------------------------------------------
  /**
   * Global contract variables
   * 
   */
  address public admin;
  mapping (address => uint256) private balances;
  mapping (address => uint256) private frozen;
  mapping (address => mapping (address => uint256)) private allowances;
  string  public name;
  string  public symbol;
  uint8   public decimals;
  uint256 public totalSupply;
  bool    public paused = false;
  uint256 public constant MAX_UINT = 2**256 - 1;
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
   * Contract events
   * 
   */
  event Transfer(address indexed _from,   address indexed _to,      uint256 _value);
  event Approval(address indexed _owner,  address indexed _spender, uint256 _value);
  event Paused();
  event Unpaused();
  event AdminPowersTransferred(address  indexed _previousAdmin, address indexed _newAdmin);
  event AdminPowersRenounced(address    indexed _previousAdmin);
  event FundsFrozen(address indexed _account, uint256 _amount);
  event FundsUnFrozen(address indexed _account, uint256 _amount);
  event FrozenFundsBurned(address indexed _account, uint256 _amount);
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Contract constructor
  * 
  */
  constructor() {
    admin = msg.sender;
    name = "Stable NOK";
    symbol = "NOK";
    decimals = 2;
    totalSupply = 1000;
    balances[admin] = totalSupply;
    emit Transfer(address(0), admin, totalSupply);
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * ERC20 transfer function
  * 
  */
  function transfer(address _to, uint256 _value) public returns (bool success) {
    require(!paused);
    require(_to != address(0));
    require(balances[msg.sender] >= _value);
    balances[msg.sender] -= _value;
    balances[_to] += _value;
    emit Transfer(msg.sender, _to, _value);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * ERC20 transferFrom function
  * 
  */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
    require(!paused);
    require(_from != address(0));
    require(_to != address(0));
    require(balances[_from] >= _value);
    require(allowances[_from][msg.sender] >= _value);
    balances[_to] += _value;
    balances[_from] -= _value;
    if(allowances[_from][msg.sender] != MAX_UINT) { // Allow for infinite allowance
      allowances[_from][msg.sender] -= _value;
    }
    emit Transfer(_from, _to, _value);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * ERC20 approve function
  * 
  */
  function approve(address _spender, uint256 _value) public returns (bool success) {
    require(!paused);
    require(_spender != address(0));
    allowances[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * ERC20 allowance function
  * 
  */
  function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
    return allowances[_owner][_spender];
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * ERC20 balanceOf function
  * 
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 safeApprove function
  * Added as alternative approval management functions to avoid known front-running attacks.
  * More info: https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM
  * 
  */
  function safeApprove(address _spender, uint256 _value, uint256 _expectedAllowance) public returns (bool success) {
    require(!paused);
    require(_spender != address(0));
    require(allowances[msg.sender][_spender] == _expectedAllowance);
    allowances[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 increaseApproval function
  * Added as alternative approval management functions to avoid known front-running attacks.
  * More info: https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM
  * 
  */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool success) {
    require(!paused);
    require(_spender != address(0));
    require((allowances[msg.sender][_spender] + _addedValue) >= allowances[msg.sender][_spender]);
    allowances[msg.sender][_spender] += _addedValue;
    emit Approval(msg.sender, _spender, allowances[msg.sender][_spender]);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 decreaseApproval function
  * Added as alternative approval management functions to avoid known front-running attacks.
  * More info: https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM
  * 
  */
  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) {
    require(!paused);
    require(_spender != address(0));
    if(_subtractedValue > allowances[msg.sender][_spender]) {
      allowances[msg.sender][_spender] = 0;
    } else {
      allowances[msg.sender][_spender] = allowances[msg.sender][_spender] - _subtractedValue;
    }
    emit Approval(msg.sender, _spender, allowances[msg.sender][_spender]);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 mint function
  * 
  */
  function mint(address _account, uint256 _amount) public returns (bool success) {
    require(msg.sender == admin);
    totalSupply += _amount;
    balances[_account] += _amount;
    emit Transfer(address(0), _account, _amount);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 burn function
  * 
  */
  function burn(address _account, uint256 _amount) public returns (bool success) {
    require(msg.sender == admin);
    require(balances[_account] >= _amount);
    totalSupply -= _amount;
    balances[_account] -= _amount;
    emit Transfer(_account, address(0), _amount);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 pause function
  * 
  */
  function pause() public returns (bool success) {
    require(msg.sender == admin);
    paused = true;
    emit Paused();
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 unpause function
  * 
  */
  function unpause() public returns (bool success) {
    require(msg.sender == admin);
    paused = false;
    emit Unpaused();
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 transferAdminPowers function
  * 
  */
  function transferAdminPowers(address _newAdmin) public returns (bool success) {
    require(msg.sender == admin);
    require(_newAdmin != address(0));
    admin = _newAdmin;
    emit AdminPowersTransferred(admin, _newAdmin);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 renounceAdminPowers function
  * 
  */
  function renounceAdminPowers() public returns (bool success) {
    require(msg.sender == admin);
    admin = address(0);
    emit AdminPowersRenounced(admin);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 freeze function
  * 
  */
  function freeze(address _account, uint256 _amount) public returns (bool success) {
    require(msg.sender == admin);
    require(balances[_account] >= _amount);
    balances[_account] -=_amount;
    frozen[_account] += _amount;
    emit FundsFrozen(_account, _amount);
    emit Transfer(_account, address(0), _amount);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 unFreeze function
  * 
  */
  function unFreeze(address _account, uint256 _amount) public returns (bool success) {
    require(msg.sender == admin);
    require(frozen[_account] >= _amount);
    frozen[_account] -= _amount;
    balances[_account] += _amount;
    emit FundsUnFrozen(_account, _amount);
    emit Transfer(address(0), _account, _amount);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 burnFrozen function
  * 
  */
  function burnFrozen(address _account, uint256 _amount) public returns (bool success) {
    require(msg.sender == admin);
    require(frozen[_account] >= _amount);
    totalSupply -= _amount;
    frozen[_account] -= _amount;
    emit FrozenFundsBurned(_account, _amount);
    return true;
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 recoverERC20 function
  * Used to recover wrongly sent ERC20 tokens to the contract
  * 
  */
  function recoverERC20(address tokenAddress, uint256 tokenAmount) public returns (bool success) {
    require(msg.sender == admin);
    return IERC20(tokenAddress).transfer(admin, tokenAmount);
  }
  //-------------------------------------------------------------------------------------------------------


  //-------------------------------------------------------------------------------------------------------
  /**
  * Non-standard ERC20 receive function
  * Disallows Ether transactions to the contract address
  * 
  */
  receive() external payable {
    revert();
  }
  //-------------------------------------------------------------------------------------------------------

}

Please enter a contract address above to load the contract details and source code.

Context size (optional):