作者：[@愚指导](https://x.com/yudao1024)

---

# payable 可能导致资金被锁

## 漏洞说明

漏洞在代码 [PositionManager.sol#L61](https://github.com/WTFAcademy/WTF-Dapp/blob/main/demo-contract/contracts/wtfswap/PositionManager.sol#L61) 处。

```solidity
    function mint(
        MintParams calldata params
    )
        external
        payable
        override
        checkDeadline(params.deadline)
        returns (
            uint256 positionId,
            uint128 liquidity,
            uint256 amount0,
            uint256 amount1
        )
    {
```

因为我们的合约并不支持原生代币的交易，所以也没有做原生代币的提取，我们的合约中的 `payable` 其实是没有必要的，相反它还可能会导致意外转入原生代币到合约之后无法提取。

## 修复方法

修复方法如下，去掉 `payable` 即可。

```diff
    function mint(
        MintParams calldata params
    )
        external
-       payable
        override
        checkDeadline(params.deadline)
        returns (
            uint256 positionId,
            uint128 liquidity,
            uint256 amount0,
            uint256 amount1
        )
    {
```

> 这个是漏洞提交的简单的示例模板，你可以提交 PR 来提交你发现的漏洞，帮助社区同学学习。
