Overview
FTM Balance
0 FTM
FTM Value
$0.00More Info
Private Name Tags
ContractCreator:
Sponsored
Latest 25 from a total of 19,856 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Migrate Node | 46890890 | 562 days ago | IN | 0 FTM | 0.0454735 | ||||
Migrate Node | 46652214 | 566 days ago | IN | 0 FTM | 0.00065048 | ||||
Migrate Node | 44042669 | 605 days ago | IN | 0 FTM | 0.0037538 | ||||
Migrate Node | 43267454 | 616 days ago | IN | 0 FTM | 0.00120645 | ||||
Migrate Node | 43267454 | 616 days ago | IN | 0 FTM | 0.00047024 | ||||
Migrate Node | 43187132 | 617 days ago | IN | 0 FTM | 0.00273244 | ||||
Migrate Node | 42834870 | 622 days ago | IN | 0 FTM | 0.00469883 | ||||
Migrate Node | 42655521 | 625 days ago | IN | 0 FTM | 0.00380996 | ||||
Migrate Node | 42457329 | 628 days ago | IN | 0 FTM | 0.00108638 | ||||
Migrate Node | 42457329 | 628 days ago | IN | 0 FTM | 0.00235924 | ||||
Migrate Node | 41990314 | 634 days ago | IN | 0 FTM | 0.00057061 | ||||
Migrate Node | 41624927 | 638 days ago | IN | 0 FTM | 0.00321621 | ||||
Migrate Node | 41620844 | 639 days ago | IN | 0 FTM | 0.00429679 | ||||
Migrate Node | 41620812 | 639 days ago | IN | 0 FTM | 0.01269996 | ||||
Migrate Node | 41608739 | 639 days ago | IN | 0 FTM | 0.00703619 | ||||
Migrate Node | 41608646 | 639 days ago | IN | 0 FTM | 0.00158706 | ||||
Migrate Node | 41598772 | 639 days ago | IN | 0 FTM | 0.00184639 | ||||
Migrate Node | 41597084 | 639 days ago | IN | 0 FTM | 0.00816292 | ||||
Migrate Node | 41596568 | 639 days ago | IN | 0 FTM | 0.00176489 | ||||
Migrate Node | 41594999 | 639 days ago | IN | 0 FTM | 0.00487684 | ||||
Migrate Node | 41594449 | 639 days ago | IN | 0 FTM | 0.02504397 | ||||
Migrate Node | 41587799 | 639 days ago | IN | 0 FTM | 0.00233863 | ||||
Migrate Node | 41581665 | 639 days ago | IN | 0 FTM | 0.00119156 | ||||
Migrate Node | 41581661 | 639 days ago | IN | 0 FTM | 0.00119152 | ||||
Migrate Node | 41580664 | 639 days ago | IN | 0 FTM | 0.00118455 |
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
39474695 | 668 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Name:
PowerMigration
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; //import "hardhat/console.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; library strings { struct slice { uint256 _len; uint256 _ptr; } function memcpy( uint256 dest, uint256 src, uint256 len ) private pure { // Copy word-length chunks while possible for (; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint256 mask = type(uint256).max; if (len > 0) { mask = 256**(32 - len) - 1; } assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } } /* * @dev Returns a slice containing the entire string. * @param self The string to make a slice from. * @return A newly allocated slice containing the entire string. */ function toSlice(string memory self) internal pure returns (slice memory) { uint256 ptr; assembly { ptr := add(self, 0x20) } return slice(bytes(self).length, ptr); } /* * @dev Copies a slice to a new string. * @param self The slice to copy. * @return A newly allocated string containing the slice's text. */ function toString(slice memory self) internal pure returns (string memory) { string memory ret = new string(self._len); uint256 retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); return ret; } /* * @dev Returns the length in runes of the slice. Note that this operation * takes time proportional to the length of the slice; avoid using it * in loops, and call `slice.empty()` if you only need to know whether * the slice is empty or not. * @param self The slice to operate on. * @return The length of the slice in runes. */ function len(slice memory self) internal pure returns (uint256 l) { // Starting at ptr-31 means the LSB will be the byte we care about uint256 ptr = self._ptr - 31; uint256 end = ptr + self._len; for (l = 0; ptr < end; l++) { uint8 b; assembly { b := and(mload(ptr), 0xFF) } if (b < 0x80) { ptr += 1; } else if (b < 0xE0) { ptr += 2; } else if (b < 0xF0) { ptr += 3; } else if (b < 0xF8) { ptr += 4; } else if (b < 0xFC) { ptr += 5; } else { ptr += 6; } } } // Returns the memory address of the first byte of the first occurrence of // `needle` in `self`, or the first byte after `self` if not found. function findPtr( uint256 selflen, uint256 selfptr, uint256 needlelen, uint256 needleptr ) private pure returns (uint256) { uint256 ptr = selfptr; uint256 idx; if (needlelen <= selflen) { if (needlelen <= 32) { bytes32 mask; if (needlelen > 0) { mask = bytes32(~(2**(8 * (32 - needlelen)) - 1)); } bytes32 needledata; assembly { needledata := and(mload(needleptr), mask) } uint256 end = selfptr + selflen - needlelen; bytes32 ptrdata; assembly { ptrdata := and(mload(ptr), mask) } while (ptrdata != needledata) { if (ptr >= end) return selfptr + selflen; ptr++; assembly { ptrdata := and(mload(ptr), mask) } } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := keccak256(needleptr, needlelen) } for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := keccak256(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } // Returns the memory address of the first byte after the last occurrence of // `needle` in `self`, or the address of `self` if not found. function rfindPtr( uint256 selflen, uint256 selfptr, uint256 needlelen, uint256 needleptr ) private pure returns (uint256) { uint256 ptr; if (needlelen <= selflen) { if (needlelen <= 32) { bytes32 mask; if (needlelen > 0) { mask = bytes32(~(2**(8 * (32 - needlelen)) - 1)); } bytes32 needledata; assembly { needledata := and(mload(needleptr), mask) } ptr = selfptr + selflen - needlelen; bytes32 ptrdata; assembly { ptrdata := and(mload(ptr), mask) } while (ptrdata != needledata) { if (ptr <= selfptr) return selfptr; ptr--; assembly { ptrdata := and(mload(ptr), mask) } } return ptr + needlelen; } else { // For long needles, use hashing bytes32 hash; assembly { hash := keccak256(needleptr, needlelen) } ptr = selfptr + (selflen - needlelen); while (ptr >= selfptr) { bytes32 testHash; assembly { testHash := keccak256(ptr, needlelen) } if (hash == testHash) return ptr + needlelen; ptr -= 1; } } } return selfptr; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and `token` to everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function split( slice memory self, slice memory needle, slice memory token ) internal pure returns (slice memory) { uint256 ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = self._ptr; token._len = ptr - self._ptr; if (ptr == self._ptr + self._len) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; self._ptr = ptr + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and returning everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` up to the first occurrence of `delim`. */ function split(slice memory self, slice memory needle) internal pure returns (slice memory token) { split(self, needle, token); } /* * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return The number of occurrences of `needle` found in `self`. */ function count(slice memory self, slice memory needle) internal pure returns (uint256 cnt) { uint256 ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len; while (ptr <= self._ptr + self._len) { cnt++; ptr = findPtr( self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr ) + needle._len; } } } library PowerLibrary { using strings for *; function strToArrayUint256(string memory str, string memory delim) internal pure returns (uint256[] memory) { strings.slice memory stringSlice = str.toSlice(); strings.slice memory delimeterSlice = delim.toSlice(); uint256[] memory result = new uint256[]( stringSlice.count(delimeterSlice) + 1 ); for (uint256 i = 0; i < result.length; i++) { (uint256 res, bool err) = strToUint( stringSlice.split(delimeterSlice).toString() ); if (err) { result[i] = res; } } return result; } function strToArrayString(string memory str, string memory delim) internal pure returns (string[] memory) { strings.slice memory stringSlice = str.toSlice(); strings.slice memory delimeterSlice = delim.toSlice(); string[] memory result = new string[]( stringSlice.count(delimeterSlice) + 1 ); for (uint256 i = 0; i < result.length; i++) { result[i] = stringSlice.split(delimeterSlice).toString(); } return result; } function strToUint(string memory _str) internal pure returns (uint256 res, bool err) { for (uint256 i = 0; i < bytes(_str).length; i++) { if ( (uint8(bytes(_str)[i]) - 48) < 0 || (uint8(bytes(_str)[i]) - 48) > 9 ) { return (0, false); } res += (uint8(bytes(_str)[i]) - 48) * 10**(bytes(_str).length - i - 1); } return (res, true); } } contract NODERewardManagement { function _getNodesNames(address account) external view returns (string memory) { return ""; } function _getNodesCreationTime(address account) external view returns (string memory) { return ""; } function _getNodesLastClaimTime(address account) external view returns (string memory) { return ""; } function _getNodeNumberOf(address account) public view returns (uint256) { return 0; } } struct NodeTier { string name; NODERewardManagement manager; uint256 cashOutFee; } contract oldPowerStation { mapping(string => NodeTier) public tiers; string[] public allTiers; function getNodeNumberOf(address account, string memory tierName) public view returns (uint256) { return 0; } function cashoutAll(string memory tierName, address user) public { } } contract newPowerStation { function migrateNode ( string[] memory name, string memory tier, address user, uint256 lastClaimTime ) external { } } contract PowerMigration is Ownable{ oldPowerStation oldStation; newPowerStation newStation; mapping( address => mapping( string => uint256 )) public alreadyMigrate; function setStation(address _oldStation, address _newStation) external onlyOwner { oldStation = oldPowerStation(_oldStation); newStation = newPowerStation(_newStation); } string[] allTiers = [ "FLATVERSAL", "MICROSCOPIC", "HUMAN", "SUPERHUMAN" ]; function migrateNode(address user, string memory tier, string[] memory nodeNames) external { (,NODERewardManagement test,) = oldStation.tiers(tier); require(alreadyMigrate[user][tier] + nodeNames.length <= test._getNodeNumberOf(user), "You already migrate!"); newStation.migrateNode( nodeNames, tier, user, block.timestamp ); oldStation.cashoutAll(tier, user); alreadyMigrate[user][tier] += nodeNames.length; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200, "details": { "yul": true } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"string","name":"","type":"string"}],"name":"alreadyMigrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"string","name":"tier","type":"string"},{"internalType":"string[]","name":"nodeNames","type":"string[]"}],"name":"migrateNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldStation","type":"address"},{"internalType":"address","name":"_newStation","type":"address"}],"name":"setStation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600a610100818152691193105515915494d05360b21b610120526080908152600b6101409081526a4d4943524f53434f50494360a81b6101605260a052600561018090815264242aa6a0a760d91b6101a05260c0526102006040526101c09182526929aaa822a9242aa6a0a760b11b6101e05260e091909152620000879060049081620000f7565b503480156200009557600080fd5b50620000a133620000a7565b6200029d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821562000149579160200282015b82811115620001495782518051620001389184916020909101906200015b565b509160200191906001019062000118565b5062000157929150620001e6565b5090565b828054620001699062000260565b90600052602060002090601f0160209004810192826200018d5760008555620001d8565b82601f10620001a857805160ff1916838001178555620001d8565b82800160010185558215620001d8579182015b82811115620001d8578251825591602001919060010190620001bb565b506200015792915062000207565b8082111562000157576000620001fd82826200021e565b50600101620001e6565b5b8082111562000157576000815560010162000208565b5080546200022c9062000260565b6000825580601f106200023d575050565b601f0160209004906000526020600020908101906200025d919062000207565b50565b600181811c908216806200027557607f821691505b602082108114156200029757634e487b7160e01b600052602260045260246000fd5b50919050565b610a5180620002ad6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806329d1eae0146100675780635b4ea304146100b6578063715018a6146100cb5780638da5cb5b146100d3578063c54f63f9146100ee578063f2fde38b14610101575b600080fd5b6100a36100753660046105fd565b6003602090815260009283526040909220815180830184018051928152908401929093019190912091525481565b6040519081526020015b60405180910390f35b6100c96100c43660046105c4565b610114565b005b6100c9610175565b6000546040516001600160a01b0390911681526020016100ad565b6100c96100fc36600461064d565b6101ab565b6100c961010f3660046105a0565b61045f565b6000546001600160a01b031633146101475760405162461bcd60e51b815260040161013e9061090c565b60405180910390fd5b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6000546001600160a01b0316331461019f5760405162461bcd60e51b815260040161013e9061090c565b6101a960006104fa565b565b60015460405163fe551b0560e01b81526000916001600160a01b03169063fe551b05906101dc9086906004016108cf565b60006040518083038186803b1580156101f457600080fd5b505afa158015610208573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610230919081019061074d565b5060405163112469f960e21b81526001600160a01b0387811660048301529193509083169150634491a7e49060240160206040518083038186803b15801561027757600080fd5b505afa15801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af91906107e4565b82516001600160a01b0386166000908152600360205260409081902090516102d8908790610829565b9081526020016040518091039020546102f1919061099a565b11156103365760405162461bcd60e51b8152602060048201526014602482015273596f7520616c7265616479206d6967726174652160601b604482015260640161013e565b600254604051630e3718c160e01b81526001600160a01b0390911690630e3718c19061036c908590879089904290600401610845565b600060405180830381600087803b15801561038657600080fd5b505af115801561039a573d6000803e3d6000fd5b505060015460405163f011d4dd60e01b81526001600160a01b03909116925063f011d4dd91506103d090869088906004016108e2565b600060405180830381600087803b1580156103ea57600080fd5b505af11580156103fe573d6000803e3d6000fd5b50505050815160036000866001600160a01b03166001600160a01b03168152602001908152602001600020846040516104379190610829565b90815260200160405180910390206000828254610454919061099a565b909155505050505050565b6000546001600160a01b031633146104895760405162461bcd60e51b815260040161013e9061090c565b6001600160a01b0381166104ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161013e565b6104f7816104fa565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082601f83011261055b57600080fd5b813561056e61056982610972565b610941565b81815284602083860101111561058357600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156105b257600080fd5b81356105bd81610a06565b9392505050565b600080604083850312156105d757600080fd5b82356105e281610a06565b915060208301356105f281610a06565b809150509250929050565b6000806040838503121561061057600080fd5b823561061b81610a06565b9150602083013567ffffffffffffffff81111561063757600080fd5b6106438582860161054a565b9150509250929050565b60008060006060848603121561066257600080fd5b833561066d81610a06565b925060208481013567ffffffffffffffff8082111561068b57600080fd5b6106978883890161054a565b945060408701359150808211156106ad57600080fd5b818701915087601f8301126106c157600080fd5b8135818111156106d3576106d36109f0565b8060051b6106e2858201610941565b8281528581019085870183870188018d10156106fd57600080fd5b60009350835b8581101561073a57813587811115610719578586fd5b6107278f8b838c010161054a565b8552509288019290880190600101610703565b5050809750505050505050509250925092565b60008060006060848603121561076257600080fd5b835167ffffffffffffffff81111561077957600080fd5b8401601f8101861361078a57600080fd5b805161079861056982610972565b8181528760208385010111156107ad57600080fd5b6107be8260208301602086016109c0565b80955050505060208401516107d281610a06565b80925050604084015190509250925092565b6000602082840312156107f657600080fd5b5051919050565b600081518084526108158160208601602086016109c0565b601f01601f19169290920160200192915050565b6000825161083b8184602087016109c0565b9190910192915050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b8381101561089c57609f1988870301855261088a8683516107fd565b9550938201939082019060010161086e565b5050858403818701525050506108b281876107fd565b6001600160a01b0395909516604084015250506060015292915050565b6020815260006105bd60208301846107fd565b6040815260006108f560408301856107fd565b905060018060a01b03831660208301529392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561096a5761096a6109f0565b604052919050565b600067ffffffffffffffff82111561098c5761098c6109f0565b50601f01601f191660200190565b600082198211156109bb57634e487b7160e01b600052601160045260246000fd5b500190565b60005b838110156109db5781810151838201526020016109c3565b838111156109ea576000848401525b50505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146104f757600080fdfea2646970667358221220f499542b887daa9122860ce802fa3f61ae946deabba236c3b6ab3beac1651d9b64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100625760003560e01c806329d1eae0146100675780635b4ea304146100b6578063715018a6146100cb5780638da5cb5b146100d3578063c54f63f9146100ee578063f2fde38b14610101575b600080fd5b6100a36100753660046105fd565b6003602090815260009283526040909220815180830184018051928152908401929093019190912091525481565b6040519081526020015b60405180910390f35b6100c96100c43660046105c4565b610114565b005b6100c9610175565b6000546040516001600160a01b0390911681526020016100ad565b6100c96100fc36600461064d565b6101ab565b6100c961010f3660046105a0565b61045f565b6000546001600160a01b031633146101475760405162461bcd60e51b815260040161013e9061090c565b60405180910390fd5b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6000546001600160a01b0316331461019f5760405162461bcd60e51b815260040161013e9061090c565b6101a960006104fa565b565b60015460405163fe551b0560e01b81526000916001600160a01b03169063fe551b05906101dc9086906004016108cf565b60006040518083038186803b1580156101f457600080fd5b505afa158015610208573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610230919081019061074d565b5060405163112469f960e21b81526001600160a01b0387811660048301529193509083169150634491a7e49060240160206040518083038186803b15801561027757600080fd5b505afa15801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af91906107e4565b82516001600160a01b0386166000908152600360205260409081902090516102d8908790610829565b9081526020016040518091039020546102f1919061099a565b11156103365760405162461bcd60e51b8152602060048201526014602482015273596f7520616c7265616479206d6967726174652160601b604482015260640161013e565b600254604051630e3718c160e01b81526001600160a01b0390911690630e3718c19061036c908590879089904290600401610845565b600060405180830381600087803b15801561038657600080fd5b505af115801561039a573d6000803e3d6000fd5b505060015460405163f011d4dd60e01b81526001600160a01b03909116925063f011d4dd91506103d090869088906004016108e2565b600060405180830381600087803b1580156103ea57600080fd5b505af11580156103fe573d6000803e3d6000fd5b50505050815160036000866001600160a01b03166001600160a01b03168152602001908152602001600020846040516104379190610829565b90815260200160405180910390206000828254610454919061099a565b909155505050505050565b6000546001600160a01b031633146104895760405162461bcd60e51b815260040161013e9061090c565b6001600160a01b0381166104ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161013e565b6104f7816104fa565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082601f83011261055b57600080fd5b813561056e61056982610972565b610941565b81815284602083860101111561058357600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156105b257600080fd5b81356105bd81610a06565b9392505050565b600080604083850312156105d757600080fd5b82356105e281610a06565b915060208301356105f281610a06565b809150509250929050565b6000806040838503121561061057600080fd5b823561061b81610a06565b9150602083013567ffffffffffffffff81111561063757600080fd5b6106438582860161054a565b9150509250929050565b60008060006060848603121561066257600080fd5b833561066d81610a06565b925060208481013567ffffffffffffffff8082111561068b57600080fd5b6106978883890161054a565b945060408701359150808211156106ad57600080fd5b818701915087601f8301126106c157600080fd5b8135818111156106d3576106d36109f0565b8060051b6106e2858201610941565b8281528581019085870183870188018d10156106fd57600080fd5b60009350835b8581101561073a57813587811115610719578586fd5b6107278f8b838c010161054a565b8552509288019290880190600101610703565b5050809750505050505050509250925092565b60008060006060848603121561076257600080fd5b835167ffffffffffffffff81111561077957600080fd5b8401601f8101861361078a57600080fd5b805161079861056982610972565b8181528760208385010111156107ad57600080fd5b6107be8260208301602086016109c0565b80955050505060208401516107d281610a06565b80925050604084015190509250925092565b6000602082840312156107f657600080fd5b5051919050565b600081518084526108158160208601602086016109c0565b601f01601f19169290920160200192915050565b6000825161083b8184602087016109c0565b9190910192915050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b8381101561089c57609f1988870301855261088a8683516107fd565b9550938201939082019060010161086e565b5050858403818701525050506108b281876107fd565b6001600160a01b0395909516604084015250506060015292915050565b6020815260006105bd60208301846107fd565b6040815260006108f560408301856107fd565b905060018060a01b03831660208301529392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561096a5761096a6109f0565b604052919050565b600067ffffffffffffffff82111561098c5761098c6109f0565b50601f01601f191660200190565b600082198211156109bb57634e487b7160e01b600052601160045260246000fd5b500190565b60005b838110156109db5781810151838201526020016109c3565b838111156109ea576000848401525b50505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146104f757600080fdfea2646970667358221220f499542b887daa9122860ce802fa3f61ae946deabba236c3b6ab3beac1651d9b64736f6c63430008070033
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.