Contract Overview |  GU_ShinyLegendaryPackFour
Balance: 0.98 Ether
Ether Value: $115.08 (@ $117.43/ETH)
Transactions: 2406 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xbea8c2f97fa34dc1cfdd7acbdc8226fb1c8c7473at txn 0x8b47369cfbcae475261307969b84e814d9e0732f3e94f9a8d20e548713df63f1
Token Balance:
 Latest 25 transactions from a total of 2406 transactions

TxHash Age From To Value [TxFee]
0x3fa4207c6d8d99bdc86a09ec4555865fd81afadb9d4be0e72caf4b5dd515ad8a6 hrs 9 mins ago0x190b96db029288b27f86443570173779a26f5db5  IN   GU_ShinyLegendaryPackFour0 Ether0.000230842422
0x7e7476d7c56f9258a36457a0029489d1b8505a2069cbe66e79802a2afbcea0726 hrs 9 mins ago0xb091626ab63d41bf9d68713d1c21286c8c1095d9  IN   GU_ShinyLegendaryPackFour0 Ether0.0004805118
0xc0209ec9966a6e91fa69f6e50cad6649a77e9b797abc8e96e2672e732d3bedcb6 hrs 9 mins ago0x48c94e8f4c0f0a125bed72e292c8dc84673e4dfc  IN   GU_ShinyLegendaryPackFour1 Ether0.001164405
0x40d235a5997a1d5513b8daea466c21a7be14c36ac134fc9a0dedb997cb435aa31 day 4 hrs ago0x574e6dd6fa76acb4fab0fee2fa9899bfd411a9ae  IN   GU_ShinyLegendaryPackFour0 Ether0.00011499
0xe579573b8f13ff90a3a79434d988def0c58ae6c14b2677500638124841a9b0b61 day 4 hrs ago0x1ba94b4699898d02e6fd71b64502d8bb9681bdca  IN   GU_ShinyLegendaryPackFour0 Ether0.0001678854
0x77783cd597a348ea6ef21f055886e43fe6fadb2be8cf41ef5012f58e972530cf1 day 4 hrs ago0xa3cc505de91feb7e68ffd75dbf7c5534a7564913  IN   GU_ShinyLegendaryPackFour0 Ether0.0003438957
0x5f2c3ca04158b9caf1e22c315597642ced156b90835d7d55e5edf8b58d83c8931 day 4 hrs ago0x913bc920f1dc3691709441b7c08ea35df26c12ed  IN   GU_ShinyLegendaryPackFour6 Ether0.00104709
0xd894662c234147a58530b39516c1bb9d022e38d698cc4bf4118915bfda5c593f2 days 7 hrs ago0x4e93abcf7787d9007bc987e49ff9513c31541291  IN   GU_ShinyLegendaryPackFour0 Ether0.000235545
0x306cf0f00c1cbd977524601b46bdd72c3225cdaa4f744a254ea396f680d025652 days 7 hrs ago0x65f6d626f575571d193ab303ef0ec4c0dffcb2df  IN   GU_ShinyLegendaryPackFour1 Ether0.00104709
0x7407e6c61c546a3c51acc35a6c61d697b7d5bd902ae7aa4e69db52b028cc63313 days 4 hrs ago0x8ad5ee55a8425a8a4938106050636e0901df4321  IN   GU_ShinyLegendaryPackFour0 Ether0.001140204
0x6daec68ffa6cc2e4f8cf8f88e7f60f5524d4ecd5fe7cf2e51b5ba5061b19795f3 days 4 hrs ago0x513e23dfe3ceb1c129eda9a1bd30452adfb02a19  IN   GU_ShinyLegendaryPackFour0 Ether0.00011499
0x5db4ef1dced4fb0df591c31853bc08e2b90ea08b0859c096e2cd6e7c1a8a19533 days 4 hrs ago0xeb38a654c85464c6a9d8c69abb628676658e4676  IN   GU_ShinyLegendaryPackFour0 Ether0.000518199
0xbabc1c6398fbd1dc606d290927cfba152255020986e887c95a526deab969c2b93 days 4 hrs ago0x8ad5ee55a8425a8a4938106050636e0901df4321  IN   GU_ShinyLegendaryPackFour1 Ether0.00104709
0x819eb370e6cc42498b2e10ce0e45e468a049cb6dd81f1fec44002a8f828328083 days 12 hrs ago0xdef858b4d0dbe8bd5156e9154399aec4c92c3c84  IN   GU_ShinyLegendaryPackFour0 Ether0.00011499
0x456e61a03d5e451a3850c5f1142d3ed4c822f030e9b01f9433ca377e4727a4693 days 12 hrs ago0x8d834460fd589979c31c0c5df71bd7c94b969909  IN   GU_ShinyLegendaryPackFour0 Ether0.00011499
0x4448fab7a39dccd59d932141e23c4514640739906a83f5ed00e003d326962e3d3 days 12 hrs ago0x62cb5d92b491d4f921844e5d787041225b87876d  IN   GU_ShinyLegendaryPackFour0 Ether0.000275976
0x0c4cd5a3b419788898409fe6d195a66508b57f2b13988da690403327d88285f23 days 12 hrs ago0x8b5f5bae3ecb49a9b65f0f3d6e52cf9d98678bd4  IN   GU_ShinyLegendaryPackFour0 Ether0.000275976
0x77c5639d81deeac187dbc3dbf984d94cc4369280c3ad6436b9c5f278b1513d9f3 days 12 hrs ago0x4b9490543843f804b08c77a380d1286c976868df  IN   GU_ShinyLegendaryPackFour0 Ether0.00011499
0xd966c44f7ff655cb4dab8aa14f05d97ebc48423da9481028716a9e25ea7ceb3d3 days 12 hrs ago0x5aa2a43308108f304053456efc7aef86452e5624  IN   GU_ShinyLegendaryPackFour0 Ether0.000565308
0x2fbee9b74aaaa4388fa43749c5612ac71cf0943e64f5d3c415d855ad234da2203 days 12 hrs ago0x7559e5668ae4c9fecd88694887b0c195d87ceed8  IN   GU_ShinyLegendaryPackFour1 Ether0.00104709
0xdd2c700ba8ce36fa77ce6f4965fed8855ed7e6594253c9f6ab765d1c0503ac5d4 days 1 hr ago0x6edee6f5e53f72b00f928e20f8711f51ec64e074  IN   GU_ShinyLegendaryPackFour0 Ether0.000091992
0x0eda989886253f4fbd5ef08a6e06dca16ed161605117fbec783430d3da7aecce4 days 1 hr ago0x9232d01f1d8ec2a654e2171056afa2576e0508ea  IN   GU_ShinyLegendaryPackFour0 Ether0.000091992
0xd36e2bd086ecf3ad69a5d9c8704889e290dae9b95a4c7e811db602625c2030a34 days 1 hr ago0xb091626ab63d41bf9d68713d1c21286c8c1095d9  IN   GU_ShinyLegendaryPackFour0 Ether0.000137988
0x58e3afe4fcba61d976f57adbedf1c2820ea74400b57c7f0bb73f3113739598d24 days 1 hr ago0x582fe7be370a94b4b3bbeb198340f7bc48c30dc4  IN   GU_ShinyLegendaryPackFour0 Ether0.000282654
0x5ffcccfa287b9defc1e862578751f925b05d5651a023739fc3684f891050d4f64 days 1 hr ago0x492842125e4c3a7d10cda0e0291ea22788e4ad60  IN   GU_ShinyLegendaryPackFour1 Ether0.00047595
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0xc0209ec9966a6e91fa69f6e50cad6649a77e9b797abc8e96e2672e732d3bedcb71147856 hrs 9 mins ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6890.9 Ether
0xc0209ec9966a6e91fa69f6e50cad6649a77e9b797abc8e96e2672e732d3bedcb71147856 hrs 9 mins ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x8f99230434e14bd2d3c7e63c0e26f96f3dd45e380.1 Ether
0x5f2c3ca04158b9caf1e22c315597642ced156b90835d7d55e5edf8b58d83c89371101021 day 4 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6896 Ether
0x306cf0f00c1cbd977524601b46bdd72c3225cdaa4f744a254ea396f680d0256571043242 days 7 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0xbabc1c6398fbd1dc606d290927cfba152255020986e887c95a526deab969c2b970998613 days 4 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x2fbee9b74aaaa4388fa43749c5612ac71cf0943e64f5d3c415d855ad234da22070980443 days 12 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x5ffcccfa287b9defc1e862578751f925b05d5651a023739fc3684f891050d4f670949764 days 1 hr ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x68aa108179cd3e8b2edf39274237c45ce1303f8af2af7d984567124a8c9f94a170931734 days 9 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6890.9 Ether
0x68aa108179cd3e8b2edf39274237c45ce1303f8af2af7d984567124a8c9f94a170931734 days 9 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x84b753010657cadb285419583c9121d92a23d4750.1 Ether
0xa89979b4896947dd19c6aad7dabdb615552ece820345c1a03af7562de3864aab70843165 days 22 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x5a87b66f58f581c9d6bf241dbe27f9343ffcc0cfbdd1171b1e33cc4bdc00da3a70829816 days 4 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x6caebf723337d1e839a3d79dc8d39d7428617b5b048f473aedbc5d78bfffb0f570787296 days 22 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x7c048634699a742fd8911ea7dce86f4c71b1d3ee02eca26de15862e3b3e3c5e570786236 days 23 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6890.9 Ether
0x7c048634699a742fd8911ea7dce86f4c71b1d3ee02eca26de15862e3b3e3c5e570786236 days 23 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0xb9e29984fe50602e7a619662ebed4f90d93824c70.1 Ether
0xd9f1aa57c5f7d38975bcdae76a9a6d2f210461ffcc95cef43684df48e7e6f0ac70718158 days 4 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x1e6e17a15a71b73f29aeb854a8c7871d149b4bcd88aae6a8b66af501e614985770654369 days 7 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x18f3eb61fd4f1e743d5b148bda09506d4e5352a4b44d00611ad4ca9b9ee517f770628979 days 18 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x20c1f0588b98befbe2084da072b4bfe596f3e26b8d49cd2dce1a1d420f20405d705772410 days 16 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6890.9 Ether
0x20c1f0588b98befbe2084da072b4bfe596f3e26b8d49cd2dce1a1d420f20405d705772410 days 16 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x56171897efcbd89e83990bc54a62244ea21f92440.1 Ether
0xa0c03413d7ca3e09dc9a2963de1bc75307c852ad35954081e45f9aa2999ae6cd705597111 days 20 mins ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x233a9d28059df6dae1617c945848fb970afa70f031d564e79a4f4e8ae32402d5705510511 days 4 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x20acfcd374ae4fbaf8547a1e0c19b7654e400192c8fe7968dfb397afda1f3ef2705349311 days 11 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x9021ee90df6246f84d23c7472888d5f16e27c553a5807782771d78c89c32eeec705266811 days 14 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x3df5d6109f2dc235ddffa388171343399b956dc093d147164d3a449316060fa0705240711 days 15 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x3c84fc2daa600b3ce00fcd9be1cfddd34c1f086e8738d137936c9a54383f4a31705225111 days 16 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: ShinyLegendaryPackFour
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.24;

