Contract 0x1e891C587b345ab02A31b57c1F926fB08913d10D 1

 

Contract Overview

GU: Shiny Legendary Pack Four
Balance:
0.98 Ether

EtherValue:
$1,716.02 (@ $1,751.04/ETH)

Token:
Txn Hash
Method
Block
From
To
Value
0xdb43247110c487b24b74c1dbbdf5f451d53320601ce88dee6bf47a1f1d975692Transfer137653782021-12-08 14:44:16243 days 19 hrs ago0x18420a55351cdbfe90a2c373b96caedd3ec3f288 IN  GU: Shiny Legendary Pack Four0 Ether0.00142732 67.96807308
0x5aa7de6679d99c1c7aef125a6214016388dfeb5a8e9a251ed6824cbdc6159987Set Can Claim88392892019-10-30 8:33:351014 days 1 hr ago0x95b697e13f227d55ef4336f7aa762fe243eef590 IN  GU: Shiny Legendary Pack Four0 Ether0.000110824
0x2281e8540c4f6c1df5d797ae93586d8bb2eacc271d4e5d55d08670a0945862ccCallback88328212019-10-29 7:44:421015 days 2 hrs ago0xf98d98e65ff508b10132ab647f90eb290f907084 IN  GU: Shiny Legendary Pack Four0 Ether0.0009421820
0xc1ce97e1bd53a65e0fc8a42e614d1695d3af0dfe2afc65460434a7d04bb4576ePurchase88327592019-10-29 7:31:431015 days 2 hrs agoENS Name krumpy.eth IN  GU: Shiny Legendary Pack Four1 Ether0.0012374713
0x073bca94c7a70df799ac62e68fc4413b6edd0332a9d7370a28f43c0ce97ee56dCallback88323492019-10-29 5:54:021015 days 3 hrs ago0x3f55f4d7475d1dadb893cd602ecc28aacb565a07 IN  GU: Shiny Legendary Pack Four0 Ether0.0003909617
0xe309abf62c09addcdc6e9e213509b920565478025c6060bc61382f06afd22269Callback88323472019-10-29 5:53:531015 days 3 hrs ago0x47977e24b15e57b99aa381a4302dc74530455584 IN  GU: Shiny Legendary Pack Four0 Ether0.0008008517
0xddeb8b5aa9b7189e241c7c692169a20552416c9511c292107f993f6793161de9Purchase88323422019-10-29 5:52:441015 days 4 hrs ago0x7554d7d95235fed3425c898d864735e0eadab093 IN  GU: Shiny Legendary Pack Four1 Ether0.001005629.5
0x45cc31ea7ddde11deed7f841cadd388254cc4c2afd8459d8fee8d44345e76941Callback88312062019-10-29 1:22:421015 days 8 hrs ago0xbf5fa59530ce3909bf0173de2dff29473db8add9 IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0x027b1599f22c4af32593cbaf9897b9581785841504f52b407bd3c4d84e6458eaPurchase88312022019-10-29 1:21:531015 days 8 hrs ago0x917a7277903148cda75c4e761ed7f483470ea28c IN  GU: Shiny Legendary Pack Four1 Ether0.000952699
0x263ae506bcbeb918fe5387752b9a335f21214d76a5f8281ea8069e2de40746f8Callback88311952019-10-29 1:19:501015 days 8 hrs ago0x089a6cc7a53f2afc89aa6968643f1aac20ba1104 IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0xd2359f96f95f1420e60da347df61499ca2e1f71da1d04435be84bb91a981180aPurchase88311912019-10-29 1:19:111015 days 8 hrs agoENS Name poap.eth IN  GU: Shiny Legendary Pack Four100 Ether0.0017134218
0x626465640afebf9173f7fa1ba72b8390bc64ca7f1f1874b602ba7d49e67c1446Callback88311312019-10-29 1:05:371015 days 8 hrs ago0xbeb18ecb8fd20ea1997d7b699978a8720bf0ae0c IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0x90f22aab5e9c190da691767028b2ccdd43740d442e6221cbb91d164899bc16caPurchase88311262019-10-29 1:05:181015 days 8 hrs ago0x6dc84bb279c5bf80dbe37f449487b0ac9acdeaa7 IN  GU: Shiny Legendary Pack Four1 Ether0.000952699
0x51202dfd0ed2dee3d3f48396be1a9c839eb274f3522d26beb09a0b3392736d4cCallback88308832019-10-29 0:15:161015 days 9 hrs ago0x77e20669bd11a2dade44b98f30a0a72cb87ec52b IN  GU: Shiny Legendary Pack Four0 Ether0.0002759712
0x70225903829c9d896f7ab4ddd9ecc87709dba9fff7caf67b5697f5e4fe1799b8Callback88308832019-10-29 0:15:161015 days 9 hrs ago0xe06f8e4728018ea99e9bb5f016ec3c43124c49fa IN  GU: Shiny Legendary Pack Four0 Ether0.0002759712
0x9b2ba45bfde01570dd2c548a870e5e91ab0e5ad2bbdfe731f4d8dfe18acb531fCallback88308832019-10-29 0:15:161015 days 9 hrs ago0xeec680a7114a7dfb707e0df908b07250ea3b1f6c IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0x7c3f6fa01605b0ea3bf0f4ff5681842fbf0e64708d647d1b36d2af2a00a20bb1Purchase For88308792019-10-29 0:14:291015 days 9 hrs ago0xf3f2dae5badfdd6380d5e726b0d1938864eda26d IN  GU: Shiny Legendary Pack Four1 Ether0.0011662812
0x1effa4e7e0c30d9180ecc40a9cff11b7116cb3904b105b0b41de74a5aa63e648Callback88307442019-10-28 23:46:481015 days 10 hrs ago0xf693b055414d9e5611c566ad4db7b4af2e3c35b6 IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0x679cf653cca9fab480762ea35c940f5564d3f1cf24dd5a7c03fb0a434566147fCallback88306042019-10-28 23:14:411015 days 10 hrs ago0xa2a1c416881de36a9732c57c5e26421e0258841b IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0x5b0b1b623392340933194b45867ff703bfb893599508b116cfe5bb0d678c44b3Purchase88306012019-10-28 23:14:241015 days 10 hrs ago0xb770145558cae42b75928827d0c1ec2bc87d4ec0 IN  GU: Shiny Legendary Pack Four1 Ether0.000952699
0x097bd6bfa770012d8c2eb90e92309f3785da686196b6784dcff171b1c344b8c1Callback88304142019-10-28 22:30:161015 days 11 hrs ago0xff92938f77b287e16a891507d288e729b9f8c465 IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0x2f121a5bc303f0bfd61938932d5a47b27a76e5ab716f090be3fadc6ad290eaccCallback88304142019-10-28 22:30:161015 days 11 hrs ago0x56b227f911de9fe90ca042fa95c4c8cee27326b9 IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0x1d3d5ca90f53fe6552c8d6060345b946883f078fb097d43095d732fe311491e8Callback88303822019-10-28 22:22:381015 days 11 hrs ago0x23d276088862ac90a92cbdd6375c0cc7ee7a30a1 IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0xce2bac6159fa6ade8059cfa3de45048e14c48af56cc17db5c5029e7fb5cde3a1Callback88303822019-10-28 22:22:381015 days 11 hrs ago0x97d333d0f5fc20e6a9082ae2694ca6cdd74c1550 IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
0x96e128620a7bf399cb6075ba5ebc050a8c4ea5930279d652ba1681a4110b803fCallback88303822019-10-28 22:22:381015 days 11 hrs ago0xe125c5f5d619d42cb94bc52bfb04e21e6bd64c4c IN  GU: Shiny Legendary Pack Four0 Ether0.000565312
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc1ce97e1bd53a65e0fc8a42e614d1695d3af0dfe2afc65460434a7d04bb4576e88327592019-10-29 7:31:431015 days 2 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault1 Ether
0xddeb8b5aa9b7189e241c7c692169a20552416c9511c292107f993f6793161de988323422019-10-29 5:52:441015 days 4 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault0.9 Ether
0xddeb8b5aa9b7189e241c7c692169a20552416c9511c292107f993f6793161de988323422019-10-29 5:52:441015 days 4 hrs ago GU: Shiny Legendary Pack Four0xc350d1ecc1c71e41612be8c6c690f8af4dda32e60.1 Ether
0x027b1599f22c4af32593cbaf9897b9581785841504f52b407bd3c4d84e6458ea88312022019-10-29 1:21:531015 days 8 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault0.9 Ether
0x027b1599f22c4af32593cbaf9897b9581785841504f52b407bd3c4d84e6458ea88312022019-10-29 1:21:531015 days 8 hrs ago GU: Shiny Legendary Pack Four0x25460c7edaff5dfd6087eb4d23ba7a8223d1b9430.1 Ether
0xd2359f96f95f1420e60da347df61499ca2e1f71da1d04435be84bb91a981180a88311912019-10-29 1:19:111015 days 8 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault100 Ether
0x90f22aab5e9c190da691767028b2ccdd43740d442e6221cbb91d164899bc16ca88311262019-10-29 1:05:181015 days 8 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault0.9 Ether
0x90f22aab5e9c190da691767028b2ccdd43740d442e6221cbb91d164899bc16ca88311262019-10-29 1:05:181015 days 8 hrs ago GU: Shiny Legendary Pack Four0xb87d81203fd2e881fbe0bae6c01e1a5a3d98c4560.1 Ether
0x7c3f6fa01605b0ea3bf0f4ff5681842fbf0e64708d647d1b36d2af2a00a20bb188308792019-10-29 0:14:291015 days 9 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault0.9 Ether
0x7c3f6fa01605b0ea3bf0f4ff5681842fbf0e64708d647d1b36d2af2a00a20bb188308792019-10-29 0:14:291015 days 9 hrs ago GU: Shiny Legendary Pack Four0x9c05ac66e0f709bfca556cbcc57ce189c00cdccd0.1 Ether
0xb6a42616937023ab1664db06e79a36effd3d8c97d2e77de95f60802c0595e17c88307422019-10-28 23:46:021015 days 10 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault1 Ether
0xb6a42616937023ab1664db06e79a36effd3d8c97d2e77de95f60802c0595e17c88307422019-10-28 23:46:021015 days 10 hrs ago 0xe4ba1be346d7720c9fb07f705ab058cddc0b0c26 GU: Shiny Legendary Pack Four1 Ether
0x5b0b1b623392340933194b45867ff703bfb893599508b116cfe5bb0d678c44b388306012019-10-28 23:14:241015 days 10 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault0.9 Ether
0x5b0b1b623392340933194b45867ff703bfb893599508b116cfe5bb0d678c44b388306012019-10-28 23:14:241015 days 10 hrs ago GU: Shiny Legendary Pack Four0x317d875ca3b9f8d14f960486c0d1d1913be74e900.1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago 0xe4ba1be346d7720c9fb07f705ab058cddc0b0c26 GU: Shiny Legendary Pack Four1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago 0xe4ba1be346d7720c9fb07f705ab058cddc0b0c26 GU: Shiny Legendary Pack Four1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago 0xe4ba1be346d7720c9fb07f705ab058cddc0b0c26 GU: Shiny Legendary Pack Four1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago 0xe4ba1be346d7720c9fb07f705ab058cddc0b0c26 GU: Shiny Legendary Pack Four1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago 0xe4ba1be346d7720c9fb07f705ab058cddc0b0c26 GU: Shiny Legendary Pack Four1 Ether
0x6348e7a9a3a2c9857875ed7720559a3e2de4e2122569d4723a6c818a06591eee88303792019-10-28 22:21:221015 days 11 hrs ago GU: Shiny Legendary Pack Four GU: Capped Vault1 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ShinyLegendaryPackFour

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-07-16
*/

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 Security Audit

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"}]

