Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60c06040 | 23999579 | 71 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AcrossV3WethUnwrapper
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import {SafeTransferLib} from "lib/solmate/src/utils/SafeTransferLib.sol";
import {ERC20} from "lib/solmate/src/tokens/ERC20.sol";
import "../../utils/Ownable.sol";
interface IWETH {
function withdraw(uint256 amount) external;
}
/**
* @title AcrossV3WethUnwrapper
* @notice Middleware contract to unwrap WETH received from Across V3 and forward ETH to recipient
* @dev Implements handleV3AcrossMessage() to receive WETH from Across relayer
* The actual recipient address is encoded in the message parameter
*/
contract AcrossV3WethUnwrapper is Ownable {
using SafeTransferLib for ERC20;
/// @notice WETH token address on this chain
address public immutable WETH;
/// @notice SpokePool contract address
address public immutable spokePool;
/// @notice Emitted when WETH is unwrapped and ETH is forwarded
event UnwrappedAndForwarded(
address indexed recipient,
uint256 amount,
address indexed tokenSent
);
/// @notice Emitted when funds are rescued
event FundsRescued(
address indexed token,
address indexed to,
uint256 amount
);
/**
* @param _weth WETH token address
* @param _owner Owner address for rescue functions
* @param _spokePool SpokePool contract address
*/
constructor(
address _weth,
address _owner,
address _spokePool
) Ownable(_owner) {
WETH = _weth;
spokePool = _spokePool;
}
/**
* @notice Handles WETH received from Across V3 relayer
* @dev This function is called by Across relayer when filling a deposit
* The WETH has already been transferred to this contract before this function is called
* @param tokenSent The token address sent (should be WETH)
* @param amount The amount of WETH received
* @param relayer The Across relayer address
* @param message Encoded recipient address (abi.encode(address))
*/
function handleV3AcrossMessage(
address tokenSent,
uint256 amount,
address relayer,
bytes memory message
) external {
// Verify that the token sent is WETH
require(tokenSent == WETH, "Only WETH supported");
// Verify that the caller is the SpokePool
require(
msg.sender == spokePool,
"Only SpokePool can call this function"
);
// Decode the actual recipient address from message
address recipient = abi.decode(message, (address));
require(recipient != address(0), "Invalid recipient");
// Verify that this contract has received the WETH
// The relayer has already transferred WETH to this contract before calling this function
require(
ERC20(WETH).balanceOf(address(this)) >= amount,
"Insufficient WETH balance"
);
// Unwrap WETH to ETH
IWETH(WETH).withdraw(amount);
// Forward ETH to the actual recipient
SafeTransferLib.safeTransferETH(recipient, amount);
emit UnwrappedAndForwarded(recipient, amount, tokenSent);
}
/**
* @notice Rescue ERC20 tokens stuck in the contract
* @dev Only callable by owner
* @param token Token address to rescue (use address(0) for ETH)
* @param to Recipient address
* @param amount Amount to rescue
*/
function rescueFunds(
address token,
address to,
uint256 amount
) external onlyOwner {
require(to != address(0), "Invalid recipient");
if (token == address(0)) {
// Rescue native ETH
SafeTransferLib.safeTransferETH(to, amount);
} else {
// Rescue ERC20 tokens
ERC20(token).safeTransfer(to, amount);
}
emit FundsRescued(token, to, amount);
}
/**
* @notice Rescue all of a specific ERC20 token
* @dev Only callable by owner
* @param token Token address to rescue
* @param to Recipient address
*/
function rescueFunds(address token, address to) external onlyOwner {
require(to != address(0), "Invalid recipient");
uint256 amount = ERC20(token).balanceOf(address(this));
if (amount > 0) {
ERC20(token).safeTransfer(to, amount);
emit FundsRescued(token, to, amount);
}
}
/**
* @notice Rescue all native ETH
* @dev Only callable by owner
* @param to Recipient address
*/
function rescueEther(address to) external onlyOwner {
require(to != address(0), "Invalid recipient");
uint256 amount = address(this).balance;
if (amount > 0) {
SafeTransferLib.safeTransferETH(to, amount);
emit FundsRescued(address(0), to, amount);
}
}
/**
* @notice Receive ETH (in case of direct sends)
*/
receive() external payable {}
}// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;
/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
/*//////////////////////////////////////////////////////////////
METADATA STORAGE
//////////////////////////////////////////////////////////////*/
string public name;
string public symbol;
uint8 public immutable decimals;
/*//////////////////////////////////////////////////////////////
ERC20 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
/*//////////////////////////////////////////////////////////////
EIP-2612 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 internal immutable INITIAL_CHAIN_ID;
bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;
mapping(address => uint256) public nonces;
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
}
/*//////////////////////////////////////////////////////////////
ERC20 LOGIC
//////////////////////////////////////////////////////////////*/
function approve(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) public virtual returns (bool) {
balanceOf[msg.sender] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual returns (bool) {
uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
/*//////////////////////////////////////////////////////////////
EIP-2612 LOGIC
//////////////////////////////////////////////////////////////*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public virtual {
require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");
// Unchecked because the only math done is incrementing
// the owner's nonce which cannot realistically overflow.
unchecked {
address recoveredAddress = ecrecover(
keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR(),
keccak256(
abi.encode(
keccak256(
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
),
owner,
spender,
value,
nonces[owner]++,
deadline
)
)
)
),
v,
r,
s
);
require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");
allowance[recoveredAddress][spender] = value;
}
emit Approval(owner, spender, value);
}
function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
}
function computeDomainSeparator() internal view virtual returns (bytes32) {
return
keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256("1"),
block.chainid,
address(this)
)
);
}
/*//////////////////////////////////////////////////////////////
INTERNAL MINT/BURN LOGIC
//////////////////////////////////////////////////////////////*/
function _mint(address to, uint256 amount) internal virtual {
totalSupply += amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal virtual {
balanceOf[from] -= amount;
// Cannot underflow because a user's balance
// will never be larger than the total supply.
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;
import {ERC20} from "../tokens/ERC20.sol";
/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.
library SafeTransferLib {
/*//////////////////////////////////////////////////////////////
ETH OPERATIONS
//////////////////////////////////////////////////////////////*/
function safeTransferETH(address to, uint256 amount) internal {
bool success;
/// @solidity memory-safe-assembly
assembly {
// Transfer the ETH and store if it succeeded or not.
success := call(gas(), to, amount, 0, 0, 0, 0)
}
require(success, "ETH_TRANSFER_FAILED");
}
/*//////////////////////////////////////////////////////////////
ERC20 OPERATIONS
//////////////////////////////////////////////////////////////*/
function safeTransferFrom(
ERC20 token,
address from,
address to,
uint256 amount
) internal {
bool success;
/// @solidity memory-safe-assembly
assembly {
// Get a pointer to some free memory.
let freeMemoryPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
mstore(add(freeMemoryPointer, 4), from) // Append the "from" argument.
mstore(add(freeMemoryPointer, 36), to) // Append the "to" argument.
mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
// We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.
// We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
// Counterintuitively, this call must be positioned second to the or() call in the
// surrounding and() call or else returndatasize() will be zero during the computation.
call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)
)
}
require(success, "TRANSFER_FROM_FAILED");
}
function safeTransfer(
ERC20 token,
address to,
uint256 amount
) internal {
bool success;
/// @solidity memory-safe-assembly
assembly {
// Get a pointer to some free memory.
let freeMemoryPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)
mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument.
mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
// We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
// We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
// Counterintuitively, this call must be positioned second to the or() call in the
// surrounding and() call or else returndatasize() will be zero during the computation.
call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)
)
}
require(success, "TRANSFER_FAILED");
}
function safeApprove(
ERC20 token,
address to,
uint256 amount
) internal {
bool success;
/// @solidity memory-safe-assembly
assembly {
// Get a pointer to some free memory.
let freeMemoryPointer := mload(0x40)
// Write the abi-encoded calldata into memory, beginning with the function selector.
mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000)
mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument.
mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument.
success := and(
// Set success to whether the call reverted, if not we check it either
// returned exactly 1 (can't just be non-zero data), or had no return data.
or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
// We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
// We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
// Counterintuitively, this call must be positioned second to the or() call in the
// surrounding and() call or else returndatasize() will be zero during the computation.
call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)
)
}
require(success, "APPROVE_FAILED");
}
}// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; error CelerRefundNotReady(); error OnlySocketDeployer(); error OnlySocketGatewayOwner(); error OnlySocketGateway(); error OnlyOwner(); error OnlyNominee(); error TransferIdExists(); error TransferIdDoesnotExist(); error Address0Provided(); error SwapFailed(); error UnsupportedInterfaceId(); error InvalidCelerRefund(); error CelerAlreadyRefunded(); error IncorrectBridgeRatios(); error ZeroAddressNotAllowed(); error ArrayLengthMismatch(); error PartialSwapsNotAllowed();
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.4;
import {OnlyOwner, OnlyNominee} from "../errors/SocketErrors.sol";
abstract contract Ownable {
address private _owner;
address private _nominee;
event OwnerNominated(address indexed nominee);
event OwnerClaimed(address indexed claimer);
constructor(address owner_) {
_claimOwner(owner_);
}
modifier onlyOwner() {
if (msg.sender != _owner) {
revert OnlyOwner();
}
_;
}
function owner() public view returns (address) {
return _owner;
}
function nominee() public view returns (address) {
return _nominee;
}
function nominateOwner(address nominee_) external {
if (msg.sender != _owner) {
revert OnlyOwner();
}
_nominee = nominee_;
emit OwnerNominated(_nominee);
}
function claimOwner() external {
if (msg.sender != _nominee) {
revert OnlyNominee();
}
_claimOwner(msg.sender);
}
function _claimOwner(address claimer_) internal {
_owner = claimer_;
_nominee = address(0);
emit OwnerClaimed(claimer_);
}
}{
"optimizer": {
"enabled": true,
"runs": 1000000
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spokePool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OnlyNominee","type":"error"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsRescued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"}],"name":"OwnerClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nominee","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenSent","type":"address"}],"name":"UnwrappedAndForwarded","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenSent","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"relayer","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"handleV3AcrossMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nominee_","type":"address"}],"name":"nominateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"rescueEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spokePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c060405234801561001057600080fd5b5060405161114a38038061114a83398101604081905261002f916100c3565b8161003981610054565b506001600160a01b0392831660805290911660a05250610106565b600080546001600160a01b0383166001600160a01b0319918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b80516001600160a01b03811681146100be57600080fd5b919050565b6000806000606084860312156100d857600080fd5b6100e1846100a7565b92506100ef602085016100a7565b91506100fd604085016100a7565b90509250925092565b60805160a0516110036101476000396000818161021901526105220152600081816101e5015281816104570152818161069401526107ab01526110036000f3fe6080604052600436106100b55760003560e01c80636ccae05411610069578063ad5c46481161004e578063ad5c4648146101d3578063afdac3d614610207578063cec30eaf1461023b57600080fd5b80636ccae054146101885780638da5cb5b146101a857600080fd5b80633a5be8cb1161009a5780633a5be8cb146101335780633bd1adec146101535780635b94db271461016857600080fd5b80631ff9b6f2146100c157806320f99c0a146100e357600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc366004610dcc565b61025b565b005b3480156100ef57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561013f57600080fd5b506100e161014e366004610e34565b610455565b34801561015f57600080fd5b506100e1610894565b34801561017457600080fd5b506100e1610183366004610f32565b6108f0565b34801561019457600080fd5b506100e16101a3366004610f56565b6109b0565b3480156101b457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661010a565b3480156101df57600080fd5b5061010a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561021357600080fd5b5061010a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561024757600080fd5b506100e1610256366004610f32565b610ac9565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102ac576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811661032e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561039b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bf9190610f97565b90508015610450576103e873ffffffffffffffffffffffffffffffffffffffff84168383610bfb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fed2837b80b3489773c5f1ed30dd2884b4c90dbf7b87428ea03c49b24ef59a8058360405161044791815260200190565b60405180910390a35b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461050a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f6e6c79205745544820737570706f72746564000000000000000000000000006044820152606401610325565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4f6e6c792053706f6b65506f6f6c2063616e2063616c6c20746869732066756e60448201527f6374696f6e0000000000000000000000000000000000000000000000000000006064820152608401610325565b6000818060200190518101906105e59190610fb0565b905073ffffffffffffffffffffffffffffffffffffffff8116610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152606401610325565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015284907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107149190610f97565b101561077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e6365000000000000006044820152606401610325565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b505050506108268185610cba565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6f3bdcd896fd03869cbcbe4a34f6eba77a454be8cdbeb191e0b3e5792a0d53068660405161088591815260200190565b60405180910390a35050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146108e5576040517f7c91ccdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ee33610d2f565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610941576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a01576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152606401610325565b73ffffffffffffffffffffffffffffffffffffffff8316610aa857610aa38282610cba565b6103e8565b6103e873ffffffffffffffffffffffffffffffffffffffff84168383610bfb565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b1a576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152606401610325565b478015610bf757610ba88282610cba565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fed2837b80b3489773c5f1ed30dd2884b4c90dbf7b87428ea03c49b24ef59a8059060200160405180910390a35b5050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610325565b50505050565b600080600080600085875af1905080610450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610325565b6000805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b73ffffffffffffffffffffffffffffffffffffffff81168114610dc957600080fd5b50565b60008060408385031215610ddf57600080fd5b8235610dea81610da7565b91506020830135610dfa81610da7565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215610e4a57600080fd5b8435610e5581610da7565b9350602085013592506040850135610e6c81610da7565b9150606085013567ffffffffffffffff80821115610e8957600080fd5b818701915087601f830112610e9d57600080fd5b813581811115610eaf57610eaf610e05565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610ef557610ef5610e05565b816040528281528a6020848701011115610f0e57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060208284031215610f4457600080fd5b8135610f4f81610da7565b9392505050565b600080600060608486031215610f6b57600080fd5b8335610f7681610da7565b92506020840135610f8681610da7565b929592945050506040919091013590565b600060208284031215610fa957600080fd5b5051919050565b600060208284031215610fc257600080fd5b8151610f4f81610da756fea2646970667358221220b9c379d02c2f8f9bc087a0ad24d69890654b625204f18b7fbb301f8843a7608564736f6c63430008160033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000e1b5ab67af1c99f8c7ebc71f41f75d4d6211e530000000000000000000000005c7bcd6e7de5423a257d81b442095a1a6ced35c5
Deployed Bytecode
0x6080604052600436106100b55760003560e01c80636ccae05411610069578063ad5c46481161004e578063ad5c4648146101d3578063afdac3d614610207578063cec30eaf1461023b57600080fd5b80636ccae054146101885780638da5cb5b146101a857600080fd5b80633a5be8cb1161009a5780633a5be8cb146101335780633bd1adec146101535780635b94db271461016857600080fd5b80631ff9b6f2146100c157806320f99c0a146100e357600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc366004610dcc565b61025b565b005b3480156100ef57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561013f57600080fd5b506100e161014e366004610e34565b610455565b34801561015f57600080fd5b506100e1610894565b34801561017457600080fd5b506100e1610183366004610f32565b6108f0565b34801561019457600080fd5b506100e16101a3366004610f56565b6109b0565b3480156101b457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661010a565b3480156101df57600080fd5b5061010a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561021357600080fd5b5061010a7f0000000000000000000000005c7bcd6e7de5423a257d81b442095a1a6ced35c581565b34801561024757600080fd5b506100e1610256366004610f32565b610ac9565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102ac576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811661032e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e7400000000000000000000000000000060448201526064015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561039b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bf9190610f97565b90508015610450576103e873ffffffffffffffffffffffffffffffffffffffff84168383610bfb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fed2837b80b3489773c5f1ed30dd2884b4c90dbf7b87428ea03c49b24ef59a8058360405161044791815260200190565b60405180910390a35b505050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461050a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f6e6c79205745544820737570706f72746564000000000000000000000000006044820152606401610325565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005c7bcd6e7de5423a257d81b442095a1a6ced35c516146105cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4f6e6c792053706f6b65506f6f6c2063616e2063616c6c20746869732066756e60448201527f6374696f6e0000000000000000000000000000000000000000000000000000006064820152608401610325565b6000818060200190518101906105e59190610fb0565b905073ffffffffffffffffffffffffffffffffffffffff8116610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152606401610325565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015284907f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107149190610f97565b101561077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e6365000000000000006044820152606401610325565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b505050506108268185610cba565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6f3bdcd896fd03869cbcbe4a34f6eba77a454be8cdbeb191e0b3e5792a0d53068660405161088591815260200190565b60405180910390a35050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146108e5576040517f7c91ccdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ee33610d2f565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610941576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a01576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152606401610325565b73ffffffffffffffffffffffffffffffffffffffff8316610aa857610aa38282610cba565b6103e8565b6103e873ffffffffffffffffffffffffffffffffffffffff84168383610bfb565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b1a576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152606401610325565b478015610bf757610ba88282610cba565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fed2837b80b3489773c5f1ed30dd2884b4c90dbf7b87428ea03c49b24ef59a8059060200160405180910390a35b5050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610325565b50505050565b600080600080600085875af1905080610450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610325565b6000805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b73ffffffffffffffffffffffffffffffffffffffff81168114610dc957600080fd5b50565b60008060408385031215610ddf57600080fd5b8235610dea81610da7565b91506020830135610dfa81610da7565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215610e4a57600080fd5b8435610e5581610da7565b9350602085013592506040850135610e6c81610da7565b9150606085013567ffffffffffffffff80821115610e8957600080fd5b818701915087601f830112610e9d57600080fd5b813581811115610eaf57610eaf610e05565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610ef557610ef5610e05565b816040528281528a6020848701011115610f0e57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060208284031215610f4457600080fd5b8135610f4f81610da7565b9392505050565b600080600060608486031215610f6b57600080fd5b8335610f7681610da7565b92506020840135610f8681610da7565b929592945050506040919091013590565b600060208284031215610fa957600080fd5b5051919050565b600060208284031215610fc257600080fd5b8151610f4f81610da756fea2646970667358221220b9c379d02c2f8f9bc087a0ad24d69890654b625204f18b7fbb301f8843a7608564736f6c63430008160033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000e1b5ab67af1c99f8c7ebc71f41f75d4d6211e530000000000000000000000005c7bcd6e7de5423a257d81b442095a1a6ced35c5
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _owner (address): 0x0E1B5AB67aF1c99F8c7Ebc71f41f75D4D6211e53
Arg [2] : _spokePool (address): 0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 0000000000000000000000000e1b5ab67af1c99f8c7ebc71f41f75d4d6211e53
Arg [2] : 0000000000000000000000005c7bcd6e7de5423a257d81b442095a1a6ced35c5
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 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.