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
Contract Name:
RocketClaimDAO
Compiler Version
v0.8.18+commit.87f61d96
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 * */ // SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.18; pragma abicoder v2; import "../RocketBase.sol"; import "../../interface/RocketVaultInterface.sol"; import "../../interface/rewards/RocketRewardsPoolInterface.sol"; import "../../interface/rewards/claims/RocketClaimDAOInterface.sol"; /// @notice Recipient of pDAO RPL from inflation. Performs treasury spends and handles recurring payments. contract RocketClaimDAO is RocketBase, RocketClaimDAOInterface { // Offsets into storage for contract details uint256 constant internal existsOffset = 0; uint256 constant internal recipientOffset = 1; uint256 constant internal amountOffset = 2; uint256 constant internal periodLengthOffset = 3; uint256 constant internal lastPaymentOffset = 4; uint256 constant internal numPeriodsOffset = 5; uint256 constant internal periodsPaidOffset = 6; // Events event RPLTokensSentByDAOProtocol(string indexed invoiceID, address indexed from, address indexed to, uint256 amount, uint256 time); event RPLTreasuryContractPayment(string indexed contractName, address indexed recipient, uint256 amount, uint256 time); event RPLTreasuryContractClaimed(address indexed recipient, uint256 amount, uint256 time); event RPLTreasuryContractCreated(string indexed contractName, address indexed recipient, uint256 amountPerPeriod, uint256 startTime, uint256 periodLength, uint256 numPeriods); event RPLTreasuryContractUpdated(string indexed contractName, address indexed recipient, uint256 amountPerPeriod, uint256 periodLength, uint256 numPeriods); constructor(RocketStorageInterface _rocketStorageAddress) RocketBase(_rocketStorageAddress) { version = 3; } /// @notice Returns whether a contract with the given name exists /// @param _contractName Name of the contract to check existence of function getContractExists(string calldata _contractName) external view returns (bool) { uint256 contractKey = uint256(keccak256(abi.encodePacked("dao.protocol.treasury.contract", _contractName))); return getBool(bytes32(contractKey + existsOffset)); } /// @notice Gets details about a given payment contract /// @param _contractName Name of the contract to retrieve details for function getContract(string calldata _contractName) override external view returns (PaymentContract memory) { // Compute key uint256 contractKey = uint256(keccak256(abi.encodePacked("dao.protocol.treasury.contract", _contractName))); // Retrieve details PaymentContract memory paymentContract; paymentContract.recipient = getAddress(bytes32(contractKey + recipientOffset)); paymentContract.amountPerPeriod = getUint(bytes32(contractKey + amountOffset)); paymentContract.periodLength = getUint(bytes32(contractKey + periodLengthOffset)); paymentContract.lastPaymentTime = getUint(bytes32(contractKey + lastPaymentOffset)); paymentContract.numPeriods = getUint(bytes32(contractKey + numPeriodsOffset)); paymentContract.periodsPaid = getUint(bytes32(contractKey + periodsPaidOffset)); return paymentContract; } /// @notice Gets the outstanding balance owed to a given recipient /// @param _recipientAddress The address of the recipient to return the balance of function getBalance(address _recipientAddress) override external view returns (uint256) { return getUint(keccak256(abi.encodePacked("dao.protocol.treasury.balance", _recipientAddress))); } /// @notice Spend the network DAOs RPL rewards /// @param _invoiceID A string used to identify this payment (not used internally) /// @param _recipientAddress The address to send the RPL spend to /// @param _amount The amount of RPL to send function spend(string memory _invoiceID, address _recipientAddress, uint256 _amount) override external onlyLatestContract("rocketDAOProtocolProposals", msg.sender) onlyLatestContract("rocketClaimDAO", address(this)) { // Load contracts RocketVaultInterface rocketVault = RocketVaultInterface(getContractAddress("rocketVault")); // Addresses IERC20 rplToken = IERC20(getContractAddress("rocketTokenRPL")); // Some initial checks require(_amount > 0 && _amount <= rocketVault.balanceOfToken("rocketClaimDAO", rplToken), "You cannot send 0 RPL or more than the DAO has in its account"); // Send now rocketVault.withdrawToken(_recipientAddress, rplToken, _amount); // Log it emit RPLTokensSentByDAOProtocol(_invoiceID, address(this), _recipientAddress, _amount, block.timestamp); } /// @notice Creates a new recurring payment contract /// @param _contractName A string used to identify this payment /// @param _recipientAddress The address which can claim against this recurring payment /// @param _amountPerPeriod The amount of RPL that can be claimed each period /// @param _periodLength The length (in seconds) of periods of this contract /// @param _startTime A unix timestamp of when payments begin /// @param _numPeriods The number of periods this contract pays out for function newContract(string memory _contractName, address _recipientAddress, uint256 _amountPerPeriod, uint256 _periodLength, uint256 _startTime, uint256 _numPeriods) override external onlyLatestContract("rocketDAOProtocolProposals", msg.sender) onlyLatestContract("rocketClaimDAO", address(this)) { uint256 contractKey = uint256(keccak256(abi.encodePacked("dao.protocol.treasury.contract", _contractName))); // Ensure contract name uniqueness require(getBool(bytes32(contractKey + existsOffset)) == false, "Contract already exists"); // Write to storage setBool(bytes32(contractKey + existsOffset), true); setAddress(bytes32(contractKey + recipientOffset), _recipientAddress); setUint(bytes32(contractKey + amountOffset), _amountPerPeriod); setUint(bytes32(contractKey + periodLengthOffset), _periodLength); setUint(bytes32(contractKey + lastPaymentOffset), _startTime); setUint(bytes32(contractKey + numPeriodsOffset), _numPeriods); // setUint(bytes32(contractKey + periodsPaidOffset), 0); // Log it emit RPLTreasuryContractCreated(_contractName, _recipientAddress, _amountPerPeriod, _startTime, _periodLength, _numPeriods); } /// @notice Modifies an existing recurring payment contract /// @param _contractName The contract to modify /// @param _recipientAddress The address which can claim against this recurring payment /// @param _amountPerPeriod The amount of RPL that can be claimed each period /// @param _periodLength The length (in seconds) of periods of this contract /// @param _numPeriods The number of periods this contract pays out for function updateContract(string memory _contractName, address _recipientAddress, uint256 _amountPerPeriod, uint256 _periodLength, uint256 _numPeriods) override external onlyLatestContract("rocketDAOProtocolProposals", msg.sender) onlyLatestContract("rocketClaimDAO", address(this)) { uint256 contractKey = uint256(keccak256(abi.encodePacked("dao.protocol.treasury.contract", _contractName))); // Check it exists require(getBool(bytes32(contractKey + existsOffset)) == true, "Contract does not exist"); // Write to storage uint256 lastPaymentTime = getUint(bytes32(contractKey + lastPaymentOffset)); // Payout contract per existing parameters if contract has already started if (block.timestamp > lastPaymentTime) { payOutContract(_contractName); } // Update the contract setAddress(bytes32(contractKey + recipientOffset), _recipientAddress); setUint(bytes32(contractKey + amountOffset), _amountPerPeriod); setUint(bytes32(contractKey + periodLengthOffset), _periodLength); setUint(bytes32(contractKey + numPeriodsOffset), _numPeriods); // Log it emit RPLTreasuryContractUpdated(_contractName, _recipientAddress, _amountPerPeriod, _periodLength, _numPeriods); } /// @notice Can be called to withdraw any paid amounts of RPL to the supplied recipient /// @param _recipientAddress The recipient address to claim for function withdrawBalance(address _recipientAddress) override public onlyLatestContract("rocketClaimDAO", address(this)) { // Load contracts RocketVaultInterface rocketVault = RocketVaultInterface(getContractAddress("rocketVault")); // Addresses IERC20 rplToken = IERC20(getContractAddress("rocketTokenRPL")); // Get pending balance bytes32 balanceKey = keccak256(abi.encodePacked("dao.protocol.treasury.balance", _recipientAddress)); uint256 amount = getUint(balanceKey); // Zero out pending balance setUint(balanceKey, 0); // Some initial checks require(amount > 0, "No balance to withdraw"); require(amount <= rocketVault.balanceOfToken("rocketClaimDAO", rplToken), "Insufficient treasury balance for withdrawal"); // Send now rocketVault.withdrawToken(_recipientAddress, rplToken, amount); // Log it emit RPLTreasuryContractClaimed(_recipientAddress, amount, block.timestamp); } /// @notice Executes payout on the given contracts /// @param _contractNames An array of contract names to execute a payout on function payOutContracts(string[] calldata _contractNames) override external onlyLatestContract("rocketClaimDAO", address(this)) { uint256 contractNamesLength = _contractNames.length; for (uint256 i = 0; i < contractNamesLength; ++i) { payOutContract(_contractNames[i]); } } /// @notice Executes a payout on given contracts and withdraws the resulting balance to the recipient /// @param _contractNames An array of contract names to execute a payout and withdraw on function payOutContractsAndWithdraw(string[] calldata _contractNames) override external onlyLatestContract("rocketClaimDAO", address(this)) { uint256 contractNamesLength = _contractNames.length; for (uint256 i = 0; i < contractNamesLength; ++i) { // Payout contract payOutContract(_contractNames[i]); // Withdraw to contract recipient uint256 contractKey = uint256(keccak256(abi.encodePacked("dao.protocol.treasury.contract", _contractNames[i]))); address recipient = getAddress(bytes32(contractKey + recipientOffset)); withdrawBalance(recipient); } } /// @dev Pays out any outstanding amounts to the recipient of a contract function payOutContract(string memory _contractName) internal { uint256 contractKey = uint256(keccak256(abi.encodePacked("dao.protocol.treasury.contract", _contractName))); uint256 lastPaymentTime = getUint(bytes32(contractKey + lastPaymentOffset)); // Payments haven't started yet (nothing to do) if (block.timestamp < lastPaymentTime) { return; } uint256 periodLength = getUint(bytes32(contractKey + periodLengthOffset)); uint256 periodsToPay = (block.timestamp - lastPaymentTime) / periodLength; uint256 periodsPaid = getUint(bytes32(contractKey + periodsPaidOffset)); uint256 numPeriods = getUint(bytes32(contractKey + numPeriodsOffset)); // Calculate how many periods to pay if (periodsToPay + periodsPaid > numPeriods) { periodsToPay = numPeriods - periodsPaid; } // Already paid up to date if (periodsToPay == 0) { return; } address recipientAddress = getAddress(bytes32(contractKey + recipientOffset)); uint256 amountPerPeriod = getUint(bytes32(contractKey + amountOffset)); uint256 amountToPay = periodsToPay * amountPerPeriod; // Update last paid timestamp and periods paid setUint(bytes32(contractKey + lastPaymentOffset), lastPaymentTime + (periodsToPay * periodLength)); setUint(bytes32(contractKey + periodsPaidOffset), periodsPaid + periodsToPay); // Add to the recipient's balance addUint(keccak256(abi.encodePacked("dao.protocol.treasury.balance", recipientAddress)), amountToPay); // Emit event emit RPLTreasuryContractPayment(_contractName, recipientAddress, amountToPay, block.timestamp); } }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | 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.5.0 <0.9.0; // 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(address(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 * */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity >0.5.0 <0.9.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | 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 * */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) import "./IERC20.sol"; pragma solidity >0.5.0 <0.9.0; interface IERC20Burnable is IERC20 { function burn(uint256 amount) external; function burnFrom(address account, uint256 amount) 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.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only import "./util/IERC20Burnable.sol"; interface RocketVaultInterface { function balanceOf(string memory _networkContractName) external view returns (uint256); function depositEther() external payable; function withdrawEther(uint256 _amount) external; function depositToken(string memory _networkContractName, IERC20 _tokenAddress, uint256 _amount) external; function withdrawToken(address _withdrawalAddress, IERC20 _tokenAddress, uint256 _amount) external; function balanceOfToken(string memory _networkContractName, IERC20 _tokenAddress) external view returns (uint256); function transferToken(string memory _networkContractName, IERC20 _tokenAddress, uint256 _amount) external; function burnToken(IERC20Burnable _tokenAddress, uint256 _amount) 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.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only struct RewardSubmission { uint256 rewardIndex; uint256 executionBlock; uint256 consensusBlock; bytes32 merkleRoot; string merkleTreeCID; uint256 intervalsPassed; uint256 treasuryRPL; uint256[] trustedNodeRPL; uint256[] nodeRPL; uint256[] nodeETH; uint256 userETH; }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | 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; pragma abicoder v2; import "../../types/RewardSubmission.sol"; // SPDX-License-Identifier: GPL-3.0-only interface RocketRewardsPoolInterface { function getRewardIndex() external view returns(uint256); function getRPLBalance() external view returns(uint256); function getPendingRPLRewards() external view returns (uint256); function getPendingETHRewards() external view returns (uint256); function getClaimIntervalTimeStart() external view returns(uint256); function getClaimIntervalTime() external view returns(uint256); function getClaimIntervalsPassed() external view returns(uint256); function getClaimIntervalExecutionBlock(uint256 _interval) external view returns(uint256); function getClaimIntervalExecutionAddress(uint256 _interval) external view returns(address); function getClaimingContractPerc(string memory _claimingContract) external view returns(uint256); function getClaimingContractsPerc(string[] memory _claimingContracts) external view returns (uint256[] memory); function getTrustedNodeSubmitted(address _trustedNodeAddress, uint256 _rewardIndex) external view returns (bool); function getSubmissionFromNodeExists(address _trustedNodeAddress, RewardSubmission calldata _submission) external view returns (bool); function getSubmissionCount(RewardSubmission calldata _submission) external view returns (uint256); function submitRewardSnapshot(RewardSubmission calldata _submission) external; function executeRewardSnapshot(RewardSubmission calldata _submission) 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 * */ // SPDX-License-Identifier: GPL-3.0-only pragma solidity >0.5.0 <0.9.0; pragma abicoder v2; interface RocketClaimDAOInterface { // Struct for returning data about a payment contract struct PaymentContract { address recipient; uint256 amountPerPeriod; uint256 periodLength; uint256 lastPaymentTime; uint256 numPeriods; uint256 periodsPaid; } function getContractExists(string calldata _contractName) external view returns (bool); function getContract(string calldata _contractName) external view returns (PaymentContract memory); function getBalance(address _recipientAddress) external view returns (uint256); function spend(string memory _invoiceID, address _recipientAddress, uint256 _amount) external; function newContract(string memory _contractName, address _recipientAddress, uint256 _amountPerPeriod, uint256 _periodLength, uint256 _startTime, uint256 _numPeriods) external; function updateContract(string memory _contractName, address _recipientAddress, uint256 _amountPerPeriod, uint256 _periodLength, uint256 _numPeriods) external; function withdrawBalance(address _recipientAddress) external; function payOutContracts(string[] calldata _contractNames) external; function payOutContractsAndWithdraw(string[] calldata _contractNames) external; }
{ "optimizer": { "enabled": true, "runs": 15000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
[{"inputs":[{"internalType":"contract RocketStorageInterface","name":"_rocketStorageAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"invoiceID","type":"string"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RPLTokensSentByDAOProtocol","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RPLTreasuryContractClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPerPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"periodLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numPeriods","type":"uint256"}],"name":"RPLTreasuryContractCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RPLTreasuryContractPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPerPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"periodLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numPeriods","type":"uint256"}],"name":"RPLTreasuryContractUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_recipientAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_contractName","type":"string"}],"name":"getContract","outputs":[{"components":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountPerPeriod","type":"uint256"},{"internalType":"uint256","name":"periodLength","type":"uint256"},{"internalType":"uint256","name":"lastPaymentTime","type":"uint256"},{"internalType":"uint256","name":"numPeriods","type":"uint256"},{"internalType":"uint256","name":"periodsPaid","type":"uint256"}],"internalType":"struct RocketClaimDAOInterface.PaymentContract","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_contractName","type":"string"}],"name":"getContractExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_contractName","type":"string"},{"internalType":"address","name":"_recipientAddress","type":"address"},{"internalType":"uint256","name":"_amountPerPeriod","type":"uint256"},{"internalType":"uint256","name":"_periodLength","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_numPeriods","type":"uint256"}],"name":"newContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_contractNames","type":"string[]"}],"name":"payOutContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_contractNames","type":"string[]"}],"name":"payOutContractsAndWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_invoiceID","type":"string"},{"internalType":"address","name":"_recipientAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"spend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractName","type":"string"},{"internalType":"address","name":"_recipientAddress","type":"address"},{"internalType":"uint256","name":"_amountPerPeriod","type":"uint256"},{"internalType":"uint256","name":"_periodLength","type":"uint256"},{"internalType":"uint256","name":"_numPeriods","type":"uint256"}],"name":"updateContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipientAddress","type":"address"}],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260008054610100600160a81b031916905534801561002157600080fd5b50604051620024a1380380620024a183398101604081905261004291610076565b6000805460ff196001600160a01b0390931661010002929092166001600160a81b03199092169190911760031790556100a6565b60006020828403121561008857600080fd5b81516001600160a01b038116811461009f57600080fd5b9392505050565b6123eb80620000b66000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806354fd4d501161007657806379bfbbab1161005b57806379bfbbab146101cd578063b110221f146101e0578063f8b2cb4f146101f357600080fd5b806354fd4d501461019b578063756af45f146101ba57600080fd5b806322b5b367116100a757806322b5b367146100eb578063283dee8114610113578063358177731461012657600080fd5b8063082ef32b146100c35780631fe9dbc8146100d8575b600080fd5b6100d66100d1366004611edb565b610214565b005b6100d66100e6366004611f35565b6106ed565b6100fe6100f9366004611faa565b610851565b60405190151581526020015b60405180910390f35b6100d661012136600461200a565b6108bc565b610139610134366004611faa565b610c31565b60405161010a9190600060c08201905073ffffffffffffffffffffffffffffffffffffffff83511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b6000546101a89060ff1681565b60405160ff909116815260200161010a565b6100d66101c8366004612074565b610d89565b6100d66101db366004611f35565b611220565b6100d66101ee366004612098565b6113bd565b610206610201366004612074565b61170d565b60405190815260200161010a565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c730000000000008152503361027a8260405160200161025f919061213a565b60405160208183030381529060405280519060200120611787565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e74726163740000000060448201526064015b60405180910390fd5b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f0000000000000000000000000000000000008152503061035e8260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b60006104326040518060400160405280600b81526020017f726f636b65745661756c7400000000000000000000000000000000000000000081525061181f565b905060006104746040518060400160405280600e81526020017f726f636b6574546f6b656e52504c00000000000000000000000000000000000081525061181f565b905060008711801561054b5750604080517feccefff60000000000000000000000000000000000000000000000000000000081526004810191909152600e60448201527f726f636b6574436c61696d44414f000000000000000000000000000000000000606482015273ffffffffffffffffffffffffffffffffffffffff828116602483015283169063eccefff690608401602060405180830381865afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610547919061216c565b8711155b6105d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f596f752063616e6e6f742073656e6420302052504c206f72206d6f726520746860448201527f616e207468652044414f2068617320696e20697473206163636f756e74000000606482015260840161030a565b6040517f01e3366700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528281166024830152604482018990528316906301e3366790606401600060405180830381600087803b15801561064f57600080fd5b505af1158015610663573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff168a6040516106a39190612185565b604080519182900382208b8352426020840152917f67bc1df65bfeb7ba2e83fb564e265ea67b0dbe2adc511918505cd75fef5d3dd9910160405180910390a4505050505050505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306107388260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b8260005b81811015610849576108398686838181106107ed576107ed612191565b90506020028101906107ff91906121c0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118b592505050565b6108428161225b565b90506107d0565b505050505050565b6000808383604051602001610867929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506108b26108ad6000836122cc565b611af6565b9150505b92915050565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c73000000000000815250336109078260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306109e68260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b600089604051602001610a8d91906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050610ad36108ad6000836122cc565b1515600114610b3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436f6e747261637420646f6573206e6f74206578697374000000000000000000604482015260640161030a565b6000610b53610b4e6004846122cc565b611b8e565b905080421115610b6657610b668b6118b5565b610b7a610b746001846122cc565b8b611c26565b610b8e610b886002846122cc565b8a611cb5565b610ba2610b9c6003846122cc565b89611cb5565b610bb6610bb06005846122cc565b88611cb5565b8973ffffffffffffffffffffffffffffffffffffffff168b604051610bdb9190612185565b604080519182900382208c8352602083018c90529082018a9052907ffa56d0791aff69b5708fda8c9063ef271b9d86a8edf1a71d09dd957626873e08906060015b60405180910390a35050505050505050505050565b610c806040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008383604051602001610c95929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060c0840183526000808552918401829052918301819052606083018190526080830181905260a08301529150610d0a610d056001846122cc565b611787565b73ffffffffffffffffffffffffffffffffffffffff168152610d30610b4e6002846122cc565b6020820152610d43610b4e6003846122cc565b6040820152610d56610b4e6004846122cc565b6060820152610d69610b4e6005846122cc565b6080820152610d7c610b4e6006846122cc565b60a0820152949350505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f00000000000000000000000000000000000081525030610dd48260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6000610ea86040518060400160405280600b81526020017f726f636b65745661756c7400000000000000000000000000000000000000000081525061181f565b90506000610eea6040518060400160405280600e81526020017f726f636b6574546f6b656e52504c00000000000000000000000000000000000081525061181f565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b16603d8201529091506000906051016040516020818303038152906040528051906020012090506000610f6b82611b8e565b9050610f78826000611cb5565b60008111610fe2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f2062616c616e636520746f20776974686472617700000000000000000000604482015260640161030a565b604080517feccefff60000000000000000000000000000000000000000000000000000000081526004810191909152600e60448201527f726f636b6574436c61696d44414f000000000000000000000000000000000000606482015273ffffffffffffffffffffffffffffffffffffffff848116602483015285169063eccefff690608401602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a8919061216c565b811115611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f496e73756666696369656e742074726561737572792062616c616e636520666f60448201527f72207769746864726177616c0000000000000000000000000000000000000000606482015260840161030a565b6040517f01e3366700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528481166024830152604482018390528516906301e3366790606401600060405180830381600087803b1580156111af57600080fd5b505af11580156111c3573d6000803e3d6000fd5b50506040805184815242602082015273ffffffffffffffffffffffffffffffffffffffff8b1693507f631de3344f76ff7d4da6e58dcb5b4442ef60511d6f6cd53c13d32cb2bdf5105d92500160405180910390a250505050505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f0000000000000000000000000000000000008152503061126b8260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b8260005b81811015610849576113208686838181106107ed576107ed612191565b600086868381811061133457611334612191565b905060200281019061134691906121c0565b604051602001611357929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050600061139f610d056001846122cc565b90506113aa81610d89565b5050806113b69061225b565b9050611303565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c73000000000000815250336114088260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306114e78260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b60008a60405160200161158e91906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506115d46108ad6000836122cc565b1561163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436f6e747261637420616c726561647920657869737473000000000000000000604482015260640161030a565b6116506116496000836122cc565b6001611d17565b61165e610b746001836122cc565b61166c610b886002836122cc565b61167a610b9c6003836122cc565b611688610bb06004836122cc565b61169c6116966005836122cc565b87611cb5565b8973ffffffffffffffffffffffffffffffffffffffff168b6040516116c19190612185565b604080519182900382208c8352602083018b90529082018b905260608201899052907ff88d6c208815ad2a911935f9b27c477f802d162e3abf33cc676411ba70b2f4bd90608001610c1c565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b16603d8201526000906108b69060510160405160208183030381529060405280519060200120611b8e565b600080546040517f21f8a7210000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff16906321f8a72190602401602060405180830381865afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190612311565b6000806118368360405160200161025f919061213a565b905073ffffffffffffffffffffffffffffffffffffffff81166108b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e7472616374206e6f7420666f756e640000000000000000000000000000604482015260640161030a565b6000816040516020016118c891906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506000611910610b4e6004846122cc565b90508042101561191f57505050565b600061192f610b4e6003856122cc565b905060008161193e844261232e565b6119489190612341565b9050600061195a610b4e6006876122cc565b9050600061196c610b4e6005886122cc565b90508061197983856122cc565b111561198c57611989828261232e565b92505b8260000361199d5750505050505050565b60006119ad610d056001896122cc565b905060006119bf610b4e60028a6122cc565b905060006119cd828761237c565b90506119f66119dd60048b6122cc565b6119e7898961237c565b6119f1908b6122cc565b611cb5565b611a0e611a0460068b6122cc565b6119f188886122cc565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16603d820152611a86906051016040516020818303038152906040528051906020012082611d7a565b8273ffffffffffffffffffffffffffffffffffffffff168a604051611aab9190612185565b60408051918290038220848352426020840152917f207b08b29cb6f7384a852c47050c9d8d0604b62bbbf71316b6108c92b1fd9e18910160405180910390a350505050505050505050565b600080546040517f7ae1cfca0000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff1690637ae1cfca90602401602060405180830381865afa158015611b6a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190612393565b600080546040517fbd02d0f50000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff169063bd02d0f590602401602060405180830381865afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b6919061216c565b6000546040517fca446dd90000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83811660248301526101009092049091169063ca446dd9906044015b600060405180830381600087803b158015611ca157600080fd5b505af1158015610849573d6000803e3d6000fd5b6000546040517fe2a4853a000000000000000000000000000000000000000000000000000000008152600481018490526024810183905261010090910473ffffffffffffffffffffffffffffffffffffffff169063e2a4853a90604401611c87565b6000546040517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101849052821515602482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063abfdcced90604401611c87565b6000546040517fadb353dc000000000000000000000000000000000000000000000000000000008152600481018490526024810183905261010090910473ffffffffffffffffffffffffffffffffffffffff169063adb353dc90604401611c87565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611e1c57600080fd5b813567ffffffffffffffff80821115611e3757611e37611ddc565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611e7d57611e7d611ddc565b81604052838152866020858801011115611e9657600080fd5b836020870160208301376000602085830101528094505050505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114611ed857600080fd5b50565b600080600060608486031215611ef057600080fd5b833567ffffffffffffffff811115611f0757600080fd5b611f1386828701611e0b565b9350506020840135611f2481611eb6565b929592945050506040919091013590565b60008060208385031215611f4857600080fd5b823567ffffffffffffffff80821115611f6057600080fd5b818501915085601f830112611f7457600080fd5b813581811115611f8357600080fd5b8660208260051b8501011115611f9857600080fd5b60209290920196919550909350505050565b60008060208385031215611fbd57600080fd5b823567ffffffffffffffff80821115611fd557600080fd5b818501915085601f830112611fe957600080fd5b813581811115611ff857600080fd5b866020828501011115611f9857600080fd5b600080600080600060a0868803121561202257600080fd5b853567ffffffffffffffff81111561203957600080fd5b61204588828901611e0b565b955050602086013561205681611eb6565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561208657600080fd5b813561209181611eb6565b9392505050565b60008060008060008060c087890312156120b157600080fd5b863567ffffffffffffffff8111156120c857600080fd5b6120d489828a01611e0b565b96505060208701356120e581611eb6565b95989597505050506040840135936060810135936080820135935060a0909101359150565b6000815160005b8181101561212b5760208185018101518683015201612111565b50600093019283525090919050565b7f636f6e74726163742e616464726573730000000000000000000000000000000081526000612091601083018461210a565b60006020828403121561217e57600080fd5b5051919050565b6000612091828461210a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126121f557600080fd5b83018035915067ffffffffffffffff82111561221057600080fd5b60200191503681900382131561222557600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361228c5761228c61222c565b5060010190565b7f64616f2e70726f746f636f6c2e74726561737572792e636f6e7472616374000081528183601e83013760009101601e01908152919050565b808201808211156108b6576108b661222c565b7f64616f2e70726f746f636f6c2e74726561737572792e636f6e7472616374000081526000612091601e83018461210a565b60006020828403121561232357600080fd5b815161209181611eb6565b818103818111156108b6576108b661222c565b600082612377577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176108b6576108b661222c565b6000602082840312156123a557600080fd5b8151801515811461209157600080fdfea26469706673582212208f71e7ae63712de755b0e79d1c43ab4aaf8b7655039f3387f58865b7ebdfa37164736f6c63430008120033000000000000000000000000f04de123993761bb9f08c9c39112b0e0b0ecce50
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100be5760003560e01c806354fd4d501161007657806379bfbbab1161005b57806379bfbbab146101cd578063b110221f146101e0578063f8b2cb4f146101f357600080fd5b806354fd4d501461019b578063756af45f146101ba57600080fd5b806322b5b367116100a757806322b5b367146100eb578063283dee8114610113578063358177731461012657600080fd5b8063082ef32b146100c35780631fe9dbc8146100d8575b600080fd5b6100d66100d1366004611edb565b610214565b005b6100d66100e6366004611f35565b6106ed565b6100fe6100f9366004611faa565b610851565b60405190151581526020015b60405180910390f35b6100d661012136600461200a565b6108bc565b610139610134366004611faa565b610c31565b60405161010a9190600060c08201905073ffffffffffffffffffffffffffffffffffffffff83511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b6000546101a89060ff1681565b60405160ff909116815260200161010a565b6100d66101c8366004612074565b610d89565b6100d66101db366004611f35565b611220565b6100d66101ee366004612098565b6113bd565b610206610201366004612074565b61170d565b60405190815260200161010a565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c730000000000008152503361027a8260405160200161025f919061213a565b60405160208183030381529060405280519060200120611787565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e74726163740000000060448201526064015b60405180910390fd5b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f0000000000000000000000000000000000008152503061035e8260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b60006104326040518060400160405280600b81526020017f726f636b65745661756c7400000000000000000000000000000000000000000081525061181f565b905060006104746040518060400160405280600e81526020017f726f636b6574546f6b656e52504c00000000000000000000000000000000000081525061181f565b905060008711801561054b5750604080517feccefff60000000000000000000000000000000000000000000000000000000081526004810191909152600e60448201527f726f636b6574436c61696d44414f000000000000000000000000000000000000606482015273ffffffffffffffffffffffffffffffffffffffff828116602483015283169063eccefff690608401602060405180830381865afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610547919061216c565b8711155b6105d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f596f752063616e6e6f742073656e6420302052504c206f72206d6f726520746860448201527f616e207468652044414f2068617320696e20697473206163636f756e74000000606482015260840161030a565b6040517f01e3366700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528281166024830152604482018990528316906301e3366790606401600060405180830381600087803b15801561064f57600080fd5b505af1158015610663573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff168a6040516106a39190612185565b604080519182900382208b8352426020840152917f67bc1df65bfeb7ba2e83fb564e265ea67b0dbe2adc511918505cd75fef5d3dd9910160405180910390a4505050505050505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306107388260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b8260005b81811015610849576108398686838181106107ed576107ed612191565b90506020028101906107ff91906121c0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118b592505050565b6108428161225b565b90506107d0565b505050505050565b6000808383604051602001610867929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506108b26108ad6000836122cc565b611af6565b9150505b92915050565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c73000000000000815250336109078260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306109e68260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b600089604051602001610a8d91906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050610ad36108ad6000836122cc565b1515600114610b3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436f6e747261637420646f6573206e6f74206578697374000000000000000000604482015260640161030a565b6000610b53610b4e6004846122cc565b611b8e565b905080421115610b6657610b668b6118b5565b610b7a610b746001846122cc565b8b611c26565b610b8e610b886002846122cc565b8a611cb5565b610ba2610b9c6003846122cc565b89611cb5565b610bb6610bb06005846122cc565b88611cb5565b8973ffffffffffffffffffffffffffffffffffffffff168b604051610bdb9190612185565b604080519182900382208c8352602083018c90529082018a9052907ffa56d0791aff69b5708fda8c9063ef271b9d86a8edf1a71d09dd957626873e08906060015b60405180910390a35050505050505050505050565b610c806040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008383604051602001610c95929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060c0840183526000808552918401829052918301819052606083018190526080830181905260a08301529150610d0a610d056001846122cc565b611787565b73ffffffffffffffffffffffffffffffffffffffff168152610d30610b4e6002846122cc565b6020820152610d43610b4e6003846122cc565b6040820152610d56610b4e6004846122cc565b6060820152610d69610b4e6005846122cc565b6080820152610d7c610b4e6006846122cc565b60a0820152949350505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f00000000000000000000000000000000000081525030610dd48260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6000610ea86040518060400160405280600b81526020017f726f636b65745661756c7400000000000000000000000000000000000000000081525061181f565b90506000610eea6040518060400160405280600e81526020017f726f636b6574546f6b656e52504c00000000000000000000000000000000000081525061181f565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b16603d8201529091506000906051016040516020818303038152906040528051906020012090506000610f6b82611b8e565b9050610f78826000611cb5565b60008111610fe2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f2062616c616e636520746f20776974686472617700000000000000000000604482015260640161030a565b604080517feccefff60000000000000000000000000000000000000000000000000000000081526004810191909152600e60448201527f726f636b6574436c61696d44414f000000000000000000000000000000000000606482015273ffffffffffffffffffffffffffffffffffffffff848116602483015285169063eccefff690608401602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a8919061216c565b811115611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f496e73756666696369656e742074726561737572792062616c616e636520666f60448201527f72207769746864726177616c0000000000000000000000000000000000000000606482015260840161030a565b6040517f01e3366700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528481166024830152604482018390528516906301e3366790606401600060405180830381600087803b1580156111af57600080fd5b505af11580156111c3573d6000803e3d6000fd5b50506040805184815242602082015273ffffffffffffffffffffffffffffffffffffffff8b1693507f631de3344f76ff7d4da6e58dcb5b4442ef60511d6f6cd53c13d32cb2bdf5105d92500160405180910390a250505050505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f0000000000000000000000000000000000008152503061126b8260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b8260005b81811015610849576113208686838181106107ed576107ed612191565b600086868381811061133457611334612191565b905060200281019061134691906121c0565b604051602001611357929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050600061139f610d056001846122cc565b90506113aa81610d89565b5050806113b69061225b565b9050611303565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c73000000000000815250336114088260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306114e78260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b60008a60405160200161158e91906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506115d46108ad6000836122cc565b1561163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436f6e747261637420616c726561647920657869737473000000000000000000604482015260640161030a565b6116506116496000836122cc565b6001611d17565b61165e610b746001836122cc565b61166c610b886002836122cc565b61167a610b9c6003836122cc565b611688610bb06004836122cc565b61169c6116966005836122cc565b87611cb5565b8973ffffffffffffffffffffffffffffffffffffffff168b6040516116c19190612185565b604080519182900382208c8352602083018b90529082018b905260608201899052907ff88d6c208815ad2a911935f9b27c477f802d162e3abf33cc676411ba70b2f4bd90608001610c1c565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b16603d8201526000906108b69060510160405160208183030381529060405280519060200120611b8e565b600080546040517f21f8a7210000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff16906321f8a72190602401602060405180830381865afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190612311565b6000806118368360405160200161025f919061213a565b905073ffffffffffffffffffffffffffffffffffffffff81166108b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e7472616374206e6f7420666f756e640000000000000000000000000000604482015260640161030a565b6000816040516020016118c891906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506000611910610b4e6004846122cc565b90508042101561191f57505050565b600061192f610b4e6003856122cc565b905060008161193e844261232e565b6119489190612341565b9050600061195a610b4e6006876122cc565b9050600061196c610b4e6005886122cc565b90508061197983856122cc565b111561198c57611989828261232e565b92505b8260000361199d5750505050505050565b60006119ad610d056001896122cc565b905060006119bf610b4e60028a6122cc565b905060006119cd828761237c565b90506119f66119dd60048b6122cc565b6119e7898961237c565b6119f1908b6122cc565b611cb5565b611a0e611a0460068b6122cc565b6119f188886122cc565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16603d820152611a86906051016040516020818303038152906040528051906020012082611d7a565b8273ffffffffffffffffffffffffffffffffffffffff168a604051611aab9190612185565b60408051918290038220848352426020840152917f207b08b29cb6f7384a852c47050c9d8d0604b62bbbf71316b6108c92b1fd9e18910160405180910390a350505050505050505050565b600080546040517f7ae1cfca0000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff1690637ae1cfca90602401602060405180830381865afa158015611b6a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190612393565b600080546040517fbd02d0f50000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff169063bd02d0f590602401602060405180830381865afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b6919061216c565b6000546040517fca446dd90000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83811660248301526101009092049091169063ca446dd9906044015b600060405180830381600087803b158015611ca157600080fd5b505af1158015610849573d6000803e3d6000fd5b6000546040517fe2a4853a000000000000000000000000000000000000000000000000000000008152600481018490526024810183905261010090910473ffffffffffffffffffffffffffffffffffffffff169063e2a4853a90604401611c87565b6000546040517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101849052821515602482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063abfdcced90604401611c87565b6000546040517fadb353dc000000000000000000000000000000000000000000000000000000008152600481018490526024810183905261010090910473ffffffffffffffffffffffffffffffffffffffff169063adb353dc90604401611c87565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611e1c57600080fd5b813567ffffffffffffffff80821115611e3757611e37611ddc565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611e7d57611e7d611ddc565b81604052838152866020858801011115611e9657600080fd5b836020870160208301376000602085830101528094505050505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114611ed857600080fd5b50565b600080600060608486031215611ef057600080fd5b833567ffffffffffffffff811115611f0757600080fd5b611f1386828701611e0b565b9350506020840135611f2481611eb6565b929592945050506040919091013590565b60008060208385031215611f4857600080fd5b823567ffffffffffffffff80821115611f6057600080fd5b818501915085601f830112611f7457600080fd5b813581811115611f8357600080fd5b8660208260051b8501011115611f9857600080fd5b60209290920196919550909350505050565b60008060208385031215611fbd57600080fd5b823567ffffffffffffffff80821115611fd557600080fd5b818501915085601f830112611fe957600080fd5b813581811115611ff857600080fd5b866020828501011115611f9857600080fd5b600080600080600060a0868803121561202257600080fd5b853567ffffffffffffffff81111561203957600080fd5b61204588828901611e0b565b955050602086013561205681611eb6565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561208657600080fd5b813561209181611eb6565b9392505050565b60008060008060008060c087890312156120b157600080fd5b863567ffffffffffffffff8111156120c857600080fd5b6120d489828a01611e0b565b96505060208701356120e581611eb6565b95989597505050506040840135936060810135936080820135935060a0909101359150565b6000815160005b8181101561212b5760208185018101518683015201612111565b50600093019283525090919050565b7f636f6e74726163742e616464726573730000000000000000000000000000000081526000612091601083018461210a565b60006020828403121561217e57600080fd5b5051919050565b6000612091828461210a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126121f557600080fd5b83018035915067ffffffffffffffff82111561221057600080fd5b60200191503681900382131561222557600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361228c5761228c61222c565b5060010190565b7f64616f2e70726f746f636f6c2e74726561737572792e636f6e7472616374000081528183601e83013760009101601e01908152919050565b808201808211156108b6576108b661222c565b7f64616f2e70726f746f636f6c2e74726561737572792e636f6e7472616374000081526000612091601e83018461210a565b60006020828403121561232357600080fd5b815161209181611eb6565b818103818111156108b6576108b661222c565b600082612377577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176108b6576108b661222c565b6000602082840312156123a557600080fd5b8151801515811461209157600080fdfea26469706673582212208f71e7ae63712de755b0e79d1c43ab4aaf8b7655039f3387f58865b7ebdfa37164736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f04de123993761Bb9F08c9C39112b0E0b0eccE50
-----Decoded View---------------
Arg [0] : _rocketStorageAddress (address): 0xf04de123993761Bb9F08c9C39112b0E0b0eccE50
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f04de123993761Bb9F08c9C39112b0E0b0eccE50
Loading...
Loading
[ 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.