无法将 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 {
}
}
我正在尝试使用以太币将 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 {
}
}