【发布时间】:2021-11-23 06:42:57
【问题描述】:
希望一切都好。
我一直在关注 Dapp 大学教程 (https://www.youtube.com/embed/x-6ruqmNS3o?start=2111) 来制作一个可铸造的 NFT 配对游戏。我现在正试图将合约转为对每一个新的代币铸造收取汽油费之外的一小笔费用,并将资金存储在智能合约中,以便稍后提取到个人钱包。
pragma solidity ^0.5.0;
import "./ERC721Full.sol";
contract MemoryToken is ERC721Full{
address public shopOwner;
constructor() ERC721Full('Memory Token', 'MEMORY') public {
}
function balanceOf() public view returns(uint){
return address(this).balance;
}
function withdraw() public payable {
require(msg.sender == shopOwner, 'only shopOwner can withdraw');
msg.sender.transfer(address(this).balance);
}
function mint(address _to, string memory _tokenURI ) public payable
returns(bool){
// require(msg.value >= 2 ether, "Not enough ETH : check price.");
uint _tokenId= totalSupply().add(1);
_mint(_to, _tokenId);
_setTokenURI(_tokenId, _tokenURI);
return true;
}
}
我已经添加了balanceOf()功能来查看积累的资金和一个withdraw()功能,仅供店主提取积累资金。此外,我已将mint() 功能转为可支付,并添加了一条要求语句以向玩家收取额外费用(0.05 以太币)。但是,当用户进行配对时(点击链接查看配对:https://www.youtube.com/embed/x-6ruqmNS3o?start=5144),收取的价格似乎只是汽油费。它也抛出以下错误。
ERC721Full中存储的mint函数如下:
function _mint(address to, uint256 tokenId) internal {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_tokenOwner[tokenId] = to;
_ownedTokensCount[to].increment();
emit Transfer(address(0), to, tokenId);
}
inpage.js:1 MetaMask - RPC 错误:错误:[ethjs-query] 同时格式化来自 RPC '{"value":{"code":-32603,"data":{"message":"VM处理交易时出现异常:revert 发送的 ETH 不足:检查价格。","code":-32000,"data":{"0x5cadd81f6d91f1ef5547c4c841c9788978eb5a9a590b25765081d48a824a1c99":
未捕获(承诺)
我很感激一些帮助,因为我不完全确定我修改智能合约的问题。
谢谢
【问题讨论】:
-
您能否展示向
mint方法发出请求的代码部分? -
我已经上传了上面的_mint函数,请点击以下链接下载完整的合约以便更好地掌握(imagetoaudio.s3.amazonaws.com/ERC721Full.sol)
-
我不是这个意思。我想看看执行
mint方法的代码部分(可能是用JavaScript 编写的)。您得到的还原错误是由于require比较msg.value >= 0.05 ether导致错误。因此,问题在于执行该方法 (mint) 的那部分代码没有发送足够的以太币。 -
app_file.js 可以在这里下载 (imagetoaudio.s3.amazonaws.com/app_file.js)。使用的很多代码都来自 Dapp uni youtube 教程,因此了解 Solidity 合约和 app.js 文件是如何连接在一起的将是一个很好的参考。 youtube.com/embed/x-6ruqmNS3o?start=1774(合约)youtube.com/embed/x-6ruqmNS3o?start=4792(app.js 铸币功能)
标签: function ethereum solidity smartcontracts