Overview
S Balance
S Value
$0.06 (@ $0.47/S)More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RemoteHop
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
No with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { IOAppComposer } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol";import { OFTComposeMsgCodec } from "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol";import { OptionsBuilder } from "@fraxfinance/layerzero-v2-upgradeable/oapp/contracts/oapp/libs/OptionsBuilder.sol";import { SendParam, MessagingFee, IOFT } from "@fraxfinance/layerzero-v2-upgradeable/oapp/contracts/oft/interfaces/IOFT.sol";import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import { IOFT2 } from "./interfaces/IOFT2.sol";import { ILayerZeroDVN } from "./interfaces/ILayerZeroDVN.sol";import { ILayerZeroTreasury } from "./interfaces/ILayerZeroTreasury.sol";import { IExecutor } from "./interfaces/IExecutor.sol";import { console } from "frax-std/FraxTest.sol";// ====================================================================// | ______ _______ |// | / _____________ __ __ / ____(_____ ____ _____ ________ |// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ |// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ |// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ |// | |// ====================================================================// ============================ RemoteHop =============================// ====================================================================
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)pragma solidity ^0.8.20;import {Context} from "../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.** The initial owner is set to the address provided by the deployer. 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;/*** @dev The caller account is not authorized to perform an operation.*/error OwnableUnauthorizedAccount(address account);
123456789101112// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { ILayerZeroComposer } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol";/*** @title IOAppComposer* @dev This interface defines the OApp Composer, allowing developers to inherit only the OApp package without the protocol.*/// solhint-disable-next-line no-empty-blocksinterface IOAppComposer is ILayerZeroComposer {}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;library OFTComposeMsgCodec {// Offset constants for decoding composed messagesuint8 private constant NONCE_OFFSET = 8;uint8 private constant SRC_EID_OFFSET = 12;uint8 private constant AMOUNT_LD_OFFSET = 44;uint8 private constant COMPOSE_FROM_OFFSET = 76;/*** @dev Encodes a OFT composed message.* @param _nonce The nonce value.* @param _srcEid The source endpoint ID.* @param _amountLD The amount in local decimals.* @param _composeMsg The composed message.* @return _msg The encoded Composed message.*/function encode(uint64 _nonce,uint32 _srcEid,uint256 _amountLD,bytes memory _composeMsg // 0x[composeFrom][composeMsg]) internal pure returns (bytes memory _msg) {_msg = abi.encodePacked(_nonce, _srcEid, _amountLD, _composeMsg);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { BytesLib } from "solidity-bytes-utils/contracts/BytesLib.sol";import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol";import { ExecutorOptions } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol";import { DVNOptions } from "@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol";/*** @title OptionsBuilder* @dev Library for building and encoding various message options.*/library OptionsBuilder {using SafeCast for uint256;using BytesLib for bytes;// Constants for options typesuint16 internal constant TYPE_1 = 1; // legacy options type 1uint16 internal constant TYPE_2 = 2; // legacy options type 2uint16 internal constant TYPE_3 = 3;// Custom error messageerror InvalidSize(uint256 max, uint256 actual);error InvalidOptionType(uint16 optionType);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { MessagingReceipt, MessagingFee } from "../../oapp/OAppSenderUpgradeable.sol";/*** @dev Struct representing token parameters for the OFT send() operation.*/struct SendParam {uint32 dstEid; // Destination endpoint ID.bytes32 to; // Recipient address.uint256 amountLD; // Amount to send in local decimals.uint256 minAmountLD; // Minimum amount to send in local decimals.bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.bytes composeMsg; // The composed message for the send() operation.bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.}/*** @dev Struct representing OFT limit information.* @dev These amounts can change dynamically and are up the the specific oft implementation.*/struct OFTLimit {uint256 minAmountLD; // Minimum amount in local decimals that can be sent to the recipient.uint256 maxAmountLD; // Maximum amount in local decimals that can be sent to the recipient.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";import {IERC20Permit} from "../extensions/IERC20Permit.sol";import {Address} from "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {using Address for address;/*** @dev An operation with an ERC20 token failed.*/error SafeERC20FailedOperation(address token);
12345678910// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface IOFT2 {function combineOptions(uint32 _eid,uint16 _msgType,bytes calldata _extraOptions) external view returns (bytes memory);}
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface ILayerZeroDVN {// @notice query the dvn fee for relaying block information to the destination chain// @param _dstEid the destination endpoint identifier// @param _confirmations - block confirmation delay before relaying blocks// @param _sender - the source sending contract address// @param _options - optionsfunction getFee(uint32 _dstEid,uint64 _confirmations,address _sender,bytes calldata _options) external view returns (uint256 fee);}
1234567891011// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface ILayerZeroTreasury {function getFee(address _sender,uint32 _dstEid,uint256 _totalNativeFee,bool _payInLzToken) external view returns (uint256 fee);}
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface IExecutor {// @notice query the executor price for relaying the payload and its proof to the destination chain// @param _dstEid - the destination endpoint identifier// @param _sender - the source sending contract address. executors may apply price discrimination to senders// @param _calldataSize - dynamic data size of message + caller params// @param _options - optional parameters for extra service plugins, e.g. sending dust tokens at the destination chainfunction getFee(uint32 _dstEid,address _sender,uint256 _calldataSize,bytes calldata _options) external view returns (uint256 price);}
12345678910111213141516171819202122232425// SPDX-License-Identifier: ISCpragma solidity >=0.8.0;import { console2 as console, StdAssertions, StdChains, StdCheats, stdError, StdInvariant, stdJson, stdMath, StdStorage, stdStorage, StdUtils, Vm,StdStyle, TestBase, DSTest, Test } from "forge-std/Test.sol";import { VmHelper } from "./VmHelper.sol";abstract contract FraxTest is VmHelper, Test {uint256[] internal snapShotIds;function()[] internal setupFunctions;modifier useMultipleSetupFunctions() {if (snapShotIds.length == 0) _;for (uint256 i = 0; i < snapShotIds.length; i++) {uint256 _originalSnapshotId = vm.snapshot();if (!vm.revertTo(snapShotIds[i])) {revert VmDidNotRevert(snapShotIds[i]);}_;vm.clearMockedCalls();vm.revertTo(_originalSnapshotId);}}function addSetupFunctions(function()[] memory _setupFunctions) internal {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;/*** @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;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;
12345678910111213141516171819202122232425// SPDX-License-Identifier: MITpragma solidity >=0.8.0;/*** @title ILayerZeroComposer*/interface ILayerZeroComposer {/*** @notice Composes a LayerZero message from an OApp.* @dev To ensure non-reentrancy, implementers of this interface MUST assert msg.sender is the corresponding EndpointV2 contract (i.e.,onlyEndpointV2).* @param _from The address initiating the composition, typically the OApp where the lzReceive was called.* @param _guid The unique identifier for the corresponding LayerZero src/dst tx.* @param _message The composed message payload in bytes. NOT necessarily the same payload passed via lzReceive.* @param _executor The address of the executor for the composed message.* @param _extraData Additional arbitrary data in bytes passed by the entity who executes the lzCompose.*/function lzCompose(address _from,bytes32 _guid,bytes calldata _message,address _executor,bytes calldata _extraData) external payable;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicense/** @title Solidity Bytes Arrays Utils* @author Gonçalo Sá <goncalo.sa@consensys.net>** @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity.* The library lets you concatenate, slice and type cast bytes arrays both in memory and storage.*/pragma solidity >=0.8.0 <0.9.0;library BytesLib {function concat(bytes memory _preBytes,bytes memory _postBytes)internalpurereturns (bytes memory){bytes memory tempBytes;assembly {// Get a location of some free memory and store it in tempBytes as// Solidity does for memory variables.tempBytes := mload(0x40)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)// This file was procedurally generated from scripts/generate/templates/SafeCast.js.pragma solidity ^0.8.20;/*** @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow* checks.** Downcasting from uint256/int256 in Solidity does not revert on overflow. This can* easily result in undesired exploitation or bugs, since developers usually* assume that overflows raise errors. `SafeCast` restores this intuition by* reverting the transaction when such an operation overflows.** Using this library instead of the unchecked operations eliminates an entire* class of bugs, so it's recommended to use it always.*/library SafeCast {/*** @dev Value doesn't fit in an uint of `bits` size.*/error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);/*** @dev An int value doesn't fit in an uint of `bits` size.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { CalldataBytesLib } from "../../libs/CalldataBytesLib.sol";library ExecutorOptions {using CalldataBytesLib for bytes;uint8 internal constant WORKER_ID = 1;uint8 internal constant OPTION_TYPE_LZRECEIVE = 1;uint8 internal constant OPTION_TYPE_NATIVE_DROP = 2;uint8 internal constant OPTION_TYPE_LZCOMPOSE = 3;uint8 internal constant OPTION_TYPE_ORDERED_EXECUTION = 4;error Executor_InvalidLzReceiveOption();error Executor_InvalidNativeDropOption();error Executor_InvalidLzComposeOption();/// @dev decode the next executor option from the options starting from the specified cursor/// @param _options [executor_id][executor_option][executor_id][executor_option].../// executor_option = [option_size][option_type][option]/// option_size = len(option_type) + len(option)/// executor_id: uint8, option_size: uint16, option_type: uint8, option: bytes/// @param _cursor the cursor to start decoding from
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { BytesLib } from "solidity-bytes-utils/contracts/BytesLib.sol";import { BitMap256 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol";import { CalldataBytesLib } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol";library DVNOptions {using CalldataBytesLib for bytes;using BytesLib for bytes;uint8 internal constant WORKER_ID = 2;uint8 internal constant OPTION_TYPE_PRECRIME = 1;error DVN_InvalidDVNIdx();error DVN_InvalidDVNOptions(uint256 cursor);/// @dev group dvn options by its idx/// @param _options [dvn_id][dvn_option][dvn_id][dvn_option].../// dvn_option = [option_size][dvn_idx][option_type][option]/// option_size = len(dvn_idx) + len(option_type) + len(option)/// dvn_id: uint8, dvn_idx: uint8, option_size: uint16, option_type: uint8, option: bytes/// @return dvnOptions the grouped options, still share the same format of _options/// @return dvnIndices the dvn indices
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { SafeERC20, IERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import { MessagingParams, MessagingFee, MessagingReceipt } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";import { OAppCoreUpgradeable } from "./OAppCoreUpgradeable.sol";/*** @title OAppSender* @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.*/abstract contract OAppSenderUpgradeable is OAppCoreUpgradeable {using SafeERC20 for IERC20;// Custom error messageserror NotEnoughNative(uint256 msgValue);error LzTokenUnavailable();// @dev The version of the OAppSender implementation.// @dev Version is bumped when changes are made to this contract.uint64 internal constant SENDER_VERSION = 1;/*** @dev Ownable is not initialized here on purpose. It should be initialized in the child contract to* accommodate the different version of Ownable.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.** ==== Security Considerations** There are two important considerations concerning the use of `permit`. The first is that a valid permit signature* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be* considered as an intention to spend the allowance in any specific way. The second is that because permits have* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be* generally recommended is:** ```solidity* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}* doThing(..., value);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)pragma solidity ^0.8.20;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev The ETH balance of the account is not enough to perform the operation.*/error AddressInsufficientBalance(address account);/*** @dev There's no code at `target` (it is not a contract).*/error AddressEmptyCode(address target);/*** @dev A call to an address target failed. The target may have reverted.*/error FailedInnerCall();/*** @dev Replacement for Solidity's `transfer`: sends `amount` wei to
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;pragma experimental ABIEncoderV2;// 💬 ABOUT// Standard Library's default Test// 🧩 MODULESimport {console} from "./console.sol";import {console2} from "./console2.sol";import {StdAssertions} from "./StdAssertions.sol";import {StdChains} from "./StdChains.sol";import {StdCheats} from "./StdCheats.sol";import {stdError} from "./StdError.sol";import {StdInvariant} from "./StdInvariant.sol";import {stdJson} from "./StdJson.sol";import {stdMath} from "./StdMath.sol";import {StdStorage, stdStorage} from "./StdStorage.sol";import {StdUtils} from "./StdUtils.sol";import {Vm} from "./Vm.sol";import {StdStyle} from "./StdStyle.sol";// 📦 BOILERPLATEimport {TestBase} from "./Base.sol";import {DSTest} from "ds-test/test.sol";
1234567891011121314151617181920212223242526pragma solidity >=0.8.0;import { CommonBase } from "forge-std/Base.sol";contract VmHelper is CommonBase {struct MineBlocksResult {uint256 timeElapsed;uint256 blocksElapsed;uint256 currentTimestamp;uint256 currentBlockNumber;}function mineOneBlock() public returns (MineBlocksResult memory result) {uint256 timeElapsed = 12;uint256 blocksElapsed = 1;vm.warp(block.timestamp + timeElapsed);vm.roll(block.number + blocksElapsed);result.timeElapsed = timeElapsed;result.blocksElapsed = blocksElapsed;result.currentTimestamp = block.timestamp;result.currentBlockNumber = block.number;}// helper to move forward multiple blocksfunction mineBlocks(uint256 _blocks) public returns (MineBlocksResult memory result) {uint256 timeElapsed = (12 * _blocks);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;library CalldataBytesLib {function toU8(bytes calldata _bytes, uint256 _start) internal pure returns (uint8) {return uint8(_bytes[_start]);}function toU16(bytes calldata _bytes, uint256 _start) internal pure returns (uint16) {unchecked {uint256 end = _start + 2;return uint16(bytes2(_bytes[_start:end]));}}function toU32(bytes calldata _bytes, uint256 _start) internal pure returns (uint32) {unchecked {uint256 end = _start + 4;return uint32(bytes4(_bytes[_start:end]));}}function toU64(bytes calldata _bytes, uint256 _start) internal pure returns (uint64) {unchecked {uint256 end = _start + 8;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// modified from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/structs/BitMaps.solpragma solidity ^0.8.20;type BitMap256 is uint256;using BitMaps for BitMap256 global;library BitMaps {/*** @dev Returns whether the bit at `index` is set.*/function get(BitMap256 bitmap, uint8 index) internal pure returns (bool) {uint256 mask = 1 << index;return BitMap256.unwrap(bitmap) & mask != 0;}/*** @dev Sets the bit at `index`.*/function set(BitMap256 bitmap, uint8 index) internal pure returns (BitMap256) {uint256 mask = 1 << index;return BitMap256.wrap(BitMap256.unwrap(bitmap) | mask);}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { IMessageLibManager } from "./IMessageLibManager.sol";import { IMessagingComposer } from "./IMessagingComposer.sol";import { IMessagingChannel } from "./IMessagingChannel.sol";import { IMessagingContext } from "./IMessagingContext.sol";struct MessagingParams {uint32 dstEid;bytes32 receiver;bytes message;bytes options;bool payInLzToken;}struct MessagingReceipt {bytes32 guid;uint64 nonce;MessagingFee fee;}struct MessagingFee {uint256 nativeFee;uint256 lzTokenFee;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";import { IOAppCore, ILayerZeroEndpointV2 } from "./interfaces/IOAppCore.sol";/*** @title OAppCore* @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.*/abstract contract OAppCoreUpgradeable is IOAppCore, OwnableUpgradeable {struct OAppCoreStorage {mapping(uint32 => bytes32) peers;}// keccak256(abi.encode(uint256(keccak256("layerzerov2.storage.oappcore")) - 1)) & ~bytes32(uint256(0xff))bytes32 private constant OAppCoreStorageLocation =0x72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900;function _getOAppCoreStorage() internal pure returns (OAppCoreStorage storage $) {assembly {$.slot := OAppCoreStorageLocation}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.4.22 <0.9.0;library console {address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);function _sendLogPayload(bytes memory payload) private view {uint256 payloadLength = payload.length;address consoleAddress = CONSOLE_ADDRESS;/// @solidity memory-safe-assemblyassembly {let payloadStart := add(payload, 32)let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)}}function log() internal view {_sendLogPayload(abi.encodeWithSignature("log()"));}function logInt(int p0) internal view {_sendLogPayload(abi.encodeWithSignature("log(int)", p0));}function logUint(uint p0) internal view {_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.4.22 <0.9.0;/// @dev The original console.sol uses `int` and `uint` for computing function selectors, but it should/// use `int256` and `uint256`. This modified version fixes that. This version is recommended/// over `console.sol` if you don't need compatibility with Hardhat as the logs will show up in/// forge stack traces. If you do need compatibility with Hardhat, you must use `console.sol`./// Reference: https://github.com/NomicFoundation/hardhat/issues/2178library console2 {address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);function _castLogPayloadViewToPure(function(bytes memory) internal view fnIn) internal pure returns (function(bytes memory) internal pure fnOut) {assembly {fnOut := fnIn}}function _sendLogPayload(bytes memory payload) internal pure {_castLogPayloadViewToPure(_sendLogPayloadView)(payload);}function _sendLogPayloadView(bytes memory payload) private view {uint256 payloadLength = payload.length;address consoleAddress = CONSOLE_ADDRESS;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;import {DSTest} from "ds-test/test.sol";import {stdMath} from "./StdMath.sol";abstract contract StdAssertions is DSTest {event log_array(uint256[] val);event log_array(int256[] val);event log_array(address[] val);event log_named_array(string key, uint256[] val);event log_named_array(string key, int256[] val);event log_named_array(string key, address[] val);function fail(string memory err) internal virtual {emit log_named_string("Error", err);fail();}function assertFalse(bool data) internal virtual {assertTrue(!data);}function assertFalse(bool data, string memory err) internal virtual {assertTrue(!data, err);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;pragma experimental ABIEncoderV2;import {VmSafe} from "./Vm.sol";/*** StdChains provides information about EVM compatible chains that can be used in scripts/tests.* For each chain, the chain's name, chain ID, and a default RPC URL are provided. Chains are* identified by their alias, which is the same as the alias in the `[rpc_endpoints]` section of* the `foundry.toml` file. For best UX, ensure the alias in the `foundry.toml` file match the* alias used in this contract, which can be found as the first argument to the* `setChainWithDefaultRpcUrl` call in the `initializeStdChains` function.** There are two main ways to use this contract:* 1. Set a chain with `setChain(string memory chainAlias, ChainData memory chain)` or* `setChain(string memory chainAlias, Chain memory chain)`* 2. Get a chain with `getChain(string memory chainAlias)` or `getChain(uint256 chainId)`.** The first time either of those are used, chains are initialized with the default set of RPC URLs.* This is done in `initializeStdChains`, which uses `setChainWithDefaultRpcUrl`. Defaults are recorded in* `defaultRpcUrls`.** The `setChain` function is straightforward, and it simply saves off the given chain data.*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;pragma experimental ABIEncoderV2;import {StdStorage, stdStorage} from "./StdStorage.sol";import {Vm} from "./Vm.sol";import {console2} from "./console2.sol";abstract contract StdCheatsSafe {Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code")))));bool private gasMeteringOff;// Data structures to parse Transaction objects from the broadcast artifact// that conform to EIP1559. The Raw structs is what is parsed from the JSON// and then converted to the one that is used by the user for better UX.struct RawTx1559 {string[] arguments;address contractAddress;string contractName;// json value name = functionstring functionSig;bytes32 hash;// json value name = tx
123456789101112131415// SPDX-License-Identifier: MIT// Panics work for versions >=0.8.0, but we lowered the pragma to make this compatible with Testpragma solidity >=0.6.2 <0.9.0;library stdError {bytes public constant assertionError = abi.encodeWithSignature("Panic(uint256)", 0x01);bytes public constant arithmeticError = abi.encodeWithSignature("Panic(uint256)", 0x11);bytes public constant divisionError = abi.encodeWithSignature("Panic(uint256)", 0x12);bytes public constant enumConversionError = abi.encodeWithSignature("Panic(uint256)", 0x21);bytes public constant encodeStorageError = abi.encodeWithSignature("Panic(uint256)", 0x22);bytes public constant popError = abi.encodeWithSignature("Panic(uint256)", 0x31);bytes public constant indexOOBError = abi.encodeWithSignature("Panic(uint256)", 0x32);bytes public constant memOverflowError = abi.encodeWithSignature("Panic(uint256)", 0x41);bytes public constant zeroVarError = abi.encodeWithSignature("Panic(uint256)", 0x51);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;pragma experimental ABIEncoderV2;contract StdInvariant {struct FuzzSelector {address addr;bytes4[] selectors;}address[] private _excludedContracts;address[] private _excludedSenders;address[] private _targetedContracts;address[] private _targetedSenders;string[] private _excludedArtifacts;string[] private _targetedArtifacts;FuzzSelector[] private _targetedArtifactSelectors;FuzzSelector[] private _targetedSelectors;// Functions for users:// These are intended to be called in tests.function excludeContract(address newExcludedContract_) internal {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.0 <0.9.0;pragma experimental ABIEncoderV2;import {VmSafe} from "./Vm.sol";// Helpers for parsing and writing JSON files// To parse:// ```// using stdJson for string;// string memory json = vm.readFile("some_peth");// json.parseUint("<json_path>");// ```// To write:// ```// using stdJson for string;// string memory json = "deploymentArtifact";// Contract contract = new Contract();// json.serialize("contractAddress", address(contract));// json = json.serialize("deploymentTimes", uint(1));// // store the stringified JSON to the 'json' variable we have been using as a key// // as we won't need it any longer// string memory json2 = "finalArtifact";// string memory final = json2.serialize("depArtifact", json);// final.write("<some_path>");
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;library stdMath {int256 private constant INT256_MIN = -57896044618658097711785492504343953926634992332820282019728792003956564819968;function abs(int256 a) internal pure returns (uint256) {// Required or it will fail when `a = type(int256).min`if (a == INT256_MIN) {return 57896044618658097711785492504343953926634992332820282019728792003956564819968;}return uint256(a > 0 ? a : -a);}function delta(uint256 a, uint256 b) internal pure returns (uint256) {return a > b ? a - b : b - a;}function delta(int256 a, int256 b) internal pure returns (uint256) {// a and b are of the same sign// this works thanks to two's complement, the left-most bit is the sign bitif ((a ^ b) > -1) {return delta(abs(a), abs(b));}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;import {Vm} from "./Vm.sol";struct StdStorage {mapping(address => mapping(bytes4 => mapping(bytes32 => uint256))) slots;mapping(address => mapping(bytes4 => mapping(bytes32 => bool))) finds;bytes32[] _keys;bytes4 _sig;uint256 _depth;address _target;bytes32 _set;}library stdStorageSafe {event SlotFound(address who, bytes4 fsig, bytes32 keysHash, uint256 slot);event WARNING_UninitedSlot(address who, uint256 slot);Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code")))));function sigs(string memory sigStr) internal pure returns (bytes4) {return bytes4(keccak256(bytes(sigStr)));}/// @notice find an arbitrary storage slot given a function sig, input data, address of the contract and a value to check against
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;pragma experimental ABIEncoderV2;import {IMulticall3} from "./interfaces/IMulticall3.sol";import {VmSafe} from "./Vm.sol";abstract contract StdUtils {/*//////////////////////////////////////////////////////////////////////////CONSTANTS//////////////////////////////////////////////////////////////////////////*/IMulticall3 private constant multicall = IMulticall3(0xcA11bde05977b3631167028862bE2a173976CA11);VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code")))));address private constant CONSOLE2_ADDRESS = 0x000000000000000000636F6e736F6c652e6c6f67;uint256 private constant INT256_MIN_ABS =57896044618658097711785492504343953926634992332820282019728792003956564819968;uint256 private constant SECP256K1_ORDER =115792089237316195423570985008687907852837564279074904382605163141518161494337;uint256 private constant UINT256_MAX =115792089237316195423570985008687907853269984665640564039457584007913129639935;// Used by default when deploying with create2, https://github.com/Arachnid/deterministic-deployment-proxy.address private constant CREATE2_FACTORY = 0x4e59b44847b379578588920cA78FbF26c0B4956C;
12345678910111213141516171819202122232425// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;pragma experimental ABIEncoderV2;// Cheatcodes are marked as view/pure/none using the following rules:// 0. A call's observable behaviour includes its return value, logs, reverts and state writes,// 1. If you can influence a later call's observable behaviour, you're neither `view` nor `pure (you are modifying some state be it the EVM,interpreter, filesystem, etc),// 2. Otherwise if you can be influenced by an earlier call, or if reading some state, you're `view`,// 3. Otherwise you're `pure`.interface VmSafe {struct Log {bytes32[] topics;bytes data;address emitter;}struct Rpc {string key;string url;}struct DirEntry {string errorMessage;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.4.22 <0.9.0;import {Vm} from "./Vm.sol";library StdStyle {Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code")))));string constant RED = "\u001b[91m";string constant GREEN = "\u001b[92m";string constant YELLOW = "\u001b[93m";string constant BLUE = "\u001b[94m";string constant MAGENTA = "\u001b[95m";string constant CYAN = "\u001b[96m";string constant BOLD = "\u001b[1m";string constant DIM = "\u001b[2m";string constant ITALIC = "\u001b[3m";string constant UNDERLINE = "\u001b[4m";string constant INVERSE = "\u001b[7m";string constant RESET = "\u001b[0m";function styleConcat(string memory style, string memory self) private pure returns (string memory) {return string(abi.encodePacked(style, self, RESET));}function red(string memory self) internal pure returns (string memory) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;import {StdStorage} from "./StdStorage.sol";import {Vm, VmSafe} from "./Vm.sol";abstract contract CommonBase {// Cheat code address, 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D.address internal constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code"))));// console.sol and console2.sol work by executing a staticcall to this address.address internal constant CONSOLE = 0x000000000000000000636F6e736F6c652e6c6f67;// Used when deploying with create2, https://github.com/Arachnid/deterministic-deployment-proxy.address internal constant CREATE2_FACTORY = 0x4e59b44847b379578588920cA78FbF26c0B4956C;// Default address for tx.origin and msg.sender, 0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38.address internal constant DEFAULT_SENDER = address(uint160(uint256(keccak256("foundry default caller"))));// Address of the test contract, deployed by the DEFAULT_SENDER.address internal constant DEFAULT_TEST_CONTRACT = 0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f;// Deterministic deployment address of the Multicall3 contract.address internal constant MULTICALL3_ADDRESS = 0xcA11bde05977b3631167028862bE2a173976CA11;// The order of the secp256k1 curve.uint256 internal constant SECP256K1_ORDER =115792089237316195423570985008687907852837564279074904382605163141518161494337;uint256 internal constant UINT256_MAX =115792089237316195423570985008687907853269984665640564039457584007913129639935;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity >=0.5.0;contract DSTest {event log (string);event logs (bytes);event log_address (address);event log_bytes32 (bytes32);event log_int (int);event log_uint (uint);event log_bytes (bytes);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;struct SetConfigParam {uint32 eid;uint32 configType;bytes config;}interface IMessageLibManager {struct Timeout {address lib;uint256 expiry;}event LibraryRegistered(address newLib);event DefaultSendLibrarySet(uint32 eid, address newLib);event DefaultReceiveLibrarySet(uint32 eid, address newLib);event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);event SendLibrarySet(address sender, uint32 eid, address newLib);event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);function registerLibrary(address _lib) external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingComposer {event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);event LzComposeAlert(address indexed from,address indexed to,address indexed executor,bytes32 guid,uint16 index,uint256 gas,uint256 value,bytes message,bytes extraData,bytes reason);function composeQueue(address _from,address _to,bytes32 _guid,uint16 _index) external view returns (bytes32 messageHash);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingChannel {event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);function eid() external view returns (uint32);// this is an emergency function if a message cannot be verified for some reasons// required to provide _nextNonce to avoid race conditionfunction skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);function inboundPayloadHash(
123456789// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingContext {function isSendingMessage() external view returns (bool);function getSendContext() external view returns (uint32 dstEid, address sender);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)pragma solidity ^0.8.0;import "../utils/ContextUpgradeable.sol";import {Initializable} from "../proxy/utils/Initializable.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 OwnableUpgradeable is Initializable, ContextUpgradeable {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { ILayerZeroEndpointV2 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";/*** @title IOAppCore*/interface IOAppCore {// Custom error messageserror OnlyPeer(uint32 eid, bytes32 sender);error NoPeer(uint32 eid);error InvalidEndpointCall();error InvalidDelegate();// Event emitted when a peer (OApp) is set for a corresponding endpointevent PeerSet(uint32 eid, bytes32 peer);/*** @notice Retrieves the OApp version information.* @return senderVersion The version of the OAppSender.sol contract.* @return receiverVersion The version of the OAppReceiver.sol contract.*/function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.6.2 <0.9.0;pragma experimental ABIEncoderV2;interface IMulticall3 {struct Call {address target;bytes callData;}struct Call3 {address target;bool allowFailure;bytes callData;}struct Call3Value {address target;bool allowFailure;uint256 value;bytes callData;}struct Result {bool success;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)pragma solidity ^0.8.0;import {Initializable} from "../proxy/utils/Initializable.sol";/*** @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 ContextUpgradeable is Initializable {function __Context_init() internal onlyInitializing {}function __Context_init_unchained() internal onlyInitializing {}function _msgSender() internal view virtual returns (address) {return msg.sender;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)pragma solidity ^0.8.2;import "../../utils/AddressUpgradeable.sol";/*** @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.** The initialization functions use a version number. Once a version number is used, it is consumed and cannot be* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in* case an upgrade adds a module that needs to be initialized.** For example:** [.hljs-theme-light.nopadding]* ```solidity* contract MyToken is ERC20Upgradeable {* function initialize() initializer public {* __ERC20_init("MyToken", "MTK");* }* }
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library AddressUpgradeable {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed** Furthermore, `isContract` will also return true if the target contract within
1234567891011121314151617181920212223242526{"remappings": ["frax-std/=node_modules/frax-standard-solidity/src/","@prb/test/=node_modules/@prb/test/","forge-std/=node_modules/forge-std/src/","ds-test/=node_modules/ds-test/src/","@axelar-network/=node_modules/@axelar-network/","@chainlink/=node_modules/@chainlink/","@eth-optimism/=node_modules/@eth-optimism/","@fraxfinance/=node_modules/@fraxfinance/","@layerzerolabs/=node_modules/@layerzerolabs/","@openzeppelin/=node_modules/@openzeppelin/","frax-standard-solidity/=node_modules/frax-standard-solidity/","hardhat-deploy/=node_modules/hardhat-deploy/","solidity-bytes-utils/=node_modules/solidity-bytes-utils/"],"optimizer": {"enabled": false,"runs": 200},"metadata": {"useLiteralContent": false,"bytecodeHash": "none","appendCBOR": false},"outputSelection": {
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"bytes32","name":"_fraxtalHop","type":"bytes32"},{"internalType":"uint256","name":"_noDNVs","type":"uint256"},{"internalType":"address","name":"_EXECUTOR","type":"address"},{"internalType":"address","name":"_DVN","type":"address"},{"internalType":"address","name":"_TREASURY","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"HopPaused","type":"error"},{"inputs":[],"name":"InsufficientFee","type":"error"},{"inputs":[],"name":"InvalidOApp","type":"error"},{"inputs":[{"internalType":"uint16","name":"optionType","type":"uint16"}],"name":"InvalidOptionType","type":"error"},{"inputs":[],"name":"NotEndpoint","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"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":"oft","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint32","name":"dstEid","type":"uint32"},{"indexed":true,"internalType":"bytes32","name":"to","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amountLD","type":"uint256"}],"name":"SendOFT","type":"event"},{"inputs":[],"name":"DVN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fraxtalHop","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noDNVs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oft","type":"address"},{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"bytes32","name":"_to","type":"bytes32"},{"internalType":"uint256","name":"_amountLD","type":"uint256"}],"name":"quote","outputs":[{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"fee","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oft","type":"address"},{"internalType":"uint32","name":"_dstEid","type":"uint32"}],"name":"quoteHop","outputs":[{"internalType":"uint256","name":"finalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oft","type":"address"},{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"bytes32","name":"_to","type":"bytes32"},{"internalType":"uint256","name":"_amountLD","type":"uint256"}],"name":"sendOFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_fraxtalHop","type":"address"}],"name":"setFraxtalHop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraxtalHop","type":"bytes32"}],"name":"setFraxtalHop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_noDNVs","type":"uint256"}],"name":"setNoDNVs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040525f8060146101000a81548160ff021916908315150217905550600280553480156200002d575f80fd5b506040516200268e3803806200268e833981810160405281019062000053919062000324565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000c7575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000be9190620003b9565b60405180910390fd5b620000d8816200018e60201b60201c565b5084600181905550836002819055508273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505050620003d4565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f819050919050565b620002678162000253565b811462000272575f80fd5b50565b5f8151905062000285816200025c565b92915050565b5f819050919050565b6200029f816200028b565b8114620002aa575f80fd5b50565b5f81519050620002bd8162000294565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620002ee82620002c3565b9050919050565b6200030081620002e2565b81146200030b575f80fd5b50565b5f815190506200031e81620002f5565b92915050565b5f805f805f60a0868803121562000340576200033f6200024f565b5b5f6200034f8882890162000275565b95505060206200036288828901620002ad565b945050604062000375888289016200030e565b935050606062000388888289016200030e565b92505060806200039b888289016200030e565b9150509295509295909350565b620003b381620002e2565b82525050565b5f602082019050620003ce5f830184620003a8565b92915050565b60805160a05160c05161227a620004145f395f81816105e2015261069b01525f8181610425015261044b01525f8181610524015261080a015261227a5ff3fe60806040526004361061010c575f3560e01c8063630dc7cb116100945780638da5cb5b116100635780638da5cb5b1461031f578063d333555314610349578063d393f07214610371578063efb799851461039b578063f2fde38b146103d757610113565b8063630dc7cb1461028f578063715018a6146102b957806377958f87146102cf5780638980f11f146102f757610113565b80633e832c90116100db5780633e832c90146101cf5780634172b57b146101eb57806342a53a5f146102135780635b461c831461023d5780635c975abb1461026557610113565b806302329a2914610117578063104db3801461013f5780631093d5be146101695780632d2c5565146101a557610113565b3661011357005b5f80fd5b348015610122575f80fd5b5061013d6004803603810190610138919061144b565b6103ff565b005b34801561014a575f80fd5b50610153610423565b60405161016091906114b5565b60405180910390f35b348015610174575f80fd5b5061018f600480360381019061018a9190611531565b610447565b60405161019c9190611587565b60405180910390f35b3480156101b0575f80fd5b506101b9610699565b6040516101c691906114b5565b60405180910390f35b6101e960048036038101906101e491906115fd565b6106bd565b005b3480156101f6575f80fd5b50610211600480360381019061020c9190611661565b6107ba565b005b34801561021e575f80fd5b506102276107cc565b6040516102349190611587565b60405180910390f35b348015610248575f80fd5b50610263600480360381019061025e919061168c565b6107d2565b005b348015610270575f80fd5b506102796107f6565b60405161028691906116c6565b60405180910390f35b34801561029a575f80fd5b506102a3610808565b6040516102b091906114b5565b60405180910390f35b3480156102c4575f80fd5b506102cd61082c565b005b3480156102da575f80fd5b506102f560048036038101906102f091906116df565b61083f565b005b348015610302575f80fd5b5061031d6004803603810190610318919061170a565b610851565b005b34801561032a575f80fd5b506103336108d9565b60405161034091906114b5565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a9190611661565b610900565b005b34801561037c575f80fd5b5061038561094f565b6040516103929190611757565b60405180910390f35b3480156103a6575f80fd5b506103c160048036038101906103bc91906115fd565b610955565b6040516103ce91906117ac565b60405180910390f35b3480156103e2575f80fd5b506103fd60048036038101906103f8919061168c565b610a11565b005b610407610a95565b805f60146101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330bb3aac846005306040518463ffffffff1660e01b81526004016104a79392919061185c565b602060405180830381865afa1580156104c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e691906118b8565b90505f6040518060400160405280601481526020017f010011010000000000000000000000000007a12000000000000000000000000081525090505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663709eb66486306028866040518563ffffffff1660e01b81526004016105829493929190611996565b602060405180830381865afa15801561059d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c191906118b8565b90505f81600254856105d39190611a0d565b6105dd9190611a4e565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d42442213089855f6040518563ffffffff1660e01b815260040161063f9493929190611a81565b602060405180830381865afa15801561065a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067e91906118b8565b9050808261068c9190611a4e565b9550505050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60149054906101000a900460ff1615610703576040517f819f993900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61762f8363ffffffff1603610744576040517f7ee14dfd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075084333084610b1c565b61075c84848484610b9e565b818363ffffffff163373ffffffffffffffffffffffffffffffffffffffff167fbc9ee36b6ca0bdd5b3840e6d329dd19a2490d880c7ce24d9818aa593adfb35be87856040516107ac929190611ac4565b60405180910390a450505050565b6107c2610a95565b8060028190555050565b60025481565b6107f38173ffffffffffffffffffffffffffffffffffffffff165f1b61083f565b50565b5f60149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610834610a95565b61083d5f610d63565b565b610847610a95565b8060018190555050565b610859610a95565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610894929190611ac4565b6020604051808303815f875af11580156108b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d49190611aff565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610908610a95565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561094b573d5f803e3d5ffd5b5050565b60015481565b61095d6113af565b5f61096a85858586610e24565b90508573ffffffffffffffffffffffffffffffffffffffff16633b6f743b825f6040518363ffffffff1660e01b81526004016109a7929190611c37565b6040805180830381865afa1580156109c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e59190611d2e565b91506109f18686610447565b825f01818151610a019190611a4e565b9150818152505050949350505050565b610a19610a95565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a89575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a8091906114b5565b60405180910390fd5b610a9281610d63565b50565b610a9d610ebd565b73ffffffffffffffffffffffffffffffffffffffff16610abb6108d9565b73ffffffffffffffffffffffffffffffffffffffff1614610b1a57610ade610ebd565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1191906114b5565b60405180910390fd5b565b610b98848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610b5193929190611d59565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610ec4565b50505050565b5f610bab84848485610e24565b90505f8573ffffffffffffffffffffffffffffffffffffffff16633b6f743b835f6040518363ffffffff1660e01b8152600401610be9929190611c37565b6040805180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c279190611d2e565b90505f610c348787610447565b825f0151610c429190611a4e565b905034811115610c7e576040517f025dbdd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff1663c7c7f5b3835f01518585306040518563ffffffff1660e01b8152600401610cbf93929190611d8e565b60c06040518083038185885af1158015610cdb573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d009190611eb6565b505080341115610d5a573373ffffffffffffffffffffffffffffffffffffffff166108fc8234610d309190611ef4565b90811502906040515f60405180830381858888f19350505050158015610d58573d5f803e3d5ffd5b505b50505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610e2c6113c7565b5f610e35610f59565b9050610e46815f620f42405f610f81565b905061762f825f019063ffffffff16908163ffffffff168152505060015482602001818152505083826040018181525050828260600181815250508082608001819052508486604051602001610e9d929190611f27565b6040516020818303038152906040528260a0018190525050949350505050565b5f33905090565b5f610eee828473ffffffffffffffffffffffffffffffffffffffff1661101b90919063ffffffff16565b90505f815114158015610f12575080806020019051810190610f109190611aff565b155b15610f5457826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610f4b91906114b5565b60405180910390fd5b505050565b60606003604051602001610f6d9190611f8f565b604051602081830303815290604052905090565b606084600361ffff16610f9d5f8361103090919063ffffffff16565b61ffff1614610ff557610fb95f8261103090919063ffffffff16565b6040517f3a51740d000000000000000000000000000000000000000000000000000000008152600401610fec9190611fb8565b60405180910390fd5b5f611001868686611095565b905061100f87600383611105565b92505050949350505050565b606061102883835f6111c0565b905092915050565b5f60028261103e9190611a4e565b83511015611081576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110789061202b565b60405180910390fd5b5f8260028501015190508091505092915050565b60605f826fffffffffffffffffffffffffffffffff16146110d9578383836040516020016110c593929190612098565b6040516020818303038152906040526110fc565b83836040516020016110ec9291906120d4565b6040516020818303038152906040525b90509392505050565b606083600361ffff166111215f8361103090919063ffffffff16565b61ffff16146111795761113d5f8261103090919063ffffffff16565b6040517f3a51740d0000000000000000000000000000000000000000000000000000000081526004016111709190611fb8565b60405180910390fd5b846001806111878651611289565b61119191906120ff565b86866040516020016111a79594939291906121ae565b6040516020818303038152906040529150509392505050565b60608147101561120757306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016111fe91906114b5565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff16848660405161122f9190612204565b5f6040518083038185875af1925050503d805f8114611269576040519150601f19603f3d011682016040523d82523d5f602084013e61126e565b606091505b509150915061127e8683836112de565b925050509392505050565b5f61ffff80168211156112d6576010826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016112cd929190612253565b60405180910390fd5b819050919050565b6060826112f3576112ee8261136b565b611363565b5f825114801561131957505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561135b57836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161135291906114b5565b60405180910390fd5b819050611364565b5b9392505050565b5f8151111561137d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052805f81526020015f81525090565b6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b5f604051905090565b5f80fd5b5f8115159050919050565b61142a81611416565b8114611434575f80fd5b50565b5f8135905061144581611421565b92915050565b5f602082840312156114605761145f611412565b5b5f61146d84828501611437565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61149f82611476565b9050919050565b6114af81611495565b82525050565b5f6020820190506114c85f8301846114a6565b92915050565b6114d781611495565b81146114e1575f80fd5b50565b5f813590506114f2816114ce565b92915050565b5f63ffffffff82169050919050565b611510816114f8565b811461151a575f80fd5b50565b5f8135905061152b81611507565b92915050565b5f806040838503121561154757611546611412565b5b5f611554858286016114e4565b92505060206115658582860161151d565b9150509250929050565b5f819050919050565b6115818161156f565b82525050565b5f60208201905061159a5f830184611578565b92915050565b5f819050919050565b6115b2816115a0565b81146115bc575f80fd5b50565b5f813590506115cd816115a9565b92915050565b6115dc8161156f565b81146115e6575f80fd5b50565b5f813590506115f7816115d3565b92915050565b5f805f806080858703121561161557611614611412565b5b5f611622878288016114e4565b94505060206116338782880161151d565b9350506040611644878288016115bf565b9250506060611655878288016115e9565b91505092959194509250565b5f6020828403121561167657611675611412565b5b5f611683848285016115e9565b91505092915050565b5f602082840312156116a1576116a0611412565b5b5f6116ae848285016114e4565b91505092915050565b6116c081611416565b82525050565b5f6020820190506116d95f8301846116b7565b92915050565b5f602082840312156116f4576116f3611412565b5b5f611701848285016115bf565b91505092915050565b5f80604083850312156117205761171f611412565b5b5f61172d858286016114e4565b925050602061173e858286016115e9565b9150509250929050565b611751816115a0565b82525050565b5f60208201905061176a5f830184611748565b92915050565b6117798161156f565b82525050565b604082015f8201516117935f850182611770565b5060208201516117a66020850182611770565b50505050565b5f6040820190506117bf5f83018461177f565b92915050565b6117ce816114f8565b82525050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f61181361180e611809846117d4565b6117f0565b6117dd565b9050919050565b611823816117f9565b82525050565b5f82825260208201905092915050565b50565b5f6118475f83611829565b915061185282611839565b5f82019050919050565b5f60808201905061186f5f8301866117c5565b61187c602083018561181a565b61188960408301846114a6565b818103606083015261189a8161183c565b9050949350505050565b5f815190506118b2816115d3565b92915050565b5f602082840312156118cd576118cc611412565b5b5f6118da848285016118a4565b91505092915050565b5f819050919050565b5f6119066119016118fc846118e3565b6117f0565b61156f565b9050919050565b611916816118ec565b82525050565b5f81519050919050565b5f5b83811015611943578082015181840152602081019050611928565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6119688261191c565b6119728185611829565b9350611982818560208601611926565b61198b8161194e565b840191505092915050565b5f6080820190506119a95f8301876117c5565b6119b660208301866114a6565b6119c3604083018561190d565b81810360608301526119d5818461195e565b905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a178261156f565b9150611a228361156f565b9250828202611a308161156f565b91508282048414831517611a4757611a466119e0565b5b5092915050565b5f611a588261156f565b9150611a638361156f565b9250828201905080821115611a7b57611a7a6119e0565b5b92915050565b5f608082019050611a945f8301876114a6565b611aa160208301866117c5565b611aae6040830185611578565b611abb60608301846116b7565b95945050505050565b5f604082019050611ad75f8301856114a6565b611ae46020830184611578565b9392505050565b5f81519050611af981611421565b92915050565b5f60208284031215611b1457611b13611412565b5b5f611b2184828501611aeb565b91505092915050565b611b33816114f8565b82525050565b611b42816115a0565b82525050565b5f82825260208201905092915050565b5f611b628261191c565b611b6c8185611b48565b9350611b7c818560208601611926565b611b858161194e565b840191505092915050565b5f60e083015f830151611ba55f860182611b2a565b506020830151611bb86020860182611b39565b506040830151611bcb6040860182611770565b506060830151611bde6060860182611770565b5060808301518482036080860152611bf68282611b58565b91505060a083015184820360a0860152611c108282611b58565b91505060c083015184820360c0860152611c2a8282611b58565b9150508091505092915050565b5f6040820190508181035f830152611c4f8185611b90565b9050611c5e60208301846116b7565b9392505050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611c9f8261194e565b810181811067ffffffffffffffff82111715611cbe57611cbd611c69565b5b80604052505050565b5f611cd0611409565b9050611cdc8282611c96565b919050565b5f60408284031215611cf657611cf5611c65565b5b611d006040611cc7565b90505f611d0f848285016118a4565b5f830152506020611d22848285016118a4565b60208301525092915050565b5f60408284031215611d4357611d42611412565b5b5f611d5084828501611ce1565b91505092915050565b5f606082019050611d6c5f8301866114a6565b611d7960208301856114a6565b611d866040830184611578565b949350505050565b5f6080820190508181035f830152611da68186611b90565b9050611db5602083018561177f565b611dc260608301846114a6565b949350505050565b5f81519050611dd8816115a9565b92915050565b611de7816117dd565b8114611df1575f80fd5b50565b5f81519050611e0281611dde565b92915050565b5f60808284031215611e1d57611e1c611c65565b5b611e276060611cc7565b90505f611e3684828501611dca565b5f830152506020611e4984828501611df4565b6020830152506040611e5d84828501611ce1565b60408301525092915050565b5f60408284031215611e7e57611e7d611c65565b5b611e886040611cc7565b90505f611e97848285016118a4565b5f830152506020611eaa848285016118a4565b60208301525092915050565b5f8060c08385031215611ecc57611ecb611412565b5b5f611ed985828601611e08565b9250506080611eea85828601611e69565b9150509250929050565b5f611efe8261156f565b9150611f098361156f565b9250828203905081811115611f2157611f206119e0565b5b92915050565b5f604082019050611f3a5f830185611748565b611f4760208301846117c5565b9392505050565b5f61ffff82169050919050565b5f8160f01b9050919050565b5f611f7182611f5b565b9050919050565b611f89611f8482611f4e565b611f67565b82525050565b5f611f9a8284611f78565b60028201915081905092915050565b611fb281611f4e565b82525050565b5f602082019050611fcb5f830184611fa9565b92915050565b5f82825260208201905092915050565b7f746f55696e7431365f6f75744f66426f756e64730000000000000000000000005f82015250565b5f612015601483611fd1565b915061202082611fe1565b602082019050919050565b5f6020820190508181035f83015261204281612009565b9050919050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b5f8160801b9050919050565b5f61207a82612064565b9050919050565b61209261208d82612049565b612070565b82525050565b5f6120a38286611f78565b6002820191506120b38285612081565b6010820191506120c38284612081565b601082019150819050949350505050565b5f6120df8285611f78565b6002820191506120ef8284612081565b6010820191508190509392505050565b5f61210982611f4e565b915061211483611f4e565b9250828201905061ffff81111561212e5761212d6119e0565b5b92915050565b5f81905092915050565b5f6121488261191c565b6121528185612134565b9350612162818560208601611926565b80840191505092915050565b5f60ff82169050919050565b5f8160f81b9050919050565b5f6121908261217a565b9050919050565b6121a86121a38261216e565b612186565b82525050565b5f6121b9828861213e565b91506121c58287612197565b6001820191506121d58286611f78565b6002820191506121e58285612197565b6001820191506121f5828461213e565b91508190509695505050505050565b5f61220f828461213e565b915081905092915050565b5f819050919050565b5f61223d6122386122338461221a565b6117f0565b61216e565b9050919050565b61224d81612223565b82525050565b5f6040820190506122665f830185612244565b6122736020830184611578565b9392505050560000000000000000000000007425526ce2f9494b8d8ecdd7afc37a89a86f3c7b00000000000000000000000000000000000000000000000000000000000000020000000000000000000000004208d6e27538189bb48e603d6123a94b8abe0a0b000000000000000000000000282b3386571f7f794450d5789911a9804fa346b40000000000000000000000004514fc667a944752ee8a29f544c1b20b1a315f25
Deployed Bytecode
0x60806040526004361061010c575f3560e01c8063630dc7cb116100945780638da5cb5b116100635780638da5cb5b1461031f578063d333555314610349578063d393f07214610371578063efb799851461039b578063f2fde38b146103d757610113565b8063630dc7cb1461028f578063715018a6146102b957806377958f87146102cf5780638980f11f146102f757610113565b80633e832c90116100db5780633e832c90146101cf5780634172b57b146101eb57806342a53a5f146102135780635b461c831461023d5780635c975abb1461026557610113565b806302329a2914610117578063104db3801461013f5780631093d5be146101695780632d2c5565146101a557610113565b3661011357005b5f80fd5b348015610122575f80fd5b5061013d6004803603810190610138919061144b565b6103ff565b005b34801561014a575f80fd5b50610153610423565b60405161016091906114b5565b60405180910390f35b348015610174575f80fd5b5061018f600480360381019061018a9190611531565b610447565b60405161019c9190611587565b60405180910390f35b3480156101b0575f80fd5b506101b9610699565b6040516101c691906114b5565b60405180910390f35b6101e960048036038101906101e491906115fd565b6106bd565b005b3480156101f6575f80fd5b50610211600480360381019061020c9190611661565b6107ba565b005b34801561021e575f80fd5b506102276107cc565b6040516102349190611587565b60405180910390f35b348015610248575f80fd5b50610263600480360381019061025e919061168c565b6107d2565b005b348015610270575f80fd5b506102796107f6565b60405161028691906116c6565b60405180910390f35b34801561029a575f80fd5b506102a3610808565b6040516102b091906114b5565b60405180910390f35b3480156102c4575f80fd5b506102cd61082c565b005b3480156102da575f80fd5b506102f560048036038101906102f091906116df565b61083f565b005b348015610302575f80fd5b5061031d6004803603810190610318919061170a565b610851565b005b34801561032a575f80fd5b506103336108d9565b60405161034091906114b5565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a9190611661565b610900565b005b34801561037c575f80fd5b5061038561094f565b6040516103929190611757565b60405180910390f35b3480156103a6575f80fd5b506103c160048036038101906103bc91906115fd565b610955565b6040516103ce91906117ac565b60405180910390f35b3480156103e2575f80fd5b506103fd60048036038101906103f8919061168c565b610a11565b005b610407610a95565b805f60146101000a81548160ff02191690831515021790555050565b7f000000000000000000000000282b3386571f7f794450d5789911a9804fa346b481565b5f807f000000000000000000000000282b3386571f7f794450d5789911a9804fa346b473ffffffffffffffffffffffffffffffffffffffff166330bb3aac846005306040518463ffffffff1660e01b81526004016104a79392919061185c565b602060405180830381865afa1580156104c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e691906118b8565b90505f6040518060400160405280601481526020017f010011010000000000000000000000000007a12000000000000000000000000081525090505f7f0000000000000000000000004208d6e27538189bb48e603d6123a94b8abe0a0b73ffffffffffffffffffffffffffffffffffffffff1663709eb66486306028866040518563ffffffff1660e01b81526004016105829493929190611996565b602060405180830381865afa15801561059d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c191906118b8565b90505f81600254856105d39190611a0d565b6105dd9190611a4e565b90505f7f0000000000000000000000004514fc667a944752ee8a29f544c1b20b1a315f2573ffffffffffffffffffffffffffffffffffffffff1663d42442213089855f6040518563ffffffff1660e01b815260040161063f9493929190611a81565b602060405180830381865afa15801561065a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067e91906118b8565b9050808261068c9190611a4e565b9550505050505092915050565b7f0000000000000000000000004514fc667a944752ee8a29f544c1b20b1a315f2581565b5f60149054906101000a900460ff1615610703576040517f819f993900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61762f8363ffffffff1603610744576040517f7ee14dfd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075084333084610b1c565b61075c84848484610b9e565b818363ffffffff163373ffffffffffffffffffffffffffffffffffffffff167fbc9ee36b6ca0bdd5b3840e6d329dd19a2490d880c7ce24d9818aa593adfb35be87856040516107ac929190611ac4565b60405180910390a450505050565b6107c2610a95565b8060028190555050565b60025481565b6107f38173ffffffffffffffffffffffffffffffffffffffff165f1b61083f565b50565b5f60149054906101000a900460ff1681565b7f0000000000000000000000004208d6e27538189bb48e603d6123a94b8abe0a0b81565b610834610a95565b61083d5f610d63565b565b610847610a95565b8060018190555050565b610859610a95565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610894929190611ac4565b6020604051808303815f875af11580156108b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d49190611aff565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610908610a95565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561094b573d5f803e3d5ffd5b5050565b60015481565b61095d6113af565b5f61096a85858586610e24565b90508573ffffffffffffffffffffffffffffffffffffffff16633b6f743b825f6040518363ffffffff1660e01b81526004016109a7929190611c37565b6040805180830381865afa1580156109c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e59190611d2e565b91506109f18686610447565b825f01818151610a019190611a4e565b9150818152505050949350505050565b610a19610a95565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a89575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a8091906114b5565b60405180910390fd5b610a9281610d63565b50565b610a9d610ebd565b73ffffffffffffffffffffffffffffffffffffffff16610abb6108d9565b73ffffffffffffffffffffffffffffffffffffffff1614610b1a57610ade610ebd565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1191906114b5565b60405180910390fd5b565b610b98848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610b5193929190611d59565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610ec4565b50505050565b5f610bab84848485610e24565b90505f8573ffffffffffffffffffffffffffffffffffffffff16633b6f743b835f6040518363ffffffff1660e01b8152600401610be9929190611c37565b6040805180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c279190611d2e565b90505f610c348787610447565b825f0151610c429190611a4e565b905034811115610c7e576040517f025dbdd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff1663c7c7f5b3835f01518585306040518563ffffffff1660e01b8152600401610cbf93929190611d8e565b60c06040518083038185885af1158015610cdb573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d009190611eb6565b505080341115610d5a573373ffffffffffffffffffffffffffffffffffffffff166108fc8234610d309190611ef4565b90811502906040515f60405180830381858888f19350505050158015610d58573d5f803e3d5ffd5b505b50505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610e2c6113c7565b5f610e35610f59565b9050610e46815f620f42405f610f81565b905061762f825f019063ffffffff16908163ffffffff168152505060015482602001818152505083826040018181525050828260600181815250508082608001819052508486604051602001610e9d929190611f27565b6040516020818303038152906040528260a0018190525050949350505050565b5f33905090565b5f610eee828473ffffffffffffffffffffffffffffffffffffffff1661101b90919063ffffffff16565b90505f815114158015610f12575080806020019051810190610f109190611aff565b155b15610f5457826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610f4b91906114b5565b60405180910390fd5b505050565b60606003604051602001610f6d9190611f8f565b604051602081830303815290604052905090565b606084600361ffff16610f9d5f8361103090919063ffffffff16565b61ffff1614610ff557610fb95f8261103090919063ffffffff16565b6040517f3a51740d000000000000000000000000000000000000000000000000000000008152600401610fec9190611fb8565b60405180910390fd5b5f611001868686611095565b905061100f87600383611105565b92505050949350505050565b606061102883835f6111c0565b905092915050565b5f60028261103e9190611a4e565b83511015611081576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110789061202b565b60405180910390fd5b5f8260028501015190508091505092915050565b60605f826fffffffffffffffffffffffffffffffff16146110d9578383836040516020016110c593929190612098565b6040516020818303038152906040526110fc565b83836040516020016110ec9291906120d4565b6040516020818303038152906040525b90509392505050565b606083600361ffff166111215f8361103090919063ffffffff16565b61ffff16146111795761113d5f8261103090919063ffffffff16565b6040517f3a51740d0000000000000000000000000000000000000000000000000000000081526004016111709190611fb8565b60405180910390fd5b846001806111878651611289565b61119191906120ff565b86866040516020016111a79594939291906121ae565b6040516020818303038152906040529150509392505050565b60608147101561120757306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016111fe91906114b5565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff16848660405161122f9190612204565b5f6040518083038185875af1925050503d805f8114611269576040519150601f19603f3d011682016040523d82523d5f602084013e61126e565b606091505b509150915061127e8683836112de565b925050509392505050565b5f61ffff80168211156112d6576010826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016112cd929190612253565b60405180910390fd5b819050919050565b6060826112f3576112ee8261136b565b611363565b5f825114801561131957505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561135b57836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161135291906114b5565b60405180910390fd5b819050611364565b5b9392505050565b5f8151111561137d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052805f81526020015f81525090565b6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b5f604051905090565b5f80fd5b5f8115159050919050565b61142a81611416565b8114611434575f80fd5b50565b5f8135905061144581611421565b92915050565b5f602082840312156114605761145f611412565b5b5f61146d84828501611437565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61149f82611476565b9050919050565b6114af81611495565b82525050565b5f6020820190506114c85f8301846114a6565b92915050565b6114d781611495565b81146114e1575f80fd5b50565b5f813590506114f2816114ce565b92915050565b5f63ffffffff82169050919050565b611510816114f8565b811461151a575f80fd5b50565b5f8135905061152b81611507565b92915050565b5f806040838503121561154757611546611412565b5b5f611554858286016114e4565b92505060206115658582860161151d565b9150509250929050565b5f819050919050565b6115818161156f565b82525050565b5f60208201905061159a5f830184611578565b92915050565b5f819050919050565b6115b2816115a0565b81146115bc575f80fd5b50565b5f813590506115cd816115a9565b92915050565b6115dc8161156f565b81146115e6575f80fd5b50565b5f813590506115f7816115d3565b92915050565b5f805f806080858703121561161557611614611412565b5b5f611622878288016114e4565b94505060206116338782880161151d565b9350506040611644878288016115bf565b9250506060611655878288016115e9565b91505092959194509250565b5f6020828403121561167657611675611412565b5b5f611683848285016115e9565b91505092915050565b5f602082840312156116a1576116a0611412565b5b5f6116ae848285016114e4565b91505092915050565b6116c081611416565b82525050565b5f6020820190506116d95f8301846116b7565b92915050565b5f602082840312156116f4576116f3611412565b5b5f611701848285016115bf565b91505092915050565b5f80604083850312156117205761171f611412565b5b5f61172d858286016114e4565b925050602061173e858286016115e9565b9150509250929050565b611751816115a0565b82525050565b5f60208201905061176a5f830184611748565b92915050565b6117798161156f565b82525050565b604082015f8201516117935f850182611770565b5060208201516117a66020850182611770565b50505050565b5f6040820190506117bf5f83018461177f565b92915050565b6117ce816114f8565b82525050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f61181361180e611809846117d4565b6117f0565b6117dd565b9050919050565b611823816117f9565b82525050565b5f82825260208201905092915050565b50565b5f6118475f83611829565b915061185282611839565b5f82019050919050565b5f60808201905061186f5f8301866117c5565b61187c602083018561181a565b61188960408301846114a6565b818103606083015261189a8161183c565b9050949350505050565b5f815190506118b2816115d3565b92915050565b5f602082840312156118cd576118cc611412565b5b5f6118da848285016118a4565b91505092915050565b5f819050919050565b5f6119066119016118fc846118e3565b6117f0565b61156f565b9050919050565b611916816118ec565b82525050565b5f81519050919050565b5f5b83811015611943578082015181840152602081019050611928565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6119688261191c565b6119728185611829565b9350611982818560208601611926565b61198b8161194e565b840191505092915050565b5f6080820190506119a95f8301876117c5565b6119b660208301866114a6565b6119c3604083018561190d565b81810360608301526119d5818461195e565b905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a178261156f565b9150611a228361156f565b9250828202611a308161156f565b91508282048414831517611a4757611a466119e0565b5b5092915050565b5f611a588261156f565b9150611a638361156f565b9250828201905080821115611a7b57611a7a6119e0565b5b92915050565b5f608082019050611a945f8301876114a6565b611aa160208301866117c5565b611aae6040830185611578565b611abb60608301846116b7565b95945050505050565b5f604082019050611ad75f8301856114a6565b611ae46020830184611578565b9392505050565b5f81519050611af981611421565b92915050565b5f60208284031215611b1457611b13611412565b5b5f611b2184828501611aeb565b91505092915050565b611b33816114f8565b82525050565b611b42816115a0565b82525050565b5f82825260208201905092915050565b5f611b628261191c565b611b6c8185611b48565b9350611b7c818560208601611926565b611b858161194e565b840191505092915050565b5f60e083015f830151611ba55f860182611b2a565b506020830151611bb86020860182611b39565b506040830151611bcb6040860182611770565b506060830151611bde6060860182611770565b5060808301518482036080860152611bf68282611b58565b91505060a083015184820360a0860152611c108282611b58565b91505060c083015184820360c0860152611c2a8282611b58565b9150508091505092915050565b5f6040820190508181035f830152611c4f8185611b90565b9050611c5e60208301846116b7565b9392505050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611c9f8261194e565b810181811067ffffffffffffffff82111715611cbe57611cbd611c69565b5b80604052505050565b5f611cd0611409565b9050611cdc8282611c96565b919050565b5f60408284031215611cf657611cf5611c65565b5b611d006040611cc7565b90505f611d0f848285016118a4565b5f830152506020611d22848285016118a4565b60208301525092915050565b5f60408284031215611d4357611d42611412565b5b5f611d5084828501611ce1565b91505092915050565b5f606082019050611d6c5f8301866114a6565b611d7960208301856114a6565b611d866040830184611578565b949350505050565b5f6080820190508181035f830152611da68186611b90565b9050611db5602083018561177f565b611dc260608301846114a6565b949350505050565b5f81519050611dd8816115a9565b92915050565b611de7816117dd565b8114611df1575f80fd5b50565b5f81519050611e0281611dde565b92915050565b5f60808284031215611e1d57611e1c611c65565b5b611e276060611cc7565b90505f611e3684828501611dca565b5f830152506020611e4984828501611df4565b6020830152506040611e5d84828501611ce1565b60408301525092915050565b5f60408284031215611e7e57611e7d611c65565b5b611e886040611cc7565b90505f611e97848285016118a4565b5f830152506020611eaa848285016118a4565b60208301525092915050565b5f8060c08385031215611ecc57611ecb611412565b5b5f611ed985828601611e08565b9250506080611eea85828601611e69565b9150509250929050565b5f611efe8261156f565b9150611f098361156f565b9250828203905081811115611f2157611f206119e0565b5b92915050565b5f604082019050611f3a5f830185611748565b611f4760208301846117c5565b9392505050565b5f61ffff82169050919050565b5f8160f01b9050919050565b5f611f7182611f5b565b9050919050565b611f89611f8482611f4e565b611f67565b82525050565b5f611f9a8284611f78565b60028201915081905092915050565b611fb281611f4e565b82525050565b5f602082019050611fcb5f830184611fa9565b92915050565b5f82825260208201905092915050565b7f746f55696e7431365f6f75744f66426f756e64730000000000000000000000005f82015250565b5f612015601483611fd1565b915061202082611fe1565b602082019050919050565b5f6020820190508181035f83015261204281612009565b9050919050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b5f8160801b9050919050565b5f61207a82612064565b9050919050565b61209261208d82612049565b612070565b82525050565b5f6120a38286611f78565b6002820191506120b38285612081565b6010820191506120c38284612081565b601082019150819050949350505050565b5f6120df8285611f78565b6002820191506120ef8284612081565b6010820191508190509392505050565b5f61210982611f4e565b915061211483611f4e565b9250828201905061ffff81111561212e5761212d6119e0565b5b92915050565b5f81905092915050565b5f6121488261191c565b6121528185612134565b9350612162818560208601611926565b80840191505092915050565b5f60ff82169050919050565b5f8160f81b9050919050565b5f6121908261217a565b9050919050565b6121a86121a38261216e565b612186565b82525050565b5f6121b9828861213e565b91506121c58287612197565b6001820191506121d58286611f78565b6002820191506121e58285612197565b6001820191506121f5828461213e565b91508190509695505050505050565b5f61220f828461213e565b915081905092915050565b5f819050919050565b5f61223d6122386122338461221a565b6117f0565b61216e565b9050919050565b61224d81612223565b82525050565b5f6040820190506122665f830185612244565b6122736020830184611578565b939250505056
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007425526ce2f9494b8d8ecdd7afc37a89a86f3c7b00000000000000000000000000000000000000000000000000000000000000020000000000000000000000004208d6e27538189bb48e603d6123a94b8abe0a0b000000000000000000000000282b3386571f7f794450d5789911a9804fa346b40000000000000000000000004514fc667a944752ee8a29f544c1b20b1a315f25
-----Decoded View---------------
Arg [0] : _fraxtalHop (bytes32): 0x0000000000000000000000007425526ce2f9494b8d8ecdd7afc37a89a86f3c7b
Arg [1] : _noDNVs (uint256): 2
Arg [2] : _EXECUTOR (address): 0x4208D6E27538189bB48E603D6123A94b8Abe0A0b
Arg [3] : _DVN (address): 0x282b3386571f7f794450d5789911a9804FA346b4
Arg [4] : _TREASURY (address): 0x4514FC667a944752ee8A29F544c1B20b1A315f25
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000007425526ce2f9494b8d8ecdd7afc37a89a86f3c7b
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [2] : 0000000000000000000000004208d6e27538189bb48e603d6123a94b8abe0a0b
Arg [3] : 000000000000000000000000282b3386571f7f794450d5789911a9804fa346b4
Arg [4] : 0000000000000000000000004514fc667a944752ee8a29f544c1b20b1a315f25
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
SONIC | 100.00% | $0.471105 | 0.1281 | $0.060338 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.