无法将 Matic 转移到智能合约

Can't transfer Matic to smart contract

我正在尝试使用以太币将 Matic 转移到我在孟买测试网上的智能合约。

我使用的是安全帽附带的最基本的合约 - Greeter。溶胶

我不断收到的错误是(在 polygonscan-mumbai 中):

客户端使用以太币转账:

const provider = new ethers.providers.Web3Provider(ethereum);
const signer = provider.getSigner();
const erc20Contract = new ethers.Contract("0x0000000000000000000000000000000000001010", erc20abi, signer);
const parsedAmount = ethers.utils.parseUnits(amount.toString(), 'ether');
const transferTokens = await erc20Contract.transfer(contractAddress , parsedAmount);

Greeter.sol:

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

import "hardhat/console.sol";

contract Greeter {
    string private greeting;

    constructor(string memory _greeting) {
        console.log("Deploying a Greeter with greeting:", _greeting);
        greeting = _greeting;
    }

    function greet() public view returns (string memory) {
        return greeting;
    }

    function setGreeting(string memory _greeting) public {
        console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
        greeting = _greeting;
    }
}

另外,当我手动尝试使用 metamsk 将 Matic 发送到智能合约时,它给了我同样的错误(仅针对合约,而不是其他钱包)。 但如果我尝试其他令牌,它工作正常 - 我错过了什么吗?

您的合约需要实现 receive()fallback() 功能才能接受网络的本地货币。

文档:https://docs.soliditylang.org/en/v0.8.13/contracts.html#special-functions

示例:

contract Greeter {
    // ...

    receive() external payable {
    }
}