Contract 0x8132EE584bCD6f8Eb1bea141DB7a7AC1E72917b9 5

 
Txn Hash Method
Block
From
To
Value
0x59745c9eeb161d9c7bd3290fb977d0b51380934fb137ec40e7ea91998065c885Redeem1094857072023-09-13 1:56:3115 days 13 hrs ago0x2db6f5e838ed2bad993e9ff2d3d7a5c1cc35704c IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000143716140.1000002
0xe0bd130be47214810f3d94bc0fdd4aa02a473f5ab57696c2049c52555177ed90Redeem1094856902023-09-13 1:55:5715 days 13 hrs ago0x2db6f5e838ed2bad993e9ff2d3d7a5c1cc35704c IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000118102840.0000012
0xa08ae597929f1f2bafb2703d11b6b78e12fc9dc2d04d308bc739ee44ecb35919Redeem1083015302023-08-16 16:03:5742 days 23 hrs ago0x794f8281c1a4eb3c631d89bce6b30d60b9f542b0 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000561648780.000241953
0xf969300f3f63c08baeaf13e8bafaf41db2eca61560e9520404c7372ffa692cc4Redeem1079802842023-08-09 5:35:4550 days 9 hrs ago0x9050c755691e9089e08adee29462bab6b338def0 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000190345380.000848223
0x9becaa2135e4448abbf59c3ec74d71e04eb2f0ac26dc2d5d2bf7791918068172Redeem1079641292023-08-08 20:37:1550 days 18 hrs ago0xc8e2806a97413b5496a1ba6050b517cc98d0efca IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000365494020.007220899
0x41e5176a6ab86244b91101b7cc547da3e985c592ffc70b5cab5d7bddae49a8aaRedeem974536892023-05-11 14:32:03140 days 43 mins ago0x82674c58211c0134348b016810db718b832d4233 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0004621841680.001048154
0x536c368262502fc4c423e07366621840c096140bb356ea2902406fbc30b7afddRedeem973096782023-05-10 20:39:22140 days 18 hrs ago0x22eac4a5381adaf34b748f10a4b57d25d8981963 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0005513465310.001048154
0x4e0732c37f39afe585e62a7b2656ef0beb9f44ce7546c2f304d961b56b96c6c2Redeem971924732023-05-10 7:18:54141 days 7 hrs ago 0x55ddb502ae181921168d465b89d905242267f229 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0002017424950.001
0xa8375d7454357e284731d847421ed2ae8a799ab5e2bc493f52abb08bfe84c013Redeem856601062023-04-02 17:54:46178 days 21 hrs ago0xc86eb18d134b2723095e31a743d3079643335384 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000727913860.001
0xffe60eaf7bf9e855e953d427d8dc8e841603aaff23f1dd4665066bde6dc3b249Redeem844403792023-03-28 23:46:27183 days 15 hrs ago0xb5fd34d19d34977fa0a0426c8058fc32fc091e28 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000906237660.001
0x4bc45efe5618b4a1b6b96402340e5740f95a9c5d3ddd90c33a7e9de264ec5087Redeem824044592023-03-20 13:05:20192 days 2 hrs ago0x2a7051d7cbbef7b6889f8e14774020b1653b94c1 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000842663620.001
0x04681d4ada84e4ad8affcd3c940e063132d014e4d3c4e0cad719331035a30498Redeem823267212023-03-20 6:03:23192 days 9 hrs ago0x60d25d3428bff3a3435191be88f2ee923dbe1751 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000441930030.001
0xd105f0082ee73e8dc36e6b42d58ecc8a62dada4f15454a4f7e9145167d9f70faRedeem806762392023-03-14 1:17:29198 days 13 hrs ago 0x42f9134e9d3bf7eee1f8a5ac2a4328b059e7468c IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000651713640.001
0xf40ba849711c12c6b0084131e0bf2b32c2293d7242e307ab7f7bd33a9206b0eeRedeem805903572023-03-13 16:00:20198 days 23 hrs ago0xcabb32bc7832fc5bd51da6e4def3933ec0b0a1a1 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0002239245550.001
0x9a113867a127fa9216af605166f69afac671d785fc25639c85bee6245bc3cb6fRedeem804818512023-03-13 7:19:12199 days 7 hrs ago0xbb1e599e15f2bf248732ef060cadffeb6363cc4c IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.000062040620.001
0x8b090b08e7b156c2da6b979edea52553399a8cac2b5e2812b90903c07cd5b8f6Redeem801709562023-03-11 23:44:48200 days 15 hrs ago 0x2814c361bf1289cef2958db2fd9de154f37a8963 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000942589310.001
0xdc6a7701a12313030ef2aac29ab1a6fdcf9e304462d52a4e2b49db18b4bbc49eRedeem789271052023-03-06 18:46:55205 days 20 hrs ago0x7474d1d90557a9fee58cc9c50f7bebe71aca2c86 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0001524613930.001
0x96cda5bc5d27a2f3e4f2596741eed21bfc75bf66b36a4d9ded73526943c1423cRedeem779402642023-03-01 10:48:21211 days 4 hrs ago0x0b98c377b62702748898c5c4c9ccc2e2f35f084d IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.000099059780.001
0x09b450ac8acdcc3c6e89ab80cdf8330e2c84f39fad93e409c8a283d0b4174cc8Redeem771512272023-02-26 2:53:56214 days 12 hrs ago0xbd1f7d88c76a86c60d41bddd4819fae404e7151e IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000699660240.001
0x18f7e151b599777cb4a9ed00b68960fb0d8bdf97def3914924c28022e308d4edRedeem761582552023-02-23 6:34:48217 days 8 hrs ago0x8846aab7d29580f3c7c69ce188cf74afbe76e92c IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0001027391070.001
0x364b919aaa97c0870eba174ac4d185ce877a1be6b2bce6771c12e0f0981f53edRedeem758413352023-02-22 0:55:05218 days 14 hrs ago0x401bf7e9e4d1f95305e4be928957ec6dcc1d72c7 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000944816870.001
0x76a790f50c5f58f14fa6a22fcf0141df7cda6d01a184a685bd5965b764661a08Redeem755091852023-02-20 7:16:50220 days 7 hrs ago0x24aa1ad305f8e6de8e0fa2f4c249ac278fba9d7f IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000799887980.001
0xd2c861ccc8673a58c437f94b233599cac7d65f890eef24ed6b2b641826ae86b9Redeem754717432023-02-20 2:34:14220 days 12 hrs ago0x0067eec7ad35e72613d760e917890d1b7e876e4e IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000937421540.001
0x794fcba175d8b1e67a0aa8930a9e6528c28b41d1ef9d6b9507d491ac702a01eeRedeem754163542023-02-19 19:06:32220 days 20 hrs ago0x628d896988f2c56921f09df2aed3549cac359774 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0000923604660.001
0x719846e20fd313bbd748ef19a27c3eeea2572a016194a3754b92b417285907e3Redeem750113612023-02-17 17:19:25222 days 21 hrs ago0x7f9c8843926de4b2ea6cbf9381f9f2fa81c58ed6 IN  0x8132ee584bcd6f8eb1bea141db7a7ac1e72917b90 ETH0.0004002673370.001
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
vKwentaRedeemer

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 12 : vKwentaRedeemer.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./interfaces/IvKwentaRedeemer.sol";
import "./utils/ERC20.sol";

