ETH Price: $3,271.99 (-9.03%)
Gas: 92 Gwei

Contract

0x482Cf6A9d6b23452C81d4D0f0f139C1414963f89
 

Overview

ETH Balance

0.063 ETH

Eth Value

$206.14 (@ $3,271.99/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Claim99748762020-04-30 15:58:071418 days ago1588262287IN
GU: Epic Pack Four
0 ETH0.0002804512
Purchase88619142019-11-02 23:59:521598 days ago1572739192IN
GU: Epic Pack Four
0.075 ETH0.000095431
Set Can Claim88392852019-10-30 8:32:241602 days ago1572424344IN
GU: Epic Pack Four
0 ETH0.000110734
Claim88382642019-10-30 4:40:461602 days ago1572410446IN
GU: Epic Pack Four
0 ETH0.000561631
Claim88382642019-10-30 4:40:461602 days ago1572410446IN
GU: Epic Pack Four
0 ETH0.000576581
Claim88349412019-10-29 16:05:231602 days ago1572365123IN
GU: Epic Pack Four
0 ETH0.010828122
Claim88348442019-10-29 15:45:381602 days ago1572363938IN
GU: Epic Pack Four
0 ETH0.000559811
Claim88348232019-10-29 15:40:411602 days ago1572363641IN
GU: Epic Pack Four
0 ETH0.001153062
Claim88348142019-10-29 15:39:411602 days ago1572363581IN
GU: Epic Pack Four
0 ETH0.006537582
Claim88348112019-10-29 15:39:041602 days ago1572363544IN
GU: Epic Pack Four
0 ETH0.010827912
Claim88346362019-10-29 14:52:141602 days ago1572360734IN
GU: Epic Pack Four
0 ETH0.000545331
Claim88344772019-10-29 14:13:141602 days ago1572358394IN
GU: Epic Pack Four
0 ETH0.00054531
Claim88341852019-10-29 13:05:391602 days ago1572354339IN
GU: Epic Pack Four
0 ETH0.001153062
Claim88341262019-10-29 12:51:151602 days ago1572353475IN
GU: Epic Pack Four
0 ETH0.000560231
Claim88341262019-10-29 12:51:151602 days ago1572353475IN
GU: Epic Pack Four
0 ETH0.000561631
Claim88336232019-10-29 10:50:251602 days ago1572346225IN
GU: Epic Pack Four
0 ETH0.000576581
Purchase88329712019-10-29 8:20:391603 days ago1572337239IN
GU: Epic Pack Four
0.075 ETH0.0013360914
Callback88327572019-10-29 7:31:051603 days ago1572334265IN
GU: Epic Pack Four
0 ETH0.0004590820
Callback88327572019-10-29 7:31:051603 days ago1572334265IN
GU: Epic Pack Four
0 ETH0.0004590820
Callback88327572019-10-29 7:31:051603 days ago1572334265IN
GU: Epic Pack Four
0 ETH0.000941320
Purchase88327542019-10-29 7:30:241603 days ago1572334224IN
GU: Epic Pack Four
0.075 ETH0.000859079
Callback88324892019-10-29 6:27:571603 days ago1572330477IN
GU: Epic Pack Four
0 ETH0.0004361219
Callback88324882019-10-29 6:27:401603 days ago1572330460IN
GU: Epic Pack Four
0 ETH0.0008942319
Purchase88324852019-10-29 6:27:271603 days ago1572330447IN
GU: Epic Pack Four
0.075 ETH0.000763069
Callback88324402019-10-29 6:17:021603 days ago1572329822IN
GU: Epic Pack Four
0 ETH0.0008071617.15
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
88619142019-11-02 23:59:521598 days ago1572739192
GU: Epic Pack Four
0.0675 ETH
88619142019-11-02 23:59:521598 days ago1572739192
GU: Epic Pack Four
0.0075 ETH
88329712019-10-29 8:20:391603 days ago1572337239
GU: Epic Pack Four
0.0675 ETH
88329712019-10-29 8:20:391603 days ago1572337239
GU: Epic Pack Four
0.0075 ETH
88327542019-10-29 7:30:241603 days ago1572334224
GU: Epic Pack Four
0.0675 ETH
88327542019-10-29 7:30:241603 days ago1572334224
GU: Epic Pack Four
0.0075 ETH
88324852019-10-29 6:27:271603 days ago1572330447
GU: Epic Pack Four
0.075 ETH
88324382019-10-29 6:16:451603 days ago1572329805
GU: Epic Pack Four
0.45 ETH
88322292019-10-29 5:28:551603 days ago1572326935
GU: Epic Pack Four
0.45 ETH
88322172019-10-29 5:26:141603 days ago1572326774
GU: Epic Pack Four
0.0675 ETH
88322172019-10-29 5:26:141603 days ago1572326774
GU: Epic Pack Four
0.0075 ETH
88317542019-10-29 3:37:331603 days ago1572320253
GU: Epic Pack Four
0.45 ETH
88316562019-10-29 3:14:071603 days ago1572318847
GU: Epic Pack Four
0.0675 ETH
88316562019-10-29 3:14:071603 days ago1572318847
GU: Epic Pack Four
0.0075 ETH
88315882019-10-29 2:54:341603 days ago1572317674
GU: Epic Pack Four
0.405 ETH
88315882019-10-29 2:54:341603 days ago1572317674
GU: Epic Pack Four
0.045 ETH
88315822019-10-29 2:53:361603 days ago1572317616
GU: Epic Pack Four
0.405 ETH
88315822019-10-29 2:53:361603 days ago1572317616
GU: Epic Pack Four
0.045 ETH
88314862019-10-29 2:29:381603 days ago1572316178
GU: Epic Pack Four
0.45 ETH
88313402019-10-29 1:58:291603 days ago1572314309
GU: Epic Pack Four
0.405 ETH
88313402019-10-29 1:58:291603 days ago1572314309
GU: Epic Pack Four
0.045 ETH
88310332019-10-29 0:46:311603 days ago1572309991
GU: Epic Pack Four
0.0675 ETH
88310332019-10-29 0:46:311603 days ago1572309991
GU: Epic Pack Four
0.0075 ETH
88309822019-10-29 0:37:001603 days ago1572309420
GU: Epic Pack Four
0.0675 ETH
88309822019-10-29 0:37:001603 days ago1572309420
GU: Epic Pack Four
0.0075 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EpicPackFour

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 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 EpicPackFour is PackFourMultiplier {
    
    function basePrice() public returns (uint) {
        return 75 finney;
    }

    constructor(PreviousInterface _old, address[] _packs, MigrationInterface _core, CappedVault vault, FirstPheonix _pheonix) 
        public PackFourMultiplier(_old, _packs, _core, vault, _pheonix) {
        
    }  
    
    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 = _getEpicPlusRarity(rarityRandom);
        } else {
            rarity = _getCommonPlusRarity(rarityRandom);
        }

        purity = _getPurity(purityOne, purityTwo);
    
        proto = migration.getRandomCard(rarity, protoRandom);

        return (proto, purity);
    } 

    
}

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

