Source Code
Latest 25 from a total of 1,395 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Ether | 7135198 | 2553 days ago | IN | 0 ETH | 0.00008913 | ||||
| Purchase | 7120499 | 2556 days ago | IN | 0.91 ETH | 0.00004868 | ||||
| Transfer | 7119773 | 2556 days ago | IN | 0 ETH | 0.00064026 | ||||
| Transfer | 7119773 | 2556 days ago | IN | 0 ETH | 0.00064026 | ||||
| Transfer | 7119773 | 2556 days ago | IN | 0 ETH | 0.00064026 | ||||
| Purchase For | 7119582 | 2556 days ago | IN | 0.8832 ETH | 0.00040539 | ||||
| Purchase For | 7119562 | 2556 days ago | IN | 0.23 ETH | 0.00040539 | ||||
| Purchase For | 7119482 | 2556 days ago | IN | 3.68 ETH | 0.00040635 | ||||
| Purchase For | 7119385 | 2556 days ago | IN | 4.6 ETH | 0.00040539 | ||||
| Purchase For | 7119053 | 2556 days ago | IN | 0.2275 ETH | 0.00040539 | ||||
| Purchase For | 7118867 | 2557 days ago | IN | 0.2275 ETH | 0.00040539 | ||||
| Purchase For | 7118628 | 2557 days ago | IN | 0.2275 ETH | 0.00040635 | ||||
| Purchase For | 7118599 | 2557 days ago | IN | 0.728 ETH | 0.00040635 | ||||
| Purchase For | 7118562 | 2557 days ago | IN | 0.819 ETH | 0.00040731 | ||||
| Pause | 7118245 | 2557 days ago | IN | 0 ETH | 0.00014089 | ||||
| Purchase For | 7118138 | 2557 days ago | IN | 0.91 ETH | 0.00268782 | ||||
| Purchase | 7118115 | 2557 days ago | IN | 0.2275 ETH | 0.00035799 | ||||
| Purchase | 7118114 | 2557 days ago | IN | 18.2 ETH | 0.0004628 | ||||
| Purchase | 7118111 | 2557 days ago | IN | 8.19 ETH | 0.00046269 | ||||
| Purchase | 7118066 | 2557 days ago | IN | 18.2 ETH | 0.00035996 | ||||
| Purchase | 7118004 | 2557 days ago | IN | 0.728 ETH | 0.00073384 | ||||
| Purchase | 7118004 | 2557 days ago | IN | 0.91 ETH | 0.00073336 | ||||
| Purchase | 7117990 | 2557 days ago | IN | 2.0475 ETH | 0.00073431 | ||||
| Purchase | 7117970 | 2557 days ago | IN | 18.2 ETH | 0.00087419 | ||||
| Purchase For | 7117965 | 2557 days ago | IN | 0.182 ETH | 0.00268468 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 7135198 | 2553 days ago | 519.256 ETH | ||||
| - | 7118138 | 2557 days ago | 0.0455 ETH | ||||
| - | 7118115 | 2557 days ago | 0.011375 ETH | ||||
| - | 7118114 | 2557 days ago | 0.91 ETH | ||||
| - | 7118111 | 2557 days ago | 0.4095 ETH | ||||
| - | 7118066 | 2557 days ago | 0.91 ETH | ||||
| - | 7118004 | 2557 days ago | 0.0364 ETH | ||||
| - | 7118004 | 2557 days ago | 0.0455 ETH | ||||
| - | 7117990 | 2557 days ago | 0.102375 ETH | ||||
| - | 7117970 | 2557 days ago | 0.91 ETH | ||||
| - | 7117965 | 2557 days ago | 0.0091 ETH | ||||
| - | 7117962 | 2557 days ago | 0.0455 ETH | ||||
| - | 7117916 | 2557 days ago | 0.020475 ETH | ||||
| - | 7117900 | 2557 days ago | 0.0364 ETH | ||||
| - | 7117898 | 2557 days ago | 0.102375 ETH | ||||
| - | 7117896 | 2557 days ago | 0.91 ETH | ||||
| - | 7117728 | 2557 days ago | 0.011375 ETH | ||||
| - | 7117712 | 2557 days ago | 0.00728 ETH | ||||
| - | 7117666 | 2557 days ago | 0.002275 ETH | ||||
| - | 7117638 | 2557 days ago | 0.0455 ETH | ||||
| - | 7117638 | 2557 days ago | 0.002275 ETH | ||||
| - | 7117624 | 2557 days ago | 0.002275 ETH | ||||
| - | 7117581 | 2557 days ago | 0.00728 ETH | ||||
| - | 7117505 | 2557 days ago | 0.011375 ETH | ||||
| - | 7117453 | 2557 days ago | 0.0455 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LandSale
Compiler Version
v0.5.2+commit.1df8f40c
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-01-22
*/
pragma solidity ^0.5.2;
pragma experimental ABIEncoderV2;
// File: @axie/contract-library/contracts/access/HasAdmin.sol
contract HasAdmin {
event AdminChanged(address indexed _oldAdmin, address indexed _newAdmin);
event AdminRemoved(address indexed _oldAdmin);
address public admin;
modifier onlyAdmin {
require(msg.sender == admin);
_;
}
constructor() internal {
admin = msg.sender;
emit AdminChanged(address(0), admin);
}
function changeAdmin(address _newAdmin) external onlyAdmin {
require(_newAdmin != address(0));
emit AdminChanged(admin, _newAdmin);
admin = _newAdmin;
}
function removeAdmin() external onlyAdmin {
emit AdminRemoved(admin);
admin = address(0);
}
}
// File: @axie/contract-library/contracts/lifecycle/Pausable.sol
contract Pausable is HasAdmin {
event Paused();
event Unpaused();
bool public paused;
modifier whenNotPaused() {
require(!paused);
_;
}
modifier whenPaused() {
require(paused);
_;
}
function pause() public onlyAdmin whenNotPaused {
paused = true;
emit Paused();
}
function unpause() public onlyAdmin whenPaused {
paused = false;
emit Unpaused();
}
}
// File: @axie/contract-library/contracts/math/Math.sol
library Math {
function max(uint256 a, uint256 b) internal pure returns (uint256 c) {
return a >= b ? a : b;
}
function min(uint256 a, uint256 b) internal pure returns (uint256 c) {
return a < b ? a : b;
}
}
// File: @axie/contract-library/contracts/token/erc20/IERC20.sol
interface IERC20 {
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
function totalSupply() external view returns (uint256 _supply);
function balanceOf(address _owner) external view returns (uint256 _balance);
function approve(address _spender, uint256 _value) external returns (bool _success);
function allowance(address _owner, address _spender) external view returns (uint256 _value);
function transfer(address _to, uint256 _value) external returns (bool _success);
function transferFrom(address _from, address _to, uint256 _value) external returns (bool _success);
}
// File: @axie/contract-library/contracts/ownership/Withdrawable.sol
contract Withdrawable is HasAdmin {
function withdrawEther() external onlyAdmin {
msg.sender.transfer(address(this).balance);
}
function withdrawToken(IERC20 _token) external onlyAdmin {
require(_token.transfer(msg.sender, _token.balanceOf(address(this))));
}
}
// File: @axie/contract-library/contracts/token/erc20/IERC20Receiver.sol
interface IERC20Receiver {
function receiveApproval(
address _from,
uint256 _value,
address _tokenAddress,
bytes calldata _data
)
external;
}
// File: @axie/contract-library/contracts/token/swap/IKyber.sol
interface IKyber {
function getExpectedRate(
address _src,
address _dest,
uint256 _srcAmount
)
external
view
returns (
uint256 _expectedRate,
uint256 _slippageRate
);
function trade(
address _src,
uint256 _maxSrcAmount,
address _dest,
address payable _receiver,
uint256 _maxDestAmount,
uint256 _minConversionRate,
address _wallet
)
external
payable
returns (uint256 _destAmount);
}
// File: @axie/contract-library/contracts/math/SafeMath.sol
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
require(c >= a);
}
function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
require(b <= a);
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
require(c / a == b);
}
function div(uint256 a, uint256 b) internal pure returns (uint256 c) {
// Since Solidity automatically asserts when dividing by 0,
// but we only need it to revert.
require(b > 0);
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256 c) {
// Same reason as `div`.
require(b > 0);
return a % b;
}
function ceilingDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {
return add(div(a, b), mod(a, b) > 0 ? 1 : 0);
}
function subU64(uint64 a, uint64 b) internal pure returns (uint64 c) {
require(b <= a);
return a - b;
}
function addU8(uint8 a, uint8 b) internal pure returns (uint8 c) {
c = a + b;
require(c >= a);
}
}
// File: @axie/contract-library/contracts/token/erc20/IERC20Detailed.sol
interface IERC20Detailed {
function name() external view returns (string memory _name);
function symbol() external view returns (string memory _symbol);
function decimals() external view returns (uint8 _decimals);
}
// File: @axie/contract-library/contracts/token/swap/KyberTokenDecimals.sol
contract KyberTokenDecimals {
using SafeMath for uint256;
address public ethAddress = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
function _getTokenDecimals(address _token) internal view returns (uint8 _decimals) {
return _token != ethAddress ? IERC20Detailed(_token).decimals() : 18;
}
function _fixTokenDecimals(
address _src,
address _dest,
uint256 _unfixedDestAmount,
bool _ceiling
)
internal
view
returns (uint256 _destTokenAmount)
{
uint256 _unfixedDecimals = _getTokenDecimals(_src) + 18; // Kyber by default returns rates with 18 decimals.
uint256 _decimals = _getTokenDecimals(_dest);
if (_unfixedDecimals > _decimals) {
// Divide token amount by 10^(_unfixedDecimals - _decimals) to reduce decimals.
if (_ceiling) {
return _unfixedDestAmount.ceilingDiv(10 ** (_unfixedDecimals - _decimals));
} else {
return _unfixedDestAmount.div(10 ** (_unfixedDecimals - _decimals));
}
} else {
// Multiply token amount with 10^(_decimals - _unfixedDecimals) to increase decimals.
return _unfixedDestAmount.mul(10 ** (_decimals - _unfixedDecimals));
}
}
}
// File: @axie/contract-library/contracts/token/swap/KyberAdapter.sol
contract KyberAdapter is KyberTokenDecimals {
IKyber public kyber = IKyber(0x818E6FECD516Ecc3849DAf6845e3EC868087B755);
function() external payable {
require(msg.sender == address(kyber));
}
function _getConversionRate(
address _src,
uint256 _srcAmount,
address _dest
)
internal
view
returns (
uint256 _expectedRate,
uint256 _slippageRate
)
{
return kyber.getExpectedRate(_src, _dest, _srcAmount);
}
function _convertToken(
address _src,
uint256 _srcAmount,
address _dest
)
internal
view
returns (
uint256 _expectedAmount,
uint256 _slippageAmount
)
{
(uint256 _expectedRate, uint256 _slippageRate) = _getConversionRate(_src, _srcAmount, _dest);
return (
_fixTokenDecimals(_src, _dest, _srcAmount.mul(_expectedRate), false),
_fixTokenDecimals(_src, _dest, _srcAmount.mul(_slippageRate), false)
);
}
function _getTokenBalance(address _token, address _account) internal view returns (uint256 _balance) {
return _token != ethAddress ? IERC20(_token).balanceOf(_account) : _account.balance;
}
function _swapToken(
address _src,
uint256 _maxSrcAmount,
address _dest,
uint256 _maxDestAmount,
uint256 _minConversionRate,
address payable _initiator,
address payable _receiver
)
internal
returns (
uint256 _srcAmount,
uint256 _destAmount
)
{
require(_src != _dest);
require(_src == ethAddress ? msg.value >= _maxSrcAmount : msg.value == 0);
// Prepare for handling back the change if there is any.
uint256 _balanceBefore = _getTokenBalance(_src, address(this));
if (_src != ethAddress) {
require(IERC20(_src).transferFrom(_initiator, address(this), _maxSrcAmount));
require(IERC20(_src).approve(address(kyber), _maxSrcAmount));
} else {
// Since we are going to transfer the source amount to Kyber.
_balanceBefore = _balanceBefore.sub(_maxSrcAmount);
}
_destAmount = kyber.trade.value(
_src == ethAddress ? _maxSrcAmount : 0
)(
_src,
_maxSrcAmount,
_dest,
_receiver,
_maxDestAmount,
_minConversionRate,
address(0)
);
uint256 _balanceAfter = _getTokenBalance(_src, address(this));
_srcAmount = _maxSrcAmount;
// Handle back the change, if there is any, to the message sender.
if (_balanceAfter > _balanceBefore) {
uint256 _change = _balanceAfter - _balanceBefore;
_srcAmount = _srcAmount.sub(_change);
if (_src != ethAddress) {
require(IERC20(_src).transfer(_initiator, _change));
} else {
_initiator.transfer(_change);
}
}
}
}
// File: @axie/contract-library/contracts/token/swap/KyberCustomTokenRates.sol
contract KyberCustomTokenRates is HasAdmin, KyberAdapter {
struct Rate {
address quote;
uint256 value;
}
event CustomTokenRateUpdated(
address indexed _tokenAddress,
address indexed _quoteTokenAddress,
uint256 _rate
);
mapping (address => Rate) public customTokenRate;
function _hasCustomTokenRate(address _tokenAddress) internal view returns (bool _correct) {
return customTokenRate[_tokenAddress].value > 0;
}
function _setCustomTokenRate(address _tokenAddress, address _quoteTokenAddress, uint256 _rate) internal {
require(_rate > 0);
customTokenRate[_tokenAddress] = Rate({ quote: _quoteTokenAddress, value: _rate });
emit CustomTokenRateUpdated(_tokenAddress, _quoteTokenAddress, _rate);
}
// solium-disable-next-line security/no-assign-params
function _getConversionRate(
address _src,
uint256 _srcAmount,
address _dest
)
internal
view
returns (
uint256 _expectedRate,
uint256 _slippageRate
)
{
uint256 _numerator = 1;
uint256 _denominator = 1;
if (_hasCustomTokenRate(_src)) {
Rate storage _rate = customTokenRate[_src];
_src = _rate.quote;
_srcAmount = _srcAmount.mul(_rate.value).div(10**18);
_numerator = _rate.value;
_denominator = 10**18;
}
if (_hasCustomTokenRate(_dest)) {
Rate storage _rate = customTokenRate[_dest];
_dest = _rate.quote;
// solium-disable-next-line whitespace
if (_numerator == 1) { _numerator = 10**18; }
_denominator = _rate.value;
}
if (_src != _dest) {
(_expectedRate, _slippageRate) = super._getConversionRate(_src, _srcAmount, _dest);
} else {
_expectedRate = _slippageRate = 10**18;
}
return (
_expectedRate.mul(_numerator).div(_denominator),
_slippageRate.mul(_numerator).div(_denominator)
);
}
function _swapToken(
address _src,
uint256 _maxSrcAmount,
address _dest,
uint256 _maxDestAmount,
uint256 _minConversionRate,
address payable _initiator,
address payable _receiver
)
internal
returns (
uint256 _srcAmount,
uint256 _destAmount
)
{
if (_hasCustomTokenRate(_src) || _hasCustomTokenRate(_dest)) {
require(_src == ethAddress ? msg.value >= _maxSrcAmount : msg.value == 0);
require(_receiver == address(this));
(uint256 _expectedRate, ) = _getConversionRate(_src, _srcAmount, _dest);
require(_expectedRate >= _minConversionRate);
_srcAmount = _maxSrcAmount;
_destAmount = _fixTokenDecimals(_src, _dest, _srcAmount.mul(_expectedRate), false);
if (_destAmount > _maxDestAmount) {
_destAmount = _maxDestAmount;
_srcAmount = _fixTokenDecimals(_dest, _src, _destAmount.mul(10**36).ceilingDiv(_expectedRate), true);
// To avoid rounding error.
if (_srcAmount > _maxSrcAmount) {
_srcAmount = _maxSrcAmount;
}
}
if (_src != ethAddress) {
require(IERC20(_src).transferFrom(_initiator, address(this), _srcAmount));
} else if (msg.value > _srcAmount) {
_initiator.transfer(msg.value - _srcAmount);
}
return (_srcAmount, _destAmount);
}
return super._swapToken(
_src,
_maxSrcAmount,
_dest,
_maxDestAmount,
_minConversionRate,
_initiator,
_receiver
);
}
}
// File: @axie/contract-library/contracts/util/AddressUtils.sol
library AddressUtils {
function toPayable(address _address) internal pure returns (address payable _payable) {
return address(uint160(_address));
}
function isContract(address _address) internal view returns (bool _correct) {
uint256 _size;
// solium-disable-next-line security/no-inline-assembly
assembly { _size := extcodesize(_address) }
return _size > 0;
}
}
// File: contracts/land/sale/LandSale.sol
contract LandSale is Pausable, Withdrawable, KyberCustomTokenRates, IERC20Receiver {
using AddressUtils for address;
enum ChestType {
Savannah,
Forest,
Arctic,
Mystic
}
event ChestPurchased(
ChestType indexed _chestType,
uint256 _chestAmount,
address indexed _tokenAddress,
uint256 _tokenAmount,
uint256 _totalPrice,
uint256 _lunaCashbackAmount,
address _buyer, // Ran out of indexed fields.
address indexed _owner
);
event ReferralRewarded(
address indexed _referrer,
uint256 _referralReward
);
event ReferralPercentageUpdated(
address indexed _referrer,
uint256 _percentage
);
address public daiAddress = 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359;
address public loomAddress = 0xA4e8C3Ec456107eA67d3075bF9e3DF3A75823DB0;
uint256 public startedAt = 1548165600; // Tuesday, January 22, 2019 2:00:00 PM GMT+00:00
uint256 public endedAt = 1563804000; // Monday, July 22, 2019 2:00:00 PM GMT+00:00
mapping (uint8 => bool) public chestTypeEnabled;
mapping (address => bool) public tokenEnabled;
uint256 public savannahChestPrice = 0.05 ether;
uint256 public forestChestPrice = 0.16 ether;
uint256 public arcticChestPrice = 0.45 ether;
uint256 public mysticChestPrice = 1.00 ether;
uint256 public initialDiscountPercentage = 1000; // 10%.
uint256 public initialDiscountDays = 10 days;
uint256 public cashbackPercentage = 1000; // 10%.
uint256 public defaultReferralPercentage = 500; // 5%.
mapping (address => uint256) public referralPercentage;
IERC20 public lunaContract;
address public lunaBankAddress;
modifier whenInSale {
// solium-disable-next-line security/no-block-members
require(now >= startedAt && now <= endedAt);
_;
}
constructor(IERC20 _lunaContract, address _lunaBankAddress) public {
// 1 LUNA = 1/10 DAI (rate has 18 decimals).
_setCustomTokenRate(address(_lunaContract), daiAddress, 10**17);
lunaContract = _lunaContract;
lunaBankAddress = _lunaBankAddress;
enableChestType(ChestType.Savannah, true);
enableChestType(ChestType.Forest, true);
enableChestType(ChestType.Arctic, true);
enableChestType(ChestType.Mystic, true);
enableToken(ethAddress, true);
enableToken(daiAddress, true);
enableToken(address(lunaContract), true);
}
function getPrice(
ChestType _chestType,
uint256 _chestAmount,
address _tokenAddress
)
external
view
returns (
uint256 _tokenAmount,
uint256 _minConversionRate
)
{
uint256 _totalPrice = _getEthPrice(_chestType, _chestAmount, _tokenAddress);
if (_tokenAddress != ethAddress) {
(_tokenAmount, ) = _convertToken(ethAddress, _totalPrice, _tokenAddress);
(, _minConversionRate) = _getConversionRate(_tokenAddress, _tokenAmount, ethAddress);
_tokenAmount = _totalPrice.mul(10**36).ceilingDiv(_minConversionRate);
_tokenAmount = _fixTokenDecimals(ethAddress, _tokenAddress, _tokenAmount, true);
} else {
_tokenAmount = _totalPrice;
}
}
function purchase(
ChestType _chestType,
uint256 _chestAmount,
address _tokenAddress,
uint256 _maxTokenAmount,
uint256 _minConversionRate,
address payable _referrer
)
external
payable
whenInSale
whenNotPaused
{
_purchase(
_chestType,
_chestAmount,
_tokenAddress,
_maxTokenAmount,
_minConversionRate,
msg.sender,
msg.sender,
_referrer
);
}
function purchaseFor(
ChestType _chestType,
uint256 _chestAmount,
address _tokenAddress,
uint256 _maxTokenAmount,
uint256 _minConversionRate,
address _owner
)
external
payable
whenInSale
whenNotPaused
{
_purchase(
_chestType,
_chestAmount,
_tokenAddress,
_maxTokenAmount,
_minConversionRate,
msg.sender,
_owner,
msg.sender
);
}
function receiveApproval(
address _from,
uint256 _value,
address _tokenAddress,
bytes calldata /* _data */
)
external
whenInSale
whenNotPaused
{
require(msg.sender == _tokenAddress);
uint256 _action;
ChestType _chestType;
uint256 _chestAmount;
uint256 _minConversionRate;
address payable _referrerOrOwner;
// solium-disable-next-line security/no-inline-assembly
assembly {
_action := calldataload(0xa4)
_chestType := calldataload(0xc4)
_chestAmount := calldataload(0xe4)
_minConversionRate := calldataload(0x104)
_referrerOrOwner := calldataload(0x124)
}
address payable _buyer;
address _owner;
address payable _referrer;
if (_action == 0) { // Purchase.
_buyer = _from.toPayable();
_owner = _from;
_referrer = _referrerOrOwner;
} else if (_action == 1) { // Purchase for.
_buyer = _from.toPayable();
_owner = _referrerOrOwner;
_referrer = _from.toPayable();
} else {
revert();
}
_purchase(
_chestType,
_chestAmount,
_tokenAddress,
_value,
_minConversionRate,
_buyer,
_owner,
_referrer
);
}
function setReferralPercentages(address[] calldata _referrers, uint256[] calldata _percentage) external onlyAdmin {
for (uint256 i = 0; i < _referrers.length; i++) {
referralPercentage[_referrers[i]] = _percentage[i];
emit ReferralPercentageUpdated(_referrers[i], _percentage[i]);
}
}
function setCustomTokenRates(address[] memory _tokenAddresses, Rate[] memory _rates) public onlyAdmin {
for (uint256 i = 0; i < _tokenAddresses.length; i++) {
_setCustomTokenRate(_tokenAddresses[i], _rates[i].quote, _rates[i].value);
}
}
function enableChestType(ChestType _chestType, bool _enabled) public onlyAdmin {
chestTypeEnabled[uint8(_chestType)] = _enabled;
}
function enableToken(address _tokenAddress, bool _enabled) public onlyAdmin {
tokenEnabled[_tokenAddress] = _enabled;
}
function _getPresentPercentage() internal view returns (uint256 _percentage) {
// solium-disable-next-line security/no-block-members
uint256 _elapsedDays = (now - startedAt).div(1 days).mul(1 days);
return uint256(10000) // 100%.
.sub(initialDiscountPercentage)
.add(
initialDiscountPercentage
.mul(Math.min(_elapsedDays, initialDiscountDays))
.div(initialDiscountDays)
);
}
function _getEthPrice(
ChestType _chestType,
uint256 _chestAmount,
address _tokenAddress
)
internal
view
returns (uint256 _price)
{
// solium-disable-next-line indentation
if (_chestType == ChestType.Savannah) { _price = savannahChestPrice; } // solium-disable-line whitespace
else if (_chestType == ChestType.Forest ) { _price = forestChestPrice; } // solium-disable-line whitespace, lbrace
else if (_chestType == ChestType.Arctic ) { _price = arcticChestPrice; } // solium-disable-line whitespace, lbrace
else if (_chestType == ChestType.Mystic ) { _price = mysticChestPrice; } // solium-disable-line whitespace, lbrace
else { revert(); } // solium-disable-line whitespace, lbrace
_price = _price
.mul(_getPresentPercentage())
.div(10000)
.mul(_chestAmount);
if (_tokenAddress == address(lunaContract)) {
_price = _price
.mul(uint256(10000).sub(cashbackPercentage))
.ceilingDiv(10000);
}
}
function _getLunaCashbackAmount(
uint256 _ethPrice,
address _tokenAddress
)
internal
view
returns (uint256 _lunaCashbackAmount)
{
if (_tokenAddress != address(lunaContract)) {
(uint256 _lunaPrice, ) = _convertToken(ethAddress, _ethPrice, address(lunaContract));
return _lunaPrice
.mul(cashbackPercentage)
.div(uint256(10000));
}
}
function _getReferralPercentage(address _referrer, address _owner) internal view returns (uint256 _percentage) {
return _referrer != _owner && _referrer != address(0)
? Math.max(referralPercentage[_referrer], defaultReferralPercentage)
: 0;
}
function _purchase(
ChestType _chestType,
uint256 _chestAmount,
address _tokenAddress,
uint256 _maxTokenAmount,
uint256 _minConversionRate,
address payable _buyer,
address _owner,
address payable _referrer
)
internal
{
require(chestTypeEnabled[uint8(_chestType)]);
require(tokenEnabled[_tokenAddress]);
require(_tokenAddress == ethAddress ? msg.value >= _maxTokenAmount : msg.value == 0);
uint256 _totalPrice = _getEthPrice(_chestType, _chestAmount, _tokenAddress);
uint256 _lunaCashbackAmount = _getLunaCashbackAmount(_totalPrice, _tokenAddress);
uint256 _tokenAmount;
uint256 _ethAmount;
if (_tokenAddress != ethAddress) {
(_tokenAmount, _ethAmount) = _swapToken(
_tokenAddress,
_maxTokenAmount,
ethAddress,
_totalPrice,
_minConversionRate,
_buyer,
address(this)
);
} else {
// Check if the buyer allowed to spend that much ETH.
require(_maxTokenAmount >= _totalPrice);
// Require minimum conversion rate to be 0.
require(_minConversionRate == 0);
_tokenAmount = _totalPrice;
_ethAmount = msg.value;
}
// Check if we received enough payment.
require(_ethAmount >= _totalPrice);
// Send back the ETH change, if there is any.
if (_ethAmount > _totalPrice) {
_buyer.transfer(_ethAmount - _totalPrice);
}
emit ChestPurchased(
_chestType,
_chestAmount,
_tokenAddress,
_tokenAmount,
_totalPrice,
_lunaCashbackAmount,
_buyer,
_owner
);
if (_tokenAddress != address(lunaContract)) {
// Send LUNA cashback.
require(lunaContract.transferFrom(lunaBankAddress, _owner, _lunaCashbackAmount));
}
if (!_hasCustomTokenRate(_tokenAddress)) {
uint256 _referralReward = _totalPrice
.mul(_getReferralPercentage(_referrer, _owner))
.div(10000);
// If the referral reward cannot be sent because of a referrer's fault, set it to 0.
// solium-disable-next-line security/no-send
if (_referralReward > 0 && !_referrer.send(_referralReward)) {
_referralReward = 0;
}
if (_referralReward > 0) {
emit ReferralRewarded(_referrer, _referralReward);
}
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"initialDiscountPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"chestTypeEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cashbackPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_chestType","type":"uint8"},{"name":"_chestAmount","type":"uint256"},{"name":"_tokenAddress","type":"address"},{"name":"_maxTokenAmount","type":"uint256"},{"name":"_minConversionRate","type":"uint256"},{"name":"_owner","type":"address"}],"name":"purchaseFor","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"daiAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"loomAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endedAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ethAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lunaBankAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_chestType","type":"uint8"},{"name":"_enabled","type":"bool"}],"name":"enableChestType","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":"defaultReferralPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referrers","type":"address[]"},{"name":"_percentage","type":"uint256[]"}],"name":"setReferralPercentages","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"savannahChestPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialDiscountDays","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_enabled","type":"bool"}],"name":"enableToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_chestType","type":"uint8"},{"name":"_chestAmount","type":"uint256"},{"name":"_tokenAddress","type":"address"},{"name":"_maxTokenAmount","type":"uint256"},{"name":"_minConversionRate","type":"uint256"},{"name":"_referrer","type":"address"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"customTokenRate","outputs":[{"name":"quote","type":"address"},{"name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mysticChestPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"},{"name":"_tokenAddress","type":"address"},{"name":"","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddresses","type":"address[]"},{"components":[{"name":"quote","type":"address"},{"name":"value","type":"uint256"}],"name":"_rates","type":"tuple[]"}],"name":"setCustomTokenRates","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyber","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_chestType","type":"uint8"},{"name":"_chestAmount","type":"uint256"},{"name":"_tokenAddress","type":"address"}],"name":"getPrice","outputs":[{"name":"_tokenAmount","type":"uint256"},{"name":"_minConversionRate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lunaContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referralPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"arcticChestPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startedAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"forestChestPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_lunaContract","type":"address"},{"name":"_lunaBankAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_chestType","type":"uint8"},{"indexed":false,"name":"_chestAmount","type":"uint256"},{"indexed":true,"name":"_tokenAddress","type":"address"},{"indexed":false,"name":"_tokenAmount","type":"uint256"},{"indexed":false,"name":"_totalPrice","type":"uint256"},{"indexed":false,"name":"_lunaCashbackAmount","type":"uint256"},{"indexed":false,"name":"_buyer","type":"address"},{"indexed":true,"name":"_owner","type":"address"}],"name":"ChestPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_referrer","type":"address"},{"indexed":false,"name":"_referralReward","type":"uint256"}],"name":"ReferralRewarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_referrer","type":"address"},{"indexed":false,"name":"_percentage","type":"uint256"}],"name":"ReferralPercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenAddress","type":"address"},{"indexed":true,"name":"_quoteTokenAddress","type":"address"},{"indexed":false,"name":"_rate","type":"uint256"}],"name":"CustomTokenRateUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_oldAdmin","type":"address"},{"indexed":true,"name":"_newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_oldAdmin","type":"address"}],"name":"AdminRemoved","type":"event"}]Contract Creation Code
608060405260018054600160a060020a031990811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790915560028054821673818e6fecd516ecc3849daf6845e3ec868087b7551790556004805482167389d24a6b4ccb1b6faa2625fe562bdd9a232603591790556005805490911673a4e8c3ec456107ea67d3075bf9e3df3a75823db0179055635c4721e0600655635d35c16060075566b1a2bc2ec50000600a556702386f26fc100000600b5567063eb89da4ed0000600c55670de0b6b3a7640000600d556103e8600e819055620d2f00600f556010556101f4601155348015620000ec57600080fd5b5060405160408062002bd883398101806040526200010e9190810190620003d3565b60008054600160a060020a0319163317808255604051600160a060020a039190911691907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f908290a360045462000182908390600160a060020a031667016345785d8a00006401000000006200027d810204565b60138054600160a060020a03808516600160a060020a0319928316179092556014805492841692909116919091179055620001c9600060016401000000006200031d810204565b620001df6001806401000000006200031d810204565b620001f6600260016401000000006200031d810204565b6200020d600360016401000000006200031d810204565b600180546200023191600160a060020a03909116906401000000006200036d810204565b6004546200025390600160a060020a031660016401000000006200036d810204565b6013546200027590600160a060020a031660016401000000006200036d810204565b50506200045b565b600081116200028b57600080fd5b604080518082018252600160a060020a038481168083526020808401868152888416600081815260039093529186902094518554600160a060020a0319169416939093178455915160019093019290925591519091907f490cff0bf8cd6cf7f35e4cf75bccb7ceaacf4468027202ba40fc8cefb384eace906200031090859062000423565b60405180910390a3505050565b600054600160a060020a031633146200033557600080fd5b80600860008460038111156200034757fe5b60ff1681526020810191909152604001600020805460ff19169115159190911790555050565b600054600160a060020a031633146200038557600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b6000620003be825162000439565b9392505050565b6000620003be82516200044e565b60008060408385031215620003e757600080fd5b6000620003f58585620003c5565b92505060206200040885828601620003b0565b9150509250929050565b6200041d816200044b565b82525050565b6020810162000433828462000412565b92915050565b6000600160a060020a03821662000433565b90565b6000620004338262000439565b61276d806200046b6000396000f3fe6080604052600436106102135760003560e060020a900480638456cb591161011c578063a2d10ba5116100a4578063e2cdc1ee11610073578063e2cdc1ee14610585578063e5afd7111461059a578063f21f537d146105ba578063f851a440146105cf578063f8dc0221146105e457610213565b8063a2d10ba514610500578063a34cd51b14610522578063c9435f0514610550578063cb544bb21461056557610213565b80638af94048116100eb5780638af94048146104765780638f2839701461048b5780638f4ffcb1146104ab57806391ecdd23146104cb5780639a202d47146104eb57610213565b80638456cb5914610400578063846a33611461041557806387c53d0014610428578063894760691461045657610213565b80634b5459451161019f5780637362377b1161016e5780637362377b14610381578063772bf29b1461039657806377da37b3146103b65780637824c812146103cb5780637dc787fd146103e057610213565b80634b5459451461032257806353388f44146103375780635c975abb14610357578063711190301461036c57610213565b80632c387275116101e65780632c387275146102ac57806337179db8146102ce5780633d6a71e4146102e35780633f4ba83a146102f857806341398b151461030d57610213565b806311c9248f1461022c57806319cb7aa9146102575780631c9cef041461028457806321bbda0814610299575b600254600160a060020a0316331461022a57600080fd5b005b34801561023857600080fd5b506102416105f9565b60405161024e9190612638565b60405180910390f35b34801561026357600080fd5b506102776102723660046124cb565b6105ff565b60405161024e919061261c565b34801561029057600080fd5b50610241610614565b61022a6102a73660046123f6565b61061a565b3480156102b857600080fd5b506102c1610668565b60405161024e919061253a565b3480156102da57600080fd5b506102c1610677565b3480156102ef57600080fd5b50610241610686565b34801561030457600080fd5b5061022a61068c565b34801561031957600080fd5b506102c1610702565b34801561032e57600080fd5b506102c1610711565b34801561034357600080fd5b5061022a61035236600461238a565b610720565b34801561036357600080fd5b5061027761076e565b34801561037857600080fd5b5061024161077e565b34801561038d57600080fd5b5061022a610784565b3480156103a257600080fd5b5061022a6103b136600461227f565b6107cb565b3480156103c257600080fd5b506102416108b4565b3480156103d757600080fd5b506102416108ba565b3480156103ec57600080fd5b5061022a6103fb3660046121c7565b6108c0565b34801561040c57600080fd5b5061022a610902565b61022a6104233660046123f6565b61097d565b34801561043457600080fd5b506104486104433660046121a9565b6109c3565b60405161024e9291906125a6565b34801561046257600080fd5b5061022a61047136600461236c565b6109e8565b34801561048257600080fd5b50610241610b1b565b34801561049757600080fd5b5061022a6104a63660046121a9565b610b21565b3480156104b757600080fd5b5061022a6104c6366004612201565b610bb5565b3480156104d757600080fd5b5061022a6104e63660046122ef565b610c98565b3480156104f757600080fd5b5061022a610d1d565b34801561050c57600080fd5b50610515610d89565b60405161024e919061262a565b34801561052e57600080fd5b5061054261053d3660046123a9565b610d98565b60405161024e929190612646565b34801561055c57600080fd5b50610515610e59565b34801561057157600080fd5b506102416105803660046121a9565b610e68565b34801561059157600080fd5b50610241610e7a565b3480156105a657600080fd5b506102776105b53660046121a9565b610e80565b3480156105c657600080fd5b50610241610e95565b3480156105db57600080fd5b506102c1610e9b565b3480156105f057600080fd5b50610241610eaa565b600e5481565b60086020526000908152604090205460ff1681565b60105481565b600654421015801561062e57506007544211155b151561063957600080fd5b60005460a060020a900460ff161561065057600080fd5b6106608686868686338733610eb0565b505050505050565b600454600160a060020a031681565b600554600160a060020a031681565b60075481565b600054600160a060020a031633146106a357600080fd5b60005460a060020a900460ff1615156106bb57600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d169339190a1565b600154600160a060020a031681565b601454600160a060020a031681565b600054600160a060020a0316331461073757600080fd5b806008600084600381111561074857fe5b60ff1681526020810191909152604001600020805460ff19169115159190911790555050565b60005460a060020a900460ff1681565b60115481565b600054600160a060020a0316331461079b57600080fd5b6040513390303180156108fc02916000818181858888f193505050501580156107c8573d6000803e3d6000fd5b50565b600054600160a060020a031633146107e257600080fd5b60005b838110156108ad578282828181106107f957fe5b9050602002013560126000878785818110151561081257fe5b60209081029290920135600160a060020a03168352508101919091526040016000205584848281811061084157fe5b90506020020135600160a060020a0316600160a060020a03167f60ad3b7a12751798871fd3f7ecd1572f445ce2fabab4e2672c9ca0e78fc6ba82848484818110151561088957fe5b9050602002013560405161089d9190612638565b60405180910390a26001016107e5565b5050505050565b600a5481565b600f5481565b600054600160a060020a031633146108d757600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b600054600160a060020a0316331461091957600080fd5b60005460a060020a900460ff161561093057600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b600654421015801561099157506007544211155b151561099c57600080fd5b60005460a060020a900460ff16156109b357600080fd5b6106608686868686333388610eb0565b60036020526000908152604090208054600190910154600160a060020a039091169082565b600054600160a060020a031633146109ff57600080fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0382169063a9059cbb90339083906370a0823190610a4e90309060040161253a565b60206040518083038186803b158015610a6657600080fd5b505afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a9e919081019061247d565b6040518363ffffffff1660e060020a028152600401610abe929190612570565b602060405180830381600087803b158015610ad857600080fd5b505af1158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b10919081019061234e565b15156107c857600080fd5b600d5481565b600054600160a060020a03163314610b3857600080fd5b600160a060020a0381161515610b4d57600080fd5b60008054604051600160a060020a03808516939216917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6006544210158015610bc957506007544211155b1515610bd457600080fd5b60005460a060020a900460ff1615610beb57600080fd5b33600160a060020a03841614610c0057600080fd5b60a43560c43560e435610104356101243560008080871515610c3b57610c2e8d600160a060020a03166111f6565b92508c9150839050610c79565b8760011415610c7457610c568d600160a060020a03166111f6565b9250839150610c6d8d600160a060020a03166111f6565b9050610c79565b600080fd5b610c8987878d8f89888888610eb0565b50505050505050505050505050565b600054600160a060020a03163314610caf57600080fd5b60005b8251811015610d1857610d108382815181101515610ccc57fe5b906020019060200201518383815181101515610ce457fe5b60209081029091010151518451859085908110610cfd57fe5b90602001906020020151602001516111f9565b600101610cb2565b505050565b600054600160a060020a03163314610d3457600080fd5b60008054604051600160a060020a03909116917fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f91a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600254600160a060020a031681565b6000806000610da88686866112a3565b600154909150600160a060020a03858116911614610e4c57600154610dd790600160a060020a03168286611392565b50600154909350610df49085908590600160a060020a03166113e7565b9250610e27905082610e1b836ec097ce7bc90715b34b9f100000000063ffffffff6114fb16565b9063ffffffff61152d16565b60018054919450610e4591600160a060020a0316908690869061155f565b9250610e50565b8092505b50935093915050565b601354600160a060020a031681565b60126020526000908152604090205481565b600c5481565b60096020526000908152604090205460ff1681565b60065481565b600054600160a060020a031681565b600b5481565b60086000896003811115610ec057fe5b60ff9081168252602082019290925260400160002054161515610ee257600080fd5b600160a060020a03861660009081526009602052604090205460ff161515610f0957600080fd5b600154600160a060020a03878116911614610f25573415610f2a565b843410155b1515610f3557600080fd5b6000610f428989896112a3565b90506000610f5082896115e1565b6001549091506000908190600160a060020a038b8116911614610f9457600154610f8a908b908b90600160a060020a0316878c8c30611640565b9092509050610fb2565b83891015610fa157600080fd5b8715610fac57600080fd5b50829050345b83811015610fbf57600080fd5b8381111561100057604051600160a060020a0388169085830380156108fc02916000818181858888f19350505050158015610ffe573d6000803e3d6000fd5b505b85600160a060020a03168a600160a060020a03168d600381111561102057fe5b7f8d3eed3c141dc3f6b103a145f67cf590db4214dd0aef765580d273fd0e669b808e8689898e604051611057959493929190612654565b60405180910390a4601354600160a060020a038b8116911614611122576013546014546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03928316926323b872dd926110c5929116908a90889060040161258b565b602060405180830381600087803b1580156110df57600080fd5b505af11580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611117919081019061234e565b151561112257600080fd5b61112b8a611848565b15156111e857600061115f612710611153611146898b611867565b889063ffffffff6114fb16565b9063ffffffff6118c416565b90506000811180156111935750604051600160a060020a0387169082156108fc029083906000818181858888f19350505050155b1561119c575060005b6000811115610c895785600160a060020a03167fe02a129f98418d04669038a9874f706689ba7726c0c0e82c67319ec8ca9001ea826040516111de9190612638565b60405180910390a2505b505050505050505050505050565b90565b6000811161120657600080fd5b604080518082018252600160a060020a03848116808352602080840186815288841660008181526003909352918690209451855473ffffffffffffffffffffffffffffffffffffffff19169416939093178455915160019093019290925591519091907f490cff0bf8cd6cf7f35e4cf75bccb7ceaacf4468027202ba40fc8cefb384eace90611296908590612638565b60405180910390a3505050565b6000808460038111156112b257fe5b14156112c15750600a54611314565b60018460038111156112cf57fe5b14156112de5750600b54611314565b60028460038111156112ec57fe5b14156112fb5750600c54611314565b600384600381111561130957fe5b1415610c745750600d545b611342836113366127106111536113296118e5565b869063ffffffff6114fb16565b9063ffffffff6114fb16565b601354909150600160a060020a038381169116141561138b57611388612710610e1b61137b60105461271061195a90919063ffffffff16565b849063ffffffff6114fb16565b90505b9392505050565b6000806000806113a38787876113e7565b90925090506113c487866113bd898663ffffffff6114fb16565b600061155f565b6113d988876113bd8a8663ffffffff6114fb16565b935093505050935093915050565b6000806001806113f687611848565b1561145357600160a060020a0396871660009081526003602052604090208054600182015498169761143d90670de0b6b3a764000090611153908a9063ffffffff6114fb16565b965080600101549250670de0b6b3a76400009150505b61145c85611848565b1561149c57600160a060020a039485166000908152600360205260409020805490951694600183141561149557670de0b6b3a764000092505b6001015490505b600160a060020a03878116908616146114c4576114ba87878761196f565b90945092506114d3565b670de0b6b3a764000092508293505b6114e781611153868563ffffffff6114fb16565b6113d982611153868663ffffffff6114fb16565b600082151561150c57506000611527565b5081810281838281151561151c57fe5b041461152757600080fd5b92915050565b600061138b61153c84846118c4565b60006115488686611a1c565b11611554576000611557565b60015b60ff16611a3d565b60008061156b86611a4d565b60120160ff169050600061157e86611a4d565b60ff169050808211156115c45783156115af576115a685828403600a0a63ffffffff61152d16565b925050506115d9565b6115a685828403600a0a63ffffffff6118c416565b6115a685838303600a0a63ffffffff6114fb16565b949350505050565b601354600090600160a060020a038381169116146115275760015460135460009161161a91600160a060020a0391821691879116611392565b509050611638612710611153601054846114fb90919063ffffffff16565b915050611527565b60008061164c89611848565b8061165b575061165b87611848565b1561182857600154600160a060020a038a811691161461167c573415611681565b873410155b151561168c57600080fd5b600160a060020a03831630146116a157600080fd5b60006116ae8a848a6113e7565b509050858110156116be57600080fd5b8892506116d68a896113bd868563ffffffff6114fb16565b91508682111561172057869150611712888b61170b84610e1b876ec097ce7bc90715b34b9f100000000063ffffffff6114fb16565b600161155f565b925088831115611720578892505b600154600160a060020a038b81169116146117e0576040517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038b16906323b872dd9061177e90889030908890600401612548565b602060405180830381600087803b15801561179857600080fd5b505af11580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117d0919081019061234e565b15156117db57600080fd5b611822565b8234111561182257604051600160a060020a038616903485900380156108fc02916000818181858888f19350505050158015611820573d6000803e3d6000fd5b505b5061183c565b61183789898989898989611ae1565b915091505b97509795505050505050565b600160a060020a03166000908152600360205260408120600101541190565b600081600160a060020a031683600160a060020a0316141580156118935750600160a060020a03831615155b61189e57600061138b565b600160a060020a03831660009081526012602052604090205460115461138b9190611e96565b60008082116118d257600080fd5b81838115156118dd57fe5b049392505050565b600080611909620151806113366201518060065442036118c490919063ffffffff16565b9050611954611932600f5461115361192385600f54611ead565b600e549063ffffffff6114fb16565b600e54611948906127109063ffffffff61195a16565b9063ffffffff611a3d16565b91505090565b60008282111561196957600080fd5b50900390565b6002546040517f809a9e550000000000000000000000000000000000000000000000000000000081526000918291600160a060020a039091169063809a9e55906119c19088908790899060040161258b565b604080518083038186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a10919081019061249b565b91509150935093915050565b6000808211611a2a57600080fd5b8183811515611a3557fe5b069392505050565b8181018281101561152757600080fd5b600154600090600160a060020a0383811691161415611a6d576012611527565b81600160a060020a031663313ce5676040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611aa957600080fd5b505afa158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061152791908101906124e9565b600080600160a060020a038981169088161415611afd57600080fd5b600154600160a060020a038a8116911614611b19573415611b1e565b873410155b1515611b2957600080fd5b6000611b358a30611ebc565b600154909150600160a060020a038b8116911614611ca2576040517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038b16906323b872dd90611b9690889030908e90600401612548565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611be8919081019061234e565b1515611bf357600080fd5b6002546040517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a038c81169263095ea7b392611c4092909116908d906004016125a6565b602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c92919081019061234e565b1515611c9d57600080fd5b611cb5565b611cb2818a63ffffffff61195a16565b90505b600254600154600160a060020a039182169163cb3c28c7918d8216911614611cde576000611ce0565b8a5b8c8c8c898d8d60006040518963ffffffff1660e060020a028152600401611d0d97969594939291906125b4565b6020604051808303818588803b158015611d2657600080fd5b505af1158015611d3a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250611d5f919081019061247d565b91506000611d6d8b30611ebc565b905089935081811115611e8857818103611d8d858263ffffffff61195a16565b600154909550600160a060020a038d8116911614611e4e576040517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038d169063a9059cbb90611dec908a908590600401612570565b602060405180830381600087803b158015611e0657600080fd5b505af1158015611e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e3e919081019061234e565b1515611e4957600080fd5b611e86565b604051600160a060020a0388169082156108fc029083906000818181858888f19350505050158015611e84573d6000803e3d6000fd5b505b505b505097509795505050505050565b600081831015611ea6578161138b565b5090919050565b6000818310611ea6578161138b565b600154600090600160a060020a0384811691161415611ee55781600160a060020a03163161138b565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038416906370a0823190611f2a90859060040161253a565b60206040518083038186803b158015611f4257600080fd5b505afa158015611f56573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061138b919081019061247d565b600061138b82356126e8565b600080601f83018413611f9857600080fd5b50813567ffffffffffffffff811115611fb057600080fd5b602083019150836020820283011115611fc857600080fd5b9250929050565b6000601f82018313611fe057600080fd5b8135611ff3611fee826126c7565b6126a0565b9150818183526020840193506020810190508385602084028201111561201857600080fd5b60005b83811015612044578161202e8882611f7a565b845250602092830192919091019060010161201b565b5050505092915050565b6000601f8201831361205f57600080fd5b813561206d611fee826126c7565b9150818183526020840193506020810190508385604084028201111561209257600080fd5b60005b8381101561204457816120a88882612132565b84525060209092019160409190910190600101612095565b600061138b82356126f3565b600061138b82516126f3565b600080601f830184136120ea57600080fd5b50813567ffffffffffffffff81111561210257600080fd5b602083019150836001820283011115611fc857600080fd5b600061138b8235612704565b600061138b823561270f565b60006040828403121561214457600080fd5b61214e60406126a0565b9050600061215c8484611f7a565b825250602061216d84848301612179565b60208301525092915050565b600061138b82356111f6565b600061138b82516111f6565b600061138b8235612722565b600061138b8251612722565b6000602082840312156121bb57600080fd5b60006115d98484611f7a565b600080604083850312156121da57600080fd5b60006121e68585611f7a565b92505060206121f7858286016120c0565b9150509250929050565b60008060008060006080868803121561221957600080fd5b60006122258888611f7a565b955050602061223688828901612179565b945050604061224788828901611f7a565b935050606086013567ffffffffffffffff81111561226457600080fd5b612270888289016120d8565b92509250509295509295909350565b6000806000806040858703121561229557600080fd5b843567ffffffffffffffff8111156122ac57600080fd5b6122b887828801611f86565b9450945050602085013567ffffffffffffffff8111156122d757600080fd5b6122e387828801611f86565b95989497509550505050565b6000806040838503121561230257600080fd5b823567ffffffffffffffff81111561231957600080fd5b61232585828601611fcf565b925050602083013567ffffffffffffffff81111561234257600080fd5b6121f78582860161204e565b60006020828403121561236057600080fd5b60006115d984846120cc565b60006020828403121561237e57600080fd5b60006115d9848461211a565b6000806040838503121561239d57600080fd5b60006121e68585612126565b6000806000606084860312156123be57600080fd5b60006123ca8686612126565b93505060206123db86828701612179565b92505060406123ec86828701611f7a565b9150509250925092565b60008060008060008060c0878903121561240f57600080fd5b600061241b8989612126565b965050602061242c89828a01612179565b955050604061243d89828a01611f7a565b945050606061244e89828a01612179565b935050608061245f89828a01612179565b92505060a061247089828a01611f7a565b9150509295509295509295565b60006020828403121561248f57600080fd5b60006115d98484612185565b600080604083850312156124ae57600080fd5b60006124ba8585612185565b92505060206121f785828601612185565b6000602082840312156124dd57600080fd5b60006115d98484612191565b6000602082840312156124fb57600080fd5b60006115d9848461219d565b61251081612728565b82525050565b612510816126e8565b612510816126f3565b61251081612704565b612510816111f6565b602081016115278284612516565b606081016125568286612507565b6125636020830185612507565b6115d96040830184612531565b6040810161257e8285612507565b61138b6020830184612531565b606081016125998286612516565b6125636020830185612516565b6040810161257e8285612516565b60e081016125c2828a612516565b6125cf6020830189612531565b6125dc6040830188612516565b6125e96060830187612516565b6125f66080830186612531565b61260360a0830185612531565b61261060c0830184612507565b98975050505050505050565b60208101611527828461251f565b602081016115278284612528565b602081016115278284612531565b6040810161257e8285612531565b60a081016126628288612531565b61266f6020830187612531565b61267c6040830186612531565b6126896060830185612531565b6126966080830184612507565b9695505050505050565b60405181810167ffffffffffffffff811182821017156126bf57600080fd5b604052919050565b600067ffffffffffffffff8211156126de57600080fd5b5060209081020190565b6000611527826126f8565b151590565b600160a060020a031690565b6000611527826126e8565b60006004821061271e57600080fd5b5090565b60ff1690565b60006115278261270456fea265627a7a72305820ef225a7cbb7d3544b1565d48f1027870a8fb9a7ccb9e31ccdf5ebb69120c48606c6578706572696d656e74616cf5003700000000000000000000000092bf969865c80eda082fd5d8b4e28da4d58e1c3a00000000000000000000000028fa65ab4a4a5f31e7958a00c1ce410a426e6fe8
Deployed Bytecode
0x6080604052600436106102135760003560e060020a900480638456cb591161011c578063a2d10ba5116100a4578063e2cdc1ee11610073578063e2cdc1ee14610585578063e5afd7111461059a578063f21f537d146105ba578063f851a440146105cf578063f8dc0221146105e457610213565b8063a2d10ba514610500578063a34cd51b14610522578063c9435f0514610550578063cb544bb21461056557610213565b80638af94048116100eb5780638af94048146104765780638f2839701461048b5780638f4ffcb1146104ab57806391ecdd23146104cb5780639a202d47146104eb57610213565b80638456cb5914610400578063846a33611461041557806387c53d0014610428578063894760691461045657610213565b80634b5459451161019f5780637362377b1161016e5780637362377b14610381578063772bf29b1461039657806377da37b3146103b65780637824c812146103cb5780637dc787fd146103e057610213565b80634b5459451461032257806353388f44146103375780635c975abb14610357578063711190301461036c57610213565b80632c387275116101e65780632c387275146102ac57806337179db8146102ce5780633d6a71e4146102e35780633f4ba83a146102f857806341398b151461030d57610213565b806311c9248f1461022c57806319cb7aa9146102575780631c9cef041461028457806321bbda0814610299575b600254600160a060020a0316331461022a57600080fd5b005b34801561023857600080fd5b506102416105f9565b60405161024e9190612638565b60405180910390f35b34801561026357600080fd5b506102776102723660046124cb565b6105ff565b60405161024e919061261c565b34801561029057600080fd5b50610241610614565b61022a6102a73660046123f6565b61061a565b3480156102b857600080fd5b506102c1610668565b60405161024e919061253a565b3480156102da57600080fd5b506102c1610677565b3480156102ef57600080fd5b50610241610686565b34801561030457600080fd5b5061022a61068c565b34801561031957600080fd5b506102c1610702565b34801561032e57600080fd5b506102c1610711565b34801561034357600080fd5b5061022a61035236600461238a565b610720565b34801561036357600080fd5b5061027761076e565b34801561037857600080fd5b5061024161077e565b34801561038d57600080fd5b5061022a610784565b3480156103a257600080fd5b5061022a6103b136600461227f565b6107cb565b3480156103c257600080fd5b506102416108b4565b3480156103d757600080fd5b506102416108ba565b3480156103ec57600080fd5b5061022a6103fb3660046121c7565b6108c0565b34801561040c57600080fd5b5061022a610902565b61022a6104233660046123f6565b61097d565b34801561043457600080fd5b506104486104433660046121a9565b6109c3565b60405161024e9291906125a6565b34801561046257600080fd5b5061022a61047136600461236c565b6109e8565b34801561048257600080fd5b50610241610b1b565b34801561049757600080fd5b5061022a6104a63660046121a9565b610b21565b3480156104b757600080fd5b5061022a6104c6366004612201565b610bb5565b3480156104d757600080fd5b5061022a6104e63660046122ef565b610c98565b3480156104f757600080fd5b5061022a610d1d565b34801561050c57600080fd5b50610515610d89565b60405161024e919061262a565b34801561052e57600080fd5b5061054261053d3660046123a9565b610d98565b60405161024e929190612646565b34801561055c57600080fd5b50610515610e59565b34801561057157600080fd5b506102416105803660046121a9565b610e68565b34801561059157600080fd5b50610241610e7a565b3480156105a657600080fd5b506102776105b53660046121a9565b610e80565b3480156105c657600080fd5b50610241610e95565b3480156105db57600080fd5b506102c1610e9b565b3480156105f057600080fd5b50610241610eaa565b600e5481565b60086020526000908152604090205460ff1681565b60105481565b600654421015801561062e57506007544211155b151561063957600080fd5b60005460a060020a900460ff161561065057600080fd5b6106608686868686338733610eb0565b505050505050565b600454600160a060020a031681565b600554600160a060020a031681565b60075481565b600054600160a060020a031633146106a357600080fd5b60005460a060020a900460ff1615156106bb57600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d169339190a1565b600154600160a060020a031681565b601454600160a060020a031681565b600054600160a060020a0316331461073757600080fd5b806008600084600381111561074857fe5b60ff1681526020810191909152604001600020805460ff19169115159190911790555050565b60005460a060020a900460ff1681565b60115481565b600054600160a060020a0316331461079b57600080fd5b6040513390303180156108fc02916000818181858888f193505050501580156107c8573d6000803e3d6000fd5b50565b600054600160a060020a031633146107e257600080fd5b60005b838110156108ad578282828181106107f957fe5b9050602002013560126000878785818110151561081257fe5b60209081029290920135600160a060020a03168352508101919091526040016000205584848281811061084157fe5b90506020020135600160a060020a0316600160a060020a03167f60ad3b7a12751798871fd3f7ecd1572f445ce2fabab4e2672c9ca0e78fc6ba82848484818110151561088957fe5b9050602002013560405161089d9190612638565b60405180910390a26001016107e5565b5050505050565b600a5481565b600f5481565b600054600160a060020a031633146108d757600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b600054600160a060020a0316331461091957600080fd5b60005460a060020a900460ff161561093057600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b600654421015801561099157506007544211155b151561099c57600080fd5b60005460a060020a900460ff16156109b357600080fd5b6106608686868686333388610eb0565b60036020526000908152604090208054600190910154600160a060020a039091169082565b600054600160a060020a031633146109ff57600080fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0382169063a9059cbb90339083906370a0823190610a4e90309060040161253a565b60206040518083038186803b158015610a6657600080fd5b505afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a9e919081019061247d565b6040518363ffffffff1660e060020a028152600401610abe929190612570565b602060405180830381600087803b158015610ad857600080fd5b505af1158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b10919081019061234e565b15156107c857600080fd5b600d5481565b600054600160a060020a03163314610b3857600080fd5b600160a060020a0381161515610b4d57600080fd5b60008054604051600160a060020a03808516939216917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6006544210158015610bc957506007544211155b1515610bd457600080fd5b60005460a060020a900460ff1615610beb57600080fd5b33600160a060020a03841614610c0057600080fd5b60a43560c43560e435610104356101243560008080871515610c3b57610c2e8d600160a060020a03166111f6565b92508c9150839050610c79565b8760011415610c7457610c568d600160a060020a03166111f6565b9250839150610c6d8d600160a060020a03166111f6565b9050610c79565b600080fd5b610c8987878d8f89888888610eb0565b50505050505050505050505050565b600054600160a060020a03163314610caf57600080fd5b60005b8251811015610d1857610d108382815181101515610ccc57fe5b906020019060200201518383815181101515610ce457fe5b60209081029091010151518451859085908110610cfd57fe5b90602001906020020151602001516111f9565b600101610cb2565b505050565b600054600160a060020a03163314610d3457600080fd5b60008054604051600160a060020a03909116917fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f91a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600254600160a060020a031681565b6000806000610da88686866112a3565b600154909150600160a060020a03858116911614610e4c57600154610dd790600160a060020a03168286611392565b50600154909350610df49085908590600160a060020a03166113e7565b9250610e27905082610e1b836ec097ce7bc90715b34b9f100000000063ffffffff6114fb16565b9063ffffffff61152d16565b60018054919450610e4591600160a060020a0316908690869061155f565b9250610e50565b8092505b50935093915050565b601354600160a060020a031681565b60126020526000908152604090205481565b600c5481565b60096020526000908152604090205460ff1681565b60065481565b600054600160a060020a031681565b600b5481565b60086000896003811115610ec057fe5b60ff9081168252602082019290925260400160002054161515610ee257600080fd5b600160a060020a03861660009081526009602052604090205460ff161515610f0957600080fd5b600154600160a060020a03878116911614610f25573415610f2a565b843410155b1515610f3557600080fd5b6000610f428989896112a3565b90506000610f5082896115e1565b6001549091506000908190600160a060020a038b8116911614610f9457600154610f8a908b908b90600160a060020a0316878c8c30611640565b9092509050610fb2565b83891015610fa157600080fd5b8715610fac57600080fd5b50829050345b83811015610fbf57600080fd5b8381111561100057604051600160a060020a0388169085830380156108fc02916000818181858888f19350505050158015610ffe573d6000803e3d6000fd5b505b85600160a060020a03168a600160a060020a03168d600381111561102057fe5b7f8d3eed3c141dc3f6b103a145f67cf590db4214dd0aef765580d273fd0e669b808e8689898e604051611057959493929190612654565b60405180910390a4601354600160a060020a038b8116911614611122576013546014546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03928316926323b872dd926110c5929116908a90889060040161258b565b602060405180830381600087803b1580156110df57600080fd5b505af11580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611117919081019061234e565b151561112257600080fd5b61112b8a611848565b15156111e857600061115f612710611153611146898b611867565b889063ffffffff6114fb16565b9063ffffffff6118c416565b90506000811180156111935750604051600160a060020a0387169082156108fc029083906000818181858888f19350505050155b1561119c575060005b6000811115610c895785600160a060020a03167fe02a129f98418d04669038a9874f706689ba7726c0c0e82c67319ec8ca9001ea826040516111de9190612638565b60405180910390a2505b505050505050505050505050565b90565b6000811161120657600080fd5b604080518082018252600160a060020a03848116808352602080840186815288841660008181526003909352918690209451855473ffffffffffffffffffffffffffffffffffffffff19169416939093178455915160019093019290925591519091907f490cff0bf8cd6cf7f35e4cf75bccb7ceaacf4468027202ba40fc8cefb384eace90611296908590612638565b60405180910390a3505050565b6000808460038111156112b257fe5b14156112c15750600a54611314565b60018460038111156112cf57fe5b14156112de5750600b54611314565b60028460038111156112ec57fe5b14156112fb5750600c54611314565b600384600381111561130957fe5b1415610c745750600d545b611342836113366127106111536113296118e5565b869063ffffffff6114fb16565b9063ffffffff6114fb16565b601354909150600160a060020a038381169116141561138b57611388612710610e1b61137b60105461271061195a90919063ffffffff16565b849063ffffffff6114fb16565b90505b9392505050565b6000806000806113a38787876113e7565b90925090506113c487866113bd898663ffffffff6114fb16565b600061155f565b6113d988876113bd8a8663ffffffff6114fb16565b935093505050935093915050565b6000806001806113f687611848565b1561145357600160a060020a0396871660009081526003602052604090208054600182015498169761143d90670de0b6b3a764000090611153908a9063ffffffff6114fb16565b965080600101549250670de0b6b3a76400009150505b61145c85611848565b1561149c57600160a060020a039485166000908152600360205260409020805490951694600183141561149557670de0b6b3a764000092505b6001015490505b600160a060020a03878116908616146114c4576114ba87878761196f565b90945092506114d3565b670de0b6b3a764000092508293505b6114e781611153868563ffffffff6114fb16565b6113d982611153868663ffffffff6114fb16565b600082151561150c57506000611527565b5081810281838281151561151c57fe5b041461152757600080fd5b92915050565b600061138b61153c84846118c4565b60006115488686611a1c565b11611554576000611557565b60015b60ff16611a3d565b60008061156b86611a4d565b60120160ff169050600061157e86611a4d565b60ff169050808211156115c45783156115af576115a685828403600a0a63ffffffff61152d16565b925050506115d9565b6115a685828403600a0a63ffffffff6118c416565b6115a685838303600a0a63ffffffff6114fb16565b949350505050565b601354600090600160a060020a038381169116146115275760015460135460009161161a91600160a060020a0391821691879116611392565b509050611638612710611153601054846114fb90919063ffffffff16565b915050611527565b60008061164c89611848565b8061165b575061165b87611848565b1561182857600154600160a060020a038a811691161461167c573415611681565b873410155b151561168c57600080fd5b600160a060020a03831630146116a157600080fd5b60006116ae8a848a6113e7565b509050858110156116be57600080fd5b8892506116d68a896113bd868563ffffffff6114fb16565b91508682111561172057869150611712888b61170b84610e1b876ec097ce7bc90715b34b9f100000000063ffffffff6114fb16565b600161155f565b925088831115611720578892505b600154600160a060020a038b81169116146117e0576040517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038b16906323b872dd9061177e90889030908890600401612548565b602060405180830381600087803b15801561179857600080fd5b505af11580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117d0919081019061234e565b15156117db57600080fd5b611822565b8234111561182257604051600160a060020a038616903485900380156108fc02916000818181858888f19350505050158015611820573d6000803e3d6000fd5b505b5061183c565b61183789898989898989611ae1565b915091505b97509795505050505050565b600160a060020a03166000908152600360205260408120600101541190565b600081600160a060020a031683600160a060020a0316141580156118935750600160a060020a03831615155b61189e57600061138b565b600160a060020a03831660009081526012602052604090205460115461138b9190611e96565b60008082116118d257600080fd5b81838115156118dd57fe5b049392505050565b600080611909620151806113366201518060065442036118c490919063ffffffff16565b9050611954611932600f5461115361192385600f54611ead565b600e549063ffffffff6114fb16565b600e54611948906127109063ffffffff61195a16565b9063ffffffff611a3d16565b91505090565b60008282111561196957600080fd5b50900390565b6002546040517f809a9e550000000000000000000000000000000000000000000000000000000081526000918291600160a060020a039091169063809a9e55906119c19088908790899060040161258b565b604080518083038186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a10919081019061249b565b91509150935093915050565b6000808211611a2a57600080fd5b8183811515611a3557fe5b069392505050565b8181018281101561152757600080fd5b600154600090600160a060020a0383811691161415611a6d576012611527565b81600160a060020a031663313ce5676040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611aa957600080fd5b505afa158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061152791908101906124e9565b600080600160a060020a038981169088161415611afd57600080fd5b600154600160a060020a038a8116911614611b19573415611b1e565b873410155b1515611b2957600080fd5b6000611b358a30611ebc565b600154909150600160a060020a038b8116911614611ca2576040517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038b16906323b872dd90611b9690889030908e90600401612548565b602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611be8919081019061234e565b1515611bf357600080fd5b6002546040517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a038c81169263095ea7b392611c4092909116908d906004016125a6565b602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c92919081019061234e565b1515611c9d57600080fd5b611cb5565b611cb2818a63ffffffff61195a16565b90505b600254600154600160a060020a039182169163cb3c28c7918d8216911614611cde576000611ce0565b8a5b8c8c8c898d8d60006040518963ffffffff1660e060020a028152600401611d0d97969594939291906125b4565b6020604051808303818588803b158015611d2657600080fd5b505af1158015611d3a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250611d5f919081019061247d565b91506000611d6d8b30611ebc565b905089935081811115611e8857818103611d8d858263ffffffff61195a16565b600154909550600160a060020a038d8116911614611e4e576040517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038d169063a9059cbb90611dec908a908590600401612570565b602060405180830381600087803b158015611e0657600080fd5b505af1158015611e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e3e919081019061234e565b1515611e4957600080fd5b611e86565b604051600160a060020a0388169082156108fc029083906000818181858888f19350505050158015611e84573d6000803e3d6000fd5b505b505b505097509795505050505050565b600081831015611ea6578161138b565b5090919050565b6000818310611ea6578161138b565b600154600090600160a060020a0384811691161415611ee55781600160a060020a03163161138b565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038416906370a0823190611f2a90859060040161253a565b60206040518083038186803b158015611f4257600080fd5b505afa158015611f56573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061138b919081019061247d565b600061138b82356126e8565b600080601f83018413611f9857600080fd5b50813567ffffffffffffffff811115611fb057600080fd5b602083019150836020820283011115611fc857600080fd5b9250929050565b6000601f82018313611fe057600080fd5b8135611ff3611fee826126c7565b6126a0565b9150818183526020840193506020810190508385602084028201111561201857600080fd5b60005b83811015612044578161202e8882611f7a565b845250602092830192919091019060010161201b565b5050505092915050565b6000601f8201831361205f57600080fd5b813561206d611fee826126c7565b9150818183526020840193506020810190508385604084028201111561209257600080fd5b60005b8381101561204457816120a88882612132565b84525060209092019160409190910190600101612095565b600061138b82356126f3565b600061138b82516126f3565b600080601f830184136120ea57600080fd5b50813567ffffffffffffffff81111561210257600080fd5b602083019150836001820283011115611fc857600080fd5b600061138b8235612704565b600061138b823561270f565b60006040828403121561214457600080fd5b61214e60406126a0565b9050600061215c8484611f7a565b825250602061216d84848301612179565b60208301525092915050565b600061138b82356111f6565b600061138b82516111f6565b600061138b8235612722565b600061138b8251612722565b6000602082840312156121bb57600080fd5b60006115d98484611f7a565b600080604083850312156121da57600080fd5b60006121e68585611f7a565b92505060206121f7858286016120c0565b9150509250929050565b60008060008060006080868803121561221957600080fd5b60006122258888611f7a565b955050602061223688828901612179565b945050604061224788828901611f7a565b935050606086013567ffffffffffffffff81111561226457600080fd5b612270888289016120d8565b92509250509295509295909350565b6000806000806040858703121561229557600080fd5b843567ffffffffffffffff8111156122ac57600080fd5b6122b887828801611f86565b9450945050602085013567ffffffffffffffff8111156122d757600080fd5b6122e387828801611f86565b95989497509550505050565b6000806040838503121561230257600080fd5b823567ffffffffffffffff81111561231957600080fd5b61232585828601611fcf565b925050602083013567ffffffffffffffff81111561234257600080fd5b6121f78582860161204e565b60006020828403121561236057600080fd5b60006115d984846120cc565b60006020828403121561237e57600080fd5b60006115d9848461211a565b6000806040838503121561239d57600080fd5b60006121e68585612126565b6000806000606084860312156123be57600080fd5b60006123ca8686612126565b93505060206123db86828701612179565b92505060406123ec86828701611f7a565b9150509250925092565b60008060008060008060c0878903121561240f57600080fd5b600061241b8989612126565b965050602061242c89828a01612179565b955050604061243d89828a01611f7a565b945050606061244e89828a01612179565b935050608061245f89828a01612179565b92505060a061247089828a01611f7a565b9150509295509295509295565b60006020828403121561248f57600080fd5b60006115d98484612185565b600080604083850312156124ae57600080fd5b60006124ba8585612185565b92505060206121f785828601612185565b6000602082840312156124dd57600080fd5b60006115d98484612191565b6000602082840312156124fb57600080fd5b60006115d9848461219d565b61251081612728565b82525050565b612510816126e8565b612510816126f3565b61251081612704565b612510816111f6565b602081016115278284612516565b606081016125568286612507565b6125636020830185612507565b6115d96040830184612531565b6040810161257e8285612507565b61138b6020830184612531565b606081016125998286612516565b6125636020830185612516565b6040810161257e8285612516565b60e081016125c2828a612516565b6125cf6020830189612531565b6125dc6040830188612516565b6125e96060830187612516565b6125f66080830186612531565b61260360a0830185612531565b61261060c0830184612507565b98975050505050505050565b60208101611527828461251f565b602081016115278284612528565b602081016115278284612531565b6040810161257e8285612531565b60a081016126628288612531565b61266f6020830187612531565b61267c6040830186612531565b6126896060830185612531565b6126966080830184612507565b9695505050505050565b60405181810167ffffffffffffffff811182821017156126bf57600080fd5b604052919050565b600067ffffffffffffffff8211156126de57600080fd5b5060209081020190565b6000611527826126f8565b151590565b600160a060020a031690565b6000611527826126e8565b60006004821061271e57600080fd5b5090565b60ff1690565b60006115278261270456fea265627a7a72305820ef225a7cbb7d3544b1565d48f1027870a8fb9a7ccb9e31ccdf5ebb69120c48606c6578706572696d656e74616cf50037
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000092bf969865c80eda082fd5d8b4e28da4d58e1c3a00000000000000000000000028fa65ab4a4a5f31e7958a00c1ce410a426e6fe8
-----Decoded View---------------
Arg [0] : _lunaContract (address): 0x92bF969865c80EDa082FD5D8b4E28da4d58e1C3a
Arg [1] : _lunaBankAddress (address): 0x28fA65Ab4a4A5f31E7958a00C1cE410a426E6FE8
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000092bf969865c80eda082fd5d8b4e28da4d58e1c3a
Arg [1] : 00000000000000000000000028fa65ab4a4a5f31e7958a00c1ce410a426e6fe8
Swarm Source
bzzr://ef225a7cbb7d3544b1565d48f1027870a8fb9a7ccb9e31ccdf5ebb69120c4860
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 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.