Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Multi Chain
Multichain Addresses
0 address found via
Latest 8 from a total of 8 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Set Presale Mode | 6181761 | 1753 days 8 hrs ago | IN | 0 ETH | 0.00008443 | ||||
Set Presale | 6181740 | 1753 days 8 hrs ago | IN | 0 ETH | 0.00008867 | ||||
Set Presale | 6181666 | 1753 days 9 hrs ago | IN | 0 ETH | 0.00013367 | ||||
Minion Add | 6181573 | 1753 days 9 hrs ago | IN | 0 ETH | 0.00013268 | ||||
Minion Add | 6181558 | 1753 days 9 hrs ago | IN | 0 ETH | 0.00013268 | ||||
Minion Add | 6181538 | 1753 days 9 hrs ago | IN | 0 ETH | 0.00013268 | ||||
Minion Add | 6181538 | 1753 days 9 hrs ago | IN | 0 ETH | 0.00013931 | ||||
0x60806040 | 6181497 | 1753 days 9 hrs ago | IN | Create: EtherDragonsCore | 0 ETH | 0.00799594 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
EtherDragonsCore
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-08-28 */ pragma solidity ^0.4.11; interface CommonWallet { function receive() external payable; } library StringUtils { function concat(string _a, string _b) internal pure returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory bab = new bytes(_ba.length + _bb.length); uint k = 0; for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) bab[k++] = _bb[i]; return string(bab); } } library UintStringUtils { function toString(uint i) internal pure returns (string) { if (i == 0) return '0'; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } } // @title AddressUtils // @dev Utility library of inline functions on addresses library AddressUtils { // Returns whether the target address is a contract // @dev This function will return false if invoked during the constructor of a contract, // as the code is not actually created until after the constructor finishes. // @param addr address to check // @return whether the target address is a contract function isContract(address addr) internal view returns(bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(addr) } return size > 0; } } // @title SafeMath256 // @dev Math operations with safety checks that throw on error library SafeMath256 { // @dev Multiplies two numbers, throws on overflow. function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } // @dev Integer division of two numbers, truncating the quotient. function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } // @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } // @dev Adds two numbers, throws on overflow. function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } library SafeMath32 { // @dev Multiplies two numbers, throws on overflow. function mul(uint32 a, uint32 b) internal pure returns (uint32 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } // @dev Integer division of two numbers, truncating the quotient. function div(uint32 a, uint32 b) internal pure returns (uint32) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint32 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(uint32 a, uint32 b) internal pure returns (uint32) { assert(b <= a); return a - b; } // @dev Adds two numbers, throws on overflow. function add(uint32 a, uint32 b) internal pure returns (uint32 c) { c = a + b; assert(c >= a); return c; } } library SafeMath8 { // @dev Multiplies two numbers, throws on overflow. function mul(uint8 a, uint8 b) internal pure returns (uint8 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } // @dev Integer division of two numbers, truncating the quotient. function div(uint8 a, uint8 b) internal pure returns (uint8) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint8 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(uint8 a, uint8 b) internal pure returns (uint8) { assert(b <= a); return a - b; } // @dev Adds two numbers, throws on overflow. function add(uint8 a, uint8 b) internal pure returns (uint8 c) { c = a + b; assert(c >= a); return c; } } /// @title A facet of DragonCore that manages special access privileges. contract DragonAccessControl { // @dev Non Assigned address. address constant NA = address(0); /// @dev Contract owner address internal controller_; /// @dev Contract modes enum Mode {TEST, PRESALE, OPERATE} /// @dev Contract state Mode internal mode_ = Mode.TEST; /// @dev OffChain Server accounts ('minions') addresses /// It's used for money withdrawal and export of tokens mapping(address => bool) internal minions_; /// @dev Presale contract address. Can call `presale` method. address internal presale_; // Modifiers --------------------------------------------------------------- /// @dev Limit execution to controller account only. modifier controllerOnly() { require(controller_ == msg.sender, "controller_only"); _; } /// @dev Limit execution to minion account only. modifier minionOnly() { require(minions_[msg.sender], "minion_only"); _; } /// @dev Limit execution to test time only. modifier testModeOnly { require(mode_ == Mode.TEST, "test_mode_only"); _; } /// @dev Limit execution to presale time only. modifier presaleModeOnly { require(mode_ == Mode.PRESALE, "presale_mode_only"); _; } /// @dev Limit execution to operate time only. modifier operateModeOnly { require(mode_ == Mode.OPERATE, "operate_mode_only"); _; } /// @dev Limit execution to presale account only. modifier presaleOnly() { require(msg.sender == presale_, "presale_only"); _; } /// @dev set state to Mode.OPERATE. function setOperateMode() external controllerOnly presaleModeOnly { mode_ = Mode.OPERATE; } /// @dev Set presale contract address. Becomes useless when presale is over. /// @param _presale Presale contract address. function setPresale(address _presale) external controllerOnly { presale_ = _presale; } /// @dev set state to Mode.PRESALE. function setPresaleMode() external controllerOnly testModeOnly { mode_ = Mode.PRESALE; } /// @dev Get controller address. /// @return Address of contract's controller. function controller() external view returns(address) { return controller_; } /// @dev Transfer control to new address. Set controller an approvee for /// tokens that managed by contract itself. Remove previous controller value /// from contract's approvees. /// @param _to New controller address. function setController(address _to) external controllerOnly { require(_to != NA, "_to"); require(controller_ != _to, "already_controller"); controller_ = _to; } /// @dev Check if address is a minion. /// @param _addr Address to check. /// @return True if address is a minion. function isMinion(address _addr) public view returns(bool) { return minions_[_addr]; } function getCurrentMode() public view returns (Mode) { return mode_; } } /// @dev token description, storage and transfer functions contract DragonBase is DragonAccessControl { using SafeMath8 for uint8; using SafeMath32 for uint32; using SafeMath256 for uint256; using StringUtils for string; using UintStringUtils for uint; /// @dev The Birth event is fired whenever a new dragon comes into existence. event Birth(address owner, uint256 petId, uint256 tokenId, uint256 parentA, uint256 parentB, string genes, string params); /// @dev Token name string internal name_; /// @dev Token symbol string internal symbol_; /// @dev Token resolving url string internal url_; struct DragonToken { // Constant Token params uint8 genNum; // generation number. uses for dragon view string genome; // genome description uint256 petId; // offchain dragon identifier // Parents uint256 parentA; uint256 parentB; // Game-depening Token params string params; // can change in export operation // State address owner; } /// @dev Count of minted tokens uint256 internal mintCount_; /// @dev Maximum token supply uint256 internal maxSupply_; /// @dev Count of burn tokens uint256 internal burnCount_; // Tokens state /// @dev Token approvals values mapping(uint256 => address) internal approvals_; /// @dev Operator approvals mapping(address => mapping(address => bool)) internal operatorApprovals_; /// @dev Index of token in owner's token list mapping(uint256 => uint256) internal ownerIndex_; /// @dev Owner's tokens list mapping(address => uint256[]) internal ownTokens_; /// @dev Tokens mapping(uint256 => DragonToken) internal tokens_; // @dev Non Assigned address. address constant NA = address(0); /// @dev Add token to new owner. Increase owner's balance. /// @param _to Token receiver. /// @param _tokenId New token id. function _addTo(address _to, uint256 _tokenId) internal { DragonToken storage token = tokens_[_tokenId]; require(token.owner == NA, "taken"); uint256 lastIndex = ownTokens_[_to].length; ownTokens_[_to].push(_tokenId); ownerIndex_[_tokenId] = lastIndex; token.owner = _to; } /// @dev Create new token and increase mintCount. /// @param _genome New token's genome. /// @param _params Token params string. /// @param _parentA Token A parent. /// @param _parentB Token B parent. /// @return New token id. function _createToken( address _to, // Constant Token params uint8 _genNum, string _genome, uint256 _parentA, uint256 _parentB, // Game-depening Token params uint256 _petId, string _params ) internal returns(uint256) { uint256 tokenId = mintCount_.add(1); mintCount_ = tokenId; DragonToken memory token = DragonToken( _genNum, _genome, _petId, _parentA, _parentB, _params, NA ); tokens_[tokenId] = token; _addTo(_to, tokenId); emit Birth(_to, _petId, tokenId, _parentA, _parentB, _genome, _params); return tokenId; } /// @dev Get token genome. /// @param _tokenId Token id. /// @return Token's genome. function getGenome(uint256 _tokenId) external view returns(string) { return tokens_[_tokenId].genome; } /// @dev Get token params. /// @param _tokenId Token id. /// @return Token's params. function getParams(uint256 _tokenId) external view returns(string) { return tokens_[_tokenId].params; } /// @dev Get token parentA. /// @param _tokenId Token id. /// @return Parent token id. function getParentA(uint256 _tokenId) external view returns(uint256) { return tokens_[_tokenId].parentA; } /// @dev Get token parentB. /// @param _tokenId Token id. /// @return Parent token id. function getParentB(uint256 _tokenId) external view returns(uint256) { return tokens_[_tokenId].parentB; } /// @dev Check if `_tokenId` exists. Check if owner is not addres(0). /// @param _tokenId Token id /// @return Return true if token owner is real. function isExisting(uint256 _tokenId) public view returns(bool) { return tokens_[_tokenId].owner != NA; } /// @dev Receive maxium token supply value. /// @return Contracts `maxSupply_` variable. function maxSupply() external view returns(uint256) { return maxSupply_; } /// @dev Set url prefix for tokenURI generation. /// @param _url Url prefix value. function setUrl(string _url) external controllerOnly { url_ = _url; } /// @dev Get token symbol. /// @return Token symbol name. function symbol() external view returns(string) { return symbol_; } /// @dev Get token URI to receive offchain information by it's id. /// @param _tokenId Token id. /// @return URL string. For example "http://erc721.tld/tokens/1". function tokenURI(uint256 _tokenId) external view returns(string) { return url_.concat(_tokenId.toString()); } /// @dev Get token name. /// @return Token name string. function name() external view returns(string) { return name_; } /// @dev return information about _owner tokens function getTokens(address _owner) external view returns (uint256[], uint256[], byte[]) { uint256[] memory tokens = ownTokens_[_owner]; uint256[] memory tokenIds = new uint256[](tokens.length); uint256[] memory petIds = new uint256[](tokens.length); byte[] memory genomes = new byte[](tokens.length * 77); uint index = 0; for(uint i = 0; i < tokens.length; i++) { uint256 tokenId = tokens[i]; DragonToken storage token = tokens_[tokenId]; tokenIds[i] = tokenId; petIds[i] = token.petId; bytes storage genome = bytes(token.genome); for(uint j = 0; j < genome.length; j++) { genomes[index++] = genome[j]; } } return (tokenIds, petIds, genomes); } } /// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens /// @dev See https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/token/ERC721/ERC721.sol contract ERC721Basic { /// @dev Emitted when token approvee is set event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); /// @dev Emitted when owner approve all own tokens to operator. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @dev Emitted when user deposit some funds. event Deposit(address indexed _sender, uint256 _value); /// @dev Emitted when user deposit some funds. event Withdraw(address indexed _sender, uint256 _value); /// @dev Emitted when token transferred to new owner event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); // Required methods function balanceOf(address _owner) external view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function exists(uint256 _tokenId) public view returns (bool _exists); function approve(address _to, uint256 _tokenId) external; function getApproved(uint256 _tokenId) public view returns (address _to); //function transfer(address _to, uint256 _tokenId) public; function transferFrom(address _from, address _to, uint256 _tokenId) public; function totalSupply() public view returns (uint256 total); // ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165) function supportsInterface(bytes4 _interfaceID) external view returns (bool); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Metadata is ERC721Basic { function name() external view returns (string _name); function symbol() external view returns (string _symbol); function tokenURI(uint256 _tokenId) external view returns (string); } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract ERC721Receiver { /** * @dev Magic value to be returned upon successful reception of an NFT * Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`, * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` */ bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba; /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safetransfer`. This function MAY throw to revert and reject the * transfer. This function MUST use 50,000 gas or less. Return of other * than the magic value MUST result in the transaction being reverted. * Note: the contract address is always the message sender. * @param _from The sending address * @param _tokenId The NFT identifier which is being transfered * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))` */ function onERC721Received(address _from, uint256 _tokenId, bytes _data ) public returns(bytes4); } /** * @title ERC-721 Non-Fungible Token Standard, full implementation interface * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721 is ERC721Basic, ERC721Metadata, ERC721Receiver { /// @dev Interface signature 721 for interface detection. bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba; bytes4 constant InterfaceSignature_ERC165 = 0x01ffc9a7; /* bytes4(keccak256('supportsInterface(bytes4)')); */ bytes4 constant InterfaceSignature_ERC721Enumerable = 0x780e9d63; /* bytes4(keccak256('totalSupply()')) ^ bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^ bytes4(keccak256('tokenByIndex(uint256)')); */ bytes4 constant InterfaceSignature_ERC721Metadata = 0x5b5e139f; /* bytes4(keccak256('name()')) ^ bytes4(keccak256('symbol()')) ^ bytes4(keccak256('tokenURI(uint256)')); */ bytes4 constant InterfaceSignature_ERC721 = 0x80ac58cd; /* bytes4(keccak256('balanceOf(address)')) ^ bytes4(keccak256('ownerOf(uint256)')) ^ bytes4(keccak256('approve(address,uint256)')) ^ bytes4(keccak256('getApproved(uint256)')) ^ bytes4(keccak256('setApprovalForAll(address,bool)')) ^ bytes4(keccak256('isApprovedForAll(address,address)')) ^ bytes4(keccak256('transferFrom(address,address,uint256)')) ^ bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^ bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')); */ function supportsInterface(bytes4 _interfaceID) external view returns (bool) { return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721) || (_interfaceID == InterfaceSignature_ERC721Enumerable) || (_interfaceID == InterfaceSignature_ERC721Metadata)); } } /// @dev ERC721 methods contract DragonOwnership is ERC721, DragonBase { using StringUtils for string; using UintStringUtils for uint; using AddressUtils for address; /// @dev Emitted when token transferred to new owner. Additional fields is petId, genes, params /// it uses for client-side indication event TransferInfo(address indexed _from, address indexed _to, uint256 _tokenId, uint256 petId, string genes, string params); /// @dev Specify if _addr is token owner or approvee. Also check if `_addr` /// is operator for token owner. /// @param _tokenId Token to check ownership of. /// @param _addr Address to check if it's an owner or an aprovee of `_tokenId`. /// @return True if token can be managed by provided `_addr`. function isOwnerOrApproved(uint256 _tokenId, address _addr) public view returns(bool) { DragonToken memory token = tokens_[_tokenId]; if (token.owner == _addr) { return true; } else if (isApprovedFor(_tokenId, _addr)) { return true; } else if (isApprovedForAll(token.owner, _addr)) { return true; } return false; } /// @dev Limit execution to token owner or approvee only. /// @param _tokenId Token to check ownership of. modifier ownerOrApprovedOnly(uint256 _tokenId) { require(isOwnerOrApproved(_tokenId, msg.sender), "tokenOwnerOrApproved_only"); _; } /// @dev Contract's own token only acceptable. /// @param _tokenId Contract's token id. modifier ownOnly(uint256 _tokenId) { require(tokens_[_tokenId].owner == address(this), "own_only"); _; } /// @dev Determine if token is approved for specified approvee. /// @param _tokenId Target token id. /// @param _approvee Approvee address. /// @return True if so. function isApprovedFor(uint256 _tokenId, address _approvee) public view returns(bool) { return approvals_[_tokenId] == _approvee; } /// @dev Specify is given address set as operator with setApprovalForAll. /// @param _owner Token owner. /// @param _operator Address to check if it an operator. /// @return True if operator is set. function isApprovedForAll(address _owner, address _operator) public view returns(bool) { return operatorApprovals_[_owner][_operator]; } /// @dev Check if `_tokenId` exists. Check if owner is not addres(0). /// @param _tokenId Token id /// @return Return true if token owner is real. function exists(uint256 _tokenId) public view returns(bool) { return tokens_[_tokenId].owner != NA; } /// @dev Get owner of a token. /// @param _tokenId Token owner id. /// @return Token owner address. function ownerOf(uint256 _tokenId) public view returns(address) { return tokens_[_tokenId].owner; } /// @dev Get approvee address. If there is not approvee returns 0x0. /// @param _tokenId Token id to get approvee of. /// @return Approvee address or 0x0. function getApproved(uint256 _tokenId) public view returns(address) { return approvals_[_tokenId]; } /// @dev Grant owner alike controll permissions to third party. /// @param _to Permission receiver. /// @param _tokenId Granted token id. function approve(address _to, uint256 _tokenId) external ownerOrApprovedOnly(_tokenId) { address owner = ownerOf(_tokenId); require(_to != owner); if (getApproved(_tokenId) != NA || _to != NA) { approvals_[_tokenId] = _to; emit Approval(owner, _to, _tokenId); } } /// @dev Current total tokens supply. Always less then maxSupply. /// @return Difference between minted and burned tokens. function totalSupply() public view returns(uint256) { return mintCount_; } /// @dev Get number of tokens which `_owner` owns. /// @param _owner Address to count own tokens. /// @return Count of owned tokens. function balanceOf(address _owner) external view returns(uint256) { return ownTokens_[_owner].length; } /// @dev Internal set approval for all without _owner check. /// @param _owner Granting user. /// @param _to New account approvee. /// @param _approved Set new approvee status. function _setApprovalForAll(address _owner, address _to, bool _approved) internal { operatorApprovals_[_owner][_to] = _approved; emit ApprovalForAll(_owner, _to, _approved); } /// @dev Set approval for all account tokens. /// @param _to Approvee address. /// @param _approved Value true or false. function setApprovalForAll(address _to, bool _approved) external { require(_to != msg.sender); _setApprovalForAll(msg.sender, _to, _approved); } /// @dev Remove approval bindings for token. Do nothing if no approval /// exists. /// @param _from Address of token owner. /// @param _tokenId Target token id. function _clearApproval(address _from, uint256 _tokenId) internal { if (approvals_[_tokenId] == NA) { return; } approvals_[_tokenId] = NA; emit Approval(_from, NA, _tokenId); } /// @dev Check if contract was received by other side properly if receiver /// is a ctontract. /// @param _from Current token owner. /// @param _to New token owner. /// @param _tokenId token Id. /// @param _data Transaction data. /// @return True on success. function _checkAndCallSafeTransfer( address _from, address _to, uint256 _tokenId, bytes _data ) internal returns(bool) { if (! _to.isContract()) { return true; } bytes4 retval = ERC721Receiver(_to).onERC721Received( _from, _tokenId, _data ); return (retval == ERC721_RECEIVED); } /// @dev Remove token from owner. Unrecoverable. /// @param _tokenId Removing token id. function _remove(uint256 _tokenId) internal { address owner = tokens_[_tokenId].owner; _removeFrom(owner, _tokenId); } /// @dev Completely remove token from the contract. Unrecoverable. /// @param _owner Owner of removing token. /// @param _tokenId Removing token id. function _removeFrom(address _owner, uint256 _tokenId) internal { uint256 lastIndex = ownTokens_[_owner].length.sub(1); uint256 lastToken = ownTokens_[_owner][lastIndex]; // Swap users token ownTokens_[_owner][ownerIndex_[_tokenId]] = lastToken; ownTokens_[_owner].length--; // Swap token indexes ownerIndex_[lastToken] = ownerIndex_[_tokenId]; ownerIndex_[_tokenId] = 0; DragonToken storage token = tokens_[_tokenId]; token.owner = NA; } /// @dev Transfer token from owner `_from` to another address or contract /// `_to` by it's `_tokenId`. /// @param _from Current token owner. /// @param _to New token owner. /// @param _tokenId token Id. function transferFrom( address _from, address _to, uint256 _tokenId ) public ownerOrApprovedOnly(_tokenId) { require(_from != NA); require(_to != NA); _clearApproval(_from, _tokenId); _removeFrom(_from, _tokenId); _addTo(_to, _tokenId); emit Transfer(_from, _to, _tokenId); DragonToken storage token = tokens_[_tokenId]; emit TransferInfo(_from, _to, _tokenId, token.petId, token.genome, token.params); } /// @dev Update token params and transfer to new owner. Only contract's own /// tokens could be updated. Also notifies receiver of the token. /// @param _to Address to transfer token to. /// @param _tokenId Id of token that should be transferred. /// @param _params New token params. function updateAndSafeTransferFrom( address _to, uint256 _tokenId, string _params ) public { updateAndSafeTransferFrom(_to, _tokenId, _params, ""); } /// @dev Update token params and transfer to new owner. Only contract's own /// tokens could be updated. Also notifies receiver of the token and send /// protion of _data to it. /// @param _to Address to transfer token to. /// @param _tokenId Id of token that should be transferred. /// @param _params New token params. /// @param _data Notification data. function updateAndSafeTransferFrom( address _to, uint256 _tokenId, string _params, bytes _data ) public { // Safe transfer from updateAndTransferFrom(_to, _tokenId, _params, 0, 0); require(_checkAndCallSafeTransfer(address(this), _to, _tokenId, _data)); } /// @dev Update token params and transfer to new owner. Only contract's own /// tokens could be updated. /// @param _to Address to transfer token to. /// @param _tokenId Id of token that should be transferred. /// @param _params New token params. function updateAndTransferFrom( address _to, uint256 _tokenId, string _params, uint256 _petId, uint256 _transferCost ) public ownOnly(_tokenId) minionOnly { require(bytes(_params).length > 0, "params_length"); // Update tokens_[_tokenId].params = _params; if (tokens_[_tokenId].petId == 0 ) { tokens_[_tokenId].petId = _petId; } address from = tokens_[_tokenId].owner; // Transfer from transferFrom(from, _to, _tokenId); // send to the server's wallet the transaction cost // withdraw it from the balance of the contract. this amount must be withdrawn from the player // on the side of the game server if (_transferCost > 0) { msg.sender.transfer(_transferCost); } } /// @dev Transfer token from one owner to new one and check if it was /// properly received if receiver is a contact. /// @param _from Current token owner. /// @param _to New token owner. /// @param _tokenId token Id. function safeTransferFrom( address _from, address _to, uint256 _tokenId ) public { safeTransferFrom(_from, _to, _tokenId, ""); } /// @dev Transfer token from one owner to new one and check if it was /// properly received if receiver is a contact. /// @param _from Current token owner. /// @param _to New token owner. /// @param _tokenId token Id. /// @param _data Transaction data. function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes _data ) public { transferFrom(_from, _to, _tokenId); require(_checkAndCallSafeTransfer(_from, _to, _tokenId, _data)); } /// @dev Burn owned token. Increases `burnCount_` and decrease `totalSupply` /// value. /// @param _tokenId Id of burning token. function burn(uint256 _tokenId) public ownerOrApprovedOnly(_tokenId) { address owner = tokens_[_tokenId].owner; _remove(_tokenId); burnCount_ += 1; emit Transfer(owner, NA, _tokenId); } /// @dev Receive count of burned tokens. Should be greater than `totalSupply` /// but less than `mintCount`. /// @return Number of burned tokens function burnCount() external view returns(uint256) { return burnCount_; } function onERC721Received(address, uint256, bytes) public returns(bytes4) { return ERC721_RECEIVED; } } /// @title Managing contract. implements the logic of buying tokens, depositing / withdrawing funds /// to the project account and importing / exporting tokens contract EtherDragonsCore is DragonOwnership { using SafeMath8 for uint8; using SafeMath32 for uint32; using SafeMath256 for uint256; using AddressUtils for address; using StringUtils for string; using UintStringUtils for uint; // @dev Non Assigned address. address constant NA = address(0); /// @dev Bounty tokens count limit uint256 public constant BOUNTY_LIMIT = 2500; /// @dev Presale tokens count limit uint256 public constant PRESALE_LIMIT = 7500; ///@dev Total gen0tokens generation limit uint256 public constant GEN0_CREATION_LIMIT = 90000; /// @dev Number of tokens minted in presale stage uint256 internal presaleCount_; /// @dev Number of tokens minted for bounty campaign uint256 internal bountyCount_; ///@dev Company bank address address internal bank_; // Extension --------------------------------------------------------------- /// @dev Contract is not payable. To fullfil balance method `depositTo` /// should be used. function () public payable { revert(); } /// @dev amount on the account of the contract. This amount consists of deposits from players and the system reserve for payment of transactions /// the player at any time to withdraw the amount corresponding to his account in the game, minus the cost of the transaction function getBalance() public view returns (uint256) { return address(this).balance; } /// @dev at the moment of creation of the contract we transfer the address of the bank /// presell contract address set later constructor( address _bank ) public { require(_bank != NA); controller_ = msg.sender; bank_ = _bank; // Meta name_ = "EtherDragons"; symbol_ = "ED"; url_ = "https://game.etherdragons.world/token/"; // Token mint limit maxSupply_ = GEN0_CREATION_LIMIT + BOUNTY_LIMIT + PRESALE_LIMIT; } /// Number of tokens minted in presale stage function totalPresaleCount() public view returns(uint256) { return presaleCount_; } /// @dev Number of tokens minted for bounty campaign function totalBountyCount() public view returns(uint256) { return bountyCount_; } /// @dev Check if new token could be minted. Return true if count of minted /// tokens less than could be minted through contract deploy. /// Also, tokens can not be created more often than once in mintDelay_ minutes /// @return True if current count is less then maximum tokens available for now. function canMint() public view returns(bool) { return (mintCount_ + presaleCount_ + bountyCount_) < maxSupply_; } /// @dev Here we write the addresses of the wallets of the server from which it is accessed /// to contract methods. /// @param _to New minion address function minionAdd(address _to) external controllerOnly { require(minions_[_to] == false, "already_minion"); // разрешаем этому адресу пользоваться токенами контакта // allow the address to use contract tokens _setApprovalForAll(address(this), _to, true); minions_[_to] = true; } /// @dev delete the address of the server wallet /// @param _to Minion address function minionRemove(address _to) external controllerOnly { require(minions_[_to], "not_a_minion"); // and forbid this wallet to use tokens of the contract _setApprovalForAll(address(this), _to, false); minions_[_to] = false; } /// @dev Here the player can put funds to the account of the contract /// and get the same amount of in-game currency /// the game server understands who puts money at the wallet address function depositTo() public payable { emit Deposit(msg.sender, msg.value); } /// @dev Transfer amount of Ethers to specified receiver. Only owner can // call this method. /// @param _to Transfer receiver. /// @param _amount Transfer value. /// @param _transferCost Transfer cost. function transferAmount(address _to, uint256 _amount, uint256 _transferCost) external minionOnly { require((_amount + _transferCost) <= address(this).balance, "not enough money!"); _to.transfer(_amount); // send to the wallet of the server the transfer cost // withdraw it from the balance of the contract. this amount must be withdrawn from the player // on the side of the game server if (_transferCost > 0) { msg.sender.transfer(_transferCost); } emit Withdraw(_to, _amount); } /// @dev Mint new token with specified params. Transfer `_fee` to the /// `bank`. /// @param _to New token owner. /// @param _fee Transaction fee. /// @param _genNum Generation number.. /// @param _genome New genome unique value. /// @param _parentA Parent A. /// @param _parentB Parent B. /// @param _petId Pet identifier. /// @param _params List of parameters for pet. /// @param _transferCost Transfer cost. /// @return New token id. function mintRelease( address _to, uint256 _fee, // Constant Token params uint8 _genNum, string _genome, uint256 _parentA, uint256 _parentB, // Game-depening Token params uint256 _petId, //if petID = 0, then it was created outside of the server string _params, uint256 _transferCost ) external minionOnly operateModeOnly returns(uint256) { require(canMint(), "can_mint"); require(_to != NA, "_to"); require((_fee + _transferCost) <= address(this).balance, "_fee"); require(bytes(_params).length != 0, "params_length"); require(bytes(_genome).length == 77, "genome_length"); // Parents should be both 0 or both not. if (_parentA != 0 && _parentB != 0) { require(_parentA != _parentB, "same_parent"); } else if (_parentA == 0 && _parentB != 0) { revert("parentA_empty"); } else if (_parentB == 0 && _parentA != 0) { revert("parentB_empty"); } uint256 tokenId = _createToken(_to, _genNum, _genome, _parentA, _parentB, _petId, _params); require(_checkAndCallSafeTransfer(NA, _to, tokenId, ""), "safe_transfer"); // Transfer mint fee to the fund CommonWallet(bank_).receive.value(_fee)(); emit Transfer(NA, _to, tokenId); // send to the server wallet server the transfer cost, // withdraw it from the balance of the contract. this amount must be withdrawn from the player // on the side of the game server if (_transferCost > 0) { msg.sender.transfer(_transferCost); } return tokenId; } /// @dev Create new token via presale state /// @param _to New token owner. /// @param _genome New genome unique value. /// @return New token id. /// at the pre-sale stage we sell the zero-generation pets, which have only a genome. /// other attributes of such a token get when importing to the server function mintPresell(address _to, string _genome) external presaleOnly presaleModeOnly returns(uint256) { require(presaleCount_ < PRESALE_LIMIT, "presale_limit"); // у пресейл пета нет параметров. Их он получит после ввода в игру. uint256 tokenId = _createToken(_to, 0, _genome, 0, 0, 0, ""); presaleCount_ += 1; require(_checkAndCallSafeTransfer(NA, _to, tokenId, ""), "safe_transfer"); emit Transfer(NA, _to, tokenId); return tokenId; } /// @dev Create new token for bounty activity /// @param _to New token owner. /// @return New token id. function mintBounty(address _to, string _genome) external controllerOnly returns(uint256) { require(bountyCount_ < BOUNTY_LIMIT, "bounty_limit"); // bounty pet has no parameters. They will receive them after importing to the game. uint256 tokenId = _createToken(_to, 0, _genome, 0, 0, 0, ""); bountyCount_ += 1; require(_checkAndCallSafeTransfer(NA, _to, tokenId, ""), "safe_transfer"); emit Transfer(NA, _to, tokenId); return tokenId; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"minionAdd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"minionRemove","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositTo","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getParams","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentMode","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PRESALE_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_url","type":"string"}],"name":"setUrl","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_genome","type":"string"}],"name":"mintPresell","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getTokens","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"bytes1[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burnCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_transferCost","type":"uint256"}],"name":"transferAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getGenome","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_CREATION_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"setController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BOUNTY_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_genome","type":"string"}],"name":"mintBounty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_addr","type":"address"}],"name":"isOwnerOrApproved","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getParentA","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_fee","type":"uint256"},{"name":"_genNum","type":"uint8"},{"name":"_genome","type":"string"},{"name":"_parentA","type":"uint256"},{"name":"_parentB","type":"uint256"},{"name":"_petId","type":"uint256"},{"name":"_params","type":"string"},{"name":"_transferCost","type":"uint256"}],"name":"mintRelease","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_approvee","type":"address"}],"name":"isApprovedFor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setPresaleMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isExisting","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_params","type":"string"},{"name":"_petId","type":"uint256"},{"name":"_transferCost","type":"uint256"}],"name":"updateAndTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"canMint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setOperateMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_presale","type":"address"}],"name":"setPresale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isMinion","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_params","type":"string"},{"name":"_data","type":"bytes"}],"name":"updateAndSafeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_params","type":"string"}],"name":"updateAndSafeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPresaleCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalBountyCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getParentB","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_bank","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"},{"indexed":false,"name":"petId","type":"uint256"},{"indexed":false,"name":"genes","type":"string"},{"indexed":false,"name":"params","type":"string"}],"name":"TransferInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"petId","type":"uint256"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"parentA","type":"uint256"},{"indexed":false,"name":"parentB","type":"uint256"},{"indexed":false,"name":"genes","type":"string"},{"indexed":false,"name":"params","type":"string"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60806040526000805460a060020a60ff02191690553480156200002157600080fd5b50604051602080620039d28339810160405251600160a060020a03811615156200004a57600080fd5b6000805433600160a060020a03199182161790915560108054909116600160a060020a03831617905560408051808201909152600c8082527f4574686572447261676f6e7300000000000000000000000000000000000000006020909201918252620000b9916003916200017e565b506040805180820190915260028082527f4544000000000000000000000000000000000000000000000000000000000000602090920191825262000100916004916200017e565b506040805160608101825260268082527f68747470733a2f2f67616d652e6574686572647261676f6e732e776f726c642f602083019081527f746f6b656e2f000000000000000000000000000000000000000000000000000092909301919091526200016f916005916200017e565b5050620186a060075562000223565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001c157805160ff1916838001178555620001f1565b82800160010185558215620001f1579182015b82811115620001f1578251825591602001919060010190620001d4565b50620001ff92915062000203565b5090565b6200022091905b80821115620001ff57600081556001016200020a565b90565b61379f80620002336000396000f3006080604052600436106102585763ffffffff60e060020a60003504166301ffc9a7811461025d57806304612d2014610293578063065de1f6146102b657806306a248c6146102d757806306fdde03146102df578063081812fc1461036957806308a4f0721461039d578063095ea7b3146103b557806312065fe0146103d9578063153705981461040057806318160ddd146104395780631aee3f911461044e57806323b872dd14610463578063252498a21461048d5780632774d052146104ad57806342842e0e146104da57806342966c6814610504578063450efe211461051c5780634f558e791461061b578063524773ce1461063357806355ce15f4146106485780636352211e1461066f57806365d6759a14610687578063680eba271461069f57806370a08231146106b457806392eefe9b146106d557806395d89b41146106f6578063987b904b1461070b5780639a04e60214610720578063a0ee153e1461074d578063a22cb46514610771578063b2444a7014610797578063b3cf6e83146107af578063b5b12e7514610803578063b85e7df114610827578063b88d4fde1461083c578063b92cc8cf1461061b578063bba90086146108ab578063beb9716d1461091d578063c87b56dd14610932578063c8857dcd1461094a578063d5abeb011461095f578063d5fcc7b614610974578063dfafcf7e14610995578063e4d5a558146109b6578063e629837c14610a5d578063e985e9c514610ac6578063ee2f00a814610aed578063f0b9e5ba14610b02578063f672c1aa14610b88578063f77c479114610b9d578063fc7c1c8014610bb2575b600080fd5b34801561026957600080fd5b5061027f600160e060020a031960043516610bca565b604080519115158252519081900360200190f35b34801561029f57600080fd5b506102b4600160a060020a0360043516610c9b565b005b3480156102c257600080fd5b506102b4600160a060020a0360043516610d8f565b6102b4610e7e565b3480156102eb57600080fd5b506102f4610eb6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032e578181015183820152602001610316565b50505050905090810190601f16801561035b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037557600080fd5b50610381600435610f4d565b60408051600160a060020a039092168252519081900360200190f35b3480156103a957600080fd5b506102f4600435610f68565b3480156103c157600080fd5b506102b4600160a060020a036004351660243561100c565b3480156103e557600080fd5b506103ee61112c565b60408051918252519081900360200190f35b34801561040c57600080fd5b50610415611131565b6040518082600281111561042557fe5b60ff16815260200191505060405180910390f35b34801561044557600080fd5b506103ee611141565b34801561045a57600080fd5b506103ee611147565b34801561046f57600080fd5b506102b4600160a060020a036004358116906024351660443561114d565b34801561049957600080fd5b506102b460048035602481019101356113af565b3480156104b957600080fd5b506103ee60048035600160a060020a03169060248035908101910135611410565b3480156104e657600080fd5b506102b4600160a060020a036004358116906024351660443561164c565b34801561051057600080fd5b506102b4600435611668565b34801561052857600080fd5b5061053d600160a060020a036004351661172e565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561058557818101518382015260200161056d565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156105c45781810151838201526020016105ac565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156106035781810151838201526020016105eb565b50505050905001965050505050505060405180910390f35b34801561062757600080fd5b5061027f600435611995565b34801561063f57600080fd5b506103ee6119b5565b34801561065457600080fd5b506102b4600160a060020a03600435166024356044356119bb565b34801561067b57600080fd5b50610381600435611b32565b34801561069357600080fd5b506102f4600435611b50565b3480156106ab57600080fd5b506103ee611bd1565b3480156106c057600080fd5b506103ee600160a060020a0360043516611bd8565b3480156106e157600080fd5b506102b4600160a060020a0360043516611bf3565b34801561070257600080fd5b506102f4611d2b565b34801561071757600080fd5b506103ee611d8c565b34801561072c57600080fd5b506103ee60048035600160a060020a03169060248035908101910135611d92565b34801561075957600080fd5b5061027f600435600160a060020a0360243516611ebe565b34801561077d57600080fd5b506102b4600160a060020a036004351660243515156120b9565b3480156107a357600080fd5b506103ee6004356120de565b3480156107bb57600080fd5b506103ee60048035600160a060020a031690602480359160443560ff16916064358082019290810135916084359160a4359160c4359160e435918201910135610104356120f3565b34801561080f57600080fd5b5061027f600435600160a060020a036024351661269f565b34801561083357600080fd5b506102b46126c0565b34801561084857600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526102b494600160a060020a0381358116956024803590921695604435953695608494019181908401838280828437509497506127ac9650505050505050565b3480156108b757600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102b4948235600160a060020a03169460248035953695946064949201919081908401838280828437509497505084359550505060209092013591506127ce9050565b34801561092957600080fd5b5061027f6129bf565b34801561093e57600080fd5b506102f46004356129d1565b34801561095657600080fd5b506102b4612a78565b34801561096b57600080fd5b506103ee612b62565b34801561098057600080fd5b506102b4600160a060020a0360043516612b68565b3480156109a157600080fd5b5061027f600160a060020a0360043516612bda565b3480156109c257600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102b4948235600160a060020a031694602480359536959460649492019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750612bf89650505050505050565b348015610a6957600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102b4948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750612c129650505050505050565b348015610ad257600080fd5b5061027f600160a060020a0360043581169060243516612c2e565b348015610af957600080fd5b506103ee612c5c565b348015610b0e57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610b6b948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750612c629650505050505050565b60408051600160e060020a03199092168252519081900360200190f35b348015610b9457600080fd5b506103ee612c8a565b348015610ba957600080fd5b50610381612c90565b348015610bbe57600080fd5b506103ee600435612c9f565b6000600160e060020a031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610c2d5750600160e060020a031982167f80ac58cd00000000000000000000000000000000000000000000000000000000145b80610c615750600160e060020a031982167f780e9d6300000000000000000000000000000000000000000000000000000000145b80610c955750600160e060020a031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b92915050565b600054600160a060020a03163314610ceb576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020613734833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460ff1615610d5c576040805160e560020a62461bcd02815260206004820152600e60248201527f616c72656164795f6d696e696f6e000000000000000000000000000000000000604482015290519081900360640190fd5b610d6830826001612cb4565b600160a060020a03166000908152600160208190526040909120805460ff19169091179055565b600054600160a060020a03163314610ddf576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020613734833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460ff161515610e51576040805160e560020a62461bcd02815260206004820152600c60248201527f6e6f745f615f6d696e696f6e0000000000000000000000000000000000000000604482015290519081900360640190fd5b610e5d30826000612cb4565b600160a060020a03166000908152600160205260409020805460ff19169055565b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a2565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f425780601f10610f1757610100808354040283529160200191610f42565b820191906000526020600020905b815481529060010190602001808311610f2557829003601f168201915b505050505090505b90565b600090815260096020526040902054600160a060020a031690565b6000818152600d602090815260409182902060050180548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156110005780601f10610fd557610100808354040283529160200191611000565b820191906000526020600020905b815481529060010190602001808311610fe357829003601f168201915b50505050509050919050565b6000816110198133611ebe565b151561106f576040805160e560020a62461bcd02815260206004820152601960248201527f746f6b656e4f776e65724f72417070726f7665645f6f6e6c7900000000000000604482015290519081900360640190fd5b61107883611b32565b9150600160a060020a03848116908316141561109357600080fd5b600061109e84610f4d565b600160a060020a03161415806110bc5750600160a060020a03841615155b15611126576000838152600960209081526040918290208054600160a060020a031916600160a060020a03888116918217909255835187815293519093918616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b50505050565b303190565b60005460a060020a900460ff1690565b60065490565b611d4c81565b60008161115a8133611ebe565b15156111b0576040805160e560020a62461bcd02815260206004820152601960248201527f746f6b656e4f776e65724f72417070726f7665645f6f6e6c7900000000000000604482015290519081900360640190fd5b600160a060020a03851615156111c557600080fd5b600160a060020a03841615156111da57600080fd5b6111e48584612d22565b6111ee8584612da2565b6111f88484612eb1565b83600160a060020a031685600160a060020a0316600080516020613754833981519152856040518082815260200191505060405180910390a3600d6000848152602001908152602001600020915083600160a060020a031685600160a060020a03167ff8e997dde8af4eab36d99980a4c48ae36f5da5d59eddf67ced297098e635222685856002015486600101876005016040518085815260200184815260200180602001806020018381038352858181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113225780601f106112f757610100808354040283529160200191611322565b820191906000526020600020905b81548152906001019060200180831161130557829003601f168201915b50508381038252845460026000196101006001841615020190911604808252602090910190859080156113965780601f1061136b57610100808354040283529160200191611396565b820191906000526020600020905b81548152906001019060200180831161137957829003601f168201915b5050965050505050505060405180910390a35050505050565b600054600160a060020a031633146113ff576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020613734833981519152604482015290519081900360640190fd5b61140b600583836135c3565b505050565b6002546000908190600160a060020a03163314611477576040805160e560020a62461bcd02815260206004820152600c60248201527f70726573616c655f6f6e6c790000000000000000000000000000000000000000604482015290519081900360640190fd5b600160005460a060020a900460ff16600281111561149157fe5b146114e6576040805160e560020a62461bcd02815260206004820152601160248201527f70726573616c655f6d6f64655f6f6e6c79000000000000000000000000000000604482015290519081900360640190fd5b600e54611d4c11611541576040805160e560020a62461bcd02815260206004820152600d60248201527f70726573616c655f6c696d697400000000000000000000000000000000000000604482015290519081900360640190fd5b61159585600086868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505060008060006020604051908101604052806000815250612f7b565b600e80546001019055604080516020810190915260008082529192506115bf9190879084906131cb565b1515611615576040805160e560020a62461bcd02815260206004820152600d60248201527f736166655f7472616e7366657200000000000000000000000000000000000000604482015290519081900360640190fd5b604080518281529051600160a060020a038716916000916000805160206137548339815191529181900360200190a3949350505050565b61140b83838360206040519081016040528060008152506127ac565b6000816116758133611ebe565b15156116cb576040805160e560020a62461bcd02815260206004820152601960248201527f746f6b656e4f776e65724f72417070726f7665645f6f6e6c7900000000000000604482015290519081900360640190fd5b6000838152600d6020526040902060060154600160a060020a031691506116f183613323565b600880546001019055604080518481529051600091600160a060020a038516916000805160206137548339815191529181900360200190a3505050565b6060806060806060806060600080600080600080600c60008f600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156117b157602002820191906000526020600020905b81548152602001906001019080831161179d575b5050505050995089516040519080825280602002602001820160405280156117e3578160200160208202803883390190505b5098508951604051908082528060200260200182016040528015611811578160200160208202803883390190505b5097508951604d02604051908082528060200260200182016040528015611842578160200160208202803883390190505b50965060009550600094505b895185101561198057898581518110151561186557fe5b906020019060200201519350600d6000858152602001908152602001600020925083898681518110151561189557fe5b60209081029091010152600283015488518990879081106118b257fe5b6020908102909101015250506001810160005b815460026000196101006001841615020190911604811015611975578181815460018160011615610100020316600290048110151561190057fe5b81546001161561191f5790600052602060002090602091828204019190065b9054901a60f860020a02878780600101985081518110151561193d57fe5b7fff000000000000000000000000000000000000000000000000000000000000009092166020928302909101909101526001016118c5565b60019094019361184e565b50969c959b5093995093975050505050505050565b6000908152600d6020526040902060060154600160a060020a0316151590565b60085490565b3360009081526001602052604090205460ff161515611a24576040805160e560020a62461bcd02815260206004820152600b60248201527f6d696e696f6e5f6f6e6c79000000000000000000000000000000000000000000604482015290519081900360640190fd5b30318282011115611a7f576040805160e560020a62461bcd02815260206004820152601160248201527f6e6f7420656e6f756768206d6f6e657921000000000000000000000000000000604482015290519081900360640190fd5b604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015611ab5573d6000803e3d6000fd5b506000811115611aee57604051339082156108fc029083906000818181858888f19350505050158015611aec573d6000803e3d6000fd5b505b604080518381529051600160a060020a038516917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a2505050565b6000908152600d6020526040902060060154600160a060020a031690565b6060600d60008381526020019081526020016000206001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110005780601f10610fd557610100808354040283529160200191611000565b62015f9081565b600160a060020a03166000908152600c602052604090205490565b600054600160a060020a03163314611c43576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020613734833981519152604482015290519081900360640190fd5b600160a060020a0381161515611ca3576040805160e560020a62461bcd02815260206004820152600360248201527f5f746f0000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600054600160a060020a0382811691161415611d09576040805160e560020a62461bcd02815260206004820152601260248201527f616c72656164795f636f6e74726f6c6c65720000000000000000000000000000604482015290519081900360640190fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f425780601f10610f1757610100808354040283529160200191610f42565b6109c481565b600080548190600160a060020a03163314611de5576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020613734833981519152604482015290519081900360640190fd5b600f546109c411611e40576040805160e560020a62461bcd02815260206004820152600c60248201527f626f756e74795f6c696d69740000000000000000000000000000000000000000604482015290519081900360640190fd5b611e9485600086868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505060008060006020604051908101604052806000815250612f7b565b600f80546001019055604080516020810190915260008082529192506115bf9190879084906131cb565b6000611ec8613641565b6000848152600d6020908152604091829020825160e081018452815460ff168152600180830180548651600261010094831615949094026000190190911692909204601f8101869004860283018601909652858252919492938581019391929190830182828015611f7a5780601f10611f4f57610100808354040283529160200191611f7a565b820191906000526020600020905b815481529060010190602001808311611f5d57829003601f168201915b50505050508152602001600282015481526020016003820154815260200160048201548152602001600582018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561203a5780601f1061200f5761010080835404028352916020019161203a565b820191906000526020600020905b81548152906001019060200180831161201d57829003601f168201915b505050918352505060069190910154600160a060020a0390811660209092019190915260c08201519192508481169116141561207957600191506120b2565b612083848461269f565b1561209157600191506120b2565b61209f8160c0015184612c2e565b156120ad57600191506120b2565b600091505b5092915050565b600160a060020a0382163314156120cf57600080fd5b6120da338383612cb4565b5050565b6000908152600d602052604090206003015490565b33600090815260016020526040812054819060ff16151561215e576040805160e560020a62461bcd02815260206004820152600b60248201527f6d696e696f6e5f6f6e6c79000000000000000000000000000000000000000000604482015290519081900360640190fd5b600260005460a060020a900460ff16600281111561217857fe5b146121cd576040805160e560020a62461bcd02815260206004820152601160248201527f6f7065726174655f6d6f64655f6f6e6c79000000000000000000000000000000604482015290519081900360640190fd5b6121d56129bf565b151561222b576040805160e560020a62461bcd02815260206004820152600860248201527f63616e5f6d696e74000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038d16151561228b576040805160e560020a62461bcd02815260206004820152600360248201527f5f746f0000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b30318c840111156122e8576040805160e560020a62461bcd028152602060048083019190915260248201527f5f66656500000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83151561233f576040805160e560020a62461bcd02815260206004820152600d60248201527f706172616d735f6c656e67746800000000000000000000000000000000000000604482015290519081900360640190fd5b604d8914612397576040805160e560020a62461bcd02815260206004820152600d60248201527f67656e6f6d655f6c656e67746800000000000000000000000000000000000000604482015290519081900360640190fd5b87158015906123a557508615155b156124075787871415612402576040805160e560020a62461bcd02815260206004820152600b60248201527f73616d655f706172656e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b6124cb565b8715801561241457508615155b15612469576040805160e560020a62461bcd02815260206004820152600d60248201527f706172656e74415f656d70747900000000000000000000000000000000000000604482015290519081900360640190fd5b8615801561247657508715155b156124cb576040805160e560020a62461bcd02815260206004820152600d60248201527f706172656e74425f656d70747900000000000000000000000000000000000000604482015290519081900360640190fd5b61253c8d8c8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f7b945050505050565b905061255b60008e8360206040519081016040528060008152506131cb565b15156125b1576040805160e560020a62461bcd02815260206004820152600d60248201527f736166655f7472616e7366657200000000000000000000000000000000000000604482015290519081900360640190fd5b601060009054906101000a9004600160a060020a0316600160a060020a031663a3e76c0f8d6040518263ffffffff1660e060020a0281526004016000604051808303818588803b15801561260457600080fd5b505af1158015612618573d6000803e3d6000fd5b50505050508c600160a060020a03166000600160a060020a0316600080516020613754833981519152836040518082815260200191505060405180910390a3600083111561268f57604051339084156108fc029085906000818181858888f1935050505015801561268d573d6000803e3d6000fd5b505b9c9b505050505050505050505050565b60009182526009602052604090912054600160a060020a0391821691161490565b600054600160a060020a03163314612710576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020613734833981519152604482015290519081900360640190fd5b6000805460a060020a900460ff16600281111561272957fe5b1461277e576040805160e560020a62461bcd02815260206004820152600e60248201527f746573745f6d6f64655f6f6e6c79000000000000000000000000000000000000604482015290519081900360640190fd5b600080546001919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550565b6127b784848461114d565b6127c3848484846131cb565b151561112657600080fd5b6000848152600d60205260408120600601548590600160a060020a03163014612841576040805160e560020a62461bcd02815260206004820152600860248201527f6f776e5f6f6e6c79000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526001602052604090205460ff1615156128aa576040805160e560020a62461bcd02815260206004820152600b60248201527f6d696e696f6e5f6f6e6c79000000000000000000000000000000000000000000604482015290519081900360640190fd5b8451600010612903576040805160e560020a62461bcd02815260206004820152600d60248201527f706172616d735f6c656e67746800000000000000000000000000000000000000604482015290519081900360640190fd5b6000868152600d6020908152604090912086516129289260059092019188019061368b565b506000868152600d60205260409020600201541515612956576000868152600d602052604090206002018490555b6000868152600d6020526040902060060154600160a060020a0316915061297e82888861114d565b60008311156129b657604051339084156108fc029085906000818181858888f193505050501580156129b4573d6000803e3d6000fd5b505b50505050505050565b600754600f54600e5460065401011090565b6060610c956129df83613348565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612a655780601f10612a3a57610100808354040283529160200191612a65565b820191906000526020600020905b815481529060010190602001808311612a4857829003601f168201915b505050505061345390919063ffffffff16565b600054600160a060020a03163314612ac8576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020613734833981519152604482015290519081900360640190fd5b600160005460a060020a900460ff166002811115612ae257fe5b14612b37576040805160e560020a62461bcd02815260206004820152601160248201527f70726573616c655f6d6f64655f6f6e6c79000000000000000000000000000000604482015290519081900360640190fd5b600080546002919074ff0000000000000000000000000000000000000000191660a060020a836127a5565b60075490565b600054600160a060020a03163314612bb8576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020613734833981519152604482015290519081900360640190fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a031660009081526001602052604090205460ff1690565b612c068484846000806127ce565b6127c3308585846131cb565b61140b8383836020604051908101604052806000815250612bf8565b600160a060020a039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b600e5490565b7ff0b9e5ba000000000000000000000000000000000000000000000000000000009392505050565b600f5490565b600054600160a060020a031690565b6000908152600d602052604090206004015490565b600160a060020a038381166000818152600a6020908152604080832094871680845294825291829020805460ff1916861515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b600081815260096020526040902054600160a060020a03161515612d45576120da565b60008181526009602090815260408083208054600160a060020a031916905580518481529051600160a060020a038616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35050565b600160a060020a0382166000908152600c602052604081205481908190612dd090600163ffffffff61359c16565b600160a060020a0386166000908152600c6020526040902080549194509084908110612df857fe5b6000918252602080832090910154600160a060020a0388168352600c82526040808420888552600b90935290922054815492945084928110612e3657fe5b6000918252602080832090910192909255600160a060020a0387168152600c90915260409020805490612e6d9060001983016136f9565b50506000838152600b6020908152604080832080549484528184209490945594825291819055600d909152919091206006018054600160a060020a03191690555050565b6000818152600d602052604081206006810154909190600160a060020a031615612f25576040805160e560020a62461bcd02815260206004820152600560248201527f74616b656e000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a039092166000818152600c6020908152604080832080546001810182559084528284208101869055948352600b90915290209190915560069091018054600160a060020a0319169091179055565b600080612f86613641565b600654612f9a90600163ffffffff6135ae16565b60068190556040805160e08101825260ff8c8116825260208083018d81528385018b9052606084018d9052608084018c905260a084018a9052600060c08501819052868152600d8352949094208351815460ff19169316929092178255925180519496509194508493909261301692600185019291019061368b565b5060408201516002820155606082015160038201556080820151600482015560a0820151805161305091600584019160209091019061368b565b5060c0919091015160069091018054600160a060020a031916600160a060020a039092169190911790556130848a83612eb1565b7f870b041ec8cd071774bcc2075c786f358f51844f977acf528cb6b31f35f5719b8a86848a8a8d8a6040518088600160a060020a0316600160a060020a031681526020018781526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561311d578181015183820152602001613105565b50505050905090810190601f16801561314a5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561317d578181015183820152602001613165565b50505050905090810190601f1680156131aa5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390a15098975050505050505050565b6000806131e085600160a060020a03166135bb565b15156131ef576001915061331a565b84600160a060020a031663f0b9e5ba8786866040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561326e578181015183820152602001613256565b50505050905090810190601f16801561329b5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156132bc57600080fd5b505af11580156132d0573d6000803e3d6000fd5b505050506040513d60208110156132e657600080fd5b5051600160e060020a031981167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b6000818152600d6020526040902060060154600160a060020a03166120da8183612da2565b606060008082818515156133915760408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152945061344a565b8593505b83156133ac57600190920191600a84049350613395565b826040519080825280601f01601f1916602001820160405280156133da578160200160208202803883390190505b5091505060001982015b851561344657815160001982019160f860020a6030600a8a06010291849190811061340b57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a860495506133e4565b8194505b50505050919050565b60608060608060008087945086935083518551016040519080825280601f01601f191660200182016040528015613494578160200160208202803883390190505b50925060009150600090505b84518110156135165784818151811015156134b757fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156134de57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016134a0565b5060005b835181101561359057838181518110151561353157fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561355857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060010161351a565b50909695505050505050565b6000828211156135a857fe5b50900390565b81810182811015610c9557fe5b6000903b1190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106136045782800160ff19823516178555613631565b82800160010185558215613631579182015b82811115613631578235825591602001919060010190613616565b5061363d929150613719565b5090565b60e060405190810160405280600060ff16815260200160608152602001600081526020016000815260200160008152602001606081526020016000600160a060020a031681525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106136cc57805160ff1916838001178555613631565b82800160010185558215613631579182015b828111156136315782518255916020019190600101906136de565b81548183558181111561140b5760008381526020902061140b9181019083015b610f4a91905b8082111561363d576000815560010161371f5600636f6e74726f6c6c65725f6f6e6c790000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820866a13716ce753d0db0a16459b318b88de83313f7b59c000bd895cf7504cf74f002900000000000000000000000094cc5746b2a0246ca844aee92a9c7f59adca25c7
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000094cc5746b2a0246ca844aee92a9c7f59adca25c7
-----Decoded View---------------
Arg [0] : _bank (address): 0x94cc5746b2A0246cA844AEe92a9c7F59adCa25c7
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000094cc5746b2a0246ca844aee92a9c7f59adca25c7
Swarm Source
bzzr://866a13716ce753d0db0a16459b318b88de83313f7b59c000bd895cf7504cf74f
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.