Latest 25 from a total of 3,993 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 20589563 | 548 days ago | IN | 0 ETH | 0.00002455 | ||||
| Transfer | 13765378 | 1536 days ago | IN | 0 ETH | 0.00142732 | ||||
| Set Can Claim | 8839289 | 2307 days ago | IN | 0 ETH | 0.00011082 | ||||
| Callback | 8832821 | 2308 days ago | IN | 0 ETH | 0.00094218 | ||||
| Purchase | 8832759 | 2308 days ago | IN | 1 ETH | 0.00123747 | ||||
| Callback | 8832349 | 2308 days ago | IN | 0 ETH | 0.00039096 | ||||
| Callback | 8832347 | 2308 days ago | IN | 0 ETH | 0.00080085 | ||||
| Purchase | 8832342 | 2308 days ago | IN | 1 ETH | 0.00100562 | ||||
| Callback | 8831206 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Purchase | 8831202 | 2308 days ago | IN | 1 ETH | 0.00095269 | ||||
| Callback | 8831195 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Purchase | 8831191 | 2308 days ago | IN | 100 ETH | 0.00171342 | ||||
| Callback | 8831131 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Purchase | 8831126 | 2308 days ago | IN | 1 ETH | 0.00095269 | ||||
| Callback | 8830883 | 2308 days ago | IN | 0 ETH | 0.00027597 | ||||
| Callback | 8830883 | 2308 days ago | IN | 0 ETH | 0.00027597 | ||||
| Callback | 8830883 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Purchase For | 8830879 | 2308 days ago | IN | 1 ETH | 0.00116628 | ||||
| Callback | 8830744 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Callback | 8830604 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Purchase | 8830601 | 2308 days ago | IN | 1 ETH | 0.00095269 | ||||
| Callback | 8830414 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Callback | 8830414 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Callback | 8830382 | 2308 days ago | IN | 0 ETH | 0.0005653 | ||||
| Callback | 8830382 | 2308 days ago | IN | 0 ETH | 0.0005653 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 20589563 | 548 days ago | 0.98 ETH | ||||
| - | 8832759 | 2308 days ago | 1 ETH | ||||
| - | 8832342 | 2308 days ago | 0.9 ETH | ||||
| - | 8832342 | 2308 days ago | 0.1 ETH | ||||
| - | 8831202 | 2308 days ago | 0.9 ETH | ||||
| - | 8831202 | 2308 days ago | 0.1 ETH | ||||
| - | 8831191 | 2308 days ago | 100 ETH | ||||
| - | 8831126 | 2308 days ago | 0.9 ETH | ||||
| - | 8831126 | 2308 days ago | 0.1 ETH | ||||
| - | 8830879 | 2308 days ago | 0.9 ETH | ||||
| - | 8830879 | 2308 days ago | 0.1 ETH | ||||
| - | 8830742 | 2308 days ago | 1 ETH | ||||
| - | 8830742 | 2308 days ago | 1 ETH | ||||
| - | 8830601 | 2308 days ago | 0.9 ETH | ||||
| - | 8830601 | 2308 days ago | 0.1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH | ||||
| - | 8830379 | 2308 days ago | 1 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ShinyLegendaryPackFour
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-07-16
*/
pragma solidity 0.4.24;
contract Ownable {
address public owner;
constructor() public {
owner = msg.sender;
}
function setOwner(address _owner) public onlyOwner {
owner = _owner;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}
}
contract Vault is Ownable {
function () public payable {
}
function getBalance() public view returns (uint) {
return address(this).balance;
}
function withdraw(uint amount) public onlyOwner {
require(address(this).balance >= amount);
owner.transfer(amount);
}
function withdrawAll() public onlyOwner {
withdraw(address(this).balance);
}
}
contract ERC20 {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
}
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
// Gas optimization: this is cheaper than asserting 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
contract TournamentPass is ERC20, Ownable {
using SafeMath for uint256;
Vault vault;
constructor(Vault _vault) public {
vault = _vault;
}
mapping(address => uint256) balances;
mapping (address => mapping (address => uint256)) internal allowed;
address[] public minters;
uint256 supply;
uint mintLimit = 20000;
function name() public view returns (string){
return "GU Tournament Passes";
}
function symbol() public view returns (string) {
return "PASS";
}
function addMinter(address minter) public onlyOwner {
minters.push(minter);
}
function totalSupply() public view returns (uint256) {
return supply;
}
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
function isMinter(address test) internal view returns (bool) {
for (uint i = 0; i < minters.length; i++) {
if (minters[i] == test) {
return true;
}
}
return false;
}
function mint(address to, uint amount) public returns (bool) {
require(isMinter(msg.sender));
if (amount.add(supply) > mintLimit) {
return false;
}
supply = supply.add(amount);
balances[to] = balances[to].add(amount);
emit Transfer(address(0), to, amount);
return true;
}
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
function increaseApproval(address spender, uint256 addedValue) public returns (bool) {
allowed[msg.sender][spender] = allowed[msg.sender][spender].add(addedValue);
emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
return true;
}
function decreaseApproval(address spender, uint256 subtractedValue) public returns (bool) {
uint256 oldValue = allowed[msg.sender][spender];
if (subtractedValue > oldValue) {
allowed[msg.sender][spender] = 0;
} else {
allowed[msg.sender][spender] = oldValue.sub(subtractedValue);
}
emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
return true;
}
function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
return allowed[_owner][_spender];
}
uint public price = 250 finney;
function purchase(uint amount) public payable {
require(msg.value >= price.mul(amount));
require(supply.add(amount) <= mintLimit);
supply = supply.add(amount);
balances[msg.sender] = balances[msg.sender].add(amount);
emit Transfer(address(0), msg.sender, amount);
address(vault).transfer(msg.value);
}
}
contract CappedVault is Vault {
uint public limit;
uint withdrawn = 0;
constructor() public {
limit = 33333 ether;
}
function () public payable {
require(total() + msg.value <= limit);
}
function total() public view returns(uint) {
return getBalance() + withdrawn;
}
function withdraw(uint amount) public onlyOwner {
require(address(this).balance >= amount);
owner.transfer(amount);
withdrawn += amount;
}
}
contract PreviousInterface {
function ownerOf(uint id) public view returns (address);
function getCard(uint id) public view returns (uint16, uint16);
function totalSupply() public view returns (uint);
function burnCount() public view returns (uint);
}
contract Pausable is Ownable {
event Pause();
event Unpause();
bool public paused = false;
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*/
modifier whenNotPaused() {
require(!paused);
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*/
modifier whenPaused() {
require(paused);
_;
}
/**
* @dev called by the owner to pause, triggers stopped state
*/
function pause() onlyOwner whenNotPaused public {
paused = true;
emit Pause();
}
/**
* @dev called by the owner to unpause, returns to normal state
*/
function unpause() onlyOwner whenPaused public {
paused = false;
emit Unpause();
}
}
contract Governable {
event Pause();
event Unpause();
address public governor;
bool public paused = false;
constructor() public {
governor = msg.sender;
}
function setGovernor(address _gov) public onlyGovernor {
governor = _gov;
}
modifier onlyGovernor {
require(msg.sender == governor);
_;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*/
modifier whenNotPaused() {
require(!paused);
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*/
modifier whenPaused() {
require(paused);
_;
}
/**
* @dev called by the owner to pause, triggers stopped state
*/
function pause() onlyGovernor whenNotPaused public {
paused = true;
emit Pause();
}
/**
* @dev called by the owner to unpause, returns to normal state
*/
function unpause() onlyGovernor whenPaused public {
paused = false;
emit Unpause();
}
}
contract CardBase is Governable {
struct Card {
uint16 proto;
uint16 purity;
}
function getCard(uint id) public view returns (uint16 proto, uint16 purity) {
Card memory card = cards[id];
return (card.proto, card.purity);
}
function getShine(uint16 purity) public pure returns (uint8) {
return uint8(purity / 1000);
}
Card[] public cards;
}
contract CardProto is CardBase {
event NewProtoCard(
uint16 id, uint8 season, uint8 god,
Rarity rarity, uint8 mana, uint8 attack,
uint8 health, uint8 cardType, uint8 tribe, bool packable
);
struct Limit {
uint64 limit;
bool exists;
}
// limits for mythic cards
mapping(uint16 => Limit) public limits;
// can only set limits once
function setLimit(uint16 id, uint64 limit) public onlyGovernor {
Limit memory l = limits[id];
require(!l.exists);
limits[id] = Limit({
limit: limit,
exists: true
});
}
function getLimit(uint16 id) public view returns (uint64 limit, bool set) {
Limit memory l = limits[id];
return (l.limit, l.exists);
}
// could make these arrays to save gas
// not really necessary - will be update a very limited no of times
mapping(uint8 => bool) public seasonTradable;
mapping(uint8 => bool) public seasonTradabilityLocked;
uint8 public currentSeason;
function makeTradable(uint8 season) public onlyGovernor {
seasonTradable[season] = true;
}
function makeUntradable(uint8 season) public onlyGovernor {
require(!seasonTradabilityLocked[season]);
seasonTradable[season] = false;
}
function makePermanantlyTradable(uint8 season) public onlyGovernor {
require(seasonTradable[season]);
seasonTradabilityLocked[season] = true;
}
function isTradable(uint16 proto) public view returns (bool) {
return seasonTradable[protos[proto].season];
}
function nextSeason() public onlyGovernor {
//Seasons shouldn't go to 0 if there is more than the uint8 should hold, the governor should know this ¯\_(ツ)_/¯ -M
require(currentSeason <= 255);
currentSeason++;
mythic.length = 0;
legendary.length = 0;
epic.length = 0;
rare.length = 0;
common.length = 0;
}
enum Rarity {
Common,
Rare,
Epic,
Legendary,
Mythic
}
uint8 constant SPELL = 1;
uint8 constant MINION = 2;
uint8 constant WEAPON = 3;
uint8 constant HERO = 4;
struct ProtoCard {
bool exists;
uint8 god;
uint8 season;
uint8 cardType;
Rarity rarity;
uint8 mana;
uint8 attack;
uint8 health;
uint8 tribe;
}
// there is a particular design decision driving this:
// need to be able to iterate over mythics only for card generation
// don't store 5 different arrays: have to use 2 ids
// better to bear this cost (2 bytes per proto card)
// rather than 1 byte per instance
uint16 public protoCount;
mapping(uint16 => ProtoCard) protos;
uint16[] public mythic;
uint16[] public legendary;
uint16[] public epic;
uint16[] public rare;
uint16[] public common;
function addProtos(
uint16[] externalIDs, uint8[] gods, Rarity[] rarities, uint8[] manas, uint8[] attacks,
uint8[] healths, uint8[] cardTypes, uint8[] tribes, bool[] packable
) public onlyGovernor returns(uint16) {
for (uint i = 0; i < externalIDs.length; i++) {
ProtoCard memory card = ProtoCard({
exists: true,
god: gods[i],
season: currentSeason,
cardType: cardTypes[i],
rarity: rarities[i],
mana: manas[i],
attack: attacks[i],
health: healths[i],
tribe: tribes[i]
});
_addProto(externalIDs[i], card, packable[i]);
}
}
function addProto(
uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 cardType, uint8 tribe, bool packable
) public onlyGovernor returns(uint16) {
ProtoCard memory card = ProtoCard({
exists: true,
god: god,
season: currentSeason,
cardType: cardType,
rarity: rarity,
mana: mana,
attack: attack,
health: health,
tribe: tribe
});
_addProto(externalID, card, packable);
}
function addWeapon(
uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 durability, bool packable
) public onlyGovernor returns(uint16) {
ProtoCard memory card = ProtoCard({
exists: true,
god: god,
season: currentSeason,
cardType: WEAPON,
rarity: rarity,
mana: mana,
attack: attack,
health: durability,
tribe: 0
});
_addProto(externalID, card, packable);
}
function addSpell(uint16 externalID, uint8 god, Rarity rarity, uint8 mana, bool packable) public onlyGovernor returns(uint16) {
ProtoCard memory card = ProtoCard({
exists: true,
god: god,
season: currentSeason,
cardType: SPELL,
rarity: rarity,
mana: mana,
attack: 0,
health: 0,
tribe: 0
});
_addProto(externalID, card, packable);
}
function addMinion(
uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 tribe, bool packable
) public onlyGovernor returns(uint16) {
ProtoCard memory card = ProtoCard({
exists: true,
god: god,
season: currentSeason,
cardType: MINION,
rarity: rarity,
mana: mana,
attack: attack,
health: health,
tribe: tribe
});
_addProto(externalID, card, packable);
}
function _addProto(uint16 externalID, ProtoCard memory card, bool packable) internal {
require(!protos[externalID].exists);
card.exists = true;
protos[externalID] = card;
protoCount++;
emit NewProtoCard(
externalID, currentSeason, card.god,
card.rarity, card.mana, card.attack,
card.health, card.cardType, card.tribe, packable
);
if (packable) {
Rarity rarity = card.rarity;
if (rarity == Rarity.Common) {
common.push(externalID);
} else if (rarity == Rarity.Rare) {
rare.push(externalID);
} else if (rarity == Rarity.Epic) {
epic.push(externalID);
} else if (rarity == Rarity.Legendary) {
legendary.push(externalID);
} else if (rarity == Rarity.Mythic) {
mythic.push(externalID);
} else {
require(false);
}
}
}
function getProto(uint16 id) public view returns(
bool exists, uint8 god, uint8 season, uint8 cardType, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 tribe
) {
ProtoCard memory proto = protos[id];
return (
proto.exists,
proto.god,
proto.season,
proto.cardType,
proto.rarity,
proto.mana,
proto.attack,
proto.health,
proto.tribe
);
}
function getRandomCard(Rarity rarity, uint16 random) public view returns (uint16) {
// modulo bias is fine - creates rarity tiers etc
// will obviously revert is there are no cards of that type: this is expected - should never happen
if (rarity == Rarity.Common) {
return common[random % common.length];
} else if (rarity == Rarity.Rare) {
return rare[random % rare.length];
} else if (rarity == Rarity.Epic) {
return epic[random % epic.length];
} else if (rarity == Rarity.Legendary) {
return legendary[random % legendary.length];
} else if (rarity == Rarity.Mythic) {
// make sure a mythic is available
uint16 id;
uint64 limit;
bool set;
for (uint i = 0; i < mythic.length; i++) {
id = mythic[(random + i) % mythic.length];
(limit, set) = getLimit(id);
if (set && limit > 0){
return id;
}
}
// if not, they get a legendary :(
return legendary[random % legendary.length];
}
require(false);
return 0;
}
// can never adjust tradable cards
// each season gets a 'balancing beta'
// totally immutable: season, rarity
function replaceProto(
uint16 index, uint8 god, uint8 cardType, uint8 mana, uint8 attack, uint8 health, uint8 tribe
) public onlyGovernor {
ProtoCard memory pc = protos[index];
require(!seasonTradable[pc.season]);
protos[index] = ProtoCard({
exists: true,
god: god,
season: pc.season,
cardType: cardType,
rarity: pc.rarity,
mana: mana,
attack: attack,
health: health,
tribe: tribe
});
}
}
contract MigrationInterface {
function createCard(address user, uint16 proto, uint16 purity) public returns (uint);
function getRandomCard(CardProto.Rarity rarity, uint16 random) public view returns (uint16);
function migrate(uint id) public;
}
contract CardPackFour {
MigrationInterface public migration;
uint public creationBlock;
constructor(MigrationInterface _core) public payable {
migration = _core;
creationBlock = 5939061 + 2000; // set to creation block of first contracts + 8 hours for down time
}
event Referral(address indexed referrer, uint value, address purchaser);
/**
* purchase 'count' of this type of pack
*/
function purchase(uint16 packCount, address referrer) public payable;
// store purity and shine as one number to save users gas
function _getPurity(uint16 randOne, uint16 randTwo) internal pure returns (uint16) {
if (randOne >= 998) {
return 3000 + randTwo;
} else if (randOne >= 988) {
return 2000 + randTwo;
} else if (randOne >= 938) {
return 1000 + randTwo;
} else {
return randTwo;
}
}
}
contract FirstPheonix is Pausable {
MigrationInterface core;
constructor(MigrationInterface _core) public {
core = _core;
}
address[] public approved;
uint16 PHEONIX_PROTO = 380;
mapping(address => bool) public claimed;
function approvePack(address toApprove) public onlyOwner {
approved.push(toApprove);
}
function isApproved(address test) public view returns (bool) {
for (uint i = 0; i < approved.length; i++) {
if (approved[i] == test) {
return true;
}
}
return false;
}
// pause once cards become tradable
function claimPheonix(address user) public returns (bool){
require(isApproved(msg.sender));
if (claimed[user] || paused){
return false;
}
claimed[user] = true;
core.createCard(user, PHEONIX_PROTO, 0);
return true;
}
}
contract PresalePackFour is CardPackFour, Pausable {
CappedVault public vault;
Purchase[] public purchases;
function getPurchaseCount() public view returns (uint) {
return purchases.length;
}
struct Purchase {
uint16 current;
uint16 count;
address user;
uint randomness;
uint64 commit;
}
event PacksPurchased(uint indexed id, address indexed user, uint16 count);
event PackOpened(uint indexed id, uint16 startIndex, address indexed user, uint[] cardIDs);
event RandomnessReceived(uint indexed id, address indexed user, uint16 count, uint randomness);
event Recommit(uint indexed id);
constructor(MigrationInterface _core, CappedVault _vault) public payable CardPackFour(_core) {
vault = _vault;
}
function basePrice() public returns (uint);
function getCardDetails(uint16 packIndex, uint8 cardIndex, uint result) public view returns (uint16 proto, uint16 purity);
function packSize() public view returns (uint8) {
return 5;
}
uint16 public perClaim = 15;
function setPacksPerClaim(uint16 _perClaim) public onlyOwner {
perClaim = _perClaim;
}
function packsPerClaim() public view returns (uint16) {
return perClaim;
}
// start in bytes, length in bytes
function extract(uint num, uint length, uint start) internal pure returns (uint) {
return (((1 << (length * 8)) - 1) & (num >> ((start * 8) - 1)));
}
function purchaseFor(address user, uint16 packCount, address referrer) whenNotPaused public payable {
_purchase(user, packCount, referrer);
}
function purchase(uint16 packCount, address referrer) whenNotPaused public payable {
_purchase(msg.sender, packCount, referrer);
}
function _purchase(address user, uint16 packCount, address referrer) internal {
require(packCount > 0);
require(referrer != user);
uint price = calculatePrice(basePrice(), packCount);
require(msg.value >= price);
Purchase memory p = Purchase({
user: user,
count: packCount,
commit: uint64(block.number),
randomness: 0,
current: 0
});
uint id = purchases.push(p) - 1;
emit PacksPurchased(id, user, packCount);
if (referrer != address(0)) {
uint commission = price / 10;
referrer.transfer(commission);
price -= commission;
emit Referral(referrer, commission, user);
}
address(vault).transfer(price);
}
// can recommit
// this gives you more chances
// if no-one else sends the callback (should never happen)
// still only get a random extra chance
function recommit(uint id) public {
Purchase storage p = purchases[id];
require(p.randomness == 0);
require(block.number >= p.commit + 256);
p.commit = uint64(block.number);
emit Recommit(id);
}
// can be called by anybody
// can miners withhold blocks --> not really
// giving up block reward for extra chance --> still really low
function callback(uint id) public {
Purchase storage p = purchases[id];
require(p.randomness == 0);
// must be within last 256 blocks, otherwise recommit
require(block.number - 256 < p.commit);
// can't callback on the original block
require(uint64(block.number) != p.commit);
bytes32 bhash = blockhash(p.commit);
// will get the same on every block
// only use properties which can't be altered by the user
uint random = uint(keccak256(abi.encodePacked(bhash, p.user, address(this), p.count)));
require(uint(bhash) != 0);
p.randomness = random;
emit RandomnessReceived(id, p.user, p.count, p.randomness);
}
function claim(uint id) public {
Purchase storage p = purchases[id];
require(canClaim);
uint16 proto;
uint16 purity;
uint16 count = p.count;
uint result = p.randomness;
uint8 size = packSize();
address user = p.user;
uint16 current = p.current;
require(result != 0); // have to wait for the callback
// require(user == msg.sender); // not needed
require(count > 0);
uint[] memory ids = new uint[](size);
uint16 end = current + packsPerClaim() > count ? count : current + packsPerClaim();
require(end > current);
for (uint16 i = current; i < end; i++) {
for (uint8 j = 0; j < size; j++) {
(proto, purity) = getCardDetails(i, j, result);
ids[j] = migration.createCard(user, proto, purity);
}
emit PackOpened(id, (i * size), user, ids);
}
p.current += (end - current);
}
function predictPacks(uint id) external view returns (uint16[] protos, uint16[] purities) {
Purchase memory p = purchases[id];
uint16 proto;
uint16 purity;
uint16 count = p.count;
uint result = p.randomness;
uint8 size = packSize();
purities = new uint16[](size * count);
protos = new uint16[](size * count);
for (uint16 i = 0; i < count; i++) {
for (uint8 j = 0; j < size; j++) {
(proto, purity) = getCardDetails(i, j, result);
purities[(i * size) + j] = purity;
protos[(i * size) + j] = proto;
}
}
return (protos, purities);
}
function calculatePrice(uint base, uint16 packCount) public view returns (uint) {
// roughly 6k blocks per day
uint difference = block.number - creationBlock;
uint numDays = difference / 6000;
if (20 > numDays) {
return (base - (((20 - numDays) * base) / 100)) * packCount;
}
return base * packCount;
}
function _getCommonPlusRarity(uint32 rand) internal pure returns (CardProto.Rarity) {
if (rand == 999999) {
return CardProto.Rarity.Mythic;
} else if (rand >= 998345) {
return CardProto.Rarity.Legendary;
} else if (rand >= 986765) {
return CardProto.Rarity.Epic;
} else if (rand >= 924890) {
return CardProto.Rarity.Rare;
} else {
return CardProto.Rarity.Common;
}
}
function _getRarePlusRarity(uint32 rand) internal pure returns (CardProto.Rarity) {
if (rand == 999999) {
return CardProto.Rarity.Mythic;
} else if (rand >= 981615) {
return CardProto.Rarity.Legendary;
} else if (rand >= 852940) {
return CardProto.Rarity.Epic;
} else {
return CardProto.Rarity.Rare;
}
}
function _getEpicPlusRarity(uint32 rand) internal pure returns (CardProto.Rarity) {
if (rand == 999999) {
return CardProto.Rarity.Mythic;
} else if (rand >= 981615) {
return CardProto.Rarity.Legendary;
} else {
return CardProto.Rarity.Epic;
}
}
function _getLegendaryPlusRarity(uint32 rand) internal pure returns (CardProto.Rarity) {
if (rand == 999999) {
return CardProto.Rarity.Mythic;
} else {
return CardProto.Rarity.Legendary;
}
}
bool public canClaim = true;
function setCanClaim(bool claim) public onlyOwner {
canClaim = claim;
}
function getComponents(
uint16 i, uint8 j, uint rand
) internal returns (
uint random, uint32 rarityRandom, uint16 purityOne, uint16 purityTwo, uint16 protoRandom
) {
random = uint(keccak256(abi.encodePacked(i, rand, j)));
rarityRandom = uint32(extract(random, 4, 10) % 1000000);
purityOne = uint16(extract(random, 2, 4) % 1000);
purityTwo = uint16(extract(random, 2, 6) % 1000);
protoRandom = uint16(extract(random, 2, 8) % (2**16-1));
return (random, rarityRandom, purityOne, purityTwo, protoRandom);
}
function withdraw() public onlyOwner {
owner.transfer(address(this).balance);
}
}
contract PackFourMultiplier is PresalePackFour {
address[] public packs;
uint16 public multiplier = 3;
FirstPheonix pheonix;
PreviousInterface old;
uint16 public packLimit = 5;
constructor(PreviousInterface _old, address[] _packs, MigrationInterface _core, CappedVault vault, FirstPheonix _pheonix)
public PresalePackFour(_core, vault)
{
packs = _packs;
pheonix = _pheonix;
old = _old;
}
function getCardCount() internal view returns (uint) {
return old.totalSupply() + old.burnCount();
}
function isPriorPack(address test) public view returns(bool) {
for (uint i = 0; i < packs.length; i++) {
if (packs[i] == test) {
return true;
}
}
return false;
}
event Status(uint before, uint aft);
function claimMultiple(address pack, uint purchaseID) public returns (uint16, address) {
require(isPriorPack(pack));
uint length = getCardCount();
PresalePackFour(pack).claim(purchaseID);
uint lengthAfter = getCardCount();
require(lengthAfter > length);
uint16 cardDifference = uint16(lengthAfter - length);
require(cardDifference % 5 == 0);
uint16 packCount = cardDifference / 5;
uint16 extra = packCount * multiplier;
address lastCardOwner = old.ownerOf(lengthAfter - 1);
Purchase memory p = Purchase({
user: lastCardOwner,
count: extra,
commit: uint64(block.number),
randomness: 0,
current: 0
});
uint id = purchases.push(p) - 1;
emit PacksPurchased(id, lastCardOwner, extra);
// try to give them a first pheonix
pheonix.claimPheonix(lastCardOwner);
emit Status(length, lengthAfter);
if (packCount <= packLimit) {
for (uint i = 0; i < cardDifference; i++) {
migration.migrate(lengthAfter - 1 - i);
}
}
return (extra, lastCardOwner);
}
function setPackLimit(uint16 limit) public onlyOwner {
packLimit = limit;
}
}
contract ShinyLegendaryPackFour is PackFourMultiplier {
function basePrice() public returns (uint) {
return 1 ether;
}
TournamentPass public tournament;
constructor(PreviousInterface _old, address[] _packs, MigrationInterface _core, CappedVault vault, TournamentPass _tournament, FirstPheonix _pheonix)
public PackFourMultiplier(_old, _packs, _core, vault, _pheonix) {
tournament = _tournament;
}
function purchase(uint16 packCount, address referrer) public payable {
super.purchase(packCount, referrer);
tournament.mint(msg.sender, packCount);
}
function claimMultiple(address pack, uint purchaseID) public returns (uint16, address) {
uint16 extra;
address user;
(extra, user) = super.claimMultiple(pack, purchaseID);
tournament.mint(user, extra);
}
function getCardDetails(uint16 packIndex, uint8 cardIndex, uint result) public view returns (uint16 proto, uint16 purity) {
uint random;
uint32 rarityRandom;
uint16 protoRandom;
uint16 purityOne;
uint16 purityTwo;
CardProto.Rarity rarity;
(random, rarityRandom, purityOne, purityTwo, protoRandom) = getComponents(packIndex, cardIndex, result);
if (cardIndex == 4) {
rarity = _getLegendaryPlusRarity(rarityRandom);
purity = _getShinyPurity(purityOne, purityTwo);
} else if (cardIndex == 3) {
rarity = _getRarePlusRarity(rarityRandom);
purity = _getPurity(purityOne, purityTwo);
} else {
rarity = _getCommonPlusRarity(rarityRandom);
purity = _getPurity(purityOne, purityTwo);
}
proto = migration.getRandomCard(rarity, protoRandom);
return (proto, purity);
}
function _getShinyPurity(uint16 randOne, uint16 randTwo) public pure returns (uint16) {
if (randOne >= 998) {
return 3000 + randTwo;
} else if (randOne >= 748) {
return 2000 + randTwo;
} else {
return 1000 + randTwo;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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
Deployed Bytecode
0x6080604052600436106101925763ffffffff60e060020a60003504166306a628d4811461019757806313af4035146101c25780631705a3bd146101e557806317634514146102165780631b3ed7221461023d5780631e0197e214610269578063379607f51461027e578063396c8228146102965780633ccfd60b146102b15780633f4ba83a146102c657806345d63b66146102db5780635c975abb146102f35780635f9602e81461031c5780636bc3e4a8146103315780636dc7a6271461037b5780638392fe31146103905780638456cb59146103ec5780638be4339b146104015780638da5cb5b146104165780639a1f6a0f1461042b578063b01d5b6314610447578063b84c139214610469578063bd6cac4f14610481578063becd283f146104a2578063c2f0bb29146104b7578063c503101e146104fd578063c7876ea414610517578063ca2bf0471461052c578063d42a5011146105dd578063e3f7faaf146105f9578063e87aa76914610618578063eb1098b81461063a578063fbfa77cf1461064f578063ff585caf14610664575b600080fd5b3480156101a357600080fd5b506101ac61067c565b6040805160ff9092168252519081900360200190f35b3480156101ce57600080fd5b506101e3600160a060020a0360043516610681565b005b3480156101f157600080fd5b506101fa6106c7565b60408051600160a060020a039092168252519081900360200190f35b34801561022257600080fd5b5061022b6106d6565b60408051918252519081900360200190f35b34801561024957600080fd5b506102526106dc565b6040805161ffff9092168252519081900360200190f35b34801561027557600080fd5b506101fa6106e6565b34801561028a57600080fd5b506101e36004356106f5565b6101e361ffff60043516600160a060020a03602435166109e7565b3480156102bd57600080fd5b506101e3610a91565b3480156102d257600080fd5b506101e3610ae5565b3480156102e757600080fd5b506101e3600435610b5d565b3480156102ff57600080fd5b50610308610c01565b604080519115158252519081900360200190f35b34801561032857600080fd5b50610252610c11565b34801561033d57600080fd5b50610355600160a060020a0360043516602435610c1b565b6040805161ffff9093168352600160a060020a0390911660208301528051918290030190f35b34801561038757600080fd5b50610308610cd9565b34801561039c57600080fd5b506103a8600435610ce8565b6040805161ffff9687168152949095166020850152600160a060020a0390921683850152606083015267ffffffffffffffff16608082015290519081900360a00190f35b3480156103f857600080fd5b506101e3610d44565b34801561040d57600080fd5b50610252610dc1565b34801561042257600080fd5b506101fa610dcb565b34801561043757600080fd5b506101e361ffff60043516610dda565b6101e3600160a060020a0360043581169061ffff602435169060443516610e09565b34801561047557600080fd5b506101fa600435610e30565b34801561048d57600080fd5b50610308600160a060020a0360043516610e58565b3480156104ae57600080fd5b5061022b610eb6565b3480156104c357600080fd5b506104dc61ffff6004351660ff60243516604435610ebc565b6040805161ffff938416815291909216602082015281519081900390910190f35b34801561050957600080fd5b506101e36004351515611004565b34801561052357600080fd5b5061022b611037565b34801561053857600080fd5b50610544600435611043565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610588578181015183820152602001610570565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c75781810151838201526020016105af565b5050505090500194505050505060405180910390f35b3480156105e957600080fd5b506101e361ffff60043516611208565b34801561060557600080fd5b5061022b60043561ffff60243516611252565b34801561062457600080fd5b5061025261ffff60043581169060243516611293565b34801561064657600080fd5b506102526112d2565b34801561065b57600080fd5b506101fa6112e3565b34801561067057600080fd5b506101e36004356112f2565b600590565b600254600160a060020a0316331461069857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60015481565b60075461ffff1681565b600954600160a060020a031681565b6000806000806000806000806060600080600060048d81548110151561071757fe5b90600052602060002090600302019b50600560029054906101000a900460ff16151561074257600080fd5b8b5460018d01546201000090910461ffff169950975061076061067c565b8c54909750600160a060020a03640100000000820416965061ffff16945087151561078a57600080fd5b600061ffff8a161161079b57600080fd5b8660ff166040519080825280602002602001820160405280156107c8578160200160208202803883390190505b5093508861ffff166107d8610dc1565b860161ffff16116107f2576107eb610dc1565b85016107f4565b885b925061ffff8086169084161161080957600080fd5b8491505b8261ffff168261ffff1610156109c0575060005b8660ff168160ff1610156109205761083a82828a610ebc565b809b50819c5050506000809054906101000a9004600160a060020a0316600160a060020a031663fb36eba1878d8d6040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018361ffff1661ffff1681526020018261ffff1661ffff1681526020019350505050602060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b505050506040513d60208110156108fb57600080fd5b50518451859060ff841690811061090e57fe5b60209081029091010152600101610821565b85600160a060020a03168d7f69ac64af86d3ef40c9def928534f6a6a9e12d85ec3af2948bd66b802afcc10468960ff16850287604051808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109a1578181015183820152602001610989565b50505050905001935050505060405180910390a360019091019061080d565b5050895461ffff1981169390910361ffff9182160116919091179097555050505050505050565b6109f182826114c7565b600954604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015261ffff851660248201529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b505050506040513d6020811015610a8b57600080fd5b50505050565b600254600160a060020a03163314610aa857600080fd5b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610ae2573d6000803e3d6000fd5b50565b600254600160a060020a03163314610afc57600080fd5b60025460a060020a900460ff161515610b1457600080fd5b6002805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000600482815481101515610b6e57fe5b9060005260206000209060030201905080600101546000141515610b9157600080fd5b600281015467ffffffffffffffff9081166101000116431015610bb357600080fd5b60028101805467ffffffffffffffff19164367ffffffffffffffff1617905560405182907f29ef13d2827ff333d3fde4646988c3a7db16de1210f0c0b613fd0ac9773e4e7b90600090a25050565b60025460a060020a900460ff1681565b60055461ffff1681565b600080600080610c2b86866114ed565b600954604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03808516600483015261ffff86166024830152915194965092945016916340c10f19916044808201926020929091908290030181600087803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b505050506040513d6020811015610ccb57600080fd5b509396929550919350505050565b60055462010000900460ff1681565b6004805482908110610cf657fe5b600091825260209091206003909102018054600182015460029092015461ffff80831694506201000083041692640100000000909204600160a060020a0316919067ffffffffffffffff1685565b600254600160a060020a03163314610d5b57600080fd5b60025460a060020a900460ff1615610d7257600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60055461ffff1690565b600254600160a060020a031681565b600254600160a060020a03163314610df157600080fd5b6005805461ffff191661ffff92909216919091179055565b60025460a060020a900460ff1615610e2057600080fd5b610e2b838383611974565b505050565b6006805482908110610e3e57fe5b600091825260209091200154600160a060020a0316905081565b6000805b600654811015610eab5782600160a060020a0316600682815481101515610e7f57fe5b600091825260209091200154600160a060020a03161415610ea35760019150610eb0565b600101610e5c565b600091505b50919050565b60045490565b600080600080600080600080610ed38b8b8b611c1b565b9399509197509195509093509150600460ff8b161415610f0957610ef685611d82565b9050610f028383611293565b9650610f42565b8960ff1660031415610f2a57610f1e85611da6565b9050610f028383611df9565b610f3385611e4a565b9050610f3f8383611df9565b96505b6000546040517fcaa19168000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063caa19168908390879060049081019081908490811115610f9457fe5b60ff1681526020018261ffff1661ffff16815260200192505050602060405180830381600087803b158015610fc857600080fd5b505af1158015610fdc573d6000803e3d6000fd5b505050506040513d6020811015610ff257600080fd5b50519750505050505050935093915050565b600254600160a060020a0316331461101b57600080fd5b60058054911515620100000262ff000019909216919091179055565b670de0b6b3a764000090565b60608061104e611ff2565b600080600080600080600060048b81548110151561106857fe5b60009182526020918290206040805160a0810182526003909302909101805461ffff808216855262010000820416948401859052600160a060020a03640100000000909104169183019190915260018101546060830181905260029091015467ffffffffffffffff16608083015290995090955093506110e661067c565b9250848360ff160261ffff1660405190808252806020026020018201604052801561111b578160200160208202803883390190505b509850848360ff160261ffff16604051908082528060200260200182016040528015611151578160200160208202803883390190505b509950600091505b8461ffff168261ffff1610156111fb575060005b8260ff168160ff1610156111f057611186828286610ebc565b8a51919850965086908a9061ffff60ff878116870290861601169081106111a957fe5b61ffff928316602091820290920101528a5188918c9160ff8781168702908616019091169081106111d657fe5b61ffff90921660209283029091019091015260010161116d565b600190910190611159565b5050505050505050915091565b600254600160a060020a0316331461121f57600080fd5b6008805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b6001546000904303611770810460148110156112815761ffff841660646014839003870204860302925061128b565b8361ffff16850292505b505092915050565b60006103e661ffff8416106112ad5750610bb881016112cc565b6102ec61ffff8416106112c557506107d081016112cc565b506103e881015b92915050565b60085460a060020a900461ffff1681565b600354600160a060020a031681565b600080600060048481548110151561130657fe5b906000526020600020906003020192508260010154600014151561132957600080fd5b600283015467ffffffffffffffff1660ff1943011061134757600080fd5b60028301544367ffffffffffffffff9081169116141561136657600080fd5b600283015483546040805167ffffffffffffffff9093164060208085018290526401000000008404600160a060020a03166c0100000000000000000000000090810286850152300260548601526201000090930461ffff167e010000000000000000000000000000000000000000000000000000000000000260688501528151808503604a018152606a90940191829052835190955090918291908401908083835b602083106114275780518252601f199092019160209182019101611408565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912093505050821515905061146257600080fd5b6001830181905582546040805162010000830461ffff168152602081018490528151640100000000909304600160a060020a03169287927fedb5ce4012b6e9c5904afa2ffad9811d5c2e91e6bca8914cf7e3ffc28e630c57928290030190a350505050565b60025460a060020a900460ff16156114de57600080fd5b6114e9338383611974565b5050565b600080600080600080600080611501611ff2565b60008061150d8d610e58565b151561151857600080fd5b611520611eb5565b98508c600160a060020a031663379607f58d6040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b15801561156b57600080fd5b505af115801561157f573d6000803e3d6000fd5b5050505061158b611eb5565b975088881161159957600080fd5b8888039650600561ffff88160661ffff16156115b457600080fd5b600561ffff8816600754600854604080517f6352211e0000000000000000000000000000000000000000000000000000000081526000198e016004820152905194909304995061ffff90911689029750600160a060020a031691636352211e916024808201926020929091908290030181600087803b15801561163657600080fd5b505af115801561164a573d6000803e3d6000fd5b505050506040513d602081101561166057600080fd5b50516040805160a081018252600080825261ffff8981166020848101828152600160a060020a038089168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519599509297509095509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd928290030190a3600754604080517ff88218e0000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301529151620100009093049091169163f88218e0916024808201926020929091908290030181600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b505050506040513d602081101561187257600080fd5b5050604080518a8152602081018a905281517f31a1adb447f9b6b89f24bf104f0b7a06975ad9f35670dbfaf7ce29190ec54762929181900390910190a160085461ffff60a060020a909104811690871611611961575060005b8661ffff168110156119615760008054604080517f454b0608000000000000000000000000000000000000000000000000000000008152848c036000190160048201529051600160a060020a039092169263454b06089260248084019382900301818387803b15801561193d57600080fd5b505af1158015611951573d6000803e3d6000fd5b5050600190920191506118cb9050565b50929b919a509098505050505050505050565b600061197e611ff2565b60008061ffff8616811061199157600080fd5b600160a060020a0385811690881614156119aa57600080fd5b6119bb6119b5611037565b87611252565b9350348411156119ca57600080fd5b6040805160a081018252600080825261ffff8981166020808501828152600160a060020a03808f168789018181526060890188815267ffffffffffffffff43811660808c01908152600480546001810182559b528b5160038c027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81018054995196519098166401000000000277ffffffffffffffffffffffffffffffffffffffff0000000019968d16620100000263ffff00001993909d1661ffff19909a1699909917919091169a909a17939093169590951790935591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c87015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d90950180549590921667ffffffffffffffff19909516949094179055855191825294519397509195509285927f861fd6f8fe14603acc05fa404f8cca86371619cac8a65a92edf687f81b9bafbd9281900390910190a3600160a060020a03851615611bd75750604051600a840490600160a060020a0386169082156108fc029083906000818181858888f19350505050158015611b8b573d6000803e3d6000fd5b5060408051828152600160a060020a03898116602083015282519684900396908816927f13aa7090696e2a1d666cfc6046f2f72f1c4e0290649b47bab28d1b370ad73783928290030190a25b600354604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015611c11573d6000803e3d6000fd5b5050505050505050565b6000806000806000878688604051602001808461ffff1661ffff167e010000000000000000000000000000000000000000000000000000000000000281526002018381526020018260ff1660ff167f010000000000000000000000000000000000000000000000000000000000000002815260010193505050506040516020818303038152906040526040518082805190602001908083835b60208310611cd35780518252601f199092019160209182019101611cb4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049450620f4240611d17866004600a611fd2565b811515611d2057fe5b0693506103e8611d338660026004611fd2565b811515611d3c57fe5b0692506103e8611d4f8660026006611fd2565b811515611d5857fe5b06915061ffff611d6b8660026008611fd2565b811515611d7457fe5b069050939792965093509350565b60008163ffffffff16620f423f1415611d9d57506004611da1565b5060035b919050565b60008163ffffffff16620f423f1415611dc157506004611da1565b620efa6f63ffffffff831610611dd957506003611da1565b620d03cc63ffffffff831610611df157506002611da1565b506001611da1565b60006103e661ffff841610611e135750610bb881016112cc565b6103dc61ffff841610611e2b57506107d081016112cc565b6103aa61ffff841610611e4357506103e881016112cc565b50806112cc565b60008163ffffffff16620f423f1415611e6557506004611da1565b620f3bc963ffffffff831610611e7d57506003611da1565b620f0e8d63ffffffff831610611e9557506002611da1565b620e1cda63ffffffff831610611ead57506001611da1565b506000611da1565b600854604080517f524773ce0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163524773ce91600480830192602092919082900301818787803b158015611f1457600080fd5b505af1158015611f28573d6000803e3d6000fd5b505050506040513d6020811015611f3e57600080fd5b5051600854604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b158015611fa057600080fd5b505af1158015611fb4573d6000803e3d6000fd5b505050506040513d6020811015611fca57600080fd5b505101905090565b6008828102600290810a60001990810192840201900a8404169392505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600a165627a7a72305820ad4a6e9ee67e1587480d0fccf7f21ab8b5a5a0cca25cbe6fb8f821aa2e2a60ea0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000512fbd15bde6570ff09e4438af27ede60402451500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd68900000000000000000000000022365168c8705e95b2d08876c23a8c13e3ad72e2000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000080391307f1b08cc068fa1d1b77513b98c36dfbfa000000000000000000000000000983ba1a675327f0940b56c2d49cd9c042dfbf
-----Decoded View---------------
Arg [0] : _old (address): 0x512Fbd15BDE6570ff09E4438Af27edE604024515
Arg [1] : _packs (address[]): 0x80391307F1B08Cc068Fa1D1b77513B98C36DFbfa,0x000983ba1A675327F0940b56c2d49CD9c042DFBF
Arg [2] : _core (address): 0x6EbeAf8e8E946F0716E6533A6f2cefc83f60e8Ab
Arg [3] : vault (address): 0x91B9d2835AD914bc1dcFE09Bd1816FeBd04fd689
Arg [4] : _tournament (address): 0x22365168c8705E95B2D08876C23a8c13E3ad72E2
Arg [5] : _pheonix (address): 0x657C8982D63F58Ddd6A54c75591a572D4180ceC8
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000512fbd15bde6570ff09e4438af27ede604024515
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000006ebeaf8e8e946f0716e6533a6f2cefc83f60e8ab
Arg [3] : 00000000000000000000000091b9d2835ad914bc1dcfe09bd1816febd04fd689
Arg [4] : 00000000000000000000000022365168c8705e95b2d08876c23a8c13e3ad72e2
Arg [5] : 000000000000000000000000657c8982d63f58ddd6a54c75591a572d4180cec8
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 00000000000000000000000080391307f1b08cc068fa1d1b77513b98c36dfbfa
Arg [8] : 000000000000000000000000000983ba1a675327f0940b56c2d49cd9c042dfbf
Swarm Source
bzzr://ad4a6e9ee67e1587480d0fccf7f21ab8b5a5a0cca25cbe6fb8f821aa2e2a60ea
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.