ETH Price: $3,490.75 (+0.08%)
Gas: 2 Gwei

Contract

0x1b5242794288B45831cE069C9934a29B89aF0197
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Swap109386322020-09-26 13:57:301393 days ago1601128650IN
CryptoSaga: Card
0 ETH0.0377363273
Approve99512882020-04-27 0:19:461546 days ago1587946786IN
CryptoSaga: Card
0 ETH0.00020014.1549716
Swap77018442019-05-05 15:53:331903 days ago1557071613IN
CryptoSaga: Card
0 ETH0.000262850.51
Swap76893462019-05-03 17:25:131905 days ago1556904313IN
CryptoSaga: Card
0 ETH0.000264070.51
Swap76781172019-05-01 23:13:271907 days ago1556752407IN
CryptoSaga: Card
0 ETH0.000262850.51
Swap76637362019-04-29 17:41:591909 days ago1556559719IN
CryptoSaga: Card
0 ETH0.000262850.51
Swap76587392019-04-28 23:03:441910 days ago1556492624IN
CryptoSaga: Card
0 ETH0.00051541
Swap76510232019-04-27 18:11:181911 days ago1556388678IN
CryptoSaga: Card
0 ETH0.000264070.51
Swap76447192019-04-26 18:53:101912 days ago1556304790IN
CryptoSaga: Card
0 ETH0.000264070.51
Swap76368192019-04-25 13:28:131913 days ago1556198893IN
CryptoSaga: Card
0 ETH0.000262850.51
Swap76306262019-04-24 14:33:411914 days ago1556116421IN
CryptoSaga: Card
0 ETH0.001553373
Swap76305692019-04-24 14:20:541914 days ago1556115654IN
CryptoSaga: Card
0 ETH0.00106082
Swap75940522019-04-18 21:17:161920 days ago1555622236IN
CryptoSaga: Card
0 ETH0.000264070.51
Swap75827992019-04-17 2:58:041922 days ago1555469884IN
CryptoSaga: Card
0 ETH0.000370290.71514
Approve74971792019-04-03 19:37:081935 days ago1554320228IN
CryptoSaga: Card
0 ETH0.000423549
Approve74971752019-04-03 19:36:341935 days ago1554320194IN
CryptoSaga: Card
0 ETH0.000423549
Approve74971692019-04-03 19:34:161935 days ago1554320056IN
CryptoSaga: Card
0 ETH0.000423549
Swap74836382019-04-01 16:23:421937 days ago1554135822IN
CryptoSaga: Card
0 ETH0.001035582
Swap74738612019-03-31 3:53:251939 days ago1554004405IN
CryptoSaga: Card
0 ETH0.000264070.51
Swap74678622019-03-30 5:21:511940 days ago1553923311IN
CryptoSaga: Card
0 ETH0.000264070.51
Swap74606232019-03-29 1:54:161941 days ago1553824456IN
CryptoSaga: Card
0 ETH0.000315850.61
Swap74367742019-03-25 8:25:571945 days ago1553502357IN
CryptoSaga: Card
0 ETH0.001035582
Swap74367632019-03-25 8:23:131945 days ago1553502193IN
CryptoSaga: Card
0 ETH0.00257035
Swap74367302019-03-25 8:15:051945 days ago1553501705IN
CryptoSaga: Card
0 ETH0.002588965
Approve74367252019-03-25 8:13:371945 days ago1553501617IN
CryptoSaga: Card
0 ETH0.000094122
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoSagaCard

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-01-31
*/

pragma solidity ^0.4.18;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    Unpause();
  }
}

/**
 * @title Claimable
 * @dev Extension for the Ownable contract, where the ownership needs to be claimed.
 * This allows the new owner to accept the transfer.
 */
