Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 15321475 | 1247 days ago | IN | 0.2 ETH | 0.00066649 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60808060 | 15303574 | 1250 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EthereumFeeCollector
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
Yes with 19066 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import { BaseFeeCollector } from "./base/BaseFeeCollector.sol";
import {
EthereumFeeCollectorInterface,
WETHInterface
} from "./interfaces/EthereumFeeCollectorInterface.sol";
/**
* @title EthereumFeeCollector
* @author OpenSea Protocol Team
* @notice EthereumFeeCollector is a contract that is used as an
* implementation for a beacon proxy. It inherits the
* BaseFeeCollector allowing for native token and ERC20
* token withdrawals. In addition, allowing for unwrapping
* and transferring WETH.
*/
contract EthereumFeeCollector is
BaseFeeCollector,
EthereumFeeCollectorInterface
{
constructor() BaseFeeCollector() {}
/**
* @notice Unwraps and withdraws the given amount of WETH tokens from the
* provided contract address. Requires the caller to have the
* operator role, and the withdrawal wallet to be in the
* allowlisted wallets.
*
* @param withdrawalWallet The wallet to be used for withdrawal.
* @param wrappedTokenContract The token address to be unwrapped.
* @param amount The amount of tokens to be withdrawn.
*/
function unwrapAndWithdraw(
address withdrawalWallet,
address wrappedTokenContract,
uint256 amount
) external override isOperator {
// Ensure the withdrawal wallet is in the withdrawal wallet mapping.
if (_withdrawalWallets[withdrawalWallet] != true) {
revert InvalidWithdrawalWallet(withdrawalWallet);
}
// Make the withdraw call on the provided wrapped token.
(bool result, bytes memory data) = wrappedTokenContract.call(
abi.encodeWithSelector(WETHInterface.withdraw.selector, amount)
);
// Revert if we have a false result.
if (!result) {
revert TokenTransferGenericFailure(
wrappedTokenContract,
withdrawalWallet,
0,
amount
);
}
// Revert if we have a bad return value.
if (data.length != 0 && data.length >= 32) {
if (!abi.decode(data, (bool))) {
revert BadReturnValueFromERC20OnTransfer(
wrappedTokenContract,
withdrawalWallet,
amount
);
}
}
// Transfer the now unwrapped tokens to the withdrawal address.
payable(withdrawalWallet).transfer(amount);
}
/**
* @notice Retrieve the name of this contract.
*
* @return The name of this contract.
*/
function name() external pure override returns (string memory) {
// Return the name of the contract.
return "ethereum-fee-collector";
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import { TwoStepOwnable } from "../access/TwoStepOwnable.sol";
import {
ERC20Interface,
BaseFeeCollectorInterface
} from "../interfaces/BaseFeeCollectorInterface.sol";
import {
BaseFeeCollectorEventsAndErrors
} from "../interfaces/BaseFeeCollectorEventsAndErrors.sol";
/**
* @title BaseFeeCollector
* @author OpenSea Protocol Team
* @notice BaseFeeCollector is a contract that is used as an implementation
* for a beacon proxy. Allows for withdrawal of the native token
* and all ERC20 standard tokens from the proxy. The contract
* inherits TwoStepOwnable to allow for ownership modifiers.
*/
contract BaseFeeCollector is
TwoStepOwnable,
BaseFeeCollectorInterface,
BaseFeeCollectorEventsAndErrors
{
// The operator address.
address internal _operator;
// Mapping of valid withdrawal wallets.
mapping(address => bool) internal _withdrawalWallets;
/**
* @dev Throws if called by any account other than the owner or
* operator.
*/
modifier isOperator() {
if (msg.sender != _operator && msg.sender != owner()) {
revert InvalidOperator();
}
_;
}
/**
* @notice Creates the implementation.
*/
constructor() {
// Ensure the origin is an approved deployer.
require(
(tx.origin == address(0x939C8d89EBC11fA45e576215E2353673AD0bA18A) ||
tx.origin ==
address(0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA) ||
tx.origin ==
address(0x86D26897267711ea4b173C8C124a0A73612001da) ||
tx.origin ==
address(0x3B52ad533687Ce908bA0485ac177C5fb42972962)),
"Deployment must originate from an approved deployer."
);
}
/**
* @notice External initialization called by the proxy to set the
* owner. During upgrading, do not modify the original
* variables that were set in previous implementations.
*
* @param ownerToSet The address to be set as the owner.
*/
function initialize(address ownerToSet) external {
// Ensure the origin is an approved deployer.
require(
(tx.origin == address(0x939C8d89EBC11fA45e576215E2353673AD0bA18A) ||
tx.origin ==
address(0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA) ||
tx.origin ==
address(0x86D26897267711ea4b173C8C124a0A73612001da) ||
tx.origin ==
address(0x3B52ad533687Ce908bA0485ac177C5fb42972962)) &&
owner() == address(0),
"Initialize must originate from an approved deployer, and the owner must not be set."
);
// Call initialize.
_initialize(ownerToSet);
}
/**
* @notice Internal initialization function to set the owner. During
* upgrading, do not modify the original variables that were set
* in the previous implementations. Requires this call to be inside
* the constructor.
*
* @param ownerToSet The address to be set as the owner.
*/
function _initialize(address ownerToSet) internal {
// Set the owner of the FeeCollector.
_setInitialOwner(ownerToSet);
}
/**
* @notice Withdrawals the given amount of ERC20 tokens from the provided
* contract address. Requires the caller to have the operator role,
* and the withdrawal wallet to be in the allowlisted wallets.
*
* @param withdrawalWallet The wallet to be used for withdrawal.
* @param tokenContract The ERC20 token address to be withdrawn.
* @param amount The amount of ERC20 tokens to be withdrawn.
*/
function withdrawERC20Tokens(
address withdrawalWallet,
address tokenContract,
uint256 amount
) external override isOperator {
// Ensure the withdrawal wallet is in the withdrawal wallet mapping.
if (_withdrawalWallets[withdrawalWallet] != true) {
revert InvalidWithdrawalWallet(withdrawalWallet);
}
// Make the transfer call on the provided ERC20 token.
(bool result, bytes memory data) = tokenContract.call(
abi.encodeWithSelector(
ERC20Interface.transfer.selector,
withdrawalWallet,
amount
)
);
// Revert if we have a false result.
if (!result) {
revert TokenTransferGenericFailure(
tokenContract,
withdrawalWallet,
0,
amount
);
}
// Revert if we have a bad return value.
if (data.length != 0 && data.length >= 32) {
if (!abi.decode(data, (bool))) {
revert BadReturnValueFromERC20OnTransfer(
tokenContract,
withdrawalWallet,
amount
);
}
}
}
/**
* @notice Withdrawals the given amount of the native token from this
* contract to the withdrawal address. Requires the caller to
* have the operator role, and the withdrawal wallet to be in
* the allowlisted wallets.
*
* @param withdrawalWallet The wallet to be used for withdrawal.
* @param amount The amount of the native token to be withdrawn.
*/
function withdraw(address withdrawalWallet, uint256 amount)
external
override
isOperator
{
// Ensure the withdrawal wallet is in the withdrawal wallet mapping.
if (_withdrawalWallets[withdrawalWallet] != true) {
revert InvalidWithdrawalWallet(withdrawalWallet);
}
// Ensure the amount to withdraw is valid.
if (amount > address(this).balance) {
revert InvalidNativeTokenAmount(amount);
}
// Transfer the amount of the native token to the withdrawal address.
payable(withdrawalWallet).transfer(amount);
}
/**
* @notice Adds a new withdrawal address to the mapping. Requires
* the caller to be the owner and the withdrawal
* wallet to not be the null address.
*
* @param newWithdrawalWallet The new withdrawal address.
*/
function addWithdrawAddress(address newWithdrawalWallet)
external
override
onlyOwner
{
// Ensure the new owner is not an invalid address.
if (newWithdrawalWallet == address(0)) {
revert NewWithdrawalWalletIsNullAddress();
}
// Set the new wallet address mapping.
_setWithdrawalWallet(newWithdrawalWallet, true);
}
/**
* @notice Removes the withdrawal address from the mapping. Requires
* the caller to be the owner.
*
* @param withdrawalWallet The withdrawal address to
* remove.
*/
function removeWithdrawAddress(address withdrawalWallet)
external
override
onlyOwner
{
// Set the withdrawal wallet to false.
_setWithdrawalWallet(withdrawalWallet, false);
}
/**
* @notice Assign the given address with the ability to operate the wallet.
* Requires caller to be the owner.
*
* @param operatorToAssign The address to assign the operator role.
*/
function assignOperator(address operatorToAssign)
external
override
onlyOwner
{
// Ensure the operator to assign is not an invalid address.
if (operatorToAssign == address(0)) {
revert OperatorIsNullAddress();
}
// Set the given account as the operator.
_operator = operatorToAssign;
// Emit an event indicating the operator has been assigned.
emit OperatorUpdated(_operator);
}
/**
* @notice An external view function that returns a boolean.
*
* @return A boolean that determines if the provided address is
* a valid withdrawal wallet.
*/
function isWithdrawalWallet(address withdrawalWallet)
external
view
override
returns (bool)
{
// Return if the wallet is in the allow list.
return _withdrawalWallets[withdrawalWallet];
}
/**
* @notice Internal function to set the withdrawal wallet mapping.
*
* @param withdrawalAddress The address to be set as the withdrawal
* wallet.
* @param valueToSet The boolean to set for the mapping.
*/
function _setWithdrawalWallet(address withdrawalAddress, bool valueToSet)
internal
{
// Set the withdrawal address mapping.
_withdrawalWallets[withdrawalAddress] = valueToSet;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
interface WETHInterface {
function withdraw(uint256 wad) external;
}
/**
* @title EthereumFeeCollectorInterface
* @author OpenSea Protocol Team
* @notice EthereumFeeCollectorInterface contains all external function
* interfaces for the fee collector implementation.
*/
interface EthereumFeeCollectorInterface {
/**
* @notice Unwraps and withdraws the given amount of WETH tokens from the
* provided contract address. Requires the caller to have the
* operator role, and the withdrawal wallet to be in the
* allowlisted wallets.
*
* @param withdrawalWallet The wallet to be used for withdrawal.
* @param tokenContract The WETH token address to be unwrapped.
* @param amount The amount of tokens to be withdrawn.
*/
function unwrapAndWithdraw(
address withdrawalWallet,
address tokenContract,
uint256 amount
) external;
/**
* @notice Retrieve the name of this contract.
*
* @return The name of this contract.
*/
function name() external pure returns (string memory);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "../interfaces/TwoStepOwnableInterface.sol";
/**
* @title TwoStepOwnable
* @author OpenSea Protocol Team
* @notice TwoStepOwnable is a module which provides access control
* where the ownership of a contract can be exchanged via a
* two step process. A potential owner is set by the current
* owner using transferOwnership, then accepted by the new
* potential owner using acceptOwnership.
*/
contract TwoStepOwnable is TwoStepOwnableInterface {
// The address of the owner.
address private _owner;
// The address of the new potential owner.
address private _potentialOwner;
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
// Ensure the caller is the owner.
if (msg.sender != _owner) {
revert CallerIsNotOwner();
}
// Continue with function execution.
_;
}
/**
* @notice Initiate ownership transfer by assigning a new potential owner
* to this contract. Once set, the new potential owner may call
* `acceptOwnership` to claim ownership. Only the owner may call
* this function.
*
* @param newPotentialOwner The address for which to initiate ownership
* transfer to.
*/
function transferOwnership(address newPotentialOwner)
external
override
onlyOwner
{
// Ensure the new potential owner is not an invalid address.
if (newPotentialOwner == address(0)) {
revert NewPotentialOwnerIsNullAddress();
}
// Emit an event indicating that the potential owner has been updated.
emit PotentialOwnerUpdated(newPotentialOwner);
// Set the new potential owner as the potential owner.
_potentialOwner = newPotentialOwner;
}
/**
* @notice Clear the currently set potential owner, if any.
* Only the owner of this contract may call this function.
*/
function cancelOwnershipTransfer() external override onlyOwner {
// Emit an event indicating that the potential owner has been cleared.
emit PotentialOwnerUpdated(address(0));
// Clear the current new potential owner.
delete _potentialOwner;
}
/**
* @notice Accept ownership of this contract. Only the account that the
* current owner has set as the new potential owner may call this
* function.
*/
function acceptOwnership() external override {
// Ensure the caller is the potential owner.
if (msg.sender != _potentialOwner) {
// Revert, indicating that caller is not current potential owner.
revert CallerIsNotNewPotentialOwner();
}
// Emit an event indicating that the potential owner has been cleared.
emit PotentialOwnerUpdated(address(0));
// Clear the current new potential owner.
delete _potentialOwner;
// Emit an event indicating ownership has been transferred.
emit OwnershipTransferred(_owner, msg.sender);
// Set the caller as the owner of this contract.
_owner = msg.sender;
}
/**
* @notice An external view function that returns the potential owner.
*
* @return The address of the potential owner.
*/
function potentialOwner() external view override returns (address) {
return _potentialOwner;
}
/**
* @notice A public view function that returns the owner.
*
* @return The address of the owner.
*/
function owner() public view override returns (address) {
return _owner;
}
/**
* @notice Internal function that sets the inital owner of the
* base contract. The initial owner must not be set
* previously.
*
* @param initialOwner The address to set for initial ownership.
*/
function _setInitialOwner(address initialOwner) internal {
// Ensure the initial owner is not an invalid address.
if (initialOwner == address(0)) {
revert InitialOwnerIsNullAddress();
}
// Ensure the owner has not already been set.
if (_owner != address(0)) {
revert OwnerAlreadySet(_owner);
}
// Emit an event indicating ownership has been set.
emit OwnershipTransferred(address(0), initialOwner);
// Set the initial owner.
_owner = initialOwner;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
interface ERC20Interface {
function transfer(address _to, uint256 _amount) external returns (bool);
}
/**
* @title BaseFeeCollectorInterface
* @author OpenSea Protocol Team
* @notice BaseFeeCollectorInterface contains all external function interfaces
* for the fee collector implementation.
*/
interface BaseFeeCollectorInterface {
/**
* @notice Withdrawals the given amount of ERC20 tokens from the provided
* contract address
*
* @param withdrawalWallet The wallet to be used for withdrawal.
* @param tokenContract The ERC20 token address to be withdrawn.
* @param amount The amount of ERC20 tokens to be withdrawn.
*/
function withdrawERC20Tokens(
address withdrawalWallet,
address tokenContract,
uint256 amount
) external;
/**
* @notice Withdrawals the given amount of the native token from this
* contract to the withdrawal address. Requires the caller to
* have the operator role, and the withdrawal wallet to be in
* the allowlisted wallets.
*
* @param withdrawalWallet The wallet to be used for withdrawal.
* @param amount The amount of the native token to be withdrawn.
*/
function withdraw(address withdrawalWallet, uint256 amount) external;
/**
* @notice Adds a new withdrawal address to the mapping. Requires
* the caller to be the owner and the withdrawal
* wallet to not be the null address.
*
* @param newWithdrawalWallet The new withdrawal address.
*/
function addWithdrawAddress(address newWithdrawalWallet) external;
/**
* @notice Removes the withdrawal address from the mapping. Requires
* the caller to be the owner.
*
* @param withdrawalWallet The withdrawal address to
* remove.
*/
function removeWithdrawAddress(address withdrawalWallet) external;
/**
* @notice Assign the given address with the ability to operate the wallet.
*
* @param operatorToAssign The address to assign the operator role.
*/
function assignOperator(address operatorToAssign) external;
/**
* @notice An external view function that returns a boolean.
*
* @return A boolean that determines if the provided address is
* a valid withdrawal wallet.
*/
function isWithdrawalWallet(address withdrawalWallet)
external
view
returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
/**
* @notice BaseFeeCollectorEventsAndErrors contains errors and events
* related to fee collector interaction.
*/
interface BaseFeeCollectorEventsAndErrors {
/**
* @dev Emit an event whenever the contract owner registers a
* new operator.
*
* @param newOperator The new operator of the contract.
*/
event OperatorUpdated(address newOperator);
/**
* @dev Revert with an error when an ERC20 token transfer returns a falsey
* value.
*
* @param token The token for which the ERC20 transfer was attempted.
* @param to The recipient of the attempted ERC20 transfer.
* @param amount The amount for the attempted ERC20 transfer.
*/
error BadReturnValueFromERC20OnTransfer(
address token,
address to,
uint256 amount
);
/**
* @dev Revert with an error when attempting to withdrawal
* an amount greater than the current balance.
*/
error InvalidNativeTokenAmount(uint256 amount);
/**
* @dev Revert with an error when attempting to initialize
* outside the constructor.
*/
error InvalidInitialization();
/**
* @dev Revert with an error when attempting to call an operation
* while the caller is not the owner of the wallet.
*/
error InvalidOperator();
/**
* @dev Revert with an error when attempting to call a withdrawal
* operation with an incorrect withdrawal wallet.
*/
error InvalidWithdrawalWallet(address withdrawalWallet);
/**
* @dev Revert with an error when attempting to set a
* new withdrawal wallet and supplying the null address.
*/
error NewWithdrawalWalletIsNullAddress();
/**
* @dev Revert with an error when attempting to set the
* new operator and supplying the null address.
*/
error OperatorIsNullAddress();
/**
* @dev Revert with an error when an ERC20, ERC721, or ERC1155 token
* transfer reverts.
*
* @param token The token for which the transfer was attempted.
* @param to The recipient of the attempted transfer.
* @param identifier The identifier for the attempted transfer.
* @param amount The amount for the attempted transfer.
*/
error TokenTransferGenericFailure(
address token,
address to,
uint256 identifier,
uint256 amount
);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
/**
* @title TwoStepOwnableInterface
* @author OpenSea Protocol Team
* @notice TwoStepOwnableInterface contains all external function interfaces,
* events and errors for the two step ownable access control module.
*/
interface TwoStepOwnableInterface {
/**
* @dev Emit an event whenever the contract owner registers a
* new potential owner.
*
* @param newPotentialOwner The new potential owner of the contract.
*/
event PotentialOwnerUpdated(address newPotentialOwner);
/**
* @dev Emit an event whenever contract ownership is transferred.
*
* @param previousOwner The previous owner of the contract.
* @param newOwner The new owner of the contract.
*/
event OwnershipTransferred(address previousOwner, address newOwner);
/**
* @dev Revert with an error when attempting to set an owner
* that is already set.
*/
error OwnerAlreadySet(address currentOwner);
/**
* @dev Revert with an error when attempting to set the initial
* owner and supplying the null address.
*/
error InitialOwnerIsNullAddress();
/**
* @dev Revert with an error when attempting to call an operation
* while the caller is not the owner.
*/
error CallerIsNotOwner();
/**
* @dev Revert with an error when attempting to register a new potential
* owner and supplying the null address.
*/
error NewPotentialOwnerIsNullAddress();
/**
* @dev Revert with an error when attempting to claim ownership of the
* contract with a caller that is not the current potential owner.
*/
error CallerIsNotNewPotentialOwner();
/**
* @notice Initiate ownership transfer by assigning a new potential owner
* to this contract. Once set, the new potential owner may call
* `acceptOwnership` to claim ownership. Only the owner may call
* this function.
*
* @param newPotentialOwner The address for which to initiate ownership
* transfer to.
*/
function transferOwnership(address newPotentialOwner) external;
/**
* @notice Clear the currently set potential owner, if any.
* Only the owner of this contract may call this function.
*/
function cancelOwnershipTransfer() external;
/**
* @notice Accept ownership of this contract. Only the account that the
* current owner has set as the new potential owner may call this
* function.
*/
function acceptOwnership() external;
/**
* @notice An external view function that returns the potential owner.
*
* @return The address of the potential owner.
*/
function potentialOwner() external view returns (address);
/**
* @notice An external view function that returns the owner.
*
* @return The address of the owner.
*/
function owner() external view returns (address);
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 19066
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[],"name":"CallerIsNotNewPotentialOwner","type":"error"},{"inputs":[],"name":"CallerIsNotOwner","type":"error"},{"inputs":[],"name":"InitialOwnerIsNullAddress","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidNativeTokenAmount","type":"error"},{"inputs":[],"name":"InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"withdrawalWallet","type":"address"}],"name":"InvalidWithdrawalWallet","type":"error"},{"inputs":[],"name":"NewPotentialOwnerIsNullAddress","type":"error"},{"inputs":[],"name":"NewWithdrawalWalletIsNullAddress","type":"error"},{"inputs":[],"name":"OperatorIsNullAddress","type":"error"},{"inputs":[{"internalType":"address","name":"currentOwner","type":"address"}],"name":"OwnerAlreadySet","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"PotentialOwnerUpdated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWithdrawalWallet","type":"address"}],"name":"addWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operatorToAssign","type":"address"}],"name":"assignOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ownerToSet","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawalWallet","type":"address"}],"name":"isWithdrawalWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"potentialOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawalWallet","type":"address"}],"name":"removeWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawalWallet","type":"address"},{"internalType":"address","name":"wrappedTokenContract","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrapAndWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawalWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawalWallet","type":"address"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608080604052346101095773939c8d89ebc11fa45e576215e2353673ad0ba18a321480156100ec575b80156100cf575b80156100b2575b1561004a576040516110e6908161010f8239f35b62461bcd60e51b815260206004820152603460248201527f4465706c6f796d656e74206d757374206f726967696e6174652066726f6d206160448201527f6e20617070726f766564206465706c6f7965722e0000000000000000000000006064820152608490fd5b50733b52ad533687ce908ba0485ac177c5fb429729623214610036565b507386d26897267711ea4b173c8c124a0a73612001da321461002f565b5073e80a65eb7a3018deda407e621ef5fb5b416678ca3214610028565b600080fdfe60806040526004361015610013575b600080fd5b60003560e01c80630502e2221461012b57806306fdde031461012257806323452b9c14610119578063689e7835146101105780637762df251461010757806379ba5097146100fe57806384385c6f146100f55780638da5cb5b146100ec578063936bf30b146100e3578063bcdd1e13146100da578063c4d66de8146100d1578063e7850948146100c8578063f2fde38b146100bf5763f3fef3a3146100b757600080fd5b61000e610db7565b5061000e610cf1565b5061000e610c4c565b5061000e610ad1565b5061000e6108ac565b5061000e61085f565b5061000e61082a565b5061000e610767565b5061000e610657565b5061000e610622565b5061000e610382565b5061000e6102b5565b5061000e6101f3565b5061000e610157565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361000e57565b503461000e57602060031936011261000e57610171610134565b73ffffffffffffffffffffffffffffffffffffffff90816000541633036101c95716600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055005b60046040517f6db2465f000000000000000000000000000000000000000000000000000000008152fd5b503461000e57600060031936011261000e57604080519061021382610ed6565b6016825260207f657468657265756d2d6665652d636f6c6c6563746f720000000000000000000081840152815192818492835281519182828501526000915b83831061029d575050817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092601f9211610290575b01168101030190f35b6000858286010152610287565b81830181015187840187015286945091820191610252565b503461000e5760008060031936011261033d5773ffffffffffffffffffffffffffffffffffffffff81541633036101c9577f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6020604051838152a17fffffffffffffffffffffffff000000000000000000000000000000000000000060015416600155604051f35b80fd5b600319606091011261000e5773ffffffffffffffffffffffffffffffffffffffff90600435828116810361000e5791602435908116810361000e579060443590565b503461000e5761039136610340565b9173ffffffffffffffffffffffffffffffffffffffff806002541633141580610614575b6105ea5760016103ef6103e88473ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b5460ff1690565b1515036105a3576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000006020820190815260248201869052939061045f81604481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610eff565b600080958192519082855af1610473610f40565b90156105465780518015158061053b575b6104c0575b50505082809481938293839183156104b6575b1690f1156104a957604051f35b6104b1610fc4565b604051f35b6108fc925061049c565b816020806104d5936104d99501019101610fac565b1590565b6104e4578080610489565b6040517fdca74beb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152921660248301525060448101839052606490fd5b506020811015610484565b6040517f2bc85fda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152851660248201526000604482015260648101879052608490fd5b6040517f0bee607200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602490fd5b60046040517fccea9e6f000000000000000000000000000000000000000000000000000000008152fd5b5080600054163314156103b5565b503461000e57600060031936011261000e57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461000e5760008060031936011261033d5760015473ffffffffffffffffffffffffffffffffffffffff90818116330361073d577f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0917fffffffffffffffffffffffff00000000000000000000000000000000000000006040927f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da60208551888152a1166001558354168151908152336020820152a1600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055604051f35b60046040517f356e0057000000000000000000000000000000000000000000000000000000008152fd5b503461000e57602060031936011261000e57610781610134565b73ffffffffffffffffffffffffffffffffffffffff90816000541633036101c957168015610800576020817fb3b3f5f64ab192e4b5fefde1f51ce9733bbdcf831951543b325aebd49cc27ec4927fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255604051908152a1005b60046040517f6d5b0ca5000000000000000000000000000000000000000000000000000000008152fd5b503461000e57600060031936011261000e57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b503461000e57602060031936011261000e5773ffffffffffffffffffffffffffffffffffffffff61088e610134565b166000526003602052602060ff604060002054166040519015158152f35b503461000e576108bb36610340565b73ffffffffffffffffffffffffffffffffffffffff80600254163314159081610ac2575b506105ea5760016109136103e88573ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b151503610a7b576040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff851660248301526044820183905260009182919061097b8160648101610433565b519082865af1610989610f40565b9015610a1d57805180151580610a12575b6109a1575b005b816020806104d5936109b69501019101610fac565b6109bc57005b6040517fdca74beb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529290911660248301526044820152606490fd5b50602081101561099a565b506040517f2bc85fda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152929091166024830152600060448301526064820152608490fd5b6040517f0bee607200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602490fd5b905060005416331415386108df565b503461000e57602060031936011261000e57610aeb610134565b73939c8d89ebc11fa45e576215e2353673ad0ba18a32148015610c2f575b8015610c12575b8015610bf5575b80610bd5575b15610b2b5761099f90610fd1565b60a46040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f496e697469616c697a65206d757374206f726967696e6174652066726f6d206160448201527f6e20617070726f766564206465706c6f7965722c20616e6420746865206f776e60648201527f6572206d757374206e6f74206265207365742e000000000000000000000000006084820152fd5b5073ffffffffffffffffffffffffffffffffffffffff6000541615610b1d565b50733b52ad533687ce908ba0485ac177c5fb429729623214610b17565b507386d26897267711ea4b173c8c124a0a73612001da3214610b10565b5073e80a65eb7a3018deda407e621ef5fb5b416678ca3214610b09565b503461000e57602060031936011261000e57610c66610134565b73ffffffffffffffffffffffffffffffffffffffff90816000541633036101c957168015610cc757600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055005b60046040517f0d78f1df000000000000000000000000000000000000000000000000000000008152fd5b503461000e57602060031936011261000e57610d0b610134565b73ffffffffffffffffffffffffffffffffffffffff90816000541633036101c957168015610d8d577f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6020604051838152a17fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001556000604051f35b60046040517f7621b061000000000000000000000000000000000000000000000000000000008152fd5b503461000e57604060031936011261000e57610dd1610134565b6024359073ffffffffffffffffffffffffffffffffffffffff806002541633141580610e98575b6105ea576001610e2b6103e88473ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b1515036105a357478311610e6657600080938193829383918315610e5c575b1690f115610e5457005b61099f610fc4565b6108fc9250610e4a565b6040517f4bac467800000000000000000000000000000000000000000000000000000000815260048101849052602490fd5b508060005416331415610df8565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610ef257604052565b610efa610ea6565b604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ef257604052565b3d15610fa7573d9067ffffffffffffffff8211610f9a575b60405191610f8e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610eff565b82523d6000602084013e565b610fa2610ea6565b610f58565b606090565b9081602091031261000e5751801515810361000e5790565b506040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff809116908115611086576000549081168061105557507fffffffffffffffffffffffff0000000000000000000000000000000000000000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06040805160008152856020820152a11617600055565b602490604051907f62c926120000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f3bb4b2ba000000000000000000000000000000000000000000000000000000008152fdfea2646970667358221220db6979fe7dfff016cf22dca32e0e75c8fadd5de0ef39e0d99006006924e8ced264736f6c634300080e0033
Deployed Bytecode
0x60806040526004361015610013575b600080fd5b60003560e01c80630502e2221461012b57806306fdde031461012257806323452b9c14610119578063689e7835146101105780637762df251461010757806379ba5097146100fe57806384385c6f146100f55780638da5cb5b146100ec578063936bf30b146100e3578063bcdd1e13146100da578063c4d66de8146100d1578063e7850948146100c8578063f2fde38b146100bf5763f3fef3a3146100b757600080fd5b61000e610db7565b5061000e610cf1565b5061000e610c4c565b5061000e610ad1565b5061000e6108ac565b5061000e61085f565b5061000e61082a565b5061000e610767565b5061000e610657565b5061000e610622565b5061000e610382565b5061000e6102b5565b5061000e6101f3565b5061000e610157565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361000e57565b503461000e57602060031936011261000e57610171610134565b73ffffffffffffffffffffffffffffffffffffffff90816000541633036101c95716600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055005b60046040517f6db2465f000000000000000000000000000000000000000000000000000000008152fd5b503461000e57600060031936011261000e57604080519061021382610ed6565b6016825260207f657468657265756d2d6665652d636f6c6c6563746f720000000000000000000081840152815192818492835281519182828501526000915b83831061029d575050817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092601f9211610290575b01168101030190f35b6000858286010152610287565b81830181015187840187015286945091820191610252565b503461000e5760008060031936011261033d5773ffffffffffffffffffffffffffffffffffffffff81541633036101c9577f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6020604051838152a17fffffffffffffffffffffffff000000000000000000000000000000000000000060015416600155604051f35b80fd5b600319606091011261000e5773ffffffffffffffffffffffffffffffffffffffff90600435828116810361000e5791602435908116810361000e579060443590565b503461000e5761039136610340565b9173ffffffffffffffffffffffffffffffffffffffff806002541633141580610614575b6105ea5760016103ef6103e88473ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b5460ff1690565b1515036105a3576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000006020820190815260248201869052939061045f81604481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610eff565b600080958192519082855af1610473610f40565b90156105465780518015158061053b575b6104c0575b50505082809481938293839183156104b6575b1690f1156104a957604051f35b6104b1610fc4565b604051f35b6108fc925061049c565b816020806104d5936104d99501019101610fac565b1590565b6104e4578080610489565b6040517fdca74beb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152921660248301525060448101839052606490fd5b506020811015610484565b6040517f2bc85fda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152851660248201526000604482015260648101879052608490fd5b6040517f0bee607200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602490fd5b60046040517fccea9e6f000000000000000000000000000000000000000000000000000000008152fd5b5080600054163314156103b5565b503461000e57600060031936011261000e57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461000e5760008060031936011261033d5760015473ffffffffffffffffffffffffffffffffffffffff90818116330361073d577f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0917fffffffffffffffffffffffff00000000000000000000000000000000000000006040927f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da60208551888152a1166001558354168151908152336020820152a1600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055604051f35b60046040517f356e0057000000000000000000000000000000000000000000000000000000008152fd5b503461000e57602060031936011261000e57610781610134565b73ffffffffffffffffffffffffffffffffffffffff90816000541633036101c957168015610800576020817fb3b3f5f64ab192e4b5fefde1f51ce9733bbdcf831951543b325aebd49cc27ec4927fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255604051908152a1005b60046040517f6d5b0ca5000000000000000000000000000000000000000000000000000000008152fd5b503461000e57600060031936011261000e57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b503461000e57602060031936011261000e5773ffffffffffffffffffffffffffffffffffffffff61088e610134565b166000526003602052602060ff604060002054166040519015158152f35b503461000e576108bb36610340565b73ffffffffffffffffffffffffffffffffffffffff80600254163314159081610ac2575b506105ea5760016109136103e88573ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b151503610a7b576040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff851660248301526044820183905260009182919061097b8160648101610433565b519082865af1610989610f40565b9015610a1d57805180151580610a12575b6109a1575b005b816020806104d5936109b69501019101610fac565b6109bc57005b6040517fdca74beb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529290911660248301526044820152606490fd5b50602081101561099a565b506040517f2bc85fda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152929091166024830152600060448301526064820152608490fd5b6040517f0bee607200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602490fd5b905060005416331415386108df565b503461000e57602060031936011261000e57610aeb610134565b73939c8d89ebc11fa45e576215e2353673ad0ba18a32148015610c2f575b8015610c12575b8015610bf5575b80610bd5575b15610b2b5761099f90610fd1565b60a46040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f496e697469616c697a65206d757374206f726967696e6174652066726f6d206160448201527f6e20617070726f766564206465706c6f7965722c20616e6420746865206f776e60648201527f6572206d757374206e6f74206265207365742e000000000000000000000000006084820152fd5b5073ffffffffffffffffffffffffffffffffffffffff6000541615610b1d565b50733b52ad533687ce908ba0485ac177c5fb429729623214610b17565b507386d26897267711ea4b173c8c124a0a73612001da3214610b10565b5073e80a65eb7a3018deda407e621ef5fb5b416678ca3214610b09565b503461000e57602060031936011261000e57610c66610134565b73ffffffffffffffffffffffffffffffffffffffff90816000541633036101c957168015610cc757600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055005b60046040517f0d78f1df000000000000000000000000000000000000000000000000000000008152fd5b503461000e57602060031936011261000e57610d0b610134565b73ffffffffffffffffffffffffffffffffffffffff90816000541633036101c957168015610d8d577f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6020604051838152a17fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001556000604051f35b60046040517f7621b061000000000000000000000000000000000000000000000000000000008152fd5b503461000e57604060031936011261000e57610dd1610134565b6024359073ffffffffffffffffffffffffffffffffffffffff806002541633141580610e98575b6105ea576001610e2b6103e88473ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b1515036105a357478311610e6657600080938193829383918315610e5c575b1690f115610e5457005b61099f610fc4565b6108fc9250610e4a565b6040517f4bac467800000000000000000000000000000000000000000000000000000000815260048101849052602490fd5b508060005416331415610df8565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610ef257604052565b610efa610ea6565b604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ef257604052565b3d15610fa7573d9067ffffffffffffffff8211610f9a575b60405191610f8e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610eff565b82523d6000602084013e565b610fa2610ea6565b610f58565b606090565b9081602091031261000e5751801515810361000e5790565b506040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff809116908115611086576000549081168061105557507fffffffffffffffffffffffff0000000000000000000000000000000000000000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06040805160008152856020820152a11617600055565b602490604051907f62c926120000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f3bb4b2ba000000000000000000000000000000000000000000000000000000008152fdfea2646970667358221220db6979fe7dfff016cf22dca32e0e75c8fadd5de0ef39e0d99006006924e8ced264736f6c634300080e0033
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 ]
[ 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.