60806040526002805460a060020a60ff02191690556005805462ff00001961ffff19918216600f17166201000017909155600780549091166003179055600880547405000000000000000000000000000000000000000060a060020a61ffff02199091161790553480156200007357600080fd5b5060405162001fde38038062001fde8339810160409081528151602080840151928401516060850151608086015160008054600160a060020a03808616600160a060020a031992831617909255625aa7456001556002805482163317905560038054928516929091169190911790559490950180519395909491939092869186918691869186916200010c916006919087019062000158565b50600780546201000060b060020a03191662010000600160a060020a039384160217905560088054600160a060020a031916959091169490941790935550620001ec9650505050505050565b828054828255906000526020600020908101928215620001b0579160200282015b82811115620001b05782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000179565b50620001be929150620001c2565b5090565b620001e991905b80821115620001be578054600160a060020a0319168155600101620001c9565b90565b611de280620001fc6000396000f30060806040526004361061017c5763ffffffff60e060020a60003504166306a628d4811461018157806313af4035146101ac5780631705a3bd146101cf57806317634514146102005780631b3ed72214610227578063379607f514610253578063396c82281461026b5780633ccfd60b146102865780633f4ba83a1461029b57806345d63b66146102b05780635c975abb146102c85780635f9602e8146102f15780636bc3e4a8146103065780636dc7a627146103505780638392fe31146103655780638456cb59146103c15780638be4339b146103d65780638da5cb5b146103eb5780639a1f6a0f14610400578063b01d5b631461041c578063b84c13921461043e578063bd6cac4f14610456578063becd283f14610477578063c2f0bb291461048c578063c503101e146104d2578063c7876ea4146104ec578063ca2bf04714610501578063d42a5011146105b2578063e3f7faaf146105ce578063eb1098b8146105ed578063fbfa77cf14610602578063ff585caf14610617575b600080fd5b34801561018d57600080fd5b5061019661062f565b6040805160ff9092168252519081900360200190f35b3480156101b857600080fd5b506101cd600160a060020a0360043516610634565b005b3480156101db57600080fd5b506101e461067a565b60408051600160a060020a039092168252519081900360200190f35b34801561020c57600080fd5b50610215610689565b60408051918252519081900360200190f35b34801561023357600080fd5b5061023c61068f565b6040805161ffff9092168252519081900360200190f35b34801561025f57600080fd5b506101cd600435610699565b6101cd61ffff60043516600160a060020a036024351661098b565b34801561029257600080fd5b506101cd6109b1565b3480156102a757600080fd5b506101cd610a05565b3480156102bc57600080fd5b506101cd600435610a7d565b3480156102d457600080fd5b506102dd610b21565b604080519115158252519081900360200190f35b3480156102fd57600080fd5b5061023c610b31565b34801561031257600080fd5b5061032a600160a060020a0360043516602435610b3b565b6040805161ffff9093168352600160a060020a0390911660208301528051918290030190f35b34801561035c57600080fd5b506102dd610fc2565b34801561037157600080fd5b5061037d600435610fd1565b6040805161ffff9687168152949095166020850152600160a060020a0390921683850152606083015267ffffffffffffffff16608082015290519081900360a00190f35b3480156103cd57600080fd5b506101cd61102d565b3480156103e257600080fd5b5061023c6110aa565b3480156103f757600080fd5b506101e46110b4565b34801561040c57600080fd5b506101cd61ffff600435166110c3565b6101cd600160a060020a0360043581169061ffff6024351690604435166110f2565b34801561044a57600080fd5b506101e4600435611119565b34801561046257600080fd5b506102dd600160a060020a0360043516611141565b34801561048357600080fd5b5061021561119f565b34801561049857600080fd5b506104b161ffff6004351660ff602435166044356111a5565b6040805161ffff938416815291909216602082015281519081900390910190f35b3480156104de57600080fd5b506101cd60043515156112bf565b3480156104f857600080fd5b506102156112f2565b34801561050d57600080fd5b506105196004356112fe565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561055d578181015183820152602001610545565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561059c578181015183820152602001610584565b5050505090500194505050505060405180910390f35b3480156105be57600080fd5b506101cd61ffff600435166114c3565b3480156105da57600080fd5b5061021560043561ffff6024351661150d565b3480156105f957600080fd5b5061023c61154e565b34801561060e57600080fd5b506101e461155f565b34801561062357600080fd5b506101cd60043561156e565b600590565b600254600160a060020a0316331461064b57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60015481565b60075461ffff1681565b6000806000806000806000806060600080600060048d8154811015156106bb57fe5b90600052602060002090600302019b50600560029054906101000a900460ff1615156106e657600080fd5b8b5460018d01546201000090910461ffff169950975061070461062f565b8c54909750600160a060020a03640100000000820416965061ffff16945087151561072e57600080fd5b600061ffff8a161161073f57600080fd5b8660ff1660405190808252806020026020018201604052801561076c578160200160208202803883390190505b5093508861ffff1661077c6110aa565b860161ffff16116107965761078f6110aa565b8501610798565b885b925061ffff808616908416116107ad57600080fd5b8491505b8261ffff168261ffff161015610964575060005b8660ff168160ff1610156108c4576107de82828a6111a5565b809b50819c5050506000809054906101000a9004600160a060020a0316600160a060020a031663fb36eba1878d8d6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018361ffff1661ffff1681526020018261ffff1661ffff1681526020019350505050602060405180830381600087803b15801561087557600080fd5b505af1158015610889573d6000803e3d6000fd5b505050506040513d602081101561089f57600080fd5b50518451859060ff84169081106108b257fe5b602090810290910101526001016107c5565b85600160a060020a03168d7f69ac64af86d3ef40c9def928534f6a6a9e12d85ec3af2948bd66b802afcc10468960ff16850287604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561094557818101518382015260200161092d565b50505050905001935050505060405180910390a36001909101906107b1565b5050895461ffff1981169390910361ffff9182160116919091179097555050505050505050565b60025460a060020a900460ff16156109a257600080fd5b6109ad338383611743565b5050565b600254600160a060020a031633146109c857600080fd5b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610a02573d6000803e3d6000fd5b50565b600254600160a060020a03163314610a1c57600080fd5b60025460a060020a900460ff161515610a3457600080fd5b6002805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000600482815481101515610a8e57fe5b9060005260206000209060030201905080600101546000141515610ab157600080fd5b600281015467ffffffffffffffff9081166101000116431015610ad357600080fd5b60028101805467ffffffffffffffff19164367ffffffffffffffff1617905560405182907f29ef13d2827ff333d3fde4646988c3a7db16de1210f0c0b613fd0ac9773e4e7b90600090a25050565b60025460a060020a900460ff1681565b60055461ffff1681565b600080600080600080600080610b4f611d88565b600080610b5b8d611141565b1515610b6657600080fd5b610b6e6119ea565b98508c600160a060020a031663379607f58d6040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b158015610bb957600080fd5b505af1158015610bcd573d6000803e3d6000fd5b50505050610bd96119ea565b9750888811610be757600080fd5b8888039650600561ffff88160661ffff1615610c0257600080fd5b600561ffff8816600754600854604080517f6352211e0000000000000000000000000000000000000000000000000000000081526000198e016004820152905194909304995061ffff90911689029750600160a060020a031691636352211e916024808201926020929091908290030181600087803b158015610c8457600080fd5b505af1158015610c98573d6000803e3d6000fd5b505050506040513d6020811015610cae57600080fd5b50516040805160a081018252600080825261ffff8981166020848101828152600160a060020a038089168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519599509297509095509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd928290030190a3600754604080517ff88218e0000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151620100009093049091169163f88218e0916024808201926020929091908290030181600087803b158015610e9657600080fd5b505af1158015610eaa573d6000803e3d6000fd5b505050506040513d6020811015610ec057600080fd5b5050604080518a8152602081018a905281517f31a1adb447f9b6b89f24bf104f0b7a06975ad9f35670dbfaf7ce29190ec54762929181900390910190a160085461ffff60a060020a909104811690871611610faf575060005b8661ffff16811015610faf5760008054604080517f454b0608000000000000000000000000000000000000000000000000000000008152848c036000190160048201529051600160a060020a039092169263454b06089260248084019382900301818387803b158015610f8b57600080fd5b505af1158015610f9f573d6000803e3d6000fd5b505060019092019150610f199050565b50929b919a509098505050505050505050565b60055462010000900460ff1681565b6004805482908110610fdf57fe5b600091825260209091206003909102018054600182015460029092015461ffff80831694506201000083041692640100000000909204600160a060020a0316919067ffffffffffffffff1685565b600254600160a060020a0316331461104457600080fd5b60025460a060020a900460ff161561105b57600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60055461ffff1690565b600254600160a060020a031681565b600254600160a060020a031633146110da57600080fd5b6005805461ffff191661ffff92909216919091179055565b60025460a060020a900460ff161561110957600080fd5b611114838383611743565b505050565b600680548290811061112757fe5b600091825260209091200154600160a060020a0316905081565b6000805b6006548110156111945782600160a060020a031660068281548110151561116857fe5b600091825260209091200154600160a060020a0316141561118c5760019150611199565b600101611145565b600091505b50919050565b60045490565b6000806000806000806000806111bc8b8b8b611b07565b9399509197509195509093509150600460ff8b1614156111e6576111df85611c6e565b90506111f2565b6111ef85611caa565b90505b6111fc8383611d15565b6000546040517fcaa19168000000000000000000000000000000000000000000000000000000008152919850600160a060020a03169063caa1916890839087906004908101908190849081111561124f57fe5b60ff1681526020018261ffff1661ffff16815260200192505050602060405180830381600087803b15801561128357600080fd5b505af1158015611297573d6000803e3d6000fd5b505050506040513d60208110156112ad57600080fd5b50519750505050505050935093915050565b600254600160a060020a031633146112d657600080fd5b60058054911515620100000262ff000019909216919091179055565b67010a741a4627800090565b606080611309611d88565b600080600080600080600060048b81548110151561132357fe5b60009182526020918290206040805160a0810182526003909302909101805461ffff808216855262010000820416948401859052600160a060020a03640100000000909104169183019190915260018101546060830181905260029091015467ffffffffffffffff16608083015290995090955093506113a161062f565b9250848360ff160261ffff166040519080825280602002602001820160405280156113d6578160200160208202803883390190505b509850848360ff160261ffff1660405190808252806020026020018201604052801561140c578160200160208202803883390190505b509950600091505b8461ffff168261ffff1610156114b6575060005b8260ff168160ff1610156114ab576114418282866111a5565b8a51919850965086908a9061ffff60ff8781168702908616011690811061146457fe5b61ffff928316602091820290920101528a5188918c9160ff87811687029086160190911690811061149157fe5b61ffff909216602092830290910190910152600101611428565b600190910190611414565b5050505050505050915091565b600254600160a060020a031633146114da57600080fd5b6008805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b60015460009043036117708104601481101561153c5761ffff8416606460148390038702048603029250611546565b8361ffff16850292505b505092915050565b60085460a060020a900461ffff1681565b600354600160a060020a031681565b600080600060048481548110151561158257fe5b90600052602060002090600302019250826001015460001415156115a557600080fd5b600283015467ffffffffffffffff1660ff194301106115c357600080fd5b60028301544367ffffffffffffffff908116911614156115e257600080fd5b600283015483546040805167ffffffffffffffff9093164060208085018290526401000000008404600160a060020a03166c0100000000000000000000000090810286850152300260548601526201000090930461ffff167e010000000000000000000000000000000000000000000000000000000000000260688501528151808503604a018152606a90940191829052835190955090918291908401908083835b602083106116a35780518252601f199092019160209182019101611684565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209350505082151590506116de57600080fd5b6001830181905582546040805162010000830461ffff168152602081018490528151640100000000909304600160a060020a03169287927fedb5ce4012b6e9c5904afa2ffad9811d5c2e91e6bca8914cf7e3ffc28e630c57928290030190a350505050565b600061174d611d88565b60008061ffff8616811061176057600080fd5b600160a060020a03858116908816141561177957600080fd5b61178a6117846112f2565b8761150d565b93503484111561179957600080fd5b6040805160a081018252600080825261ffff8981166020808501828152600160a060020a03808f168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519397509195509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd9281900390910190a3600160a060020a038516156119a65750604051600a840490600160a060020a0386169082156108fc029083906000818181858888f1935050505015801561195a573d6000803e3d6000fd5b5060408051828152600160a060020a03898116602083015282519684900396908816927f13aa7090696e2a1d666cfc6046f2f72f1c4e0290649b47bab28d1b370ad73783928290030190a25b600354604051600160a060020a039091169085156108fc029086906000818181858888f193505050501580156119e0573d6000803e3d6000fd5b5050505050505050565b600854604080517f524773ce0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163524773ce91600480830192602092919082900301818787803b158015611a4957600080fd5b505af1158015611a5d573d6000803e3d6000fd5b505050506040513d6020811015611a7357600080fd5b5051600854604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b158015611ad557600080fd5b505af1158015611ae9573d6000803e3d6000fd5b505050506040513d6020811015611aff57600080fd5b505101905090565b6000806000806000878688604051602001808461ffff1661ffff167e010000000000000000000000000000000000000000000000000000000000000281526002018381526020018260ff1660ff167f010000000000000000000000000000000000000000000000000000000000000002815260010193505050506040516020818303038152906040526040518082805190602001908083835b60208310611bbf5780518252601f199092019160209182019101611ba0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049450620f4240611c03866004600a611d68565b811515611c0c57fe5b0693506103e8611c1f8660026004611d68565b811515611c2857fe5b0692506103e8611c3b8660026006611d68565b811515611c4457fe5b06915061ffff611c578660026008611d68565b811515611c6057fe5b069050939792965093509350565b60008163ffffffff16620f423f1415611c8957506004611ca5565b620efa6f63ffffffff831610611ca157506003611ca5565b5060025b919050565b60008163ffffffff16620f423f1415611cc557506004611ca5565b620f3bc963ffffffff831610611cdd57506003611ca5565b620f0e8d63ffffffff831610611cf557506002611ca5565b620e1cda63ffffffff831610611d0d57506001611ca5565b506000611ca5565b60006103e661ffff841610611d2f5750610bb88101611d62565b6103dc61ffff841610611d4757506107d08101611d62565b6103aa61ffff841610611d5f57506103e88101611d62565b50805b92915050565b6008828102600290810a60001990810192840201900a8404169392505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600a165627a7a72305820e3b2a3ffab668c5b4e2f1a0f6bbbe36547c93331b309a946a1f6fd0dc33f0ad50029000000000000000000000000512fbd15bde6570ff09e4438af27ede60402451500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd689000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e5dc9d1b58fd5a95fc20a6c6afaa76d44d70a7df0000000000000000000000006e0051c750b81f583f42f93a48d56497779992d8

