Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x347Cfa9d96C967d9c4C488B67B321cFd57B30C5D
Balance 0 ETH
Nonce 1
Code Size 3243 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

3243 bytes
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a9059cbb11610071578063a9059cbb14610352578063cae9ca511461037e578063d8162db714610403578063dd62ed3e1461040b578063fca3b5aa146104395761012c565b806370a08231146102ee5780638da5cb5b1461031457806395d89b411461031c578063a39a45b714610324578063a4e2d6341461034a5761012c565b8063313ce567116100f4578063313ce56714610262578063366a68dc1461028057806340c10f191461029d57806342966c68146102c957806354fd4d50146102e65761012c565b806306fdde031461013157806307546172146101ae578063095ea7b3146101d257806318160ddd1461021257806323b872dd1461022c575b600080fd5b61013961045f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017357818101518382015260200161015b565b50505050905090810190601f1680156101a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b66104ec565b604080516001600160a01b039092168252519081900360200190f35b6101fe600480360360408110156101e857600080fd5b506001600160a01b0381351690602001356104fb565b604080519115158252519081900360200190f35b61021a610562565b60408051918252519081900360200190f35b6101fe6004803603606081101561024257600080fd5b506001600160a01b03813581169160208101359091169060400135610568565b61026a610657565b6040805160ff9092168252519081900360200190f35b6101fe6004803603602081101561029657600080fd5b5035610660565b6101fe600480360360408110156102b357600080fd5b506001600160a01b0381351690602001356106b7565b6101fe600480360360208110156102df57600080fd5b50356107ba565b610139610898565b61021a6004803603602081101561030457600080fd5b50356001600160a01b03166108f3565b6101b661090e565b61013961091d565b6101fe6004803603602081101561033a57600080fd5b50356001600160a01b0316610978565b6101fe6109e7565b6101fe6004803603604081101561036857600080fd5b506001600160a01b0381351690602001356109ef565b6101fe6004803603606081101561039457600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156103c457600080fd5b8201836020820111156103d657600080fd5b803590602001918460018302840111640100000000831117156103f857600080fd5b509092509050610a8d565b61021a610b5f565b61021a6004803603604081101561042157600080fd5b506001600160a01b0381358116916020013516610b65565b6101fe6004803603602081101561044f57600080fd5b50356001600160a01b0316610b90565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104e45780601f106104b9576101008083540402835291602001916104e4565b820191906000526020600020905b8154815290600101906020018083116104c757829003601f168201915b505050505081565b6006546001600160a01b031681565b3360008181526009602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60005481565b6000836105736109e7565b158061058c57506005546001600160a01b038281169116145b1561064f5784848461059f838383610bff565b1561064b576001600160a01b03881660009081526009602090815260408083203384529091529020548611156105d8576000945061064b565b6001600160a01b03808916600081815260086020908152604080832080548c90039055938b1680835284832080548c0190558383526009825284832033845282529184902080548b9003905583518a815293519193600080516020610c56833981519152929081900390910190a3600194505b5050505b509392505050565b60025460ff1681565b6005546000906001600160a01b03163314156106b25760078290556040805183815290517f6c04066f6ede40cc1642c211ba9d18f1a096ccc84fb8d11be28ea6c3c6f68b369181900360200190a15060015b919050565b6006546000906001600160a01b03163314806106dd57506005546001600160a01b031633145b1561055c57336106eb6109e7565b158061070457506005546001600160a01b038281169116145b156107b3576000548381011161071d57600091506107b3565b6001600160a01b0384166000818152600860209081526040808320805488019055825487019283905580518781529182019290925281517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f929181900390910190a26040805184815290516001600160a01b03861691600091600080516020610c568339815191529181900360200190a3600191505b5092915050565b6000336107c56109e7565b15806107de57506005546001600160a01b038281169116145b15610892578215806107fe57503360009081526008602052604090205483115b1561080c5760009150610892565b3360008181526008602090815260408083208054889003905582548790039283905580518781529182019290925281517f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a929181900390910190a26040805184815290516000913391600080516020610c568339815191529181900360200190a3600191505b50919050565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104e45780601f106104b9576101008083540402835291602001916104e4565b6001600160a01b031660009081526008602052604090205490565b6005546001600160a01b031681565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104e45780601f106104b9576101008083540402835291602001916104e4565b6005546000906001600160a01b03163314156106b257600580546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f3edd90e7770f06fafde38004653b33870066c33bfc923ff6102acd601f85dfbc9181900360200190a1506001919050565b600754431090565b6000336109fa6109e7565b1580610a1357506005546001600160a01b038281169116145b156107b357338484610a26838383610bff565b15610a835733600081815260086020908152604080832080548b900390556001600160a01b038b168084529281902080548b01905580518a81529051929392600080516020610c56833981519152929181900390910190a3600194505b5050505092915050565b6000610a9985856104fb565b15610b5757846001600160a01b0316638f4ffcb133863087876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610b3a57600080fd5b505af1158015610b4e573d6000803e3d6000fd5b50505050600190505b949350505050565b60075481565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6005546000906001600160a01b03163314156106b257600680546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6adffd5c93085d835dac6f3b40adf7c242ca4b3284048d20c3d8a501748dc9739181900360200190a1506001919050565b6001600160a01b0383166000908152600860205260408120548211801590610c275750600082115b8015610c3c57506001600160a01b0383163014155b8015610b57575050506001600160a01b0316151591905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202f1ef76d90a0613671ac682cd349c08f428a8b33d96f2a2f75e99d7789f988d764736f6c634300060c0033

