写这篇文章的原因
喵。我想成为一只猫我是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 集合。
复制两个文件中的代码
在左侧选项卡上,从顶部按第 4 个
环境和各种东西
当您按下 Deploy 按钮时,Metamask 将触发,因此请检查并付款。
确认交易来自右上角,所以它是成功的。
接下来,选择 LWZ 部署货币。
部署的时候,我说我只会发1000个LWZ,但是有很多0!你错了!不是这种情况。 10^18 对于 ERC20 来说很常见。因此,如果总供应量为 1000,则将 1000x10^18 或 1000 000000000000000000 放入总供应量中。我喜欢关于名称和符号的一切,所以很好。
Metamask 将触发,所以再次按下确认按钮。
成功。
那么左边应该有两个部署的合约。 Lowzzy 是 NFT,LWZ 是货币。
如果您打开一个选项卡,您可以看到正在增长的功能。
部署后,我们来做 publicMint(使用货币的铸币)。
复制合约地址
添加货币。不要忘记将 costValue 设置为 10^18(在本例中为 30x10^18)。第一个参数是货币合约地址(你复制的那个)。
批准。这是一个允许花钱的过程。这次很麻烦,所以我输入了所有(1000x10^18)。
最后是publicMint。
我认为之前添加的货币是数组中的index = 0(pid = 0),所以输入0作为第一个参数。
不知何故,我想要 5,所以在第二个参数中输入 5。
是的,我做了5个薄荷糖。https://testnets.opensea.io/assets/rinkeby/0x55b9e5c2880c9d7bd31efc385ca6f664df009fa5/0
有 1000 个 LWZ,但应该是 850 个。
哇!它有850张!
所以薄荷是成功的
如果我错了请告诉我~
宣传
最后,一个广告。
我正在制作一个以妖怪为主题的 3D 面具 NFT,可以在名为 Meta Youkai Club 的元宇宙中使用。
目前,我们计划在广告阶段免费获得 2D NFT,如果您对 NFT 感兴趣,请加入我们!
只需转发推文即可获得!我不知道我什么时候会退出,所以如果你有兴趣,快点。
对了,你可以得到这个↓(我最喜欢的大和大蛇。真的很酷。)
)
如果你能关注我,我将不胜感激↓
元友门俱乐部官方推特:https://twitter.com/MetaYomenClub
我的推特:https://twitter.com/0xlowzzy
好吧!
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308623240.html