ETH Price: $3,604.56 (+4.40%)
Gas: 6.21 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Redeem214461892024-12-20 20:42:2314 days ago1734727343IN
0x8676757c...3485F2447
0 ETH0.0042931616.09808531
Redeem214432852024-12-20 10:58:2314 days ago1734692303IN
0x8676757c...3485F2447
0 ETH0.0072587627.29383844
Redeem214427202024-12-20 9:05:1114 days ago1734685511IN
0x8676757c...3485F2447
0 ETH0.0085179232.02985005
Redeem212755522024-11-27 0:37:1137 days ago1732667831IN
0x8676757c...3485F2447
0 ETH0.0041298815.2542219
Redeem212754992024-11-27 0:26:1137 days ago1732667171IN
0x8676757c...3485F2447
0 ETH0.0030975912.21270363
Redeem212624642024-11-25 4:44:3539 days ago1732509875IN
0x8676757c...3485F2447
0 ETH0.001507866.01517969
Redeem212088742024-11-17 17:18:5947 days ago1731863939IN
0x8676757c...3485F2447
0 ETH0.0046662918.75243111
Redeem211908892024-11-15 5:04:4749 days ago1731647087IN
0x8676757c...3485F2447
0 ETH0.0047457819.07184863
Redeem211902602024-11-15 2:58:2349 days ago1731639503IN
0x8676757c...3485F2447
0 ETH0.0042501717.08179037
Redeem211823222024-11-14 0:22:1150 days ago1731543731IN
0x8676757c...3485F2447
0 ETH0.0077399428.50933054
Redeem211822962024-11-14 0:16:5950 days ago1731543419IN
0x8676757c...3485F2447
0 ETH0.0076169130.38551601
Redeem211757782024-11-13 2:27:3551 days ago1731464855IN
0x8676757c...3485F2447
0 ETH0.0139341751.32521364
Redeem211748842024-11-12 23:27:2352 days ago1731454043IN
0x8676757c...3485F2447
0 ETH0.0061127223.24652831
Redeem211189792024-11-05 4:11:5959 days ago1730779919IN
0x8676757c...3485F2447
0 ETH0.001509125.63577887
Redeem210931972024-11-01 13:48:5963 days ago1730468939IN
0x8676757c...3485F2447
0 ETH0.0035737414.53476267
Redeem210385202024-10-24 22:42:4771 days ago1729809767IN
0x8676757c...3485F2447
0 ETH0.002215838.30871108
Redeem210317682024-10-24 0:06:5971 days ago1729728419IN
0x8676757c...3485F2447
0 ETH0.001944397.29089523
Redeem210317562024-10-24 0:04:3571 days ago1729728275IN
0x8676757c...3485F2447
0 ETH0.001775037.21921123
Redeem210188272024-10-22 4:47:3573 days ago1729572455IN
0x8676757c...3485F2447
0 ETH0.00162416.08991606
Redeem209965982024-10-19 2:21:5976 days ago1729304519IN
0x8676757c...3485F2447
0 ETH0.002588319.53466415
Redeem209610602024-10-14 3:14:5981 days ago1728875699IN
0x8676757c...3485F2447
0 ETH0.002081667.75254738
Redeem209609292024-10-14 2:48:4781 days ago1728874127IN
0x8676757c...3485F2447
0 ETH0.002434699.0672778
Redeem209533652024-10-13 1:22:1182 days ago1728782531IN
0x8676757c...3485F2447
0 ETH0.002369169.40774644
Redeem209400282024-10-11 4:35:1184 days ago1728621311IN
0x8676757c...3485F2447
0 ETH0.00257489.65473381
Redeem209257262024-10-09 4:44:5986 days ago1728449099IN
0x8676757c...3485F2447
0 ETH0.002436569.67446654
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:
Redeemer

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 9 : Redeemer.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.3;

import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "./interfaces/chainlink/IAggregatorV3.sol";
import "./interfaces/IVUSD.sol";
import "./interfaces/ITreasury.sol";

