ETH Price: $2,861.91 (-2.70%)

Contract

0x6b98679eEC5b5DE3A803Dc801B2f12aDdDCD39Ec

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 17 internal transactions

Parent Transaction Hash Block From To
4068018992025-12-03 16:57:4453 days ago1764781064
0x6b98679e...DdDCD39Ec
0.00003738 ETH
4068018992025-12-03 16:57:4453 days ago1764781064
0x6b98679e...DdDCD39Ec
0.00003738 ETH
4068017082025-12-03 16:56:5653 days ago1764781016
0x6b98679e...DdDCD39Ec
0.00003738 ETH
4068017082025-12-03 16:56:5653 days ago1764781016
0x6b98679e...DdDCD39Ec
0.00003738 ETH
3947392602025-10-29 20:03:4288 days ago1761768222
0x6b98679e...DdDCD39Ec
0.00013949 ETH
3947392602025-10-29 20:03:4288 days ago1761768222
0x6b98679e...DdDCD39Ec
0.00013949 ETH
3947110612025-10-29 18:06:1988 days ago1761761179
0x6b98679e...DdDCD39Ec
0.00013949 ETH
3947110612025-10-29 18:06:1988 days ago1761761179
0x6b98679e...DdDCD39Ec
0.00013949 ETH
3946860882025-10-29 16:22:2788 days ago1761754947
0x6b98679e...DdDCD39Ec
0.00013949 ETH
3946860882025-10-29 16:22:2788 days ago1761754947
0x6b98679e...DdDCD39Ec
0.00013949 ETH
3728134942025-08-27 11:04:52151 days ago1756292692
0x6b98679e...DdDCD39Ec
0.00023912 ETH
3728134942025-08-27 11:04:52151 days ago1756292692
0x6b98679e...DdDCD39Ec
0.00023912 ETH
3682619202025-08-14 7:25:50164 days ago1755156350
0x6b98679e...DdDCD39Ec
0.00001424 ETH
3682619202025-08-14 7:25:50164 days ago1755156350
0x6b98679e...DdDCD39Ec
0.00001424 ETH
3587425082025-07-17 19:06:10192 days ago1752779170
0x6b98679e...DdDCD39Ec
0.00456926 ETH
3587425082025-07-17 19:06:10192 days ago1752779170
0x6b98679e...DdDCD39Ec
0.00456926 ETH
3579862242025-07-15 14:40:34194 days ago1752590434  Contract Creation0 ETH

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WormholeAdapter

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 1 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.28;

import {Auth} from "src/misc/Auth.sol";
import {CastLib} from "src/misc/libraries/CastLib.sol";

import {IMessageHandler} from "src/common/interfaces/IMessageHandler.sol";

import {
    IWormholeAdapter,
    IAdapter,
    IWormholeRelayer,
    IWormholeDeliveryProvider,
    IWormholeReceiver,
    WormholeSource,
    WormholeDestination
} from "src/common/interfaces/adapters/IWormholeAdapter.sol";