60806040526002805460a060020a60ff02191690556005805462ff00001961ffff19918216600f17166201000017909155600780549091166003179055600880547405000000000000000000000000000000000000000060a060020a61ffff02199091161790553480156200007357600080fd5b506040516200225f3803806200225f8339810160409081528151602080840151928401516060850151608086015160a087015160008054600160a060020a03808716600160a060020a031992831617909255625aa74560015560028054821633179055600380549286169290911691909117905595909601805194969095929491939092918791879187918791869162000113916006918701906200016f565b50600780546201000060b060020a03191662010000600160a060020a039384160217905560088054600160a060020a03199081169683169690961790556009805490951696169590951790925550620002039650505050505050565b828054828255906000526020600020908101928215620001c7579160200282015b82811115620001c75782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000190565b50620001d5929150620001d9565b5090565b6200020091905b80821115620001d5578054600160a060020a0319168155600101620001e0565b90565b61204c80620002136000396000f3006080604052600436106101925763ffffffff60e060020a60003504166306a628d4811461019757806313af4035146101c25780631705a3bd146101e557806317634514146102165780631b3ed7221461023d5780631e0197e214610269578063379607f51461027e578063396c8228146102965780633ccfd60b146102b15780633f4ba83a146102c657806345d63b66146102db5780635c975abb146102f35780635f9602e81461031c5780636bc3e4a8146103315780636dc7a6271461037b5780638392fe31146103905780638456cb59146103ec5780638be4339b146104015780638da5cb5b146104165780639a1f6a0f1461042b578063b01d5b6314610447578063b84c139214610469578063bd6cac4f14610481578063becd283f146104a2578063c2f0bb29146104b7578063c503101e146104fd578063c7876ea414610517578063ca2bf0471461052c578063d42a5011146105dd578063e3f7faaf146105f9578063e87aa76914610618578063eb1098b81461063a578063fbfa77cf1461064f578063ff585caf14610664575b600080fd5b3480156101a357600080fd5b506101ac61067c565b6040805160ff9092168252519081900360200190f35b3480156101ce57600080fd5b506101e3600160a060020a0360043516610681565b005b3480156101f157600080fd5b506101fa6106c7565b60408051600160a060020a039092168252519081900360200190f35b34801561022257600080fd5b5061022b6106d6565b60408051918252519081900360200190f35b34801561024957600080fd5b506102526106dc565b6040805161ffff9092168252519081900360200190f35b34801561027557600080fd5b506101fa6106e6565b34801561028a57600080fd5b506101e36004356106f5565b6101e361ffff60043516600160a060020a03602435166109e7565b3480156102bd57600080fd5b506101e3610a91565b3480156102d257600080fd5b506101e3610ae5565b3480156102e757600080fd5b506101e3600435610b5d565b3480156102ff57600080fd5b50610308610c01565b604080519115158252519081900360200190f35b34801561032857600080fd5b50610252610c11565b34801561033d57600080fd5b50610355600160a060020a0360043516602435610c1b565b6040805161ffff9093168352600160a060020a0390911660208301528051918290030190f35b34801561038757600080fd5b50610308610cd9565b34801561039c57600080fd5b506103a8600435610ce8565b6040805161ffff9687168152949095166020850152600160a060020a0390921683850152606083015267ffffffffffffffff16608082015290519081900360a00190f35b3480156103f857600080fd5b506101e3610d44565b34801561040d57600080fd5b50610252610dc1565b34801561042257600080fd5b506101fa610dcb565b34801561043757600080fd5b506101e361ffff60043516610dda565b6101e3600160a060020a0360043581169061ffff602435169060443516610e09565b34801561047557600080fd5b506101fa600435610e30565b34801561048d57600080fd5b50610308600160a060020a0360043516610e58565b3480156104ae57600080fd5b5061022b610eb6565b3480156104c357600080fd5b506104dc61ffff6004351660ff60243516604435610ebc565b6040805161ffff938416815291909216602082015281519081900390910190f35b34801561050957600080fd5b506101e36004351515611004565b34801561052357600080fd5b5061022b611037565b34801561053857600080fd5b50610544600435611043565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610588578181015183820152602001610570565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c75781810151838201526020016105af565b5050505090500194505050505060405180910390f35b3480156105e957600080fd5b506101e361ffff60043516611208565b34801561060557600080fd5b5061022b60043561ffff60243516611252565b34801561062457600080fd5b5061025261ffff60043581169060243516611293565b34801561064657600080fd5b506102526112d2565b34801561065b57600080fd5b506101fa6112e3565b34801561067057600080fd5b506101e36004356112f2565b600590565b600254600160a060020a0316331461069857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60015481565b60075461ffff1681565b600954600160a060020a031681565b6000806000806000806000806060600080600060048d81548110151561071757fe5b90600052602060002090600302019b50600560029054906101000a900460ff16151561074257600080fd5b8b5460018d01546201000090910461ffff169950975061076061067c565b8c54909750600160a060020a03640100000000820416965061ffff16945087151561078a57600080fd5b600061ffff8a161161079b57600080fd5b8660ff166040519080825280602002602001820160405280156107c8578160200160208202803883390190505b5093508861ffff166107d8610dc1565b860161ffff16116107f2576107eb610dc1565b85016107f4565b885b925061ffff8086169084161161080957600080fd5b8491505b8261ffff168261ffff1610156109c0575060005b8660ff168160ff1610156109205761083a82828a610ebc565b809b50819c5050506000809054906101000a9004600160a060020a0316600160a060020a031663fb36eba1878d8d6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018361ffff1661ffff1681526020018261ffff1661ffff1681526020019350505050602060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b505050506040513d60208110156108fb57600080fd5b50518451859060ff841690811061090e57fe5b60209081029091010152600101610821565b85600160a060020a03168d7f69ac64af86d3ef40c9def928534f6a6a9e12d85ec3af2948bd66b802afcc10468960ff16850287604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109a1578181015183820152602001610989565b50505050905001935050505060405180910390a360019091019061080d565b5050895461ffff1981169390910361ffff9182160116919091179097555050505050505050565b6109f182826114c7565b600954604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015261ffff851660248201529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b505050506040513d6020811015610a8b57600080fd5b50505050565b600254600160a060020a03163314610aa857600080fd5b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610ae2573d6000803e3d6000fd5b50565b600254600160a060020a03163314610afc57600080fd5b60025460a060020a900460ff161515610b1457600080fd5b6002805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000600482815481101515610b6e57fe5b9060005260206000209060030201905080600101546000141515610b9157600080fd5b600281015467ffffffffffffffff9081166101000116431015610bb357600080fd5b60028101805467ffffffffffffffff19164367ffffffffffffffff1617905560405182907f29ef13d2827ff333d3fde4646988c3a7db16de1210f0c0b613fd0ac9773e4e7b90600090a25050565b60025460a060020a900460ff1681565b60055461ffff1681565b600080600080610c2b86866114ed565b600954604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03808516600483015261ffff86166024830152915194965092945016916340c10f19916044808201926020929091908290030181600087803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b505050506040513d6020811015610ccb57600080fd5b509396929550919350505050565b60055462010000900460ff1681565b6004805482908110610cf657fe5b600091825260209091206003909102018054600182015460029092015461ffff80831694506201000083041692640100000000909204600160a060020a0316919067ffffffffffffffff1685565b600254600160a060020a03163314610d5b57600080fd5b60025460a060020a900460ff1615610d7257600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60055461ffff1690565b600254600160a060020a031681565b600254600160a060020a03163314610df157600080fd5b6005805461ffff191661ffff92909216919091179055565b60025460a060020a900460ff1615610e2057600080fd5b610e2b838383611974565b505050565b6006805482908110610e3e57fe5b600091825260209091200154600160a060020a0316905081565b6000805b600654811015610eab5782600160a060020a0316600682815481101515610e7f57fe5b600091825260209091200154600160a060020a03161415610ea35760019150610eb0565b600101610e5c565b600091505b50919050565b60045490565b600080600080600080600080610ed38b8b8b611c1b565b9399509197509195509093509150600460ff8b161415610f0957610ef685611d82565b9050610f028383611293565b9650610f42565b8960ff1660031415610f2a57610f1e85611da6565b9050610f028383611df9565b610f3385611e4a565b9050610f3f8383611df9565b96505b6000546040517fcaa19168000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063caa19168908390879060049081019081908490811115610f9457fe5b60ff1681526020018261ffff1661ffff16815260200192505050602060405180830381600087803b158015610fc857600080fd5b505af1158015610fdc573d6000803e3d6000fd5b505050506040513d6020811015610ff257600080fd5b50519750505050505050935093915050565b600254600160a060020a0316331461101b57600080fd5b60058054911515620100000262ff000019909216919091179055565b670de0b6b3a764000090565b60608061104e611ff2565b600080600080600080600060048b81548110151561106857fe5b60009182526020918290206040805160a0810182526003909302909101805461ffff808216855262010000820416948401859052600160a060020a03640100000000909104169183019190915260018101546060830181905260029091015467ffffffffffffffff16608083015290995090955093506110e661067c565b9250848360ff160261ffff1660405190808252806020026020018201604052801561111b578160200160208202803883390190505b509850848360ff160261ffff16604051908082528060200260200182016040528015611151578160200160208202803883390190505b509950600091505b8461ffff168261ffff1610156111fb575060005b8260ff168160ff1610156111f057611186828286610ebc565b8a51919850965086908a9061ffff60ff878116870290861601169081106111a957fe5b61ffff928316602091820290920101528a5188918c9160ff8781168702908616019091169081106111d657fe5b61ffff90921660209283029091019091015260010161116d565b600190910190611159565b5050505050505050915091565b600254600160a060020a0316331461121f57600080fd5b6008805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b6001546000904303611770810460148110156112815761ffff841660646014839003870204860302925061128b565b8361ffff16850292505b505092915050565b60006103e661ffff8416106112ad5750610bb881016112cc565b6102ec61ffff8416106112c557506107d081016112cc565b506103e881015b92915050565b60085460a060020a900461ffff1681565b600354600160a060020a031681565b600080600060048481548110151561130657fe5b906000526020600020906003020192508260010154600014151561132957600080fd5b600283015467ffffffffffffffff1660ff1943011061134757600080fd5b60028301544367ffffffffffffffff9081169116141561136657600080fd5b600283015483546040805167ffffffffffffffff9093164060208085018290526401000000008404600160a060020a03166c0100000000000000000000000090810286850152300260548601526201000090930461ffff167e010000000000000000000000000000000000000000000000000000000000000260688501528151808503604a018152606a90940191829052835190955090918291908401908083835b602083106114275780518252601f199092019160209182019101611408565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912093505050821515905061146257600080fd5b6001830181905582546040805162010000830461ffff168152602081018490528151640100000000909304600160a060020a03169287927fedb5ce4012b6e9c5904afa2ffad9811d5c2e91e6bca8914cf7e3ffc28e630c57928290030190a350505050565b60025460a060020a900460ff16156114de57600080fd5b6114e9338383611974565b5050565b600080600080600080600080611501611ff2565b60008061150d8d610e58565b151561151857600080fd5b611520611eb5565b98508c600160a060020a031663379607f58d6040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b15801561156b57600080fd5b505af115801561157f573d6000803e3d6000fd5b5050505061158b611eb5565b975088881161159957600080fd5b8888039650600561ffff88160661ffff16156115b457600080fd5b600561ffff8816600754600854604080517f6352211e0000000000000000000000000000000000000000000000000000000081526000198e016004820152905194909304995061ffff90911689029750600160a060020a031691636352211e916024808201926020929091908290030181600087803b15801561163657600080fd5b505af115801561164a573d6000803e3d6000fd5b505050506040513d602081101561166057600080fd5b50516040805160a081018252600080825261ffff8981166020848101828152600160a060020a038089168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519599509297509095509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd928290030190a3600754604080517ff88218e0000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151620100009093049091169163f88218e0916024808201926020929091908290030181600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b505050506040513d602081101561187257600080fd5b5050604080518a8152602081018a905281517f31a1adb447f9b6b89f24bf104f0b7a06975ad9f35670dbfaf7ce29190ec54762929181900390910190a160085461ffff60a060020a909104811690871611611961575060005b8661ffff168110156119615760008054604080517f454b0608000000000000000000000000000000000000000000000000000000008152848c036000190160048201529051600160a060020a039092169263454b06089260248084019382900301818387803b15801561193d57600080fd5b505af1158015611951573d6000803e3d6000fd5b5050600190920191506118cb9050565b50929b919a509098505050505050505050565b600061197e611ff2565b60008061ffff8616811061199157600080fd5b600160a060020a0385811690881614156119aa57600080fd5b6119bb6119b5611037565b87611252565b9350348411156119ca57600080fd5b6040805160a081018252600080825261ffff8981166020808501828152600160a060020a03808f168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519397509195509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd9281900390910190a3600160a060020a03851615611bd75750604051600a840490600160a060020a0386169082156108fc029083906000818181858888f19350505050158015611b8b573d6000803e3d6000fd5b5060408051828152600160a060020a03898116602083015282519684900396908816927f13aa7090696e2a1d666cfc6046f2f72f1c4e0290649b47bab28d1b370ad73783928290030190a25b600354604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015611c11573d6000803e3d6000fd5b5050505050505050565b6000806000806000878688604051602001808461ffff1661ffff167e010000000000000000000000000000000000000000000000000000000000000281526002018381526020018260ff1660ff167f010000000000000000000000000000000000000000000000000000000000000002815260010193505050506040516020818303038152906040526040518082805190602001908083835b60208310611cd35780518252601f199092019160209182019101611cb4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049450620f4240611d17866004600a611fd2565b811515611d2057fe5b0693506103e8611d338660026004611fd2565b811515611d3c57fe5b0692506103e8611d4f8660026006611fd2565b811515611d5857fe5b06915061ffff611d6b8660026008611fd2565b811515611d7457fe5b069050939792965093509350565b60008163ffffffff16620f423f1415611d9d57506004611da1565b5060035b919050565b60008163ffffffff16620f423f1415611dc157506004611da1565b620efa6f63ffffffff831610611dd957506003611da1565b620d03cc63ffffffff831610611df157506002611da1565b506001611da1565b60006103e661ffff841610611e135750610bb881016112cc565b6103dc61ffff841610611e2b57506107d081016112cc565b6103aa61ffff841610611e4357506103e881016112cc565b50806112cc565b60008163ffffffff16620f423f1415611e6557506004611da1565b620f3bc963ffffffff831610611e7d57506003611da1565b620f0e8d63ffffffff831610611e9557506002611da1565b620e1cda63ffffffff831610611ead57506001611da1565b506000611da1565b600854604080517f524773ce0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163524773ce91600480830192602092919082900301818787803b158015611f1457600080fd5b505af1158015611f28573d6000803e3d6000fd5b505050506040513d6020811015611f3e57600080fd5b5051600854604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b158015611fa057600080fd5b505af1158015611fb4573d6000803e3d6000fd5b505050506040513d6020811015611fca57600080fd5b505101905090565b6008828102600290810a60001990810192840201900a8404169392505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600a165627a7a72305820ad4a6e9ee67e1587480d0fccf7f21ab8b5a5a0cca25cbe6fb8f821aa2e2a60ea0029000000000000000000000000512fbd15bde6570ff09e4438af27ede60402451500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd68900000000000000000000000022365168c8705e95b2d08876c23a8c13e3ad72e2000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000080391307f1b08cc068fa1d1b77513b98c36dfbfa000000000000000000000000000983ba1a675327f0940b56c2d49cd9c042dfbf

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

000000000000000000000000512fbd15bde6570ff09e4438af27ede60402451500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd68900000000000000000000000022365168c8705e95b2d08876c23a8c13e3ad72e2000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000080391307f1b08cc068fa1d1b77513b98c36dfbfa000000000000000000000000000983ba1a675327f0940b56c2d49cd9c042dfbf

-----Decoded View---------------
Arg [0] : _old (address): 0x512fbd15bde6570ff09e4438af27ede604024515
Arg [1] : _packs (address[]): 0x80391307f1b08cc068fa1d1b77513b98c36dfbfa,0x000983ba1a675327f0940b56c2d49cd9c042dfbf
Arg [2] : _core (address): 0x6ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab
Arg [3] : vault (address): 0x91b9d2835ad914bc1dcfe09bd1816febd04fd689
Arg [4] : _tournament (address): 0x22365168c8705e95b2d08876c23a8c13e3ad72e2
Arg [5] : _pheonix (address): 0x657c8982d63f58ddd6a54c75591a572d4180cec8

-----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
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.