contract Claimable is Ownable {
  address public pendingOwner;

  /**
   * @dev Modifier throws if called by any account other than the pendingOwner.
   */
  modifier onlyPendingOwner() {
    require(msg.sender == pendingOwner);
    _;
  }

  /**
   * @dev Allows the current owner to set the pendingOwner address.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    pendingOwner = newOwner;
  }

  /**
   * @dev Allows the pendingOwner address to finalize the transfer.
   */
  function claimOwnership() onlyPendingOwner public {
    OwnershipTransferred(owner, pendingOwner);
    owner = pendingOwner;
    pendingOwner = address(0);
  }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure 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;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @title ERC721 interface
 * @dev see https://github.com/ethereum/eips/issues/721
 */
contract ERC721 {
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function transfer(address _to, uint256 _tokenId) public;
  function approve(address _to, uint256 _tokenId) public;
  function takeOwnership(uint256 _tokenId) public;
}

/**
 * @title ERC721Token
 * Generic implementation for the required functionality of the ERC721 standard
 */
contract ERC721Token is ERC721 {
  using SafeMath for uint256;

  // Total amount of tokens
  uint256 private totalTokens;

  // Mapping from token ID to owner
  mapping (uint256 => address) private tokenOwner;

  // Mapping from token ID to approved address
  mapping (uint256 => address) private tokenApprovals;

  // Mapping from owner to list of owned token IDs
  mapping (address => uint256[]) private ownedTokens;

  // Mapping from token ID to index of the owner tokens list
  mapping(uint256 => uint256) private ownedTokensIndex;

  /**
  * @dev Guarantees msg.sender is owner of the given token
  * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender
  */
  modifier onlyOwnerOf(uint256 _tokenId) {
    require(ownerOf(_tokenId) == msg.sender);
    _;
  }

  /**
  * @dev Gets the total amount of tokens stored by the contract
  * @return uint256 representing the total amount of tokens
  */
  function totalSupply() public view returns (uint256) {
    return totalTokens;
  }

  /**
  * @dev Gets the balance of the specified address
  * @param _owner address to query the balance of
  * @return uint256 representing the amount owned by the passed address
  */
  function balanceOf(address _owner) public view returns (uint256) {
    return ownedTokens[_owner].length;
  }

  /**
  * @dev Gets the list of tokens owned by a given address
  * @param _owner address to query the tokens of
  * @return uint256[] representing the list of tokens owned by the passed address
  */
  function tokensOf(address _owner) public view returns (uint256[]) {
    return ownedTokens[_owner];
  }

  /**
  * @dev Gets the owner of the specified token ID
  * @param _tokenId uint256 ID of the token to query the owner of
  * @return owner address currently marked as the owner of the given token ID
  */
  function ownerOf(uint256 _tokenId) public view returns (address) {
    address owner = tokenOwner[_tokenId];
    require(owner != address(0));
    return owner;
  }

  /**
   * @dev Gets the approved address to take ownership of a given token ID
   * @param _tokenId uint256 ID of the token to query the approval of
   * @return address currently approved to take ownership of the given token ID
   */
  function approvedFor(uint256 _tokenId) public view returns (address) {
    return tokenApprovals[_tokenId];
  }

  /**
  * @dev Transfers the ownership of a given token ID to another address
  * @param _to address to receive the ownership of the given token ID
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
    clearApprovalAndTransfer(msg.sender, _to, _tokenId);
  }

  /**
  * @dev Approves another address to claim for the ownership of the given token ID
  * @param _to address to be approved for the given token ID
  * @param _tokenId uint256 ID of the token to be approved
  */
  function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
    address owner = ownerOf(_tokenId);
    require(_to != owner);
    if (approvedFor(_tokenId) != 0 || _to != 0) {
      tokenApprovals[_tokenId] = _to;
      Approval(owner, _to, _tokenId);
    }
  }

  /**
  * @dev Claims the ownership of a given token ID
  * @param _tokenId uint256 ID of the token being claimed by the msg.sender
  */
  function takeOwnership(uint256 _tokenId) public {
    require(isApprovedFor(msg.sender, _tokenId));
    clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId);
  }

  /**
  * @dev Mint token function
  * @param _to The address that will own the minted token
  * @param _tokenId uint256 ID of the token to be minted by the msg.sender
  */
  function _mint(address _to, uint256 _tokenId) internal {
    require(_to != address(0));
    addToken(_to, _tokenId);
    Transfer(0x0, _to, _tokenId);
  }

  /**
  * @dev Burns a specific token
  * @param _tokenId uint256 ID of the token being burned by the msg.sender
  */
  function _burn(uint256 _tokenId) onlyOwnerOf(_tokenId) internal {
    if (approvedFor(_tokenId) != 0) {
      clearApproval(msg.sender, _tokenId);
    }
    removeToken(msg.sender, _tokenId);
    Transfer(msg.sender, 0x0, _tokenId);
  }

  /**
   * @dev Tells whether the msg.sender is approved for the given token ID or not
   * This function is not private so it can be extended in further implementations like the operatable ERC721
   * @param _owner address of the owner to query the approval of
   * @param _tokenId uint256 ID of the token to query the approval of
   * @return bool whether the msg.sender is approved for the given token ID or not
   */
  function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) {
    return approvedFor(_tokenId) == _owner;
  }

  /**
  * @dev Internal function to clear current approval and transfer the ownership of a given token ID
  * @param _from address which you want to send tokens from
  * @param _to address which you want to transfer the token to
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal {
    require(_to != address(0));
    require(_to != ownerOf(_tokenId));
    require(ownerOf(_tokenId) == _from);

    clearApproval(_from, _tokenId);
    removeToken(_from, _tokenId);
    addToken(_to, _tokenId);
    Transfer(_from, _to, _tokenId);
  }

  /**
  * @dev Internal function to clear current approval of a given token ID
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function clearApproval(address _owner, uint256 _tokenId) private {
    require(ownerOf(_tokenId) == _owner);
    tokenApprovals[_tokenId] = 0;
    Approval(_owner, 0, _tokenId);
  }

  /**
  * @dev Internal function to add a token ID to the list of a given address
  * @param _to address representing the new owner of the given token ID
  * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
  */
  function addToken(address _to, uint256 _tokenId) private {
    require(tokenOwner[_tokenId] == address(0));
    tokenOwner[_tokenId] = _to;
    uint256 length = balanceOf(_to);
    ownedTokens[_to].push(_tokenId);
    ownedTokensIndex[_tokenId] = length;
    totalTokens = totalTokens.add(1);
  }

  /**
  * @dev Internal function to remove a token ID from the list of a given address
  * @param _from address representing the previous owner of the given token ID
  * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
  */
  function removeToken(address _from, uint256 _tokenId) private {
    require(ownerOf(_tokenId) == _from);

    uint256 tokenIndex = ownedTokensIndex[_tokenId];
    uint256 lastTokenIndex = balanceOf(_from).sub(1);
    uint256 lastToken = ownedTokens[_from][lastTokenIndex];

    tokenOwner[_tokenId] = 0;
    ownedTokens[_from][tokenIndex] = lastToken;
    ownedTokens[_from][lastTokenIndex] = 0;
    // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to
    // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping
    // the lastToken to the first position, and then dropping the element placed in the last position of the list

    ownedTokens[_from].length--;
    ownedTokensIndex[_tokenId] = 0;
    ownedTokensIndex[lastToken] = tokenIndex;
    totalTokens = totalTokens.sub(1);
  }
}

