关于上文Monad补充的一些修正

上文第2部分,合约更换为如下代码,可实现功能

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract MONRefund {
    event RefundSuccess(
        address indexed sender,
        uint256 amount,
        uint256 timestamp
    );

    /**
     * 接收 MON 原生代币的函数
     * 当用户向合约发送 MON 时,会自动触发此函数
     * 合约会立即将 MON 原路返还给发送者
     */
    receive() external payable {
        require(msg.value > 0, "Amount must be greater than 0");

        // 使用 call 进行原生代币转账
        (bool success, ) = msg.sender.call{value: msg.value}("");
        require(success, "Refund failed");

        emit RefundSuccess(msg.sender, msg.value, block.timestamp);
    }

    /**
     * 查看合约中的 MON 余额
     * 通常余额应为 0,因为 MON 会立即返还
     */
    function getMONBalance() public view returns (uint256) {
        return address(this).balance;
    }

    /**
     * 仅合约所有者可以提取意外发送的 MON
     */
    function withdrawMON(address payable recipient) external {
        require(msg.sender == owner, "Only owner can withdraw");
        uint256 balance = address(this).balance;
        require(balance > 0, "No MON to withdraw");
        (bool success, ) = recipient.call{value: balance}("");
        require(success, "Withdrawal failed");
    }

    // 合约所有者地址
    address public owner;

    // 构造函数,设置合约所有者
    constructor() {
        owner = msg.sender;
    }
}