ETH Price: $2,608.42 (+0.32%)
Gas: 1 Gwei

Contract

0xe513E5E4E9D6161bA60fFEA382Ca49A5292e2D57
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Swap147435572022-05-09 17:03:15824 days ago1652115795IN
0xe513E5E4...5292e2D57
0 ETH0.00312354108.39260631
Swap147435542022-05-09 17:02:57824 days ago1652115777IN
0xe513E5E4...5292e2D57
0 ETH0.00318439110.50421125
Swap147435512022-05-09 17:02:41824 days ago1652115761IN
0xe513E5E4...5292e2D57
0 ETH0.04050661135.30710013
Swap147435472022-05-09 17:02:14824 days ago1652115734IN
0xe513E5E4...5292e2D57
0 ETH0.05182885173.12062649
Swap147435422022-05-09 17:00:45824 days ago1652115645IN
0xe513E5E4...5292e2D57
0 ETH0.03906476130.4960145
Swap147435412022-05-09 17:00:34824 days ago1652115634IN
0xe513E5E4...5292e2D57
0 ETH0.03923163131.04817549
Swap147435392022-05-09 17:00:16824 days ago1652115616IN
0xe513E5E4...5292e2D57
0 ETH0.03852609128.69144269
Swap147435382022-05-09 17:00:03824 days ago1652115603IN
0xe513E5E4...5292e2D57
0 ETH0.03588272127.12831579
Swap147435272022-05-09 16:58:34824 days ago1652115514IN
0xe513E5E4...5292e2D57
0 ETH0.06188639206.72346839
Swap147435212022-05-09 16:57:08824 days ago1652115428IN
0xe513E5E4...5292e2D57
0 ETH0.06586749233.35091885
Swap147435172022-05-09 16:55:43824 days ago1652115343IN
0xe513E5E4...5292e2D57
0 ETH0.06485314216.6335409
Swap147435042022-05-09 16:51:51824 days ago1652115111IN
0xe513E5E4...5292e2D57
0 ETH0.05292284176.78189782
Swap147434982022-05-09 16:50:13824 days ago1652115013IN
0xe513E5E4...5292e2D57
0 ETH0.04765494159.18516192
Swap147434962022-05-09 16:49:57824 days ago1652114997IN
0xe513E5E4...5292e2D57
0 ETH0.04787807159.93048947
Swap147434572022-05-09 16:40:27824 days ago1652114427IN
0xe513E5E4...5292e2D57
0 ETH0.03088653103.18074533
Swap147434112022-05-09 16:27:33824 days ago1652113653IN
0xe513E5E4...5292e2D57
0 ETH0.0223031674.50081557
Swap147434102022-05-09 16:27:27824 days ago1652113647IN
0xe513E5E4...5292e2D57
0 ETH0.0213906471.45267051
Swap147434002022-05-09 16:25:15824 days ago1652113515IN
0xe513E5E4...5292e2D57
0 ETH0.0199594966.67209344
Swap147433982022-05-09 16:25:01824 days ago1652113501IN
0xe513E5E4...5292e2D57
0 ETH0.0175302168.81609387
Swap147433982022-05-09 16:25:01824 days ago1652113501IN
0xe513E5E4...5292e2D57
0 ETH0.0218538673
Swap147433882022-05-09 16:23:09824 days ago1652113389IN
0xe513E5E4...5292e2D57
0 ETH0.0232199777.56642996
Swap147433532022-05-09 16:14:36824 days ago1652112876IN
0xe513E5E4...5292e2D57
0 ETH0.0277196892.59402351
Swap147433142022-05-09 16:05:26824 days ago1652112326IN
0xe513E5E4...5292e2D57
0 ETH0.0254809485.11577938
Swap147432192022-05-09 15:42:42824 days ago1652110962IN
0xe513E5E4...5292e2D57
0 ETH0.0297913899.51825053
Swap147432162022-05-09 15:42:31824 days ago1652110951IN
0xe513E5E4...5292e2D57
0 ETH0.0275066897.44881232
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PNTokenSwap

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : PNTokenSwap.sol
//SPDX-License-Identifier: Unlicense
//                                                      *****+=:.  .=*****+-.      -#@@#-.   .+*****=:.     .****+:   :*****+=:.   -***:  -+**=   =***.
//                ...:=*#%%#*=:..       .+%@*.          @@@@%@@@@* .#@@@%%@@@*.  +@@@@%@@@-  :%@@@%%@@@-    +@@@@@#   -@@@@%@@@@+  +@@@-   #@@@:  %@@%
//             .:=%@@@@@@@@@@@@@@#-.  .#@@@@%:          @@@% .#@@%=.#@@*  +@@@= -%@@#: #@@@: :%@@- .@@@@   .@@@#@@#   -@@@* :%@@*: +@@@-   =@@@+ =@@@.
//           .-%@@@@@@%%%%%%%%@@@@@@+=%@@@%*.           @@@%  :@@@*.#@@*  =@@@= +@@@-  *@@@- :%@@=..%@@@   .@@%.@@%:  -@@@* .+@@#: +@@@-    *@@@:%@@+
//          -%@@@@%##=.      :*##@@@@@@@%#.             @@@@:-*@@%=.#@@#::*@@%- +@@@-  +@@@= :%@@*+#@@@=   +@@%.@@@#  -@@@#+#@@@=  +@@@-    .#@@=@@%
//        .=@@@@#*:              *@@@@@#-               @@@@@@@@#+ .#@@@@@@@@=  +@@@-  +@@@+.:%@@%##@@#:   @@@#.%@@#  -@@@%#%@@#-. +@@@-     +@@@@@:
//       :*@@@@+.              .=%@@@#*.                @@@@***+.  .#@@%+*%@@#: +@@@-  *@@@+ :%@@-  %@@@. .@@@#=*@@%- -@@@* :*@@@= +@@@-      #@@@#
//      .#@@@%=              .-#@@@%#:    :             @@@%       .#@@*  =@@@= +@@@=  *@@@- :%@@-  +@@@= +@@@@@@@@@* -@@@*  =@@@= +@@@-      *@@@:
//      =@@@@=              :*@@@@#-.   .-%:            @@@%       .#@@*  =@@@= -%@@*=-%@@#. :%@@*=-%@@@: @@@@++*@@@# -@@@#--*@@%- +@@@*----. *@@@:
//     .@@@@+             :=#@@@#+:    -+@@*.           @@@%       .#@@*  =@@@=  -#@@@@@@#:  :%@@@@@@@*+ .@@@#  .*@@%--@@@@@@@@#-  +@@@@@@@@: *@@@:
//     -@@@%            .-#@@@%*:      *@@@@.           +++=       .=++-  :+++:   :++++++.   .++++++++.  :+++:   :+++-.+++++++=:   -++++++++. -+++.
//     #@@@%           :*@@@@#-.       -%@@@.
//     %@@@%         :+#@@@#=:         :%@@@.                             .                                                        .
//     +@@@%       .=#@@@@*:           =@@@@.           ++++=  :++=   :++***++: .=+++++++++. =++=  .+++-  +++=  .+++=. :+++-   :++***++:
//     :@@@%-     :*@@@@#-.            *@@@%.           @@@@%  =@@#  :#@@@#%@@#:-%@@@@@@@@@: %@@%. :@@@*  @@@%  :@@@@+ -@@@+  :#@@%#@@@#:
//      @@@@#   .*#@@@#=:             =%@@@=            @@@@@= =@@# .+@@@+:=%@@*:---#@@@+--. %@@%. :@@@*  @@@%  :@@@@#:-@@@+ :%@@*::*@@@-
//      -@@@@+ =#@@@@*:              -%@@@#.            @@@#@% =@@# :%@@*. .+@@%-   *@@@-    %@@%. :@@@*  @@@%  :@@@@@+-@@@+ =@@@=  :---.
//       =@@@@#%@@@#-.              =%@@@@-             @@@=@@*=@@# -@@@*   =@@@=   *@@@-    %@@@#*#@@@*  @@@%  :@@%+@%*@@@+ =@@@= -****:
//        =@@@@@@%=.              :*@@@@%-              @@@-%@%-@@# -@@@*   =@@@=   *@@@-    %@@@@@@@@@*  @@@%  :@@#-@@%@@@+ =@@@= +@@@@-
//        =@@@@@*.              -#%@@@@+:               @@@=:@@%@@# -@@@*   =@@@=   *@@@-    %@@%-:=@@@*  @@@%  :@@#.+@@@@@+ =@@@= .*@@@-
//      .%@@@@%:.    :*+-:-=*#%%@@@@@%-                 @@@=.#@@@@# .*@@%- :#@@#:   *@@@-    %@@%. :@@@*  @@@%  :@@# -@@@@@+ =@@@=  +@@@-
//     *%@@@@=.    :#%@@@%@@@@@@@@@*:.                  @@@= :@@@@#  -@@@%+#@@@+    *@@@-    %@@%. :@@@*  @@@%  :@@#  +@@@@+ .*@@@*+%@@@- -#%%:
//   :%@@@@#.     .#@@@@@@@@@@@@*:.                     @@@= .#@@@#   =@@@@@@@+     *@@@-    %@@%. :@@@*  @@@%  :@@#  -@@@@+  -%@@@@@@@@- :%@@:
//    .:-:.         ....:::.....                        ..     ...     ..:::..       ...      ..    ...   ...    ..    ....     .::.....    ..
//
pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./IPNTokenSwap.sol";

