账户
0xb1...5778
0xB1...5778

0xB1...5778

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.8+commit.dddeac2f
语言
Solidity
合同源代码
文件 1 的 36:CallbackParam.sol
合同源代码
文件 2 的 36:Error.sol
合同源代码
文件 3 的 36:FullMath.sol
合同源代码
文件 4 的 36:IMulticall.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity =0.8.8;

/// @title Multicall interface
/// @notice Enables calling multiple methods in a single call to the contract
interface IMulticall {
  /// @notice Call multiple functions in the current contract and return the data from all of them if they all succeed
  /// @dev The `msg.value` should not be trusted for any method callable from multicall.
  /// @param data The encoded function data for each of the calls to make to this contract
  /// @return results The results from each of the calls passed in via data
  function multicall(bytes[] calldata data) external payable returns (bytes[] memory results);

  error MulticallFailed(string revertString);
}
合同源代码
文件 5 的 36:INativeImmutableState.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity =0.8.8;

/// @title NativeImmutableState interface
interface INativeImmutableState {
  /// @return Returns the address of Wrapped Native token
  function wrappedNativeToken() external view returns (address);
}
合同源代码
文件 6 的 36:INativePayments.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity =0.8.8;

/// @title NativePayments interface
/// @notice Functions to ease payments of native tokens
interface INativePayments {
  /// @notice Refunds any Native Token balance held by this contract to the `msg.sender`
  function refundNatives() external payable;
}
合同源代码
文件 7 的 36:INativeWithdraws.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity =0.8.8;

/// @title NativeWithdraws interface

interface INativeWithdraws {
  /// @notice Unwraps the contract's Wrapped Native token balance and sends it to recipient as Native token.
  /// @dev The amountMinimum parameter prevents malicious contracts from stealing Wrapped Native from users.
  /// @param amountMinimum The minimum amount of Wrapped Native to unwrap
  /// @param recipient The address receiving Native token
  function unwrapWrappedNatives(uint256 amountMinimum, address recipient) external payable;
}
合同源代码
文件 8 的 36:IOwnableTwoSteps.sol
合同源代码
文件 9 的 36:ITimeswapV2Option.sol
合同源代码
文件 10 的 36:ITimeswapV2OptionFactory.sol
合同源代码
文件 11 的 36:ITimeswapV2OptionMintCallback.sol
合同源代码
文件 12 的 36:ITimeswapV2OptionSwapCallback.sol
合同源代码
文件 13 的 36:ITimeswapV2PeripheryBorrowGivenPosition.sol
合同源代码
文件 14 的 36:ITimeswapV2PeripheryNoDexBorrowGivenPosition.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity =0.8.8;

import {ITimeswapV2PeripheryBorrowGivenPosition} from "@timeswap-labs/v2-periphery/contracts/interfaces/ITimeswapV2PeripheryBorrowGivenPosition.sol";

import {TimeswapV2PeripheryNoDexBorrowGivenPositionParam} from "../structs/Param.sol";

import {INativeWithdraws} from "./INativeWithdraws.sol";
import {INativePayments} from "./INativePayments.sol";
import {IMulticall} from "./IMulticall.sol";