/// @title A redemption contract for Kwenta
/// @dev All vKwenta used for redemption is locked within this contract
contract vKwentaRedeemer is IvKwentaRedeemer {
    /// token to be burned
    address public immutable vToken;
    /// token to be redeemed
    address public immutable token;

    event Redeemed(address redeemer, uint256 redeemedAmount);

    constructor(address _vToken, address _token) {
        vToken = _vToken;
        token = _token;
    }

    /// Allows caller to redeem an equivalent amount of token for vToken
    /// @dev caller must approve this contract to spend vToken
    /// @notice vToken is locked within this contract prior to transfer of token
    function redeem() external override {
        uint256 vTokenBalance = IERC20(vToken).balanceOf(msg.sender);

        /// ensure valid balance
        require(vTokenBalance > 0, "vKwentaRedeemer: No balance to redeem");
        require(
            vTokenBalance <= IERC20(token).balanceOf(address(this)),
            "vKwentaRedeemer: Insufficient contract balance"
        );

        /// lock vToken in this contract
        require(
            IERC20(vToken).transferFrom(
                msg.sender,
                address(this),
                vTokenBalance
            ),
            "vKwentaRedeemer: vToken transfer failed"
        );

        /// transfer token
        require(
            IERC20(token).transfer(msg.sender, vTokenBalance),
            "vKwentaRedeemer: token transfer failed"
        );

        emit Redeemed(msg.sender, vTokenBalance);
    }
}

File 2 of 12 : IvKwentaRedeemer.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IvKwentaRedeemer {
    
    function redeem() external;

}

File 3 of 12 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../interfaces/IERC20.sol";
import "../interfaces/IERC20Metadata.sol";
import "../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 4 of 12 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.9.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 5 of 12 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

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 6 of 12 : Context.sol
// SPDX-License-Identifier: MIT

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 12 : IERC20.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/interfaces/IERC20.sol";

abstract contract $IERC20 is IERC20 {
    constructor() {}
}

File 8 of 12 : IERC20Metadata.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/interfaces/IERC20Metadata.sol";

abstract contract $IERC20Metadata is IERC20Metadata {
    constructor() {}
}