/** @title Probably Nothing Token Swap from PN to PRBLY
 * @author 0xEwok and audie.eth
 * @notice This contract swaps PN tokens for PRBLY tokens and compensates PN
 *         taxes
 */
contract PNTokenSwap is IPNTokenSwap, ReentrancyGuard, Ownable {
    address private v1TokenAddress;
    address private v2TokenAddress;
    address private v1TokenTaker;
    bool private swapActive;

    mapping(address => uint256) private swappedAmount;

    constructor(address _v1Token, address _v2Token) {
        v1TokenAddress = _v1Token;
        v2TokenAddress = _v2Token;
    }

    /** @notice Provides address of token being swapped
     * @return v1Address address of the V1 token contract
     */
    function getV1TokenAddress() external view override returns (address) {
        return v1TokenAddress;
    }

    /** @notice Provides address of received from swap
     * @return v2Address address of the V2 token contract
     */
    function getV2TokenAddress() external view override returns (address) {
        return v2TokenAddress;
    }

    /** @notice Provides address that receives swapped tokens
     * @return tokenTaker address that receives swapped tokens
     */
    function getV1TokenTaker() public view override returns (address) {
        return v1TokenTaker;
    }

    /** @notice Allows owner to change who receives swapped tokens
     * @param newTokenTaker address to receive swapped tokens
     */
    function setV1TokenTaker(address newTokenTaker)
        external
        override
        onlyOwner
    {
        v1TokenTaker = newTokenTaker;
    }

    /** @notice Allows any caller to see if the swap function is active
     * @return swapActive boolean indicating whether swap is on or off
     */
    function isSwapActive() external view returns (bool) {
        return swapActive;
    }

    /** @notice Allows owner to pause use of the swap function
     * @dev Simply calling this function is enough to pause swapping
     */
    function pauseSwap() external onlyOwner {
        swapActive = false;
    }

    /** @notice Allows owner to activate the swap function if it's paused
     * @dev Ensure the token taker address is set before calling
     */
    function allowSwap() external onlyOwner {
        require(v1TokenTaker != address(0), "Must setV1TokenTaker");
        swapActive = true;
    }

    /** @notice Check an addresses cumulative swapped tokens (input)
     * @param swapper Address for which you want the cumulative balance
     */
    function getSwappedAmount(address swapper) external view returns (uint256) {
        return swappedAmount[swapper];
    }

    /** @notice Swaps PN v1 tokens for PN v2 tokens
     * @param amount The amount of v1 tokens to exchange for v2 tokens
     */
    function swap(uint256 amount) external override nonReentrant {
        require(swapActive, "Swap is paused");
        IERC20 v1Contract = IERC20(v1TokenAddress);
        require(
            v1Contract.balanceOf(msg.sender) >= amount,
            "Amount higher than user's balance"
        );
        require(
            // Tranfer tokens from sender to token taker
            v1Contract.transferFrom(msg.sender, v1TokenTaker, amount),
            "Token swap failed"
        );

        IERC20 v2Contract = IERC20(v2TokenAddress);

        // Transfer amount minus fees to sender
        v2Contract.transfer(msg.sender, swapAmount(amount));

        // record the amount of swapped v1 tokens
        swappedAmount[msg.sender] = swappedAmount[msg.sender] + amount;
    }

    /** @notice Allows Owner to withdraw unswapped v2 tokens
     * @param amount The amount of v2 tokens to withdraw
     */
    function withdrawV2(uint256 amount) external onlyOwner {
        IERC20(v2TokenAddress).transfer(msg.sender, amount);
    }

    /** @notice Given a v1 Amount, shows the number of v2 tokens swap will return
     * @param v1Amount The amount of v1 tokens to check
     * @return v2Amount number of V2 tokens to be swapped for V1
     */
    function swapAmount(uint256 v1Amount) public pure returns (uint256) {
        // This results in moving the decimal place 4 positions to the RIGHT!
        // The reason is because v1 was 9 decimals, and v2 is 18 decimals.
        return v1Amount * 100000;
    }
}

