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

By [crypto小趴菜](https://paragraph.com/@crypto-69) · 2025-02-21

---

上文第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;
        }
    }

---

*Originally published on [crypto小趴菜](https://paragraph.com/@crypto-69/monad-2)*
