Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Rate | 19345806 | 177 days ago | IN | 0.01 ETH | 0.00956867 | ||||
Update Rate | 19136920 | 206 days ago | IN | 0.01 ETH | 0.0059319 | ||||
Transfer Ownersh... | 19035450 | 221 days ago | IN | 0 ETH | 0.00161355 | ||||
Update Rate | 19028525 | 222 days ago | IN | 0.01 ETH | 0.01100826 | ||||
Update Rate Rece... | 19027743 | 222 days ago | IN | 0 ETH | 0.00258137 | ||||
0x60806040 | 19027572 | 222 days ago | IN | 0 ETH | 0.0480474 |
Loading...
Loading
Contract Name:
RSETHRateProvider
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 { CrossChainRateProvider } from "./CrossChainRateProvider.sol"; import { ILRTOracle } from "../interfaces/ILRTOracle.sol"; /// @title rsETH cross chain rate provider /// @notice Provides the current exchange rate of rsETH to a receiver contract on a different chain than the one this /// contract is deployed on contract RSETHRateProvider is CrossChainRateProvider { address public rsETHPriceOracle; constructor(address _rsETHPriceOracle, uint16 _dstChainId, 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 }); dstChainId = _dstChainId; layerZeroEndpoint = _layerZeroEndpoint; } /// @notice Returns the latest rate from the rsETH contract function getLatestRate() public view override returns (uint256) { return ILRTOracle(rsETHPriceOracle).rsETHPrice(); } }
// 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 Cross chain rate provider. By witherblock reference: https://github.com/witherblock/gyarados /// @notice Provides a rate to a receiver contract on a different chain than the one this contract is deployed on /// @dev Powered using LayerZero abstract contract CrossChainRateProvider is Ownable, ReentrancyGuard { /// @notice Last rate updated on the provider uint256 public rate; /// @notice Last time rate was updated uint256 public lastUpdated; /// @notice Destination chainId uint16 public dstChainId; /// @notice LayerZero endpoint address address public layerZeroEndpoint; /// @notice Rate Reciever address address address public rateReceiver; /// @notice Information of which token and base token rate is being provided RateInfo public rateInfo; 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 the destination chainId is updated /// @param newDstChainId the destination chainId that was updated event DstChainIdUpdated(uint16 newDstChainId); /// @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 Updates the RateReceiver address /// @dev Can only be called by owner /// @param _rateReceiver the new rate receiver address function updateRateReceiver(address _rateReceiver) external onlyOwner { rateReceiver = _rateReceiver; emit RateReceiverUpdated(_rateReceiver); } /// @notice Updates the destination chainId /// @dev Can only be called by owner /// @param _dstChainId the destination chainId function updateDstChainId(uint16 _dstChainId) external onlyOwner { dstChainId = _dstChainId; emit DstChainIdUpdated(_dstChainId); } /// @notice Updates rate in this contract and on the receiver /// @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(); bytes memory remoteAndLocalAddresses = abi.encodePacked(rateReceiver, address(this)); rate = latestRate; lastUpdated = block.timestamp; bytes memory _payload = abi.encode(latestRate); ILayerZeroEndpoint(layerZeroEndpoint).send{ value: msg.value }( dstChainId, remoteAndLocalAddresses, _payload, payable(msg.sender), address(0x0), bytes("") ); emit RateUpdated(rate); } /// @notice Returns the latest rate function getLatestRate() public view virtual returns (uint256) { } }
// SPDX-License-Identifier: GPL-3.0-or-later 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":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newDstChainId","type":"uint16"}],"name":"DstChainIdUpdated","type":"event"},{"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":"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":[],"name":"dstChainId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"rateReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uint16","name":"_dstChainId","type":"uint16"}],"name":"updateDstChainId","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"},{"inputs":[{"internalType":"address","name":"_rateReceiver","type":"address"}],"name":"updateRateReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801562000010575f80fd5b5060405162000fb838038062000fb88339810160408190526200003391620001d5565b6200003e336200016a565b60018055600a80546001600160a01b0319166001600160a01b0385161790556040805160c081018252600560808201908152640e4e68aa8960db1b60a0830152815273a1290d69c65a6fe4df752f95823fae25cb99e5a760208083019190915282518084018452600381526208aa8960eb1b91810191909152918101919091525f606082015280516006908190620000d79082620002c3565b5060208201516001820180546001600160a01b0319166001600160a01b0390921691909117905560408201516002820190620001149082620002c3565b5060609190910151600390910180546001600160a01b039283166001600160a01b0319909116179055600480549290911662010000026001600160b01b031990921661ffff90931692909217179055506200038b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001d0575f80fd5b919050565b5f805f60608486031215620001e8575f80fd5b620001f384620001b9565b9250602084015161ffff811681146200020a575f80fd5b91506200021a60408501620001b9565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200024c57607f821691505b6020821081036200026b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002be575f81815260208120601f850160051c81016020861015620002995750805b601f850160051c820191505b81811015620002ba57828155600101620002a5565b5050505b505050565b81516001600160401b03811115620002df57620002df62000223565b620002f781620002f0845462000237565b8462000271565b602080601f8311600181146200032d575f8415620003155750858301515b5f19600386901b1c1916600185901b178555620002ba565b5f85815260208120601f198616915b828110156200035d578886015182559484019460019091019084016200033c565b50858210156200037b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b610c1f80620003995f395ff3fe6080604052600436106100e4575f3560e01c80636d5074f311610087578063c7fee63e11610057578063c7fee63e146102ac578063d0b06f5d146102b4578063e1e7ff77146102c9578063f2fde38b146102dd575f80fd5b80636d5074f314610224578063715018a6146102435780638409c02d146102575780638da5cb5b14610283575f80fd5b806343b09696116100c257806343b0969614610194578063458e7836146101b55780634a7f931e146101e1578063690adb5314610200575f80fd5b806307968db1146100e85780632c4e722e1461014457806330c593f714610167575b5f80fd5b3480156100f3575f80fd5b5060045461011a9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561014f575f80fd5b5061015960025481565b60405190815260200161013b565b348015610172575f80fd5b506004546101819061ffff1681565b60405161ffff909116815260200161013b565b34801561019f575f80fd5b506101b36101ae3660046109fc565b6102fc565b005b3480156101c0575f80fd5b50600a5461011a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101ec575f80fd5b506101b36101fb366004610a24565b61036c565b34801561020b575f80fd5b506102146103ef565b60405161013b9493929190610ab8565b34801561022f575f80fd5b506101b361023e366004610a24565b610549565b34801561024e575f80fd5b506101b36105c4565b348015610262575f80fd5b5060055461011a9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561028e575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661011a565b6101b36105d7565b3480156102bf575f80fd5b5061015960035481565b3480156102d4575f80fd5b50610159610743565b3480156102e8575f80fd5b506101b36102f7366004610a24565b6107d9565b610304610895565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83169081179091556040519081527f02d97213a69adb7e990b3889ee1e5a35a5311c573b5edff7195f666f29fcbc14906020015b60405180910390a150565b610374610895565b600480547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f07ac75b380fe4c5e41ea9b7030179bb21229b84ab9f9ba2fabebccd430ae2f6d90602001610361565b6006805481906103fe90610b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461042a90610b0e565b80156104755780601f1061044c57610100808354040283529160200191610475565b820191905f5260205f20905b81548152906001019060200180831161045857829003601f168201915b5050506001840154600285018054949573ffffffffffffffffffffffffffffffffffffffff9092169491935091506104ac90610b0e565b80601f01602080910402602001604051908101604052809291908181526020018280546104d890610b0e565b80156105235780601f106104fa57610100808354040283529160200191610523565b820191905f5260205f20905b81548152906001019060200180831161050657829003601f168201915b5050506003909301549192505073ffffffffffffffffffffffffffffffffffffffff1684565b610551610895565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f68465609e5e89ba7ff8a874559f044ca413aba0312e4534e1b43d1e51887d8d390602001610361565b6105cc610895565b6105d55f610915565b565b6105df610989565b5f6105e8610743565b600554604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811660208301523090931b9092166034830152805180830360280181526048830182526002849055426003556068808401859052825180850390910181526004805460a8860185525f608890960186815294517fc58031000000000000000000000000000000000000000000000000000000000081529697509295919473ffffffffffffffffffffffffffffffffffffffff620100008504169463c58031009434946106ce9461ffff909216938a938a93339301610b5f565b5f604051808303818588803b1580156106e5575f80fd5b505af11580156106f7573d5f803e3d5ffd5b50505050507fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b60025460405161072f91815260200190565b60405180910390a15050506105d560018055565b600a54604080517fb4b4643400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163b4b464349160048083019260209291908290030181865afa1580156107b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d49190610bd2565b905090565b6107e1610895565b73ffffffffffffffffffffffffffffffffffffffff8116610889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61089281610915565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610880565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600154036109f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610880565b6002600155565b5f60208284031215610a0c575f80fd5b813561ffff81168114610a1d575f80fd5b9392505050565b5f60208284031215610a34575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610a1d575f80fd5b5f81518084525f5b81811015610a7b57602081850181015186830182015201610a5f565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b608081525f610aca6080830187610a57565b73ffffffffffffffffffffffffffffffffffffffff80871660208501528382036040850152610af98287610a57565b92508085166060850152505095945050505050565b600181811c90821680610b2257607f821691505b602082108103610b59577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b61ffff8716815260c060208201525f610b7b60c0830188610a57565b8281036040840152610b8d8188610a57565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a08501529050610bc58185610a57565b9998505050505050505050565b5f60208284031215610be2575f80fd5b505191905056fea2646970667358221220ede85c1e226a17c0dd8c11ab982a3ccbcffbd6ec41d9485d80f0351590bb3e2664736f6c63430008150033000000000000000000000000349a73444b1a310bae67ef67973022020d70020d000000000000000000000000000000000000000000000000000000000000009e00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Deployed Bytecode
0x6080604052600436106100e4575f3560e01c80636d5074f311610087578063c7fee63e11610057578063c7fee63e146102ac578063d0b06f5d146102b4578063e1e7ff77146102c9578063f2fde38b146102dd575f80fd5b80636d5074f314610224578063715018a6146102435780638409c02d146102575780638da5cb5b14610283575f80fd5b806343b09696116100c257806343b0969614610194578063458e7836146101b55780634a7f931e146101e1578063690adb5314610200575f80fd5b806307968db1146100e85780632c4e722e1461014457806330c593f714610167575b5f80fd5b3480156100f3575f80fd5b5060045461011a9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561014f575f80fd5b5061015960025481565b60405190815260200161013b565b348015610172575f80fd5b506004546101819061ffff1681565b60405161ffff909116815260200161013b565b34801561019f575f80fd5b506101b36101ae3660046109fc565b6102fc565b005b3480156101c0575f80fd5b50600a5461011a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101ec575f80fd5b506101b36101fb366004610a24565b61036c565b34801561020b575f80fd5b506102146103ef565b60405161013b9493929190610ab8565b34801561022f575f80fd5b506101b361023e366004610a24565b610549565b34801561024e575f80fd5b506101b36105c4565b348015610262575f80fd5b5060055461011a9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561028e575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661011a565b6101b36105d7565b3480156102bf575f80fd5b5061015960035481565b3480156102d4575f80fd5b50610159610743565b3480156102e8575f80fd5b506101b36102f7366004610a24565b6107d9565b610304610895565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83169081179091556040519081527f02d97213a69adb7e990b3889ee1e5a35a5311c573b5edff7195f666f29fcbc14906020015b60405180910390a150565b610374610895565b600480547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f07ac75b380fe4c5e41ea9b7030179bb21229b84ab9f9ba2fabebccd430ae2f6d90602001610361565b6006805481906103fe90610b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461042a90610b0e565b80156104755780601f1061044c57610100808354040283529160200191610475565b820191905f5260205f20905b81548152906001019060200180831161045857829003601f168201915b5050506001840154600285018054949573ffffffffffffffffffffffffffffffffffffffff9092169491935091506104ac90610b0e565b80601f01602080910402602001604051908101604052809291908181526020018280546104d890610b0e565b80156105235780601f106104fa57610100808354040283529160200191610523565b820191905f5260205f20905b81548152906001019060200180831161050657829003601f168201915b5050506003909301549192505073ffffffffffffffffffffffffffffffffffffffff1684565b610551610895565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f68465609e5e89ba7ff8a874559f044ca413aba0312e4534e1b43d1e51887d8d390602001610361565b6105cc610895565b6105d55f610915565b565b6105df610989565b5f6105e8610743565b600554604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811660208301523090931b9092166034830152805180830360280181526048830182526002849055426003556068808401859052825180850390910181526004805460a8860185525f608890960186815294517fc58031000000000000000000000000000000000000000000000000000000000081529697509295919473ffffffffffffffffffffffffffffffffffffffff620100008504169463c58031009434946106ce9461ffff909216938a938a93339301610b5f565b5f604051808303818588803b1580156106e5575f80fd5b505af11580156106f7573d5f803e3d5ffd5b50505050507fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b60025460405161072f91815260200190565b60405180910390a15050506105d560018055565b600a54604080517fb4b4643400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163b4b464349160048083019260209291908290030181865afa1580156107b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d49190610bd2565b905090565b6107e1610895565b73ffffffffffffffffffffffffffffffffffffffff8116610889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61089281610915565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610880565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600154036109f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610880565b6002600155565b5f60208284031215610a0c575f80fd5b813561ffff81168114610a1d575f80fd5b9392505050565b5f60208284031215610a34575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610a1d575f80fd5b5f81518084525f5b81811015610a7b57602081850181015186830182015201610a5f565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b608081525f610aca6080830187610a57565b73ffffffffffffffffffffffffffffffffffffffff80871660208501528382036040850152610af98287610a57565b92508085166060850152505095945050505050565b600181811c90821680610b2257607f821691505b602082108103610b59577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b61ffff8716815260c060208201525f610b7b60c0830188610a57565b8281036040840152610b8d8188610a57565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a08501529050610bc58185610a57565b9998505050505050505050565b5f60208284031215610be2575f80fd5b505191905056fea2646970667358221220ede85c1e226a17c0dd8c11ab982a3ccbcffbd6ec41d9485d80f0351590bb3e2664736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000349a73444b1a310bae67ef67973022020d70020d000000000000000000000000000000000000000000000000000000000000009e00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
-----Decoded View---------------
Arg [0] : _rsETHPriceOracle (address): 0x349A73444b1a310BAe67ef67973022020d70020d
Arg [1] : _dstChainId (uint16): 158
Arg [2] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000349a73444b1a310bae67ef67973022020d70020d
Arg [1] : 000000000000000000000000000000000000000000000000000000000000009e
Arg [2] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.