Contract 0x1e891c587b345ab02a31b57c1f926fb08913d10d

 

TxHash Block Age From To Value [TxFee]
0x49993a9cd4b25d8647c595ee9d33b1ca1f2a91a2a9d329bb4c0362a457241984741623710 hrs 3 mins ago0x9a44572cd533cf38d069a41a98766ac989bdd318 IN  GU_ShinyLegendaryPackFour0 Ether0.000091992
0xbf9639de87e8b229c0103c66b8209d65d5bf288aad5a3a774b727657f6a1d331741623710 hrs 3 mins ago0x4e93abcf7787d9007bc987e49ff9513c31541291 IN  GU_ShinyLegendaryPackFour0 Ether0.000091992
0x2d8fa32e1981f9d6549f42e2fb69bab3fd10872546a19312af8fe594bca0f533741623610 hrs 4 mins ago0xa2a1c416881de36a9732c57c5e26421e0258841b IN  GU_ShinyLegendaryPackFour0 Ether0.000183984
0x5f1a582f81ec358e781eee4783755bca7bbeb03edf8e82483f8f3439149f87c8741623610 hrs 4 mins ago0xa6eec10c55ec14d530654596099ffc2373959fa5 IN  GU_ShinyLegendaryPackFour0 Ether0.000183984
0x520285d335363b8385bbc0cd8e1ef6d0f459e444e0f4c79d7aed719c4dbb4401741623610 hrs 4 mins ago0xdd4e55f4a29cebea682145bc9d8e05ea8e77cb90 IN  GU_ShinyLegendaryPackFour0 Ether0.000376872
0xcf86192fc558d340920eed6fb8cf07cc52102cede012754ff14a2eff4d0216bd741623310 hrs 5 mins ago0x76b370bc59f32c0b58bdc4a95bcaf763d871a62e IN  GU_ShinyLegendaryPackFour1 Ether0.0009519
0xcb9d027e2aa03592311612525b77b3cd180c4267de7c528781c29cc23c97d2ae741494515 hrs 2 mins ago0xb2f4b16595e02a9721f97e3e30fb5bbbf73f5f54 IN  GU_ShinyLegendaryPackFour0 Ether0.000023821
0x8bed6846b37b5af28c4a0e31af40db0b4e9c71fe8444db4a2115bec0c012088e741399818 hrs 32 mins ago0x3f55f4d7475d1dadb893cd602ecc28aacb565a07 IN  GU_ShinyLegendaryPackFour0 Ether0.000091992
0xfeb587fa4937d4551eb3248b8fa9d0a08ad10e0abc6b3591b61c4646a4c5b01c741399718 hrs 32 mins ago0xbeb18ecb8fd20ea1997d7b699978a8720bf0ae0c IN  GU_ShinyLegendaryPackFour0 Ether0.0002685213
0xc8783e475ca0fc1b2365f6ca38895386da5b6bed9831be91465d8b23585e2da0741399418 hrs 33 mins ago0x8bee1ca8b0f0639a4220f9894f91c854a0687885 IN  GU_ShinyLegendaryPackFour1 Ether0.00104709
0xd67a602522e690a83180d44b24134f57f976e0885b2fef363528c97b5504057874099951 day 9 hrs ago0x603511093db0a25ce79a862529a50791b39f8257 IN  GU_ShinyLegendaryPackFour0 Ether0.000160986
0xfbcae0b7ab00e334fc32dcc497a915b1076d0bd61edab436c30ca3e287c4458c74099951 day 9 hrs ago0x574e6dd6fa76acb4fab0fee2fa9899bfd411a9ae IN  GU_ShinyLegendaryPackFour0 Ether0.0004381137
0xd9e3056fdb46fc2d309862b07f88f5ce389d4789d99d9c75109f1e27b60c8ac074099911 day 9 hrs ago0x2345eda8476004681d4f143b7c0c6025c0b89c3f IN  GU_ShinyLegendaryPackFour1 Ether0.001354944
0x58ccacbb4382801f1919e51c44dd0b3c2b80885c032d0de1da203586e004ab3f74078021 day 17 hrs ago0x05449a7046f50303b515c6272e437d03e0f6e9f2 IN  GU_ShinyLegendaryPackFour0 Ether0.000091992
0xb34710e56d62105f9c161c2307791de6ab0a38f8a0d8c77c2ef3de5d761442ea74078021 day 17 hrs ago0xbdb1b430f194b6f5eb161948dfb15c07836889f4 IN  GU_ShinyLegendaryPackFour0 Ether0.000091992
0x54081a4d944daffbfd509603f2795c44ffe85e859ef7d1fd6b1410b8ae223bb874078021 day 17 hrs ago0x0496e65e3aef7acf7529479637bfa877b3a17049 IN  GU_ShinyLegendaryPackFour0 Ether0.000282654
0x623ce612ace435c0cbf908b1230543f4cc2a725e7e613d38b661d2b4693202ee74078001 day 17 hrs ago0x68d36dcbdd7bbf206e27134f28103abe7cf972df IN  GU_ShinyLegendaryPackFour1 Ether0.000199899
0xc372deb434a231da4fd106c32ebb05e98994a7630339fbf8177ed18f24353d7474055022 days 2 hrs ago0x17284720e250448e1093ebce4a6762d88ee407c7 IN  GU_ShinyLegendaryPackFour0 Ether0.00300071
0xaf1ac1924d4a1df262ef96b510ebfa108954d0ce2651c35a6824028f7cdb5f9174051162 days 3 hrs ago0xf98d98e65ff508b10132ab647f90eb290f907084 IN  GU_ShinyLegendaryPackFour0 Ether0.000091992
0x1b11807ca1185299983ca4888460fdfdb2db3372fbd211304b118c1a4387ca7774051162 days 3 hrs ago0x45a0f916e11cbff1f002c6f4caead6ee9982b00c IN  GU_ShinyLegendaryPackFour0 Ether0.000091992
0x9d0617620476af1968f935fe975f00ff18f9cd5ee7c43202cb62925f058e715274051162 days 3 hrs ago0x3e4e24410ba1b1edf3a3bce8017e102a6bdef78c IN  GU_ShinyLegendaryPackFour0 Ether0.00018444396
0x981ea6e091ff9af7e4e1c4ac0d54beda52142d9de2a530887bd845a80d81cc8b74051162 days 3 hrs ago0x1f0c4c196a918db15989dbb94ae88848adf4c350 IN  GU_ShinyLegendaryPackFour0 Ether0.00037781418
0x5003c2209850c8f1cfb83bcddc9a71f6518dd485d4516a7611ff60b1ba63929774051132 days 3 hrs ago0x17284720e250448e1093ebce4a6762d88ee407c7 IN  GU_ShinyLegendaryPackFour1 Ether0.0014840871
0x6a66a592f410db4deb6a22e4eb4e7af9b5d84be5c827e7c8c35a1b1c880ac7ba74049602 days 4 hrs ago0x008197bf3340c3f59e59edec0665da9720ed1c83 IN  GU_ShinyLegendaryPackFour0 Ether0.000071463
0xdcafec7006d330117909f496c19884c57d78d2cae4cb1117649c4eb672aeb3e073970363 days 9 hrs ago0xc52466277128969414a3a9ddc831c24135237a22 IN  GU_ShinyLegendaryPackFour0 Ether0.001140506
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0xcf86192fc558d340920eed6fb8cf07cc52102cede012754ff14a2eff4d0216bd741623310 hrs 5 mins ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0xc8783e475ca0fc1b2365f6ca38895386da5b6bed9831be91465d8b23585e2da0741399418 hrs 33 mins ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0xd9e3056fdb46fc2d309862b07f88f5ce389d4789d99d9c75109f1e27b60c8ac074099911 day 9 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6890.9 Ether
0xd9e3056fdb46fc2d309862b07f88f5ce389d4789d99d9c75109f1e27b60c8ac074099911 day 9 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x013ec57d1237e7727f818b1a35e3506f754304e40.1 Ether
0x623ce612ace435c0cbf908b1230543f4cc2a725e7e613d38b661d2b4693202ee74078001 day 17 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x5003c2209850c8f1cfb83bcddc9a71f6518dd485d4516a7611ff60b1ba63929774051132 days 3 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6890.9 Ether
0x5003c2209850c8f1cfb83bcddc9a71f6518dd485d4516a7611ff60b1ba63929774051132 days 3 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0xb9e29984fe50602e7a619662ebed4f90d93824c70.1 Ether
0x019ef1035b2999259f4238abc430eaff0fa157c9ea404668e57ddcd0a7c0f2c073923604 days 3 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6896 Ether
0x5738ecb7843fe4ebc43fc21e8eda551a37fb50a659255b3357214b846df15b9673922364 days 3 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0xc9f8d0b9d42e25cbf9ec9d32e6d389afcb4242bbd68e46597e2ea5c62725469d73920814 days 4 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x7322263a092fcc905626a82b1ca24b764f7ac540fc7f1df03e8645d6379f0f8b73919184 days 5 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x0b40559ebbddbfbad1f25822d138040b5527e3e4f49978086936ddeee8a8e28773880034 days 19 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0xafa9fcc5357f499045a68e1291918a84259b1d11f508ee141966c4db0645446573635198 days 14 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0xf214010ac28d392b55c50880dbfaf37750702868e1f561e01e10625eb494e82d73623468 days 19 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd68990 Ether
0xf214010ac28d392b55c50880dbfaf37750702868e1f561e01e10625eb494e82d73623468 days 19 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x7ca1827c46d38e466e9129d9fe865d45ba0e25c310 Ether
0x959f2031c3baae599f4488a4df24b0f416b1f76963160135a96bc42ff76d05de73561409 days 18 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x4487944a9205a73b1f3491439212969f54f0e579bfe0fca34daf377e43fbbd95735462810 days 8 mins ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0xff52fada589241fe0925abffcc3371bc523d13dce0c9b29a916adb4c25d25272735330710 days 5 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x77ceaacdb6d12e47b535b3b73508936293d5a651ba687fd8c87794afeb0400bf735328110 days 5 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x5c4e5710d65905bd2883f609973ec8f4c62a621ce6060226f336724a38ce1543735052410 days 15 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x6894a97ad5966068a4751805fb391809b9a36bb19164070ca809dac061c6a95d735002810 days 17 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x0cddccd1f740fc3ddba1ca525aeb93389ee1be1bfd93308dd29670c957db78cf734728111 days 3 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6896 Ether
0x6aed338299841f7021659bbb225d5f7b7757ec87946bff0bdbc9208b5d74b209734635711 days 7 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0x0321138d3b76553c60ba908b45662ee9f5a82ec6b9ab0e36dae2e19b7f3681c9734627411 days 7 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
0xcdead28b69681a0a31b30baaae156947770ce5d27fa65e7517a65a22fa2c37cd734624911 days 7 hrs ago0x1e891c587b345ab02a31b57c1f926fb08913d10d0x91b9d2835ad914bc1dcfe09bd1816febd04fd6891 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)

Contract Name:
ShinyLegendaryPackFour

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

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

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