/// @title  Wormhole Adapter
/// @notice Routing contract that integrates with the Wormhole Relayer service
contract WormholeAdapter is Auth, IWormholeAdapter {
    using CastLib for bytes32;

    uint16 public immutable localWormholeId;
    IMessageHandler public immutable entrypoint;
    IWormholeRelayer public immutable relayer;

    mapping(uint16 wormholeId => WormholeSource) public sources;
    mapping(uint16 centrifugeId => WormholeDestination) public destinations;

    constructor(IMessageHandler entrypoint_, address relayer_, address deployer) Auth(deployer) {
        entrypoint = entrypoint_;
        relayer = IWormholeRelayer(relayer_);

        IWormholeDeliveryProvider deliveryProvider = IWormholeDeliveryProvider(relayer.getDefaultDeliveryProvider());
        localWormholeId = deliveryProvider.chainId();
    }

    //----------------------------------------------------------------------------------------------
    // Administration
    //----------------------------------------------------------------------------------------------

    /// @inheritdoc IWormholeAdapter
    function file(bytes32 what, uint16 centrifugeId, uint16 wormholeId, address addr) external auth {
        if (what == "sources") sources[wormholeId] = WormholeSource(centrifugeId, addr);
        else if (what == "destinations") destinations[centrifugeId] = WormholeDestination(wormholeId, addr);
        else revert FileUnrecognizedParam();
        emit File(what, centrifugeId, wormholeId, addr);
    }

    //----------------------------------------------------------------------------------------------
    // Incoming
    //----------------------------------------------------------------------------------------------

    /// @inheritdoc IWormholeReceiver
    function receiveWormholeMessages(
        bytes memory payload,
        bytes[] memory, /* additionalVaas */
        bytes32 sourceAddress,
        uint16 sourceWormholeId,
        bytes32 /* deliveryHash */
    ) external payable {
        WormholeSource memory source = sources[sourceWormholeId];
        require(source.addr != address(0) && source.addr == sourceAddress.toAddressLeftPadded(), InvalidSource());
        require(msg.sender == address(relayer), NotWormholeRelayer());

        entrypoint.handle(source.centrifugeId, payload);
    }

    //----------------------------------------------------------------------------------------------
    // Outgoing
    //----------------------------------------------------------------------------------------------

    /// @inheritdoc IAdapter
    function send(uint16 centrifugeId, bytes calldata payload, uint256 gasLimit, address refund)
        external
        payable
        returns (bytes32 adapterData)
    {
        require(msg.sender == address(entrypoint), NotEntrypoint());
        WormholeDestination memory destination = destinations[centrifugeId];
        require(destination.wormholeId != 0, UnknownChainId());

        uint64 sequence = relayer.sendPayloadToEvm{value: msg.value}(
            destination.wormholeId, destination.addr, payload, 0, gasLimit, localWormholeId, refund
        );

        adapterData = bytes32(bytes8(sequence));
    }

    /// @inheritdoc IAdapter
    function estimate(uint16 centrifugeId, bytes calldata, uint256 gasLimit)
        external
        view
        returns (uint256 nativePriceQuote)
    {
        (nativePriceQuote,) = relayer.quoteEVMDeliveryPrice(destinations[centrifugeId].wormholeId, 0, gasLimit);
    }
}

// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity 0.8.28;

import {IAuth} from "src/misc/interfaces/IAuth.sol";

/// @title  Auth
/// @notice Simple authentication pattern
/// @author Based on code from https://github.com/makerdao/dss
abstract contract Auth is IAuth {
    /// @inheritdoc IAuth
    mapping(address => uint256) public wards;

    constructor(address initialWard) {
        wards[initialWard] = 1;
        emit Rely(initialWard);
    }

    /// @dev Check if the msg.sender has permissions
    modifier auth() {
        require(wards[msg.sender] == 1, NotAuthorized());
        _;
    }

    /// @inheritdoc IAuth
    function rely(address user) public auth {
        wards[user] = 1;
        emit Rely(user);
    }

    /// @inheritdoc IAuth
    function deny(address user) public auth {
        wards[user] = 0;
        emit Deny(user);
    }
}

// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity 0.8.28;

/// @title  CastLib
library CastLib {
    function toAddressLeftPadded(bytes32 addr) internal pure returns (address) {
        require(bytes12(addr) == 0, "First 12 bytes should be zero");
        return address(uint160(uint256(addr)));
    }

    function toBytes32LeftPadded(address addr) internal pure returns (bytes32) {
        return bytes32(uint256(uint160(addr)));
    }

    function toAddress(bytes32 addr) internal pure returns (address) {
        require(uint96(uint256(addr)) == 0, "Input should be 20 bytes");
        return address(bytes20(addr));
    }

    function toBytes32(address addr) internal pure returns (bytes32) {
        return bytes32(bytes20(addr));
    }

    /// @dev Adds zero padding
    function toBytes32(string memory source) internal pure returns (bytes32) {
        return bytes32(bytes(source));
    }

    /// @dev Removes zero padding
    function bytes128ToString(bytes memory _bytes128) internal pure returns (string memory) {
        require(_bytes128.length == 128, "Input should be 128 bytes");

        uint8 i = 0;
        while (i < 128 && _bytes128[i] != 0) {
            i++;
        }

        bytes memory bytesArray = new bytes(i);

        for (uint8 j; j < i; j++) {
            bytesArray[j] = _bytes128[j];
        }

        return string(bytesArray);
    }

    function toString(bytes32 _bytes32) internal pure returns (string memory) {
        uint8 i = 0;
        while (i < 32 && _bytes32[i] != 0) {
            i++;
        }
        bytes memory bytesArray = new bytes(i);
        for (i = 0; i < 32 && _bytes32[i] != 0; i++) {
            bytesArray[i] = _bytes32[i];
        }
        return string(bytesArray);
    }
}

// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

/// @notice Generic interface for entities that handle incoming messages
interface IMessageHandler {
    /// @notice Dispatched when an invalid message is trying to handle
    error InvalidMessage(uint8 code);

    /// @notice Handling incoming messages.
    /// @param centrifugeId Source chain
    /// @param message Incoming message
    function handle(uint16 centrifugeId, bytes calldata message) external;
}

// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

import {IAdapter} from "src/common/interfaces/IAdapter.sol";

// From https://github.com/wormhole-foundation/wormhole-solidity-sdk/blob/main/src/interfaces/IWormholeRelayer.sol#L75
interface IWormholeRelayer {
    /**
     * @notice Publishes an instruction for the default delivery provider
     * to relay a payload to the address `targetAddress` on chain `targetChain`
     * with gas limit `gasLimit` and `msg.value` equal to `receiverValue`
     *
     * Any refunds (from leftover gas) will be sent to `refundAddress` on chain `refundChain`
     * `targetAddress` must implement the IWormholeReceiver interface
     *
     * This function must be called with `msg.value` equal to `quoteEVMDeliveryPrice(targetChain, receiverValue,
     * gasLimit)`
     *
     * @param targetChain in Wormhole Chain ID format
     * @param targetAddress address to call on targetChain (that implements IWormholeReceiver)
     * @param payload arbitrary bytes to pass in as parameter in call to `targetAddress`
     * @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain
     * currency units)
     * @param gasLimit gas limit with which to call `targetAddress`. Any units of gas unused will be refunded according
     * to the
     *        `targetChainRefundPerGasUnused` rate quoted by the delivery provider
     * @param refundChain The chain to deliver any refund to, in Wormhole Chain ID format
     * @param refundAddress The address on `refundChain` to deliver any refund to
     * @return sequence sequence number of published VAA containing delivery instructions
     */
    function sendPayloadToEvm(
        uint16 targetChain,
        address targetAddress,
        bytes memory payload,
        uint256 receiverValue,
        uint256 gasLimit,
        uint16 refundChain,
        address refundAddress
    ) external payable returns (uint64 sequence);

    /**
     * @notice Returns the price to request a relay to chain `targetChain`, using the default delivery provider
     *
     * @param targetChain in Wormhole Chain ID format
     * @param receiverValue msg.value that delivery provider should pass in for call to `targetAddress` (in targetChain
     * currency units)
     * @param gasLimit gas limit with which to call `targetAddress`.
     * @return nativePriceQuote Price, in units of current chain currency, that the delivery provider charges to perform
     * the relay
     * @return targetChainRefundPerGasUnused amount of target chain currency that will be refunded per unit of gas
     * unused,
     *         if a refundAddress is specified.
     *         Note: This value can be overridden by the delivery provider on the target chain. The returned value here
     * should be considered to be a
     *         promise by the delivery provider of the amount of refund per gas unused that will be returned to the
     * refundAddress at the target chain.
     *         If a delivery provider decides to override, this will be visible as part of the emitted Delivery event on
     * the target chain.
     */
    function quoteEVMDeliveryPrice(uint16 targetChain, uint256 receiverValue, uint256 gasLimit)
        external
        view
        returns (uint256 nativePriceQuote, uint256 targetChainRefundPerGasUnused);

    /**
     * @notice Returns the address of the current default delivery provider
     * @return deliveryProvider The address of (the default delivery provider)'s contract on this source
     *   chain. This must be a contract that implements IDeliveryProvider.
     */
    function getDefaultDeliveryProvider() external view returns (address deliveryProvider);
}

interface IWormholeDeliveryProvider {
    /// @notice Returns the chain ID.
    function chainId() external view returns (uint16);
}

