Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xD0a4b8946Cb52f0661273bfbC6fD0E0C75Fc6433
Balance 0 ETH
Nonce 1
Code Size 4305 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

4305 bytes
0x6060604052600436106101195763ffffffff60e060020a60003504166306fdde03811461011e578063095ea7b3146101a85780631608f18f146101de57806318160ddd146101f857806323b872dd1461021d578063313ce56714610245578063523464121461026e5780635a3b7e42146102fd57806370a082311461031057806379ba50971461032f578063867904b4146103425780638da5cb5b1461036457806395d89b41146103935780639c481c9e146103a6578063a0929cda146103b9578063a24835d1146103e1578063a9059cbb14610403578063bef97c8714610425578063cae9ca5114610438578063d4ee1d901461049d578063dd62ed3e146104b0578063f0dda65c146104d5578063f2fde38b146104f7575b600080fd5b341561012957600080fd5b610131610516565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561016d578082015183820152602001610155565b50505050905090810190601f16801561019a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101b357600080fd5b6101ca600160a060020a03600435166024356105b4565b604051901515815260200160405180910390f35b34156101e957600080fd5b6101f66004351515610620565b005b341561020357600080fd5b61020b61064a565b60405190815260200160405180910390f35b341561022857600080fd5b6101ca600160a060020a0360043581169060243516604435610650565b341561025057600080fd5b61025861067e565b60405160ff909116815260200160405180910390f35b341561027957600080fd5b6101ca60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061068795505050505050565b341561030857600080fd5b610131610711565b341561031b57600080fd5b61020b600160a060020a036004351661077c565b341561033a57600080fd5b6101f6610797565b341561034d57600080fd5b6101f6600160a060020a036004351660243561083e565b341561036f57600080fd5b610377610959565b604051600160a060020a03909116815260200160405180910390f35b341561039e57600080fd5b610131610968565b34156103b157600080fd5b6103776109d3565b34156103c457600080fd5b6101f6600160a060020a03600435811690602435166044356109e7565b34156103ec57600080fd5b6101f6600160a060020a0360043516602435610a7c565b341561040e57600080fd5b6101ca600160a060020a0360043516602435610b73565b341561043057600080fd5b6101ca610b9f565b341561044357600080fd5b6101ca60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610ba895505050505050565b34156104a857600080fd5b610377610cbb565b34156104bb57600080fd5b61020b600160a060020a0360043581169060243516610cca565b34156104e057600080fd5b6101f6600160a060020a0360043516602435610cf5565b341561050257600080fd5b6101f6600160a060020a0360043516610ddf565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105ac5780601f10610581576101008083540402835291602001916105ac565b820191906000526020600020905b81548152906001019060200180831161058f57829003601f168201915b505050505081565b600160a060020a03338116600081815260086020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60005433600160a060020a0390811691161461063857fe5b6009805460ff19169115919091179055565b60065490565b60095460009060ff16151561066157fe5b61066c848484610e41565b151561067457fe5b5060019392505050565b60055460ff1681565b600954600090819060ff16151561069a57fe5b60005433600160a060020a039081169116146106b257fe5b82518451146106c057600080fd5b5060005b8351811015610674576107018482815181106106dc57fe5b906020019060200201518483815181106106f257fe5b90602001906020020151610f79565b151561070957fe5b6001016106c4565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105ac5780601f10610581576101008083540402835291602001916105ac565b600160a060020a031660009081526007602052604090205490565b60015433600160a060020a039081169116146107b257600080fd5b6000546001547f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a1600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b60005433600160a060020a0390811691161461085657fe5b81600160a060020a038116151561086c57600080fd5b8230600160a060020a031681600160a060020a03161415151561088e57600080fd5b6006546108a1908463ffffffff61105d16565b600655600160a060020a0384166000908152600760205260409020546108cd908463ffffffff61105d16565b600160a060020a03851660009081526007602052604090819020919091557f9386c90217c323f58030f9dadcbc938f807a940f4ff41cd4cead9562f5da7dc39084905190815260200160405180910390a183600160a060020a031630600160a060020a03166000805160206110868339815191528560405190815260200160405180910390a350505050565b600054600160a060020a031681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105ac5780601f10610581576101008083540402835291602001916105ac565b6005546101009004600160a060020a031681565b60005433600160a060020a039081169116146109ff57fe5b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a5c57600080fd5b6102c65a03f11515610a6d57600080fd5b50505060405180515050505050565b81600160a060020a031633600160a060020a03161480610aaa575060005433600160a060020a039081169116145b1515610ab557600080fd5b600160a060020a038216600090815260076020526040902054610ade908263ffffffff61107316565b600160a060020a038316600090815260076020526040902055600654610b0a908263ffffffff61107316565b600655600160a060020a033081169083166000805160206110868339815191528360405190815260200160405180910390a37f9a1b418bc061a5d80270261562e6986a35d995f8051145f277be16103abd34538160405190815260200160405180910390a15050565b60095460009060ff161515610b8457fe5b610b8e8383610f79565b1515610b9657fe5b50600192915050565b60095460ff1681565b600083610bb581856105b4565b5080600160a060020a0316638f4ffcb1338630876040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c4e578082015183820152602001610c36565b50505050905090810190601f168015610c7b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515610c9c57600080fd5b6102c65a03f11515610cad57600080fd5b506001979650505050505050565b600154600160a060020a031681565b600160a060020a03918216600090815260086020908152604080832093909416825291909152205490565b60055433600160a060020a039081166101009092041614610d1557600080fd5b600654610d28908263ffffffff61105d16565b600655600160a060020a038216600090815260076020526040902054610d54908263ffffffff61105d16565b600160a060020a0383166000818152600760205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859083905190815260200160405180910390a281600160a060020a031633600160a060020a03166000805160206110868339815191528360405190815260200160405180910390a35050565b60005433600160a060020a03908116911614610df757fe5b600054600160a060020a0382811691161415610e1257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000600160a060020a03831615801590610e6d575030600160a060020a031683600160a060020a031614155b1515610e7857600080fd5b600160a060020a038416600090815260076020526040902054610ea1908363ffffffff61107316565b600160a060020a038086166000908152600760205260408082209390935590851681522054610ed6908363ffffffff61105d16565b600160a060020a03808516600090815260076020908152604080832094909455878316825260088152838220339093168252919091522054610f1e908363ffffffff61107316565b600160a060020a03808616600081815260086020908152604080832033861684529091529081902093909355908516916000805160206110868339815191529085905190815260200160405180910390a35060019392505050565b6000600160a060020a03831615801590610fa5575030600160a060020a031683600160a060020a031614155b1515610fb057600080fd5b600160a060020a033316600090815260076020526040902054610fd9908363ffffffff61107316565b600160a060020a03338116600090815260076020526040808220939093559085168152205461100e908363ffffffff61105d16565b600160a060020a0380851660008181526007602052604090819020939093559133909116906000805160206110868339815191529085905190815260200160405180910390a350600192915050565b60008282018381101561106c57fe5b9392505050565b60008282111561107f57fe5b509003905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058202b424472ad171d122a55f8b481c05231ea661e11ceab650924712502f94c900b0029

