首页 > 解决方案 > ERC1155 代币,如何创建 ERC1155 代币

问题描述

我正在尝试使用openzeppelins的 git 存储库创建 ERC1155 令牌。

我正在尝试编写contract.sol 文件,但我遇到了一些错误。

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol";

contract KapilERC1155Token is ERC1155 {
    uint256 public constant GOLD = 0;
    uint256 public constant SILVER = 1;
    uint256 public constant THORS_HAMMER = 2;
    uint256 public constant SWORD = 3;
    uint256 public constant SHIELD = 4;

    constructor() ERC1155("https://game.example/api/item/{id}.json") {
        _mint(msg.sender, GOLD, 10**18, "");
        _mint(msg.sender, SILVER, 10**27, "");
        _mint(msg.sender, THORS_HAMMER, 1, "");
        _mint(msg.sender, SWORD, 10**9, "");
        _mint(msg.sender, SHIELD, 10**9, "");
    }
         function getBalance(address account, uint256 id) external {
             _mint(account, id);
          
      }
    }

以上是我的代码。以下是我的错误

TypeError: Wrong argument count for function call: 2 arguments given but expected 4.
--> ERC1155token.sol:22:14:
|
22 | _mint(account, id);
| ^^^^^^^^^^^^^^^^^^

我可以理解,_mint()我在其中使用的getbalance()需要 4 个参数,而参数是。

        address account,
        uint256 id,
        uint256 amount,
        bytes memory data

_mint() 是-

function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) 

所以我尝试传递 4 个参数并在传递第三个参数时出现新错误。

    function getBalance(address account, uint256 id, uint256 amount) external {
             _mint(account, id, amount);
          
      }

我得到的错误-

TypeError: Wrong argument count for function call: 3 arguments given but expected 4.
--> ERC1155token.sol:22:14:
|
22 | _mint(account, id, amount);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^

这根本行不通。所以我做了什么。我使用了我在合同中继承的 openzepplin ( https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol ) 合同中定义的相同功能。

  function balanceOf(address account, uint256 id) external{
             _mint(account, id);
         }

这给了我另一个错误,见下文。

第一个-

TypeError: Overriding function is missing "override" specifier.
--> ERC1155token.sol:21:10:
|
21 | function balanceOf(address account, uint256 id) external{
| ^ (Relevant source part starts here and spans across multiple lines).
Note: Overridden function is here:
--> https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol:69:5:
|
69 | function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
| ^ (Relevant source part starts here and spans across multiple lines).

现在我在创建 ERC1155 令牌时完全卡住了。我正在寻求帮助。我正在使用混音编辑器编写合同的最后一件事。

标签: blockchainethereum

解决方案


为什么你 _mint 在 getBalance 函数中

  1. 这是 balanceOf 函数

    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
             require(account != address(0), "ERC1155: balance query for the zero address");
             return _balances[id][account];
         }
    

    这个函数已经在ERC1155里面所以你不需要写它

    1. 您需要编写 mint 函数,因为它是内部的

      function mint(address account, uint256 id, uint256 amount) public { _mint(account,id,amount,""); }


推荐阅读