contract Ownable {

    address public owner;

    constructor() public {
        owner = msg.sender;
    }

    function setOwner(address _owner) public onlyOwner {
        owner = _owner;
    }

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

}

contract Vault is Ownable { 

    function () public payable {

    }

    function getBalance() public view returns (uint) {
        return address(this).balance;
    }

    function withdraw(uint amount) public onlyOwner {
        require(address(this).balance >= amount);
        owner.transfer(amount);
    }

    function withdrawAll() public onlyOwner {
        withdraw(address(this).balance);
    }
}

contract ERC20 {

    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    
    function allowance(address owner, address spender) public view returns (uint256);
    
    function transferFrom(address from, address to, uint256 value) public returns (bool);

    function approve(address spender, uint256 value) public returns (bool);

    function totalSupply() public view returns (uint256);

    function balanceOf(address who) public view returns (uint256);
    
    function transfer(address to, uint256 value) public returns (bool);
    
}

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    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 a / b;
  }

  /**
  * @dev Subtracts 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 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

contract TournamentPass is ERC20, Ownable {

    using SafeMath for uint256;

    Vault vault;

    constructor(Vault _vault) public {
        vault = _vault;
    }

    mapping(address => uint256) balances;
    mapping (address => mapping (address => uint256)) internal allowed;
    address[] public minters;
    uint256 supply;
    uint mintLimit = 20000;
    
    function name() public view returns (string){
        return "GU Tournament Passes";
    }

    function symbol() public view returns (string) {
        return "PASS";
    }

    function addMinter(address minter) public onlyOwner {
        minters.push(minter);
    }

    function totalSupply() public view returns (uint256) {
        return supply;
    }

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(_value <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

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

    function isMinter(address test) internal view returns (bool) {
        for (uint i = 0; i < minters.length; i++) {
            if (minters[i] == test) {
                return true;
            }
        }
        return false;
    }

    function mint(address to, uint amount) public returns (bool) {
        require(isMinter(msg.sender));
        if (amount.add(supply) > mintLimit) {
            return false;
        } 
        supply = supply.add(amount);
        balances[to] = balances[to].add(amount);
        emit Transfer(address(0), to, amount);
        return true;
    }

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

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(_value <= balances[_from]);
        require(_value <= allowed[_from][msg.sender]);

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        emit Transfer(_from, _to, _value);
        return true;
    }

    function increaseApproval(address spender, uint256 addedValue) public returns (bool) {
        allowed[msg.sender][spender] = allowed[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
        return true;
    }

    function decreaseApproval(address spender, uint256 subtractedValue) public returns (bool) {
        uint256 oldValue = allowed[msg.sender][spender];
        if (subtractedValue > oldValue) {
            allowed[msg.sender][spender] = 0;
        } else {
            allowed[msg.sender][spender] = oldValue.sub(subtractedValue);
        }
        emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
        return true;
    }

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

    uint public price = 250 finney;

    function purchase(uint amount) public payable {
        
        require(msg.value >= price.mul(amount));
        require(supply.add(amount) <= mintLimit);

        supply = supply.add(amount);
        balances[msg.sender] = balances[msg.sender].add(amount);
        emit Transfer(address(0), msg.sender, amount);

        address(vault).transfer(msg.value);
    }

}

contract CappedVault is Vault { 

    uint public limit;
    uint withdrawn = 0;

    constructor() public {
        limit = 33333 ether;
    }

    function () public payable {
        require(total() + msg.value <= limit);
    }

    function total() public view returns(uint) {
        return getBalance() + withdrawn;
    }

    function withdraw(uint amount) public onlyOwner {
        require(address(this).balance >= amount);
        owner.transfer(amount);
        withdrawn += amount;
    }

}


contract PreviousInterface {

    function ownerOf(uint id) public view returns (address);

    function getCard(uint id) public view returns (uint16, uint16);

    function totalSupply() public view returns (uint);

    function burnCount() public view returns (uint);

}

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;
        emit Pause();
    }

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

contract Governable {

    event Pause();
    event Unpause();

    address public governor;
    bool public paused = false;

    constructor() public {
        governor = msg.sender;
    }

    function setGovernor(address _gov) public onlyGovernor {
        governor = _gov;
    }

    modifier onlyGovernor {
        require(msg.sender == governor);
        _;
    }

    /**
    * @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() onlyGovernor whenNotPaused public {
        paused = true;
        emit Pause();
    }

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

}

contract CardBase is Governable {


    struct Card {
        uint16 proto;
        uint16 purity;
    }

    function getCard(uint id) public view returns (uint16 proto, uint16 purity) {
        Card memory card = cards[id];
        return (card.proto, card.purity);
    }

    function getShine(uint16 purity) public pure returns (uint8) {
        return uint8(purity / 1000);
    }

    Card[] public cards;
    
}

contract CardProto is CardBase {

    event NewProtoCard(
        uint16 id, uint8 season, uint8 god, 
        Rarity rarity, uint8 mana, uint8 attack, 
        uint8 health, uint8 cardType, uint8 tribe, bool packable
    );

    struct Limit {
        uint64 limit;
        bool exists;
    }

    // limits for mythic cards
    mapping(uint16 => Limit) public limits;

    // can only set limits once
    function setLimit(uint16 id, uint64 limit) public onlyGovernor {
        Limit memory l = limits[id];
        require(!l.exists);
        limits[id] = Limit({
            limit: limit,
            exists: true
        });
    }

    function getLimit(uint16 id) public view returns (uint64 limit, bool set) {
        Limit memory l = limits[id];
        return (l.limit, l.exists);
    }

    // could make these arrays to save gas
    // not really necessary - will be update a very limited no of times
    mapping(uint8 => bool) public seasonTradable;
    mapping(uint8 => bool) public seasonTradabilityLocked;
    uint8 public currentSeason;

    function makeTradable(uint8 season) public onlyGovernor {
        seasonTradable[season] = true;
    }

    function makeUntradable(uint8 season) public onlyGovernor {
        require(!seasonTradabilityLocked[season]);
        seasonTradable[season] = false;
    }

    function makePermanantlyTradable(uint8 season) public onlyGovernor {
        require(seasonTradable[season]);
        seasonTradabilityLocked[season] = true;
    }

    function isTradable(uint16 proto) public view returns (bool) {
        return seasonTradable[protos[proto].season];
    }

    function nextSeason() public onlyGovernor {
        //Seasons shouldn't go to 0 if there is more than the uint8 should hold, the governor should know this ¯\_(ツ)_/¯ -M
        require(currentSeason <= 255); 

        currentSeason++;
        mythic.length = 0;
        legendary.length = 0;
        epic.length = 0;
        rare.length = 0;
        common.length = 0;
    }

    enum Rarity {
        Common,
        Rare,
        Epic,
        Legendary, 
        Mythic
    }

    uint8 constant SPELL = 1;
    uint8 constant MINION = 2;
    uint8 constant WEAPON = 3;
    uint8 constant HERO = 4;

    struct ProtoCard {
        bool exists;
        uint8 god;
        uint8 season;
        uint8 cardType;
        Rarity rarity;
        uint8 mana;
        uint8 attack;
        uint8 health;
        uint8 tribe;
    }

    // there is a particular design decision driving this:
    // need to be able to iterate over mythics only for card generation
    // don't store 5 different arrays: have to use 2 ids
    // better to bear this cost (2 bytes per proto card)
    // rather than 1 byte per instance

    uint16 public protoCount;
    
    mapping(uint16 => ProtoCard) protos;

    uint16[] public mythic;
    uint16[] public legendary;
    uint16[] public epic;
    uint16[] public rare;
    uint16[] public common;

    function addProtos(
        uint16[] externalIDs, uint8[] gods, Rarity[] rarities, uint8[] manas, uint8[] attacks, 
        uint8[] healths, uint8[] cardTypes, uint8[] tribes, bool[] packable
    ) public onlyGovernor returns(uint16) {

        for (uint i = 0; i < externalIDs.length; i++) {

            ProtoCard memory card = ProtoCard({
                exists: true,
                god: gods[i],
                season: currentSeason,
                cardType: cardTypes[i],
                rarity: rarities[i],
                mana: manas[i],
                attack: attacks[i],
                health: healths[i],
                tribe: tribes[i]
            });

            _addProto(externalIDs[i], card, packable[i]);
        }
        
    }

    function addProto(
        uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 cardType, uint8 tribe, bool packable
    ) public onlyGovernor returns(uint16) {
        ProtoCard memory card = ProtoCard({
            exists: true,
            god: god,
            season: currentSeason,
            cardType: cardType,
            rarity: rarity,
            mana: mana,
            attack: attack,
            health: health,
            tribe: tribe
        });

        _addProto(externalID, card, packable);
    }

    function addWeapon(
        uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 durability, bool packable
    ) public onlyGovernor returns(uint16) {

        ProtoCard memory card = ProtoCard({
            exists: true,
            god: god,
            season: currentSeason,
            cardType: WEAPON,
            rarity: rarity,
            mana: mana,
            attack: attack,
            health: durability,
            tribe: 0
        });

        _addProto(externalID, card, packable);
    }

    function addSpell(uint16 externalID, uint8 god, Rarity rarity, uint8 mana, bool packable) public onlyGovernor returns(uint16) {

        ProtoCard memory card = ProtoCard({
            exists: true,
            god: god,
            season: currentSeason,
            cardType: SPELL,
            rarity: rarity,
            mana: mana,
            attack: 0,
            health: 0,
            tribe: 0
        });

        _addProto(externalID, card, packable);
    }

    function addMinion(
        uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 tribe, bool packable
    ) public onlyGovernor returns(uint16) {

        ProtoCard memory card = ProtoCard({
            exists: true,
            god: god,
            season: currentSeason,
            cardType: MINION,
            rarity: rarity,
            mana: mana,
            attack: attack,
            health: health,
            tribe: tribe
        });

        _addProto(externalID, card, packable);
    }

    function _addProto(uint16 externalID, ProtoCard memory card, bool packable) internal {

        require(!protos[externalID].exists);

        card.exists = true;

        protos[externalID] = card;

        protoCount++;

        emit NewProtoCard(
            externalID, currentSeason, card.god, 
            card.rarity, card.mana, card.attack, 
            card.health, card.cardType, card.tribe, packable
        );

        if (packable) {
            Rarity rarity = card.rarity;
            if (rarity == Rarity.Common) {
                common.push(externalID);
            } else if (rarity == Rarity.Rare) {
                rare.push(externalID);
            } else if (rarity == Rarity.Epic) {
                epic.push(externalID);
            } else if (rarity == Rarity.Legendary) {
                legendary.push(externalID);
            } else if (rarity == Rarity.Mythic) {
                mythic.push(externalID);
            } else {
                require(false);
            }
        }
    }

    function getProto(uint16 id) public view returns(
        bool exists, uint8 god, uint8 season, uint8 cardType, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 tribe
    ) {
        ProtoCard memory proto = protos[id];
        return (
            proto.exists,
            proto.god,
            proto.season,
            proto.cardType,
            proto.rarity,
            proto.mana,
            proto.attack,
            proto.health,
            proto.tribe
        );
    }

    function getRandomCard(Rarity rarity, uint16 random) public view returns (uint16) {
        // modulo bias is fine - creates rarity tiers etc
        // will obviously revert is there are no cards of that type: this is expected - should never happen
        if (rarity == Rarity.Common) {
            return common[random % common.length];
        } else if (rarity == Rarity.Rare) {
            return rare[random % rare.length];
        } else if (rarity == Rarity.Epic) {
            return epic[random % epic.length];
        } else if (rarity == Rarity.Legendary) {
            return legendary[random % legendary.length];
        } else if (rarity == Rarity.Mythic) {
            // make sure a mythic is available
            uint16 id;
            uint64 limit;
            bool set;
            for (uint i = 0; i < mythic.length; i++) {
                id = mythic[(random + i) % mythic.length];
                (limit, set) = getLimit(id);
                if (set && limit > 0){
                    return id;
                }
            }
            // if not, they get a legendary :(
            return legendary[random % legendary.length];
        }
        require(false);
        return 0;
    }

    // can never adjust tradable cards
    // each season gets a 'balancing beta'
    // totally immutable: season, rarity
    function replaceProto(
        uint16 index, uint8 god, uint8 cardType, uint8 mana, uint8 attack, uint8 health, uint8 tribe
    ) public onlyGovernor {
        ProtoCard memory pc = protos[index];
        require(!seasonTradable[pc.season]);
        protos[index] = ProtoCard({
            exists: true,
            god: god,
            season: pc.season,
            cardType: cardType,
            rarity: pc.rarity,
            mana: mana,
            attack: attack,
            health: health,
            tribe: tribe
        });
    }

}

contract MigrationInterface {

    function createCard(address user, uint16 proto, uint16 purity) public returns (uint);

    function getRandomCard(CardProto.Rarity rarity, uint16 random) public view returns (uint16);

    function migrate(uint id) public;

}
contract CardPackFour {

    MigrationInterface public migration;
    uint public creationBlock;

    constructor(MigrationInterface _core) public payable {
        migration = _core;
        creationBlock = 5939061 + 2000; // set to creation block of first contracts + 8 hours for down time
    }

    event Referral(address indexed referrer, uint value, address purchaser);

    /**
    * purchase 'count' of this type of pack
    */
    function purchase(uint16 packCount, address referrer) public payable;

    // store purity and shine as one number to save users gas
    function _getPurity(uint16 randOne, uint16 randTwo) internal pure returns (uint16) {
        if (randOne >= 998) {
            return 3000 + randTwo;
        } else if (randOne >= 988) {
            return 2000 + randTwo;
        } else if (randOne >= 938) {
            return 1000 + randTwo;
        } else {
            return randTwo;
        }
    }

}