File 2 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 6 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 5 of 6 : IPNTokenSwap.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

interface IPNTokenSwap{
    function getV1TokenAddress() external view returns(address);
    function getV2TokenAddress() external view returns(address); 
    function getV1TokenTaker() external view returns(address);   
    function setV1TokenTaker(address _newTokenTaker) external; 
    function swap(uint256 amount) external;
}

File 6 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_v1Token","type":"address"},{"internalType":"address","name":"_v2Token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"allowSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"swapper","type":"address"}],"name":"getSwappedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getV1TokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getV1TokenTaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getV2TokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTokenTaker","type":"address"}],"name":"setV1TokenTaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"v1Amount","type":"uint256"}],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawV2","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051610a8b380380610a8b83398101604081905261002f916100dc565b600160005561003d3361006e565b600280546001600160a01b039384166001600160a01b0319918216179091556003805492909316911617905561010e565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146100d757600080fd5b919050565b600080604083850312156100ee578182fd5b6100f7836100c0565b9150610105602084016100c0565b90509250929050565b61096e8061011d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806394b918de1161008c578063bc4af3dc11610066578063bc4af3dc146101ce578063e35bff96146101e1578063ed6b5ad5146101fe578063f2fde38b1461020657600080fd5b806394b918de146101975780639eb74677146101aa578063a86ddd83146101bd57600080fd5b806372069ac5116100c857806372069ac514610134578063735686f61461014757806379886b9d1461017e5780638da5cb5b1461018657600080fd5b806329a390b4146100ef5780632f94da8a14610119578063715018a61461012a575b600080fd5b6003546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6004546001600160a01b03166100fc565b610132610219565b005b610132610142366004610838565b610258565b610170610155366004610838565b6001600160a01b031660009081526005602052604090205490565b604051908152602001610110565b6101326102a4565b6001546001600160a01b03166100fc565b6101326101a5366004610886565b610332565b6101326101b8366004610886565b61064b565b6002546001600160a01b03166100fc565b6101706101dc366004610886565b6106fd565b600454600160a01b900460ff166040519015158152602001610110565b610132610712565b610132610214366004610838565b61074b565b6001546001600160a01b0316331461024c5760405162461bcd60e51b8152600401610243906108b6565b60405180910390fd5b61025660006107e6565b565b6001546001600160a01b031633146102825760405162461bcd60e51b8152600401610243906108b6565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102ce5760405162461bcd60e51b8152600401610243906108b6565b6004546001600160a01b031661031d5760405162461bcd60e51b815260206004820152601460248201527326bab9ba1039b2ba2b18aa37b5b2b72a30b5b2b960611b6044820152606401610243565b6004805460ff60a01b1916600160a01b179055565b600260005414156103855760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610243565b6002600055600454600160a01b900460ff166103d45760405162461bcd60e51b815260206004820152600e60248201526d14ddd85c081a5cc81c185d5cd95960921b6044820152606401610243565b6002546040516370a0823160e01b81523360048201526001600160a01b0390911690829082906370a082319060240160206040518083038186803b15801561041b57600080fd5b505afa15801561042f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610453919061089e565b10156104ab5760405162461bcd60e51b815260206004820152602160248201527f416d6f756e7420686967686572207468616e207573657227732062616c616e636044820152606560f81b6064820152608401610243565b600480546040516323b872dd60e01b815233928101929092526001600160a01b039081166024830152604482018490528216906323b872dd90606401602060405180830381600087803b15801561050157600080fd5b505af1158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190610866565b6105795760405162461bcd60e51b8152602060048201526011602482015270151bdad95b881cddd85c0819985a5b1959607a1b6044820152606401610243565b6003546001600160a01b03168063a9059cbb33610595866106fd565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156105db57600080fd5b505af11580156105ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106139190610866565b503360009081526005602052604090205461062f9084906108eb565b3360009081526005602052604081209190915560019055505050565b6001546001600160a01b031633146106755760405162461bcd60e51b8152600401610243906108b6565b60035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f99190610866565b5050565b600061070c82620186a0610903565b92915050565b6001546001600160a01b0316331461073c5760405162461bcd60e51b8152600401610243906108b6565b6004805460ff60a01b19169055565b6001546001600160a01b031633146107755760405162461bcd60e51b8152600401610243906108b6565b6001600160a01b0381166107da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610243565b6107e3816107e6565b50565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215610849578081fd5b81356001600160a01b038116811461085f578182fd5b9392505050565b600060208284031215610877578081fd5b8151801515811461085f578182fd5b600060208284031215610897578081fd5b5035919050565b6000602082840312156108af578081fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156108fe576108fe610922565b500190565b600081600019048311821515161561091d5761091d610922565b500290565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220f417ebf712832013f05299e0c4435963f8138a49e85d6686b52e9826df5cd53d64736f6c6343000804003300000000000000000000000061b5c3aee3a25f6f83531d548a4d2ee58450f5d90000000000000000000000006361f338ab8def2af3f2a1be7bd8a7db3156f7e7

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806394b918de1161008c578063bc4af3dc11610066578063bc4af3dc146101ce578063e35bff96146101e1578063ed6b5ad5146101fe578063f2fde38b1461020657600080fd5b806394b918de146101975780639eb74677146101aa578063a86ddd83146101bd57600080fd5b806372069ac5116100c857806372069ac514610134578063735686f61461014757806379886b9d1461017e5780638da5cb5b1461018657600080fd5b806329a390b4146100ef5780632f94da8a14610119578063715018a61461012a575b600080fd5b6003546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6004546001600160a01b03166100fc565b610132610219565b005b610132610142366004610838565b610258565b610170610155366004610838565b6001600160a01b031660009081526005602052604090205490565b604051908152602001610110565b6101326102a4565b6001546001600160a01b03166100fc565b6101326101a5366004610886565b610332565b6101326101b8366004610886565b61064b565b6002546001600160a01b03166100fc565b6101706101dc366004610886565b6106fd565b600454600160a01b900460ff166040519015158152602001610110565b610132610712565b610132610214366004610838565b61074b565b6001546001600160a01b0316331461024c5760405162461bcd60e51b8152600401610243906108b6565b60405180910390fd5b61025660006107e6565b565b6001546001600160a01b031633146102825760405162461bcd60e51b8152600401610243906108b6565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102ce5760405162461bcd60e51b8152600401610243906108b6565b6004546001600160a01b031661031d5760405162461bcd60e51b815260206004820152601460248201527326bab9ba1039b2ba2b18aa37b5b2b72a30b5b2b960611b6044820152606401610243565b6004805460ff60a01b1916600160a01b179055565b600260005414156103855760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610243565b6002600055600454600160a01b900460ff166103d45760405162461bcd60e51b815260206004820152600e60248201526d14ddd85c081a5cc81c185d5cd95960921b6044820152606401610243565b6002546040516370a0823160e01b81523360048201526001600160a01b0390911690829082906370a082319060240160206040518083038186803b15801561041b57600080fd5b505afa15801561042f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610453919061089e565b10156104ab5760405162461bcd60e51b815260206004820152602160248201527f416d6f756e7420686967686572207468616e207573657227732062616c616e636044820152606560f81b6064820152608401610243565b600480546040516323b872dd60e01b815233928101929092526001600160a01b039081166024830152604482018490528216906323b872dd90606401602060405180830381600087803b15801561050157600080fd5b505af1158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190610866565b6105795760405162461bcd60e51b8152602060048201526011602482015270151bdad95b881cddd85c0819985a5b1959607a1b6044820152606401610243565b6003546001600160a01b03168063a9059cbb33610595866106fd565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156105db57600080fd5b505af11580156105ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106139190610866565b503360009081526005602052604090205461062f9084906108eb565b3360009081526005602052604081209190915560019055505050565b6001546001600160a01b031633146106755760405162461bcd60e51b8152600401610243906108b6565b60035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f99190610866565b5050565b600061070c82620186a0610903565b92915050565b6001546001600160a01b0316331461073c5760405162461bcd60e51b8152600401610243906108b6565b6004805460ff60a01b19169055565b6001546001600160a01b031633146107755760405162461bcd60e51b8152600401610243906108b6565b6001600160a01b0381166107da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610243565b6107e3816107e6565b50565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215610849578081fd5b81356001600160a01b038116811461085f578182fd5b9392505050565b600060208284031215610877578081fd5b8151801515811461085f578182fd5b600060208284031215610897578081fd5b5035919050565b6000602082840312156108af578081fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156108fe576108fe610922565b500190565b600081600019048311821515161561091d5761091d610922565b500290565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220f417ebf712832013f05299e0c4435963f8138a49e85d6686b52e9826df5cd53d64736f6c63430008040033

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

00000000000000000000000061b5c3aee3a25f6f83531d548a4d2ee58450f5d90000000000000000000000006361f338ab8def2af3f2a1be7bd8a7db3156f7e7

-----Decoded View---------------
Arg [0] : _v1Token (address): 0x61b5c3aeE3a25f6f83531D548A4d2EE58450f5D9
Arg [1] : _v2Token (address): 0x6361F338Ab8DEf2AF3f2A1Be7BD8A7dB3156F7E7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000061b5c3aee3a25f6f83531d548a4d2ee58450f5d9
Arg [1] : 0000000000000000000000006361f338ab8def2af3f2a1be7bd8a7db3156f7e7


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.