// From
// https://github.com/wormhole-foundation/wormhole/blob/main/relayer/ethereum/contracts/interfaces/relayer/IWormholeReceiver.sol
interface IWormholeReceiver {
    /**
     * @notice When a `send` is performed with this contract as the target, this function will be
     *     invoked by the WormholeRelayer contract
     *
     * NOTE: This function should be restricted such that only the Wormhole Relayer contract can call it.
     *
     * We also recommend that this function checks that `sourceChain` and `sourceAddress` are indeed who
     *       you expect to have requested the calling of `send` on the source chain
     *
     * The invocation of this function corresponding to the `send` request will have msg.value equal
     *   to the receiverValue specified in the send request.
     *
     * If the invocation of this function reverts or exceeds the gas limit
     *   specified by the send requester, this delivery will result in a `ReceiverFailure`.
     *
     * @param payload - an arbitrary message which was included in the delivery by the
     *     requester. This message's signature will already have been verified (as long as msg.sender is the Wormhole
     * Relayer contract)
     * @param additionalMessages - Additional messages which were requested to be included in this delivery.
     *      Note: There are no contract-level guarantees that the messages in this array are what was requested
     *      so **you should verify any sensitive information given here!**
     *
     *      For example, if a 'VaaKey' was specified on the source chain, then MAKE SURE the corresponding message here
     *      has valid signatures (by calling `parseAndVerifyVM(message)` on the Wormhole core contract)
     *
     *      This field can be used to perform and relay TokenBridge or CCTP transfers, and there are example
     *      usages of this at
     *         https://github.com/wormhole-foundation/hello-token
     *         https://github.com/wormhole-foundation/hello-cctp
     *
     * @param sourceAddress - the (wormhole format) address on the sending chain which requested
     *     this delivery.
     * @param sourceChain - the wormhole chain ID where this delivery was requested.
     * @param deliveryHash - the VAA hash of the deliveryVAA.
     *
     */
    function receiveWormholeMessages(
        bytes memory payload,
        bytes[] memory additionalMessages,
        bytes32 sourceAddress,
        uint16 sourceChain,
        bytes32 deliveryHash
    ) external payable;
}

struct WormholeSource {
    uint16 centrifugeId;
    address addr;
}

struct WormholeDestination {
    uint16 wormholeId;
    address addr;
}

interface IWormholeAdapter is IAdapter, IWormholeReceiver {
    /// @dev see file() method
    event File(bytes32 indexed what, uint16 fromChainId, uint16 toChainId, address addr);

    error FileUnrecognizedParam();
    error NotWormholeRelayer();
    error InvalidSource();

    /// @notice Configures the adapter
    /// @param what Can be "sources" or "destinations".
    /// @param addr if what == "sources", it represents the source
    /// @param addr if what == "destinations", it represents the destination
    function file(bytes32 what, uint16 centrifugeId, uint16 wormholeId, address addr) external;

    /// @notice Returns the source configuration for a given wormhole chain id
    /// @param wormholeId The remote wormhole id
    /// @return centrifugeId The remote chain id
    /// @return addr The address of the remote wormhole adapter
    function sources(uint16 wormholeId) external view returns (uint16 centrifugeId, address addr);

    /// @notice Returns the destination configuration for a given chain id
    /// @param centrifugeId The remote chain id
    /// @return wormholeId The remote wormhole id
    /// @return addr The address of the remote wormhole adapter
    function destinations(uint16 centrifugeId) external view returns (uint16 wormholeId, address addr);
}

// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

interface IAuth {
    event Rely(address indexed user);
    event Deny(address indexed user);

    error NotAuthorized();

    /// @notice Returns whether the target is a ward (has admin access)
    function wards(address target) external view returns (uint256);

    /// @notice Make user a ward (give them admin access)
    function rely(address user) external;

    /// @notice Remove user as a ward (remove admin access)
    function deny(address user) external;
}

// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

import {IAuth} from "src/misc/interfaces/IAuth.sol";

interface IAdapter is IAuth {
    error NotEntrypoint();
    error UnknownChainId();

    /// @notice Send a payload to the destination chain
    function send(uint16 centrifugeId, bytes calldata payload, uint256 gasLimit, address refund)
        external
        payable
        returns (bytes32 adapterData);

    /// @notice Estimate the total cost in native gas tokens
    function estimate(uint16 centrifugeId, bytes calldata payload, uint256 gasLimit) external view returns (uint256);
}

