Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 17 internal transactions
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 406801899 | 53 days ago | 0.00003738 ETH | ||||
| 406801899 | 53 days ago | 0.00003738 ETH | ||||
| 406801708 | 53 days ago | 0.00003738 ETH | ||||
| 406801708 | 53 days ago | 0.00003738 ETH | ||||
| 394739260 | 88 days ago | 0.00013949 ETH | ||||
| 394739260 | 88 days ago | 0.00013949 ETH | ||||
| 394711061 | 88 days ago | 0.00013949 ETH | ||||
| 394711061 | 88 days ago | 0.00013949 ETH | ||||
| 394686088 | 88 days ago | 0.00013949 ETH | ||||
| 394686088 | 88 days ago | 0.00013949 ETH | ||||
| 372813494 | 151 days ago | 0.00023912 ETH | ||||
| 372813494 | 151 days ago | 0.00023912 ETH | ||||
| 368261920 | 164 days ago | 0.00001424 ETH | ||||
| 368261920 | 164 days ago | 0.00001424 ETH | ||||
| 358742508 | 192 days ago | 0.00456926 ETH | ||||
| 358742508 | 192 days ago | 0.00456926 ETH | ||||
| 357986224 | 194 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
WormholeAdapter
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 1 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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);
}{
"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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.