// SPDX-License-Identifier: MIT pragma solidity >=0.7.6 <0.9; import "./IVPToken.sol"; import "./token/interface/IICleanable.sol"; /** * @title Wrapped Native token * Accept native token deposits and mint ERC20 WNAT (wrapped native) tokens 1-1. */ interface IWNat is IVPToken, IICleanable { /** * Deposit Native and mint wNat ERC20. */ function deposit() external payable; /** * Deposit Native from msg.sender and mints WNAT ERC20 to recipient address. * @param recipient An address to receive minted WNAT. */ function depositTo(address recipient) external payable; /** * Withdraw Native and burn WNAT ERC20. * @param amount The amount to withdraw. */ function withdraw(uint256 amount) external; /** * Withdraw WNAT from an owner and send native tokens to msg.sender given an allowance. * @param owner An address spending the Native tokens. * @param amount The amount to spend. * * Requirements: * * - `owner` must have a balance of at least `amount`. * - the caller must have allowance for `owners`'s tokens of at least * `amount`. */ function withdrawFrom(address owner, uint256 amount) external; }