/**
 * @title AccessMint
 * @dev Adds grant/revoke functions to the contract.
 */
contract AccessMint is Claimable {

  // Access for minting new tokens.
  mapping(address => bool) private mintAccess;

  // Event that is fired when minted.
  event Mint(
    address indexed _to,
    uint256 indexed _tokenId
  );

  // Modifier for accessibility to define new hero types.
  modifier onlyAccessMint {
    require(msg.sender == owner || mintAccess[msg.sender] == true);
    _;
  }

  // @dev Grant acess to mint heroes.
  function grantAccessMint(address _address)
    onlyOwner
    public
  {
    mintAccess[_address] = true;
  }

  // @dev Revoke acess to mint heroes.
  function revokeAccessMint(address _address)
    onlyOwner
    public
  {
    mintAccess[_address] = false;
  }

}

/**
 * @title The swap contract (Card => reward)
 * @dev With this contract, a CryptoSagaCard holder can swap his/her CryptoSagaCard for reward.
 *  This contract is intended to be inherited by CryptoSagaCore later.
 */
contract CryptoSagaCardSwap is Ownable {

  // Card contract.
  address internal cardAddess;

  // Modifier for accessibility to define new hero types.
  modifier onlyCard {
    require(msg.sender == cardAddess);
    _;
  }
  
  // @dev Set the address of the contract that represents ERC721 Card.
  function setCardContract(address _contractAddress)
    public
    onlyOwner
  {
    cardAddess = _contractAddress;
  }

  // @dev Convert card into reward.
  //  This should be implemented by CryptoSagaCore later.
  function swapCardForReward(address _by, uint8 _rank)
    onlyCard
    public 
    returns (uint256)
  {
    return 0;
  }

}

