Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 616 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Submit Rate | 21742683 | 18 hrs ago | IN | 0 ETH | 0.00281106 | ||||
Submit Rate | 21735499 | 42 hrs ago | IN | 0 ETH | 0.00290266 | ||||
Submit Rate | 21728348 | 2 days ago | IN | 0 ETH | 0.00255494 | ||||
Submit Rate | 21721185 | 3 days ago | IN | 0 ETH | 0.00203549 | ||||
Submit Rate | 21714035 | 4 days ago | IN | 0 ETH | 0.00199643 | ||||
Submit Rate | 21706845 | 5 days ago | IN | 0 ETH | 0.0022947 | ||||
Submit Rate | 21699696 | 6 days ago | IN | 0 ETH | 0.00197116 | ||||
Submit Rate | 21692519 | 7 days ago | IN | 0 ETH | 0.00197238 | ||||
Submit Rate | 21685355 | 8 days ago | IN | 0 ETH | 0.00199121 | ||||
Submit Rate | 21678175 | 9 days ago | IN | 0 ETH | 0.00201442 | ||||
Submit Rate | 21671024 | 10 days ago | IN | 0 ETH | 0.00197229 | ||||
Submit Rate | 21663864 | 11 days ago | IN | 0 ETH | 0.00373249 | ||||
Submit Rate | 21656677 | 12 days ago | IN | 0 ETH | 0.00214544 | ||||
Submit Rate | 21649530 | 13 days ago | IN | 0 ETH | 0.00302238 | ||||
Submit Rate | 21642394 | 14 days ago | IN | 0 ETH | 0.00206659 | ||||
Submit Rate | 21635202 | 15 days ago | IN | 0 ETH | 0.00252597 | ||||
Submit Rate | 21628028 | 16 days ago | IN | 0 ETH | 0.00227409 | ||||
Submit Rate | 21620874 | 17 days ago | IN | 0 ETH | 0.00254744 | ||||
Submit Rate | 21613738 | 18 days ago | IN | 0 ETH | 0.00257461 | ||||
Submit Rate | 21606554 | 19 days ago | IN | 0 ETH | 0.00239977 | ||||
Submit Rate | 21599559 | 20 days ago | IN | 0 ETH | 0.00218692 | ||||
Submit Rate | 21592371 | 21 days ago | IN | 0 ETH | 0.00207033 | ||||
Submit Rate | 21585172 | 22 days ago | IN | 0 ETH | 0.00208361 | ||||
Submit Rate | 21577995 | 23 days ago | IN | 0 ETH | 0.00197325 | ||||
Submit Rate | 21570761 | 24 days ago | IN | 0 ETH | 0.00197351 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RocketOvmPriceMessenger
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.13; import "@rocketpool/interface/RocketStorageInterface.sol"; import "@rocketpool/interface/network/RocketNetworkBalancesInterface.sol"; import "@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol"; import "./RocketOvmPriceOracle.sol"; /// @author Kane Wallmann (Rocket Pool) /// @notice Retrieves the rETH exchange rate from Rocket Pool and submits it to the oracle contract on OVM contract RocketOvmPriceMessenger { // Immutables ICrossDomainMessenger immutable ovmL1CrossDomainMessenger; RocketStorageInterface immutable rocketStorage; RocketOvmPriceOracle immutable rocketL2OvmPriceOracle; bytes32 immutable rocketNetworkBalancesKey; /// @notice The most recently submitted rate uint256 lastRate; constructor(RocketStorageInterface _rocketStorage, RocketOvmPriceOracle _rocketL2OvmPriceOracle, ICrossDomainMessenger _ovmL1CrossDomainMessenger) { rocketStorage = _rocketStorage; rocketL2OvmPriceOracle = _rocketL2OvmPriceOracle; ovmL1CrossDomainMessenger = _ovmL1CrossDomainMessenger; // Precompute storage key for RocketNetworkBalances address rocketNetworkBalancesKey = keccak256(abi.encodePacked("contract.address", "rocketNetworkBalances")); } /// @notice Returns whether the rate has changed since it was last submitted function rateStale() external view returns (bool) { return rate() != lastRate; } /// @notice Returns the calculated rETH exchange rate function rate() public view returns (uint256) { // Retrieve the inputs from RocketNetworkBalances and calculate the rate RocketNetworkBalancesInterface rocketNetworkBalances = RocketNetworkBalancesInterface(rocketStorage.getAddress(rocketNetworkBalancesKey)); uint256 supply = rocketNetworkBalances.getTotalRETHSupply(); if (supply == 0) { return 0; } return 1 ether * rocketNetworkBalances.getTotalETHBalance() / supply; } /// @notice Submits the current rETH exchange rate to the OVM cross domain messenger contract function submitRate() external { lastRate = rate(); // Send the cross chain message ovmL1CrossDomainMessenger.sendMessage( address(rocketL2OvmPriceOracle), abi.encodeWithSelector( rocketL2OvmPriceOracle.updateRate.selector, lastRate ), 500000 ); } }
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; }
pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketNetworkBalancesInterface { function getBalancesBlock() external view returns (uint256); function getLatestReportableBlock() 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 _total, uint256 _staking, uint256 _rethSupply) external; function executeUpdateBalances(uint256 _block, uint256 _totalEth, uint256 _stakingEth, uint256 _rethSupply) external; }
// SPDX-License-Identifier: MIT pragma solidity >0.5.0 <0.9.0; /** * @title ICrossDomainMessenger */ interface ICrossDomainMessenger { /********** * Events * **********/ event SentMessage( address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit ); event RelayedMessage(bytes32 indexed msgHash); event FailedRelayedMessage(bytes32 indexed msgHash); /************* * Variables * *************/ function xDomainMessageSender() external view returns (address); /******************** * Public Functions * ********************/ /** * Sends a cross domain message to the target messenger. * @param _target Target contract address. * @param _message Message to send to the target. * @param _gasLimit Gas limit for the provided message. */ function sendMessage( address _target, bytes calldata _message, uint32 _gasLimit ) external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.13; import "@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol"; /// @author Kane Wallmann (Rocket Pool) /// @notice Receives updates from L1 on the canonical rETH exchange rate contract RocketOvmPriceOracle { // Events event RateUpdated(uint256 rate); // Immutables ICrossDomainMessenger immutable ovmL2CrossDomainMessenger; /// @notice The rETH exchange rate in the form of how much ETH 1 rETH is worth uint256 public rate; /// @notice The timestamp of the block in which the rate was last updated uint256 public lastUpdated; /// @notice Set to the contract on L1 that has permission to update the rate address public owner; constructor(address _l2CrossDomainMessenger) { ovmL2CrossDomainMessenger = ICrossDomainMessenger(_l2CrossDomainMessenger); owner = msg.sender; } /// @notice Hands ownership to the L1 price messenger contract function setOwner(address _newOwner) external { require(msg.sender == owner, "Only owner"); owner = _newOwner; } /// @notice Called by the messenger contract on L1 to update the exchange rate function updateRate(uint256 _newRate) external { // Only calls originating from L1 owner can update the rate require( msg.sender == address(ovmL2CrossDomainMessenger) && ovmL2CrossDomainMessenger.xDomainMessageSender() == owner, "Only owner" ); // Set rate and last updated timestamp rate = _newRate; lastUpdated = block.timestamp; // Emit event emit RateUpdated(_newRate); } }
{ "remappings": [ "@eth-optimism/=lib/optimism/packages/contracts/", "@rocketpool/=lib/rocketpool/contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "fx-portal/=lib/fx-portal/contracts/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "optimism/=lib/optimism/", "rocketpool/=lib/rocketpool/", "v2-testnet-contracts/=lib/v2-testnet-contracts/", "src/=src/", "test/=test/" ], "optimizer": { "enabled": true, "runs": 10000 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract RocketStorageInterface","name":"_rocketStorage","type":"address"},{"internalType":"contract RocketOvmPriceOracle","name":"_rocketL2OvmPriceOracle","type":"address"},{"internalType":"contract ICrossDomainMessenger","name":"_ovmL1CrossDomainMessenger","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateStale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"submitRate","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61010060405234801561001157600080fd5b506040516106d03803806106d0833981016040819052610030916100c6565b6001600160a01b0392831660a05290821660c05216608052604080516f636f6e74726163742e6164647265737360801b6020828101919091527f726f636b65744e6574776f726b42616c616e63657300000000000000000000006030830152825160258184030181526045909201909252805191012060e052610113565b6001600160a01b03811681146100c357600080fd5b50565b6000806000606084860312156100db57600080fd5b83516100e6816100ae565b60208501519093506100f7816100ae565b6040850151909250610108816100ae565b809150509250925092565b60805160a05160c05160e05161058661014a600039600060ab015260006103480152600060eb0152600061031b01526105866000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632c4e722e146100465780639c14b3a814610061578063ee0eb4a11461006b575b600080fd5b61004e610083565b6040519081526020015b60405180910390f35b61006961026f565b005b6100736103a9565b6040519015158152602001610058565b6040517f21f8a7210000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906321f8a72190602401602060405180830381865afa158015610132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015691906103bc565b905060008173ffffffffffffffffffffffffffffffffffffffff1663c4c8d0ad6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c991906103f9565b9050806000036101dc5760009250505090565b808273ffffffffffffffffffffffffffffffffffffffff1663964d042c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024c91906103f9565b61025e90670de0b6b3a7640000610412565b6102689190610476565b9250505090565b610277610083565b6000819055604080516024808201939093528151808203909301835260440181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f69ea177100000000000000000000000000000000000000000000000000000000179052517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691633dbb202b91610375917f0000000000000000000000000000000000000000000000000000000000000000916207a120906004016104b1565b600060405180830381600087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b50505050565b600080546103b5610083565b1415905090565b6000602082840312156103ce57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146103f257600080fd5b9392505050565b60006020828403121561040b57600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610471577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b6000826104ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8416815260006020606081840152845180606085015260005b818110156104fb578681018301518582016080015282016104df565b8181111561050d576000608083870101525b5063ffffffff9490941660408401525050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016080019291505056fea2646970667358221220d09e858121f40cfbb257b37ef5629c6b47fff307c04bc4add57ef1aee2d12b4164736f6c634300080f00330000000000000000000000001d8f8f00cfa6758d7be78336684788fb0ee0fa46000000000000000000000000658843bb859b7b85ceab5cf77167e3f0a78dfe7f000000000000000000000000866e82a600a1414e583f7f13623f1ac5d58b0afa
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100415760003560e01c80632c4e722e146100465780639c14b3a814610061578063ee0eb4a11461006b575b600080fd5b61004e610083565b6040519081526020015b60405180910390f35b61006961026f565b005b6100736103a9565b6040519015158152602001610058565b6040517f21f8a7210000000000000000000000000000000000000000000000000000000081527f7630e125f1c009e5fc974f6dae77c6d5b1802979b36e6d7145463c21782af01e6004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001d8f8f00cfa6758d7be78336684788fb0ee0fa4616906321f8a72190602401602060405180830381865afa158015610132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015691906103bc565b905060008173ffffffffffffffffffffffffffffffffffffffff1663c4c8d0ad6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c991906103f9565b9050806000036101dc5760009250505090565b808273ffffffffffffffffffffffffffffffffffffffff1663964d042c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024c91906103f9565b61025e90670de0b6b3a7640000610412565b6102689190610476565b9250505090565b610277610083565b6000819055604080516024808201939093528151808203909301835260440181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f69ea177100000000000000000000000000000000000000000000000000000000179052517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000866e82a600a1414e583f7f13623f1ac5d58b0afa1691633dbb202b91610375917f000000000000000000000000658843bb859b7b85ceab5cf77167e3f0a78dfe7f916207a120906004016104b1565b600060405180830381600087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b50505050565b600080546103b5610083565b1415905090565b6000602082840312156103ce57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146103f257600080fd5b9392505050565b60006020828403121561040b57600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610471577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b6000826104ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8416815260006020606081840152845180606085015260005b818110156104fb578681018301518582016080015282016104df565b8181111561050d576000608083870101525b5063ffffffff9490941660408401525050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016080019291505056fea2646970667358221220d09e858121f40cfbb257b37ef5629c6b47fff307c04bc4add57ef1aee2d12b4164736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001d8f8f00cfa6758d7be78336684788fb0ee0fa46000000000000000000000000658843bb859b7b85ceab5cf77167e3f0a78dfe7f000000000000000000000000866e82a600a1414e583f7f13623f1ac5d58b0afa
-----Decoded View---------------
Arg [0] : _rocketStorage (address): 0x1d8f8f00cfa6758d7bE78336684788Fb0ee0Fa46
Arg [1] : _rocketL2OvmPriceOracle (address): 0x658843BB859B7b85cEAb5cF77167e3F0a78dFE7f
Arg [2] : _ovmL1CrossDomainMessenger (address): 0x866E82a600A1414e583f7F13623F1aC5d58b0Afa
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001d8f8f00cfa6758d7be78336684788fb0ee0fa46
Arg [1] : 000000000000000000000000658843bb859b7b85ceab5cf77167e3f0a78dfe7f
Arg [2] : 000000000000000000000000866e82a600a1414e583f7f13623f1ac5d58b0afa
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.