Verified Source Code Partial Match

Compiler: v0.6.12+commit.27d51765 EVM: istanbul Optimization: Yes (200 runs)
DaaToken.sol 242 lines
pragma solidity ^0.6.12;

interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes calldata _extraData) external; }

/// @title ICONOMI Daa token
contract DaaToken {
  //
  // events
  //
  // ERC20 events
  event Transfer(address indexed _from, address indexed _to, uint256 _value);
  event Approval(address indexed _owner, address indexed _spender, uint256 _value);

  // mint/burn events
  event Mint(address indexed _to, uint256 _amount, uint256 _newTotalSupply);
  event Burn(address indexed _from, uint256 _amount, uint256 _newTotalSupply);

  // admin events
  event BlockLockSet(uint256 _value);
  event NewOwner(address _newOwner);
  event NewMinter(address _minter);

  modifier onlyOwner {
    if (msg.sender == owner) {
      _;
    }
  }

  modifier minterOrOwner {
    if (msg.sender == minter || msg.sender == owner) {
      _;
    }
  }

  modifier blockLock(address _sender) {
    if (!isLocked() || _sender == owner) {
      _;
    }
  }

  modifier validTransfer(address _from, address _to, uint256 _amount) {
    if (isTransferValid(_from, _to, _amount)) {
      _;
    }
  }

  uint256 public totalSupply;
  string public name;
  uint8 public decimals;
  string public symbol;
  string public version = '0.0.1';
  address public owner;
  address public minter;
  uint256 public lockedUntilBlock;

  constructor(
      string memory _tokenName,
      uint8 _decimalUnits,
      string memory _tokenSymbol,
      address _owner,
      address _minter,
      uint256  _lockedUntilBlock
  ) public {

    name = _tokenName;
    decimals = _decimalUnits;
    symbol = _tokenSymbol;
    owner = _owner;
    minter = _minter;
    lockedUntilBlock = _lockedUntilBlock;
  }

  function transfer(address _to, uint256 _value)
      public
      blockLock(msg.sender)
      validTransfer(msg.sender, _to, _value)
      returns (bool success)
  {

    // transfer tokens
    balances[msg.sender] -= _value;
    balances[_to] += _value;

    emit Transfer(msg.sender, _to, _value);
    return true;
  }

  function approve(address _spender, uint256 _value)
      public
      returns (bool success)
  {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  function transferFrom(address _from, address _to, uint256 _value)
      public
      blockLock(_from)
      validTransfer(_from, _to, _value)
      returns (bool success)
  {

    // check sufficient allowance
    if (_value > allowed[_from][msg.sender]) {
      return false;
    }

    // transfer tokens
    balances[_from] -= _value;
    balances[_to] += _value;
    allowed[_from][msg.sender] -= _value;

    emit Transfer(_from, _to, _value);
    return true;
  }

  function approveAndCall(address _spender, uint256 _value, bytes calldata _extraData)
      public
      returns (bool success)
  {
    if (approve(_spender, _value)) {
      tokenRecipient(_spender).receiveApproval(msg.sender, _value, address(this), _extraData);
      return true;
    }
  }

  /// @notice Mint new tokens. Can only be called by minter or owner
  function mint(address _to, uint256 _value)
      public
      minterOrOwner
      blockLock(msg.sender)
      returns (bool success)
  {
    // ensure _value is greater than zero and
    // doesn't overflow
    if (totalSupply + _value <= totalSupply) {
      return false;
    }

    balances[_to] += _value;
    totalSupply += _value;

    emit Mint(_to, _value, totalSupply);
    emit Transfer(address(0x0), _to, _value);

    return true;
  }

  /// @notice Burn tokens. Can be called by any account
  function burn(uint256 _value)
      public
      blockLock(msg.sender)
      returns (bool success)
  {
    if (_value == 0 || _value > balances[msg.sender]) {
      return false;
    }

    balances[msg.sender] -= _value;
    totalSupply -= _value;

    Burn(msg.sender, _value, totalSupply);
    emit Transfer(msg.sender, address(0x0), _value);

    return true;
  }

  /// @notice Set block lock. Until that block (exclusive) transfers are disallowed
  function setBlockLock(uint256 _lockedUntilBlock)
      public
      onlyOwner
      returns (bool success)
  {
    lockedUntilBlock = _lockedUntilBlock;
    BlockLockSet(_lockedUntilBlock);
    return true;
  }

  /// @notice Replace current owner with new one
  function replaceOwner(address _newOwner)
      public
      onlyOwner
      returns (bool success)
  {
    owner = _newOwner;
    NewOwner(_newOwner);
    return true;
  }

  /// @notice Set account that can mint new tokens
  function setMinter(address _newMinter)
      public
      onlyOwner
      returns (bool success)
  {
    minter = _newMinter;
    NewMinter(_newMinter);
    return true;
  }

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

  function allowance(address _owner, address _spender)
      public
      view
      returns (uint256 remaining)
  {
    return allowed[_owner][_spender];
  }

  /// @notice Are transfers currently disallowed
  function isLocked()
      public
      view
      returns (bool success)
  {
    return lockedUntilBlock > block.number;
  }

  /// @dev Checks if transfer parameters are valid
  function isTransferValid(address _from, address _to, uint256 _amount)
      private
      view
      returns (bool isValid)
  {
    return  balances[_from] >= _amount &&  // sufficient balance
            _amount > 0 &&                 // amount is positive
            _to != address(this) &&        // prevent sending tokens to contract
            _to != address(0x0)            // prevent sending token to 0x0 address
    ;
  }

  mapping (address => uint256) balances;
  mapping (address => mapping (address => uint256)) allowed;
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
isLocked 0xa4e2d634 → bool
lockedUntilBlock 0xd8162db7 → uint256
minter 0x07546172 → address
name 0x06fdde03 → string
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
version 0x54fd4d50 → string

Write Contract 9 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address _spender
uint256 _value
returns: bool
approveAndCall 0xcae9ca51
address _spender
uint256 _value
bytes _extraData
returns: bool
burn 0x42966c68
uint256 _value
returns: bool
mint 0x40c10f19
address _to
uint256 _value
returns: bool
replaceOwner 0xa39a45b7
address _newOwner
returns: bool
setBlockLock 0x366a68dc
uint256 _lockedUntilBlock
returns: bool
setMinter 0xfca3b5aa
address _newMinter
returns: bool
transfer 0xa9059cbb
address _to
uint256 _value
returns: bool
transferFrom 0x23b872dd
address _from
address _to
uint256 _value
returns: bool

Recent Transactions

No transactions found for this address