contract FirstPheonix is Pausable {

    MigrationInterface core;

    constructor(MigrationInterface _core) public {
        core = _core;
    }

    address[] public approved;

    uint16 PHEONIX_PROTO = 380;

    mapping(address => bool) public claimed;

    function approvePack(address toApprove) public onlyOwner {
        approved.push(toApprove);
    }

    function isApproved(address test) public view returns (bool) {
        for (uint i = 0; i < approved.length; i++) {
            if (approved[i] == test) {
                return true;
            }
        }
        return false;
    }

    // pause once cards become tradable
    function claimPheonix(address user) public returns (bool){

        require(isApproved(msg.sender));

        if (claimed[user] || paused){
            return false;
        }

        claimed[user] = true;

        core.createCard(user, PHEONIX_PROTO, 0);

        return true;
    }

}

contract PresalePackFour is CardPackFour, Pausable {

    CappedVault public vault;

    Purchase[] public purchases;

    function getPurchaseCount() public view returns (uint) {
        return purchases.length;
    }

    struct Purchase {
        uint16 current;
        uint16 count;
        address user;
        uint randomness;
        uint64 commit;
    }

    event PacksPurchased(uint indexed id, address indexed user, uint16 count);
    event PackOpened(uint indexed id, uint16 startIndex, address indexed user, uint[] cardIDs);
    event RandomnessReceived(uint indexed id, address indexed user, uint16 count, uint randomness);
    event Recommit(uint indexed id);

    constructor(MigrationInterface _core, CappedVault _vault) public payable CardPackFour(_core) {
        vault = _vault;
    }

    function basePrice() public returns (uint);
    function getCardDetails(uint16 packIndex, uint8 cardIndex, uint result) public view returns (uint16 proto, uint16 purity);
    
    function packSize() public view returns (uint8) {
        return 5;
    }

    uint16 public perClaim = 15;

    function setPacksPerClaim(uint16 _perClaim) public onlyOwner {
        perClaim = _perClaim;
    }

    function packsPerClaim() public view returns (uint16) {
        return perClaim;
    }

    // start in bytes, length in bytes
    function extract(uint num, uint length, uint start) internal pure returns (uint) {
        return (((1 << (length * 8)) - 1) & (num >> ((start * 8) - 1)));
    }

    function purchaseFor(address user, uint16 packCount, address referrer) whenNotPaused public payable {
        _purchase(user, packCount, referrer);
    }

    function purchase(uint16 packCount, address referrer) whenNotPaused public payable {
        _purchase(msg.sender, packCount, referrer);
    }

    function _purchase(address user, uint16 packCount, address referrer) internal {
        require(packCount > 0);
        require(referrer != user);

        uint price = calculatePrice(basePrice(), packCount);

        require(msg.value >= price);

        Purchase memory p = Purchase({
            user: user,
            count: packCount,
            commit: uint64(block.number),
            randomness: 0,
            current: 0
        });

        uint id = purchases.push(p) - 1;

        emit PacksPurchased(id, user, packCount);

        if (referrer != address(0)) {
            uint commission = price / 10;
            referrer.transfer(commission);
            price -= commission;
            emit Referral(referrer, commission, user);
        }
        
        address(vault).transfer(price);
    }

    // can recommit
    // this gives you more chances
    // if no-one else sends the callback (should never happen)
    // still only get a random extra chance
    function recommit(uint id) public {

        Purchase storage p = purchases[id];

        require(p.randomness == 0);

        require(block.number >= p.commit + 256);

        p.commit = uint64(block.number);

        emit Recommit(id);
    }

    // can be called by anybody
    // can miners withhold blocks --> not really
    // giving up block reward for extra chance --> still really low
    function callback(uint id) public {

        Purchase storage p = purchases[id];

        require(p.randomness == 0);

        // must be within last 256 blocks, otherwise recommit
        require(block.number - 256 < p.commit);

        // can't callback on the original block
        require(uint64(block.number) != p.commit);

        bytes32 bhash = blockhash(p.commit);
        // will get the same on every block
        // only use properties which can't be altered by the user
        uint random = uint(keccak256(abi.encodePacked(bhash, p.user, address(this), p.count)));

        require(uint(bhash) != 0);

        p.randomness = random;

        emit RandomnessReceived(id, p.user, p.count, p.randomness);
    }

    function claim(uint id) public {
        
        Purchase storage p = purchases[id];

        require(canClaim);

        uint16 proto;
        uint16 purity;
        uint16 count = p.count;
        uint result = p.randomness;
        uint8 size = packSize();

        address user = p.user;
        uint16 current = p.current;

        require(result != 0); // have to wait for the callback
        // require(user == msg.sender); // not needed
        require(count > 0);

        uint[] memory ids = new uint[](size);

        uint16 end = current + packsPerClaim() > count ? count : current + packsPerClaim();

        require(end > current);

        for (uint16 i = current; i < end; i++) {
            for (uint8 j = 0; j < size; j++) {
                (proto, purity) = getCardDetails(i, j, result);
                ids[j] = migration.createCard(user, proto, purity);
            }
            emit PackOpened(id, (i * size), user, ids);
        }
        p.current += (end - current);
    }

    function predictPacks(uint id) external view returns (uint16[] protos, uint16[] purities) {

        Purchase memory p = purchases[id];

        uint16 proto;
        uint16 purity;
        uint16 count = p.count;
        uint result = p.randomness;
        uint8 size = packSize();

        purities = new uint16[](size * count);
        protos = new uint16[](size * count);

        for (uint16 i = 0; i < count; i++) {
            for (uint8 j = 0; j < size; j++) {
                (proto, purity) = getCardDetails(i, j, result);
                purities[(i * size) + j] = purity;
                protos[(i * size) + j] = proto;
            }
        }
        return (protos, purities);
    }

    function calculatePrice(uint base, uint16 packCount) public view returns (uint) {
        // roughly 6k blocks per day
        uint difference = block.number - creationBlock;
        uint numDays = difference / 6000;
        if (20 > numDays) {
            return (base - (((20 - numDays) * base) / 100)) * packCount;
        }
        return base * packCount;
    }

    function _getCommonPlusRarity(uint32 rand) internal pure returns (CardProto.Rarity) {
        if (rand == 999999) {
            return CardProto.Rarity.Mythic;
        } else if (rand >= 998345) {
            return CardProto.Rarity.Legendary;
        } else if (rand >= 986765) {
            return CardProto.Rarity.Epic;
        } else if (rand >= 924890) {
            return CardProto.Rarity.Rare;
        } else {
            return CardProto.Rarity.Common;
        }
    }

    function _getRarePlusRarity(uint32 rand) internal pure returns (CardProto.Rarity) {
        if (rand == 999999) {
            return CardProto.Rarity.Mythic;
        } else if (rand >= 981615) {
            return CardProto.Rarity.Legendary;
        } else if (rand >= 852940) {
            return CardProto.Rarity.Epic;
        } else {
            return CardProto.Rarity.Rare;
        } 
    }

    function _getEpicPlusRarity(uint32 rand) internal pure returns (CardProto.Rarity) {
        if (rand == 999999) {
            return CardProto.Rarity.Mythic;
        } else if (rand >= 981615) {
            return CardProto.Rarity.Legendary;
        } else {
            return CardProto.Rarity.Epic;
        }
    }

    function _getLegendaryPlusRarity(uint32 rand) internal pure returns (CardProto.Rarity) {
        if (rand == 999999) {
            return CardProto.Rarity.Mythic;
        } else {
            return CardProto.Rarity.Legendary;
        } 
    }

    bool public canClaim = true;

    function setCanClaim(bool claim) public onlyOwner {
        canClaim = claim;
    }

    function getComponents(
        uint16 i, uint8 j, uint rand
    ) internal returns (
        uint random, uint32 rarityRandom, uint16 purityOne, uint16 purityTwo, uint16 protoRandom
    ) {
        random = uint(keccak256(abi.encodePacked(i, rand, j)));
        rarityRandom = uint32(extract(random, 4, 10) % 1000000);
        purityOne = uint16(extract(random, 2, 4) % 1000);
        purityTwo = uint16(extract(random, 2, 6) % 1000);
        protoRandom = uint16(extract(random, 2, 8) % (2**16-1));
        return (random, rarityRandom, purityOne, purityTwo, protoRandom);
    }

    function withdraw() public onlyOwner {
        owner.transfer(address(this).balance);
    }

}

