写这篇文章的原因

喵。我想成为一只猫我是lowzzy,是涩谷的一名大学生和工程师。最近,我一直在和朋友一起做 NFT。

如果你在做 NFT,你会想一次
“我希望能够用他们发行的货币购买 NFT!”

是的。我也想。如果你查一下,你会发现一些类似的东西,但它大多是英文的,而且代码很微妙。 . .

我想,所以我写了。

使用语言的说明

编写所谓的智能合约。坚固性。
智能合约通常被解释为“合同已签署,流程自动运行”,但我不太喜欢它。很难理解。正如有人所说,如果您将智能合约视为“小程序”,那么它们可能还可以。

生成 NFT 称为“铸币”。

NFT 有 ERC721 和 ERC1155 等各种标准,但这次我们将采用 ERC1155。
此外,币种采用ERC20标准。

这次我们将使用 ETH 测试网 Rinkeby。
由于rinkeby是一个测试环境,这里的原生货币ETH是没有货币价值的。
https://rinkebyfaucet.com/
你可以在一个叫 faucet 的地方获得 ETH,所以请像“rinkeby faucet”一样查找它。

NFT将以Lowzzy名义发行,币种以LWZ名义发行。 LWZ暂时发1000个。

顺便说一句,2021年底与阿迪达斯合作的BoredApeYachtClub,俗称BAYC,似乎已经发行了10亿份。

代码

代码在这里

NFT

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract Lowzzy is ERC1155, Ownable{
    string baseMetadataURIPrefix;
    string baseMetadataURISuffix;

    uint256 constant SampleTokenId = 0;

    constructor() ERC1155("") {

        // メタデータが取得できるURIをここで定義している
        // URI -> baseMetadataURIPrefix + トークンID + baseMetadataURISuffix

        baseMetadataURIPrefix = "https://staging--goldfish-japan.netlify.app/.netlify/functions/tokenURI/";
        baseMetadataURISuffix = "";
    }

  // 使用する通貨と、1個当たりの価格を定義してる
    struct TokenInfo {
        IERC20 paytoken;
        uint256 costvalue;
    }

    // publicにしてることで変数callできる
    TokenInfo[] public AllowedCrypto;
    using Strings for uint256;

  // tokenInfo追加する関数
    function addCurrency(
        IERC20 _paytoken,
        uint256 _costvalue
    ) public onlyOwner {
        AllowedCrypto.push(
            TokenInfo({
                paytoken: _paytoken,
                costvalue: _costvalue
            })
        );
    }

    // uri確かめる関数。
    function uri(uint256 _id) public view override returns (string memory) {
        return string(abi.encodePacked(
            baseMetadataURIPrefix,
            Strings.toString(_id),
            baseMetadataURISuffix
        ));
    }
      // お金払わずにNFTを生成することができる関数です。
     // onlyOwnerとあるように、ownerしか使用できないようにしてます。
   //  いらなかったら消してください
    function ownerMint(uint256 _amount) public onlyOwner() {
        _mint(msg.sender, SampleTokenId, _amount, "");
    }

  // この記事の1番理解して欲しいところ
  // 第1引数 -> _mintAmount : 生成する数
  // 第2引数 -> _pid : 使用する通貨
    function publicMint(uint256 _mintAmount, uint256 _pid) public payable {
        TokenInfo storage tokens = AllowedCrypto[_pid];
        IERC20 paytoken;
        paytoken = tokens.paytoken;
        uint256 cost;
        cost = tokens.costvalue;
        require(!paused); // pausedされてたら(paused == trueだったら)エラー吐かせる
        require(_mintAmount > 0);// 0以上かどうか確かめてる(じゃないならエラー)

        // paytoken(この記事だとLWZ)のコントラクトに生えている関数「allowance」を呼び出し
        // おろす許可があるLWZはどれくらいあるかを取得している
        uint256 allowCost = paytoken.allowance(msg.sender,address(this));

        // 許可されているLWZがNFTをmintするのに必要分足りているかを確認している(足りなかったらエラー吐く)
        require(allowCost >= cost * _mintAmount, "Not enough balance to complete transaction.");

        // ここでLWZをこのスマコンのアドレスにtransferしてもらっている(支払い処理)
        paytoken.transferFrom(msg.sender, address(this), cost * _mintAmount);
        // msg.senderのアドレスに_mintAmount個のSampleTokenId番目のトークンをmint(生成)している
        _mint(msg.sender, SampleTokenId, _mintAmount, "");
    }
  // この関数を使うとトークンのURIが変更できます。
    function setBaseMetadataURI(string memory _prefix, string memory _suffix) public onlyOwner(){
        baseMetadataURIPrefix = _prefix;
        baseMetadataURISuffix = _suffix;
    }
}

