Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Pay Out Contract... | 1516545 | 252 days ago | IN | 0 ETH | 0.00490433 |
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 0x0B5Bf362...4120Cb5B3 The constructor portion of the code might be different and could alter the actual behaviour of the contract
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"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100be5760003560e01c806354fd4d501161007657806379bfbbab1161005b57806379bfbbab146101cd578063b110221f146101e0578063f8b2cb4f146101f357600080fd5b806354fd4d501461019b578063756af45f146101ba57600080fd5b806322b5b367116100a757806322b5b367146100eb578063283dee8114610113578063358177731461012657600080fd5b8063082ef32b146100c35780631fe9dbc8146100d8575b600080fd5b6100d66100d1366004611edb565b610214565b005b6100d66100e6366004611f35565b6106ed565b6100fe6100f9366004611faa565b610851565b60405190151581526020015b60405180910390f35b6100d661012136600461200a565b6108bc565b610139610134366004611faa565b610c31565b60405161010a9190600060c08201905073ffffffffffffffffffffffffffffffffffffffff83511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b6000546101a89060ff1681565b60405160ff909116815260200161010a565b6100d66101c8366004612074565b610d89565b6100d66101db366004611f35565b611220565b6100d66101ee366004612098565b6113bd565b610206610201366004612074565b61170d565b60405190815260200161010a565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c730000000000008152503361027a8260405160200161025f919061213a565b60405160208183030381529060405280519060200120611787565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e74726163740000000060448201526064015b60405180910390fd5b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f0000000000000000000000000000000000008152503061035e8260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b60006104326040518060400160405280600b81526020017f726f636b65745661756c7400000000000000000000000000000000000000000081525061181f565b905060006104746040518060400160405280600e81526020017f726f636b6574546f6b656e52504c00000000000000000000000000000000000081525061181f565b905060008711801561054b5750604080517feccefff60000000000000000000000000000000000000000000000000000000081526004810191909152600e60448201527f726f636b6574436c61696d44414f000000000000000000000000000000000000606482015273ffffffffffffffffffffffffffffffffffffffff828116602483015283169063eccefff690608401602060405180830381865afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610547919061216c565b8711155b6105d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f596f752063616e6e6f742073656e6420302052504c206f72206d6f726520746860448201527f616e207468652044414f2068617320696e20697473206163636f756e74000000606482015260840161030a565b6040517f01e3366700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528281166024830152604482018990528316906301e3366790606401600060405180830381600087803b15801561064f57600080fd5b505af1158015610663573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff168a6040516106a39190612185565b604080519182900382208b8352426020840152917f67bc1df65bfeb7ba2e83fb564e265ea67b0dbe2adc511918505cd75fef5d3dd9910160405180910390a4505050505050505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306107388260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b8260005b81811015610849576108398686838181106107ed576107ed612191565b90506020028101906107ff91906121c0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118b592505050565b6108428161225b565b90506107d0565b505050505050565b6000808383604051602001610867929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506108b26108ad6000836122cc565b611af6565b9150505b92915050565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c73000000000000815250336109078260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306109e68260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b600089604051602001610a8d91906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050610ad36108ad6000836122cc565b1515600114610b3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436f6e747261637420646f6573206e6f74206578697374000000000000000000604482015260640161030a565b6000610b53610b4e6004846122cc565b611b8e565b905080421115610b6657610b668b6118b5565b610b7a610b746001846122cc565b8b611c26565b610b8e610b886002846122cc565b8a611cb5565b610ba2610b9c6003846122cc565b89611cb5565b610bb6610bb06005846122cc565b88611cb5565b8973ffffffffffffffffffffffffffffffffffffffff168b604051610bdb9190612185565b604080519182900382208c8352602083018c90529082018a9052907ffa56d0791aff69b5708fda8c9063ef271b9d86a8edf1a71d09dd957626873e08906060015b60405180910390a35050505050505050505050565b610c806040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008383604051602001610c95929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060c0840183526000808552918401829052918301819052606083018190526080830181905260a08301529150610d0a610d056001846122cc565b611787565b73ffffffffffffffffffffffffffffffffffffffff168152610d30610b4e6002846122cc565b6020820152610d43610b4e6003846122cc565b6040820152610d56610b4e6004846122cc565b6060820152610d69610b4e6005846122cc565b6080820152610d7c610b4e6006846122cc565b60a0820152949350505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f00000000000000000000000000000000000081525030610dd48260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6000610ea86040518060400160405280600b81526020017f726f636b65745661756c7400000000000000000000000000000000000000000081525061181f565b90506000610eea6040518060400160405280600e81526020017f726f636b6574546f6b656e52504c00000000000000000000000000000000000081525061181f565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b16603d8201529091506000906051016040516020818303038152906040528051906020012090506000610f6b82611b8e565b9050610f78826000611cb5565b60008111610fe2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f2062616c616e636520746f20776974686472617700000000000000000000604482015260640161030a565b604080517feccefff60000000000000000000000000000000000000000000000000000000081526004810191909152600e60448201527f726f636b6574436c61696d44414f000000000000000000000000000000000000606482015273ffffffffffffffffffffffffffffffffffffffff848116602483015285169063eccefff690608401602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a8919061216c565b811115611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f496e73756666696369656e742074726561737572792062616c616e636520666f60448201527f72207769746864726177616c0000000000000000000000000000000000000000606482015260840161030a565b6040517f01e3366700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528481166024830152604482018390528516906301e3366790606401600060405180830381600087803b1580156111af57600080fd5b505af11580156111c3573d6000803e3d6000fd5b50506040805184815242602082015273ffffffffffffffffffffffffffffffffffffffff8b1693507f631de3344f76ff7d4da6e58dcb5b4442ef60511d6f6cd53c13d32cb2bdf5105d92500160405180910390a250505050505050565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f0000000000000000000000000000000000008152503061126b8260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b8260005b81811015610849576113208686838181106107ed576107ed612191565b600086868381811061133457611334612191565b905060200281019061134691906121c0565b604051602001611357929190612293565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050600061139f610d056001846122cc565b90506113aa81610d89565b5050806113b69061225b565b9050611303565b6040518060400160405280601a81526020017f726f636b657444414f50726f746f636f6c50726f706f73616c73000000000000815250336114088260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b6040518060400160405280600e81526020017f726f636b6574436c61696d44414f000000000000000000000000000000000000815250306114e78260405160200161025f919061213a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015260640161030a565b60008a60405160200161158e91906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506115d46108ad6000836122cc565b1561163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436f6e747261637420616c726561647920657869737473000000000000000000604482015260640161030a565b6116506116496000836122cc565b6001611d17565b61165e610b746001836122cc565b61166c610b886002836122cc565b61167a610b9c6003836122cc565b611688610bb06004836122cc565b61169c6116966005836122cc565b87611cb5565b8973ffffffffffffffffffffffffffffffffffffffff168b6040516116c19190612185565b604080519182900382208c8352602083018b90529082018b905260608201899052907ff88d6c208815ad2a911935f9b27c477f802d162e3abf33cc676411ba70b2f4bd90608001610c1c565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b16603d8201526000906108b69060510160405160208183030381529060405280519060200120611b8e565b600080546040517f21f8a7210000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff16906321f8a72190602401602060405180830381865afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190612311565b6000806118368360405160200161025f919061213a565b905073ffffffffffffffffffffffffffffffffffffffff81166108b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e7472616374206e6f7420666f756e640000000000000000000000000000604482015260640161030a565b6000816040516020016118c891906122df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506000611910610b4e6004846122cc565b90508042101561191f57505050565b600061192f610b4e6003856122cc565b905060008161193e844261232e565b6119489190612341565b9050600061195a610b4e6006876122cc565b9050600061196c610b4e6005886122cc565b90508061197983856122cc565b111561198c57611989828261232e565b92505b8260000361199d5750505050505050565b60006119ad610d056001896122cc565b905060006119bf610b4e60028a6122cc565b905060006119cd828761237c565b90506119f66119dd60048b6122cc565b6119e7898961237c565b6119f1908b6122cc565b611cb5565b611a0e611a0460068b6122cc565b6119f188886122cc565b6040517f64616f2e70726f746f636f6c2e74726561737572792e62616c616e636500000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16603d820152611a86906051016040516020818303038152906040528051906020012082611d7a565b8273ffffffffffffffffffffffffffffffffffffffff168a604051611aab9190612185565b60408051918290038220848352426020840152917f207b08b29cb6f7384a852c47050c9d8d0604b62bbbf71316b6108c92b1fd9e18910160405180910390a350505050505050505050565b600080546040517f7ae1cfca0000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff1690637ae1cfca90602401602060405180830381865afa158015611b6a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190612393565b600080546040517fbd02d0f50000000000000000000000000000000000000000000000000000000081526004810184905261010090910473ffffffffffffffffffffffffffffffffffffffff169063bd02d0f590602401602060405180830381865afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b6919061216c565b6000546040517fca446dd90000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83811660248301526101009092049091169063ca446dd9906044015b600060405180830381600087803b158015611ca157600080fd5b505af1158015610849573d6000803e3d6000fd5b6000546040517fe2a4853a000000000000000000000000000000000000000000000000000000008152600481018490526024810183905261010090910473ffffffffffffffffffffffffffffffffffffffff169063e2a4853a90604401611c87565b6000546040517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101849052821515602482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063abfdcced90604401611c87565b6000546040517fadb353dc000000000000000000000000000000000000000000000000000000008152600481018490526024810183905261010090910473ffffffffffffffffffffffffffffffffffffffff169063adb353dc90604401611c87565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611e1c57600080fd5b813567ffffffffffffffff80821115611e3757611e37611ddc565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611e7d57611e7d611ddc565b81604052838152866020858801011115611e9657600080fd5b836020870160208301376000602085830101528094505050505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114611ed857600080fd5b50565b600080600060608486031215611ef057600080fd5b833567ffffffffffffffff811115611f0757600080fd5b611f1386828701611e0b565b9350506020840135611f2481611eb6565b929592945050506040919091013590565b60008060208385031215611f4857600080fd5b823567ffffffffffffffff80821115611f6057600080fd5b818501915085601f830112611f7457600080fd5b813581811115611f8357600080fd5b8660208260051b8501011115611f9857600080fd5b60209290920196919550909350505050565b60008060208385031215611fbd57600080fd5b823567ffffffffffffffff80821115611fd557600080fd5b818501915085601f830112611fe957600080fd5b813581811115611ff857600080fd5b866020828501011115611f9857600080fd5b600080600080600060a0868803121561202257600080fd5b853567ffffffffffffffff81111561203957600080fd5b61204588828901611e0b565b955050602086013561205681611eb6565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561208657600080fd5b813561209181611eb6565b9392505050565b60008060008060008060c087890312156120b157600080fd5b863567ffffffffffffffff8111156120c857600080fd5b6120d489828a01611e0b565b96505060208701356120e581611eb6565b95989597505050506040840135936060810135936080820135935060a0909101359150565b6000815160005b8181101561212b5760208185018101518683015201612111565b50600093019283525090919050565b7f636f6e74726163742e616464726573730000000000000000000000000000000081526000612091601083018461210a565b60006020828403121561217e57600080fd5b5051919050565b6000612091828461210a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126121f557600080fd5b83018035915067ffffffffffffffff82111561221057600080fd5b60200191503681900382131561222557600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361228c5761228c61222c565b5060010190565b7f64616f2e70726f746f636f6c2e74726561737572792e636f6e7472616374000081528183601e83013760009101601e01908152919050565b808201808211156108b6576108b661222c565b7f64616f2e70726f746f636f6c2e74726561737572792e636f6e7472616374000081526000612091601e83018461210a565b60006020828403121561232357600080fd5b815161209181611eb6565b818103818111156108b6576108b661222c565b600082612377577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176108b6576108b661222c565b6000602082840312156123a557600080fd5b8151801515811461209157600080fdfea26469706673582212208f71e7ae63712de755b0e79d1c43ab4aaf8b7655039f3387f58865b7ebdfa37164736f6c63430008120033
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.