/// @title VUSD Redeemer, User can redeem their VUSD with any supported tokens
contract Redeemer is Context, ReentrancyGuard {
    string public constant NAME = "VUSD-Redeemer";
    string public constant VERSION = "1.3.0";

    IVUSD public immutable vusd;

    uint256 public redeemFee = 30; // Default 0.3% fee
    uint256 public constant MAX_REDEEM_FEE = 10_000; // 10_000 = 100%

    event UpdatedRedeemFee(uint256 previousRedeemFee, uint256 newRedeemFee);

    constructor(address _vusd) {
        require(_vusd != address(0), "vusd-address-is-zero");
        vusd = IVUSD(_vusd);
    }

    modifier onlyGovernor() {
        require(_msgSender() == governor(), "caller-is-not-the-governor");
        _;
    }

    ////////////////////////////// Only Governor //////////////////////////////

    /// @notice Update redeem fee
    function updateRedeemFee(uint256 _newRedeemFee) external onlyGovernor {
        require(_newRedeemFee <= MAX_REDEEM_FEE, "redeem-fee-limit-reached");
        require(redeemFee != _newRedeemFee, "same-redeem-fee");
        emit UpdatedRedeemFee(redeemFee, _newRedeemFee);
        redeemFee = _newRedeemFee;
    }

    ///////////////////////////////////////////////////////////////////////////

    /**
     * @notice Redeem token and burn VUSD amount less redeem fee, if any.
     * @param _token Token to redeem, it should be 1 of the supported tokens from treasury.
     * @param _vusdAmount VUSD amount to burn
     */
    function redeem(address _token, uint256 _vusdAmount) external nonReentrant {
        _redeem(_token, _vusdAmount, _msgSender());
    }

    /**
     * @notice Redeem token and burn VUSD amount less redeem fee, if any.
     * @param _token Token to redeem, it should be 1 of the supported tokens from treasury.
     * @param _vusdAmount VUSD amount to burn. VUSD will be burnt from caller
     * @param _tokenReceiver Address of token receiver
     */
    function redeem(
        address _token,
        uint256 _vusdAmount,
        address _tokenReceiver
    ) external nonReentrant {
        _redeem(_token, _vusdAmount, _tokenReceiver);
    }

    /**
     * @notice Current redeemable amount for given token and vusdAmount.
     * If token is not supported by treasury it will return 0.
     * If vusdAmount is higher than current total redeemable of token it will return 0.
     * @param _token Token to redeem
     * @param _vusdAmount VUSD amount to burn
     */
    function redeemable(address _token, uint256 _vusdAmount) external view returns (uint256) {
        ITreasury _treasury = ITreasury(treasury());
        if (_treasury.isWhitelistedToken(_token)) {
            uint256 _redeemable = _calculateRedeemable(_token, _vusdAmount);
            return _redeemable > redeemable(_token) ? 0 : _redeemable;
        }
        return 0;
    }

    /// @dev Current redeemable amount for given token
    function redeemable(address _token) public view returns (uint256) {
        return ITreasury(treasury()).withdrawable(_token);
    }

    /// @dev Governor is defined in VUSD token contract only
    function governor() public view returns (address) {
        return vusd.governor();
    }

    /// @dev Treasury is defined in VUSD token contract only
    function treasury() public view returns (address) {
        return vusd.treasury();
    }

    function _redeem(
        address _token,
        uint256 _vusdAmount,
        address _tokenReceiver
    ) internal {
        // In case of redeemFee, We will burn vusdAmount from user and withdraw (vusdAmount - fee) from treasury.
        uint256 _redeemable = _calculateRedeemable(_token, _vusdAmount);
        // Burn vusdAmount
        vusd.burnFrom(_msgSender(), _vusdAmount);
        // Withdraw _redeemable
        ITreasury(treasury()).withdraw(_token, _redeemable, _tokenReceiver);
    }

    /**
     * @notice Calculate redeemable amount based on oracle price and redeemFee, if any.
     * Also covert 18 decimal VUSD amount to _token defined decimal amount.
     * @return Token amount that user will get after burning vusdAmount
     */
    function _calculateRedeemable(address _token, uint256 _vusdAmount) internal view returns (uint256) {
        IAggregatorV3 _oracle = IAggregatorV3(ITreasury(treasury()).oracles(_token));
        (, int256 _price, , , ) = IAggregatorV3(_oracle).latestRoundData();
        uint256 _redeemable = (_vusdAmount * uint256(_price)) / (10**IAggregatorV3(_oracle).decimals());
        if (redeemFee != 0) {
            _redeemable -= (_redeemable * redeemFee) / MAX_REDEEM_FEE;
        }
        // convert redeemable to _token defined decimal
        return _redeemable / 10**(18 - IERC20Metadata(_token).decimals());
    }
}