Verified Source Code Partial Match

Compiler: v0.4.19-nightly.2017.11.11+commit.284c3839 Optimization: Yes (200 runs)
StormToken.sol 284 lines
pragma solidity ^0.4.13;

contract ItokenRecipient {
  function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData);
}

library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

contract Owned {
    address public owner;
    address public newOwner;

    function Owned() {
        owner = msg.sender;
    }

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

    function transferOwnership(address _newOwner) public onlyOwner {
        require(_newOwner != owner);
        newOwner = _newOwner;
    }

    function acceptOwnership() public {
        require(msg.sender == newOwner);
        OwnerUpdate(owner, newOwner);
        owner = newOwner;
        newOwner = 0x0;
    }

    event OwnerUpdate(address _prevOwner, address _newOwner);
}

contract IERC20Token {
  function totalSupply() constant returns (uint256 totalSupply);
  function balanceOf(address _owner) constant returns (uint256 balance) {}
  function transfer(address _to, uint256 _value) returns (bool success) {}
  function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}
  function approve(address _spender, uint256 _value) returns (bool success) {}
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}

  event Transfer(address indexed _from, address indexed _to, uint256 _value);
  event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract Token is IERC20Token, Owned {

  using SafeMath for uint256;

  /* Public variables of the token */
  string public standard;
  string public name;
  string public symbol;
  uint8 public decimals;

  address public crowdsaleContractAddress;

  /* Private variables of the token */
  uint256 supply = 0;
  mapping (address => uint256) balances;
  mapping (address => mapping (address => uint256)) allowances;

  /* Events */
  event Mint(address indexed _to, uint256 _value);

  // validates address is the crowdsale owner
  modifier onlyCrowdsaleOwner() {
      require(msg.sender == crowdsaleContractAddress);
      _;
  }

  /* Returns total supply of issued tokens */
  function totalSupply() constant returns (uint256) {
    return supply;
  }

  /* Returns balance of address */
  function balanceOf(address _owner) constant returns (uint256 balance) {
    return balances[_owner];
  }

  /* Transfers tokens from your address to other */
  function transfer(address _to, uint256 _value) returns (bool success) {
    require(_to != 0x0 && _to != address(this));
    balances[msg.sender] = balances[msg.sender].sub(_value); // Deduct senders balance
    balances[_to] = balances[_to].add(_value);               // Add recivers blaance
    Transfer(msg.sender, _to, _value);                       // Raise Transfer event
    return true;
  }

  /* Approve other address to spend tokens on your account */
  function approve(address _spender, uint256 _value) returns (bool success) {
    allowances[msg.sender][_spender] = _value;        // Set allowance
    Approval(msg.sender, _spender, _value);           // Raise Approval event
    return true;
  }

  /* Approve and then communicate the approved contract in a single tx */
  function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
    ItokenRecipient spender = ItokenRecipient(_spender);            // Cast spender to tokenRecipient contract
    approve(_spender, _value);                                      // Set approval to contract for _value
    spender.receiveApproval(msg.sender, _value, this, _extraData);  // Raise method on _spender contract
    return true;
  }

  /* A contract attempts to get the coins */
  function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
    require(_to != 0x0 && _to != address(this));
    balances[_from] = balances[_from].sub(_value);                              // Deduct senders balance
    balances[_to] = balances[_to].add(_value);                                  // Add recipient blaance
    allowances[_from][msg.sender] = allowances[_from][msg.sender].sub(_value);  // Deduct allowance for this address
    Transfer(_from, _to, _value);                                               // Raise Transfer event
    return true;
  }

  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
    return allowances[_owner][_spender];
  }

  function mintTokens(address _to, uint256 _amount) onlyCrowdsaleOwner {
    supply = supply.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    Mint(_to, _amount);
    Transfer(msg.sender, _to, _amount);
  }

  function salvageTokensFromContract(address _tokenAddress, address _to, uint _amount) onlyOwner {
    IERC20Token(_tokenAddress).transfer(_to, _amount);
  }
}