Settings
{
  "remappings": [
    "forge-std/=lib/forge-std/src/",
    "@chimera/=lib/chimera/src/",
    "createx-forge/=lib/createx-forge/",
    "chimera/=lib/chimera/src/",
    "ds-test/=lib/chimera/lib/forge-std/lib/ds-test/src/",
    "setup-helpers/=lib/setup-helpers/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract IMessageHandler","name":"entrypoint_","type":"address"},{"internalType":"address","name":"relayer_","type":"address"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FileUnrecognizedParam","type":"error"},{"inputs":[],"name":"InvalidSource","type":"error"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"NotEntrypoint","type":"error"},{"inputs":[],"name":"NotWormholeRelayer","type":"error"},{"inputs":[],"name":"UnknownChainId","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint16","name":"fromChainId","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"toChainId","type":"uint16"},{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Rely","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"centrifugeId","type":"uint16"}],"name":"destinations","outputs":[{"internalType":"uint16","name":"wormholeId","type":"uint16"},{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entrypoint","outputs":[{"internalType":"contract IMessageHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"centrifugeId","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"}],"name":"estimate","outputs":[{"internalType":"uint256","name":"nativePriceQuote","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint16","name":"centrifugeId","type":"uint16"},{"internalType":"uint16","name":"wormholeId","type":"uint16"},{"internalType":"address","name":"addr","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"localWormholeId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes[]","name":"","type":"bytes[]"},{"internalType":"bytes32","name":"sourceAddress","type":"bytes32"},{"internalType":"uint16","name":"sourceWormholeId","type":"uint16"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"receiveWormholeMessages","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"relayer","outputs":[{"internalType":"contract IWormholeRelayer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"centrifugeId","type":"uint16"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"address","name":"refund","type":"address"}],"name":"send","outputs":[{"internalType":"bytes32","name":"adapterData","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"wormholeId","type":"uint16"}],"name":"sources","outputs":[{"internalType":"uint16","name":"centrifugeId","type":"uint16"},{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60e060405234801561000f575f5ffd5b5060405161102438038061102483398101604081905261002e91610170565b6001600160a01b0381165f8181526020819052604080822060019055518392917fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6091a2506001600160a01b0380841660a052821660c0819052604080516324320c9f60e01b815290515f92916324320c9f9160048083019260209291908290030181865afa1580156100c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e691906101ba565b9050806001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610124573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014891906101dc565b61ffff16608052506101fd92505050565b6001600160a01b038116811461016d575f5ffd5b50565b5f5f5f60608486031215610182575f5ffd5b835161018d81610159565b602085015190935061019e81610159565b60408501519092506101af81610159565b809150509250925092565b5f602082840312156101ca575f5ffd5b81516101d581610159565b9392505050565b5f602082840312156101ec575f5ffd5b815161ffff811681146101d5575f5ffd5b60805160a05160c051610dd46102505f395f81816101d801528181610498015281816105a1015261080e01525f8181610282015281816105f8015261075401525f818160ab01526108470152610dd45ff3fe608060405260043610610096575f3560e01c80631fa542e11461009a57806329557f97146100e557806335df42fb146101065780635169051714610133578063529dca321461019557806365fae35e146101a85780638406c079146101c757806398ac87c8146102125780639c52a7f114610252578063a65d69d414610271578063abad7f38146102a4578063bf353dbb146102b7575b5f5ffd5b3480156100a5575f5ffd5b506100cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff90911681526020015b60405180910390f35b3480156100f0575f5ffd5b506101046100ff366004610958565b6102e2565b005b348015610111575f5ffd5b506101256101203660046109e6565b61045f565b6040519081526020016100dc565b34801561013e575f5ffd5b5061017361014d366004610a3b565b60026020525f908152604090205461ffff8116906201000090046001600160a01b031682565b6040805161ffff90931683526001600160a01b039091166020830152016100dc565b6101046101a3366004610b0a565b610512565b3480156101b3575f5ffd5b506101046101c2366004610c1e565b610663565b3480156101d2575f5ffd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100dc565b34801561021d575f5ffd5b5061017361022c366004610a3b565b60016020525f908152604090205461ffff8116906201000090046001600160a01b031682565b34801561025d575f5ffd5b5061010461026c366004610c1e565b6106d6565b34801561027c575f5ffd5b506101fa7f000000000000000000000000000000000000000000000000000000000000000081565b6101256102b2366004610c37565b610748565b3480156102c2575f5ffd5b506101256102d1366004610c1e565b5f6020819052908152604090205481565b335f908152602081905260409020546001146103115760405163ea8e4eb560e01b815260040160405180910390fd5b8366736f757263657360c81b0361037e5760408051808201825261ffff80861682526001600160a01b0380851660208085019182528784165f90815260019091529490942092518354945190911662010000026001600160b01b0319909416911617919091179055610409565b836b64657374696e6174696f6e7360a01b036103f05760408051808201825261ffff80851682526001600160a01b0380851660208085019182528884165f90815260029091529490942092518354945190911662010000026001600160b01b0319909416911617919091179055610409565b604051633db0d5b960e01b815260040160405180910390fd5b6040805161ffff8581168252841660208201526001600160a01b03831681830152905185917f949f71fa63325af9e18bccdee794280102e69f0630f067ef62c51f7792e78ab6919081900360600190a250505050565b61ffff8481165f9081526002602052604080822054905163c23ee3c360e01b8152921660048301526024820181905260448201839052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c23ee3c3906064016040805180830381865afa1580156104e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105089190610c9f565b5095945050505050565b61ffff8281165f908152600160209081526040918290208251808401909352549283168252620100009092046001600160a01b031691810182905290158015906105795750610560846108cb565b6001600160a01b031681602001516001600160a01b0316145b61059657604051638154374b60e01b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105df57604051635485bd1b60e01b815260040160405180910390fd5b80516040516313cd6dc760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691634f35b71c9161062e91908a90600401610cc1565b5f604051808303815f87803b158015610645575f5ffd5b505af1158015610657573d5f5f3e3d5ffd5b50505050505050505050565b335f908152602081905260409020546001146106925760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0381165f8181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b335f908152602081905260409020546001146107055760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0381165f81815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b5f336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461079257604051638b29b4d160e01b815260040160405180910390fd5b61ffff8681165f908152600260209081526040808320815180830190925254938416808252620100009094046001600160a01b0316918101919091529190036107ee57604051630da789df60e01b815260040160405180910390fd5b805160208201516040516312d729bd60e21b81525f926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692634b5ca6f49234926108719290918d908d9089908e907f0000000000000000000000000000000000000000000000000000000000000000908f90600401610d01565b60206040518083038185885af115801561088d573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108b29190610d78565b60c01b6001600160c01b03191698975050505050505050565b5f6001600160a01b03198216156109285760405162461bcd60e51b815260206004820152601d60248201527f46697273742031322062797465732073686f756c64206265207a65726f000000604482015260640160405180910390fd5b5090565b803561ffff8116811461093d575f5ffd5b919050565b80356001600160a01b038116811461093d575f5ffd5b5f5f5f5f6080858703121561096b575f5ffd5b8435935061097b6020860161092c565b92506109896040860161092c565b915061099760608601610942565b905092959194509250565b5f5f83601f8401126109b2575f5ffd5b5081356001600160401b038111156109c8575f5ffd5b6020830191508360208285010111156109df575f5ffd5b9250929050565b5f5f5f5f606085870312156109f9575f5ffd5b610a028561092c565b935060208501356001600160401b03811115610a1c575f5ffd5b610a28878288016109a2565b9598909750949560400135949350505050565b5f60208284031215610a4b575f5ffd5b610a548261092c565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610a9757610a97610a5b565b604052919050565b5f82601f830112610aae575f5ffd5b81356001600160401b03811115610ac757610ac7610a5b565b610ada601f8201601f1916602001610a6f565b818152846020838601011115610aee575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a08688031215610b1e575f5ffd5b85356001600160401b03811115610b33575f5ffd5b610b3f88828901610a9f565b95505060208601356001600160401b03811115610b5a575f5ffd5b8601601f81018813610b6a575f5ffd5b80356001600160401b03811115610b8357610b83610a5b565b8060051b610b9360208201610a6f565b9182526020818401810192908101908b841115610bae575f5ffd5b6020850192505b83831015610bf35782356001600160401b03811115610bd2575f5ffd5b610be18d602083890101610a9f565b83525060209283019290910190610bb5565b975050505060408701359350610c0d90506060870161092c565b949793965091946080013592915050565b5f60208284031215610c2e575f5ffd5b610a5482610942565b5f5f5f5f5f60808688031215610c4b575f5ffd5b610c548661092c565b945060208601356001600160401b03811115610c6e575f5ffd5b610c7a888289016109a2565b90955093505060408601359150610c9360608701610942565b90509295509295909350565b5f5f60408385031215610cb0575f5ffd5b505080516020909101519092909150565b61ffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b61ffff891681526001600160a01b038816602082015260e060408201819052810186905285876101008301375f6101008783018101919091526060820195909552608081019390935261ffff9190911660a08301526001600160a01b031660c0820152601f909201601f1916909101019392505050565b5f60208284031215610d88575f5ffd5b81516001600160401b0381168114610a54575f5ffdfea2646970667358221220d1579040e3f00c844228d03c9197ba96c4ebb5fe96aaa41d7e21d6a73b3c145a64736f6c634300081c0033000000000000000000000000457c91384c984b1659157160e8543adb12bc531700000000000000000000000027428dd2d3dd32a4d7f7c497eaaa23130d894911000000000000000000000000b8f0141317f8410a1f87f1b26af3d8bdc4bcf16e

Deployed Bytecode

0x608060405260043610610096575f3560e01c80631fa542e11461009a57806329557f97146100e557806335df42fb146101065780635169051714610133578063529dca321461019557806365fae35e146101a85780638406c079146101c757806398ac87c8146102125780639c52a7f114610252578063a65d69d414610271578063abad7f38146102a4578063bf353dbb146102b7575b5f5ffd5b3480156100a5575f5ffd5b506100cd7f000000000000000000000000000000000000000000000000000000000000001781565b60405161ffff90911681526020015b60405180910390f35b3480156100f0575f5ffd5b506101046100ff366004610958565b6102e2565b005b348015610111575f5ffd5b506101256101203660046109e6565b61045f565b6040519081526020016100dc565b34801561013e575f5ffd5b5061017361014d366004610a3b565b60026020525f908152604090205461ffff8116906201000090046001600160a01b031682565b6040805161ffff90931683526001600160a01b039091166020830152016100dc565b6101046101a3366004610b0a565b610512565b3480156101b3575f5ffd5b506101046101c2366004610c1e565b610663565b3480156101d2575f5ffd5b506101fa7f00000000000000000000000027428dd2d3dd32a4d7f7c497eaaa23130d89491181565b6040516001600160a01b0390911681526020016100dc565b34801561021d575f5ffd5b5061017361022c366004610a3b565b60016020525f908152604090205461ffff8116906201000090046001600160a01b031682565b34801561025d575f5ffd5b5061010461026c366004610c1e565b6106d6565b34801561027c575f5ffd5b506101fa7f000000000000000000000000457c91384c984b1659157160e8543adb12bc531781565b6101256102b2366004610c37565b610748565b3480156102c2575f5ffd5b506101256102d1366004610c1e565b5f6020819052908152604090205481565b335f908152602081905260409020546001146103115760405163ea8e4eb560e01b815260040160405180910390fd5b8366736f757263657360c81b0361037e5760408051808201825261ffff80861682526001600160a01b0380851660208085019182528784165f90815260019091529490942092518354945190911662010000026001600160b01b0319909416911617919091179055610409565b836b64657374696e6174696f6e7360a01b036103f05760408051808201825261ffff80851682526001600160a01b0380851660208085019182528884165f90815260029091529490942092518354945190911662010000026001600160b01b0319909416911617919091179055610409565b604051633db0d5b960e01b815260040160405180910390fd5b6040805161ffff8581168252841660208201526001600160a01b03831681830152905185917f949f71fa63325af9e18bccdee794280102e69f0630f067ef62c51f7792e78ab6919081900360600190a250505050565b61ffff8481165f9081526002602052604080822054905163c23ee3c360e01b8152921660048301526024820181905260448201839052907f00000000000000000000000027428dd2d3dd32a4d7f7c497eaaa23130d8949116001600160a01b03169063c23ee3c3906064016040805180830381865afa1580156104e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105089190610c9f565b5095945050505050565b61ffff8281165f908152600160209081526040918290208251808401909352549283168252620100009092046001600160a01b031691810182905290158015906105795750610560846108cb565b6001600160a01b031681602001516001600160a01b0316145b61059657604051638154374b60e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000027428dd2d3dd32a4d7f7c497eaaa23130d89491116146105df57604051635485bd1b60e01b815260040160405180910390fd5b80516040516313cd6dc760e21b81526001600160a01b037f000000000000000000000000457c91384c984b1659157160e8543adb12bc53171691634f35b71c9161062e91908a90600401610cc1565b5f604051808303815f87803b158015610645575f5ffd5b505af1158015610657573d5f5f3e3d5ffd5b50505050505050505050565b335f908152602081905260409020546001146106925760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0381165f8181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b335f908152602081905260409020546001146107055760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0381165f81815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b5f336001600160a01b037f000000000000000000000000457c91384c984b1659157160e8543adb12bc5317161461079257604051638b29b4d160e01b815260040160405180910390fd5b61ffff8681165f908152600260209081526040808320815180830190925254938416808252620100009094046001600160a01b0316918101919091529190036107ee57604051630da789df60e01b815260040160405180910390fd5b805160208201516040516312d729bd60e21b81525f926001600160a01b037f00000000000000000000000027428dd2d3dd32a4d7f7c497eaaa23130d8949111692634b5ca6f49234926108719290918d908d9089908e907f0000000000000000000000000000000000000000000000000000000000000017908f90600401610d01565b60206040518083038185885af115801561088d573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108b29190610d78565b60c01b6001600160c01b03191698975050505050505050565b5f6001600160a01b03198216156109285760405162461bcd60e51b815260206004820152601d60248201527f46697273742031322062797465732073686f756c64206265207a65726f000000604482015260640160405180910390fd5b5090565b803561ffff8116811461093d575f5ffd5b919050565b80356001600160a01b038116811461093d575f5ffd5b5f5f5f5f6080858703121561096b575f5ffd5b8435935061097b6020860161092c565b92506109896040860161092c565b915061099760608601610942565b905092959194509250565b5f5f83601f8401126109b2575f5ffd5b5081356001600160401b038111156109c8575f5ffd5b6020830191508360208285010111156109df575f5ffd5b9250929050565b5f5f5f5f606085870312156109f9575f5ffd5b610a028561092c565b935060208501356001600160401b03811115610a1c575f5ffd5b610a28878288016109a2565b9598909750949560400135949350505050565b5f60208284031215610a4b575f5ffd5b610a548261092c565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610a9757610a97610a5b565b604052919050565b5f82601f830112610aae575f5ffd5b81356001600160401b03811115610ac757610ac7610a5b565b610ada601f8201601f1916602001610a6f565b818152846020838601011115610aee575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a08688031215610b1e575f5ffd5b85356001600160401b03811115610b33575f5ffd5b610b3f88828901610a9f565b95505060208601356001600160401b03811115610b5a575f5ffd5b8601601f81018813610b6a575f5ffd5b80356001600160401b03811115610b8357610b83610a5b565b8060051b610b9360208201610a6f565b9182526020818401810192908101908b841115610bae575f5ffd5b6020850192505b83831015610bf35782356001600160401b03811115610bd2575f5ffd5b610be18d602083890101610a9f565b83525060209283019290910190610bb5565b975050505060408701359350610c0d90506060870161092c565b949793965091946080013592915050565b5f60208284031215610c2e575f5ffd5b610a5482610942565b5f5f5f5f5f60808688031215610c4b575f5ffd5b610c548661092c565b945060208601356001600160401b03811115610c6e575f5ffd5b610c7a888289016109a2565b90955093505060408601359150610c9360608701610942565b90509295509295909350565b5f5f60408385031215610cb0575f5ffd5b505080516020909101519092909150565b61ffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b61ffff891681526001600160a01b038816602082015260e060408201819052810186905285876101008301375f6101008783018101919091526060820195909552608081019390935261ffff9190911660a08301526001600160a01b031660c0820152601f909201601f1916909101019392505050565b5f60208284031215610d88575f5ffd5b81516001600160401b0381168114610a54575f5ffdfea2646970667358221220d1579040e3f00c844228d03c9197ba96c4ebb5fe96aaa41d7e21d6a73b3c145a64736f6c634300081c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000457c91384c984b1659157160e8543adb12bc531700000000000000000000000027428dd2d3dd32a4d7f7c497eaaa23130d894911000000000000000000000000b8f0141317f8410a1f87f1b26af3d8bdc4bcf16e

-----Decoded View---------------
Arg [0] : entrypoint_ (address): 0x457C91384C984b1659157160e8543adb12BC5317
Arg [1] : relayer_ (address): 0x27428DD2d3DD32A4D7f7C497eAaa23130d894911
Arg [2] : deployer (address): 0xB8f0141317f8410a1F87F1B26AF3D8bdc4BcF16E

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000457c91384c984b1659157160e8543adb12bc5317
Arg [1] : 00000000000000000000000027428dd2d3dd32a4d7f7c497eaaa23130d894911
Arg [2] : 000000000000000000000000b8f0141317f8410a1f87f1b26af3d8bdc4bcf16e


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.