/// @title An interface for TS-V2 Periphery No Dex Borrow Given Position.
interface ITimeswapV2PeripheryNoDexBorrowGivenPosition is
  ITimeswapV2PeripheryBorrowGivenPosition,
  INativeWithdraws,
  INativePayments,
  IMulticall
{
  event BorrowGivenPosition(
    address indexed token0,
    address indexed token1,
    uint256 strike,
    uint256 indexed maturity,
    address from,
    address tokenTo,
    address longTo,
    bool isToken0,
    bool isLong0,
    uint256 tokenAmount,
    uint256 positionAmount
  );

  error MinTokenReached(uint256 tokenAmount, uint256 minTokenAmount);

  /// @dev The borrow given position function.
  /// @param param Borrow given position param.
  /// @return tokenAmount
  function borrowGivenPosition(
    TimeswapV2PeripheryNoDexBorrowGivenPositionParam calldata param
  ) external payable returns (uint256 tokenAmount);
}
合同源代码
文件 15 的 36:ITimeswapV2Pool.sol
合同源代码
文件 16 的 36:ITimeswapV2PoolFactory.sol
合同源代码
文件 17 的 36:ITimeswapV2PoolLeverageCallback.sol
合同源代码
文件 18 的 36:ITimeswapV2Token.sol
合同源代码
文件 19 的 36:ITimeswapV2TokenMintCallback.sol
合同源代码
文件 20 的 36:IWrappedNative.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity =0.8.8;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/// @title Interface for Native token
/// @dev This interface is used to interact with the native token
/// @dev The native token could be ETH for ethereum or BNB for Binance Smart Chain or MATIC for Polygon
interface IWrappedNative is IERC20 {
  /// @notice Deposit native token to get wrapped native token
  function deposit() external payable;

  /// @notice Withdraw wrapped native token to get native token
  function withdraw(uint256) external;
}
合同源代码
文件 21 的 36:InternalParam.sol
合同源代码
文件 22 的 36:Math.sol
合同源代码
文件 23 的 36:Multicall.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.8.8;

import "../interfaces/IMulticall.sol";

/// @title Multicall
/// @notice Enables calling multiple methods in a single call to the contract
abstract contract Multicall is IMulticall {
  /// @inheritdoc IMulticall
  function multicall(bytes[] calldata data) public payable override returns (bytes[] memory results) {
    results = new bytes[](data.length);
    for (uint256 i = 0; i < data.length; i++) {
      (bool success, bytes memory result) = address(this).delegatecall(data[i]);

      if (!success) {
        // Next 5 lines from https://ethereum.stackexchange.com/a/83577
        if (result.length < 68) revert MulticallFailed("Invalid Result");
        assembly {
          result := add(result, 0x04)
        }
        revert MulticallFailed(abi.decode(result, (string)));
      }

      results[i] = result;
    }
  }
}
合同源代码
文件 24 的 36:Native.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.8;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

import {IWrappedNative} from "../interfaces/external/IWrappedNative.sol";
import {INativeImmutableState} from "../interfaces/INativeImmutableState.sol";
import {INativeWithdraws} from "../interfaces/INativeWithdraws.sol";
import {INativePayments} from "../interfaces/INativePayments.sol";
import {NativeTransfer} from "../libraries/NativeTransfer.sol";

abstract contract NativeImmutableState is INativeImmutableState {
  /// @inheritdoc INativeImmutableState
  address public immutable override wrappedNativeToken;

  constructor(address chosenWrappedNativeToken) {
    wrappedNativeToken = chosenWrappedNativeToken;
  }
}

abstract contract NativeWithdraws is INativeWithdraws, NativeImmutableState {
  error CallerNotWrappedNative(address from);

  error InsufficientWrappedNative(uint256 value);

  receive() external payable {
    if (msg.sender != wrappedNativeToken) revert CallerNotWrappedNative(msg.sender);
  }

  /// @inheritdoc INativeWithdraws
  function unwrapWrappedNatives(uint256 amountMinimum, address recipient) external payable override {
    uint256 balanceWrappedNative = IWrappedNative(wrappedNativeToken).balanceOf(address(this));

    if (balanceWrappedNative < amountMinimum) revert InsufficientWrappedNative(balanceWrappedNative);

    if (balanceWrappedNative != 0) {
      IWrappedNative(wrappedNativeToken).withdraw(balanceWrappedNative);

      NativeTransfer.safeTransferNatives(recipient, balanceWrappedNative);
    }
  }
}