/**
 * @title CryptoSaga Card
 * @dev ERC721 Token that repesents CryptoSaga's cards.
 *  Buy consuming a card, players of CryptoSaga can get a heroe.
 */
contract CryptoSagaCard is ERC721Token, Claimable, AccessMint {

  string public constant name = "CryptoSaga Card";
  string public constant symbol = "CARD";

  // Rank of the token.
  mapping(uint256 => uint8) public tokenIdToRank;

  // The number of tokens ever minted.
  uint256 public numberOfTokenId;

  // The converter contract.
  CryptoSagaCardSwap private swapContract;

  // Event that should be fired when card is converted.
  event CardSwap(address indexed _by, uint256 _tokenId, uint256 _rewardId);

  // @dev Set the address of the contract that represents CryptoSaga Cards.
  function setCryptoSagaCardSwapContract(address _contractAddress)
    public
    onlyOwner
  {
    swapContract = CryptoSagaCardSwap(_contractAddress);
  }

  function rankOf(uint256 _tokenId) 
    public view
    returns (uint8)
  {
    return tokenIdToRank[_tokenId];
  }

  // @dev Mint a new card.
  function mint(address _beneficiary, uint256 _amount, uint8 _rank)
    onlyAccessMint
    public
  {
    for (uint256 i = 0; i < _amount; i++) {
      _mint(_beneficiary, numberOfTokenId);
      tokenIdToRank[numberOfTokenId] = _rank;
      numberOfTokenId ++;
    }
  }

  // @dev Swap this card for reward.
  //  The card will be burnt.
  function swap(uint256 _tokenId)
    onlyOwnerOf(_tokenId)
    public
    returns (uint256)
  {
    require(address(swapContract) != address(0));

    var _rank = tokenIdToRank[_tokenId];
    var _rewardId = swapContract.swapCardForReward(this, _rank);
    CardSwap(ownerOf(_tokenId), _tokenId, _rewardId);
    _burn(_tokenId);
    return _rewardId;
  }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"approvedFor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOf","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setCryptoSagaCardSwapContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rank","type":"uint8"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"rankOf","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"revokeAccessMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"grantAccessMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"swap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfTokenId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIdToRank","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"},{"indexed":false,"name":"_rewardId","type":"uint256"}],"name":"CardSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"}]

606060405260058054600160a060020a03191633600160a060020a0316179055610fd98061002e6000396000f3006060604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461012c578063095ea7b3146101b657806318160ddd146101da5780632a6dd48f146101ff5780634e71e0c8146102315780635a3f2672146102445780635bd54fa3146102b65780636112e8ac146102d55780636352211e146102fd57806370a082311461031357806382f68dc414610332578063847e2ba11461035e57806386d518bf1461037d5780638da5cb5b1461039c57806394b918de146103af57806395d89b41146103c55780639d7b5621146103d85780639db70e19146103eb578063a9059cbb14610401578063b2e6ceeb14610423578063e30c397814610439578063f2fde38b1461044c575b600080fd5b341561013757600080fd5b61013f61046b565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561017b578082015183820152602001610163565b50505050905090810190601f1680156101a85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101c157600080fd5b6101d8600160a060020a03600435166024356104a2565b005b34156101e557600080fd5b6101ed610587565b60405190815260200160405180910390f35b341561020a57600080fd5b61021560043561058e565b604051600160a060020a03909116815260200160405180910390f35b341561023c57600080fd5b6101d86105a9565b341561024f57600080fd5b610263600160a060020a036004351661062a565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102a257808201518382015260200161028a565b505050509050019250505060405180910390f35b34156102c157600080fd5b6101d8600160a060020a03600435166106ad565b34156102e057600080fd5b6101d8600160a060020a036004351660243560ff604435166106ea565b341561030857600080fd5b610215600435610779565b341561031e57600080fd5b6101ed600160a060020a03600435166107a3565b341561033d57600080fd5b6103486004356107be565b60405160ff909116815260200160405180910390f35b341561036957600080fd5b6101d8600160a060020a03600435166107d3565b341561038857600080fd5b6101d8600160a060020a036004351661080f565b34156103a757600080fd5b61021561084e565b34156103ba57600080fd5b6101ed60043561085d565b34156103d057600080fd5b61013f6109ac565b34156103e357600080fd5b6101ed6109e3565b34156103f657600080fd5b6103486004356109e9565b341561040c57600080fd5b6101d8600160a060020a03600435166024356109fe565b341561042e57600080fd5b6101d8600435610a35565b341561044457600080fd5b610215610a60565b341561045757600080fd5b6101d8600160a060020a0360043516610a6f565b60408051908101604052600f81527f43727970746f5361676120436172640000000000000000000000000000000000602082015281565b60008133600160a060020a03166104b882610779565b600160a060020a0316146104cb57600080fd5b6104d483610779565b9150600160a060020a0384811690831614156104ef57600080fd5b6104f88361058e565b600160a060020a03161515806105165750600160a060020a03841615155b1561058157600083815260026020526040908190208054600160a060020a031916600160a060020a0387811691821790925591908416907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a35b50505050565b6000545b90565b600090815260026020526040902054600160a060020a031690565b60065433600160a060020a039081169116146105c457600080fd5b600654600554600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36006805460058054600160a060020a0319908116600160a060020a03841617909155169055565b610632610f5e565b6003600083600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156106a157602002820191906000526020600020905b81548152602001906001019080831161068d575b50505050509050919050565b60055433600160a060020a039081169116146106c857600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b60055460009033600160a060020a03908116911614806107275750600160a060020a03331660009081526007602052604090205460ff1615156001145b151561073257600080fd5b5060005b828110156105815761074a84600954610aac565b600980546000908152600860205260409020805460ff191660ff85161790558054600190810190915501610736565b600081815260016020526040812054600160a060020a031680151561079d57600080fd5b92915050565b600160a060020a031660009081526003602052604090205490565b60009081526008602052604090205460ff1690565b60055433600160a060020a039081169116146107ee57600080fd5b600160a060020a03166000908152600760205260409020805460ff19169055565b60055433600160a060020a0390811691161461082a57600080fd5b600160a060020a03166000908152600760205260409020805460ff19166001179055565b600554600160a060020a031681565b60008060008333600160a060020a031661087682610779565b600160a060020a03161461088957600080fd5b600a54600160a060020a031615156108a057600080fd5b60008581526008602052604080822054600a5460ff9091169550600160a060020a03169163d6f327cc913091879151602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b151561093257600080fd5b6102c65a03f1151561094357600080fd5b50505060405180519050915061095885610779565b600160a060020a03167f73e3de7091303bed2f1aad97b12cc34a765cbf6f8fe681a9671501af3a4fab32868460405191825260208201526040908101905180910390a26109a485610b0e565b509392505050565b60408051908101604052600481527f4341524400000000000000000000000000000000000000000000000000000000602082015281565b60095481565b60086020526000908152604090205460ff1681565b8033600160a060020a0316610a1282610779565b600160a060020a031614610a2557600080fd5b610a30338484610ba3565b505050565b610a3f3382610c69565b1515610a4a57600080fd5b610a5d610a5682610779565b3383610ba3565b50565b600654600160a060020a031681565b60055433600160a060020a03908116911614610a8a57600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a0382161515610ac157600080fd5b610acb8282610c8f565b81600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b8033600160a060020a0316610b2282610779565b600160a060020a031614610b3557600080fd5b610b3e8261058e565b600160a060020a031615610b5657610b563383610d47565b610b603383610dcc565b600033600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a35050565b600160a060020a0382161515610bb857600080fd5b610bc181610779565b600160a060020a0383811691161415610bd957600080fd5b82600160a060020a0316610bec82610779565b600160a060020a031614610bff57600080fd5b610c098382610d47565b610c138382610dcc565b610c1d8282610c8f565b81600160a060020a031683600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a3505050565b600082600160a060020a0316610c7e8361058e565b600160a060020a0316149392505050565b600081815260016020526040812054600160a060020a031615610cb157600080fd5b60008281526001602052604090208054600160a060020a031916600160a060020a038516179055610ce1836107a3565b600160a060020a038416600090815260036020526040902080549192509060018101610d0d8382610f70565b506000918252602080832091909101849055838252600490526040812082905554610d3f90600163ffffffff610f3616565b600055505050565b81600160a060020a0316610d5a82610779565b600160a060020a031614610d6d57600080fd5b6000818152600260205260408082208054600160a060020a0319169055600160a060020a038416907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600080600084600160a060020a0316610de485610779565b600160a060020a031614610df757600080fd5b6000848152600460205260409020549250610e226001610e16876107a3565b9063ffffffff610f4c16565b600160a060020a038616600090815260036020526040902080549193509083908110610e4a57fe5b60009182526020808320909101548683526001825260408084208054600160a060020a0319169055600160a060020a0389168452600390925291208054919250829185908110610e9657fe5b6000918252602080832090910192909255600160a060020a0387168152600390915260408120805484908110610ec857fe5b6000918252602080832090910192909255600160a060020a0387168152600390915260409020805490610eff906000198301610f70565b50600084815260046020526040808220829055828252812084905554610f2c90600163ffffffff610f4c16565b6000555050505050565b600082820183811015610f4557fe5b9392505050565b600082821115610f5857fe5b50900390565b60206040519081016040526000815290565b815481835581811511610a3057600083815260209020610a3091810190830161058b91905b80821115610fa95760008155600101610f95565b50905600a165627a7a723058204786610a527aba70aa3f014db908f7977893061ccb7e58ec637b0789753eed3c0029

Deployed Bytecode

0x6060604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461012c578063095ea7b3146101b657806318160ddd146101da5780632a6dd48f146101ff5780634e71e0c8146102315780635a3f2672146102445780635bd54fa3146102b65780636112e8ac146102d55780636352211e146102fd57806370a082311461031357806382f68dc414610332578063847e2ba11461035e57806386d518bf1461037d5780638da5cb5b1461039c57806394b918de146103af57806395d89b41146103c55780639d7b5621146103d85780639db70e19146103eb578063a9059cbb14610401578063b2e6ceeb14610423578063e30c397814610439578063f2fde38b1461044c575b600080fd5b341561013757600080fd5b61013f61046b565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561017b578082015183820152602001610163565b50505050905090810190601f1680156101a85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101c157600080fd5b6101d8600160a060020a03600435166024356104a2565b005b34156101e557600080fd5b6101ed610587565b60405190815260200160405180910390f35b341561020a57600080fd5b61021560043561058e565b604051600160a060020a03909116815260200160405180910390f35b341561023c57600080fd5b6101d86105a9565b341561024f57600080fd5b610263600160a060020a036004351661062a565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102a257808201518382015260200161028a565b505050509050019250505060405180910390f35b34156102c157600080fd5b6101d8600160a060020a03600435166106ad565b34156102e057600080fd5b6101d8600160a060020a036004351660243560ff604435166106ea565b341561030857600080fd5b610215600435610779565b341561031e57600080fd5b6101ed600160a060020a03600435166107a3565b341561033d57600080fd5b6103486004356107be565b60405160ff909116815260200160405180910390f35b341561036957600080fd5b6101d8600160a060020a03600435166107d3565b341561038857600080fd5b6101d8600160a060020a036004351661080f565b34156103a757600080fd5b61021561084e565b34156103ba57600080fd5b6101ed60043561085d565b34156103d057600080fd5b61013f6109ac565b34156103e357600080fd5b6101ed6109e3565b34156103f657600080fd5b6103486004356109e9565b341561040c57600080fd5b6101d8600160a060020a03600435166024356109fe565b341561042e57600080fd5b6101d8600435610a35565b341561044457600080fd5b610215610a60565b341561045757600080fd5b6101d8600160a060020a0360043516610a6f565b60408051908101604052600f81527f43727970746f5361676120436172640000000000000000000000000000000000602082015281565b60008133600160a060020a03166104b882610779565b600160a060020a0316146104cb57600080fd5b6104d483610779565b9150600160a060020a0384811690831614156104ef57600080fd5b6104f88361058e565b600160a060020a03161515806105165750600160a060020a03841615155b1561058157600083815260026020526040908190208054600160a060020a031916600160a060020a0387811691821790925591908416907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a35b50505050565b6000545b90565b600090815260026020526040902054600160a060020a031690565b60065433600160a060020a039081169116146105c457600080fd5b600654600554600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36006805460058054600160a060020a0319908116600160a060020a03841617909155169055565b610632610f5e565b6003600083600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156106a157602002820191906000526020600020905b81548152602001906001019080831161068d575b50505050509050919050565b60055433600160a060020a039081169116146106c857600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b60055460009033600160a060020a03908116911614806107275750600160a060020a03331660009081526007602052604090205460ff1615156001145b151561073257600080fd5b5060005b828110156105815761074a84600954610aac565b600980546000908152600860205260409020805460ff191660ff85161790558054600190810190915501610736565b600081815260016020526040812054600160a060020a031680151561079d57600080fd5b92915050565b600160a060020a031660009081526003602052604090205490565b60009081526008602052604090205460ff1690565b60055433600160a060020a039081169116146107ee57600080fd5b600160a060020a03166000908152600760205260409020805460ff19169055565b60055433600160a060020a0390811691161461082a57600080fd5b600160a060020a03166000908152600760205260409020805460ff19166001179055565b600554600160a060020a031681565b60008060008333600160a060020a031661087682610779565b600160a060020a03161461088957600080fd5b600a54600160a060020a031615156108a057600080fd5b60008581526008602052604080822054600a5460ff9091169550600160a060020a03169163d6f327cc913091879151602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b151561093257600080fd5b6102c65a03f1151561094357600080fd5b50505060405180519050915061095885610779565b600160a060020a03167f73e3de7091303bed2f1aad97b12cc34a765cbf6f8fe681a9671501af3a4fab32868460405191825260208201526040908101905180910390a26109a485610b0e565b509392505050565b60408051908101604052600481527f4341524400000000000000000000000000000000000000000000000000000000602082015281565b60095481565b60086020526000908152604090205460ff1681565b8033600160a060020a0316610a1282610779565b600160a060020a031614610a2557600080fd5b610a30338484610ba3565b505050565b610a3f3382610c69565b1515610a4a57600080fd5b610a5d610a5682610779565b3383610ba3565b50565b600654600160a060020a031681565b60055433600160a060020a03908116911614610a8a57600080fd5b60068054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a0382161515610ac157600080fd5b610acb8282610c8f565b81600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b8033600160a060020a0316610b2282610779565b600160a060020a031614610b3557600080fd5b610b3e8261058e565b600160a060020a031615610b5657610b563383610d47565b610b603383610dcc565b600033600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a35050565b600160a060020a0382161515610bb857600080fd5b610bc181610779565b600160a060020a0383811691161415610bd957600080fd5b82600160a060020a0316610bec82610779565b600160a060020a031614610bff57600080fd5b610c098382610d47565b610c138382610dcc565b610c1d8282610c8f565b81600160a060020a031683600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a3505050565b600082600160a060020a0316610c7e8361058e565b600160a060020a0316149392505050565b600081815260016020526040812054600160a060020a031615610cb157600080fd5b60008281526001602052604090208054600160a060020a031916600160a060020a038516179055610ce1836107a3565b600160a060020a038416600090815260036020526040902080549192509060018101610d0d8382610f70565b506000918252602080832091909101849055838252600490526040812082905554610d3f90600163ffffffff610f3616565b600055505050565b81600160a060020a0316610d5a82610779565b600160a060020a031614610d6d57600080fd5b6000818152600260205260408082208054600160a060020a0319169055600160a060020a038416907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600080600084600160a060020a0316610de485610779565b600160a060020a031614610df757600080fd5b6000848152600460205260409020549250610e226001610e16876107a3565b9063ffffffff610f4c16565b600160a060020a038616600090815260036020526040902080549193509083908110610e4a57fe5b60009182526020808320909101548683526001825260408084208054600160a060020a0319169055600160a060020a0389168452600390925291208054919250829185908110610e9657fe5b6000918252602080832090910192909255600160a060020a0387168152600390915260408120805484908110610ec857fe5b6000918252602080832090910192909255600160a060020a0387168152600390915260409020805490610eff906000198301610f70565b50600084815260046020526040808220829055828252812084905554610f2c90600163ffffffff610f4c16565b6000555050505050565b600082820183811015610f4557fe5b9392505050565b600082821115610f5857fe5b50900390565b60206040519081016040526000815290565b815481835581811511610a3057600083815260209020610a3091810190830161058b91905b80821115610fa95760008155600101610f95565b50905600a165627a7a723058204786610a527aba70aa3f014db908f7977893061ccb7e58ec637b0789753eed3c0029

Swarm Source

bzzr://4786610a527aba70aa3f014db908f7977893061ccb7e58ec637b0789753eed3c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.