Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.006526406891376401 ETH
Eth Value
$15.96 (@ $2,445.33/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 111 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Rate | 20954150 | 14 hrs ago | IN | 0.00464324 ETH | 0.01321676 | ||||
Update Rate | 20939862 | 2 days ago | IN | 0.00482015 ETH | 0.02900936 | ||||
Update Rate | 20918335 | 5 days ago | IN | 0.00472408 ETH | 0.01623556 | ||||
Update Rate | 20903990 | 7 days ago | IN | 0.00462349 ETH | 0.00905035 | ||||
Update Rate | 20889632 | 9 days ago | IN | 0.0045727 ETH | 0.00808073 | ||||
Update Rate | 20868123 | 12 days ago | IN | 0.00510522 ETH | 0.08913596 | ||||
Update Rate | 20853776 | 14 days ago | IN | 0.00433399 ETH | 0.01073612 | ||||
Update Rate | 20839436 | 16 days ago | IN | 0.00476803 ETH | 0.02338452 | ||||
Update Rate | 20819061 | 19 days ago | IN | 0.00467166 ETH | 0.0519851 | ||||
Update Rate | 20819056 | 19 days ago | IN | 0.00467166 ETH | 0.05469583 | ||||
Update Rate | 20803594 | 21 days ago | IN | 0.00432538 ETH | 0.01183185 | ||||
Update Rate | 20789285 | 23 days ago | IN | 0.00454934 ETH | 0.02510244 | ||||
Update Rate | 20775690 | 25 days ago | IN | 0.004877 ETH | 0.00894406 | ||||
Update Rate | 20767816 | 26 days ago | IN | 0.00448047 ETH | 0.00578555 | ||||
Update Rate | 20753493 | 28 days ago | IN | 0.00413966 ETH | 0.00344445 | ||||
Update Rate | 20739173 | 30 days ago | IN | 0.00437999 ETH | 0.00375646 | ||||
Update Rate | 20717700 | 33 days ago | IN | 0.00438353 ETH | 0.00487704 | ||||
Update Rate | 20703373 | 35 days ago | IN | 0.00437301 ETH | 0.00357798 | ||||
Update Rate | 20689032 | 37 days ago | IN | 0.00411676 ETH | 0.00453267 | ||||
Update Rate | 20667530 | 40 days ago | IN | 0.00409826 ETH | 0.00325068 | ||||
Update Rate | 20653198 | 42 days ago | IN | 0.00411761 ETH | 0.00311198 | ||||
Update Rate | 20638872 | 44 days ago | IN | 0.0041269 ETH | 0.00328965 | ||||
Update Rate | 20617403 | 47 days ago | IN | 0.00377891 ETH | 0.00328588 | ||||
Update Rate | 20603090 | 49 days ago | IN | 0.0037883 ETH | 0.00358515 | ||||
Update Rate | 20588789 | 51 days ago | IN | 0.00381092 ETH | 0.00348917 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20954150 | 14 hrs ago | 0.00036708 ETH | ||||
20954150 | 14 hrs ago | 0.00058946 ETH | ||||
20954150 | 14 hrs ago | 0.0004532 ETH | ||||
20954150 | 14 hrs ago | 0.00043791 ETH | ||||
20954150 | 14 hrs ago | 0.00036718 ETH | ||||
20954150 | 14 hrs ago | 0.000409 ETH | ||||
20954150 | 14 hrs ago | 0.00040826 ETH | ||||
20954150 | 14 hrs ago | 0.00036724 ETH | ||||
20954150 | 14 hrs ago | 0.00046775 ETH | ||||
20954150 | 14 hrs ago | 0.00037277 ETH | ||||
20954150 | 14 hrs ago | 0.00040336 ETH | ||||
20939862 | 2 days ago | 0.00036708 ETH | ||||
20939862 | 2 days ago | 0.00058946 ETH | ||||
20939862 | 2 days ago | 0.00043324 ETH | ||||
20939862 | 2 days ago | 0.00044352 ETH | ||||
20939862 | 2 days ago | 0.00036713 ETH | ||||
20939862 | 2 days ago | 0.000409 ETH | ||||
20939862 | 2 days ago | 0.00040826 ETH | ||||
20939862 | 2 days ago | 0.00036724 ETH | ||||
20939862 | 2 days ago | 0.00060214 ETH | ||||
20939862 | 2 days ago | 0.00037439 ETH | ||||
20939862 | 2 days ago | 0.00045865 ETH | ||||
20918335 | 5 days ago | 0.00036708 ETH | ||||
20918335 | 5 days ago | 0.00058946 ETH | ||||
20918335 | 5 days ago | 0.00040131 ETH |
Loading...
Loading
Contract Name:
RSETHMultiChainRateProvider
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 10000 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.21; import { MultiChainRateProvider } from "./MultiChainRateProvider.sol"; import { ILRTOracle } from "../interfaces/ILRTOracle.sol"; /// @title rsETH multi chain rate provider /// @notice Provides the current exchange rate of rsETH to various receiver contract on a different chains contract RSETHMultiChainRateProvider is MultiChainRateProvider { address public rsETHPriceOracle; constructor(address _rsETHPriceOracle, address _layerZeroEndpoint) { rsETHPriceOracle = _rsETHPriceOracle; rateInfo = RateInfo({ tokenSymbol: "rsETH", tokenAddress: 0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7, // rsETH token address on ETH mainnet baseTokenSymbol: "ETH", baseTokenAddress: address(0) // Address 0 for native tokens }); layerZeroEndpoint = _layerZeroEndpoint; } /// @notice Returns the latest rate from the rsETH contract function getLatestRate() public view override returns (uint256) { return ILRTOracle(rsETHPriceOracle).rsETHPrice(); } /// @notice Calls the getLatestRate function and returns the rate function getRate() external view returns (uint256) { return getLatestRate(); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.21; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { ReentrancyGuard } from "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import { ILayerZeroEndpoint } from "../interfaces/ILayerZeroEndpoint.sol"; /// @title Multi chain rate provider. By witherblock reference: https://github.com/witherblock/gyarados /// @notice Provides a rate to a multiple receiver contracts on a different chain than the one this contract is deployed /// on /// @dev Powered using LayerZero, all chainId(s) references are for LayerZero chainIds and not blockchain chainIds abstract contract MultiChainRateProvider is Ownable, ReentrancyGuard { /// @notice Last rate updated on the provider uint256 public rate; /// @notice Last time rate was updated uint256 public lastUpdated; /// @notice LayerZero endpoint address address public layerZeroEndpoint; /// @notice Information of which token and base token rate is being provided RateInfo public rateInfo; /// @notice Rate receivers RateReceiver[] public rateReceivers; struct RateReceiver { uint16 _chainId; address _contract; } struct RateInfo { string tokenSymbol; address tokenAddress; string baseTokenSymbol; address baseTokenAddress; } /// @notice Emitted when rate is updated /// @param newRate the rate that was updated event RateUpdated(uint256 newRate); /// @notice Emitted when LayerZero Endpoint is updated /// @param newLayerZeroEndpoint the LayerZero Endpoint address that was updated event LayerZeroEndpointUpdated(address newLayerZeroEndpoint); /// @notice Emitted when RateReceiver is updated /// @param newRateReceiver the RateReceiver address that was updated event RateReceiverUpdated(address newRateReceiver); /// @notice Emitted when a new rate receiver is added /// @param newChainId the chainId of the rate receiver /// @param newContract the address of the rate receiver event RateReceiverAdded(uint16 newChainId, address newContract); /// @notice Emitted when a rate receiver is removed /// @param oldChainId the chainId of the rate receiver /// @param oldContract the address of the rate receiver event RateReceiverRemoved(uint16 oldChainId, address oldContract); /// @notice Updates the LayerZero Endpoint address /// @dev Can only be called by owner /// @param _layerZeroEndpoint the new layer zero endpoint address function updateLayerZeroEndpoint(address _layerZeroEndpoint) external onlyOwner { layerZeroEndpoint = _layerZeroEndpoint; emit LayerZeroEndpointUpdated(_layerZeroEndpoint); } /// @notice Adds a rate receiver /// @dev Can only be called by owner /// @param _chainId rate receiver chainId /// @param _contract rate receiver address function addRateReceiver(uint16 _chainId, address _contract) external onlyOwner { rateReceivers.push(RateReceiver({ _chainId: _chainId, _contract: _contract })); emit RateReceiverAdded(_chainId, _contract); } /// @notice Removes a rate receiver /// @dev Can only be called by owner /// @param _index the index of the rate receiver function removeRateReceiver(uint256 _index) external onlyOwner { // Store the rate receiver in a memory var RateReceiver memory _rateReceiverToBeRemoved = rateReceivers[_index]; // Get the current length of all the rate receivers uint256 rateReceiversLength = rateReceivers.length; // Get the last index of the all the rate receivers uint256 lastIndex = rateReceiversLength - 1; if (lastIndex != _index) { // Get the last rate receiver RateReceiver memory lastValue = rateReceivers[lastIndex]; // Replace the index value with the last index value rateReceivers[_index] = lastValue; } rateReceivers.pop(); emit RateReceiverRemoved(_rateReceiverToBeRemoved._chainId, _rateReceiverToBeRemoved._contract); } /// @notice Updates rate in this contract and on the receivers /// @dev This function is set to payable to pay for gas on execute lzReceive (on the receiver contract) /// on the destination chain. To compute the correct value to send check here - /// https://layerzero.gitbook.io/docs/evm-guides/code-examples/estimating-message-fees function updateRate() external payable nonReentrant { uint256 latestRate = getLatestRate(); rate = latestRate; lastUpdated = block.timestamp; bytes memory _payload = abi.encode(latestRate); uint256 rateReceiversLength = rateReceivers.length; for (uint256 i; i < rateReceiversLength;) { uint16 dstChainId = uint16(rateReceivers[i]._chainId); bytes memory remoteAndLocalAddresses = abi.encodePacked(rateReceivers[i]._contract, address(this)); (uint256 estimatedFee,) = ILayerZeroEndpoint(layerZeroEndpoint).estimateFees( dstChainId, address(this), _payload, false, bytes("") ); ILayerZeroEndpoint(layerZeroEndpoint).send{ value: estimatedFee }( dstChainId, remoteAndLocalAddresses, _payload, payable(msg.sender), address(0x0), bytes("") ); unchecked { ++i; } } emit RateUpdated(rate); } /// @notice Estimate the fees of sending an update to a receiver contract for a /// particular destination chain id /// @param _dstChainId desitnation chainId /// @return estimatedFee the estimated fee function estimateFees(uint16 _dstChainId) external view returns (uint256 estimatedFee) { uint256 latestRate = getLatestRate(); bytes memory _payload = abi.encode(latestRate); (estimatedFee,) = ILayerZeroEndpoint(layerZeroEndpoint).estimateFees(_dstChainId, address(this), _payload, false, bytes("")); } /// @notice Estimate the fees of sending an update to all chains/receiver contracts /// @return totalEstimatedFee the total estimated fee function estimateTotalFee() external view returns (uint256 totalEstimatedFee) { uint256 latestRate = getLatestRate(); bytes memory _payload = abi.encode(latestRate); uint256 rateReceiversLength = rateReceivers.length; for (uint256 i; i < rateReceiversLength;) { uint16 dstChainId = uint16(rateReceivers[i]._chainId); (uint256 estimatedFee,) = ILayerZeroEndpoint(layerZeroEndpoint).estimateFees( dstChainId, address(this), _payload, false, bytes("") ); totalEstimatedFee += estimatedFee; unchecked { ++i; } } } function getRateReceivers() external view returns (RateReceiver[] memory) { return rateReceivers; } /// @notice Returns the latest rate function getLatestRate() public view virtual returns (uint256) { } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.21; interface ILRTOracle { // events event AssetPriceOracleUpdate(address indexed asset, address indexed priceOracle); // methods function getAssetPrice(address asset) external view returns (uint256); function assetPriceOracle(address asset) external view returns (address); function rsETHPrice() external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; import "./ILayerZeroUserApplicationConfig.sol"; interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig { // @notice send a LayerZero message to the specified address at a LayerZero endpoint. // @param _dstChainId - the destination chain identifier // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains // @param _payload - a custom bytes payload to send to the destination contract // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the // additional amount to this address // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer // on destination function send( uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams ) external payable; // @notice used by the messaging library to publish verified payload // @param _srcChainId - the source chain identifier // @param _srcAddress - the source contract (as bytes) at the source chain // @param _dstAddress - the address on destination chain // @param _nonce - the unbound message ordering nonce // @param _gasLimit - the gas limit for external contract execution // @param _payload - verified payload to send to the destination contract function receivePayload( uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint256 _gasLimit, bytes calldata _payload ) external; // @notice get the inboundNonce of a lzApp from a source chain which could be EVM or non-EVM chain // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64); // @notice get the outboundNonce from this source chain which, consequently, is always an EVM // @param _srcAddress - the source chain contract address function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64); // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery // @param _dstChainId - the destination chain identifier // @param _userApplication - the user app address on this EVM chain // @param _payload - the custom message to send over LayerZero // @param _payInZRO - if false, user app pays the protocol fee in native token // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain function estimateFees( uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam ) external view returns (uint256 nativeFee, uint256 zroFee); // @notice get this Endpoint's immutable source identifier function getChainId() external view returns (uint16); // @notice the interface to retry failed message on this Endpoint destination // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address // @param _payload - the payload to be retried function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external; // @notice query if any STORED payload (message blocking) at the endpoint. // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool); // @notice query if the _libraryAddress is valid for sending msgs. // @param _userApplication - the user app address on this EVM chain function getSendLibraryAddress(address _userApplication) external view returns (address); // @notice query if the _libraryAddress is valid for receiving msgs. // @param _userApplication - the user app address on this EVM chain function getReceiveLibraryAddress(address _userApplication) external view returns (address); // @notice query if the non-reentrancy guard for send() is on // @return true if the guard is on. false otherwise function isSendingPayload() external view returns (bool); // @notice query if the non-reentrancy guard for receive() is on // @return true if the guard is on. false otherwise function isReceivingPayload() external view returns (bool); // @notice get the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _userApplication - the contract address of the user application // @param _configType - type of configuration. every messaging library has its own convention. function getConfig( uint16 _version, uint16 _chainId, address _userApplication, uint256 _configType ) external view returns (bytes memory); // @notice get the send() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getSendVersion(address _userApplication) external view returns (uint16); // @notice get the lzReceive() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getReceiveVersion(address _userApplication) external view returns (uint16); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface ILayerZeroUserApplicationConfig { // @notice set the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _configType - type of configuration. every messaging library has its own convention. // @param _config - configuration in the bytes. can encode arbitrary content. function setConfig(uint16 _version, uint16 _chainId, uint256 _configType, bytes calldata _config) external; // @notice set the send() LayerZero messaging library version to _version // @param _version - new messaging library version function setSendVersion(uint16 _version) external; // @notice set the lzReceive() LayerZero messaging library version to _version // @param _version - new messaging library version function setReceiveVersion(uint16 _version) external; // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload // @param _srcChainId - the chainId of the source chain // @param _srcAddress - the contract address of the source contract at the source chain function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external; }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "hardhat/=node_modules/hardhat/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/", "solidity-code-metrics/=node_modules/solidity-code-metrics/" ], "optimizer": { "enabled": true, "runs": 10000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "shanghai", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_rsETHPriceOracle","type":"address"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newLayerZeroEndpoint","type":"address"}],"name":"LayerZeroEndpointUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newChainId","type":"uint16"},{"indexed":false,"internalType":"address","name":"newContract","type":"address"}],"name":"RateReceiverAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"oldChainId","type":"uint16"},{"indexed":false,"internalType":"address","name":"oldContract","type":"address"}],"name":"RateReceiverRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRateReceiver","type":"address"}],"name":"RateReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"RateUpdated","type":"event"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_contract","type":"address"}],"name":"addRateReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"}],"name":"estimateFees","outputs":[{"internalType":"uint256","name":"estimatedFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"estimateTotalFee","outputs":[{"internalType":"uint256","name":"totalEstimatedFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateReceivers","outputs":[{"components":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_contract","type":"address"}],"internalType":"struct MultiChainRateProvider.RateReceiver[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"layerZeroEndpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateInfo","outputs":[{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"baseTokenSymbol","type":"string"},{"internalType":"address","name":"baseTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rateReceivers","outputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_contract","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"removeRateReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rsETHPriceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"name":"updateLayerZeroEndpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateRate","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405234801562000010575f80fd5b506040516200186b3803806200186b8339810160408190526200003391620001c0565b6200003e3362000155565b60018055600a80546001600160a01b0319166001600160a01b0384161790556040805160c081018252600560808201818152640e4e68aa8960db1b60a0840152825273a1290d69c65a6fe4df752f95823fae25cb99e5a760208084019190915283518085018552600381526208aa8960eb1b91810191909152928201929092525f606082015280519091908190620000d7908262000296565b5060208201516001820180546001600160a01b0319166001600160a01b039092169190911790556040820151600282019062000114908262000296565b5060609190910151600390910180546001600160a01b039283166001600160a01b03199182161790915560048054939092169216919091179055506200035e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001bb575f80fd5b919050565b5f8060408385031215620001d2575f80fd5b620001dd83620001a4565b9150620001ed60208401620001a4565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200021f57607f821691505b6020821081036200023e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000291575f81815260208120601f850160051c810160208610156200026c5750805b601f850160051c820191505b818110156200028d5782815560010162000278565b5050505b505050565b81516001600160401b03811115620002b257620002b2620001f6565b620002ca81620002c384546200020a565b8462000244565b602080601f83116001811462000300575f8415620002e85750858301515b5f19600386901b1c1916600185901b1785556200028d565b5f85815260208120601f198616915b8281101562000330578886015182559484019460019091019084016200030f565b50858210156200034e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6114ff806200036c5f395ff3fe608060405260043610610123575f3560e01c80638390a48c116100a1578063c7fee63e11610071578063d3514ad711610057578063d3514ad714610340578063e1e7ff771461035f578063f2fde38b14610373575f80fd5b8063c7fee63e14610323578063d0b06f5d1461032b575f80fd5b80638390a48c1461029b5780638da5cb5b146102ba578063a6b5a4f8146102e3578063b02d032214610302575f80fd5b80634a7f931e116100f6578063690adb53116100dc578063690adb531461024f578063702de1e314610273578063715018a614610287575f80fd5b80634a7f931e1461021a578063679aefce1461023b575f80fd5b806307968db1146101275780632c4e722e1461017d5780632ff4fd96146101a0578063458e7836146101ee575b5f80fd5b348015610132575f80fd5b506004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610188575f80fd5b5061019260025481565b604051908152602001610174565b3480156101ab575f80fd5b506101bf6101ba3660046110e2565b610392565b6040805161ffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201610174565b3480156101f9575f80fd5b50600a546101539073ffffffffffffffffffffffffffffffffffffffff1681565b348015610225575f80fd5b50610239610234366004611121565b6103d2565b005b348015610246575f80fd5b50610192610453565b34801561025a575f80fd5b50610263610461565b60405161017494939291906111a2565b34801561027e575f80fd5b506101926105bb565b348015610292575f80fd5b50610239610707565b3480156102a6575f80fd5b506102396102b53660046110e2565b61071a565b3480156102c5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610153565b3480156102ee575f80fd5b506101926102fd366004611209565b610935565b34801561030d575f80fd5b50610316610a2d565b6040516101749190611222565b610239610aae565b348015610336575f80fd5b5061019260035481565b34801561034b575f80fd5b5061023961035a36600461128a565b610d4a565b34801561036a575f80fd5b50610192610e2e565b34801561037e575f80fd5b5061023961038d366004611121565b610ebf565b600981815481106103a1575f80fd5b5f9182526020909120015461ffff8116915062010000900473ffffffffffffffffffffffffffffffffffffffff1682565b6103da610f7b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f07ac75b380fe4c5e41ea9b7030179bb21229b84ab9f9ba2fabebccd430ae2f6d9060200160405180910390a150565b5f61045c610e2e565b905090565b600580548190610470906112bb565b80601f016020809104026020016040519081016040528092919081815260200182805461049c906112bb565b80156104e75780601f106104be576101008083540402835291602001916104e7565b820191905f5260205f20905b8154815290600101906020018083116104ca57829003601f168201915b5050506001840154600285018054949573ffffffffffffffffffffffffffffffffffffffff90921694919350915061051e906112bb565b80601f016020809104026020016040519081016040528092919081815260200182805461054a906112bb565b80156105955780601f1061056c57610100808354040283529160200191610595565b820191905f5260205f20905b81548152906001019060200180831161057857829003601f168201915b5050506003909301549192505073ffffffffffffffffffffffffffffffffffffffff1684565b5f806105c5610e2e565b90505f816040516020016105db91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526009549091505f5b81811015610700575f6009828154811061062d5761062d61130c565b5f91825260208083209091015460048054604080519485018152858552517f40a7bb1000000000000000000000000000000000000000000000000000000000815261ffff909316955073ffffffffffffffffffffffffffffffffffffffff16926340a7bb10926106a692879230928c9289929101611339565b6040805180830381865afa1580156106c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e49190611397565b5090506106f181886113e6565b96508260010192505050610611565b5050505090565b61070f610f7b565b6107185f610ffb565b565b610722610f7b565b5f600982815481106107365761073661130c565b5f91825260208083206040805180820190915292015461ffff8116835262010000900473ffffffffffffffffffffffffffffffffffffffff1690820152600954909250906107856001836113ff565b905083811461085f575f600982815481106107a2576107a261130c565b5f9182526020918290206040805180820190915291015461ffff8116825262010000900473ffffffffffffffffffffffffffffffffffffffff1691810191909152600980549192508291879081106107fc576107fc61130c565b5f918252602091829020835191018054939092015173ffffffffffffffffffffffffffffffffffffffff1662010000027fffffffffffffffffffff0000000000000000000000000000000000000000000090931661ffff90911617919091179055505b600980548061087057610870611412565b5f82815260209081902082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffff000000000000000000000000000000000000000000001690559091019091558351908401516040517fbdfb596025f3c8785cf2659a6b5cfa6cbda8f98c9941b836110d632b747b718a9261092792909161ffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a150505050565b5f8061093f610e2e565b90505f8160405160200161095591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152600480546020850184525f80865293517f40a7bb1000000000000000000000000000000000000000000000000000000000815292955073ffffffffffffffffffffffffffffffffffffffff16936340a7bb10936109e6938a933093899392909101611339565b6040805180830381865afa158015610a00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a249190611397565b50949350505050565b60606009805480602002602001604051908101604052809291908181526020015f905b82821015610aa5575f848152602090819020604080518082019091529084015461ffff8116825262010000900473ffffffffffffffffffffffffffffffffffffffff1681830152825260019092019101610a50565b50505050905090565b610ab661106f565b5f610abf610e2e565b60028190554260035560408051602080820184905282518083039091018152908201909152600954919250905f5b81811015610d02575f60098281548110610b0957610b0961130c565b5f9182526020822001546009805461ffff90921693509084908110610b3057610b3061130c565b5f91825260209182902001546040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000062010000909204606090811b8316938201939093523090921b166034820152604801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152600480546020850184525f80865293517f40a7bb10000000000000000000000000000000000000000000000000000000008152929550929373ffffffffffffffffffffffffffffffffffffffff909316926340a7bb1092610c1792889230928d9289929101611339565b6040805180830381865afa158015610c31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c559190611397565b5060048054604080516020810182525f80825291517fc580310000000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff9092169363c5803100938693610cc6938a938a938f9333939290910161143f565b5f604051808303818588803b158015610cdd575f80fd5b505af1158015610cef573d5f803e3d5ffd5b5050505050836001019350505050610aed565b507fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b600254604051610d3691815260200190565b60405180910390a150505061071860018055565b610d52610f7b565b60408051808201825261ffff84811680835273ffffffffffffffffffffffffffffffffffffffff8581166020808601828152600980546001810182555f9190915296517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af9097018054915190941662010000027fffffffffffffffffffff0000000000000000000000000000000000000000000090911696909516959095179390931790558351908152918201527efad0fee0b60ff385f6873c27a2249190a10505cc95e310241580b50712a201910160405180910390a15050565b600a54604080517fb4b4643400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163b4b464349160048083019260209291908290030181865afa158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045c91906114b2565b610ec7610f7b565b73ffffffffffffffffffffffffffffffffffffffff8116610f6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610f7881610ffb565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f66565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600154036110db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f66565b6002600155565b5f602082840312156110f2575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461111c575f80fd5b919050565b5f60208284031215611131575f80fd5b61113a826110f9565b9392505050565b5f81518084525f5b8181101561116557602081850181015186830182015201611149565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b608081525f6111b46080830187611141565b73ffffffffffffffffffffffffffffffffffffffff808716602085015283820360408501526111e38287611141565b92508085166060850152505095945050505050565b803561ffff8116811461111c575f80fd5b5f60208284031215611219575f80fd5b61113a826111f8565b602080825282518282018190525f919060409081850190868401855b8281101561127d578151805161ffff16855286015173ffffffffffffffffffffffffffffffffffffffff1686850152928401929085019060010161123e565b5091979650505050505050565b5f806040838503121561129b575f80fd5b6112a4836111f8565b91506112b2602084016110f9565b90509250929050565b600181811c908216806112cf57607f821691505b602082108103611306577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61ffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015260a060408201525f61137160a0830186611141565b8415156060840152828103608084015261138b8185611141565b98975050505050505050565b5f80604083850312156113a8575f80fd5b505080516020909101519092909150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113f9576113f96113b9565b92915050565b818103818111156113f9576113f96113b9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61ffff8716815260c060208201525f61145b60c0830188611141565b828103604084015261146d8188611141565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a085015290506114a58185611141565b9998505050505050505050565b5f602082840312156114c2575f80fd5b505191905056fea2646970667358221220150da6c0755bf454b789e244d23a173a373a9c24fa9812b2198620e413b1c5ee64736f6c63430008150033000000000000000000000000349a73444b1a310bae67ef67973022020d70020d00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Deployed Bytecode
0x608060405260043610610123575f3560e01c80638390a48c116100a1578063c7fee63e11610071578063d3514ad711610057578063d3514ad714610340578063e1e7ff771461035f578063f2fde38b14610373575f80fd5b8063c7fee63e14610323578063d0b06f5d1461032b575f80fd5b80638390a48c1461029b5780638da5cb5b146102ba578063a6b5a4f8146102e3578063b02d032214610302575f80fd5b80634a7f931e116100f6578063690adb53116100dc578063690adb531461024f578063702de1e314610273578063715018a614610287575f80fd5b80634a7f931e1461021a578063679aefce1461023b575f80fd5b806307968db1146101275780632c4e722e1461017d5780632ff4fd96146101a0578063458e7836146101ee575b5f80fd5b348015610132575f80fd5b506004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610188575f80fd5b5061019260025481565b604051908152602001610174565b3480156101ab575f80fd5b506101bf6101ba3660046110e2565b610392565b6040805161ffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201610174565b3480156101f9575f80fd5b50600a546101539073ffffffffffffffffffffffffffffffffffffffff1681565b348015610225575f80fd5b50610239610234366004611121565b6103d2565b005b348015610246575f80fd5b50610192610453565b34801561025a575f80fd5b50610263610461565b60405161017494939291906111a2565b34801561027e575f80fd5b506101926105bb565b348015610292575f80fd5b50610239610707565b3480156102a6575f80fd5b506102396102b53660046110e2565b61071a565b3480156102c5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610153565b3480156102ee575f80fd5b506101926102fd366004611209565b610935565b34801561030d575f80fd5b50610316610a2d565b6040516101749190611222565b610239610aae565b348015610336575f80fd5b5061019260035481565b34801561034b575f80fd5b5061023961035a36600461128a565b610d4a565b34801561036a575f80fd5b50610192610e2e565b34801561037e575f80fd5b5061023961038d366004611121565b610ebf565b600981815481106103a1575f80fd5b5f9182526020909120015461ffff8116915062010000900473ffffffffffffffffffffffffffffffffffffffff1682565b6103da610f7b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f07ac75b380fe4c5e41ea9b7030179bb21229b84ab9f9ba2fabebccd430ae2f6d9060200160405180910390a150565b5f61045c610e2e565b905090565b600580548190610470906112bb565b80601f016020809104026020016040519081016040528092919081815260200182805461049c906112bb565b80156104e75780601f106104be576101008083540402835291602001916104e7565b820191905f5260205f20905b8154815290600101906020018083116104ca57829003601f168201915b5050506001840154600285018054949573ffffffffffffffffffffffffffffffffffffffff90921694919350915061051e906112bb565b80601f016020809104026020016040519081016040528092919081815260200182805461054a906112bb565b80156105955780601f1061056c57610100808354040283529160200191610595565b820191905f5260205f20905b81548152906001019060200180831161057857829003601f168201915b5050506003909301549192505073ffffffffffffffffffffffffffffffffffffffff1684565b5f806105c5610e2e565b90505f816040516020016105db91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526009549091505f5b81811015610700575f6009828154811061062d5761062d61130c565b5f91825260208083209091015460048054604080519485018152858552517f40a7bb1000000000000000000000000000000000000000000000000000000000815261ffff909316955073ffffffffffffffffffffffffffffffffffffffff16926340a7bb10926106a692879230928c9289929101611339565b6040805180830381865afa1580156106c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e49190611397565b5090506106f181886113e6565b96508260010192505050610611565b5050505090565b61070f610f7b565b6107185f610ffb565b565b610722610f7b565b5f600982815481106107365761073661130c565b5f91825260208083206040805180820190915292015461ffff8116835262010000900473ffffffffffffffffffffffffffffffffffffffff1690820152600954909250906107856001836113ff565b905083811461085f575f600982815481106107a2576107a261130c565b5f9182526020918290206040805180820190915291015461ffff8116825262010000900473ffffffffffffffffffffffffffffffffffffffff1691810191909152600980549192508291879081106107fc576107fc61130c565b5f918252602091829020835191018054939092015173ffffffffffffffffffffffffffffffffffffffff1662010000027fffffffffffffffffffff0000000000000000000000000000000000000000000090931661ffff90911617919091179055505b600980548061087057610870611412565b5f82815260209081902082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffff000000000000000000000000000000000000000000001690559091019091558351908401516040517fbdfb596025f3c8785cf2659a6b5cfa6cbda8f98c9941b836110d632b747b718a9261092792909161ffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a150505050565b5f8061093f610e2e565b90505f8160405160200161095591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152600480546020850184525f80865293517f40a7bb1000000000000000000000000000000000000000000000000000000000815292955073ffffffffffffffffffffffffffffffffffffffff16936340a7bb10936109e6938a933093899392909101611339565b6040805180830381865afa158015610a00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a249190611397565b50949350505050565b60606009805480602002602001604051908101604052809291908181526020015f905b82821015610aa5575f848152602090819020604080518082019091529084015461ffff8116825262010000900473ffffffffffffffffffffffffffffffffffffffff1681830152825260019092019101610a50565b50505050905090565b610ab661106f565b5f610abf610e2e565b60028190554260035560408051602080820184905282518083039091018152908201909152600954919250905f5b81811015610d02575f60098281548110610b0957610b0961130c565b5f9182526020822001546009805461ffff90921693509084908110610b3057610b3061130c565b5f91825260209182902001546040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000062010000909204606090811b8316938201939093523090921b166034820152604801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152600480546020850184525f80865293517f40a7bb10000000000000000000000000000000000000000000000000000000008152929550929373ffffffffffffffffffffffffffffffffffffffff909316926340a7bb1092610c1792889230928d9289929101611339565b6040805180830381865afa158015610c31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c559190611397565b5060048054604080516020810182525f80825291517fc580310000000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff9092169363c5803100938693610cc6938a938a938f9333939290910161143f565b5f604051808303818588803b158015610cdd575f80fd5b505af1158015610cef573d5f803e3d5ffd5b5050505050836001019350505050610aed565b507fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b600254604051610d3691815260200190565b60405180910390a150505061071860018055565b610d52610f7b565b60408051808201825261ffff84811680835273ffffffffffffffffffffffffffffffffffffffff8581166020808601828152600980546001810182555f9190915296517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af9097018054915190941662010000027fffffffffffffffffffff0000000000000000000000000000000000000000000090911696909516959095179390931790558351908152918201527efad0fee0b60ff385f6873c27a2249190a10505cc95e310241580b50712a201910160405180910390a15050565b600a54604080517fb4b4643400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163b4b464349160048083019260209291908290030181865afa158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045c91906114b2565b610ec7610f7b565b73ffffffffffffffffffffffffffffffffffffffff8116610f6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610f7881610ffb565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f66565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600154036110db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f66565b6002600155565b5f602082840312156110f2575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461111c575f80fd5b919050565b5f60208284031215611131575f80fd5b61113a826110f9565b9392505050565b5f81518084525f5b8181101561116557602081850181015186830182015201611149565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b608081525f6111b46080830187611141565b73ffffffffffffffffffffffffffffffffffffffff808716602085015283820360408501526111e38287611141565b92508085166060850152505095945050505050565b803561ffff8116811461111c575f80fd5b5f60208284031215611219575f80fd5b61113a826111f8565b602080825282518282018190525f919060409081850190868401855b8281101561127d578151805161ffff16855286015173ffffffffffffffffffffffffffffffffffffffff1686850152928401929085019060010161123e565b5091979650505050505050565b5f806040838503121561129b575f80fd5b6112a4836111f8565b91506112b2602084016110f9565b90509250929050565b600181811c908216806112cf57607f821691505b602082108103611306577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61ffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015260a060408201525f61137160a0830186611141565b8415156060840152828103608084015261138b8185611141565b98975050505050505050565b5f80604083850312156113a8575f80fd5b505080516020909101519092909150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113f9576113f96113b9565b92915050565b818103818111156113f9576113f96113b9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61ffff8716815260c060208201525f61145b60c0830188611141565b828103604084015261146d8188611141565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a085015290506114a58185611141565b9998505050505050505050565b5f602082840312156114c2575f80fd5b505191905056fea2646970667358221220150da6c0755bf454b789e244d23a173a373a9c24fa9812b2198620e413b1c5ee64736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000349a73444b1a310bae67ef67973022020d70020d00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
-----Decoded View---------------
Arg [0] : _rsETHPriceOracle (address): 0x349A73444b1a310BAe67ef67973022020d70020d
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000349a73444b1a310bae67ef67973022020d70020d
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,445.33 | 0.00652641 | $15.96 |
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.