Source Code
Overview
MNT Balance
MNT Value
$0.00Latest 13 from a total of 13 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Peers | 61927569 | 666 days ago | IN | 0 MNT | 0.00613838 | ||||
| Set Uln Configs | 61927561 | 666 days ago | IN | 0 MNT | 0.00838656 | ||||
| Set Peers | 61662980 | 672 days ago | IN | 0 MNT | 0.00567005 | ||||
| Set Uln Configs | 61662974 | 672 days ago | IN | 0 MNT | 0.00851924 | ||||
| Set Peers | 61662714 | 672 days ago | IN | 0 MNT | 0.00555264 | ||||
| Set Uln Configs | 61662707 | 672 days ago | IN | 0 MNT | 0.00823568 | ||||
| Set Peers | 61662692 | 672 days ago | IN | 0 MNT | 0.00528008 | ||||
| Set Uln Configs | 61662686 | 672 days ago | IN | 0 MNT | 0.008145 | ||||
| Send Deposits | 61662529 | 672 days ago | IN | 0.39778824 MNT | 1.27235199 | ||||
| Send Deposits | 61662422 | 672 days ago | IN | 0.39778824 MNT | 1.37428127 | ||||
| Send Deposits | 61662317 | 672 days ago | IN | 5.17795355 MNT | 1.41456194 | ||||
| Set Peers | 61662247 | 672 days ago | IN | 0 MNT | 0.08754685 | ||||
| Set Uln Configs | 61662241 | 672 days ago | IN | 0 MNT | 0.25468371 |
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x5359a9a6...d73BdBeDD The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
FillerV2
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./OptimizedOApp.sol";
contract FillerV2 is OptimizedOApp {
constructor(address _owner, address _endpoint) OptimizedOApp(_owner, _endpoint) {}
event SentMessages(uint32[] eids, bytes[] messages, uint value, uint fee, address from);
event SentDeposits(uint256[] params, address to, uint value, uint fee, address from);
function sendMessages(
uint32[] calldata _dstEids,
bytes[] calldata _messages
) external payable {
uint256 fee;
for (uint i; i < _messages.length; i++) {
fee += _sendMessage(_dstEids[i], _messages[i]);
}
require(msg.value >= fee, "Fee Not Met");
emit SentMessages(_dstEids, _messages, msg.value, fee, msg.sender);
}
function sendDeposits(
uint256[] calldata _depositParams,
address _to
) external payable {
uint256 fee;
for (uint i; i < _depositParams.length; i++) {
fee += _sendDeposit(uint32(_depositParams[i] >> 224), uint128(_depositParams[i]), _to);
}
require(msg.value >= fee, "Fee Not Met");
emit SentDeposits(_depositParams, _to, msg.value, fee, msg.sender);
}
function _sendMessage(uint32 _dstEid, bytes calldata _message) internal returns (uint256 fee) {
MessagingReceipt memory receipt = _lzSend(_dstEid, _message, createReceiveOption(_dstEid), address(this).balance, address(this));
return receipt.fee.nativeFee;
}
function _sendDeposit(uint32 _dstEid, uint128 _amount, address _to) internal returns (uint256 fee) {
MessagingReceipt memory receipt = _lzSend(_dstEid, "", createNativeDropOption(_dstEid, _amount, _to), address(this).balance, address(this));
return receipt.fee.nativeFee;
}
function createReceiveOption(uint32 _dstEid) public view returns (bytes memory) {
return abi.encodePacked(
abi.encodePacked(uint16(3)),
uint8(1),
uint16(16+1),
uint8(1),
abi.encodePacked(getGasLimit(_dstEid))
);
}
function createNativeDropOption(uint32 _dstEid, uint128 _nativeAmount, address _to) public view returns (bytes memory) {
return abi.encodePacked(
createReceiveOption(_dstEid),
uint8(1),
uint16(32+16+1),
uint8(2),
abi.encodePacked(_nativeAmount, bytes32(uint256(uint160(_to))))
);
}
function estimateFees(
uint32[] calldata _dstEids,
bytes[] calldata _messages,
bytes[] calldata _options
) external view returns (uint256[] memory nativeFees) {
nativeFees = new uint256[](_dstEids.length);
for (uint i; i < _dstEids.length; i++) {
nativeFees[i] = quote(_dstEids[i], _messages[i], _options[i]);
}
}
function quote(uint32 _dstEid, bytes calldata _message, bytes memory _options) public view returns (uint256 nativeFee) {
MessagingFee memory fee = endpoint.quote(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), address(this));
return fee.nativeFee;
}
function withdraw(address token, uint256 amount) external onlyOwner {
bool s;
if (token == address(0)) {
(s,) = msg.sender.call{value: address(this).balance}("");
} else {
(s,) = token.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender, amount));
}
require(s, "Withdraw Failed");
}
receive() external payable {}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./Ownable.sol";
import "./interfaces/ILayerZeroEndpointV2.sol";
import "./interfaces/IMessageLibManager.sol";
import "./interfaces/IUlnBase.sol";
abstract contract OptimizedOApp is Ownable {
ILayerZeroEndpointV2 public immutable endpoint;
mapping(uint32 => bytes32) public peers;
mapping(uint32 => uint128) public gasLimitLookup;
uint128 public defaultGasLimit = 20_000;
constructor(address _owner, address _endpoint) {
endpoint = ILayerZeroEndpointV2(_endpoint);
_initializeOwner(_owner);
endpoint.setDelegate(_owner);
}
// Receive
function nextNonce(uint32, bytes32) public pure virtual returns (uint64 nonce) {
return 0;
}
function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {
return getPeer(origin.srcEid) == origin.sender;
}
function lzReceive(
Origin calldata,
bytes32,
bytes calldata,
address,
bytes calldata
) external pure {
return;
}
// Send
function _lzSend(
uint32 _dstEid,
bytes memory _message,
bytes memory _options,
uint _nativeFee,
address _refundAddress
) internal virtual returns (MessagingReceipt memory receipt) {
return endpoint.send{value: _nativeFee}(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), _refundAddress);
}
function getPeer(uint32 _dstEid) internal view returns (bytes32) {
bytes32 trustedRemote = peers[_dstEid];
if (trustedRemote == 0) {
return bytes32(uint256(uint160(address(this))));
} else {
return trustedRemote;
}
}
function getGasLimit(uint32 _dstEid) internal view returns (uint128) {
uint128 gasLimit = gasLimitLookup[_dstEid];
if (gasLimit == 0) {
return defaultGasLimit;
} else {
return gasLimit;
}
}
function setPeers(
uint32[] calldata _remoteEids,
bytes32[] calldata _remoteAddresses
) external onlyOwner {
require(_remoteEids.length == _remoteAddresses.length, "Length Mismatch");
for (uint i; i < _remoteEids.length; i++) {
peers[_remoteEids[i]] = _remoteAddresses[i];
}
}
function setGasLimit(
uint32[] calldata _remoteEids,
uint128[] calldata _gasLimits
) external onlyOwner {
require(_remoteEids.length == _gasLimits.length, "Length Mismatch");
for (uint i; i < _remoteEids.length; i++) {
gasLimitLookup[_remoteEids[i]] = _gasLimits[i];
}
}
function setDefaultGasLimit(uint128 _defaultGasLimit) external onlyOwner {
defaultGasLimit = _defaultGasLimit;
}
function setDelegate(address _delegate) external onlyOwner {
endpoint.setDelegate(_delegate);
}
function setUlnConfigs(address _lib, uint64 confirmations, uint32[] calldata eids, address dvn) external onlyOwner {
SetConfigParam[] memory configs = new SetConfigParam[](eids.length);
for(uint i; i < eids.length; i++) {
address[] memory opt = new address[](0);
address[] memory req = new address[](1);
req[0] = dvn;
bytes memory config = abi.encode(UlnConfig(confirmations, uint8(1), 0, 0, req, opt));
configs[i] = SetConfigParam({eid: eids[i], configType: 2, config: config});
}
IMessageLibManager(address(endpoint)).setConfig(address(this), _lib, configs);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CUSTOM ERRORS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The caller is not authorized to call the function.
error Unauthorized();
/// @dev The `newOwner` cannot be the zero address.
error NewOwnerIsZeroAddress();
/// @dev The `pendingOwner` does not have a valid handover request.
error NoHandoverRequest();
/// @dev Cannot double-initialize.
error AlreadyInitialized();
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* EVENTS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The ownership is transferred from `oldOwner` to `newOwner`.
/// This event is intentionally kept the same as OpenZeppelin's Ownable to be
/// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
/// despite it not being as lightweight as a single argument event.
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);
/// @dev An ownership handover to `pendingOwner` has been requested.
event OwnershipHandoverRequested(address indexed pendingOwner);
/// @dev The ownership handover to `pendingOwner` has been canceled.
event OwnershipHandoverCanceled(address indexed pendingOwner);
/// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;
/// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;
/// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* STORAGE */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The owner slot is given by:
/// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
/// It is intentionally chosen to be a high value
/// to avoid collision with lower slots.
/// The choice of manual storage layout is to enable compatibility
/// with both regular and upgradeable contracts.
bytes32 internal constant _OWNER_SLOT =
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;
/// The ownership handover slot of `newOwner` is given by:
/// ```
/// mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
/// let handoverSlot := keccak256(0x00, 0x20)
/// ```
/// It stores the expiry timestamp of the two-step ownership handover.
uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* INTERNAL FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
function _guardInitializeOwner() internal pure virtual returns (bool guard) {}
/// @dev Initializes the owner directly without authorization guard.
/// This function must be called upon initialization,
/// regardless of whether the contract is upgradeable or not.
/// This is to enable generalization to both regular and upgradeable contracts,
/// and to save gas in case the initial owner is not the caller.
/// For performance reasons, this function will not check if there
/// is an existing owner.
function _initializeOwner(address newOwner) internal virtual {
if (_guardInitializeOwner()) {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
if sload(ownerSlot) {
mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
revert(0x1c, 0x04)
}
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Store the new value.
sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
}
} else {
/// @solidity memory-safe-assembly
assembly {
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Store the new value.
sstore(_OWNER_SLOT, newOwner)
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
}
}
}
/// @dev Sets the owner directly without authorization guard.
function _setOwner(address newOwner) internal virtual {
if (_guardInitializeOwner()) {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
// Store the new value.
sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
}
} else {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
// Store the new value.
sstore(ownerSlot, newOwner)
}
}
}
/// @dev Throws if the sender is not the owner.
function _checkOwner() internal view virtual {
/// @solidity memory-safe-assembly
assembly {
// If the caller is not the stored owner, revert.
if iszero(eq(caller(), sload(_OWNER_SLOT))) {
mstore(0x00, 0x82b42900) // `Unauthorized()`.
revert(0x1c, 0x04)
}
}
}
/// @dev Returns how long a two-step ownership handover is valid for in seconds.
/// Override to return a different value if needed.
/// Made internal to conserve bytecode. Wrap it in a public function if needed.
function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
return 48 * 3600;
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* PUBLIC UPDATE FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Allows the owner to transfer the ownership to `newOwner`.
function transferOwnership(address newOwner) public payable virtual onlyOwner {
/// @solidity memory-safe-assembly
assembly {
if iszero(shl(96, newOwner)) {
mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
revert(0x1c, 0x04)
}
}
_setOwner(newOwner);
}
/// @dev Allows the owner to renounce their ownership.
function renounceOwnership() public payable virtual onlyOwner {
_setOwner(address(0));
}
/// @dev Request a two-step ownership handover to the caller.
/// The request will automatically expire in 48 hours (172800 seconds) by default.
function requestOwnershipHandover() public payable virtual {
unchecked {
uint256 expires = block.timestamp + _ownershipHandoverValidFor();
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to `expires`.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, caller())
sstore(keccak256(0x0c, 0x20), expires)
// Emit the {OwnershipHandoverRequested} event.
log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
}
}
}
/// @dev Cancels the two-step ownership handover to the caller, if any.
function cancelOwnershipHandover() public payable virtual {
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to 0.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, caller())
sstore(keccak256(0x0c, 0x20), 0)
// Emit the {OwnershipHandoverCanceled} event.
log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
}
}
/// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
/// Reverts if there is no existing ownership handover requested by `pendingOwner`.
function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to 0.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, pendingOwner)
let handoverSlot := keccak256(0x0c, 0x20)
// If the handover does not exist, or has expired.
if gt(timestamp(), sload(handoverSlot)) {
mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
revert(0x1c, 0x04)
}
// Set the handover slot to 0.
sstore(handoverSlot, 0)
}
_setOwner(pendingOwner);
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* PUBLIC READ FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Returns the owner of the contract.
function owner() public view virtual returns (address result) {
/// @solidity memory-safe-assembly
assembly {
result := sload(_OWNER_SLOT)
}
}
/// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
function ownershipHandoverExpiresAt(address pendingOwner)
public
view
virtual
returns (uint256 result)
{
/// @solidity memory-safe-assembly
assembly {
// Compute the handover slot.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, pendingOwner)
// Load the handover slot.
result := sload(keccak256(0x0c, 0x20))
}
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* MODIFIERS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Marks a function as only callable by the owner.
modifier onlyOwner() virtual {
_checkOwner();
_;
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
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;
}
struct Origin {
uint32 srcEid;
bytes32 sender;
uint64 nonce;
}
interface ILayerZeroEndpointV2 {
event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);
event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);
event PacketDelivered(Origin origin, address receiver);
event LzReceiveAlert(
address indexed receiver,
address indexed executor,
Origin origin,
bytes32 guid,
uint256 gas,
uint256 value,
bytes message,
bytes extraData,
bytes reason
);
event LzTokenSet(address token);
event DelegateSet(address sender, address delegate);
function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);
function send(
MessagingParams calldata _params,
address _refundAddress
) external payable returns (MessagingReceipt memory);
function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;
function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);
function initializable(Origin calldata _origin, address _receiver) external view returns (bool);
function lzReceive(
Origin calldata _origin,
address _receiver,
bytes32 _guid,
bytes calldata _message,
bytes calldata _extraData
) external payable;
// oapp can burn messages partially by calling this function with its own business logic if messages are verified in order
function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;
function setLzToken(address _lzToken) external;
function lzToken() external view returns (address);
function nativeToken() external view returns (address);
function setDelegate(address _delegate) external;
}// SPDX-License-Identifier: MIT
pragma 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;
function isRegisteredLibrary(address _lib) external view returns (bool);
function getRegisteredLibraries() external view returns (address[] memory);
function setDefaultSendLibrary(uint32 _eid, address _newLib) external;
function defaultSendLibrary(uint32 _eid) external view returns (address);
function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _timeout) external;
function defaultReceiveLibrary(uint32 _eid) external view returns (address);
function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;
function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);
function isSupportedEid(uint32 _eid) external view returns (bool);
function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);
/// ------------------- OApp interfaces -------------------
function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;
function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);
function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);
function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;
function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);
function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _gracePeriod) external;
function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);
function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;
function getConfig(
address _oapp,
address _lib,
uint32 _eid,
uint32 _configType
) external view returns (bytes memory config);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
struct UlnConfig {
uint64 confirmations;
// we store the length of required DVNs and optional DVNs instead of using DVN.length directly to save gas
uint8 requiredDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)
uint8 optionalDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)
uint8 optionalDVNThreshold; // (0, optionalDVNCount]
address[] requiredDVNs; // no duplicates. sorted an an ascending order. allowed overlap with optionalDVNs
address[] optionalDVNs; // no duplicates. sorted an an ascending order. allowed overlap with requiredDVNs
}
interface IUlnBase {
function getUlnConfig(address, uint32) external returns (UlnConfig memory);
}{
"evmVersion": "paris",
"libraries": {},
"metadata": {
"appendCBOR": true,
"bytecodeHash": "ipfs",
"useLiteralContent": false
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": [
"forge-std/=lib/forge-std/src/"
]
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_endpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"params","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"SentDeposits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"indexed":false,"internalType":"bytes[]","name":"messages","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"SentMessages","type":"event"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"origin","type":"tuple"}],"name":"allowInitializePath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"uint128","name":"_nativeAmount","type":"uint128"},{"internalType":"address","name":"_to","type":"address"}],"name":"createNativeDropOption","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"}],"name":"createReceiveOption","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultGasLimit","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpointV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_dstEids","type":"uint32[]"},{"internalType":"bytes[]","name":"_messages","type":"bytes[]"},{"internalType":"bytes[]","name":"_options","type":"bytes[]"}],"name":"estimateFees","outputs":[{"internalType":"uint256[]","name":"nativeFees","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"gasLimitLookup","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nextNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"peers","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_options","type":"bytes"}],"name":"quote","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_depositParams","type":"uint256[]"},{"internalType":"address","name":"_to","type":"address"}],"name":"sendDeposits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_dstEids","type":"uint32[]"},{"internalType":"bytes[]","name":"_messages","type":"bytes[]"}],"name":"sendMessages","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_defaultGasLimit","type":"uint128"}],"name":"setDefaultGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_remoteEids","type":"uint32[]"},{"internalType":"uint128[]","name":"_gasLimits","type":"uint128[]"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_remoteEids","type":"uint32[]"},{"internalType":"bytes32[]","name":"_remoteAddresses","type":"bytes32[]"}],"name":"setPeers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lib","type":"address"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"internalType":"address","name":"dvn","type":"address"}],"name":"setUlnConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
0x60a0604052600280546001600160801b031916614e201790553480156200002557600080fd5b506040516200209d3803806200209d833981016040819052620000489162000126565b6001600160a01b03811660805281816200006282620000cd565b60805160405163ca5eb5e160e01b81526001600160a01b0384811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000aa57600080fd5b505af1158015620000bf573d6000803e3d6000fd5b50505050505050506200015e565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b80516001600160a01b03811681146200012157600080fd5b919050565b600080604083850312156200013a57600080fd5b620001458362000109565b9150620001556020840162000109565b90509250929050565b608051611f0762000196600039600081816102ac0152818161083901528181610c6a01528181610ffc01526112630152611f076000f3fe6080604052600436106101855760003560e01c80638da5cb5b116100d1578063ec089c411161008a578063f3fef3a311610064578063f3fef3a314610480578063fccbe220146104a0578063fee81cf4146104c0578063ff7bd03d146104f357600080fd5b8063ec089c411461043a578063f04e283e1461045a578063f2fde38b1461046d57600080fd5b80638da5cb5b1461036657806394ca88aa1461037f57806395368d2e146103ac578063bb0b6a53146103cc578063ca5eb5e114610407578063d29e9f321461042757600080fd5b80633772df581161013e578063715018a611610118578063715018a6146102e65780637154cc65146102ee5780637d25a05e1461031b57806389a281b61461035357600080fd5b80633772df581461027257806354d1f13d146102925780635e280f111461029a57600080fd5b8063128c99911461019157806313137d65146101b357806325692962146101d757806329b85fff146101df5780632b94e499146101ff57806333ebcb741461021f57600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac3660046113c6565b610523565b005b3480156101bf57600080fd5b506101b16101ce3660046114a6565b50505050505050565b6101b1610611565b3480156101eb57600080fd5b506101b16101fa36600461155b565b610660565b34801561020b57600080fd5b506101b161021a366004611592565b61068a565b34801561022b57600080fd5b5061025561023a36600461161d565b6001602052600090815260409020546001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b34801561027e57600080fd5b506101b161028d3660046113c6565b6108ac565b6101b1610962565b3480156102a657600080fd5b506102ce7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610269565b6101b161099e565b3480156102fa57600080fd5b5061030e610309366004611638565b6109b2565b60405161026991906116cb565b34801561032757600080fd5b5061033b6103363660046116de565b610a28565b6040516001600160401b039091168152602001610269565b6101b1610361366004611708565b610a31565b34801561037257600080fd5b50638b78c6d819546102ce565b34801561038b57600080fd5b5061039f61039a366004611752565b610b16565b60405161026991906117eb565b3480156103b857600080fd5b50600254610255906001600160801b031681565b3480156103d857600080fd5b506103f96103e736600461161d565b60006020819052908152604090205481565b604051908152602001610269565b34801561041357600080fd5b506101b161042236600461182f565b610c43565b6101b16104353660046113c6565b610cc2565b34801561044657600080fd5b5061030e61045536600461161d565b610dbe565b6101b161046836600461182f565b610e49565b6101b161047b36600461182f565b610e89565b34801561048c57600080fd5b506101b161049b36600461184a565b610eb0565b3480156104ac57600080fd5b506103f96104bb3660046118ac565b610ff7565b3480156104cc57600080fd5b506103f96104db36600461182f565b63389a75e1600c908152600091909152602090205490565b3480156104ff57600080fd5b5061051361050e36600461197b565b6110ff565b6040519015158152602001610269565b61052b611122565b8281146105715760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d0409ad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60005b8381101561060a5782828281811061058e5761058e611997565b90506020020160208101906105a3919061155b565b600160008787858181106105b9576105b9611997565b90506020020160208101906105ce919061161d565b63ffffffff168152602081019190915260400160002080546001600160801b0319166001600160801b0392909216919091179055600101610574565b5050505050565b60006202a3006001600160401b03164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610668611122565b600280546001600160801b0319166001600160801b0392909216919091179055565b610692611122565b6000826001600160401b038111156106ac576106ac611866565b6040519080825280602002602001820160405280156106f957816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816106ca5790505b50905060005b838110156108215760408051600080825260016020808401828152606085018652939492939285019080368337019050509050848160008151811061074657610746611997565b6001600160a01b039092166020928302919091018201526040805160c0810182526001600160401b038b1681526001818401526000818301819052606082018190526080820185905260a08201869052915191926107a492016119f2565b60408051601f19818403018152606083019091529150808989878181106107cd576107cd611997565b90506020020160208101906107e2919061161d565b63ffffffff16815260026020820152604001829052855186908690811061080b5761080b611997565b60209081029190910101525050506001016106ff565b506040516306dbd9f960e41b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636dbd9f90906108729030908a908690600401611a6e565b600060405180830381600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b50505050505050505050565b6108b4611122565b8281146108f55760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d0409ad2e6dac2e8c6d608b1b6044820152606401610568565b60005b8381101561060a5782828281811061091257610912611997565b9050602002013560008087878581811061092e5761092e611997565b9050602002016020810190610943919061161d565b63ffffffff1681526020810191909152604001600020556001016108f8565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6109a6611122565b6109b0600061113d565b565b60606109bd84610dbe565b6040516001600160801b0319608086901b1660208201526001600160a01b038416603082015260019060319060029060500160408051601f1981840301815290829052610a109594939291602001611b12565b60405160208183030381529060405290509392505050565b60005b92915050565b6000805b83811015610a9057610a7c60e0868684818110610a5457610a54611997565b90506020020135901c868684818110610a6f57610a6f611997565b905060200201358561117b565b610a869083611b79565b9150600101610a35565b5080341015610acf5760405162461bcd60e51b815260206004820152600b60248201526a11995948139bdd0813595d60aa1b6044820152606401610568565b7fa22a487af6300dc77db439586e8ce7028fd7f1d734efd33b287bc1e2af4cd162848484348533604051610b0896959493929190611b9a565b60405180910390a150505050565b6060856001600160401b03811115610b3057610b30611866565b604051908082528060200260200182016040528015610b59578160200160208202803683370190505b50905060005b86811015610c3857610c13888883818110610b7c57610b7c611997565b9050602002016020810190610b91919061161d565b878784818110610ba357610ba3611997565b9050602002810190610bb59190611bf8565b878786818110610bc757610bc7611997565b9050602002810190610bd99190611bf8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ff792505050565b828281518110610c2557610c25611997565b6020908102919091010152600101610b5f565b509695505050505050565b610c4b611122565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015610cae57600080fd5b505af115801561060a573d6000803e3d6000fd5b6000805b82811015610d3557610d21868683818110610ce357610ce3611997565b9050602002016020810190610cf8919061161d565b858584818110610d0a57610d0a611997565b9050602002810190610d1c9190611bf8565b6111b2565b610d2b9083611b79565b9150600101610cc6565b5080341015610d745760405162461bcd60e51b815260206004820152600b60248201526a11995948139bdd0813595d60aa1b6044820152606401610568565b7f14af90211b59e95afdafa93c2cb547e61a4e6b0e74cfad8c3d7b6c3d48e6c29d85858585348633604051610daf9796959493929190611c67565b60405180910390a15050505050565b604051600360f01b6020820152606090602201604051602081830303815290604052600160116001610def866111fb565b604051602001610e12919060809190911b6001600160801b031916815260100190565b60408051601f1981840301815290829052610e339594939291602001611b12565b6040516020818303038152906040529050919050565b610e51611122565b63389a75e1600c52806000526020600c208054421115610e7957636f5e88186000526004601cfd5b60009055610e868161113d565b50565b610e91611122565b8060601b610ea757637448fbae6000526004601cfd5b610e868161113d565b610eb8611122565b60006001600160a01b038316610f185760405133904790600081818185875af1925050503d8060008114610f08576040519150601f19603f3d011682016040523d82523d6000602084013e610f0d565b606091505b505080915050610fb3565b604051336024820152604481018390526001600160a01b0384169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b17905251610f6b9190611d6b565b6000604051808303816000865af19150503d8060008114610fa8576040519150601f19603f3d011682016040523d82523d6000602084013e610fad565b606091505b50909150505b80610ff25760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc811985a5b1959608a1b6044820152606401610568565b505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808963ffffffff1681526020016110498a611234565b815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201889052604091820152516001600160e01b031960e084901b1681526110b491903090600401611d87565b6040805180830381865afa1580156110d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f49190611e4e565b519695505050505050565b60006020820180359061111b90611116908561161d565b611234565b1492915050565b638b78c6d8195433146109b0576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6000806111a4856040518060200160405280600081525061119d8888886109b2565b4730611259565b604001515195945050505050565b6000806111a48585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061119d92508a9150610dbe9050565b63ffffffff81166000908152600160205260408120546001600160801b0316808203610a2b5750506002546001600160801b0316919050565b63ffffffff8116600090815260208190526040812054808203610a2b57503092915050565b611261611334565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450846040518060a001604052808a63ffffffff1681526020016112b18b611234565b815260200189815260200188815260200160001515815250856040518463ffffffff1660e01b81526004016112e7929190611d87565b60806040518083038185885af1158015611305573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061132a9190611e6a565b9695505050505050565b60405180606001604052806000801916815260200160006001600160401b03168152602001611376604051806040016040528060008152602001600081525090565b905290565b60008083601f84011261138d57600080fd5b5081356001600160401b038111156113a457600080fd5b6020830191508360208260051b85010111156113bf57600080fd5b9250929050565b600080600080604085870312156113dc57600080fd5b84356001600160401b03808211156113f357600080fd5b6113ff8883890161137b565b9096509450602087013591508082111561141857600080fd5b506114258782880161137b565b95989497509550505050565b60006060828403121561144357600080fd5b50919050565b60008083601f84011261145b57600080fd5b5081356001600160401b0381111561147257600080fd5b6020830191508360208285010111156113bf57600080fd5b80356001600160a01b03811681146114a157600080fd5b919050565b600080600080600080600060e0888a0312156114c157600080fd5b6114cb8989611431565b96506060880135955060808801356001600160401b03808211156114ee57600080fd5b6114fa8b838c01611449565b909750955085915061150e60a08b0161148a565b945060c08a013591508082111561152457600080fd5b506115318a828b01611449565b989b979a50959850939692959293505050565b80356001600160801b03811681146114a157600080fd5b60006020828403121561156d57600080fd5b61157682611544565b9392505050565b6001600160401b0381168114610e8657600080fd5b6000806000806000608086880312156115aa57600080fd5b6115b38661148a565b945060208601356115c38161157d565b935060408601356001600160401b038111156115de57600080fd5b6115ea8882890161137b565b90945092506115fd90506060870161148a565b90509295509295909350565b803563ffffffff811681146114a157600080fd5b60006020828403121561162f57600080fd5b61157682611609565b60008060006060848603121561164d57600080fd5b61165684611609565b925061166460208501611544565b91506116726040850161148a565b90509250925092565b60005b8381101561169657818101518382015260200161167e565b50506000910152565b600081518084526116b781602086016020860161167b565b601f01601f19169290920160200192915050565b602081526000611576602083018461169f565b600080604083850312156116f157600080fd5b6116fa83611609565b946020939093013593505050565b60008060006040848603121561171d57600080fd5b83356001600160401b0381111561173357600080fd5b61173f8682870161137b565b909450925061167290506020850161148a565b6000806000806000806060878903121561176b57600080fd5b86356001600160401b038082111561178257600080fd5b61178e8a838b0161137b565b909850965060208901359150808211156117a757600080fd5b6117b38a838b0161137b565b909650945060408901359150808211156117cc57600080fd5b506117d989828a0161137b565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b8181101561182357835183529284019291840191600101611807565b50909695505050505050565b60006020828403121561184157600080fd5b6115768261148a565b6000806040838503121561185d57600080fd5b6116fa8361148a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156118a4576118a4611866565b604052919050565b600080600080606085870312156118c257600080fd5b6118cb85611609565b93506020808601356001600160401b03808211156118e857600080fd5b6118f489838a01611449565b9096509450604088013591508082111561190d57600080fd5b818801915088601f83011261192157600080fd5b81358181111561193357611933611866565b611945601f8201601f1916850161187c565b9150808252898482850101111561195b57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006060828403121561198d57600080fd5b6115768383611431565b634e487b7160e01b600052603260045260246000fd5b60008151808452602080850194506020840160005b838110156119e75781516001600160a01b0316875295820195908201906001016119c2565b509495945050505050565b602081526001600160401b03825116602082015260ff602083015116604082015260ff604083015116606082015260ff60608301511660808201526000608083015160c060a0840152611a4860e08401826119ad565b905060a0840151601f198483030160c0850152611a6582826119ad565b95945050505050565b6001600160a01b03848116825283166020808301919091526060604080840182905284518285018190526000936080600583901b87018101939290870190888301875b82811015611b0157898703607f190184528151805163ffffffff9081168952868201511686890152860151868801899052611aee8989018261169f565b9750509284019290840190600101611ab1565b50949b9a5050505050505050505050565b60008651611b24818460208b0161167b565b6001600160f81b031960f888811b82169285019283526001600160f01b031960f089901b16600184015286901b1660038201528351611b6a81600484016020880161167b565b01600401979650505050505050565b80820180821115610a2b57634e487b7160e01b600052601160045260246000fd5b60a0808252810186905260006001600160fb1b03871115611bba57600080fd5b8660051b808960c08501376001600160a01b039687166020840152604083019590955250606081019290925290921660808301520160c00192915050565b6000808335601e19843603018112611c0f57600080fd5b8301803591506001600160401b03821115611c2957600080fd5b6020019150368190038213156113bf57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60a0808252810187905260008860c08301825b8a811015611ca55763ffffffff611c9084611609565b16825260209283019290910190600101611c7a565b506020915083810382850152808882528282019050828960051b8301018a60005b8b811015611d3557848303601f190184528135368e9003601e19018112611cec57600080fd5b8d0186810190356001600160401b03811115611d0757600080fd5b803603821315611d1657600080fd5b611d21858284611c3e565b958801959450505090850190600101611cc6565b505080945050505050846040830152836060830152611d5f60808301846001600160a01b03169052565b98975050505050505050565b60008251611d7d81846020870161167b565b9190910192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152611dbd60e084018261169f565b90506060850151603f198483030160a0850152611dda828261169f565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215611e1257600080fd5b604051604081018181106001600160401b0382111715611e3457611e34611866565b604052825181526020928301519281019290925250919050565b600060408284031215611e6057600080fd5b6115768383611e00565b600060808284031215611e7c57600080fd5b604051606081018181106001600160401b0382111715611e9e57611e9e611866565b604052825181526020830151611eb38161157d565b6020820152611ec58460408501611e00565b6040820152939250505056fea2646970667358221220374c18d1f323c1e2f281875651ad5117a969b81f44e9bc3a63955ee5c106794164736f6c63430008170033000000000000000000000000004fbb1e3ae907fa7feccbcf8e3607c9911eb5230000000000000000000000001a44076050125825900e736c501f859c50fe728c
Deployed Bytecode
0x6080604052600436106101855760003560e01c80638da5cb5b116100d1578063ec089c411161008a578063f3fef3a311610064578063f3fef3a314610480578063fccbe220146104a0578063fee81cf4146104c0578063ff7bd03d146104f357600080fd5b8063ec089c411461043a578063f04e283e1461045a578063f2fde38b1461046d57600080fd5b80638da5cb5b1461036657806394ca88aa1461037f57806395368d2e146103ac578063bb0b6a53146103cc578063ca5eb5e114610407578063d29e9f321461042757600080fd5b80633772df581161013e578063715018a611610118578063715018a6146102e65780637154cc65146102ee5780637d25a05e1461031b57806389a281b61461035357600080fd5b80633772df581461027257806354d1f13d146102925780635e280f111461029a57600080fd5b8063128c99911461019157806313137d65146101b357806325692962146101d757806329b85fff146101df5780632b94e499146101ff57806333ebcb741461021f57600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac3660046113c6565b610523565b005b3480156101bf57600080fd5b506101b16101ce3660046114a6565b50505050505050565b6101b1610611565b3480156101eb57600080fd5b506101b16101fa36600461155b565b610660565b34801561020b57600080fd5b506101b161021a366004611592565b61068a565b34801561022b57600080fd5b5061025561023a36600461161d565b6001602052600090815260409020546001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b34801561027e57600080fd5b506101b161028d3660046113c6565b6108ac565b6101b1610962565b3480156102a657600080fd5b506102ce7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c81565b6040516001600160a01b039091168152602001610269565b6101b161099e565b3480156102fa57600080fd5b5061030e610309366004611638565b6109b2565b60405161026991906116cb565b34801561032757600080fd5b5061033b6103363660046116de565b610a28565b6040516001600160401b039091168152602001610269565b6101b1610361366004611708565b610a31565b34801561037257600080fd5b50638b78c6d819546102ce565b34801561038b57600080fd5b5061039f61039a366004611752565b610b16565b60405161026991906117eb565b3480156103b857600080fd5b50600254610255906001600160801b031681565b3480156103d857600080fd5b506103f96103e736600461161d565b60006020819052908152604090205481565b604051908152602001610269565b34801561041357600080fd5b506101b161042236600461182f565b610c43565b6101b16104353660046113c6565b610cc2565b34801561044657600080fd5b5061030e61045536600461161d565b610dbe565b6101b161046836600461182f565b610e49565b6101b161047b36600461182f565b610e89565b34801561048c57600080fd5b506101b161049b36600461184a565b610eb0565b3480156104ac57600080fd5b506103f96104bb3660046118ac565b610ff7565b3480156104cc57600080fd5b506103f96104db36600461182f565b63389a75e1600c908152600091909152602090205490565b3480156104ff57600080fd5b5061051361050e36600461197b565b6110ff565b6040519015158152602001610269565b61052b611122565b8281146105715760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d0409ad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60005b8381101561060a5782828281811061058e5761058e611997565b90506020020160208101906105a3919061155b565b600160008787858181106105b9576105b9611997565b90506020020160208101906105ce919061161d565b63ffffffff168152602081019190915260400160002080546001600160801b0319166001600160801b0392909216919091179055600101610574565b5050505050565b60006202a3006001600160401b03164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610668611122565b600280546001600160801b0319166001600160801b0392909216919091179055565b610692611122565b6000826001600160401b038111156106ac576106ac611866565b6040519080825280602002602001820160405280156106f957816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816106ca5790505b50905060005b838110156108215760408051600080825260016020808401828152606085018652939492939285019080368337019050509050848160008151811061074657610746611997565b6001600160a01b039092166020928302919091018201526040805160c0810182526001600160401b038b1681526001818401526000818301819052606082018190526080820185905260a08201869052915191926107a492016119f2565b60408051601f19818403018152606083019091529150808989878181106107cd576107cd611997565b90506020020160208101906107e2919061161d565b63ffffffff16815260026020820152604001829052855186908690811061080b5761080b611997565b60209081029190910101525050506001016106ff565b506040516306dbd9f960e41b81526001600160a01b037f0000000000000000000000001a44076050125825900e736c501f859c50fe728c1690636dbd9f90906108729030908a908690600401611a6e565b600060405180830381600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b50505050505050505050565b6108b4611122565b8281146108f55760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d0409ad2e6dac2e8c6d608b1b6044820152606401610568565b60005b8381101561060a5782828281811061091257610912611997565b9050602002013560008087878581811061092e5761092e611997565b9050602002016020810190610943919061161d565b63ffffffff1681526020810191909152604001600020556001016108f8565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6109a6611122565b6109b0600061113d565b565b60606109bd84610dbe565b6040516001600160801b0319608086901b1660208201526001600160a01b038416603082015260019060319060029060500160408051601f1981840301815290829052610a109594939291602001611b12565b60405160208183030381529060405290509392505050565b60005b92915050565b6000805b83811015610a9057610a7c60e0868684818110610a5457610a54611997565b90506020020135901c868684818110610a6f57610a6f611997565b905060200201358561117b565b610a869083611b79565b9150600101610a35565b5080341015610acf5760405162461bcd60e51b815260206004820152600b60248201526a11995948139bdd0813595d60aa1b6044820152606401610568565b7fa22a487af6300dc77db439586e8ce7028fd7f1d734efd33b287bc1e2af4cd162848484348533604051610b0896959493929190611b9a565b60405180910390a150505050565b6060856001600160401b03811115610b3057610b30611866565b604051908082528060200260200182016040528015610b59578160200160208202803683370190505b50905060005b86811015610c3857610c13888883818110610b7c57610b7c611997565b9050602002016020810190610b91919061161d565b878784818110610ba357610ba3611997565b9050602002810190610bb59190611bf8565b878786818110610bc757610bc7611997565b9050602002810190610bd99190611bf8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ff792505050565b828281518110610c2557610c25611997565b6020908102919091010152600101610b5f565b509695505050505050565b610c4b611122565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000001a44076050125825900e736c501f859c50fe728c169063ca5eb5e190602401600060405180830381600087803b158015610cae57600080fd5b505af115801561060a573d6000803e3d6000fd5b6000805b82811015610d3557610d21868683818110610ce357610ce3611997565b9050602002016020810190610cf8919061161d565b858584818110610d0a57610d0a611997565b9050602002810190610d1c9190611bf8565b6111b2565b610d2b9083611b79565b9150600101610cc6565b5080341015610d745760405162461bcd60e51b815260206004820152600b60248201526a11995948139bdd0813595d60aa1b6044820152606401610568565b7f14af90211b59e95afdafa93c2cb547e61a4e6b0e74cfad8c3d7b6c3d48e6c29d85858585348633604051610daf9796959493929190611c67565b60405180910390a15050505050565b604051600360f01b6020820152606090602201604051602081830303815290604052600160116001610def866111fb565b604051602001610e12919060809190911b6001600160801b031916815260100190565b60408051601f1981840301815290829052610e339594939291602001611b12565b6040516020818303038152906040529050919050565b610e51611122565b63389a75e1600c52806000526020600c208054421115610e7957636f5e88186000526004601cfd5b60009055610e868161113d565b50565b610e91611122565b8060601b610ea757637448fbae6000526004601cfd5b610e868161113d565b610eb8611122565b60006001600160a01b038316610f185760405133904790600081818185875af1925050503d8060008114610f08576040519150601f19603f3d011682016040523d82523d6000602084013e610f0d565b606091505b505080915050610fb3565b604051336024820152604481018390526001600160a01b0384169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b17905251610f6b9190611d6b565b6000604051808303816000865af19150503d8060008114610fa8576040519150601f19603f3d011682016040523d82523d6000602084013e610fad565b606091505b50909150505b80610ff25760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc811985a5b1959608a1b6044820152606401610568565b505050565b6000807f0000000000000000000000001a44076050125825900e736c501f859c50fe728c6001600160a01b031663ddc28c586040518060a001604052808963ffffffff1681526020016110498a611234565b815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201889052604091820152516001600160e01b031960e084901b1681526110b491903090600401611d87565b6040805180830381865afa1580156110d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f49190611e4e565b519695505050505050565b60006020820180359061111b90611116908561161d565b611234565b1492915050565b638b78c6d8195433146109b0576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6000806111a4856040518060200160405280600081525061119d8888886109b2565b4730611259565b604001515195945050505050565b6000806111a48585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061119d92508a9150610dbe9050565b63ffffffff81166000908152600160205260408120546001600160801b0316808203610a2b5750506002546001600160801b0316919050565b63ffffffff8116600090815260208190526040812054808203610a2b57503092915050565b611261611334565b7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c6001600160a01b0316632637a450846040518060a001604052808a63ffffffff1681526020016112b18b611234565b815260200189815260200188815260200160001515815250856040518463ffffffff1660e01b81526004016112e7929190611d87565b60806040518083038185885af1158015611305573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061132a9190611e6a565b9695505050505050565b60405180606001604052806000801916815260200160006001600160401b03168152602001611376604051806040016040528060008152602001600081525090565b905290565b60008083601f84011261138d57600080fd5b5081356001600160401b038111156113a457600080fd5b6020830191508360208260051b85010111156113bf57600080fd5b9250929050565b600080600080604085870312156113dc57600080fd5b84356001600160401b03808211156113f357600080fd5b6113ff8883890161137b565b9096509450602087013591508082111561141857600080fd5b506114258782880161137b565b95989497509550505050565b60006060828403121561144357600080fd5b50919050565b60008083601f84011261145b57600080fd5b5081356001600160401b0381111561147257600080fd5b6020830191508360208285010111156113bf57600080fd5b80356001600160a01b03811681146114a157600080fd5b919050565b600080600080600080600060e0888a0312156114c157600080fd5b6114cb8989611431565b96506060880135955060808801356001600160401b03808211156114ee57600080fd5b6114fa8b838c01611449565b909750955085915061150e60a08b0161148a565b945060c08a013591508082111561152457600080fd5b506115318a828b01611449565b989b979a50959850939692959293505050565b80356001600160801b03811681146114a157600080fd5b60006020828403121561156d57600080fd5b61157682611544565b9392505050565b6001600160401b0381168114610e8657600080fd5b6000806000806000608086880312156115aa57600080fd5b6115b38661148a565b945060208601356115c38161157d565b935060408601356001600160401b038111156115de57600080fd5b6115ea8882890161137b565b90945092506115fd90506060870161148a565b90509295509295909350565b803563ffffffff811681146114a157600080fd5b60006020828403121561162f57600080fd5b61157682611609565b60008060006060848603121561164d57600080fd5b61165684611609565b925061166460208501611544565b91506116726040850161148a565b90509250925092565b60005b8381101561169657818101518382015260200161167e565b50506000910152565b600081518084526116b781602086016020860161167b565b601f01601f19169290920160200192915050565b602081526000611576602083018461169f565b600080604083850312156116f157600080fd5b6116fa83611609565b946020939093013593505050565b60008060006040848603121561171d57600080fd5b83356001600160401b0381111561173357600080fd5b61173f8682870161137b565b909450925061167290506020850161148a565b6000806000806000806060878903121561176b57600080fd5b86356001600160401b038082111561178257600080fd5b61178e8a838b0161137b565b909850965060208901359150808211156117a757600080fd5b6117b38a838b0161137b565b909650945060408901359150808211156117cc57600080fd5b506117d989828a0161137b565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b8181101561182357835183529284019291840191600101611807565b50909695505050505050565b60006020828403121561184157600080fd5b6115768261148a565b6000806040838503121561185d57600080fd5b6116fa8361148a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156118a4576118a4611866565b604052919050565b600080600080606085870312156118c257600080fd5b6118cb85611609565b93506020808601356001600160401b03808211156118e857600080fd5b6118f489838a01611449565b9096509450604088013591508082111561190d57600080fd5b818801915088601f83011261192157600080fd5b81358181111561193357611933611866565b611945601f8201601f1916850161187c565b9150808252898482850101111561195b57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006060828403121561198d57600080fd5b6115768383611431565b634e487b7160e01b600052603260045260246000fd5b60008151808452602080850194506020840160005b838110156119e75781516001600160a01b0316875295820195908201906001016119c2565b509495945050505050565b602081526001600160401b03825116602082015260ff602083015116604082015260ff604083015116606082015260ff60608301511660808201526000608083015160c060a0840152611a4860e08401826119ad565b905060a0840151601f198483030160c0850152611a6582826119ad565b95945050505050565b6001600160a01b03848116825283166020808301919091526060604080840182905284518285018190526000936080600583901b87018101939290870190888301875b82811015611b0157898703607f190184528151805163ffffffff9081168952868201511686890152860151868801899052611aee8989018261169f565b9750509284019290840190600101611ab1565b50949b9a5050505050505050505050565b60008651611b24818460208b0161167b565b6001600160f81b031960f888811b82169285019283526001600160f01b031960f089901b16600184015286901b1660038201528351611b6a81600484016020880161167b565b01600401979650505050505050565b80820180821115610a2b57634e487b7160e01b600052601160045260246000fd5b60a0808252810186905260006001600160fb1b03871115611bba57600080fd5b8660051b808960c08501376001600160a01b039687166020840152604083019590955250606081019290925290921660808301520160c00192915050565b6000808335601e19843603018112611c0f57600080fd5b8301803591506001600160401b03821115611c2957600080fd5b6020019150368190038213156113bf57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60a0808252810187905260008860c08301825b8a811015611ca55763ffffffff611c9084611609565b16825260209283019290910190600101611c7a565b506020915083810382850152808882528282019050828960051b8301018a60005b8b811015611d3557848303601f190184528135368e9003601e19018112611cec57600080fd5b8d0186810190356001600160401b03811115611d0757600080fd5b803603821315611d1657600080fd5b611d21858284611c3e565b958801959450505090850190600101611cc6565b505080945050505050846040830152836060830152611d5f60808301846001600160a01b03169052565b98975050505050505050565b60008251611d7d81846020870161167b565b9190910192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152611dbd60e084018261169f565b90506060850151603f198483030160a0850152611dda828261169f565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215611e1257600080fd5b604051604081018181106001600160401b0382111715611e3457611e34611866565b604052825181526020928301519281019290925250919050565b600060408284031215611e6057600080fd5b6115768383611e00565b600060808284031215611e7c57600080fd5b604051606081018181106001600160401b0382111715611e9e57611e9e611866565b604052825181526020830151611eb38161157d565b6020820152611ec58460408501611e00565b6040820152939250505056fea2646970667358221220374c18d1f323c1e2f281875651ad5117a969b81f44e9bc3a63955ee5c106794164736f6c63430008170033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MNT
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.