contract PackFourMultiplier is PresalePackFour {

    address[] public packs;
    uint16 public multiplier = 3;
    FirstPheonix pheonix;
    PreviousInterface old;

    uint16 public packLimit = 5;

    constructor(PreviousInterface _old, address[] _packs, MigrationInterface _core, CappedVault vault, FirstPheonix _pheonix) 
        public PresalePackFour(_core, vault) 
    {
        packs = _packs;
        pheonix = _pheonix;
        old = _old;
    }

    function getCardCount() internal view returns (uint) {
        return old.totalSupply() + old.burnCount();
    }

    function isPriorPack(address test) public view returns(bool) {
        for (uint i = 0; i < packs.length; i++) {
            if (packs[i] == test) {
                return true;
            }
        }
        return false;
    }

    event Status(uint before, uint aft);

    function claimMultiple(address pack, uint purchaseID) public returns (uint16, address) {

        require(isPriorPack(pack));

        uint length = getCardCount();

        PresalePackFour(pack).claim(purchaseID);

        uint lengthAfter = getCardCount();

        require(lengthAfter > length);

        uint16 cardDifference = uint16(lengthAfter - length);

        require(cardDifference % 5 == 0);

        uint16 packCount = cardDifference / 5;

        uint16 extra = packCount * multiplier;

        address lastCardOwner = old.ownerOf(lengthAfter - 1);

        Purchase memory p = Purchase({
            user: lastCardOwner,
            count: extra,
            commit: uint64(block.number),
            randomness: 0,
            current: 0
        });

        uint id = purchases.push(p) - 1;

        emit PacksPurchased(id, lastCardOwner, extra);

        // try to give them a first pheonix
        pheonix.claimPheonix(lastCardOwner);

        emit Status(length, lengthAfter);


        if (packCount <= packLimit) {
            for (uint i = 0; i < cardDifference; i++) {
                migration.migrate(lengthAfter - 1 - i);
            }
        }

        return (extra, lastCardOwner);
    }

    function setPackLimit(uint16 limit) public onlyOwner {
        packLimit = limit;
    }


}