abstract contract NativePayments is INativePayments, NativeImmutableState {
  using SafeERC20 for IERC20;

  /// @inheritdoc INativePayments
  function refundNatives() external payable override {
    if (address(this).balance > 0) NativeTransfer.safeTransferNatives(msg.sender, address(this).balance);
  }

  /// @param token The token to pay
  /// @param payer The entity that must pay
  /// @param recipient The entity that will receive payment
  /// @param value The amount to pay
  function pay(address token, address payer, address recipient, uint256 value) internal {
    if (token == wrappedNativeToken && address(this).balance >= value) {
      // pay with WrappedNative
      IWrappedNative(wrappedNativeToken).deposit{value: value}();

      IERC20(token).safeTransfer(recipient, value);
    } else {
      // pull payment
      IERC20(token).safeTransferFrom(payer, recipient, value);
    }
  }
}
合同源代码
文件 25 的 36:NativeTransfer.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity =0.8.8;

library NativeTransfer {
  error NativeTransferFailed(address to, uint256 value);

  /// @notice Transfers Natives to the recipient address
  /// @dev Reverts if the transfer fails
  /// @param to The destination of the transfer
  /// @param value The value to be transferred
  function safeTransferNatives(address to, uint256 value) internal {
    (bool success, ) = to.call{value: value}(new bytes(0));
    if (!success) {
      revert NativeTransferFailed(to, value);
    }
  }
}
合同源代码
文件 26 的 36:OptionFactory.sol
合同源代码
文件 27 的 36:OptionPair.sol
合同源代码
文件 28 的 36:Param.sol
合同源代码
文件 29 的 36:PoolFactory.sol
合同源代码
文件 30 的 36:Position.sol
合同源代码
文件 31 的 36:StrikeAndMaturity.sol
合同源代码
文件 32 的 36:StrikeConversion.sol
合同源代码
文件 33 的 36:TimeswapV2PeripheryBorrowGivenPosition.sol
合同源代码
文件 34 的 36:TimeswapV2PeripheryNoDexBorrowGivenPosition.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity =0.8.8;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

import {Error} from "@timeswap-labs/v2-library/contracts/Error.sol";

import {StrikeConversion} from "@timeswap-labs/v2-library/contracts/StrikeConversion.sol";

import {TimeswapV2OptionPosition} from "@timeswap-labs/v2-option/contracts/enums/Position.sol";

import {ITimeswapV2Pool} from "@timeswap-labs/v2-pool/contracts/interfaces/ITimeswapV2Pool.sol";

import {ITimeswapV2Token} from "@timeswap-labs/v2-token/contracts/interfaces/ITimeswapV2Token.sol";

import {TimeswapV2PeripheryBorrowGivenPosition} from "@timeswap-labs/v2-periphery/contracts/TimeswapV2PeripheryBorrowGivenPosition.sol";

import {TimeswapV2PeripheryBorrowGivenPositionParam} from "@timeswap-labs/v2-periphery/contracts/structs/Param.sol";
import {TimeswapV2PeripheryBorrowGivenPositionChoiceInternalParam, TimeswapV2PeripheryBorrowGivenPositionInternalParam} from "@timeswap-labs/v2-periphery/contracts/structs/InternalParam.sol";

import {ITimeswapV2PeripheryNoDexBorrowGivenPosition} from "./interfaces/ITimeswapV2PeripheryNoDexBorrowGivenPosition.sol";

import {TimeswapV2PeripheryNoDexBorrowGivenPositionParam} from "./structs/Param.sol";

import {NativeImmutableState, NativeWithdraws, NativePayments} from "./base/Native.sol";

import {Multicall} from "./base/Multicall.sol";
import {Math} from "@timeswap-labs/v2-library/contracts/Math.sol";