Deployed Bytecode

0x60806040526004361061017c5763ffffffff60e060020a60003504166306a628d4811461018157806313af4035146101ac5780631705a3bd146101cf57806317634514146102005780631b3ed72214610227578063379607f514610253578063396c82281461026b5780633ccfd60b146102865780633f4ba83a1461029b57806345d63b66146102b05780635c975abb146102c85780635f9602e8146102f15780636bc3e4a8146103065780636dc7a627146103505780638392fe31146103655780638456cb59146103c15780638be4339b146103d65780638da5cb5b146103eb5780639a1f6a0f14610400578063b01d5b631461041c578063b84c13921461043e578063bd6cac4f14610456578063becd283f14610477578063c2f0bb291461048c578063c503101e146104d2578063c7876ea4146104ec578063ca2bf04714610501578063d42a5011146105b2578063e3f7faaf146105ce578063eb1098b8146105ed578063fbfa77cf14610602578063ff585caf14610617575b600080fd5b34801561018d57600080fd5b5061019661062f565b6040805160ff9092168252519081900360200190f35b3480156101b857600080fd5b506101cd600160a060020a0360043516610634565b005b3480156101db57600080fd5b506101e461067a565b60408051600160a060020a039092168252519081900360200190f35b34801561020c57600080fd5b50610215610689565b60408051918252519081900360200190f35b34801561023357600080fd5b5061023c61068f565b6040805161ffff9092168252519081900360200190f35b34801561025f57600080fd5b506101cd600435610699565b6101cd61ffff60043516600160a060020a036024351661098b565b34801561029257600080fd5b506101cd6109b1565b3480156102a757600080fd5b506101cd610a05565b3480156102bc57600080fd5b506101cd600435610a7d565b3480156102d457600080fd5b506102dd610b21565b604080519115158252519081900360200190f35b3480156102fd57600080fd5b5061023c610b31565b34801561031257600080fd5b5061032a600160a060020a0360043516602435610b3b565b6040805161ffff9093168352600160a060020a0390911660208301528051918290030190f35b34801561035c57600080fd5b506102dd610fc2565b34801561037157600080fd5b5061037d600435610fd1565b6040805161ffff9687168152949095166020850152600160a060020a0390921683850152606083015267ffffffffffffffff16608082015290519081900360a00190f35b3480156103cd57600080fd5b506101cd61102d565b3480156103e257600080fd5b5061023c6110aa565b3480156103f757600080fd5b506101e46110b4565b34801561040c57600080fd5b506101cd61ffff600435166110c3565b6101cd600160a060020a0360043581169061ffff6024351690604435166110f2565b34801561044a57600080fd5b506101e4600435611119565b34801561046257600080fd5b506102dd600160a060020a0360043516611141565b34801561048357600080fd5b5061021561119f565b34801561049857600080fd5b506104b161ffff6004351660ff602435166044356111a5565b6040805161ffff938416815291909216602082015281519081900390910190f35b3480156104de57600080fd5b506101cd60043515156112bf565b3480156104f857600080fd5b506102156112f2565b34801561050d57600080fd5b506105196004356112fe565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561055d578181015183820152602001610545565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561059c578181015183820152602001610584565b5050505090500194505050505060405180910390f35b3480156105be57600080fd5b506101cd61ffff600435166114c3565b3480156105da57600080fd5b5061021560043561ffff6024351661150d565b3480156105f957600080fd5b5061023c61154e565b34801561060e57600080fd5b506101e461155f565b34801561062357600080fd5b506101cd60043561156e565b600590565b600254600160a060020a0316331461064b57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60015481565b60075461ffff1681565b6000806000806000806000806060600080600060048d8154811015156106bb57fe5b90600052602060002090600302019b50600560029054906101000a900460ff1615156106e657600080fd5b8b5460018d01546201000090910461ffff169950975061070461062f565b8c54909750600160a060020a03640100000000820416965061ffff16945087151561072e57600080fd5b600061ffff8a161161073f57600080fd5b8660ff1660405190808252806020026020018201604052801561076c578160200160208202803883390190505b5093508861ffff1661077c6110aa565b860161ffff16116107965761078f6110aa565b8501610798565b885b925061ffff808616908416116107ad57600080fd5b8491505b8261ffff168261ffff161015610964575060005b8660ff168160ff1610156108c4576107de82828a6111a5565b809b50819c5050506000809054906101000a9004600160a060020a0316600160a060020a031663fb36eba1878d8d6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018361ffff1661ffff1681526020018261ffff1661ffff1681526020019350505050602060405180830381600087803b15801561087557600080fd5b505af1158015610889573d6000803e3d6000fd5b505050506040513d602081101561089f57600080fd5b50518451859060ff84169081106108b257fe5b602090810290910101526001016107c5565b85600160a060020a03168d7f69ac64af86d3ef40c9def928534f6a6a9e12d85ec3af2948bd66b802afcc10468960ff16850287604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561094557818101518382015260200161092d565b50505050905001935050505060405180910390a36001909101906107b1565b5050895461ffff1981169390910361ffff9182160116919091179097555050505050505050565b60025460a060020a900460ff16156109a257600080fd5b6109ad338383611743565b5050565b600254600160a060020a031633146109c857600080fd5b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610a02573d6000803e3d6000fd5b50565b600254600160a060020a03163314610a1c57600080fd5b60025460a060020a900460ff161515610a3457600080fd5b6002805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000600482815481101515610a8e57fe5b9060005260206000209060030201905080600101546000141515610ab157600080fd5b600281015467ffffffffffffffff9081166101000116431015610ad357600080fd5b60028101805467ffffffffffffffff19164367ffffffffffffffff1617905560405182907f29ef13d2827ff333d3fde4646988c3a7db16de1210f0c0b613fd0ac9773e4e7b90600090a25050565b60025460a060020a900460ff1681565b60055461ffff1681565b600080600080600080600080610b4f611d88565b600080610b5b8d611141565b1515610b6657600080fd5b610b6e6119ea565b98508c600160a060020a031663379607f58d6040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b158015610bb957600080fd5b505af1158015610bcd573d6000803e3d6000fd5b50505050610bd96119ea565b9750888811610be757600080fd5b8888039650600561ffff88160661ffff1615610c0257600080fd5b600561ffff8816600754600854604080517f6352211e0000000000000000000000000000000000000000000000000000000081526000198e016004820152905194909304995061ffff90911689029750600160a060020a031691636352211e916024808201926020929091908290030181600087803b158015610c8457600080fd5b505af1158015610c98573d6000803e3d6000fd5b505050506040513d6020811015610cae57600080fd5b50516040805160a081018252600080825261ffff8981166020848101828152600160a060020a038089168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519599509297509095509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd928290030190a3600754604080517ff88218e0000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151620100009093049091169163f88218e0916024808201926020929091908290030181600087803b158015610e9657600080fd5b505af1158015610eaa573d6000803e3d6000fd5b505050506040513d6020811015610ec057600080fd5b5050604080518a8152602081018a905281517f31a1adb447f9b6b89f24bf104f0b7a06975ad9f35670dbfaf7ce29190ec54762929181900390910190a160085461ffff60a060020a909104811690871611610faf575060005b8661ffff16811015610faf5760008054604080517f454b0608000000000000000000000000000000000000000000000000000000008152848c036000190160048201529051600160a060020a039092169263454b06089260248084019382900301818387803b158015610f8b57600080fd5b505af1158015610f9f573d6000803e3d6000fd5b505060019092019150610f199050565b50929b919a509098505050505050505050565b60055462010000900460ff1681565b6004805482908110610fdf57fe5b600091825260209091206003909102018054600182015460029092015461ffff80831694506201000083041692640100000000909204600160a060020a0316919067ffffffffffffffff1685565b600254600160a060020a0316331461104457600080fd5b60025460a060020a900460ff161561105b57600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60055461ffff1690565b600254600160a060020a031681565b600254600160a060020a031633146110da57600080fd5b6005805461ffff191661ffff92909216919091179055565b60025460a060020a900460ff161561110957600080fd5b611114838383611743565b505050565b600680548290811061112757fe5b600091825260209091200154600160a060020a0316905081565b6000805b6006548110156111945782600160a060020a031660068281548110151561116857fe5b600091825260209091200154600160a060020a0316141561118c5760019150611199565b600101611145565b600091505b50919050565b60045490565b6000806000806000806000806111bc8b8b8b611b07565b9399509197509195509093509150600460ff8b1614156111e6576111df85611c6e565b90506111f2565b6111ef85611caa565b90505b6111fc8383611d15565b6000546040517fcaa19168000000000000000000000000000000000000000000000000000000008152919850600160a060020a03169063caa1916890839087906004908101908190849081111561124f57fe5b60ff1681526020018261ffff1661ffff16815260200192505050602060405180830381600087803b15801561128357600080fd5b505af1158015611297573d6000803e3d6000fd5b505050506040513d60208110156112ad57600080fd5b50519750505050505050935093915050565b600254600160a060020a031633146112d657600080fd5b60058054911515620100000262ff000019909216919091179055565b67010a741a4627800090565b606080611309611d88565b600080600080600080600060048b81548110151561132357fe5b60009182526020918290206040805160a0810182526003909302909101805461ffff808216855262010000820416948401859052600160a060020a03640100000000909104169183019190915260018101546060830181905260029091015467ffffffffffffffff16608083015290995090955093506113a161062f565b9250848360ff160261ffff166040519080825280602002602001820160405280156113d6578160200160208202803883390190505b509850848360ff160261ffff1660405190808252806020026020018201604052801561140c578160200160208202803883390190505b509950600091505b8461ffff168261ffff1610156114b6575060005b8260ff168160ff1610156114ab576114418282866111a5565b8a51919850965086908a9061ffff60ff8781168702908616011690811061146457fe5b61ffff928316602091820290920101528a5188918c9160ff87811687029086160190911690811061149157fe5b61ffff909216602092830290910190910152600101611428565b600190910190611414565b5050505050505050915091565b600254600160a060020a031633146114da57600080fd5b6008805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b60015460009043036117708104601481101561153c5761ffff8416606460148390038702048603029250611546565b8361ffff16850292505b505092915050565b60085460a060020a900461ffff1681565b600354600160a060020a031681565b600080600060048481548110151561158257fe5b90600052602060002090600302019250826001015460001415156115a557600080fd5b600283015467ffffffffffffffff1660ff194301106115c357600080fd5b60028301544367ffffffffffffffff908116911614156115e257600080fd5b600283015483546040805167ffffffffffffffff9093164060208085018290526401000000008404600160a060020a03166c0100000000000000000000000090810286850152300260548601526201000090930461ffff167e010000000000000000000000000000000000000000000000000000000000000260688501528151808503604a018152606a90940191829052835190955090918291908401908083835b602083106116a35780518252601f199092019160209182019101611684565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209350505082151590506116de57600080fd5b6001830181905582546040805162010000830461ffff168152602081018490528151640100000000909304600160a060020a03169287927fedb5ce4012b6e9c5904afa2ffad9811d5c2e91e6bca8914cf7e3ffc28e630c57928290030190a350505050565b600061174d611d88565b60008061ffff8616811061176057600080fd5b600160a060020a03858116908816141561177957600080fd5b61178a6117846112f2565b8761150d565b93503484111561179957600080fd5b6040805160a081018252600080825261ffff8981166020808501828152600160a060020a03808f168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519397509195509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd9281900390910190a3600160a060020a038516156119a65750604051600a840490600160a060020a0386169082156108fc029083906000818181858888f1935050505015801561195a573d6000803e3d6000fd5b5060408051828152600160a060020a03898116602083015282519684900396908816927f13aa7090696e2a1d666cfc6046f2f72f1c4e0290649b47bab28d1b370ad73783928290030190a25b600354604051600160a060020a039091169085156108fc029086906000818181858888f193505050501580156119e0573d6000803e3d6000fd5b5050505050505050565b600854604080517f524773ce0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163524773ce91600480830192602092919082900301818787803b158015611a4957600080fd5b505af1158015611a5d573d6000803e3d6000fd5b505050506040513d6020811015611a7357600080fd5b5051600854604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b158015611ad557600080fd5b505af1158015611ae9573d6000803e3d6000fd5b505050506040513d6020811015611aff57600080fd5b505101905090565b6000806000806000878688604051602001808461ffff1661ffff167e010000000000000000000000000000000000000000000000000000000000000281526002018381526020018260ff1660ff167f010000000000000000000000000000000000000000000000000000000000000002815260010193505050506040516020818303038152906040526040518082805190602001908083835b60208310611bbf5780518252601f199092019160209182019101611ba0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049450620f4240611c03866004600a611d68565b811515611c0c57fe5b0693506103e8611c1f8660026004611d68565b811515611c2857fe5b0692506103e8611c3b8660026006611d68565b811515611c4457fe5b06915061ffff611c578660026008611d68565b811515611c6057fe5b069050939792965093509350565b60008163ffffffff16620f423f1415611c8957506004611ca5565b620efa6f63ffffffff831610611ca157506003611ca5565b5060025b919050565b60008163ffffffff16620f423f1415611cc557506004611ca5565b620f3bc963ffffffff831610611cdd57506003611ca5565b620f0e8d63ffffffff831610611cf557506002611ca5565b620e1cda63ffffffff831610611d0d57506001611ca5565b506000611ca5565b60006103e661ffff841610611d2f5750610bb88101611d62565b6103dc61ffff841610611d4757506107d08101611d62565b6103aa61ffff841610611d5f57506103e88101611d62565b50805b92915050565b6008828102600290810a60001990810192840201900a8404169392505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600a165627a7a72305820e3b2a3ffab668c5b4e2f1a0f6bbbe36547c93331b309a946a1f6fd0dc33f0ad50029

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

