Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x4640b861...0E79eaa09 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
RocketDAONodeTrustedUpgrade
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity Standard Json-Input format)
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity 0.7.6; // SPDX-License-Identifier: GPL-3.0-only import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../RocketBase.sol"; import "../../../interface/dao/node/RocketDAONodeTrustedUpgradeInterface.sol"; // Handles network contract upgrades contract RocketDAONodeTrustedUpgrade is RocketBase, RocketDAONodeTrustedUpgradeInterface { // Events event ContractUpgraded(bytes32 indexed name, address indexed oldAddress, address indexed newAddress, uint256 time); event ContractAdded(bytes32 indexed name, address indexed newAddress, uint256 time); event ABIUpgraded(bytes32 indexed name, uint256 time); event ABIAdded(bytes32 indexed name, uint256 time); // Construct constructor(RocketStorageInterface _rocketStorageAddress) RocketBase(_rocketStorageAddress) { version = 1; } // Main accessor for performing an upgrade, be it a contract or abi for a contract // Will require > 50% of trusted DAO members to run when bootstrap mode is disabled function upgrade(string memory _type, string memory _name, string memory _contractAbi, address _contractAddress) override external onlyLatestContract("rocketDAONodeTrustedProposals", msg.sender) { // What action are we performing? bytes32 typeHash = keccak256(abi.encodePacked(_type)); // Lets do it! if(typeHash == keccak256(abi.encodePacked("upgradeContract"))) _upgradeContract(_name, _contractAddress, _contractAbi); if(typeHash == keccak256(abi.encodePacked("addContract"))) _addContract(_name, _contractAddress, _contractAbi); if(typeHash == keccak256(abi.encodePacked("upgradeABI"))) _upgradeABI(_name, _contractAbi); if(typeHash == keccak256(abi.encodePacked("addABI"))) _addABI(_name, _contractAbi); } /*** Internal Upgrade Methods for the Trusted Node DAO ****************/ // Upgrade a network contract function _upgradeContract(string memory _name, address _contractAddress, string memory _contractAbi) internal { // Check contract being upgraded bytes32 nameHash = keccak256(abi.encodePacked(_name)); require(nameHash != keccak256(abi.encodePacked("rocketVault")), "Cannot upgrade the vault"); require(nameHash != keccak256(abi.encodePacked("rocketTokenRETH")), "Cannot upgrade token contracts"); require(nameHash != keccak256(abi.encodePacked("rocketTokenRPL")), "Cannot upgrade token contracts"); require(nameHash != keccak256(abi.encodePacked("rocketTokenRPLFixedSupply")), "Cannot upgrade token contracts"); require(nameHash != keccak256(abi.encodePacked("casperDeposit")), "Cannot upgrade the casper deposit contract"); require(nameHash != keccak256(abi.encodePacked("rocketMinipoolPenalty")), "Cannot upgrade minipool penalty contract"); // Get old contract address & check contract exists address oldContractAddress = getAddress(keccak256(abi.encodePacked("contract.address", _name))); require(oldContractAddress != address(0x0), "Contract does not exist"); // Check new contract address require(_contractAddress != address(0x0), "Invalid contract address"); require(_contractAddress != oldContractAddress, "The contract address cannot be set to its current address"); require(!getBool(keccak256(abi.encodePacked("contract.exists", _contractAddress))), "Contract address is already in use"); // Check ABI isn't empty require(bytes(_contractAbi).length > 0, "Empty ABI is invalid"); // Register new contract setBool(keccak256(abi.encodePacked("contract.exists", _contractAddress)), true); setString(keccak256(abi.encodePacked("contract.name", _contractAddress)), _name); setAddress(keccak256(abi.encodePacked("contract.address", _name)), _contractAddress); setString(keccak256(abi.encodePacked("contract.abi", _name)), _contractAbi); // Deregister old contract deleteString(keccak256(abi.encodePacked("contract.name", oldContractAddress))); deleteBool(keccak256(abi.encodePacked("contract.exists", oldContractAddress))); // Emit contract upgraded event emit ContractUpgraded(nameHash, oldContractAddress, _contractAddress, block.timestamp); } // Add a new network contract function _addContract(string memory _name, address _contractAddress, string memory _contractAbi) internal { // Check contract name bytes32 nameHash = keccak256(abi.encodePacked(_name)); require(bytes(_name).length > 0, "Invalid contract name"); // Cannot add contract if it already exists (use upgradeContract instead) require(getAddress(keccak256(abi.encodePacked("contract.address", _name))) == address(0x0), "Contract name is already in use"); // Cannot add contract if already in use as ABI only string memory existingAbi = getString(keccak256(abi.encodePacked("contract.abi", _name))); require(bytes(existingAbi).length == 0, "Contract name is already in use"); // Check contract address require(_contractAddress != address(0x0), "Invalid contract address"); require(!getBool(keccak256(abi.encodePacked("contract.exists", _contractAddress))), "Contract address is already in use"); // Check ABI isn't empty require(bytes(_contractAbi).length > 0, "Empty ABI is invalid"); // Register contract setBool(keccak256(abi.encodePacked("contract.exists", _contractAddress)), true); setString(keccak256(abi.encodePacked("contract.name", _contractAddress)), _name); setAddress(keccak256(abi.encodePacked("contract.address", _name)), _contractAddress); setString(keccak256(abi.encodePacked("contract.abi", _name)), _contractAbi); // Emit contract added event emit ContractAdded(nameHash, _contractAddress, block.timestamp); } // Upgrade a network contract ABI function _upgradeABI(string memory _name, string memory _contractAbi) internal { // Check ABI exists string memory existingAbi = getString(keccak256(abi.encodePacked("contract.abi", _name))); require(bytes(existingAbi).length > 0, "ABI does not exist"); // Sanity checks require(bytes(_contractAbi).length > 0, "Empty ABI is invalid"); require(keccak256(bytes(existingAbi)) != keccak256(bytes(_contractAbi)), "ABIs are identical"); // Set ABI setString(keccak256(abi.encodePacked("contract.abi", _name)), _contractAbi); // Emit ABI upgraded event emit ABIUpgraded(keccak256(abi.encodePacked(_name)), block.timestamp); } // Add a new network contract ABI function _addABI(string memory _name, string memory _contractAbi) internal { // Check ABI name bytes32 nameHash = keccak256(abi.encodePacked(_name)); require(bytes(_name).length > 0, "Invalid ABI name"); // Sanity check require(bytes(_contractAbi).length > 0, "Empty ABI is invalid"); // Cannot add ABI if name is already used for an existing network contract require(getAddress(keccak256(abi.encodePacked("contract.address", _name))) == address(0x0), "ABI name is already in use"); // Cannot add ABI if ABI already exists for this name (use upgradeABI instead) string memory existingAbi = getString(keccak256(abi.encodePacked("contract.abi", _name))); require(bytes(existingAbi).length == 0, "ABI name is already in use"); // Set ABI setString(keccak256(abi.encodePacked("contract.abi", _name)), _contractAbi); // Emit ABI added event emit ABIAdded(nameHash, block.timestamp); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketStorageInterface { // Deploy status function getDeployedStatus() external view returns (bool); // Guardian function getGuardian() external view returns(address); function setGuardian(address _newAddress) external; function confirmGuardian() external; // Getters function getAddress(bytes32 _key) external view returns (address); function getUint(bytes32 _key) external view returns (uint); function getString(bytes32 _key) external view returns (string memory); function getBytes(bytes32 _key) external view returns (bytes memory); function getBool(bytes32 _key) external view returns (bool); function getInt(bytes32 _key) external view returns (int); function getBytes32(bytes32 _key) external view returns (bytes32); // Setters function setAddress(bytes32 _key, address _value) external; function setUint(bytes32 _key, uint _value) external; function setString(bytes32 _key, string calldata _value) external; function setBytes(bytes32 _key, bytes calldata _value) external; function setBool(bytes32 _key, bool _value) external; function setInt(bytes32 _key, int _value) external; function setBytes32(bytes32 _key, bytes32 _value) external; // Deleters function deleteAddress(bytes32 _key) external; function deleteUint(bytes32 _key) external; function deleteString(bytes32 _key) external; function deleteBytes(bytes32 _key) external; function deleteBool(bytes32 _key) external; function deleteInt(bytes32 _key) external; function deleteBytes32(bytes32 _key) external; // Arithmetic function addUint(bytes32 _key, uint256 _amount) external; function subUint(bytes32 _key, uint256 _amount) external; // Protected storage function getNodeWithdrawalAddress(address _nodeAddress) external view returns (address); function getNodePendingWithdrawalAddress(address _nodeAddress) external view returns (address); function setWithdrawalAddress(address _nodeAddress, address _newWithdrawalAddress, bool _confirm) external; function confirmWithdrawalAddress(address _nodeAddress) external; }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity 0.7.6; // SPDX-License-Identifier: GPL-3.0-only import "../interface/RocketStorageInterface.sol"; /// @title Base settings / modifiers for each contract in Rocket Pool /// @author David Rugendyke abstract contract RocketBase { // Calculate using this as the base uint256 constant calcBase = 1 ether; // Version of the contract uint8 public version; // The main storage contract where primary persistant storage is maintained RocketStorageInterface rocketStorage = RocketStorageInterface(0); /*** Modifiers **********************************************************/ /** * @dev Throws if called by any sender that doesn't match a Rocket Pool network contract */ modifier onlyLatestNetworkContract() { require(getBool(keccak256(abi.encodePacked("contract.exists", msg.sender))), "Invalid or outdated network contract"); _; } /** * @dev Throws if called by any sender that doesn't match one of the supplied contract or is the latest version of that contract */ modifier onlyLatestContract(string memory _contractName, address _contractAddress) { require(_contractAddress == getAddress(keccak256(abi.encodePacked("contract.address", _contractName))), "Invalid or outdated contract"); _; } /** * @dev Throws if called by any sender that isn't a registered node */ modifier onlyRegisteredNode(address _nodeAddress) { require(getBool(keccak256(abi.encodePacked("node.exists", _nodeAddress))), "Invalid node"); _; } /** * @dev Throws if called by any sender that isn't a trusted node DAO member */ modifier onlyTrustedNode(address _nodeAddress) { require(getBool(keccak256(abi.encodePacked("dao.trustednodes.", "member", _nodeAddress))), "Invalid trusted node"); _; } /** * @dev Throws if called by any sender that isn't a registered minipool */ modifier onlyRegisteredMinipool(address _minipoolAddress) { require(getBool(keccak256(abi.encodePacked("minipool.exists", _minipoolAddress))), "Invalid minipool"); _; } /** * @dev Throws if called by any account other than a guardian account (temporary account allowed access to settings before DAO is fully enabled) */ modifier onlyGuardian() { require(msg.sender == rocketStorage.getGuardian(), "Account is not a temporary guardian"); _; } /*** Methods **********************************************************/ /// @dev Set the main Rocket Storage address constructor(RocketStorageInterface _rocketStorageAddress) { // Update the contract address rocketStorage = RocketStorageInterface(_rocketStorageAddress); } /// @dev Get the address of a network contract by name function getContractAddress(string memory _contractName) internal view returns (address) { // Get the current contract address address contractAddress = getAddress(keccak256(abi.encodePacked("contract.address", _contractName))); // Check it require(contractAddress != address(0x0), "Contract not found"); // Return return contractAddress; } /// @dev Get the address of a network contract by name (returns address(0x0) instead of reverting if contract does not exist) function getContractAddressUnsafe(string memory _contractName) internal view returns (address) { // Get the current contract address address contractAddress = getAddress(keccak256(abi.encodePacked("contract.address", _contractName))); // Return return contractAddress; } /// @dev Get the name of a network contract by address function getContractName(address _contractAddress) internal view returns (string memory) { // Get the contract name string memory contractName = getString(keccak256(abi.encodePacked("contract.name", _contractAddress))); // Check it require(bytes(contractName).length > 0, "Contract not found"); // Return return contractName; } /// @dev Get revert error message from a .call method function getRevertMsg(bytes memory _returnData) internal pure returns (string memory) { // If the _res length is less than 68, then the transaction failed silently (without a revert message) if (_returnData.length < 68) return "Transaction reverted silently"; assembly { // Slice the sighash. _returnData := add(_returnData, 0x04) } return abi.decode(_returnData, (string)); // All that remains is the revert string } /*** Rocket Storage Methods ****************************************/ // Note: Unused helpers have been removed to keep contract sizes down /// @dev Storage get methods function getAddress(bytes32 _key) internal view returns (address) { return rocketStorage.getAddress(_key); } function getUint(bytes32 _key) internal view returns (uint) { return rocketStorage.getUint(_key); } function getString(bytes32 _key) internal view returns (string memory) { return rocketStorage.getString(_key); } function getBytes(bytes32 _key) internal view returns (bytes memory) { return rocketStorage.getBytes(_key); } function getBool(bytes32 _key) internal view returns (bool) { return rocketStorage.getBool(_key); } function getInt(bytes32 _key) internal view returns (int) { return rocketStorage.getInt(_key); } function getBytes32(bytes32 _key) internal view returns (bytes32) { return rocketStorage.getBytes32(_key); } /// @dev Storage set methods function setAddress(bytes32 _key, address _value) internal { rocketStorage.setAddress(_key, _value); } function setUint(bytes32 _key, uint _value) internal { rocketStorage.setUint(_key, _value); } function setString(bytes32 _key, string memory _value) internal { rocketStorage.setString(_key, _value); } function setBytes(bytes32 _key, bytes memory _value) internal { rocketStorage.setBytes(_key, _value); } function setBool(bytes32 _key, bool _value) internal { rocketStorage.setBool(_key, _value); } function setInt(bytes32 _key, int _value) internal { rocketStorage.setInt(_key, _value); } function setBytes32(bytes32 _key, bytes32 _value) internal { rocketStorage.setBytes32(_key, _value); } /// @dev Storage delete methods function deleteAddress(bytes32 _key) internal { rocketStorage.deleteAddress(_key); } function deleteUint(bytes32 _key) internal { rocketStorage.deleteUint(_key); } function deleteString(bytes32 _key) internal { rocketStorage.deleteString(_key); } function deleteBytes(bytes32 _key) internal { rocketStorage.deleteBytes(_key); } function deleteBool(bytes32 _key) internal { rocketStorage.deleteBool(_key); } function deleteInt(bytes32 _key) internal { rocketStorage.deleteInt(_key); } function deleteBytes32(bytes32 _key) internal { rocketStorage.deleteBytes32(_key); } /// @dev Storage arithmetic methods function addUint(bytes32 _key, uint256 _amount) internal { rocketStorage.addUint(_key, _amount); } function subUint(bytes32 _key, uint256 _amount) internal { rocketStorage.subUint(_key, _amount); } }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketDAONodeTrustedUpgradeInterface { function upgrade(string memory _type, string memory _name, string memory _contractAbi, address _contractAddress) external; }
{ "optimizer": { "enabled": true, "runs": 15000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract ABI
API[{"inputs":[{"internalType":"contract RocketStorageInterface","name":"_rocketStorageAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ABIAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ABIUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ContractUpgraded","type":"event"},{"inputs":[{"internalType":"string","name":"_type","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_contractAbi","type":"string"},{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100365760003560e01c806354fd4d501461003b578063accd7d4514610059575b600080fd5b610043610227565b6040805160ff9092168252519081900360200190f35b6102256004803603608081101561006f57600080fd5b81019060208101813564010000000081111561008a57600080fd5b82018360208201111561009c57600080fd5b803590602001918460018302840111640100000000831117156100be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561011157600080fd5b82018360208201111561012357600080fd5b8035906020019184600183028401116401000000008311171561014557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561019857600080fd5b8201836020820111156101aa57600080fd5b803590602001918460018302840111640100000000831117156101cc57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903573ffffffffffffffffffffffffffffffffffffffff1691506102309050565b005b60005460ff1681565b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c73000000815250336103058260405160200180807f636f6e74726163742e616464726573730000000000000000000000000000000081525060100182805190602001908083835b602083106102c55780518252601f1990920191602091820191016102a6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120610561565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b6000866040516020018082805190602001908083835b602083106103b95780518252601f19909201916020918201910161039a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405160200180807f75706772616465436f6e74726163740000000000000000000000000000000000815250600f0190506040516020818303038152906040528051906020012081141561044f5761044f868587610607565b60405160200180807f616464436f6e7472616374000000000000000000000000000000000000000000815250600b019050604051602081830303815290604052805190602001208114156104a8576104a8868587610ffb565b60405160200180807f7570677261646541424900000000000000000000000000000000000000000000815250600a019050604051602081830303815290604052805190602001208114156105005761050086866115f3565b60405160200180807f61646441424900000000000000000000000000000000000000000000000000008152506006019050604051602081830303815290604052805190602001208114156105585761055886866118ac565b50505050505050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166321f8a721836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156105d557600080fd5b505afa1580156105e9573d6000803e3d6000fd5b505050506040513d60208110156105ff57600080fd5b505192915050565b6000836040516020018082805190602001908083835b6020831061063c5780518252601f19909201916020918201910161061d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405160200180807f726f636b65745661756c74000000000000000000000000000000000000000000815250600b01905060405160208183030381529060405280519060200120811415610714576040805162461bcd60e51b815260206004820152601860248201527f43616e6e6f74207570677261646520746865207661756c740000000000000000604482015290519081900360640190fd5b60405160200180807f726f636b6574546f6b656e524554480000000000000000000000000000000000815250600f019050604051602081830303815290604052805190602001208114156107af576040805162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207570677261646520746f6b656e20636f6e7472616374730000604482015290519081900360640190fd5b60405160200180807f726f636b6574546f6b656e52504c000000000000000000000000000000000000815250600e0190506040516020818303038152906040528051906020012081141561084a576040805162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207570677261646520746f6b656e20636f6e7472616374730000604482015290519081900360640190fd5b60405160200180807f726f636b6574546f6b656e52504c4669786564537570706c79000000000000008152506019019050604051602081830303815290604052805190602001208114156108e5576040805162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207570677261646520746f6b656e20636f6e7472616374730000604482015290519081900360640190fd5b60405160200180807f6361737065724465706f73697400000000000000000000000000000000000000815250600d0190506040516020818303038152906040528051906020012081141561096a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806120c5602a913960400191505060405180910390fd5b60405160200180807f726f636b65744d696e69706f6f6c50656e616c747900000000000000000000008152506015019050604051602081830303815290604052805190602001208114156109ef5760405162461bcd60e51b81526004018080602001828103825260288152602001806121286028913960400191505060405180910390fd5b6000610a4e8560405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106102c55780518252601f1990920191602091820191016102a6565b905073ffffffffffffffffffffffffffffffffffffffff8116610ab8576040805162461bcd60e51b815260206004820152601760248201527f436f6e747261637420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416610b20576040805162461bcd60e51b815260206004820152601860248201527f496e76616c696420636f6e747261637420616464726573730000000000000000604482015290519081900360640190fd5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610b8b5760405162461bcd60e51b81526004018080602001828103825260398152602001806120ef6039913960400191505060405180910390fd5b610bfb8460405160200180807f636f6e74726163742e6578697374730000000000000000000000000000000000815250600f018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611bf7565b15610c375760405162461bcd60e51b81526004018080602001828103825260228152602001806121506022913960400191505060405180910390fd5b6000835111610c8d576040805162461bcd60e51b815260206004820152601460248201527f456d7074792041424920697320696e76616c6964000000000000000000000000604482015290519081900360640190fd5b610cff8460405160200180807f636f6e74726163742e6578697374730000000000000000000000000000000000815250600f018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206001611c6b565b610d708460405160200180807f636f6e74726163742e6e616d6500000000000000000000000000000000000000815250600d018273ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040528051906020012086611d01565b610e0f8560405160200180807f636f6e74726163742e616464726573730000000000000000000000000000000081525060100182805190602001908083835b60208310610dce5780518252601f199092019160209182019101610daf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012085611de0565b610eae8560405160200180807f636f6e74726163742e6162690000000000000000000000000000000000000000815250600c0182805190602001908083835b60208310610e6d5780518252601f199092019160209182019101610e4e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012084611d01565b610f1e8160405160200180807f636f6e74726163742e6e616d6500000000000000000000000000000000000000815250600d018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611e5c565b610f8e8160405160200180807f636f6e74726163742e6578697374730000000000000000000000000000000000815250600f018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611ee9565b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f253b2d54327cbf31d51951c6b05d82c4065c7d8e937b67b78aeeb84f0851526b426040518082815260200191505060405180910390a45050505050565b6000836040516020018082805190602001908083835b602083106110305780518252601f199092019160209182019101611011565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060008451116110c3576040805162461bcd60e51b815260206004820152601560248201527f496e76616c696420636f6e7472616374206e616d650000000000000000000000604482015290519081900360640190fd5b600073ffffffffffffffffffffffffffffffffffffffff166111388560405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106102c55780518252601f1990920191602091820191016102a6565b73ffffffffffffffffffffffffffffffffffffffff16146111a0576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206e616d6520697320616c726561647920696e2075736500604482015290519081900360640190fd5b60006112408560405160200180807f636f6e74726163742e6162690000000000000000000000000000000000000000815250600c0182805190602001908083835b602083106112005780518252601f1990920191602091820191016111e1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120611f5b565b90508051600014611298576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206e616d6520697320616c726561647920696e2075736500604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416611300576040805162461bcd60e51b815260206004820152601860248201527f496e76616c696420636f6e747261637420616464726573730000000000000000604482015290519081900360640190fd5b6113708460405160200180807f636f6e74726163742e6578697374730000000000000000000000000000000000815250600f018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611bf7565b156113ac5760405162461bcd60e51b81526004018080602001828103825260228152602001806121506022913960400191505060405180910390fd5b6000835111611402576040805162461bcd60e51b815260206004820152601460248201527f456d7074792041424920697320696e76616c6964000000000000000000000000604482015290519081900360640190fd5b6114748460405160200180807f636f6e74726163742e6578697374730000000000000000000000000000000000815250600f018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206001611c6b565b6114e58460405160200180807f636f6e74726163742e6e616d6500000000000000000000000000000000000000815250600d018273ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040528051906020012086611d01565b6115428560405160200180807f636f6e74726163742e6164647265737300000000000000000000000000000000815250601001828051906020019080838360208310610dce5780518252601f199092019160209182019101610daf565b61159f8560405160200180807f636f6e74726163742e6162690000000000000000000000000000000000000000815250600c01828051906020019080838360208310610e6d5780518252601f199092019160209182019101610e4e565b60408051428152905173ffffffffffffffffffffffffffffffffffffffff86169184917ff772ad32ea2f1852e01c8a9c958ec14ed6ddd8fc254a4950e1cd6370d96691699181900360200190a35050505050565b60006116528360405160200180807f636f6e74726163742e6162690000000000000000000000000000000000000000815250600c018280519060200190808383602083106112005780518252601f1990920191602091820191016111e1565b905060008151116116aa576040805162461bcd60e51b815260206004820152601260248201527f41424920646f6573206e6f742065786973740000000000000000000000000000604482015290519081900360640190fd5b6000825111611700576040805162461bcd60e51b815260206004820152601460248201527f456d7074792041424920697320696e76616c6964000000000000000000000000604482015290519081900360640190fd5b818051906020012081805190602001201415611763576040805162461bcd60e51b815260206004820152601260248201527f4142497320617265206964656e746963616c0000000000000000000000000000604482015290519081900360640190fd5b6118028360405160200180807f636f6e74726163742e6162690000000000000000000000000000000000000000815250600c0182805190602001908083835b602083106117c15780518252601f1990920191602091820191016117a2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012083611d01565b826040516020018082805190602001908083835b602083106118355780518252601f199092019160209182019101611816565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001207fa947db359458b5eeddec1312a4f0911623f92b5ffd05950824fe40c6d2383755426040518082815260200191505060405180910390a2505050565b6000826040516020018082805190602001908083835b602083106118e15780518252601f1990920191602091820191016118c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506000835111611974576040805162461bcd60e51b815260206004820152601060248201527f496e76616c696420414249206e616d6500000000000000000000000000000000604482015290519081900360640190fd5b60008251116119ca576040805162461bcd60e51b815260206004820152601460248201527f456d7074792041424920697320696e76616c6964000000000000000000000000604482015290519081900360640190fd5b600073ffffffffffffffffffffffffffffffffffffffff16611a3f8460405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106102c55780518252601f1990920191602091820191016102a6565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040805162461bcd60e51b815260206004820152601a60248201527f414249206e616d6520697320616c726561647920696e20757365000000000000604482015290519081900360640190fd5b6000611b068460405160200180807f636f6e74726163742e6162690000000000000000000000000000000000000000815250600c018280519060200190808383602083106112005780518252601f1990920191602091820191016111e1565b90508051600014611b5e576040805162461bcd60e51b815260206004820152601a60248201527f414249206e616d6520697320616c726561647920696e20757365000000000000604482015290519081900360640190fd5b611bbb8460405160200180807f636f6e74726163742e6162690000000000000000000000000000000000000000815250600c01828051906020019080838360208310610e6d5780518252601f199092019160209182019101610e4e565b60408051428152905183917f510ef2addfa8f566ed5c59574c92bff780904590a5774924393111e842b9018e919081900360200190a250505050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ae1cfca836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156105d557600080fd5b60008054604080517fabfdcced000000000000000000000000000000000000000000000000000000008152600481018690528415156024820152905161010090920473ffffffffffffffffffffffffffffffffffffffff169263abfdcced9260448084019382900301818387803b158015611ce557600080fd5b505af1158015611cf9573d6000803e3d6000fd5b505050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e89955083836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d93578181015183820152602001611d7b565b50505050905090810190601f168015611dc05780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015611ce557600080fd5b60008054604080517fca446dd90000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff858116602483015291516101009093049091169263ca446dd99260448084019382900301818387803b158015611ce557600080fd5b60008054604080517ff6bb3cc400000000000000000000000000000000000000000000000000000000815260048101859052905161010090920473ffffffffffffffffffffffffffffffffffffffff169263f6bb3cc49260248084019382900301818387803b158015611ece57600080fd5b505af1158015611ee2573d6000803e3d6000fd5b5050505050565b60008054604080517f2c62ff2d00000000000000000000000000000000000000000000000000000000815260048101859052905161010090920473ffffffffffffffffffffffffffffffffffffffff1692632c62ff2d9260248084019382900301818387803b158015611ece57600080fd5b60008054604080517f986e791a00000000000000000000000000000000000000000000000000000000815260048101859052905160609361010090930473ffffffffffffffffffffffffffffffffffffffff169263986e791a9260248082019391829003018186803b158015611fd057600080fd5b505afa158015611fe4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561200d57600080fd5b810190808051604051939291908464010000000082111561202d57600080fd5b90830190602082018581111561204257600080fd5b825164010000000081118282018810171561205c57600080fd5b82525081516020918201929091019080838360005b83811015612089578181015183820152602001612071565b50505050905090810190601f1680156120b65780820380516001836020036101000a031916815260200191505b50604052505050905091905056fe43616e6e6f7420757067726164652074686520636173706572206465706f73697420636f6e747261637454686520636f6e747261637420616464726573732063616e6e6f742062652073657420746f206974732063757272656e74206164647265737343616e6e6f742075706772616465206d696e69706f6f6c2070656e616c747920636f6e7472616374436f6e7472616374206164647265737320697320616c726561647920696e20757365a2646970667358221220a24f8bcdaef029d082f15459835837cab767dacbd0257e5a64c323eeb7c7081864736f6c63430007060033
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.