/// @title Capable of borrowing a given amount of collateral from a given position
/// @author Timeswap Labs
contract TimeswapV2PeripheryNoDexBorrowGivenPosition is
  ITimeswapV2PeripheryNoDexBorrowGivenPosition,
  TimeswapV2PeripheryBorrowGivenPosition,
  NativeImmutableState,
  NativeWithdraws,
  NativePayments,
  Multicall
{
  using Math for uint256;
  using SafeERC20 for IERC20;

  constructor(
    address chosenOptionFactory,
    address chosenPoolFactory,
    address chosenTokens,
    address chosenNative
  )
    TimeswapV2PeripheryBorrowGivenPosition(chosenOptionFactory, chosenPoolFactory, chosenTokens)
    NativeImmutableState(chosenNative)
  {}

  /// @inheritdoc ITimeswapV2PeripheryNoDexBorrowGivenPosition
  function borrowGivenPosition(
    TimeswapV2PeripheryNoDexBorrowGivenPositionParam calldata param
  ) external payable returns (uint256 tokenAmount) {
    if (param.deadline < block.timestamp) Error.deadlineReached(param.deadline);

    bytes memory data = abi.encode(msg.sender, param.isToken0);

    (, , data) = borrowGivenPosition(
      TimeswapV2PeripheryBorrowGivenPositionParam({
        token0: param.token0,
        token1: param.token1,
        strike: param.strike,
        maturity: param.maturity,
        tokenTo: param.isToken0 == param.isLong0 ? address(this) : param.tokenTo,
        longTo: param.longTo,
        isLong0: param.isLong0,
        positionAmount: param.positionAmount,
        data: data
      })
    );

    tokenAmount = abi.decode(data, (uint256));

    if (tokenAmount < param.minTokenAmount) revert MinTokenReached(tokenAmount, param.minTokenAmount);

    emit BorrowGivenPosition(
      param.token0,
      param.token1,
      param.strike,
      param.maturity,
      msg.sender,
      param.tokenTo,
      param.longTo,
      param.isToken0,
      param.isLong0,
      tokenAmount,
      param.positionAmount
    );
  }

  function timeswapV2PeripheryBorrowGivenPositionChoiceInternal(
    TimeswapV2PeripheryBorrowGivenPositionChoiceInternalParam memory param
  ) internal pure override returns (uint256 tokenAmountToNotSwap, uint256 tokenAmountSwapped, bytes memory data) {
    (, bool isToken0) = abi.decode(param.data, (address, bool));
    tokenAmountToNotSwap = param.isLong0 == isToken0 ? param.tokenAmount : 0;
    tokenAmountSwapped = param.isLong0 == isToken0 ? 0 : param.tokenAmount;
    data = param.data;
  }

  function timeswapV2PeripheryBorrowGivenPositionInternal(
    TimeswapV2PeripheryBorrowGivenPositionInternalParam memory param
  ) internal override returns (bytes memory data) {
    (address msgSender, bool isToken0) = abi.decode(param.data, (address, bool));

    pay(
      param.isLong0 ? param.token0 : param.token1,
      msgSender,
      param.optionPair,
      param.isLong0 ? param.token0Amount : param.token1Amount
    );

    data = abi.encode(isToken0 ? param.token0Amount : param.token1Amount);
  }
}
合同源代码
文件 35 的 36:Transaction.sol
合同源代码
文件 36 的 36:Verify.sol
设置
{
  "compilationTarget": {
    "contracts/TimeswapV2PeripheryNoDexBorrowGivenPosition.sol": "TimeswapV2PeripheryNoDexBorrowGivenPosition"
  },
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [
    ":@ensdomains/=../../node_modules/@ensdomains/",
    ":@openzeppelin/=../../node_modules/@openzeppelin/",
    ":@timeswap-labs/=../",
    ":@uniswap/=../../node_modules/@uniswap/",
    ":base64-sol/=../../node_modules/base64-sol/",
    ":eth-gas-reporter/=../../node_modules/eth-gas-reporter/",
    ":forge-std/=/Users/dexterhv/Work/TS/Timeswap-V2-Monorepo/lib/forge-std/src/",
    ":hardhat-deploy/=../../node_modules/hardhat-deploy/",
    ":hardhat/=../../node_modules/hardhat/"
  ]
}
ABI
[{"inputs":[{"internalType":"address","name":"chosenOptionFactory","type":"address"},{"internalType":"address","name":"chosenPoolFactory","type":"address"},{"internalType":"address","name":"chosenTokens","type":"address"},{"internalType":"address","name":"chosenNative","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"CallerNotWrappedNative","type":"error"},{"inputs":[],"name":"CanOnlyBeCalledByOptionContract","type":"error"},{"inputs":[],"name":"CanOnlyBeCalledByPoolContract","type":"error"},{"inputs":[],"name":"CanOnlyBeCalledByTokensContract","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"DeadlineReached","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InsufficientWrappedNative","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"MinTokenReached","type":"error"},{"inputs":[{"internalType":"uint256","name":"multiplicand","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"MulDivOverflow","type":"error"},{"inputs":[{"internalType":"string","name":"revertString","type":"string"}],"name":"MulticallFailed","type":"error"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"NativeTransferFailed","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"strike","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maturity","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"tokenTo","type":"address"},{"indexed":false,"internalType":"address","name":"longTo","type":"address"},{"indexed":false,"internalType":"bool","name":"isToken0","type":"bool"},{"indexed":false,"internalType":"bool","name":"isLong0","type":"bool"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"positionAmount","type":"uint256"}],"name":"BorrowGivenPosition","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"strike","type":"uint256"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"address","name":"longTo","type":"address"},{"internalType":"bool","name":"isToken0","type":"bool"},{"internalType":"bool","name":"isLong0","type":"bool"},{"internalType":"uint256","name":"positionAmount","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct TimeswapV2PeripheryNoDexBorrowGivenPositionParam","name":"param","type":"tuple"}],"name":"borrowGivenPosition","outputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"optionFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundNatives","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"strike","type":"uint256"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"uint256","name":"token0AndLong0Amount","type":"uint256"},{"internalType":"uint256","name":"token1AndLong1Amount","type":"uint256"},{"internalType":"uint256","name":"shortAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct TimeswapV2OptionMintCallbackParam","name":"param","type":"tuple"}],"name":"timeswapV2OptionMintCallback","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"strike","type":"uint256"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"bool","name":"isLong0ToLong1","type":"bool"},{"internalType":"uint256","name":"token0AndLong0Amount","type":"uint256"},{"internalType":"uint256","name":"token1AndLong1Amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct TimeswapV2OptionSwapCallbackParam","name":"param","type":"tuple"}],"name":"timeswapV2OptionSwapCallback","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"strike","type":"uint256"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"uint256","name":"long0Amount","type":"uint256"},{"internalType":"uint256","name":"long1Amount","type":"uint256"},{"internalType":"uint256","name":"shortAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct TimeswapV2PoolLeverageCallbackParam","name":"param","type":"tuple"}],"name":"timeswapV2PoolLeverageCallback","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"strike","type":"uint256"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"uint256","name":"long0Balance","type":"uint256"},{"internalType":"uint256","name":"long1Balance","type":"uint256"},{"internalType":"uint256","name":"longAmount","type":"uint256"},{"internalType":"uint256","name":"shortAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct TimeswapV2PoolLeverageChoiceCallbackParam","name":"param","type":"tuple"}],"name":"timeswapV2PoolLeverageChoiceCallback","outputs":[{"internalType":"uint256","name":"long0Amount","type":"uint256"},{"internalType":"uint256","name":"long1Amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"strike","type":"uint256"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"uint256","name":"long0Amount","type":"uint256"},{"internalType":"uint256","name":"long1Amount","type":"uint256"},{"internalType":"uint256","name":"shortAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct TimeswapV2TokenMintCallbackParam","name":"param","type":"tuple"}],"name":"timeswapV2TokenMintCallback","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"unwrapWrappedNatives","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wrappedNativeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]