000000000000000000000000512fbd15bde6570ff09e4438af27ede60402451500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd689000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e5dc9d1b58fd5a95fc20a6c6afaa76d44d70a7df0000000000000000000000006e0051c750b81f583f42f93a48d56497779992d8

-----Decoded View---------------
Arg [0] : _old (address): 0x512Fbd15BDE6570ff09E4438Af27edE604024515
Arg [1] : _packs (address[]): 0xe5dC9d1B58fD5a95fC20A6c6AfAA76d44D70A7DF,0x6e0051C750b81f583f42f93A48d56497779992d8
Arg [2] : _core (address): 0x6EbeAf8e8E946F0716E6533A6f2cefc83f60e8Ab
Arg [3] : vault (address): 0x91B9d2835AD914bc1dcFE09Bd1816FeBd04fd689
Arg [4] : _pheonix (address): 0x657C8982D63F58Ddd6A54c75591a572D4180ceC8

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000512fbd15bde6570ff09e4438af27ede604024515
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab
Arg [3] : 00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd689
Arg [4] : 000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec8
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 000000000000000000000000e5dc9d1b58fd5a95fc20a6c6afaa76d44d70a7df
Arg [7] : 0000000000000000000000006e0051c750b81f583f42f93a48d56497779992d8


Swarm Source

bzzr://e3b2a3ffab668c5b4e2f1a0f6bbbe36547c93331b309a946a1f6fd0dc33f0ad5

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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