contract StormToken is Token {

	bool public transfersEnabled = false;    // true if transfer/transferFrom are enabled, false if not

	// triggered when the total supply is increased
	event Issuance(uint256 _amount);
	// triggered when the total supply is decreased
	event Destruction(uint256 _amount);


  /* Initializes contract */
  function StormToken(address _crowdsaleAddress) public {
    standard = "Storm Token v1.0";
    name = "Storm Token";
    symbol = "STORM"; // token symbol
    decimals = 18;
    crowdsaleContractAddress = _crowdsaleAddress;
  }

    // validates an address - currently only checks that it isn't null
    modifier validAddress(address _address) {
        require(_address != 0x0);
        _;
    }

    // verifies that the address is different than this contract address
    modifier notThis(address _address) {
        require(_address != address(this));
        _;
    }

    // allows execution only when transfers aren't disabled
    modifier transfersAllowed {
        assert(transfersEnabled);
        _;
    }

   /**
        @dev disables/enables transfers
        can only be called by the contract owner

        @param _disable    true to disable transfers, false to enable them
    */
    function disableTransfers(bool _disable) public onlyOwner {
        transfersEnabled = !_disable;
    }

    /**
        @dev increases the token supply and sends the new tokens to an account
        can only be called by the contract owner

        @param _to         account to receive the new amount
        @param _amount     amount to increase the supply by
    */
    function issue(address _to, uint256 _amount)
        public
        onlyOwner
        validAddress(_to)
        notThis(_to)
    {
        supply = supply.add(_amount);
        balances[_to] = balances[_to].add(_amount);

        Issuance(_amount);
        Transfer(this, _to, _amount);
    }

    /**
        @dev removes tokens from an account and decreases the token supply
        can be called by the contract owner to destroy tokens from any account or by any holder to destroy tokens from his/her own account

        @param _from       account to remove the amount from
        @param _amount     amount to decrease the supply by
    */
    function destroy(address _from, uint256 _amount) public {
        require(msg.sender == _from || msg.sender == owner); // validate input

        balances[_from] = balances[_from].sub(_amount);
        supply = supply.sub(_amount);

        Transfer(_from, this, _amount);
        Destruction(_amount);
    }

    // ERC20 standard method overrides with some extra functionality

    /**
        @dev send coins
        throws on any error rather then return a false flag to minimize user errors
        in addition to the standard checks, the function throws if transfers are disabled

        @param _to      target address
        @param _value   transfer amount

        @return true if the transfer was successful, false if it wasn't
    */
    function transfer(address _to, uint256 _value) public transfersAllowed returns (bool success) {
        assert(super.transfer(_to, _value));
        return true;
    }
  
    function transfers(address[] _recipients, uint256[] _values) public transfersAllowed onlyOwner returns (bool success) {
        require(_recipients.length == _values.length); // Check if input data is correct

        for (uint cnt = 0; cnt < _recipients.length; cnt++) {
            assert(super.transfer(_recipients[cnt], _values[cnt]));
        }
        return true;
    }

    /**
        @dev an account/contract attempts to get the coins
        throws on any error rather then return a false flag to minimize user errors
        in addition to the standard checks, the function throws if transfers are disabled

        @param _from    source address
        @param _to      target address
        @param _value   transfer amount

        @return true if the transfer was successful, false if it wasn't
    */
    function transferFrom(address _from, address _to, uint256 _value) public transfersAllowed returns (bool success) {
        assert(super.transferFrom(_from, _to, _value));
        return true;
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
crowdsaleContractAddress 0x9c481c9e → address
decimals 0x313ce567 → uint8
name 0x06fdde03 → string
newOwner 0xd4ee1d90 → address
owner 0x8da5cb5b → address
standard 0x5a3b7e42 → string
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
transfersEnabled 0xbef97c87 → bool

Write Contract 12 functions

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

acceptOwnership 0x79ba5097
No parameters
approve 0x095ea7b3
address _spender
uint256 _value
returns: bool
approveAndCall 0xcae9ca51
address _spender
uint256 _value
bytes _extraData
returns: bool
destroy 0xa24835d1
address _from
uint256 _amount
disableTransfers 0x1608f18f
bool _disable
issue 0x867904b4
address _to
uint256 _amount
mintTokens 0xf0dda65c
address _to
uint256 _amount
salvageTokensFromContract 0xa0929cda
address _tokenAddress
address _to
uint256 _amount
transfer 0xa9059cbb
address _to
uint256 _value
returns: bool
transferFrom 0x23b872dd
address _from
address _to
uint256 _value
returns: bool
transferOwnership 0xf2fde38b
address _newOwner
transfers 0x52346412
address[] _recipients
uint256[] _values
returns: bool

Recent Transactions

No transactions found for this address