Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 2,965 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Submit Balances | 1588807 | 4 days ago | IN | 0 ETH | 0.0007473 | ||||
| Submit Balances | 1588805 | 4 days ago | IN | 0 ETH | 0.00063877 | ||||
| Submit Balances | 1588548 | 4 days ago | IN | 0 ETH | 0.00075692 | ||||
| Submit Balances | 1588533 | 4 days ago | IN | 0 ETH | 0.00063491 | ||||
| Submit Balances | 1587998 | 4 days ago | IN | 0 ETH | 0.00072887 | ||||
| Submit Balances | 1587989 | 4 days ago | IN | 0 ETH | 0.00064477 | ||||
| Submit Balances | 1587732 | 4 days ago | IN | 0 ETH | 0.00046314 | ||||
| Submit Balances | 1587731 | 4 days ago | IN | 0 ETH | 0.00074522 | ||||
| Submit Balances | 1587728 | 4 days ago | IN | 0 ETH | 0.00062487 | ||||
| Submit Balances | 1587470 | 4 days ago | IN | 0 ETH | 0.00073856 | ||||
| Submit Balances | 1587443 | 4 days ago | IN | 0 ETH | 0.00063571 | ||||
| Submit Balances | 1587200 | 4 days ago | IN | 0 ETH | 0.00072307 | ||||
| Submit Balances | 1587200 | 4 days ago | IN | 0 ETH | 0.00061828 | ||||
| Submit Balances | 1586944 | 4 days ago | IN | 0 ETH | 0.00046001 | ||||
| Submit Balances | 1586941 | 4 days ago | IN | 0 ETH | 0.00073977 | ||||
| Submit Balances | 1586915 | 4 days ago | IN | 0 ETH | 0.00064669 | ||||
| Submit Balances | 1586672 | 4 days ago | IN | 0 ETH | 0.00047475 | ||||
| Submit Balances | 1586670 | 4 days ago | IN | 0 ETH | 0.00075784 | ||||
| Submit Balances | 1586648 | 4 days ago | IN | 0 ETH | 0.00060324 | ||||
| Submit Balances | 1586648 | 4 days ago | IN | 0 ETH | 0.00063579 | ||||
| Submit Balances | 1586414 | 4 days ago | IN | 0 ETH | 0.00045801 | ||||
| Submit Balances | 1586413 | 4 days ago | IN | 0 ETH | 0.00071989 | ||||
| Submit Balances | 1586410 | 4 days ago | IN | 0 ETH | 0.00062417 | ||||
| Submit Balances | 1586139 | 4 days ago | IN | 0 ETH | 0.00074439 | ||||
| Submit Balances | 1586119 | 4 days ago | IN | 0 ETH | 0.00061858 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
To
|
Amount
|
||
|---|---|---|---|---|---|---|---|
| Set Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Set Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Set Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Set Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Get Max Reth Del... | 1588807 | 4 days ago | 0 ETH | ||||
| Get Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Get Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Set Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Get Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Get Submit Balan... | 1588807 | 4 days ago | 0 ETH | ||||
| Get Address | 1588807 | 4 days ago | 0 ETH | ||||
| Get Node Consens... | 1588807 | 4 days ago | 0 ETH | ||||
| Get Member Count | 1588807 | 4 days ago | 0 ETH | ||||
| Get Address | 1588807 | 4 days ago | 0 ETH | ||||
| Set Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Get Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Set Bool | 1588807 | 4 days ago | 0 ETH | ||||
| Set Bool | 1588807 | 4 days ago | 0 ETH | ||||
| Get Bool | 1588807 | 4 days ago | 0 ETH | ||||
| Get Uint | 1588807 | 4 days ago | 0 ETH | ||||
| Get Submit Balan... | 1588807 | 4 days ago | 0 ETH | ||||
| Get Address | 1588807 | 4 days ago | 0 ETH | ||||
| Get Bool | 1588807 | 4 days ago | 0 ETH | ||||
| Get Address | 1588807 | 4 days ago | 0 ETH | ||||
| Get Node Consens... | 1588805 | 4 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RocketNetworkBalances
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity Standard Json-Input format)
/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity 0.8.30;
import "../RocketBase.sol";
import "../../interface/dao/node/RocketDAONodeTrustedInterface.sol";
import "../../interface/network/RocketNetworkBalancesInterface.sol";
import "../../interface/dao/protocol/settings/RocketDAOProtocolSettingsNetworkInterface.sol";
/// @notice Oracle contract for network balance data
contract RocketNetworkBalances is RocketBase, RocketNetworkBalancesInterface {
// Events
event BalancesSubmitted(address indexed from, uint256 block, uint256 slotTimestamp, uint256 totalEth, uint256 stakingEth, uint256 rethSupply, uint256 blockTimestamp);
event BalancesUpdated(uint256 indexed block, uint256 slotTimestamp, uint256 totalEth, uint256 stakingEth, uint256 rethSupply, uint256 blockTimestamp);
// Construct
constructor(RocketStorageInterface _rocketStorageAddress) RocketBase(_rocketStorageAddress) {
version = 4;
}
/// @notice The block number which balances are current for
function getBalancesBlock() override public view returns (uint256) {
return getUint(keccak256("network.balances.updated.block"));
}
/// @notice Sets the block number which balances are current for
function setBalancesBlock(uint256 _value) private {
setUint(keccak256("network.balances.updated.block"), _value);
}
/// @notice Get the timestamp for the last balance update
function getBalancesTimestamp() override public view returns (uint256) {
return getUint(keccak256("network.balances.updated.timestamp"));
}
/// @notice Sets the timestamp of the last balance update
function setBalancesTimestamp(uint256 _value) private {
setUint(keccak256("network.balances.updated.timestamp"), _value);
}
/// @notice The current RP network total ETH balance
function getTotalETHBalance() override public view returns (uint256) {
return getUint(keccak256("network.balance.total"));
}
/// @notice Sets the current RP network total ETH balance
function setTotalETHBalance(uint256 _value) private {
setUint(keccak256("network.balance.total"), _value);
}
/// @notice The current RP network staking ETH balance
function getStakingETHBalance() override public view returns (uint256) {
return getUint(keccak256("network.balance.staking"));
}
/// @notice Sets the current RP network staking ETH balance
function setStakingETHBalance(uint256 _value) private {
setUint(keccak256("network.balance.staking"), _value);
}
/// @notice The current RP network total rETH supply
function getTotalRETHSupply() override public view returns (uint256) {
return getUint(keccak256("network.balance.reth.supply"));
}
/// @notice Sets the current RP network total rETH supply
function setTotalRETHSupply(uint256 _value) private {
setUint(keccak256("network.balance.reth.supply"), _value);
}
/// @notice Get the current RP network ETH utilization rate as a fraction of 1 ETH
/// Represents what % of the network's balance is actively earning rewards
function getETHUtilizationRate() override external view returns (uint256) {
uint256 totalEthBalance = getTotalETHBalance();
uint256 stakingEthBalance = getStakingETHBalance();
if (totalEthBalance == 0) { return calcBase; }
return calcBase * stakingEthBalance / totalEthBalance;
}
/// @notice Submit network balances for a block.
/// Only accepts calls from trusted (oracle) nodes.
function submitBalances(uint256 _block, uint256 _slotTimestamp, uint256 _totalEth, uint256 _stakingEth, uint256 _rethSupply) override external onlyLatestContract("rocketNetworkBalances", address(this)) onlyTrustedNode(msg.sender) {
// Check settings
RocketDAOProtocolSettingsNetworkInterface rocketDAOProtocolSettingsNetwork = RocketDAOProtocolSettingsNetworkInterface(getContractAddress("rocketDAOProtocolSettingsNetwork"));
require(rocketDAOProtocolSettingsNetwork.getSubmitBalancesEnabled(), "Submitting balances is currently disabled");
// Check block
require(_block < block.number, "Balances can not be submitted for a future block");
uint256 lastBalancesBlock = getBalancesBlock();
require(_block >= lastBalancesBlock, "Network balances for a higher block are set");
// Check balances
require(_stakingEth <= _totalEth, "Invalid network balances");
// Get submission keys
bytes32 nodeSubmissionKey = keccak256(abi.encodePacked("network.balances.submitted.node", msg.sender, _block, _slotTimestamp, _totalEth, _stakingEth, _rethSupply));
bytes32 submissionCountKey = keccak256(abi.encodePacked("network.balances.submitted.count", _block, _slotTimestamp, _totalEth, _stakingEth, _rethSupply));
// Check & update node submission status
require(!getBool(nodeSubmissionKey), "Duplicate submission from node");
setBool(nodeSubmissionKey, true);
setBool(keccak256(abi.encodePacked("network.balances.submitted.node", msg.sender, _block)), true);
// Increment submission count
uint256 submissionCount = getUint(submissionCountKey) + 1;
setUint(submissionCountKey, submissionCount);
// Emit balances submitted event
emit BalancesSubmitted(msg.sender, _block, _slotTimestamp, _totalEth, _stakingEth, _rethSupply, block.timestamp);
// If voting past consensus, return
if (_block == lastBalancesBlock) {
return;
}
// Check submission count & update network balances
RocketDAONodeTrustedInterface rocketDAONodeTrusted = RocketDAONodeTrustedInterface(getContractAddress("rocketDAONodeTrusted"));
if (calcBase * submissionCount / rocketDAONodeTrusted.getMemberCount() >= rocketDAOProtocolSettingsNetwork.getNodeConsensusThreshold()) {
updateBalances(_block, _slotTimestamp, _totalEth, _stakingEth, _rethSupply);
}
}
/// @notice Executes updateBalances if consensus threshold is reached
function executeUpdateBalances(uint256 _block, uint256 _slotTimestamp, uint256 _totalEth, uint256 _stakingEth, uint256 _rethSupply) override external onlyLatestContract("rocketNetworkBalances", address(this)) {
// Check settings
RocketDAOProtocolSettingsNetworkInterface rocketDAOProtocolSettingsNetwork = RocketDAOProtocolSettingsNetworkInterface(getContractAddress("rocketDAOProtocolSettingsNetwork"));
require(rocketDAOProtocolSettingsNetwork.getSubmitBalancesEnabled(), "Submitting balances is currently disabled");
// Check block
require(_block < block.number, "Balances can not be submitted for a future block");
require(_block > getBalancesBlock(), "Network balances for an equal or higher block are set");
// Check balances
require(_stakingEth <= _totalEth, "Invalid network balances");
// Get submission keys
bytes32 submissionCountKey = keccak256(abi.encodePacked("network.balances.submitted.count", _block, _slotTimestamp, _totalEth, _stakingEth, _rethSupply));
// Get submission count
uint256 submissionCount = getUint(submissionCountKey);
// Check submission count & update network balances
RocketDAONodeTrustedInterface rocketDAONodeTrusted = RocketDAONodeTrustedInterface(getContractAddress("rocketDAONodeTrusted"));
require(calcBase * submissionCount / rocketDAONodeTrusted.getMemberCount() >= rocketDAOProtocolSettingsNetwork.getNodeConsensusThreshold(), "Consensus has not been reached");
updateBalances(_block, _slotTimestamp, _totalEth, _stakingEth, _rethSupply);
}
/// @dev Internal method to update network balances
function updateBalances(uint256 _block, uint256 _slotTimestamp, uint256 _totalEth, uint256 _stakingEth, uint256 _rethSupply) private {
// Check enough time has passed (RPIP-61)
RocketDAOProtocolSettingsNetworkInterface rocketDAOProtocolSettingsNetwork = RocketDAOProtocolSettingsNetworkInterface(getContractAddress("rocketDAOProtocolSettingsNetwork"));
uint256 frequency = rocketDAOProtocolSettingsNetwork.getSubmitBalancesFrequency();
uint256 lastTimestamp = getBalancesTimestamp();
uint256 minimumTimestamp = lastTimestamp + (frequency * 95 / 100);
require(block.timestamp >= minimumTimestamp, "Not enough time has passed");
setBalancesTimestamp(block.timestamp);
// Check rETH delta is within allowed range (RPIP-61)
uint256 currentTotalEthBalance = getTotalETHBalance();
// Bypass the delta restriction on first balance update
if (currentTotalEthBalance > 0) {
uint256 currentRethSupply = getTotalRETHSupply();
uint256 currentRatio = calcBase * currentTotalEthBalance / currentRethSupply;
uint256 newRatio = calcBase * _totalEth / _rethSupply;
uint256 maxChangePercent = rocketDAOProtocolSettingsNetwork.getMaxRethDelta();
uint256 maxChange = currentRatio * maxChangePercent / calcBase;
// Limit change per RPIP-61
if (newRatio > currentRatio) {
require(newRatio - currentRatio <= maxChange, "Change exceeds maximum");
} else {
require(currentRatio - newRatio <= maxChange, "Change exceeds maximum");
}
}
// Update balances
setBalancesBlock(_block);
setTotalETHBalance(_totalEth);
setStakingETHBalance(_stakingEth);
setTotalRETHSupply(_rethSupply);
// Emit balances updated event
emit BalancesUpdated(_block, _slotTimestamp, _totalEth, _stakingEth, _rethSupply, block.timestamp);
}
}/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity >0.5.0 <0.9.0;
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 |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
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 sender that isn't a registered megapool
*/
modifier onlyRegisteredMegapool(address _megapoolAddress) {
require(getBool(keccak256(abi.encodePacked("megapool.exists", _megapoolAddress))), "Invalid megapool");
_;
}
/**
* @dev Throws if called by any sender that isn't a registered minipool or megapool
*/
modifier onlyRegisteredMinipoolOrMegapool(address _caller) {
require(
getBool(keccak256(abi.encodePacked("megapool.exists", _caller))) ||
getBool(keccak256(abi.encodePacked("minipool.exists", _caller)))
, "Invalid caller");
_;
}
/**
* @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 |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
pragma solidity >0.5.0 <0.9.0;
// SPDX-License-Identifier: GPL-3.0-only
interface RocketDAONodeTrustedInterface {
function getBootstrapModeDisabled() external view returns (bool);
function getMemberQuorumVotesRequired() external view returns (uint256);
function getMemberAt(uint256 _index) external view returns (address);
function getMemberCount() external view returns (uint256);
function getMemberMinRequired() external view returns (uint256);
function getMemberIsValid(address _nodeAddress) external view returns (bool);
function getMemberLastProposalTime(address _nodeAddress) external view returns (uint256);
function getMemberID(address _nodeAddress) external view returns (string memory);
function getMemberUrl(address _nodeAddress) external view returns (string memory);
function getMemberJoinedTime(address _nodeAddress) external view returns (uint256);
function getMemberProposalExecutedTime(string memory _proposalType, address _nodeAddress) external view returns (uint256);
function getMemberRPLBondAmount(address _nodeAddress) external view returns (uint256);
function getMemberIsChallenged(address _nodeAddress) external view returns (bool);
function getMemberUnbondedValidatorCount(address _nodeAddress) external view returns (uint256);
function incrementMemberUnbondedValidatorCount(address _nodeAddress) external;
function decrementMemberUnbondedValidatorCount(address _nodeAddress) external;
function bootstrapMember(string memory _id, string memory _url, address _nodeAddress) external;
function bootstrapSettingUint(string memory _settingContractName, string memory _settingPath, uint256 _value) external;
function bootstrapSettingBool(string memory _settingContractName, string memory _settingPath, bool _value) external;
function bootstrapUpgrade(string memory _type, string memory _name, string memory _contractAbi, address _contractAddress) external;
function bootstrapDisable(bool _confirmDisableBootstrapMode) external;
function memberJoinRequired(string memory _id, string memory _url) external;
}/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
pragma solidity >0.5.0 <0.9.0;
pragma abicoder v2;
// SPDX-License-Identifier: GPL-3.0-only
interface RocketNetworkBalancesInterface {
function getBalancesTimestamp() external view returns (uint256);
function getBalancesBlock() external view returns (uint256);
function getTotalETHBalance() external view returns (uint256);
function getStakingETHBalance() external view returns (uint256);
function getTotalRETHSupply() external view returns (uint256);
function getETHUtilizationRate() external view returns (uint256);
function submitBalances(uint256 _block, uint256 _slotTimestamp, uint256 _total, uint256 _staking, uint256 _rethSupply) external;
function executeUpdateBalances(uint256 _block, uint256 _slotTimestamp, uint256 _totalEth, uint256 _stakingEth, uint256 _rethSupply) external;
}/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
pragma solidity >0.5.0 <0.9.0;
// SPDX-License-Identifier: GPL-3.0-only
interface RocketDAOProtocolSettingsNetworkInterface {
function getNodeConsensusThreshold() external view returns (uint256);
function getNodePenaltyThreshold() external view returns (uint256);
function getPerPenaltyRate() external view returns (uint256);
function getSubmitBalancesEnabled() external view returns (bool);
function getSubmitBalancesFrequency() external view returns (uint256);
function getSubmitPricesEnabled() external view returns (bool);
function getSubmitPricesFrequency() external view returns (uint256);
function getMinimumNodeFee() external view returns (uint256);
function getTargetNodeFee() external view returns (uint256);
function getMaximumNodeFee() external view returns (uint256);
function getNodeFeeDemandRange() external view returns (uint256);
function getTargetRethCollateralRate() external view returns (uint256);
function getRethDepositDelay() external view returns (uint256);
function getSubmitRewardsEnabled() external view returns (bool);
function getMaxNodeShareSecurityCouncilAdder() external view returns (uint256);
function getVoterShare() external view returns (uint256);
function getProtocolDAOShare() external view returns (uint256);
function getNodeShare() external view returns (uint256);
function getNodeShareSecurityCouncilAdder() external view returns (uint256);
function getRethCommission() external view returns (uint256);
function getEffectiveVoterShare() external view returns (uint256);
function getEffectiveNodeShare() external view returns (uint256);
function getAllowListedControllers() external view returns (address[] memory);
function getMaxRethDelta() external view returns (uint256);
function isAllowListedController(address _address) external view returns (bool);
function setNodeShareSecurityCouncilAdder(uint256 _value) external;
function setNodeCommissionShare(uint256 _value) external;
function setVoterShare(uint256 _value) external;
function setProtocolDAOShare(uint256 _value) external;
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 15000
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract ABI
API[{"inputs":[{"internalType":"contract RocketStorageInterface","name":"_rocketStorageAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"slotTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rethSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"name":"BalancesSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"slotTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rethSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"name":"BalancesUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"},{"internalType":"uint256","name":"_slotTimestamp","type":"uint256"},{"internalType":"uint256","name":"_totalEth","type":"uint256"},{"internalType":"uint256","name":"_stakingEth","type":"uint256"},{"internalType":"uint256","name":"_rethSupply","type":"uint256"}],"name":"executeUpdateBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalancesBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalancesTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHUtilizationRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRETHSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"},{"internalType":"uint256","name":"_slotTimestamp","type":"uint256"},{"internalType":"uint256","name":"_totalEth","type":"uint256"},{"internalType":"uint256","name":"_stakingEth","type":"uint256"},{"internalType":"uint256","name":"_rethSupply","type":"uint256"}],"name":"submitBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608034608157601f611d1538819003918201601f19168301916001600160401b03831184841017608657808492602094604052833981010312608157516001600160a01b0381168103608157600080546001600160a81b03191660089290921b610100600160a81b0316919091176004179055604051611c78908161009d8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b60003560e01c90816354fd4d501461071f5750806389c51c7c146102f35780638e0ebd87146102d85780639100c13d146102bd578063964d042c146102a2578063979611ea146100e05780639dba66af146100c5578063c4c8d0ad146100aa5763f1eda6341461008257600080fd5b346100a55760006003193601126100a557602061009d6113c5565b604051908152f35b600080fd5b346100a55760006003193601126100a557602061009d611341565b346100a55760006003193601126100a557602061009d610fc5565b346100a5576100ee3661073d565b926000929192506101c073ffffffffffffffffffffffffffffffffffffffff6101b860405161011e60408261075f565b601581527f726f636b65744e6574776f726b42616c616e636573000000000000000000000060208201526040516101b08161018460208201947f636f6e74726163742e6164647265737300000000000000000000000000000000865260308301906107cf565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261075f565b519020611012565b1630146107fa565b61023460405160208101907f64616f2e747275737465646e6f6465732e00000000000000000000000000000082527f6d656d626572000000000000000000000000000000000000000000000000000060318201523360601b6037820152602b815261022c604b8261075f565b519020611b41565b156102445761024294610a2b565b005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e76616c69642074727573746564206e6f64650000000000000000000000006044820152fd5b346100a55760006003193601126100a557602061009d6112bd565b346100a55760006003193601126100a557602061009d611186565b346100a55760006003193601126100a557602061009d611239565b346100a5576103013661073d565b9260009291925061033173ffffffffffffffffffffffffffffffffffffffff6101b860405161011e60408261075f565b73ffffffffffffffffffffffffffffffffffffffff61038660405161035760408261075f565b602081527f726f636b657444414f50726f746f636f6c53657474696e67734e6574776f726b60208201526110c9565b166040517ffcdb60db000000000000000000000000000000000000000000000000000000008152602081600481855afa80156105fb576103ce916000916106f0575b50610877565b6103d9438710610902565b6103e1611186565b86111561066c576103f48385111561098d565b61045b86604051610453816101848a8a8a8a602086019889939160c09593917f6e6574776f726b2e62616c616e6365732e7375626d69747465642e636f756e748652602086015260408501526060840152608083015260a08201520190565b519020611449565b9073ffffffffffffffffffffffffffffffffffffffff6104b160405161048260408261075f565b601481527f726f636b657444414f4e6f64655472757374656400000000000000000000000060208201526110c9565b169180670de0b6b3a76400000290670de0b6b3a764000082040361063d576020600493604051948580927f997072f70000000000000000000000000000000000000000000000000000000082525afa9283156105fb57600093610607575b5061051e6004936020926109f2565b91604051938480927f1f66e8ed0000000000000000000000000000000000000000000000000000000082525afa9182156105fb576000926105c7575b5010610569576102429461151f565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f436f6e73656e73757320686173206e6f74206265656e207265616368656400006044820152fd5b9091506020813d6020116105f3575b816105e36020938361075f565b810103126100a55751908761055a565b3d91506105d6565b6040513d6000823e3d90fd5b92506020833d602011610635575b816106226020938361075f565b810103126100a55791519161051e61050f565b3d9150610615565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4e6574776f726b2062616c616e63657320666f7220616e20657175616c206f7260448201527f2068696768657220626c6f636b206172652073657400000000000000000000006064820152fd5b610712915060203d602011610718575b61070a818361075f565b81019061085f565b886103c8565b503d610700565b346100a55760006003193601126100a55760209060ff600054168152f35b60031960a09101126100a5576004359060243590604435906064359060843590565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107a057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b9081519160005b8381106107e7575050016000815290565b80602080928401015181850152016107d6565b1561080157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e7472616374000000006044820152fd5b908160209103126100a5575180151581036100a55790565b1561087e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5375626d697474696e672062616c616e6365732069732063757272656e746c7960448201527f2064697361626c656400000000000000000000000000000000000000000000006064820152fd5b1561090957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f42616c616e6365732063616e206e6f74206265207375626d697474656420666f60448201527f7220612066757475726520626c6f636b000000000000000000000000000000006064820152fd5b1561099457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964206e6574776f726b2062616c616e63657300000000000000006044820152fd5b81156109fc570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b93929190600073ffffffffffffffffffffffffffffffffffffffff610a5760405161035760408261075f565b166040517ffcdb60db000000000000000000000000000000000000000000000000000000008152602081600481855afa908115610fba5790610a9f918491610f9b5750610877565b610aaa438810610902565b610ab2611186565b808810610f1757610ac58587111561098d565b60405190602082017f6e6574776f726b2e62616c616e6365732e7375626d69747465642e6e6f64650081523360601b9283603f8201528a60538201528660738201528760938201528860b38201528960d382015260d38152610b2860f38261075f565b51902089604051610b87816101848d8d8d8d602086019889939160c09593917f6e6574776f726b2e62616c616e6365732e7375626d69747465642e636f756e748652602086015260408501526060840152608083015260a08201520190565b51902092610b9482611b41565b610eb957610ba4610bf192611bbe565b60405160208101917f6e6574776f726b2e62616c616e6365732e7375626d69747465642e6e6f6465008352603f8201528b605382015260538152610be960738261075f565b519020611bbe565b610bfa82611449565b9160018301809311610e8c5773ffffffffffffffffffffffffffffffffffffffff855460081c1690813b15610e885785916044839260405194859384927fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401528860248401525af18015610e7d57610e69575b506040518981528560208201528660408201528760608201528860808201524260a08201527f9b240d5b912ab6df93782930ae851a85b25e5a419c05cbb84d1b9e4b86a3c57360c03392a28814610e5f5773ffffffffffffffffffffffffffffffffffffffff610ce960405161048260408261075f565b1681670de0b6b3a76400000291670de0b6b3a7640000830403610e3257906020600492604051938480927f997072f70000000000000000000000000000000000000000000000000000000082525afa918215610e27578492610df1575b50610d556004926020926109f2565b92604051928380927f1f66e8ed0000000000000000000000000000000000000000000000000000000082525afa928315610de55792610db1575b501015610d9e575b5050505050565b610da79461151f565b3880808080610d97565b9091506020813d602011610ddd575b81610dcd6020938361075f565b810103126100a557519038610d8f565b3d9150610dc0565b604051903d90823e3d90fd5b91506020823d602011610e1f575b81610e0c6020938361075f565b810103126100a557905190610d55610d46565b3d9150610dff565b6040513d86823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5050505050505050565b84610e769195929561075f565b9238610c72565b6040513d87823e3d90fd5b8580fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4475706c6963617465207375626d697373696f6e2066726f6d206e6f646500006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4e6574776f726b2062616c616e63657320666f7220612068696768657220626c60448201527f6f636b20617265207365740000000000000000000000000000000000000000006064820152fd5b610fb4915060203d6020116107185761070a818361075f565b386103c8565b6040513d85823e3d90fd5b610fcd6112bd565b610fd56113c5565b9080156110045781670de0b6b3a76400000291670de0b6b3a764000083040361063d57611001916109f2565b90565b5050670de0b6b3a764000090565b602073ffffffffffffffffffffffffffffffffffffffff60005460081c16916024604051809481937f21f8a72100000000000000000000000000000000000000000000000000000000835260048301525afa9081156105fb57600091611076575090565b6020813d6020116110c1575b8161108f6020938361075f565b810103126110bd57519073ffffffffffffffffffffffffffffffffffffffff821682036110ba575090565b80fd5b5080fd5b3d9150611082565b611109906040516101b08161018460208201947f636f6e74726163742e6164647265737300000000000000000000000000000000865260308301906107cf565b73ffffffffffffffffffffffffffffffffffffffff8116156111285790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e7472616374206e6f7420666f756e6400000000000000000000000000006044820152fd5b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f8e228cc95820b1264270ce3b51a2a54e17242e0b792a7f57c45f45e402f44c7460048301525afa9081156105fb5760009161120a575090565b90506020813d602011611231575b816112256020938361075f565b810103126100a5575190565b3d9150611218565b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f2bf046908521b100f0b60454d61b12d6184158cf04e6b59bcc5132a22c2b5e2060048301525afa9081156105fb5760009161120a575090565b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f9dc185b46ed0f11d151f055e45fde635375a9680c34e501b43a82eb6c09c095160048301525afa9081156105fb5760009161120a575090565b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f5b3a7b8bdde2122fad4dc45e51ae0c5cedc887473a999474f2ead5a8faadfe3c60048301525afa9081156105fb5760009161120a575090565b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f60ada356ca70f00927cab348673259fa737f98b9c6c4cb8433c182af17149aef60048301525afa9081156105fb5760009161120a575090565b602073ffffffffffffffffffffffffffffffffffffffff60005460081c16916024604051809481937fbd02d0f500000000000000000000000000000000000000000000000000000000835260048301525afa9081156105fb5760009161120a575090565b9190820391821161063d57565b156114c157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4368616e67652065786365656473206d6178696d756d000000000000000000006044820152fd5b9391929092600073ffffffffffffffffffffffffffffffffffffffff61154c60405161035760408261075f565b16906040517f1d5e50ea000000000000000000000000000000000000000000000000000000008152602081600481865afa9081156118e4578291611b0f575b50611594611239565b90605f810290808204605f1490151715611ae257606490048101809111611ab5574210611a575773ffffffffffffffffffffffffffffffffffffffff815460081c16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f2bf046908521b100f0b60454d61b12d6184158cf04e6b59bcc5132a22c2b5e2060048401524260248401525af180156118e457611a47575b509061164f6112bd565b8061192e575b505073ffffffffffffffffffffffffffffffffffffffff815460081c16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f8e228cc95820b1264270ce3b51a2a54e17242e0b792a7f57c45f45e402f44c7460048401528c60248401525af180156118e457908291611919575b505460081c73ffffffffffffffffffffffffffffffffffffffff16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f9dc185b46ed0f11d151f055e45fde635375a9680c34e501b43a82eb6c09c095160048401528860248401525af180156118e457908291611904575b505460081c73ffffffffffffffffffffffffffffffffffffffff16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f60ada356ca70f00927cab348673259fa737f98b9c6c4cb8433c182af17149aef60048401528960248401525af180156118e4579082916118ef575b505460081c73ffffffffffffffffffffffffffffffffffffffff16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f5b3a7b8bdde2122fad4dc45e51ae0c5cedc887473a999474f2ead5a8faadfe3c60048401528a60248401525af180156118e4576118cf575b5050917fdd27295717c4fbd48b1840f846e18be6f0b7bd6b55608e697e53b15848cecdf9939160a093604051938452602084015260408301526060820152426080820152a2565b6118da82809261075f565b6110ba5780611888565b6040513d84823e3d90fd5b816118f99161075f565b6110ba5780386117fe565b8161190e9161075f565b6110ba578038611771565b816119239161075f565b6110ba5780386116e4565b611936611341565b9080670de0b6b3a76400000290670de0b6b3a7640000820403610e32579061195d916109f2565b9083670de0b6b3a764000002670de0b6b3a764000081048503610e32576020611988886004936109f2565b92604051928380927fdfb9a9db0000000000000000000000000000000000000000000000000000000082525afa908115610e27578491611a15575b50808302908382041483151715610e3257670de0b6b3a764000090049082811115611a03576119fc926119f5916114ad565b11156114ba565b3880611655565b6119f590611a10936114ad565b6119fc565b90506020813d602011611a3f575b81611a306020938361075f565b810103126100a55751386119c3565b3d9150611a23565b81611a519161075f565b38611645565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f7420656e6f7567682074696d6520686173207061737365640000000000006044820152fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b90506020813d602011611b39575b81611b2a6020938361075f565b810103126110bd57513861158b565b3d9150611b1d565b602073ffffffffffffffffffffffffffffffffffffffff60005460081c16916024604051809481937f7ae1cfca00000000000000000000000000000000000000000000000000000000835260048301525afa9081156105fb57600091611ba5575090565b611001915060203d6020116107185761070a818361075f565b60009073ffffffffffffffffffffffffffffffffffffffff825460081c1690813b15611c3e5782916044839260405194859384927fabfdcced0000000000000000000000000000000000000000000000000000000084526004840152600160248401525af180156118e457611c31575050565b81611c3b9161075f565b50565b8280fdfea2646970667358221220668786c718f29bff86aaaf642901bc3cf0e024a43e8e8d1d861bb362f1c2eb0f64736f6c634300081e0033000000000000000000000000f4d539f1babdaa6e47b1112bc9fa1c83cf0ffe59
Deployed Bytecode
0x608080604052600436101561001357600080fd5b60003560e01c90816354fd4d501461071f5750806389c51c7c146102f35780638e0ebd87146102d85780639100c13d146102bd578063964d042c146102a2578063979611ea146100e05780639dba66af146100c5578063c4c8d0ad146100aa5763f1eda6341461008257600080fd5b346100a55760006003193601126100a557602061009d6113c5565b604051908152f35b600080fd5b346100a55760006003193601126100a557602061009d611341565b346100a55760006003193601126100a557602061009d610fc5565b346100a5576100ee3661073d565b926000929192506101c073ffffffffffffffffffffffffffffffffffffffff6101b860405161011e60408261075f565b601581527f726f636b65744e6574776f726b42616c616e636573000000000000000000000060208201526040516101b08161018460208201947f636f6e74726163742e6164647265737300000000000000000000000000000000865260308301906107cf565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261075f565b519020611012565b1630146107fa565b61023460405160208101907f64616f2e747275737465646e6f6465732e00000000000000000000000000000082527f6d656d626572000000000000000000000000000000000000000000000000000060318201523360601b6037820152602b815261022c604b8261075f565b519020611b41565b156102445761024294610a2b565b005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e76616c69642074727573746564206e6f64650000000000000000000000006044820152fd5b346100a55760006003193601126100a557602061009d6112bd565b346100a55760006003193601126100a557602061009d611186565b346100a55760006003193601126100a557602061009d611239565b346100a5576103013661073d565b9260009291925061033173ffffffffffffffffffffffffffffffffffffffff6101b860405161011e60408261075f565b73ffffffffffffffffffffffffffffffffffffffff61038660405161035760408261075f565b602081527f726f636b657444414f50726f746f636f6c53657474696e67734e6574776f726b60208201526110c9565b166040517ffcdb60db000000000000000000000000000000000000000000000000000000008152602081600481855afa80156105fb576103ce916000916106f0575b50610877565b6103d9438710610902565b6103e1611186565b86111561066c576103f48385111561098d565b61045b86604051610453816101848a8a8a8a602086019889939160c09593917f6e6574776f726b2e62616c616e6365732e7375626d69747465642e636f756e748652602086015260408501526060840152608083015260a08201520190565b519020611449565b9073ffffffffffffffffffffffffffffffffffffffff6104b160405161048260408261075f565b601481527f726f636b657444414f4e6f64655472757374656400000000000000000000000060208201526110c9565b169180670de0b6b3a76400000290670de0b6b3a764000082040361063d576020600493604051948580927f997072f70000000000000000000000000000000000000000000000000000000082525afa9283156105fb57600093610607575b5061051e6004936020926109f2565b91604051938480927f1f66e8ed0000000000000000000000000000000000000000000000000000000082525afa9182156105fb576000926105c7575b5010610569576102429461151f565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f436f6e73656e73757320686173206e6f74206265656e207265616368656400006044820152fd5b9091506020813d6020116105f3575b816105e36020938361075f565b810103126100a55751908761055a565b3d91506105d6565b6040513d6000823e3d90fd5b92506020833d602011610635575b816106226020938361075f565b810103126100a55791519161051e61050f565b3d9150610615565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4e6574776f726b2062616c616e63657320666f7220616e20657175616c206f7260448201527f2068696768657220626c6f636b206172652073657400000000000000000000006064820152fd5b610712915060203d602011610718575b61070a818361075f565b81019061085f565b886103c8565b503d610700565b346100a55760006003193601126100a55760209060ff600054168152f35b60031960a09101126100a5576004359060243590604435906064359060843590565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107a057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b9081519160005b8381106107e7575050016000815290565b80602080928401015181850152016107d6565b1561080157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e7472616374000000006044820152fd5b908160209103126100a5575180151581036100a55790565b1561087e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5375626d697474696e672062616c616e6365732069732063757272656e746c7960448201527f2064697361626c656400000000000000000000000000000000000000000000006064820152fd5b1561090957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f42616c616e6365732063616e206e6f74206265207375626d697474656420666f60448201527f7220612066757475726520626c6f636b000000000000000000000000000000006064820152fd5b1561099457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964206e6574776f726b2062616c616e63657300000000000000006044820152fd5b81156109fc570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b93929190600073ffffffffffffffffffffffffffffffffffffffff610a5760405161035760408261075f565b166040517ffcdb60db000000000000000000000000000000000000000000000000000000008152602081600481855afa908115610fba5790610a9f918491610f9b5750610877565b610aaa438810610902565b610ab2611186565b808810610f1757610ac58587111561098d565b60405190602082017f6e6574776f726b2e62616c616e6365732e7375626d69747465642e6e6f64650081523360601b9283603f8201528a60538201528660738201528760938201528860b38201528960d382015260d38152610b2860f38261075f565b51902089604051610b87816101848d8d8d8d602086019889939160c09593917f6e6574776f726b2e62616c616e6365732e7375626d69747465642e636f756e748652602086015260408501526060840152608083015260a08201520190565b51902092610b9482611b41565b610eb957610ba4610bf192611bbe565b60405160208101917f6e6574776f726b2e62616c616e6365732e7375626d69747465642e6e6f6465008352603f8201528b605382015260538152610be960738261075f565b519020611bbe565b610bfa82611449565b9160018301809311610e8c5773ffffffffffffffffffffffffffffffffffffffff855460081c1690813b15610e885785916044839260405194859384927fe2a4853a00000000000000000000000000000000000000000000000000000000845260048401528860248401525af18015610e7d57610e69575b506040518981528560208201528660408201528760608201528860808201524260a08201527f9b240d5b912ab6df93782930ae851a85b25e5a419c05cbb84d1b9e4b86a3c57360c03392a28814610e5f5773ffffffffffffffffffffffffffffffffffffffff610ce960405161048260408261075f565b1681670de0b6b3a76400000291670de0b6b3a7640000830403610e3257906020600492604051938480927f997072f70000000000000000000000000000000000000000000000000000000082525afa918215610e27578492610df1575b50610d556004926020926109f2565b92604051928380927f1f66e8ed0000000000000000000000000000000000000000000000000000000082525afa928315610de55792610db1575b501015610d9e575b5050505050565b610da79461151f565b3880808080610d97565b9091506020813d602011610ddd575b81610dcd6020938361075f565b810103126100a557519038610d8f565b3d9150610dc0565b604051903d90823e3d90fd5b91506020823d602011610e1f575b81610e0c6020938361075f565b810103126100a557905190610d55610d46565b3d9150610dff565b6040513d86823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5050505050505050565b84610e769195929561075f565b9238610c72565b6040513d87823e3d90fd5b8580fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4475706c6963617465207375626d697373696f6e2066726f6d206e6f646500006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4e6574776f726b2062616c616e63657320666f7220612068696768657220626c60448201527f6f636b20617265207365740000000000000000000000000000000000000000006064820152fd5b610fb4915060203d6020116107185761070a818361075f565b386103c8565b6040513d85823e3d90fd5b610fcd6112bd565b610fd56113c5565b9080156110045781670de0b6b3a76400000291670de0b6b3a764000083040361063d57611001916109f2565b90565b5050670de0b6b3a764000090565b602073ffffffffffffffffffffffffffffffffffffffff60005460081c16916024604051809481937f21f8a72100000000000000000000000000000000000000000000000000000000835260048301525afa9081156105fb57600091611076575090565b6020813d6020116110c1575b8161108f6020938361075f565b810103126110bd57519073ffffffffffffffffffffffffffffffffffffffff821682036110ba575090565b80fd5b5080fd5b3d9150611082565b611109906040516101b08161018460208201947f636f6e74726163742e6164647265737300000000000000000000000000000000865260308301906107cf565b73ffffffffffffffffffffffffffffffffffffffff8116156111285790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e7472616374206e6f7420666f756e6400000000000000000000000000006044820152fd5b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f8e228cc95820b1264270ce3b51a2a54e17242e0b792a7f57c45f45e402f44c7460048301525afa9081156105fb5760009161120a575090565b90506020813d602011611231575b816112256020938361075f565b810103126100a5575190565b3d9150611218565b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f2bf046908521b100f0b60454d61b12d6184158cf04e6b59bcc5132a22c2b5e2060048301525afa9081156105fb5760009161120a575090565b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f9dc185b46ed0f11d151f055e45fde635375a9680c34e501b43a82eb6c09c095160048301525afa9081156105fb5760009161120a575090565b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f5b3a7b8bdde2122fad4dc45e51ae0c5cedc887473a999474f2ead5a8faadfe3c60048301525afa9081156105fb5760009161120a575090565b6024602073ffffffffffffffffffffffffffffffffffffffff60005460081c16604051928380927fbd02d0f50000000000000000000000000000000000000000000000000000000082527f60ada356ca70f00927cab348673259fa737f98b9c6c4cb8433c182af17149aef60048301525afa9081156105fb5760009161120a575090565b602073ffffffffffffffffffffffffffffffffffffffff60005460081c16916024604051809481937fbd02d0f500000000000000000000000000000000000000000000000000000000835260048301525afa9081156105fb5760009161120a575090565b9190820391821161063d57565b156114c157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4368616e67652065786365656473206d6178696d756d000000000000000000006044820152fd5b9391929092600073ffffffffffffffffffffffffffffffffffffffff61154c60405161035760408261075f565b16906040517f1d5e50ea000000000000000000000000000000000000000000000000000000008152602081600481865afa9081156118e4578291611b0f575b50611594611239565b90605f810290808204605f1490151715611ae257606490048101809111611ab5574210611a575773ffffffffffffffffffffffffffffffffffffffff815460081c16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f2bf046908521b100f0b60454d61b12d6184158cf04e6b59bcc5132a22c2b5e2060048401524260248401525af180156118e457611a47575b509061164f6112bd565b8061192e575b505073ffffffffffffffffffffffffffffffffffffffff815460081c16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f8e228cc95820b1264270ce3b51a2a54e17242e0b792a7f57c45f45e402f44c7460048401528c60248401525af180156118e457908291611919575b505460081c73ffffffffffffffffffffffffffffffffffffffff16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f9dc185b46ed0f11d151f055e45fde635375a9680c34e501b43a82eb6c09c095160048401528860248401525af180156118e457908291611904575b505460081c73ffffffffffffffffffffffffffffffffffffffff16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f60ada356ca70f00927cab348673259fa737f98b9c6c4cb8433c182af17149aef60048401528960248401525af180156118e4579082916118ef575b505460081c73ffffffffffffffffffffffffffffffffffffffff16803b156110bd578180916044604051809481937fe2a4853a0000000000000000000000000000000000000000000000000000000083527f5b3a7b8bdde2122fad4dc45e51ae0c5cedc887473a999474f2ead5a8faadfe3c60048401528a60248401525af180156118e4576118cf575b5050917fdd27295717c4fbd48b1840f846e18be6f0b7bd6b55608e697e53b15848cecdf9939160a093604051938452602084015260408301526060820152426080820152a2565b6118da82809261075f565b6110ba5780611888565b6040513d84823e3d90fd5b816118f99161075f565b6110ba5780386117fe565b8161190e9161075f565b6110ba578038611771565b816119239161075f565b6110ba5780386116e4565b611936611341565b9080670de0b6b3a76400000290670de0b6b3a7640000820403610e32579061195d916109f2565b9083670de0b6b3a764000002670de0b6b3a764000081048503610e32576020611988886004936109f2565b92604051928380927fdfb9a9db0000000000000000000000000000000000000000000000000000000082525afa908115610e27578491611a15575b50808302908382041483151715610e3257670de0b6b3a764000090049082811115611a03576119fc926119f5916114ad565b11156114ba565b3880611655565b6119f590611a10936114ad565b6119fc565b90506020813d602011611a3f575b81611a306020938361075f565b810103126100a55751386119c3565b3d9150611a23565b81611a519161075f565b38611645565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f7420656e6f7567682074696d6520686173207061737365640000000000006044820152fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b90506020813d602011611b39575b81611b2a6020938361075f565b810103126110bd57513861158b565b3d9150611b1d565b602073ffffffffffffffffffffffffffffffffffffffff60005460081c16916024604051809481937f7ae1cfca00000000000000000000000000000000000000000000000000000000835260048301525afa9081156105fb57600091611ba5575090565b611001915060203d6020116107185761070a818361075f565b60009073ffffffffffffffffffffffffffffffffffffffff825460081c1690813b15611c3e5782916044839260405194859384927fabfdcced0000000000000000000000000000000000000000000000000000000084526004840152600160248401525af180156118e457611c31575050565b81611c3b9161075f565b50565b8280fdfea2646970667358221220668786c718f29bff86aaaf642901bc3cf0e024a43e8e8d1d861bb362f1c2eb0f64736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f4d539f1babdaa6e47b1112bc9fa1c83cf0ffe59
-----Decoded View---------------
Arg [0] : _rocketStorageAddress (address): 0xf4D539F1babDAa6E47b1112Bc9Fa1C83cF0FfE59
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f4d539f1babdaa6e47b1112bc9fa1c83cf0ffe59
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.