File 9 of 12 : IvKwentaRedeemer.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/interfaces/IvKwentaRedeemer.sol";

abstract contract $IvKwentaRedeemer is IvKwentaRedeemer {
    constructor() {}
}

File 10 of 12 : Context.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

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

contract $Context is Context {
    constructor() {}

    function $_msgSender() external view returns (address) {
        return super._msgSender();
    }

    function $_msgData() external view returns (bytes memory) {
        return super._msgData();
    }
}

File 11 of 12 : ERC20.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/utils/ERC20.sol";

contract $ERC20 is ERC20 {
    constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_) {}

    function $_transfer(address sender,address recipient,uint256 amount) external {
        return super._transfer(sender,recipient,amount);
    }

    function $_mint(address account,uint256 amount) external {
        return super._mint(account,amount);
    }

    function $_burn(address account,uint256 amount) external {
        return super._burn(account,amount);
    }

    function $_approve(address owner,address spender,uint256 amount) external {
        return super._approve(owner,spender,amount);
    }

    function $_beforeTokenTransfer(address from,address to,uint256 amount) external {
        return super._beforeTokenTransfer(from,to,amount);
    }

    function $_afterTokenTransfer(address from,address to,uint256 amount) external {
        return super._afterTokenTransfer(from,to,amount);
    }

    function $_msgSender() external view returns (address) {
        return super._msgSender();
    }

    function $_msgData() external view returns (bytes memory) {
        return super._msgData();
    }
}

File 12 of 12 : vKwentaRedeemer.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../contracts/vKwentaRedeemer.sol";

contract $vKwentaRedeemer is vKwentaRedeemer {
    constructor(address _vToken, address _token) vKwentaRedeemer(_vToken, _token) {}
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_vToken","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemedAmount","type":"uint256"}],"name":"Redeemed","type":"event"},{"inputs":[],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c060405234801561001057600080fd5b506040516106cd3803806106cd83398101604081905261002f91610069565b6001600160601b0319606092831b8116608052911b1660a05261009c565b80516001600160a01b038116811461006457600080fd5b919050565b6000806040838503121561007c57600080fd5b6100858361004d565b91506100936020840161004d565b90509250929050565b60805160601c60a05160601c6105ed6100e0600039600081816098015281816101e60152610443015260008181604b0152818160d2015261031801526105ed6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80639bb1a99c14610046578063be040fb014610089578063fc0c546a14610093575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100916100ba565b005b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516370a0823160e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561011c57600080fd5b505afa158015610130573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610154919061059e565b9050600081116101d15760405162461bcd60e51b815260206004820152602560248201527f764b77656e746152656465656d65723a204e6f2062616c616e636520746f207260448201527f656465656d00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561023057600080fd5b505afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610268919061059e565b8111156102dd5760405162461bcd60e51b815260206004820152602e60248201527f764b77656e746152656465656d65723a20496e73756666696369656e7420636f60448201527f6e74726163742062616c616e636500000000000000000000000000000000000060648201526084016101c8565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd90606401602060405180830381600087803b15801561036457600080fd5b505af1158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c9190610575565b61040e5760405162461bcd60e51b815260206004820152602760248201527f764b77656e746152656465656d65723a2076546f6b656e207472616e7366657260448201527f206661696c65640000000000000000000000000000000000000000000000000060648201526084016101c8565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561048f57600080fd5b505af11580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c79190610575565b6105395760405162461bcd60e51b815260206004820152602660248201527f764b77656e746152656465656d65723a20746f6b656e207472616e736665722060448201527f6661696c6564000000000000000000000000000000000000000000000000000060648201526084016101c8565b60408051338152602081018390527f4896181ff8f4543cc00db9fe9b6fb7e6f032b7eb772c72ab1ec1b4d2e03b9369910160405180910390a150565b60006020828403121561058757600080fd5b8151801515811461059757600080fd5b9392505050565b6000602082840312156105b057600080fd5b505191905056fea2646970667358221220220d7b5000507628c14629a0b03daf83cb2b59f7a9ee3f87dff2f02cf6e4271f64736f6c634300080700330000000000000000000000006789d8a7a7871923fc6430432a602879ecb6520a000000000000000000000000920cf626a271321c151d027030d5d08af699456b

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

0000000000000000000000006789d8a7a7871923fc6430432a602879ecb6520a000000000000000000000000920cf626a271321c151d027030d5d08af699456b

-----Decoded View---------------
Arg [0] : _vToken (address): 0x6789D8a7a7871923Fc6430432A602879eCB6520a
Arg [1] : _token (address): 0x920Cf626a271321C151D027030D5d08aF699456b

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006789d8a7a7871923fc6430432a602879ecb6520a
Arg [1] : 000000000000000000000000920cf626a271321c151d027030d5d08af699456b


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.