File 2 of 9 : 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 3 of 9 : 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 4 of 9 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 5 of 9 : draft-IERC20Permit.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 6 of 9 : 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;
    }
}

File 7 of 9 : ITreasury.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.3;

interface ITreasury {
    function withdraw(address _token, uint256 _amount) external;

    function withdraw(
        address _token,
        uint256 _amount,
        address _tokenReceiver
    ) external;

    function isWhitelistedToken(address _address) external view returns (bool);

    function oracles(address _token) external view returns (address);

    function withdrawable(address _token) external view returns (uint256);

    function whitelistedTokens() external view returns (address[] memory);

    function vusd() external view returns (address);
}

File 8 of 9 : IVUSD.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.3;

import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface IVUSD is IERC20, IERC20Permit {
    function burnFrom(address _user, uint256 _amount) external;

    function mint(address _to, uint256 _amount) external;

    function multiTransfer(address[] memory _recipients, uint256[] memory _amounts) external returns (bool);

    function updateMinter(address _newMinter) external;

    function updateTreasury(address _newTreasury) external;

    function governor() external view returns (address _governor);

    function minter() external view returns (address _minter);

    function treasury() external view returns (address _treasury);
}

File 9 of 9 : IAggregatorV3.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.3;

interface IAggregatorV3 {
    function decimals() external view returns (uint8);

    function description() external view returns (string memory);

    function version() external view returns (uint256);