contract ShinyLegendaryPackFour is PackFourMultiplier {
    
    function basePrice() public returns (uint) {
        return 1 ether;
    }

    TournamentPass public tournament;

    constructor(PreviousInterface _old, address[] _packs, MigrationInterface _core, CappedVault vault, TournamentPass _tournament, FirstPheonix _pheonix) 
        public PackFourMultiplier(_old, _packs, _core, vault, _pheonix) {
        
        tournament = _tournament;
    }

    function purchase(uint16 packCount, address referrer) public payable {
        super.purchase(packCount, referrer);
        tournament.mint(msg.sender, packCount);
    }

    function claimMultiple(address pack, uint purchaseID) public returns (uint16, address) {
        uint16 extra;
        address user;
        (extra, user) = super.claimMultiple(pack, purchaseID);
        tournament.mint(user, extra);
    }

    function getCardDetails(uint16 packIndex, uint8 cardIndex, uint result) public view returns (uint16 proto, uint16 purity) {
        uint random;
        uint32 rarityRandom;
        uint16 protoRandom;
        uint16 purityOne;
        uint16 purityTwo;
        CardProto.Rarity rarity;

        (random, rarityRandom, purityOne, purityTwo, protoRandom) = getComponents(packIndex, cardIndex, result);

        if (cardIndex == 4) {
            rarity = _getLegendaryPlusRarity(rarityRandom);
            purity = _getShinyPurity(purityOne, purityTwo);
        } else if (cardIndex == 3) {
            rarity = _getRarePlusRarity(rarityRandom);
            purity = _getPurity(purityOne, purityTwo);
        } else {
            rarity = _getCommonPlusRarity(rarityRandom);
            purity = _getPurity(purityOne, purityTwo);
        }
    
        proto = migration.getRandomCard(rarity, protoRandom);

        return (proto, purity);
    } 

    function _getShinyPurity(uint16 randOne, uint16 randTwo) public pure returns (uint16) {
        if (randOne >= 998) {
            return 3000 + randTwo;
        } else if (randOne >= 748) {
            return 2000 + randTwo;
        } else {
            return 1000 + randTwo;
        }
    }
    
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"packSize","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"migration","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"multiplier","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tournament","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"packCount","type":"uint16"},{"name":"referrer","type":"address"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"recommit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"perClaim","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"pack","type":"address"},{"name":"purchaseID","type":"uint256"}],"name":"claimMultiple","outputs":[{"name":"","type":"uint16"},{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"canClaim","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"purchases","outputs":[{"name":"current","type":"uint16"},{"name":"count","type":"uint16"},{"name":"user","type":"address"},{"name":"randomness","type":"uint256"},{"name":"commit","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"packsPerClaim","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_perClaim","type":"uint16"}],"name":"setPacksPerClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"packCount","type":"uint16"},{"name":"referrer","type":"address"}],"name":"purchaseFor","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"packs","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"test","type":"address"}],"name":"isPriorPack","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPurchaseCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"packIndex","type":"uint16"},{"name":"cardIndex","type":"uint8"},{"name":"result","type":"uint256"}],"name":"getCardDetails","outputs":[{"name":"proto","type":"uint16"},{"name":"purity","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"claim","type":"bool"}],"name":"setCanClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"basePrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"predictPacks","outputs":[{"name":"protos","type":"uint16[]"},{"name":"purities","type":"uint16[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"limit","type":"uint16"}],"name":"setPackLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"base","type":"uint256"},{"name":"packCount","type":"uint16"}],"name":"calculatePrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"randOne","type":"uint16"},{"name":"randTwo","type":"uint16"}],"name":"_getShinyPurity","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"packLimit","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_old","type":"address"},{"name":"_packs","type":"address[]"},{"name":"_core","type":"address"},{"name":"vault","type":"address"},{"name":"_tournament","type":"address"},{"name":"_pheonix","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"before","type":"uint256"},{"indexed":false,"name":"aft","type":"uint256"}],"name":"Status","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"count","type":"uint16"}],"name":"PacksPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"startIndex","type":"uint16"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"cardIDs","type":"uint256[]"}],"name":"PackOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"count","type":"uint16"},{"indexed":false,"name":"randomness","type":"uint256"}],"name":"RandomnessReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"}],"name":"Recommit","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"referrer","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"purchaser","type":"address"}],"name":"Referral","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526002805460a060020a60ff02191690556005805462ff00001961ffff19918216600f17166201000017909155600780549091166003179055600880547405000000000000000000000000000000000000000060a060020a61ffff02199091161790553480156200007357600080fd5b506040516200225f3803806200225f8339810160409081528151602080840151928401516060850151608086015160a087015160008054600160a060020a03808716600160a060020a031992831617909255625aa74560015560028054821633179055600380549286169290911691909117905595909601805194969095929491939092918791879187918791869162000113916006918701906200016f565b50600780546201000060b060020a03191662010000600160a060020a039384160217905560088054600160a060020a03199081169683169690961790556009805490951696169590951790925550620002039650505050505050565b828054828255906000526020600020908101928215620001c7579160200282015b82811115620001c75782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000190565b50620001d5929150620001d9565b5090565b6200020091905b80821115620001d5578054600160a060020a0319168155600101620001e0565b90565b61204c80620002136000396000f3006080604052600436106101925763ffffffff60e060020a60003504166306a628d4811461019757806313af4035146101c25780631705a3bd146101e557806317634514146102165780631b3ed7221461023d5780631e0197e214610269578063379607f51461027e578063396c8228146102965780633ccfd60b146102b15780633f4ba83a146102c657806345d63b66146102db5780635c975abb146102f35780635f9602e81461031c5780636bc3e4a8146103315780636dc7a6271461037b5780638392fe31146103905780638456cb59146103ec5780638be4339b146104015780638da5cb5b146104165780639a1f6a0f1461042b578063b01d5b6314610447578063b84c139214610469578063bd6cac4f14610481578063becd283f146104a2578063c2f0bb29146104b7578063c503101e146104fd578063c7876ea414610517578063ca2bf0471461052c578063d42a5011146105dd578063e3f7faaf146105f9578063e87aa76914610618578063eb1098b81461063a578063fbfa77cf1461064f578063ff585caf14610664575b600080fd5b3480156101a357600080fd5b506101ac61067c565b6040805160ff9092168252519081900360200190f35b3480156101ce57600080fd5b506101e3600160a060020a0360043516610681565b005b3480156101f157600080fd5b506101fa6106c7565b60408051600160a060020a039092168252519081900360200190f35b34801561022257600080fd5b5061022b6106d6565b60408051918252519081900360200190f35b34801561024957600080fd5b506102526106dc565b6040805161ffff9092168252519081900360200190f35b34801561027557600080fd5b506101fa6106e6565b34801561028a57600080fd5b506101e36004356106f5565b6101e361ffff60043516600160a060020a03602435166109e7565b3480156102bd57600080fd5b506101e3610a91565b3480156102d257600080fd5b506101e3610ae5565b3480156102e757600080fd5b506101e3600435610b5d565b3480156102ff57600080fd5b50610308610c01565b604080519115158252519081900360200190f35b34801561032857600080fd5b50610252610c11565b34801561033d57600080fd5b50610355600160a060020a0360043516602435610c1b565b6040805161ffff9093168352600160a060020a0390911660208301528051918290030190f35b34801561038757600080fd5b50610308610cd9565b34801561039c57600080fd5b506103a8600435610ce8565b6040805161ffff9687168152949095166020850152600160a060020a0390921683850152606083015267ffffffffffffffff16608082015290519081900360a00190f35b3480156103f857600080fd5b506101e3610d44565b34801561040d57600080fd5b50610252610dc1565b34801561042257600080fd5b506101fa610dcb565b34801561043757600080fd5b506101e361ffff60043516610dda565b6101e3600160a060020a0360043581169061ffff602435169060443516610e09565b34801561047557600080fd5b506101fa600435610e30565b34801561048d57600080fd5b50610308600160a060020a0360043516610e58565b3480156104ae57600080fd5b5061022b610eb6565b3480156104c357600080fd5b506104dc61ffff6004351660ff60243516604435610ebc565b6040805161ffff938416815291909216602082015281519081900390910190f35b34801561050957600080fd5b506101e36004351515611004565b34801561052357600080fd5b5061022b611037565b34801561053857600080fd5b50610544600435611043565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610588578181015183820152602001610570565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c75781810151838201526020016105af565b5050505090500194505050505060405180910390f35b3480156105e957600080fd5b506101e361ffff60043516611208565b34801561060557600080fd5b5061022b60043561ffff60243516611252565b34801561062457600080fd5b5061025261ffff60043581169060243516611293565b34801561064657600080fd5b506102526112d2565b34801561065b57600080fd5b506101fa6112e3565b34801561067057600080fd5b506101e36004356112f2565b600590565b600254600160a060020a0316331461069857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60015481565b60075461ffff1681565b600954600160a060020a031681565b6000806000806000806000806060600080600060048d81548110151561071757fe5b90600052602060002090600302019b50600560029054906101000a900460ff16151561074257600080fd5b8b5460018d01546201000090910461ffff169950975061076061067c565b8c54909750600160a060020a03640100000000820416965061ffff16945087151561078a57600080fd5b600061ffff8a161161079b57600080fd5b8660ff166040519080825280602002602001820160405280156107c8578160200160208202803883390190505b5093508861ffff166107d8610dc1565b860161ffff16116107f2576107eb610dc1565b85016107f4565b885b925061ffff8086169084161161080957600080fd5b8491505b8261ffff168261ffff1610156109c0575060005b8660ff168160ff1610156109205761083a82828a610ebc565b809b50819c5050506000809054906101000a9004600160a060020a0316600160a060020a031663fb36eba1878d8d6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018361ffff1661ffff1681526020018261ffff1661ffff1681526020019350505050602060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b505050506040513d60208110156108fb57600080fd5b50518451859060ff841690811061090e57fe5b60209081029091010152600101610821565b85600160a060020a03168d7f69ac64af86d3ef40c9def928534f6a6a9e12d85ec3af2948bd66b802afcc10468960ff16850287604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109a1578181015183820152602001610989565b50505050905001935050505060405180910390a360019091019061080d565b5050895461ffff1981169390910361ffff9182160116919091179097555050505050505050565b6109f182826114c7565b600954604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015261ffff851660248201529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b505050506040513d6020811015610a8b57600080fd5b50505050565b600254600160a060020a03163314610aa857600080fd5b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610ae2573d6000803e3d6000fd5b50565b600254600160a060020a03163314610afc57600080fd5b60025460a060020a900460ff161515610b1457600080fd5b6002805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000600482815481101515610b6e57fe5b9060005260206000209060030201905080600101546000141515610b9157600080fd5b600281015467ffffffffffffffff9081166101000116431015610bb357600080fd5b60028101805467ffffffffffffffff19164367ffffffffffffffff1617905560405182907f29ef13d2827ff333d3fde4646988c3a7db16de1210f0c0b613fd0ac9773e4e7b90600090a25050565b60025460a060020a900460ff1681565b60055461ffff1681565b600080600080610c2b86866114ed565b600954604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03808516600483015261ffff86166024830152915194965092945016916340c10f19916044808201926020929091908290030181600087803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b505050506040513d6020811015610ccb57600080fd5b509396929550919350505050565b60055462010000900460ff1681565b6004805482908110610cf657fe5b600091825260209091206003909102018054600182015460029092015461ffff80831694506201000083041692640100000000909204600160a060020a0316919067ffffffffffffffff1685565b600254600160a060020a03163314610d5b57600080fd5b60025460a060020a900460ff1615610d7257600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60055461ffff1690565b600254600160a060020a031681565b600254600160a060020a03163314610df157600080fd5b6005805461ffff191661ffff92909216919091179055565b60025460a060020a900460ff1615610e2057600080fd5b610e2b838383611974565b505050565b6006805482908110610e3e57fe5b600091825260209091200154600160a060020a0316905081565b6000805b600654811015610eab5782600160a060020a0316600682815481101515610e7f57fe5b600091825260209091200154600160a060020a03161415610ea35760019150610eb0565b600101610e5c565b600091505b50919050565b60045490565b600080600080600080600080610ed38b8b8b611c1b565b9399509197509195509093509150600460ff8b161415610f0957610ef685611d82565b9050610f028383611293565b9650610f42565b8960ff1660031415610f2a57610f1e85611da6565b9050610f028383611df9565b610f3385611e4a565b9050610f3f8383611df9565b96505b6000546040517fcaa19168000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063caa19168908390879060049081019081908490811115610f9457fe5b60ff1681526020018261ffff1661ffff16815260200192505050602060405180830381600087803b158015610fc857600080fd5b505af1158015610fdc573d6000803e3d6000fd5b505050506040513d6020811015610ff257600080fd5b50519750505050505050935093915050565b600254600160a060020a0316331461101b57600080fd5b60058054911515620100000262ff000019909216919091179055565b670de0b6b3a764000090565b60608061104e611ff2565b600080600080600080600060048b81548110151561106857fe5b60009182526020918290206040805160a0810182526003909302909101805461ffff808216855262010000820416948401859052600160a060020a03640100000000909104169183019190915260018101546060830181905260029091015467ffffffffffffffff16608083015290995090955093506110e661067c565b9250848360ff160261ffff1660405190808252806020026020018201604052801561111b578160200160208202803883390190505b509850848360ff160261ffff16604051908082528060200260200182016040528015611151578160200160208202803883390190505b509950600091505b8461ffff168261ffff1610156111fb575060005b8260ff168160ff1610156111f057611186828286610ebc565b8a51919850965086908a9061ffff60ff878116870290861601169081106111a957fe5b61ffff928316602091820290920101528a5188918c9160ff8781168702908616019091169081106111d657fe5b61ffff90921660209283029091019091015260010161116d565b600190910190611159565b5050505050505050915091565b600254600160a060020a0316331461121f57600080fd5b6008805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b6001546000904303611770810460148110156112815761ffff841660646014839003870204860302925061128b565b8361ffff16850292505b505092915050565b60006103e661ffff8416106112ad5750610bb881016112cc565b6102ec61ffff8416106112c557506107d081016112cc565b506103e881015b92915050565b60085460a060020a900461ffff1681565b600354600160a060020a031681565b600080600060048481548110151561130657fe5b906000526020600020906003020192508260010154600014151561132957600080fd5b600283015467ffffffffffffffff1660ff1943011061134757600080fd5b60028301544367ffffffffffffffff9081169116141561136657600080fd5b600283015483546040805167ffffffffffffffff9093164060208085018290526401000000008404600160a060020a03166c0100000000000000000000000090810286850152300260548601526201000090930461ffff167e010000000000000000000000000000000000000000000000000000000000000260688501528151808503604a018152606a90940191829052835190955090918291908401908083835b602083106114275780518252601f199092019160209182019101611408565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912093505050821515905061146257600080fd5b6001830181905582546040805162010000830461ffff168152602081018490528151640100000000909304600160a060020a03169287927fedb5ce4012b6e9c5904afa2ffad9811d5c2e91e6bca8914cf7e3ffc28e630c57928290030190a350505050565b60025460a060020a900460ff16156114de57600080fd5b6114e9338383611974565b5050565b600080600080600080600080611501611ff2565b60008061150d8d610e58565b151561151857600080fd5b611520611eb5565b98508c600160a060020a031663379607f58d6040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b15801561156b57600080fd5b505af115801561157f573d6000803e3d6000fd5b5050505061158b611eb5565b975088881161159957600080fd5b8888039650600561ffff88160661ffff16156115b457600080fd5b600561ffff8816600754600854604080517f6352211e0000000000000000000000000000000000000000000000000000000081526000198e016004820152905194909304995061ffff90911689029750600160a060020a031691636352211e916024808201926020929091908290030181600087803b15801561163657600080fd5b505af115801561164a573d6000803e3d6000fd5b505050506040513d602081101561166057600080fd5b50516040805160a081018252600080825261ffff8981166020848101828152600160a060020a038089168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519599509297509095509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd928290030190a3600754604080517ff88218e0000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151620100009093049091169163f88218e0916024808201926020929091908290030181600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b505050506040513d602081101561187257600080fd5b5050604080518a8152602081018a905281517f31a1adb447f9b6b89f24bf104f0b7a06975ad9f35670dbfaf7ce29190ec54762929181900390910190a160085461ffff60a060020a909104811690871611611961575060005b8661ffff168110156119615760008054604080517f454b0608000000000000000000000000000000000000000000000000000000008152848c036000190160048201529051600160a060020a039092169263454b06089260248084019382900301818387803b15801561193d57600080fd5b505af1158015611951573d6000803e3d6000fd5b5050600190920191506118cb9050565b50929b919a509098505050505050505050565b600061197e611ff2565b60008061ffff8616811061199157600080fd5b600160a060020a0385811690881614156119aa57600080fd5b6119bb6119b5611037565b87611252565b9350348411156119ca57600080fd5b6040805160a081018252600080825261ffff8981166020808501828152600160a060020a03808f168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519397509195509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd9281900390910190a3600160a060020a03851615611bd75750604051600a840490600160a060020a0386169082156108fc029083906000818181858888f19350505050158015611b8b573d6000803e3d6000fd5b5060408051828152600160a060020a03898116602083015282519684900396908816927f13aa7090696e2a1d666cfc6046f2f72f1c4e0290649b47bab28d1b370ad73783928290030190a25b600354604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015611c11573d6000803e3d6000fd5b5050505050505050565b6000806000806000878688604051602001808461ffff1661ffff167e010000000000000000000000000000000000000000000000000000000000000281526002018381526020018260ff1660ff167f010000000000000000000000000000000000000000000000000000000000000002815260010193505050506040516020818303038152906040526040518082805190602001908083835b60208310611cd35780518252601f199092019160209182019101611cb4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049450620f4240611d17866004600a611fd2565b811515611d2057fe5b0693506103e8611d338660026004611fd2565b811515611d3c57fe5b0692506103e8611d4f8660026006611fd2565b811515611d5857fe5b06915061ffff611d6b8660026008611fd2565b811515611d7457fe5b069050939792965093509350565b60008163ffffffff16620f423f1415611d9d57506004611da1565b5060035b919050565b60008163ffffffff16620f423f1415611dc157506004611da1565b620efa6f63ffffffff831610611dd957506003611da1565b620d03cc63ffffffff831610611df157506002611da1565b506001611da1565b60006103e661ffff841610611e135750610bb881016112cc565b6103dc61ffff841610611e2b57506107d081016112cc565b6103aa61ffff841610611e4357506103e881016112cc565b50806112cc565b60008163ffffffff16620f423f1415611e6557506004611da1565b620f3bc963ffffffff831610611e7d57506003611da1565b620f0e8d63ffffffff831610611e9557506002611da1565b620e1cda63ffffffff831610611ead57506001611da1565b506000611da1565b600854604080517f524773ce0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163524773ce91600480830192602092919082900301818787803b158015611f1457600080fd5b505af1158015611f28573d6000803e3d6000fd5b505050506040513d6020811015611f3e57600080fd5b5051600854604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b158015611fa057600080fd5b505af1158015611fb4573d6000803e3d6000fd5b505050506040513d6020811015611fca57600080fd5b505101905090565b6008828102600290810a60001990810192840201900a8404169392505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600a165627a7a72305820ad4a6e9ee67e1587480d0fccf7f21ab8b5a5a0cca25cbe6fb8f821aa2e2a60ea0029000000000000000000000000512fbd15bde6570ff09e4438af27ede60402451500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd68900000000000000000000000022365168c8705e95b2d08876c23a8c13e3ad72e2000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000080391307f1b08cc068fa1d1b77513b98c36dfbfa000000000000000000000000000983ba1a675327f0940b56c2d49cd9c042dfbf

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000512fbd15bde6570ff09e4438af27ede60402451500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd68900000000000000000000000022365168c8705e95b2d08876c23a8c13e3ad72e2000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000080391307f1b08cc068fa1d1b77513b98c36dfbfa000000000000000000000000000983ba1a675327f0940b56c2d49cd9c042dfbf

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000512fbd15bde6570ff09e4438af27ede604024515
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab
Arg [3] : 00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd689
Arg [4] : 00000000000000000000000022365168c8705e95b2d08876c23a8c13e3ad72e2
Arg [5] : 000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec8
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 00000000000000000000000080391307f1b08cc068fa1d1b77513b98c36dfbfa
Arg [8] : 000000000000000000000000000983ba1a675327f0940b56c2d49cd9c042dfbf


   Swarm Source:
bzzr://ad4a6e9ee67e1587480d0fccf7f21ab8b5a5a0cca25cbe6fb8f821aa2e2a60ea

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.