Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 2,432 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Buy Land With ET... | 10670637 | 1908 days ago | IN | 0.26314438 ETH | 0.00676531 | ||||
| Buy Land With ET... | 10615426 | 1917 days ago | IN | 0.2627583 ETH | 0.00282664 | ||||
| Buy Land With ET... | 10615426 | 1917 days ago | IN | 0.26314438 ETH | 0.00287014 | ||||
| Buy Land With ET... | 10615426 | 1917 days ago | IN | 0.26343638 ETH | 0.00286934 | ||||
| Buy Land With ET... | 10615426 | 1917 days ago | IN | 0.26343638 ETH | 0.00286934 | ||||
| Buy Land With ET... | 10615426 | 1917 days ago | IN | 0.26314438 ETH | 0.00312629 | ||||
| Buy Land With ET... | 10601942 | 1919 days ago | IN | 0.11342084 ETH | 0.00300669 | ||||
| Buy Land With ET... | 10601942 | 1919 days ago | IN | 0.11342084 ETH | 0.00085905 | ||||
| Buy Land With ET... | 10598321 | 1920 days ago | IN | 0.11324304 ETH | 0.00275196 | ||||
| Buy Land With ET... | 10598320 | 1920 days ago | IN | 0.11265531 ETH | 0.00596684 | ||||
| Buy Land With ET... | 10598318 | 1920 days ago | IN | 0.11265531 ETH | 0.00678964 | ||||
| Buy Land With ET... | 10598318 | 1920 days ago | IN | 0.11265531 ETH | 0.00607241 | ||||
| Buy Land With ET... | 10598317 | 1920 days ago | IN | 0.11265531 ETH | 0.00596288 | ||||
| Buy Land With ET... | 10598315 | 1920 days ago | IN | 0.11265531 ETH | 0.00607174 | ||||
| Buy Land With ET... | 10598315 | 1920 days ago | IN | 0.11265531 ETH | 0.0060732 | ||||
| Buy Land With ET... | 10598313 | 1920 days ago | IN | 0.11265531 ETH | 0.0060723 | ||||
| Buy Land With ET... | 10598311 | 1920 days ago | IN | 0.11265531 ETH | 0.00607308 | ||||
| Buy Land With ET... | 10598310 | 1920 days ago | IN | 0.11265531 ETH | 0.00596519 | ||||
| Buy Land With ET... | 10598307 | 1920 days ago | IN | 0.11265531 ETH | 0.00607118 | ||||
| Buy Land With ET... | 10598305 | 1920 days ago | IN | 0.11265531 ETH | 0.00596453 | ||||
| Buy Land With ET... | 10598304 | 1920 days ago | IN | 0.11265531 ETH | 0.00607376 | ||||
| Buy Land With ET... | 10598303 | 1920 days ago | IN | 0.11265531 ETH | 0.00596519 | ||||
| Buy Land With ET... | 10598303 | 1920 days ago | IN | 0.11265531 ETH | 0.00596618 | ||||
| Buy Land With ET... | 10598300 | 1920 days ago | IN | 0.11265531 ETH | 0.00596409 | ||||
| Buy Land With ET... | 10598298 | 1920 days ago | IN | 0.11265531 ETH | 0.0059653 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 10670637 | 1908 days ago | 0.23432725 ETH | ||||
| - | 10670637 | 1908 days ago | 0.02881712 ETH | ||||
| - | 10601942 | 1919 days ago | 0.10879145 ETH | ||||
| - | 10601942 | 1919 days ago | 0.00462939 ETH | ||||
| - | 10601942 | 1919 days ago | 0.10879145 ETH | ||||
| - | 10601942 | 1919 days ago | 0.00462939 ETH | ||||
| - | 10598321 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598321 | 1920 days ago | 0.00279665 ETH | ||||
| - | 10598320 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598320 | 1920 days ago | 0.00220892 ETH | ||||
| - | 10598318 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598318 | 1920 days ago | 0.00220892 ETH | ||||
| - | 10598318 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598318 | 1920 days ago | 0.00220892 ETH | ||||
| - | 10598317 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598317 | 1920 days ago | 0.00220892 ETH | ||||
| - | 10598315 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598315 | 1920 days ago | 0.00220892 ETH | ||||
| - | 10598315 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598315 | 1920 days ago | 0.00220892 ETH | ||||
| - | 10598313 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598313 | 1920 days ago | 0.00220892 ETH | ||||
| - | 10598311 | 1920 days ago | 0.11044638 ETH | ||||
| - | 10598311 | 1920 days ago | 0.00220892 ETH | ||||
| - | 10598310 | 1920 days ago | 0.11044638 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EstateSale
Compiler Version
v0.6.5+commit.f956cc89
Contract Source Code (Solidity Standard Json-Input format)
/* solhint-disable not-rely-on-time, func-order */
pragma solidity 0.6.5;
import "../contracts_common/src/Libraries/SafeMathWithRequire.sol";
import "./LandToken.sol";
import "../contracts_common/src/Interfaces/ERC1155.sol";
import "../contracts_common/src/Interfaces/ERC20.sol";
import "../contracts_common/src/BaseWithStorage/MetaTransactionReceiver.sol";
import "../contracts_common/src/Interfaces/Medianizer.sol";
import "../ReferralValidator/ReferralValidator.sol";
/**
* @title Estate Sale contract with referral that supports also DAI and ETH as payment
* @notice This contract mananges the sale of our lands as Estates
*/
contract EstateSale is MetaTransactionReceiver, ReferralValidator {
using SafeMathWithRequire for uint256;
uint256 internal constant GRID_SIZE = 408; // 408 is the size of the Land
uint256 internal constant daiPrice = 14400000000000000;
ERC1155 internal immutable _asset;
LandToken internal immutable _land;
ERC20 internal immutable _sand;
Medianizer private immutable _medianizer;
ERC20 private immutable _dai;
address internal immutable _estate;
address payable internal _wallet;
uint256 internal immutable _expiryTime;
bytes32 internal immutable _merkleRoot;
bool _sandEnabled = false;
bool _etherEnabled = true;
bool _daiEnabled = false;
event LandQuadPurchased(
address indexed buyer,
address indexed to,
uint256 indexed topCornerId,
uint256 size,
uint256 price,
address token,
uint256 amountPaid
);
constructor(
address landAddress,
address sandContractAddress,
address initialMetaTx,
address admin,
address payable initialWalletAddress,
bytes32 merkleRoot,
uint256 expiryTime,
address medianizerContractAddress,
address daiTokenContractAddress,
address initialSigningWallet,
uint256 initialMaxCommissionRate,
address estate,
address asset
) public ReferralValidator(initialSigningWallet, initialMaxCommissionRate) {
_land = LandToken(landAddress);
_sand = ERC20(sandContractAddress);
_setMetaTransactionProcessor(initialMetaTx, true);
_wallet = initialWalletAddress;
_merkleRoot = merkleRoot;
_expiryTime = expiryTime;
_medianizer = Medianizer(medianizerContractAddress);
_dai = ERC20(daiTokenContractAddress);
_admin = admin;
_estate = estate;
_asset = ERC1155(asset);
}
/// @dev set the wallet receiving the proceeds
/// @param newWallet address of the new receiving wallet
function setReceivingWallet(address payable newWallet) external {
require(newWallet != address(0), "receiving wallet cannot be zero address");
require(msg.sender == _admin, "only admin can change the receiving wallet");
_wallet = newWallet;
}
/// @dev enable/disable DAI payment for Lands
/// @param enabled whether to enable or disable
function setDAIEnabled(bool enabled) external {
require(msg.sender == _admin, "only admin can enable/disable DAI");
_daiEnabled = enabled;
}
/// @notice return whether DAI payments are enabled
/// @return whether DAI payments are enabled
function isDAIEnabled() external view returns (bool) {
return _daiEnabled;
}
/// @notice enable/disable ETH payment for Lands
/// @param enabled whether to enable or disable
function setETHEnabled(bool enabled) external {
require(msg.sender == _admin, "only admin can enable/disable ETH");
_etherEnabled = enabled;
}
/// @notice return whether ETH payments are enabled
/// @return whether ETH payments are enabled
function isETHEnabled() external view returns (bool) {
return _etherEnabled;
}
/// @dev enable/disable the specific SAND payment for Lands
/// @param enabled whether to enable or disable
function setSANDEnabled(bool enabled) external {
require(msg.sender == _admin, "only admin can enable/disable SAND");
_sandEnabled = enabled;
}
/// @notice return whether the specific SAND payments are enabled
/// @return whether the specific SAND payments are enabled
function isSANDEnabled() external view returns (bool) {
return _sandEnabled;
}
function _checkValidity(
address buyer,
address reserved,
uint256 x,
uint256 y,
uint256 size,
uint256 price,
bytes32 salt,
uint256[] memory assetIds,
bytes32[] memory proof
) internal view {
/* solium-disable-next-line security/no-block-members */
require(block.timestamp < _expiryTime, "sale is over");
require(buyer == msg.sender || _metaTransactionContracts[msg.sender], "not authorized");
require(reserved == address(0) || reserved == buyer, "cannot buy reserved Land");
bytes32 leaf = _generateLandHash(x, y, size, price, reserved, salt, assetIds);
require(_verify(proof, leaf), "Invalid land provided");
}
function _mint(
address buyer,
address to,
uint256 x,
uint256 y,
uint256 size,
uint256 price,
address token,
uint256 tokenAmount
) internal {
if (size == 1 || _estate == address(0)) {
_land.mintQuad(to, size, x, y, "");
} else {
_land.mintQuad(_estate, size, x, y, abi.encode(to));
}
emit LandQuadPurchased(buyer, to, x + (y * GRID_SIZE), size, price, token, tokenAmount);
}
/**
* @notice buy Land with SAND using the merkle proof associated with it
* @param buyer address that perform the payment
* @param to address that will own the purchased Land
* @param reserved the reserved address (if any)
* @param x x coordinate of the Land
* @param y y coordinate of the Land
* @param size size of the pack of Land to purchase
* @param priceInSand price in SAND to purchase that Land
* @param proof merkleProof for that particular Land
*/
function buyLandWithSand(
address buyer,
address to,
address reserved,
uint256 x,
uint256 y,
uint256 size,
uint256 priceInSand,
bytes32 salt,
uint256[] calldata assetIds,
bytes32[] calldata proof,
bytes calldata referral
) external {
require(_sandEnabled, "sand payments not enabled");
_checkValidity(buyer, reserved, x, y, size, priceInSand, salt, assetIds, proof);
handleReferralWithERC20(buyer, priceInSand, referral, _wallet, address(_sand));
_mint(buyer, to, x, y, size, priceInSand, address(_sand), priceInSand);
_sendAssets(to, assetIds);
}
/**
* @notice buy Land with ETH using the merkle proof associated with it
* @param buyer address that perform the payment
* @param to address that will own the purchased Land
* @param reserved the reserved address (if any)
* @param x x coordinate of the Land
* @param y y coordinate of the Land
* @param size size of the pack of Land to purchase
* @param priceInSand price in SAND to purchase that Land
* @param proof merkleProof for that particular Land
* @param referral the referral used by the buyer
*/
function buyLandWithETH(
address buyer,
address to,
address reserved,
uint256 x,
uint256 y,
uint256 size,
uint256 priceInSand,
bytes32 salt,
uint256[] calldata assetIds,
bytes32[] calldata proof,
bytes calldata referral
) external payable {
require(_etherEnabled, "ether payments not enabled");
_checkValidity(buyer, reserved, x, y, size, priceInSand, salt, assetIds, proof);
uint256 ETHRequired = getEtherAmountWithSAND(priceInSand);
require(msg.value >= ETHRequired, "not enough ether sent");
if (msg.value - ETHRequired > 0) {
msg.sender.transfer(msg.value - ETHRequired); // refund extra
}
handleReferralWithETH(ETHRequired, referral, _wallet);
_mint(buyer, to, x, y, size, priceInSand, address(0), ETHRequired);
_sendAssets(to, assetIds);
}
/**
* @notice buy Land with DAI using the merkle proof associated with it
* @param buyer address that perform the payment
* @param to address that will own the purchased Land
* @param reserved the reserved address (if any)
* @param x x coordinate of the Land
* @param y y coordinate of the Land
* @param size size of the pack of Land to purchase
* @param priceInSand price in SAND to purchase that Land
* @param proof merkleProof for that particular Land
*/
function buyLandWithDAI(
address buyer,
address to,
address reserved,
uint256 x,
uint256 y,
uint256 size,
uint256 priceInSand,
bytes32 salt,
uint256[] calldata assetIds,
bytes32[] calldata proof,
bytes calldata referral
) external {
require(_daiEnabled, "dai payments not enabled");
_checkValidity(buyer, reserved, x, y, size, priceInSand, salt, assetIds, proof);
uint256 DAIRequired = priceInSand.mul(daiPrice).div(1000000000000000000);
handleReferralWithERC20(buyer, DAIRequired, referral, _wallet, address(_dai));
_mint(buyer, to, x, y, size, priceInSand, address(_dai), DAIRequired);
_sendAssets(to, assetIds);
}
/**
* @notice Gets the expiry time for the current sale
* @return The expiry time, as a unix epoch
*/
function getExpiryTime() external view returns (uint256) {
return _expiryTime;
}
/**
* @notice Gets the Merkle root associated with the current sale
* @return The Merkle root, as a bytes32 hash
*/
function merkleRoot() external view returns (bytes32) {
return _merkleRoot;
}
function _sendAssets(address to, uint256[] memory assetIds) internal {
uint256[] memory values = new uint256[](assetIds.length);
for (uint256 i = 0; i < assetIds.length; i++) {
values[i] = 1;
}
_asset.safeBatchTransferFrom(address(this), to, assetIds, values, "");
}
function _generateLandHash(
uint256 x,
uint256 y,
uint256 size,
uint256 price,
address reserved,
bytes32 salt,
uint256[] memory assetIds
) internal pure returns (bytes32) {
return keccak256(abi.encodePacked(x, y, size, price, reserved, salt, assetIds));
}
function _verify(bytes32[] memory proof, bytes32 leaf) internal view returns (bool) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash < proofElement) {
computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
} else {
computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
}
}
return computedHash == _merkleRoot;
}
/**
* @notice Returns the amount of ETH for a specific amount of SAND
* @param sandAmount An amount of SAND
* @return The amount of ETH
*/
function getEtherAmountWithSAND(uint256 sandAmount) public view returns (uint256) {
uint256 ethUsdPair = getEthUsdPair();
return sandAmount.mul(daiPrice).div(ethUsdPair);
}
/**
* @notice Gets the ETHUSD pair from the Medianizer contract
* @return The pair as an uint256
*/
function getEthUsdPair() internal view returns (uint256) {
bytes32 pair = _medianizer.read();
return uint256(pair);
}
function onERC1155Received(
address, /*operator*/
address, /*from*/
uint256, /*id*/
uint256, /*value*/
bytes calldata /*data*/
) external pure returns (bytes4) {
return 0xf23a6e61;
}
function onERC1155BatchReceived(
address, /*operator*/
address, /*from*/
uint256[] calldata, /*ids*/
uint256[] calldata, /*values*/
bytes calldata /*data*/
) external pure returns (bytes4) {
return 0xbc197c81;
}
function withdrawAssets(
address to,
uint256[] calldata assetIds,
uint256[] calldata values
) external {
require(msg.sender == _admin, "NOT_AUTHORIZED");
require(block.timestamp > _expiryTime, "SALE_NOT_OVER");
_asset.safeBatchTransferFrom(address(this), to, assetIds, values, "");
}
}pragma solidity 0.6.5;
interface LandToken {
function mintQuad(
address to,
uint256 size,
uint256 x,
uint256 y,
bytes calldata data
) external;
}/* solhint-disable not-rely-on-time, func-order */
pragma solidity 0.6.5;
import "../contracts_common/src/Libraries/SigUtil.sol";
import "../contracts_common/src/Libraries/SafeMathWithRequire.sol";
import "../contracts_common/src/Interfaces/ERC20.sol";
import "../contracts_common/src/BaseWithStorage/Admin.sol";
/// @dev This contract verifies if a referral is valid
contract ReferralValidator is Admin {
address private _signingWallet;
uint256 private _maxCommissionRate;
mapping(address => uint256) private _previousSigningWallets;
uint256 private _previousSigningDelay = 60 * 60 * 24 * 10;
event ReferralUsed(
address indexed referrer,
address indexed referee,
address indexed token,
uint256 amount,
uint256 commission,
uint256 commissionRate
);
constructor(address initialSigningWallet, uint256 initialMaxCommissionRate) public {
_signingWallet = initialSigningWallet;
_maxCommissionRate = initialMaxCommissionRate;
}
/**
* @dev Update the signing wallet
* @param newSigningWallet The new address of the signing wallet
*/
function updateSigningWallet(address newSigningWallet) external {
require(_admin == msg.sender, "Sender not admin");
_previousSigningWallets[_signingWallet] = now + _previousSigningDelay;
_signingWallet = newSigningWallet;
}
/**
* @dev signing wallet authorized for referral
* @return the address of the signing wallet
*/
function getSigningWallet() external view returns (address) {
return _signingWallet;
}
/**
* @notice the max commision rate
* @return the maximum commision rate that a referral can give
*/
function getMaxCommisionRate() external view returns (uint256) {
return _maxCommissionRate;
}
/**
* @dev Update the maximum commission rate
* @param newMaxCommissionRate The new maximum commission rate
*/
function updateMaxCommissionRate(uint256 newMaxCommissionRate) external {
require(_admin == msg.sender, "Sender not admin");
_maxCommissionRate = newMaxCommissionRate;
}
function handleReferralWithETH(
uint256 amount,
bytes memory referral,
address payable destination
) internal {
uint256 amountForDestination = amount;
if (referral.length > 0) {
(bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = decodeReferral(referral);
uint256 commission = 0;
if (isReferralValid(signature, referrer, referee, expiryTime, commissionRate)) {
commission = SafeMathWithRequire.div(SafeMathWithRequire.mul(amount, commissionRate), 10000);
emit ReferralUsed(referrer, referee, address(0), amount, commission, commissionRate);
amountForDestination = SafeMathWithRequire.sub(amountForDestination, commission);
}
if (commission > 0) {
address(uint160(referrer)).transfer(commission);
}
}
destination.transfer(amountForDestination);
}
function handleReferralWithERC20(
address buyer,
uint256 amount,
bytes memory referral,
address payable destination,
address tokenAddress
) internal {
ERC20 token = ERC20(tokenAddress);
uint256 amountForDestination = amount;
if (referral.length > 0) {
(bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = decodeReferral(referral);
uint256 commission = 0;
if (isReferralValid(signature, referrer, referee, expiryTime, commissionRate)) {
commission = SafeMathWithRequire.div(SafeMathWithRequire.mul(amount, commissionRate), 10000);
emit ReferralUsed(referrer, referee, tokenAddress, amount, commission, commissionRate);
amountForDestination = SafeMathWithRequire.sub(amountForDestination, commission);
}
if (commission > 0) {
require(token.transferFrom(buyer, referrer, commission), "commision transfer failed");
}
}
require(token.transferFrom(buyer, destination, amountForDestination), "payment transfer failed");
}
/**
* @notice Check if a referral is valid
* @param signature The signature to check (signed referral)
* @param referrer The address of the referrer
* @param referee The address of the referee
* @param expiryTime The expiry time of the referral
* @param commissionRate The commissionRate of the referral
* @return True if the referral is valid
*/
function isReferralValid(
bytes memory signature,
address referrer,
address referee,
uint256 expiryTime,
uint256 commissionRate
) public view returns (bool) {
if (commissionRate > _maxCommissionRate || referrer == referee || now > expiryTime) {
return false;
}
bytes32 hashedData = keccak256(abi.encodePacked(referrer, referee, expiryTime, commissionRate));
address signer = SigUtil.recover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hashedData)), signature);
if (_previousSigningWallets[signer] >= now) {
return true;
}
return _signingWallet == signer;
}
function decodeReferral(bytes memory referral)
public
pure
returns (
bytes memory,
address,
address,
uint256,
uint256
)
{
(bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = abi.decode(
referral,
(bytes, address, address, uint256, uint256)
);
return (signature, referrer, referee, expiryTime, commissionRate);
}
}pragma solidity ^0.6.0;
contract Admin {
address internal _admin;
/// @dev emitted when the contract administrator is changed.
/// @param oldAdmin address of the previous administrator.
/// @param newAdmin address of the new administrator.
event AdminChanged(address oldAdmin, address newAdmin);
/// @dev gives the current administrator of this contract.
/// @return the current administrator of this contract.
function getAdmin() external view returns (address) {
return _admin;
}
/// @dev change the administrator to be `newAdmin`.
/// @param newAdmin address of the new administrator.
function changeAdmin(address newAdmin) external {
require(msg.sender == _admin, "only admin can change admin");
emit AdminChanged(_admin, newAdmin);
_admin = newAdmin;
}
modifier onlyAdmin() {
require(msg.sender == _admin, "only admin allowed");
_;
}
}pragma solidity ^0.6.0;
import "./Admin.sol";
contract MetaTransactionReceiver is Admin {
mapping(address => bool) internal _metaTransactionContracts;
/// @dev emiited when a meta transaction processor is enabled/disabled
/// @param metaTransactionProcessor address that will be given/removed metaTransactionProcessor rights.
/// @param enabled set whether the metaTransactionProcessor is enabled or disabled.
event MetaTransactionProcessor(address metaTransactionProcessor, bool enabled);
/// @dev Enable or disable the ability of `metaTransactionProcessor` to perform meta-tx (metaTransactionProcessor rights).
/// @param metaTransactionProcessor address that will be given/removed metaTransactionProcessor rights.
/// @param enabled set whether the metaTransactionProcessor is enabled or disabled.
function setMetaTransactionProcessor(address metaTransactionProcessor, bool enabled) public {
require(msg.sender == _admin, "only admin can setup metaTransactionProcessors");
_setMetaTransactionProcessor(metaTransactionProcessor, enabled);
}
function _setMetaTransactionProcessor(address metaTransactionProcessor, bool enabled) internal {
_metaTransactionContracts[metaTransactionProcessor] = enabled;
emit MetaTransactionProcessor(metaTransactionProcessor, enabled);
}
/// @dev check whether address `who` is given meta-transaction execution rights.
/// @param who The address to query.
/// @return whether the address has meta-transaction execution rights.
function isMetaTransactionProcessor(address who) external view returns (bool) {
return _metaTransactionContracts[who];
}
}pragma solidity ^0.6.0;
/**
@title ERC-1155 Multi Token Standard
@dev See https://eips.ethereum.org/EIPS/eip-1155
Note: The ERC-165 identifier for this interface is 0xd9b67a26.
*/
interface ERC1155 {
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
event URI(string value, uint256 indexed id);
/**
@notice Transfers `value` amount of an `id` from `from` to `to` (with safety call).
@dev Caller must be approved to manage the tokens being transferred out of the `from` account (see "Approval" section of the standard).
MUST revert if `to` is the zero address.
MUST revert if balance of holder for token `id` is lower than the `value` sent.
MUST revert on any other error.
MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
After the above conditions are met, this function MUST check if `to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `to` and act appropriately (see "Safe Transfer Rules" section of the standard).
@param from Source address
@param to Target address
@param id ID of the token type
@param value Transfer amount
@param data Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `to`
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 value,
bytes calldata data
) external;
/**
@notice Transfers `values` amount(s) of `ids` from the `from` address to the `to` address specified (with safety call).
@dev Caller must be approved to manage the tokens being transferred out of the `from` account (see "Approval" section of the standard).
MUST revert if `to` is the zero address.
MUST revert if length of `ids` is not the same as length of `values`.
MUST revert if any of the balance(s) of the holder(s) for token(s) in `ids` is lower than the respective amount(s) in `values` sent to the recipient.
MUST revert on any other error.
MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
After the above conditions for the transfer(s) in the batch are met, this function MUST check if `to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `to` and act appropriately (see "Safe Transfer Rules" section of the standard).
@param from Source address
@param to Target address
@param ids IDs of each token type (order and length must match _values array)
@param values Transfer amounts per token type (order and length must match _ids array)
@param data Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `to`
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external;
/**
@notice Get the balance of an account's tokens.
@param owner The address of the token holder
@param id ID of the token
@return The _owner's balance of the token type requested
*/
function balanceOf(address owner, uint256 id) external view returns (uint256);
/**
@notice Get the balance of multiple account/token pairs
@param owners The addresses of the token holders
@param ids ID of the tokens
@return The _owner's balance of the token types requested (i.e. balance for each (owner, id) pair)
*/
function balanceOfBatch(address[] calldata owners, uint256[] calldata ids) external view returns (uint256[] memory);
/**
@notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
@dev MUST emit the ApprovalForAll event on success.
@param operator Address to add to the set of authorized operators
@param approved True if the operator is approved, false to revoke approval
*/
function setApprovalForAll(address operator, bool approved) external;
/**
@notice Queries the approval status of an operator for a given owner.
@param owner The owner of the tokens
@param operator Address of authorized operator
@return True if the operator is approved, false if not
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}pragma solidity ^0.6.0;
/// @dev see https://eips.ethereum.org/EIPS/eip-20
interface ERC20 {
/// @notice emitted when tokens are transfered from one address to another.
/// @param from address from which the token are transfered from (zero means tokens are minted).
/// @param to destination address which the token are transfered to (zero means tokens are burnt).
/// @param value amount of tokens transferred.
event Transfer(address indexed from, address indexed to, uint256 value);
/// @notice emitted when owner grant transfer rights to another address
/// @param owner address allowing its token to be transferred.
/// @param spender address allowed to spend on behalf of `owner`
/// @param value amount of tokens allowed.
event Approval(address indexed owner, address indexed spender, uint256 value);
/// @notice return the current total amount of tokens owned by all holders.
/// @return supply total number of tokens held.
function totalSupply() external view returns (uint256 supply);
/// @notice return the number of tokens held by a particular address.
/// @param who address being queried.
/// @return balance number of token held by that address.
function balanceOf(address who) external view returns (uint256 balance);
/// @notice transfer tokens to a specific address.
/// @param to destination address receiving the tokens.
/// @param value number of tokens to transfer.
/// @return success whether the transfer succeeded.
function transfer(address to, uint256 value) external returns (bool success);
/// @notice transfer tokens from one address to another.
/// @param from address tokens will be sent from.
/// @param to destination address receiving the tokens.
/// @param value number of tokens to transfer.
/// @return success whether the transfer succeeded.
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool success);
/// @notice approve an address to spend on your behalf.
/// @param spender address entitled to transfer on your behalf.
/// @param value amount allowed to be transfered.
/// @param success whether the approval succeeded.
function approve(address spender, uint256 value) external returns (bool success);
/// @notice return the current allowance for a particular owner/spender pair.
/// @param owner address allowing spender.
/// @param spender address allowed to spend.
/// @return amount number of tokens `spender` can spend on behalf of `owner`.
function allowance(address owner, address spender) external view returns (uint256 amount);
}pragma solidity ^0.6.0;
/**
* @title Medianizer contract
* @dev From MakerDAO (https://etherscan.io/address/0x729D19f657BD0614b4985Cf1D82531c67569197B#code)
*/
interface Medianizer {
function read() external view returns (bytes32);
}pragma solidity ^0.6.0;
/**
* @title SafeMath
* @dev Math operations with safety checks that revert
*/
library SafeMathWithRequire {
/**
* @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;
require(c / a == b, "overflow");
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "divbyzero");
// 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) {
require(b <= a, "undeflow");
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
require(c >= a, "overflow");
return c;
}
}pragma solidity ^0.6.0;
library SigUtil {
function recover(bytes32 hash, bytes memory sig) internal pure returns (address recovered) {
require(sig.length == 65);
bytes32 r;
bytes32 s;
uint8 v;
assembly {
r := mload(add(sig, 32))
s := mload(add(sig, 64))
v := byte(0, mload(add(sig, 96)))
}
// Version of signature should be 27 or 28, but 0 and 1 are also possible versions
if (v < 27) {
v += 27;
}
require(v == 27 || v == 28);
recovered = ecrecover(hash, v, r, s);
require(recovered != address(0));
}
function recoverWithZeroOnFailure(bytes32 hash, bytes memory sig) internal pure returns (address) {
if (sig.length != 65) {
return (address(0));
}
bytes32 r;
bytes32 s;
uint8 v;
assembly {
r := mload(add(sig, 32))
s := mload(add(sig, 64))
v := byte(0, mload(add(sig, 96)))
}
// Version of signature should be 27 or 28, but 0 and 1 are also possible versions
if (v < 27) {
v += 27;
}
if (v != 27 && v != 28) {
return (address(0));
} else {
return ecrecover(hash, v, r, s);
}
}
// Builds a prefixed hash to mimic the behavior of eth_sign.
function prefixed(bytes32 hash) internal pure returns (bytes memory) {
return abi.encodePacked("\x19Ethereum Signed Message:\n32", hash);
}
}{
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 2000
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"landAddress","type":"address"},{"internalType":"address","name":"sandContractAddress","type":"address"},{"internalType":"address","name":"initialMetaTx","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"address payable","name":"initialWalletAddress","type":"address"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"address","name":"medianizerContractAddress","type":"address"},{"internalType":"address","name":"daiTokenContractAddress","type":"address"},{"internalType":"address","name":"initialSigningWallet","type":"address"},{"internalType":"uint256","name":"initialMaxCommissionRate","type":"uint256"},{"internalType":"address","name":"estate","type":"address"},{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"topCornerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"}],"name":"LandQuadPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"metaTransactionProcessor","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"MetaTransactionProcessor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"address","name":"referee","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"commission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"commissionRate","type":"uint256"}],"name":"ReferralUsed","type":"event"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reserved","type":"address"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"uint256","name":"priceInSand","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes","name":"referral","type":"bytes"}],"name":"buyLandWithDAI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reserved","type":"address"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"uint256","name":"priceInSand","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes","name":"referral","type":"bytes"}],"name":"buyLandWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reserved","type":"address"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"uint256","name":"priceInSand","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes","name":"referral","type":"bytes"}],"name":"buyLandWithSand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"referral","type":"bytes"}],"name":"decodeReferral","outputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sandAmount","type":"uint256"}],"name":"getEtherAmountWithSAND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExpiryTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxCommisionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSigningWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDAIEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isETHEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isMetaTransactionProcessor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"address","name":"referee","type":"address"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"uint256","name":"commissionRate","type":"uint256"}],"name":"isReferralValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSANDEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDAIEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setETHEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"metaTransactionProcessor","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setMetaTransactionProcessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setReceivingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSANDEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxCommissionRate","type":"uint256"}],"name":"updateMaxCommissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSigningWallet","type":"address"}],"name":"updateSigningWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"withdrawAssets","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
610180604052620d2f006005556006805460ff60b01b1961ffff60a01b19909116600160a81b171690553480156200003657600080fd5b50604051620030693803806200306983398181016040526101a08110156200005d57600080fd5b50805160208201516040830151606080850151608086015160a08088015160c0808a015160e08b01516101008c01516101208d01516101408e01516101608f0151610180909f0151600280546001600160a01b0319166001600160a01b03851617905560038290558e8c1b6001600160601b03199081169099529a8d901b9097169094529a9b999a9899969895979396919590949093909190620001038b600162000179565b600680546001600160a01b039a8b166001600160a01b03199182161790915561016098909852610140969096526001600160601b0319606095861b811660e05293851b8416610100526000805499909816989096169790971790955592811b8316610120521b1660805250620001dd9350505050565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405161016051612df462000275600039806113c65280612c575250806113a252806118d75280611e0e525080612129528061224b52508061134a528061137b52508061293852508061113552806111665250806121b8528061221c52508061194b528061245f5250612df46000f3fe6080604052600436106101a15760003560e01c80637c53ec4c116100e1578063bc197c811161008a578063dc5074af11610064578063dc5074af14610c90578063e56f8a9e14610cc3578063e97eb0a214610ced578063f23a6e6114610d19576101a1565b8063bc197c8114610a3c578063c10a420814610bab578063caed350014610c7b576101a1565b8063984d6252116100bb578063984d625214610915578063a7e30684146109f4578063b522ecff14610a09576101a1565b80637c53ec4c1461087b5780638a04af6a146108a75780638f283970146108e2576101a1565b8063427b8d341161014e5780635d8e3021116101285780635d8e3021146106a057806365194ce7146106ca5780636e9960c31461083557806377f1c3ac14610866576101a1565b8063427b8d341461062f5780634a2537781461065857806358bc29441461066d576101a1565b806325cb5bc01161017f57806325cb5bc0146105c75780632eb4a7ab146105ee5780633b7c4c1514610603576101a1565b8063096bb3c6146101a65780630a474add146102ff57806318dff51014610463575b600080fd5b6102fd60048036036101608110156101bd57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e08201359190810190610120810161010082013564010000000081111561021a57600080fd5b82018360208201111561022c57600080fd5b8035906020019184602083028401116401000000008311171561024e57600080fd5b91939092909160208101903564010000000081111561026c57600080fd5b82018360208201111561027e57600080fd5b803590602001918460208302840111640100000000831117156102a057600080fd5b9193909290916020810190356401000000008111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460018302840111640100000000831117156102f257600080fd5b509092509050610dbb565b005b34801561030b57600080fd5b506102fd600480360361016081101561032357600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e08201359190810190610120810161010082013564010000000081111561038057600080fd5b82018360208201111561039257600080fd5b803590602001918460208302840111640100000000831117156103b457600080fd5b9193909290916020810190356401000000008111156103d257600080fd5b8201836020820111156103e457600080fd5b8035906020019184602083028401116401000000008311171561040657600080fd5b91939092909160208101903564010000000081111561042457600080fd5b82018360208201111561043657600080fd5b8035906020019184600183028401116401000000008311171561045857600080fd5b509092509050610ff8565b34801561046f57600080fd5b506102fd600480360361016081101561048757600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e0820135919081019061012081016101008201356401000000008111156104e457600080fd5b8201836020820111156104f657600080fd5b8035906020019184602083028401116401000000008311171561051857600080fd5b91939092909160208101903564010000000081111561053657600080fd5b82018360208201111561054857600080fd5b8035906020019184602083028401116401000000008311171561056a57600080fd5b91939092909160208101903564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b5090925090506111d8565b3480156105d357600080fd5b506105dc6113a0565b60408051918252519081900360200190f35b3480156105fa57600080fd5b506105dc6113c4565b34801561060f57600080fd5b506102fd6004803603602081101561062657600080fd5b503515156113e8565b34801561063b57600080fd5b5061064461147d565b604080519115158252519081900360200190f35b34801561066457600080fd5b506106446114a0565b34801561067957600080fd5b506102fd6004803603602081101561069057600080fd5b50356001600160a01b03166114c2565b3480156106ac57600080fd5b506105dc600480360360208110156106c357600080fd5b503561156d565b3480156106d657600080fd5b5061077d600480360360208110156106ed57600080fd5b81019060208101813564010000000081111561070857600080fd5b82018360208201111561071a57600080fd5b8035906020019184600183028401116401000000008311171561073c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061159c945050505050565b6040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156107f65781810151838201526020016107de565b50505050905090810190601f1680156108235780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561084157600080fd5b5061084a6116a1565b604080516001600160a01b039092168252519081900360200190f35b34801561087257600080fd5b506105dc6116b0565b34801561088757600080fd5b506102fd6004803603602081101561089e57600080fd5b503515156116b6565b3480156108b357600080fd5b506102fd600480360360408110156108ca57600080fd5b506001600160a01b0381351690602001351515611749565b3480156108ee57600080fd5b506102fd6004803603602081101561090557600080fd5b50356001600160a01b03166117a0565b34801561092157600080fd5b506102fd6004803603606081101561093857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561096357600080fd5b82018360208201111561097557600080fd5b8035906020019184602083028401116401000000008311171561099757600080fd5b9193909290916020810190356401000000008111156109b557600080fd5b8201836020820111156109c757600080fd5b803590602001918460208302840111640100000000831117156109e957600080fd5b509092509050611876565b348015610a0057600080fd5b50610644611a75565b348015610a1557600080fd5b506102fd60048036036020811015610a2c57600080fd5b50356001600160a01b0316611a96565b348015610a4857600080fd5b50610b76600480360360a0811015610a5f57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135640100000000811115610a9357600080fd5b820183602082011115610aa557600080fd5b80359060200191846020830284011164010000000083111715610ac757600080fd5b919390929091602081019035640100000000811115610ae557600080fd5b820183602082011115610af757600080fd5b80359060200191846020830284011164010000000083111715610b1957600080fd5b919390929091602081019035640100000000811115610b3757600080fd5b820183602082011115610b4957600080fd5b80359060200191846001830284011164010000000083111715610b6b57600080fd5b509092509050611b53565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b348015610bb757600080fd5b50610644600480360360a0811015610bce57600080fd5b810190602081018135640100000000811115610be957600080fd5b820183602082011115610bfb57600080fd5b80359060200191846001830284011164010000000083111715610c1d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260408101359250606001359050611b80565b348015610c8757600080fd5b5061084a611cbc565b348015610c9c57600080fd5b5061064460048036036020811015610cb357600080fd5b50356001600160a01b0316611ccb565b348015610ccf57600080fd5b506102fd60048036036020811015610ce657600080fd5b5035611ce9565b348015610cf957600080fd5b506102fd60048036036020811015610d1057600080fd5b50351515611d4d565b348015610d2557600080fd5b50610b76600480360360a0811015610d3c57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610d7c57600080fd5b820183602082011115610d8e57600080fd5b80359060200191846001830284011164010000000083111715610db057600080fd5b509092509050611de1565b6006547501000000000000000000000000000000000000000000900460ff16610e2b576040805162461bcd60e51b815260206004820152601a60248201527f6574686572207061796d656e7473206e6f7420656e61626c6564000000000000604482015290519081900360640190fd5b610eb08e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b6000610ebb8961156d565b905080341015610f12576040805162461bcd60e51b815260206004820152601560248201527f6e6f7420656e6f7567682065746865722073656e740000000000000000000000604482015290519081900360640190fd5b3481900315610f4c5760405133903483900380156108fc02916000818181858888f19350505050158015610f4a573d6000803e3d6000fd5b505b610f998184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b03169150611fe99050565b610faa8f8f8e8e8e8e60008861211d565b610fe78e8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506123e892505050565b505050505050505050505050505050565b60065474010000000000000000000000000000000000000000900460ff16611067576040805162461bcd60e51b815260206004820152601960248201527f73616e64207061796d656e7473206e6f7420656e61626c656400000000000000604482015290519081900360640190fd5b6110ec8e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b61115b8e8984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b031691507f000000000000000000000000000000000000000000000000000000000000000090506125ac565b61118b8e8e8d8d8d8d7f00000000000000000000000000000000000000000000000000000000000000008f61211d565b6111c88d8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506123e892505050565b5050505050505050505050505050565b600654760100000000000000000000000000000000000000000000900460ff16611249576040805162461bcd60e51b815260206004820152601860248201527f646169207061796d656e7473206e6f7420656e61626c65640000000000000000604482015290519081900360640190fd5b6112ce8e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b60006112ff670de0b6b3a76400006112f38b663328b944c4000063ffffffff61285816565b9063ffffffff6128ce16565b90506113708f8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b031691507f000000000000000000000000000000000000000000000000000000000000000090506125ac565b610faa8f8f8e8e8e8e7f00000000000000000000000000000000000000000000000000000000000000008861211d565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000546001600160a01b031633146114315760405162461bcd60e51b8152600401808060200182810382526021815260200180612d9e6021913960400191505060405180910390fd5b60068054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600654760100000000000000000000000000000000000000000000900460ff1690565b6006547501000000000000000000000000000000000000000000900460ff1690565b6000546001600160a01b03163314611521576040805162461bcd60e51b815260206004820152601060248201527f53656e646572206e6f742061646d696e00000000000000000000000000000000604482015290519081900360640190fd5b600554600280546001600160a01b03908116600090815260046020526040902042909301909255805473ffffffffffffffffffffffffffffffffffffffff191692909116919091179055565b600080611578612933565b9050611595816112f385663328b944c4000063ffffffff61285816565b9392505050565b606060008060008060606000806000808a80602001905160a08110156115c157600080fd5b81019080805160405193929190846401000000008211156115e157600080fd5b9083019060208201858111156115f657600080fd5b825164010000000081118282018810171561161057600080fd5b82525081516020918201929091019080838360005b8381101561163d578181015183820152602001611625565b50505050905090810190601f16801561166a5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608090930151959f50909d509b5099509197505050505050505091939590929450565b6000546001600160a01b031690565b60035490565b6000546001600160a01b031633146116ff5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d4e6022913960400191505060405180910390fd5b6006805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146117925760405162461bcd60e51b815260040180806020018281038252602e815260200180612d70602e913960400191505060405180910390fd5b61179c82826129c1565b5050565b6000546001600160a01b031633146117ff576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e206368616e67652061646d696e0000000000604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118d5576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000004211611949576040805162461bcd60e51b815260206004820152600d60248201527f53414c455f4e4f545f4f56455200000000000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d63087878787876040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018060200180602001806020018481038452888882818152602001925060200280828437600083820152601f01601f19169091018581038452868152602090810191508790870280828437600081840152601f19601f8201169050808301925050508481038252600081526020016020019950505050505050505050600060405180830381600087803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b505050505050505050565b60065474010000000000000000000000000000000000000000900460ff1690565b6001600160a01b038116611adb5760405162461bcd60e51b8152600401808060200182810382526027815260200180612cfd6027913960400191505060405180910390fd5b6000546001600160a01b03163314611b245760405162461bcd60e51b815260040180806020018281038252602a815260200180612d24602a913960400191505060405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6000600354821180611ba35750836001600160a01b0316856001600160a01b0316145b80611bad57508242115b15611bba57506000611cb3565b60408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b166034830152604882018690526068808301869052835180840390910181526088830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060a884015260c48084018290528451808503909101815260e49093019093528151910120600090611c719089612a43565b6001600160a01b0381166000908152600460205260409020549091504211611c9e57600192505050611cb3565b6002546001600160a01b039081169116149150505b95945050505050565b6002546001600160a01b031690565b6001600160a01b031660009081526001602052604090205460ff1690565b6000546001600160a01b03163314611d48576040805162461bcd60e51b815260206004820152601060248201527f53656e646572206e6f742061646d696e00000000000000000000000000000000604482015290519081900360640190fd5b600355565b6000546001600160a01b03163314611d965760405162461bcd60e51b8152600401808060200182810382526021815260200180612cdc6021913960400191505060405180910390fd5b600680549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b7f00000000000000000000000000000000000000000000000000000000000000004210611e80576040805162461bcd60e51b815260206004820152600c60248201527f73616c65206973206f7665720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038916331480611ea657503360009081526001602052604090205460ff165b611ef7576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0388161580611f1e5750886001600160a01b0316886001600160a01b0316145b611f6f576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f7420627579207265736572766564204c616e640000000000000000604482015290519081900360640190fd5b6000611f80888888888d8989612b10565b9050611f8c8282612bb5565b611fdd576040805162461bcd60e51b815260206004820152601560248201527f496e76616c6964206c616e642070726f76696465640000000000000000000000604482015290519081900360640190fd5b50505050505050505050565b81518390156120e05760606000806000806120038861159c565b939850919650945092509050600061201e8686868686611b80565b1561209b576120386120308b84612858565b6127106128ce565b604080518c81526020810183905280820185905290519192506000916001600160a01b0387811692908916917fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac49181900360600190a46120988782612c7e565b96505b80156120d9576040516001600160a01b0386169082156108fc029083906000818181858888f193505050501580156120d7573d6000803e3d6000fd5b505b5050505050505b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612116573d6000803e3d6000fd5b5050505050565b836001148061215357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b1561221a57604080517f6e1e3bbf0000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015260248201879052604482018990526064820188905260a06084830152600060a4830181905292517f000000000000000000000000000000000000000000000000000000000000000090911692636e1e3bbf9260e4808201939182900301818387803b1580156121fd57600080fd5b505af1158015612211573d6000803e3d6000fd5b5050505061237e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e1e3bbf7f00000000000000000000000000000000000000000000000000000000000000008689898c60405160200180826001600160a01b03166001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156123155781810151838201526020016122fd565b50505050905090810190601f1680156123425780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b505050505b60408051858152602081018590526001600160a01b03848116828401526060820184905291516101988802890192808b1692908c16917fe4dfa6ac11314892f3029b34a25b1a887da3b1cab2bbf8506d87128ba6e3ac029181900360800190a45050505050505050565b6060815167ffffffffffffffff8111801561240257600080fd5b5060405190808252806020026020018201604052801561242c578160200160208202803683370190505b50905060005b825181101561245c57600182828151811061244957fe5b6020908102919091010152600101612432565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d6308585856040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845286818151815260200191508051906020019060200280838360005b838110156125175781810151838201526020016124ff565b50505050905001848103835285818151815260200191508051906020019060200280838360005b8381101561255657818101518382015260200161253e565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b15801561258f57600080fd5b505af11580156125a3573d6000803e3d6000fd5b50505050505050565b825181908590156127675760606000806000806125c88a61159c565b93985091965094509250905060006125e38686868686611b80565b15612669576125f56120308d84612858565b9050886001600160a01b0316846001600160a01b0316866001600160a01b03167fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac48f858760405180848152602001838152602001828152602001935050505060405180910390a46126668782612c7e565b96505b801561276057604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038f811660048301528781166024830152604482018490529151918a16916323b872dd916064808201926020929091908290030181600087803b1580156126e357600080fd5b505af11580156126f7573d6000803e3d6000fd5b505050506040513d602081101561270d57600080fd5b5051612760576040805162461bcd60e51b815260206004820152601960248201527f636f6d6d6973696f6e207472616e73666572206661696c656400000000000000604482015290519081900360640190fd5b5050505050505b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301528681166024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b1580156127db57600080fd5b505af11580156127ef573d6000803e3d6000fd5b505050506040513d602081101561280557600080fd5b50516125a3576040805162461bcd60e51b815260206004820152601760248201527f7061796d656e74207472616e73666572206661696c6564000000000000000000604482015290519081900360640190fd5b600082612867575060006128c8565b508181028183828161287557fe5b04146128c8576040805162461bcd60e51b815260206004820152600860248201527f6f766572666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600081612922576040805162461bcd60e51b815260206004820152600960248201527f64697662797a65726f0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b81838161292b57fe5b049392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b15801561298f57600080fd5b505afa1580156129a3573d6000803e3d6000fd5b505050506040513d60208110156129b957600080fd5b505191505090565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b60008151604114612a5357600080fd5b60208201516040830151606084015160001a601b811015612a7257601b015b8060ff16601b1480612a8757508060ff16601c145b612a9057600080fd5b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015612ae7573d6000803e3d6000fd5b5050604051601f1901519450506001600160a01b038416612b0757600080fd5b50505092915050565b60008787878787878760405160200180888152602001878152602001868152602001858152602001846001600160a01b03166001600160a01b031660601b8152601401838152602001828051906020019060200280838360005b83811015612b82578181015183820152602001612b6a565b50505050905001975050505050505050604051602081830303815290604052805190602001209050979650505050505050565b600081815b8451811015612c54576000858281518110612bd157fe5b6020026020010151905080831015612c195782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c4b565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101612bba565b507f0000000000000000000000000000000000000000000000000000000000000000149392505050565b600082821115612cd5576040805162461bcd60e51b815260206004820152600860248201527f756e6465666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5090039056fe6f6e6c792061646d696e2063616e20656e61626c652f64697361626c6520455448726563656976696e672077616c6c65742063616e6e6f74206265207a65726f20616464726573736f6e6c792061646d696e2063616e206368616e67652074686520726563656976696e672077616c6c65746f6e6c792061646d696e2063616e20656e61626c652f64697361626c652053414e446f6e6c792061646d696e2063616e207365747570206d6574615472616e73616374696f6e50726f636573736f72736f6e6c792061646d696e2063616e20656e61626c652f64697361626c6520444149a2646970667358221220017c86843cd55aab5f48daa4112028f7c7f4b8849a084b581d3f67acfd58b6f864736f6c6343000605003300000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d00000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d000000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f80000000000000000000000009695ed5020bb47880738db356678fe8cbc8ff60b6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0000000000000000000000000000000000000000000000000000000005f3bd0d0000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003044719d139f866a44c988823513ecb93060bf1b00000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a8
Deployed Bytecode
0x6080604052600436106101a15760003560e01c80637c53ec4c116100e1578063bc197c811161008a578063dc5074af11610064578063dc5074af14610c90578063e56f8a9e14610cc3578063e97eb0a214610ced578063f23a6e6114610d19576101a1565b8063bc197c8114610a3c578063c10a420814610bab578063caed350014610c7b576101a1565b8063984d6252116100bb578063984d625214610915578063a7e30684146109f4578063b522ecff14610a09576101a1565b80637c53ec4c1461087b5780638a04af6a146108a75780638f283970146108e2576101a1565b8063427b8d341161014e5780635d8e3021116101285780635d8e3021146106a057806365194ce7146106ca5780636e9960c31461083557806377f1c3ac14610866576101a1565b8063427b8d341461062f5780634a2537781461065857806358bc29441461066d576101a1565b806325cb5bc01161017f57806325cb5bc0146105c75780632eb4a7ab146105ee5780633b7c4c1514610603576101a1565b8063096bb3c6146101a65780630a474add146102ff57806318dff51014610463575b600080fd5b6102fd60048036036101608110156101bd57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e08201359190810190610120810161010082013564010000000081111561021a57600080fd5b82018360208201111561022c57600080fd5b8035906020019184602083028401116401000000008311171561024e57600080fd5b91939092909160208101903564010000000081111561026c57600080fd5b82018360208201111561027e57600080fd5b803590602001918460208302840111640100000000831117156102a057600080fd5b9193909290916020810190356401000000008111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460018302840111640100000000831117156102f257600080fd5b509092509050610dbb565b005b34801561030b57600080fd5b506102fd600480360361016081101561032357600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e08201359190810190610120810161010082013564010000000081111561038057600080fd5b82018360208201111561039257600080fd5b803590602001918460208302840111640100000000831117156103b457600080fd5b9193909290916020810190356401000000008111156103d257600080fd5b8201836020820111156103e457600080fd5b8035906020019184602083028401116401000000008311171561040657600080fd5b91939092909160208101903564010000000081111561042457600080fd5b82018360208201111561043657600080fd5b8035906020019184600183028401116401000000008311171561045857600080fd5b509092509050610ff8565b34801561046f57600080fd5b506102fd600480360361016081101561048757600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e0820135919081019061012081016101008201356401000000008111156104e457600080fd5b8201836020820111156104f657600080fd5b8035906020019184602083028401116401000000008311171561051857600080fd5b91939092909160208101903564010000000081111561053657600080fd5b82018360208201111561054857600080fd5b8035906020019184602083028401116401000000008311171561056a57600080fd5b91939092909160208101903564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b5090925090506111d8565b3480156105d357600080fd5b506105dc6113a0565b60408051918252519081900360200190f35b3480156105fa57600080fd5b506105dc6113c4565b34801561060f57600080fd5b506102fd6004803603602081101561062657600080fd5b503515156113e8565b34801561063b57600080fd5b5061064461147d565b604080519115158252519081900360200190f35b34801561066457600080fd5b506106446114a0565b34801561067957600080fd5b506102fd6004803603602081101561069057600080fd5b50356001600160a01b03166114c2565b3480156106ac57600080fd5b506105dc600480360360208110156106c357600080fd5b503561156d565b3480156106d657600080fd5b5061077d600480360360208110156106ed57600080fd5b81019060208101813564010000000081111561070857600080fd5b82018360208201111561071a57600080fd5b8035906020019184600183028401116401000000008311171561073c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061159c945050505050565b6040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156107f65781810151838201526020016107de565b50505050905090810190601f1680156108235780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561084157600080fd5b5061084a6116a1565b604080516001600160a01b039092168252519081900360200190f35b34801561087257600080fd5b506105dc6116b0565b34801561088757600080fd5b506102fd6004803603602081101561089e57600080fd5b503515156116b6565b3480156108b357600080fd5b506102fd600480360360408110156108ca57600080fd5b506001600160a01b0381351690602001351515611749565b3480156108ee57600080fd5b506102fd6004803603602081101561090557600080fd5b50356001600160a01b03166117a0565b34801561092157600080fd5b506102fd6004803603606081101561093857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561096357600080fd5b82018360208201111561097557600080fd5b8035906020019184602083028401116401000000008311171561099757600080fd5b9193909290916020810190356401000000008111156109b557600080fd5b8201836020820111156109c757600080fd5b803590602001918460208302840111640100000000831117156109e957600080fd5b509092509050611876565b348015610a0057600080fd5b50610644611a75565b348015610a1557600080fd5b506102fd60048036036020811015610a2c57600080fd5b50356001600160a01b0316611a96565b348015610a4857600080fd5b50610b76600480360360a0811015610a5f57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135640100000000811115610a9357600080fd5b820183602082011115610aa557600080fd5b80359060200191846020830284011164010000000083111715610ac757600080fd5b919390929091602081019035640100000000811115610ae557600080fd5b820183602082011115610af757600080fd5b80359060200191846020830284011164010000000083111715610b1957600080fd5b919390929091602081019035640100000000811115610b3757600080fd5b820183602082011115610b4957600080fd5b80359060200191846001830284011164010000000083111715610b6b57600080fd5b509092509050611b53565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b348015610bb757600080fd5b50610644600480360360a0811015610bce57600080fd5b810190602081018135640100000000811115610be957600080fd5b820183602082011115610bfb57600080fd5b80359060200191846001830284011164010000000083111715610c1d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260408101359250606001359050611b80565b348015610c8757600080fd5b5061084a611cbc565b348015610c9c57600080fd5b5061064460048036036020811015610cb357600080fd5b50356001600160a01b0316611ccb565b348015610ccf57600080fd5b506102fd60048036036020811015610ce657600080fd5b5035611ce9565b348015610cf957600080fd5b506102fd60048036036020811015610d1057600080fd5b50351515611d4d565b348015610d2557600080fd5b50610b76600480360360a0811015610d3c57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610d7c57600080fd5b820183602082011115610d8e57600080fd5b80359060200191846001830284011164010000000083111715610db057600080fd5b509092509050611de1565b6006547501000000000000000000000000000000000000000000900460ff16610e2b576040805162461bcd60e51b815260206004820152601a60248201527f6574686572207061796d656e7473206e6f7420656e61626c6564000000000000604482015290519081900360640190fd5b610eb08e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b6000610ebb8961156d565b905080341015610f12576040805162461bcd60e51b815260206004820152601560248201527f6e6f7420656e6f7567682065746865722073656e740000000000000000000000604482015290519081900360640190fd5b3481900315610f4c5760405133903483900380156108fc02916000818181858888f19350505050158015610f4a573d6000803e3d6000fd5b505b610f998184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b03169150611fe99050565b610faa8f8f8e8e8e8e60008861211d565b610fe78e8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506123e892505050565b505050505050505050505050505050565b60065474010000000000000000000000000000000000000000900460ff16611067576040805162461bcd60e51b815260206004820152601960248201527f73616e64207061796d656e7473206e6f7420656e61626c656400000000000000604482015290519081900360640190fd5b6110ec8e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b61115b8e8984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b031691507f0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d090506125ac565b61118b8e8e8d8d8d8d7f0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d08f61211d565b6111c88d8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506123e892505050565b5050505050505050505050505050565b600654760100000000000000000000000000000000000000000000900460ff16611249576040805162461bcd60e51b815260206004820152601860248201527f646169207061796d656e7473206e6f7420656e61626c65640000000000000000604482015290519081900360640190fd5b6112ce8e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b60006112ff670de0b6b3a76400006112f38b663328b944c4000063ffffffff61285816565b9063ffffffff6128ce16565b90506113708f8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b031691507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f90506125ac565b610faa8f8f8e8e8e8e7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f8861211d565b7f000000000000000000000000000000000000000000000000000000005f3bd0d090565b7f6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee090565b6000546001600160a01b031633146114315760405162461bcd60e51b8152600401808060200182810382526021815260200180612d9e6021913960400191505060405180910390fd5b60068054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600654760100000000000000000000000000000000000000000000900460ff1690565b6006547501000000000000000000000000000000000000000000900460ff1690565b6000546001600160a01b03163314611521576040805162461bcd60e51b815260206004820152601060248201527f53656e646572206e6f742061646d696e00000000000000000000000000000000604482015290519081900360640190fd5b600554600280546001600160a01b03908116600090815260046020526040902042909301909255805473ffffffffffffffffffffffffffffffffffffffff191692909116919091179055565b600080611578612933565b9050611595816112f385663328b944c4000063ffffffff61285816565b9392505050565b606060008060008060606000806000808a80602001905160a08110156115c157600080fd5b81019080805160405193929190846401000000008211156115e157600080fd5b9083019060208201858111156115f657600080fd5b825164010000000081118282018810171561161057600080fd5b82525081516020918201929091019080838360005b8381101561163d578181015183820152602001611625565b50505050905090810190601f16801561166a5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608090930151959f50909d509b5099509197505050505050505091939590929450565b6000546001600160a01b031690565b60035490565b6000546001600160a01b031633146116ff5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d4e6022913960400191505060405180910390fd5b6006805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146117925760405162461bcd60e51b815260040180806020018281038252602e815260200180612d70602e913960400191505060405180910390fd5b61179c82826129c1565b5050565b6000546001600160a01b031633146117ff576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e206368616e67652061646d696e0000000000604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118d5576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000005f3bd0d04211611949576040805162461bcd60e51b815260206004820152600d60248201527f53414c455f4e4f545f4f56455200000000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a86001600160a01b0316632eb2c2d63087878787876040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018060200180602001806020018481038452888882818152602001925060200280828437600083820152601f01601f19169091018581038452868152602090810191508790870280828437600081840152601f19601f8201169050808301925050508481038252600081526020016020019950505050505050505050600060405180830381600087803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b505050505050505050565b60065474010000000000000000000000000000000000000000900460ff1690565b6001600160a01b038116611adb5760405162461bcd60e51b8152600401808060200182810382526027815260200180612cfd6027913960400191505060405180910390fd5b6000546001600160a01b03163314611b245760405162461bcd60e51b815260040180806020018281038252602a815260200180612d24602a913960400191505060405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6000600354821180611ba35750836001600160a01b0316856001600160a01b0316145b80611bad57508242115b15611bba57506000611cb3565b60408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b166034830152604882018690526068808301869052835180840390910181526088830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060a884015260c48084018290528451808503909101815260e49093019093528151910120600090611c719089612a43565b6001600160a01b0381166000908152600460205260409020549091504211611c9e57600192505050611cb3565b6002546001600160a01b039081169116149150505b95945050505050565b6002546001600160a01b031690565b6001600160a01b031660009081526001602052604090205460ff1690565b6000546001600160a01b03163314611d48576040805162461bcd60e51b815260206004820152601060248201527f53656e646572206e6f742061646d696e00000000000000000000000000000000604482015290519081900360640190fd5b600355565b6000546001600160a01b03163314611d965760405162461bcd60e51b8152600401808060200182810382526021815260200180612cdc6021913960400191505060405180910390fd5b600680549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b7f000000000000000000000000000000000000000000000000000000005f3bd0d04210611e80576040805162461bcd60e51b815260206004820152600c60248201527f73616c65206973206f7665720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038916331480611ea657503360009081526001602052604090205460ff165b611ef7576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0388161580611f1e5750886001600160a01b0316886001600160a01b0316145b611f6f576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f7420627579207265736572766564204c616e640000000000000000604482015290519081900360640190fd5b6000611f80888888888d8989612b10565b9050611f8c8282612bb5565b611fdd576040805162461bcd60e51b815260206004820152601560248201527f496e76616c6964206c616e642070726f76696465640000000000000000000000604482015290519081900360640190fd5b50505050505050505050565b81518390156120e05760606000806000806120038861159c565b939850919650945092509050600061201e8686868686611b80565b1561209b576120386120308b84612858565b6127106128ce565b604080518c81526020810183905280820185905290519192506000916001600160a01b0387811692908916917fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac49181900360600190a46120988782612c7e565b96505b80156120d9576040516001600160a01b0386169082156108fc029083906000818181858888f193505050501580156120d7573d6000803e3d6000fd5b505b5050505050505b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612116573d6000803e3d6000fd5b5050505050565b836001148061215357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b1561221a57604080517f6e1e3bbf0000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015260248201879052604482018990526064820188905260a06084830152600060a4830181905292517f00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a90911692636e1e3bbf9260e4808201939182900301818387803b1580156121fd57600080fd5b505af1158015612211573d6000803e3d6000fd5b5050505061237e565b7f00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a6001600160a01b0316636e1e3bbf7f00000000000000000000000000000000000000000000000000000000000000008689898c60405160200180826001600160a01b03166001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156123155781810151838201526020016122fd565b50505050905090810190601f1680156123425780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b505050505b60408051858152602081018590526001600160a01b03848116828401526060820184905291516101988802890192808b1692908c16917fe4dfa6ac11314892f3029b34a25b1a887da3b1cab2bbf8506d87128ba6e3ac029181900360800190a45050505050505050565b6060815167ffffffffffffffff8111801561240257600080fd5b5060405190808252806020026020018201604052801561242c578160200160208202803683370190505b50905060005b825181101561245c57600182828151811061244957fe5b6020908102919091010152600101612432565b507f000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a86001600160a01b0316632eb2c2d6308585856040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845286818151815260200191508051906020019060200280838360005b838110156125175781810151838201526020016124ff565b50505050905001848103835285818151815260200191508051906020019060200280838360005b8381101561255657818101518382015260200161253e565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b15801561258f57600080fd5b505af11580156125a3573d6000803e3d6000fd5b50505050505050565b825181908590156127675760606000806000806125c88a61159c565b93985091965094509250905060006125e38686868686611b80565b15612669576125f56120308d84612858565b9050886001600160a01b0316846001600160a01b0316866001600160a01b03167fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac48f858760405180848152602001838152602001828152602001935050505060405180910390a46126668782612c7e565b96505b801561276057604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038f811660048301528781166024830152604482018490529151918a16916323b872dd916064808201926020929091908290030181600087803b1580156126e357600080fd5b505af11580156126f7573d6000803e3d6000fd5b505050506040513d602081101561270d57600080fd5b5051612760576040805162461bcd60e51b815260206004820152601960248201527f636f6d6d6973696f6e207472616e73666572206661696c656400000000000000604482015290519081900360640190fd5b5050505050505b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301528681166024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b1580156127db57600080fd5b505af11580156127ef573d6000803e3d6000fd5b505050506040513d602081101561280557600080fd5b50516125a3576040805162461bcd60e51b815260206004820152601760248201527f7061796d656e74207472616e73666572206661696c6564000000000000000000604482015290519081900360640190fd5b600082612867575060006128c8565b508181028183828161287557fe5b04146128c8576040805162461bcd60e51b815260206004820152600860248201527f6f766572666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600081612922576040805162461bcd60e51b815260206004820152600960248201527f64697662797a65726f0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b81838161292b57fe5b049392505050565b6000807f000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b6001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b15801561298f57600080fd5b505afa1580156129a3573d6000803e3d6000fd5b505050506040513d60208110156129b957600080fd5b505191505090565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b60008151604114612a5357600080fd5b60208201516040830151606084015160001a601b811015612a7257601b015b8060ff16601b1480612a8757508060ff16601c145b612a9057600080fd5b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015612ae7573d6000803e3d6000fd5b5050604051601f1901519450506001600160a01b038416612b0757600080fd5b50505092915050565b60008787878787878760405160200180888152602001878152602001868152602001858152602001846001600160a01b03166001600160a01b031660601b8152601401838152602001828051906020019060200280838360005b83811015612b82578181015183820152602001612b6a565b50505050905001975050505050505050604051602081830303815290604052805190602001209050979650505050505050565b600081815b8451811015612c54576000858281518110612bd157fe5b6020026020010151905080831015612c195782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c4b565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101612bba565b507f6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0149392505050565b600082821115612cd5576040805162461bcd60e51b815260206004820152600860248201527f756e6465666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5090039056fe6f6e6c792061646d696e2063616e20656e61626c652f64697361626c6520455448726563656976696e672077616c6c65742063616e6e6f74206265207a65726f20616464726573736f6e6c792061646d696e2063616e206368616e67652074686520726563656976696e672077616c6c65746f6e6c792061646d696e2063616e20656e61626c652f64697361626c652053414e446f6e6c792061646d696e2063616e207365747570206d6574615472616e73616374696f6e50726f636573736f72736f6e6c792061646d696e2063616e20656e61626c652f64697361626c6520444149a2646970667358221220017c86843cd55aab5f48daa4112028f7c7f4b8849a084b581d3f67acfd58b6f864736f6c63430006050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d00000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d000000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f80000000000000000000000009695ed5020bb47880738db356678fe8cbc8ff60b6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0000000000000000000000000000000000000000000000000000000005f3bd0d0000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003044719d139f866a44c988823513ecb93060bf1b00000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a8
-----Decoded View---------------
Arg [0] : landAddress (address): 0x50f5474724e0Ee42D9a4e711ccFB275809Fd6d4a
Arg [1] : sandContractAddress (address): 0x3845badAde8e6dFF049820680d1F14bD3903a5d0
Arg [2] : initialMetaTx (address): 0x3845badAde8e6dFF049820680d1F14bD3903a5d0
Arg [3] : admin (address): 0x18dd4e0eb8699eA4FeE238dE41ECfb95e32272f8
Arg [4] : initialWalletAddress (address): 0x9695ed5020BB47880738Db356678fe8cBc8FF60b
Arg [5] : merkleRoot (bytes32): 0x6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0
Arg [6] : expiryTime (uint256): 1597755600
Arg [7] : medianizerContractAddress (address): 0x729D19f657BD0614b4985Cf1D82531c67569197B
Arg [8] : daiTokenContractAddress (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [9] : initialSigningWallet (address): 0x3044719d139F866a44c988823513eCB93060bF1b
Arg [10] : initialMaxCommissionRate (uint256): 2000
Arg [11] : estate (address): 0x0000000000000000000000000000000000000000
Arg [12] : asset (address): 0x067a1Eb5E383eD24b66D72aAf80d8D7dB3d299A8
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a
Arg [1] : 0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d0
Arg [2] : 0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d0
Arg [3] : 00000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f8
Arg [4] : 0000000000000000000000009695ed5020bb47880738db356678fe8cbc8ff60b
Arg [5] : 6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0
Arg [6] : 000000000000000000000000000000000000000000000000000000005f3bd0d0
Arg [7] : 000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b
Arg [8] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [9] : 0000000000000000000000003044719d139f866a44c988823513ecb93060bf1b
Arg [10] : 00000000000000000000000000000000000000000000000000000000000007d0
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a8
Loading...
Loading
Loading...
Loading
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.