    // getRoundData and latestRoundData should both raise "No data present"
    // if they do not have data to report, instead of returning unset values
    // which could be misinterpreted as actual reported values.
    function getRoundData(uint80 _roundId)
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_vusd","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousRedeemFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRedeemFee","type":"uint256"}],"name":"UpdatedRedeemFee","type":"event"},{"inputs":[],"name":"MAX_REDEEM_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_vusdAmount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_vusdAmount","type":"uint256"},{"internalType":"address","name":"_tokenReceiver","type":"address"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"redeemable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_vusdAmount","type":"uint256"}],"name":"redeemable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRedeemFee","type":"uint256"}],"name":"updateRedeemFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vusd","outputs":[{"internalType":"contract IVUSD","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a0604052601e6001553480156200001657600080fd5b50604051620017f2380380620017f283398181016040528101906200003c91906200010c565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ae906200015f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505062000209565b6000815190506200010681620001ef565b92915050565b6000602082840312156200011f57600080fd5b60006200012f84828501620000f5565b91505092915050565b60006200014760148362000181565b91506200015482620001c6565b602082019050919050565b600060208201905081810360008301526200017a8162000138565b9050919050565b600082825260208201905092915050565b60006200019f82620001a6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b7f767573642d616464726573732d69732d7a65726f000000000000000000000000600082015250565b620001fa8162000192565b81146200020657600080fd5b50565b60805160601c6115b56200023d60003960008181610243015281816104590152818161061101526107cf01526115b56000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806367627b621161007157806367627b621461017b578063965fa21e146101ab578063a3f4df7e146101c9578063edac5203146101e7578063fb00d51414610205578063ffa1ad7414610221576100b4565b80630c340a24146100b95780631e9a6950146100d757806326ac1d56146100f3578063484267a4146101115780635c833bfd1461014157806361d027b31461015d575b600080fd5b6100c161023f565b6040516100ce9190610f0d565b60405180910390f35b6100f160048036038101906100ec9190610c75565b6102e4565b005b6100fb610350565b6040516101089190611045565b60405180910390f35b61012b60048036038101906101269190610c23565b610356565b6040516101389190611045565b60405180910390f35b61015b60048036038101906101569190610cb1565b6103ef565b005b610165610455565b6040516101729190610f0d565b60405180910390f35b61019560048036038101906101909190610c75565b6104fa565b6040516101a29190611045565b60405180910390f35b6101b36105d0565b6040516101c09190611045565b60405180910390f35b6101d16105d6565b6040516101de9190610fa3565b60405180910390f35b6101ef61060f565b6040516101fc9190610f88565b60405180910390f35b61021f600480360381019061021a9190610d29565b610633565b005b61022961077e565b6040516102369190610fa3565b60405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156102a757600080fd5b505afa1580156102bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102df9190610c4c565b905090565b6002600054141561032a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032190611005565b60405180910390fd5b6002600081905550610344828261033f6107b7565b6107bf565b60016000819055505050565b61271081565b6000610360610455565b73ffffffffffffffffffffffffffffffffffffffff1663ce513b6f836040518263ffffffff1660e01b81526004016103989190610f0d565b60206040518083038186803b1580156103b057600080fd5b505afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e89190610d52565b9050919050565b60026000541415610435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c90611005565b60405180910390fd5b60026000819055506104488383836107bf565b6001600081905550505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156104bd57600080fd5b505afa1580156104d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f59190610c4c565b905090565b600080610505610455565b90508073ffffffffffffffffffffffffffffffffffffffff1663ab37f486856040518263ffffffff1660e01b81526004016105409190610f0d565b60206040518083038186803b15801561055857600080fd5b505afa15801561056c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105909190610d00565b156105c45760006105a185856108dd565b90506105ac85610356565b81116105b857806105bb565b60005b925050506105ca565b60009150505b92915050565b60015481565b6040518060400160405280600d81526020017f565553442d52656465656d65720000000000000000000000000000000000000081525081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61063b61023f565b73ffffffffffffffffffffffffffffffffffffffff166106596107b7565b73ffffffffffffffffffffffffffffffffffffffff16146106af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a690610fc5565b60405180910390fd5b6127108111156106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90611025565b60405180910390fd5b806001541415610739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073090610fe5565b60405180910390fd5b7f78f68725a1b1a56a998dd7a8d279eb9bfbd45bc0fcee78f408200737275873e56001548260405161076c929190611060565b60405180910390a18060018190555050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b600033905090565b60006107cb84846108dd565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc67906108116107b7565b856040518363ffffffff1660e01b815260040161082f929190610f28565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50505050610869610455565b73ffffffffffffffffffffffffffffffffffffffff166369328dec8583856040518463ffffffff1660e01b81526004016108a593929190610f51565b600060405180830381600087803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b5050505050505050565b6000806108e8610455565b73ffffffffffffffffffffffffffffffffffffffff1663addd5099856040518263ffffffff1660e01b81526004016109209190610f0d565b60206040518083038186803b15801561093857600080fd5b505afa15801561094c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109709190610c4c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156109ba57600080fd5b505afa1580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f29190610d7b565b50505091505060008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4057600080fd5b505afa158015610a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a789190610df2565b600a610a849190611129565b8286610a909190611247565b610a9a91906110a5565b9050600060015414610acf5761271060015482610ab79190611247565b610ac191906110a5565b81610acc91906112a1565b90505b8573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1557600080fd5b505afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d9190610df2565b6012610b5991906112d5565b600a610b659190611129565b81610b7091906110a5565b935050505092915050565b600081359050610b8a816114f5565b92915050565b600081519050610b9f816114f5565b92915050565b600081519050610bb48161150c565b92915050565b600081519050610bc981611523565b92915050565b600081359050610bde8161153a565b92915050565b600081519050610bf38161153a565b92915050565b600081519050610c0881611568565b92915050565b600081519050610c1d81611551565b92915050565b600060208284031215610c3557600080fd5b6000610c4384828501610b7b565b91505092915050565b600060208284031215610c5e57600080fd5b6000610c6c84828501610b90565b91505092915050565b60008060408385031215610c8857600080fd5b6000610c9685828601610b7b565b9250506020610ca785828601610bcf565b9150509250929050565b600080600060608486031215610cc657600080fd5b6000610cd486828701610b7b565b9350506020610ce586828701610bcf565b9250506040610cf686828701610b7b565b9150509250925092565b600060208284031215610d1257600080fd5b6000610d2084828501610ba5565b91505092915050565b600060208284031215610d3b57600080fd5b6000610d4984828501610bcf565b91505092915050565b600060208284031215610d6457600080fd5b6000610d7284828501610be4565b91505092915050565b600080600080600060a08688031215610d9357600080fd5b6000610da188828901610bf9565b9550506020610db288828901610bba565b9450506040610dc388828901610be4565b9350506060610dd488828901610be4565b9250506080610de588828901610bf9565b9150509295509295909350565b600060208284031215610e0457600080fd5b6000610e1284828501610c0e565b91505092915050565b610e2481611309565b82525050565b610e338161137e565b82525050565b6000610e4482611089565b610e4e8185611094565b9350610e5e8185602086016113a2565b610e6781611433565b840191505092915050565b6000610e7f601a83611094565b9150610e8a82611451565b602082019050919050565b6000610ea2600f83611094565b9150610ead8261147a565b602082019050919050565b6000610ec5601f83611094565b9150610ed0826114a3565b602082019050919050565b6000610ee8601883611094565b9150610ef3826114cc565b602082019050919050565b610f0781611351565b82525050565b6000602082019050610f226000830184610e1b565b92915050565b6000604082019050610f3d6000830185610e1b565b610f4a6020830184610efe565b9392505050565b6000606082019050610f666000830186610e1b565b610f736020830185610efe565b610f806040830184610e1b565b949350505050565b6000602082019050610f9d6000830184610e2a565b92915050565b60006020820190508181036000830152610fbd8184610e39565b905092915050565b60006020820190508181036000830152610fde81610e72565b9050919050565b60006020820190508181036000830152610ffe81610e95565b9050919050565b6000602082019050818103600083015261101e81610eb8565b9050919050565b6000602082019050818103600083015261103e81610edb565b9050919050565b600060208201905061105a6000830184610efe565b92915050565b60006040820190506110756000830185610efe565b6110826020830184610efe565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006110b082611351565b91506110bb83611351565b9250826110cb576110ca611404565b5b828204905092915050565b6000808291508390505b6001851115611120578086048111156110fc576110fb6113d5565b5b600185161561110b5780820291505b808102905061111985611444565b94506110e0565b94509492505050565b600061113482611351565b915061113f8361135b565b925061116c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611174565b905092915050565b6000826111845760019050611240565b816111925760009050611240565b81600181146111a857600281146111b2576111e1565b6001915050611240565b60ff8411156111c4576111c36113d5565b5b8360020a9150848211156111db576111da6113d5565b5b50611240565b5060208310610133831016604e8410600b84101617156112165782820a905083811115611211576112106113d5565b5b611240565b61122384848460016110d6565b9250905081840481111561123a576112396113d5565b5b81810290505b9392505050565b600061125282611351565b915061125d83611351565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611296576112956113d5565b5b828202905092915050565b60006112ac82611351565b91506112b783611351565b9250828210156112ca576112c96113d5565b5b828203905092915050565b60006112e08261135b565b91506112eb8361135b565b9250828210156112fe576112fd6113d5565b5b828203905092915050565b600061131482611331565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600069ffffffffffffffffffff82169050919050565b600061138982611390565b9050919050565b600061139b82611331565b9050919050565b60005b838110156113c05780820151818401526020810190506113a5565b838111156113cf576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f63616c6c65722d69732d6e6f742d7468652d676f7665726e6f72000000000000600082015250565b7f73616d652d72656465656d2d6665650000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f72656465656d2d6665652d6c696d69742d726561636865640000000000000000600082015250565b6114fe81611309565b811461150957600080fd5b50565b6115158161131b565b811461152057600080fd5b50565b61152c81611327565b811461153757600080fd5b50565b61154381611351565b811461154e57600080fd5b50565b61155a8161135b565b811461156557600080fd5b50565b61157181611368565b811461157c57600080fd5b5056fea2646970667358221220e4c91ad08ccc472b5ecf88b5c8f2af60334b030a94ab22a7c48b3db02b53cfa464736f6c63430008030033000000000000000000000000677ddbd918637e5f2c79e164d402454de7da8619

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806367627b621161007157806367627b621461017b578063965fa21e146101ab578063a3f4df7e146101c9578063edac5203146101e7578063fb00d51414610205578063ffa1ad7414610221576100b4565b80630c340a24146100b95780631e9a6950146100d757806326ac1d56146100f3578063484267a4146101115780635c833bfd1461014157806361d027b31461015d575b600080fd5b6100c161023f565b6040516100ce9190610f0d565b60405180910390f35b6100f160048036038101906100ec9190610c75565b6102e4565b005b6100fb610350565b6040516101089190611045565b60405180910390f35b61012b60048036038101906101269190610c23565b610356565b6040516101389190611045565b60405180910390f35b61015b60048036038101906101569190610cb1565b6103ef565b005b610165610455565b6040516101729190610f0d565b60405180910390f35b61019560048036038101906101909190610c75565b6104fa565b6040516101a29190611045565b60405180910390f35b6101b36105d0565b6040516101c09190611045565b60405180910390f35b6101d16105d6565b6040516101de9190610fa3565b60405180910390f35b6101ef61060f565b6040516101fc9190610f88565b60405180910390f35b61021f600480360381019061021a9190610d29565b610633565b005b61022961077e565b6040516102369190610fa3565b60405180910390f35b60007f000000000000000000000000677ddbd918637e5f2c79e164d402454de7da861973ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156102a757600080fd5b505afa1580156102bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102df9190610c4c565b905090565b6002600054141561032a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032190611005565b60405180910390fd5b6002600081905550610344828261033f6107b7565b6107bf565b60016000819055505050565b61271081565b6000610360610455565b73ffffffffffffffffffffffffffffffffffffffff1663ce513b6f836040518263ffffffff1660e01b81526004016103989190610f0d565b60206040518083038186803b1580156103b057600080fd5b505afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e89190610d52565b9050919050565b60026000541415610435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c90611005565b60405180910390fd5b60026000819055506104488383836107bf565b6001600081905550505050565b60007f000000000000000000000000677ddbd918637e5f2c79e164d402454de7da861973ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156104bd57600080fd5b505afa1580156104d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f59190610c4c565b905090565b600080610505610455565b90508073ffffffffffffffffffffffffffffffffffffffff1663ab37f486856040518263ffffffff1660e01b81526004016105409190610f0d565b60206040518083038186803b15801561055857600080fd5b505afa15801561056c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105909190610d00565b156105c45760006105a185856108dd565b90506105ac85610356565b81116105b857806105bb565b60005b925050506105ca565b60009150505b92915050565b60015481565b6040518060400160405280600d81526020017f565553442d52656465656d65720000000000000000000000000000000000000081525081565b7f000000000000000000000000677ddbd918637e5f2c79e164d402454de7da861981565b61063b61023f565b73ffffffffffffffffffffffffffffffffffffffff166106596107b7565b73ffffffffffffffffffffffffffffffffffffffff16146106af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a690610fc5565b60405180910390fd5b6127108111156106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90611025565b60405180910390fd5b806001541415610739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073090610fe5565b60405180910390fd5b7f78f68725a1b1a56a998dd7a8d279eb9bfbd45bc0fcee78f408200737275873e56001548260405161076c929190611060565b60405180910390a18060018190555050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b600033905090565b60006107cb84846108dd565b90507f000000000000000000000000677ddbd918637e5f2c79e164d402454de7da861973ffffffffffffffffffffffffffffffffffffffff166379cc67906108116107b7565b856040518363ffffffff1660e01b815260040161082f929190610f28565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50505050610869610455565b73ffffffffffffffffffffffffffffffffffffffff166369328dec8583856040518463ffffffff1660e01b81526004016108a593929190610f51565b600060405180830381600087803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b5050505050505050565b6000806108e8610455565b73ffffffffffffffffffffffffffffffffffffffff1663addd5099856040518263ffffffff1660e01b81526004016109209190610f0d565b60206040518083038186803b15801561093857600080fd5b505afa15801561094c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109709190610c4c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156109ba57600080fd5b505afa1580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f29190610d7b565b50505091505060008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4057600080fd5b505afa158015610a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a789190610df2565b600a610a849190611129565b8286610a909190611247565b610a9a91906110a5565b9050600060015414610acf5761271060015482610ab79190611247565b610ac191906110a5565b81610acc91906112a1565b90505b8573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1557600080fd5b505afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d9190610df2565b6012610b5991906112d5565b600a610b659190611129565b81610b7091906110a5565b935050505092915050565b600081359050610b8a816114f5565b92915050565b600081519050610b9f816114f5565b92915050565b600081519050610bb48161150c565b92915050565b600081519050610bc981611523565b92915050565b600081359050610bde8161153a565b92915050565b600081519050610bf38161153a565b92915050565b600081519050610c0881611568565b92915050565b600081519050610c1d81611551565b92915050565b600060208284031215610c3557600080fd5b6000610c4384828501610b7b565b91505092915050565b600060208284031215610c5e57600080fd5b6000610c6c84828501610b90565b91505092915050565b60008060408385031215610c8857600080fd5b6000610c9685828601610b7b565b9250506020610ca785828601610bcf565b9150509250929050565b600080600060608486031215610cc657600080fd5b6000610cd486828701610b7b565b9350506020610ce586828701610bcf565b9250506040610cf686828701610b7b565b9150509250925092565b600060208284031215610d1257600080fd5b6000610d2084828501610ba5565b91505092915050565b600060208284031215610d3b57600080fd5b6000610d4984828501610bcf565b91505092915050565b600060208284031215610d6457600080fd5b6000610d7284828501610be4565b91505092915050565b600080600080600060a08688031215610d9357600080fd5b6000610da188828901610bf9565b9550506020610db288828901610bba565b9450506040610dc388828901610be4565b9350506060610dd488828901610be4565b9250506080610de588828901610bf9565b9150509295509295909350565b600060208284031215610e0457600080fd5b6000610e1284828501610c0e565b91505092915050565b610e2481611309565b82525050565b610e338161137e565b82525050565b6000610e4482611089565b610e4e8185611094565b9350610e5e8185602086016113a2565b610e6781611433565b840191505092915050565b6000610e7f601a83611094565b9150610e8a82611451565b602082019050919050565b6000610ea2600f83611094565b9150610ead8261147a565b602082019050919050565b6000610ec5601f83611094565b9150610ed0826114a3565b602082019050919050565b6000610ee8601883611094565b9150610ef3826114cc565b602082019050919050565b610f0781611351565b82525050565b6000602082019050610f226000830184610e1b565b92915050565b6000604082019050610f3d6000830185610e1b565b610f4a6020830184610efe565b9392505050565b6000606082019050610f666000830186610e1b565b610f736020830185610efe565b610f806040830184610e1b565b949350505050565b6000602082019050610f9d6000830184610e2a565b92915050565b60006020820190508181036000830152610fbd8184610e39565b905092915050565b60006020820190508181036000830152610fde81610e72565b9050919050565b60006020820190508181036000830152610ffe81610e95565b9050919050565b6000602082019050818103600083015261101e81610eb8565b9050919050565b6000602082019050818103600083015261103e81610edb565b9050919050565b600060208201905061105a6000830184610efe565b92915050565b60006040820190506110756000830185610efe565b6110826020830184610efe565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006110b082611351565b91506110bb83611351565b9250826110cb576110ca611404565b5b828204905092915050565b6000808291508390505b6001851115611120578086048111156110fc576110fb6113d5565b5b600185161561110b5780820291505b808102905061111985611444565b94506110e0565b94509492505050565b600061113482611351565b915061113f8361135b565b925061116c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611174565b905092915050565b6000826111845760019050611240565b816111925760009050611240565b81600181146111a857600281146111b2576111e1565b6001915050611240565b60ff8411156111c4576111c36113d5565b5b8360020a9150848211156111db576111da6113d5565b5b50611240565b5060208310610133831016604e8410600b84101617156112165782820a905083811115611211576112106113d5565b5b611240565b61122384848460016110d6565b9250905081840481111561123a576112396113d5565b5b81810290505b9392505050565b600061125282611351565b915061125d83611351565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611296576112956113d5565b5b828202905092915050565b60006112ac82611351565b91506112b783611351565b9250828210156112ca576112c96113d5565b5b828203905092915050565b60006112e08261135b565b91506112eb8361135b565b9250828210156112fe576112fd6113d5565b5b828203905092915050565b600061131482611331565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600069ffffffffffffffffffff82169050919050565b600061138982611390565b9050919050565b600061139b82611331565b9050919050565b60005b838110156113c05780820151818401526020810190506113a5565b838111156113cf576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f63616c6c65722d69732d6e6f742d7468652d676f7665726e6f72000000000000600082015250565b7f73616d652d72656465656d2d6665650000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f72656465656d2d6665652d6c696d69742d726561636865640000000000000000600082015250565b6114fe81611309565b811461150957600080fd5b50565b6115158161131b565b811461152057600080fd5b50565b61152c81611327565b811461153757600080fd5b50565b61154381611351565b811461154e57600080fd5b50565b61155a8161135b565b811461156557600080fd5b50565b61157181611368565b811461157c57600080fd5b5056fea2646970667358221220e4c91ad08ccc472b5ecf88b5c8f2af60334b030a94ab22a7c48b3db02b53cfa464736f6c63430008030033

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

000000000000000000000000677ddbd918637e5f2c79e164d402454de7da8619

-----Decoded View---------------
Arg [0] : _vusd (address): 0x677ddbd918637E5F2c79e164D402454dE7dA8619

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000677ddbd918637e5f2c79e164d402454de7da8619


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.