货币

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract LWZ is ERC20 {

    constructor(
        string memory name,
        string memory symbol,
        uint256 totalSupply_
    ) ERC20(name, symbol) {
        _mint(msg.sender, totalSupply_);
    }

}

这就是代码。

接下来,我将写关于部署到 Rinkeby 链的内容。

部署

我使用一个名为 Remix 的 IDE。

写代码~部署~函数调用
等等。如果你能做到这一点,你就可以制作一个 NFT 集合。

复制两个文件中的代码
【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

在左侧选项卡上,从顶部按第 4 个
【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

环境和各种东西
【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

当您按下 Deploy 按钮时,Metamask 将触发,因此请检查并付款。
【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

确认交易来自右上角,所以它是成功的。
【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

接下来,选择 LWZ 部署货币。
【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

部署的时候,我说我只会发1000个LWZ,但是有很多0!你错了!不是这种情况。 10^18 对于 ERC20 来说很常见。因此,如果总供应量为 1000,则将 1000x10^18 或 1000 000000000000000000 放入总供应量中。我喜欢关于名称和符号的一切,所以很好。

Metamask 将触发,所以再次按下确认按钮。
【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

成功。
【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

那么左边应该有两个部署的合约。 Lowzzy 是 NFT,LWZ 是货币。
如果您打开一个选项卡,您可以看到正在增长的功能。

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

部署后,我们来做 publicMint(使用货币的铸币)。

复制合约地址

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

添加货币。不要忘记将 costValue 设置为 10^18(在本例中为 30x10^18)。第一个参数是货币合约地址(你复制的那个)。

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

批准。这是一个允许花钱的过程。这次很麻烦,所以我输入了所有(1000x10^18)。

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

最后是publicMint。
我认为之前添加的货币是数组中的index = 0(pid = 0),所以输入0作为第一个参数。
不知何故,我想要 5,所以在第二个参数中输入 5。

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

是的,我做了5个薄荷糖。https://testnets.opensea.io/assets/rinkeby/0x55b9e5c2880c9d7bd31efc385ca6f664df009fa5/0

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

有 1000 个 LWZ,但应该是 850 个。

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?
哇!它有850张!

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?

所以薄荷是成功的

如果我错了请告诉我~

宣传

最后,一个广告。

我正在制作一个以妖怪为主题的 3D 面具 NFT,可以在名为 Meta Youkai Club 的元宇宙中使用。
目前,我们计划在广告阶段免费获得 2D NFT,如果您对 NFT 感兴趣,请加入我们!
只需转发推文即可获得!我不知道我什么时候会退出,所以如果你有兴趣,快点。

对了,你可以得到这个↓(我最喜欢的大和大蛇。真的很酷。)

【僕が作ったスマコン最強ちゅーとりある】自作通貨でNFTを購入できるようにしたいにゃあ?
)

如果你能关注我,我将不胜感激↓
元友门俱乐部官方推特:https://twitter.com/MetaYomenClub
我的推特:https://twitter.com/0xlowzzy

好吧!


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308623240.html

相关文章:

  • 2022-12-23
  • 2021-04-07
  • 2021-06-09
  • 2021-10-16
  • 2021-07-09
  • 2021-12-04
  • 2021-10-17
猜你喜欢
  • 2021-11-23
  • 2021-04-06
  • 2021-05-22
  • 2021-12-25
  • 2022-01-08
  • 2022-01-14
  • 2022-12-23
相关资源
相似解决方案