这是我用 Solidity 编写的智能合约。如果我不收取任何交易费用,它就 100% 有效。当我添加 2 条线路来收取费用时,我收到此错误。 这个智能合约的作用非常简单。它将 2 个代币(_tokenId1 和 _tokenId2)转移给客户,我们向他们收取交易费用。
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
contract SilverPack {
event OperatorChanged (address previousOperator, address newOperator);
event SilverPackTransferCompleted (address offerer, address receiver);
address operator;
constructor (address _operator) {
operator = _operator;
}
function saleBronce(address _offerer, address _hostContract, uint _tokenId1, uint _tokenId2, uint256 price) public payable {
ERC1155 hostContract = ERC1155(_hostContract);
require(msg.value >= price); // this line causes the error
payable(msg.sender).transfer(price); // this line also causes the error
hostContract.safeTransferFrom(_offerer, msg.sender, _tokenId1, 1,"");
hostContract.safeTransferFrom(_offerer, msg.sender, _tokenId2, 1,"");
emit SilverPackTransferCompleted(_offerer, msg.sender);
}
function changeOperator(address _newOperator) external {
require(msg.sender == operator,"only the operator can change the current operator");
address previousOperator = operator;
operator = _newOperator;
emit OperatorChanged(previousOperator, operator);
}
}
我遇到的错误是。
Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
Internal JSON-RPC error. { "code": -32000, "message": "execution reverted" }
编译过程中没有报错。仅当我尝试运行 saleBronce 函数时才会出现此错误。
我的问题是,如何更改这两条线,以便我可以进行转账,同时收取费用?
require(msg.value >= price);
payable(msg.sender).transfer(price);
如果您发送的交易价格参数低于价值。这两行不会有问题。问题可能取决于之后的行(safeTransferFroms),但为了准确分析,您可以在 require 语句中添加错误原因以查看问题所在。目前的信息还不足以决定恢复原因。
当我尝试将加密货币从一个钱包发送到另一个钱包时,当我调查它时,我收到一个 json rpc 错误,它归结为这个错误。但在“听”了你们两个之后,我更加困惑了,我是H 帮助