見出し画像

NFTDrive-ERC1155の作り方。


ERC1155はNFTに対して数量を持たせた仕様のトークンになります。
いわゆるFTのデータアセットURL付きみたいなものです。
SymbolのMOSAICでは元々IDと数量がセットになっています。
それに近しい仕様ですね。

おおむねOpenSeaで使う方法と同じなので一部省略しますのでまずはそちらの記事を一度およみください。

1.まずデータアセットを用意する。

「NFTDriveをOpenSeaで使う方」を読んでデータアドレスをNFTDriveでOpenSeaモードを選択してデータアセットを作成してください。

追記:OpenSeaモードにPropertyの設定が追加されましたので下記の記事をご覧ください。



データアドレスを準備します




NCVPVG76A5KRWUEHDDIAQHKAT3JNX7M4VDRIOGY

2.MetaMaskとネットワーク手数料

MetaMaskを使えるようにしてください。
テストする場合はテスト用の手数料をあらかじ用意願います。

2.ERC1155用のコントラクトデプロイする。


RemixIDEを開きます。



creat new fileをクリックしてファイルを新規作成します。


ファイルを nftdrive1155.sol  と入力します。

ここに下記のコードをコピーして貼り付けます。

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

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.2/contracts/token/ERC1155/ERC1155.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.2/contracts/utils/Counters.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.2/contracts/utils/Strings.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.2/contracts/access/Ownable.sol";



contract NFTDrive1155v2 is ERC1155,Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenCounter;

    //アドレス配列初期化;
    string[] public dataAddress;

    string public baseMetadataURIPrefix;
    string baseMetadataURISuffix;

    // コントラクトデプロイ時に1度だけ呼ばれる
    constructor() ERC1155("") {
        baseMetadataURIPrefix = "https://nftdrive-explorer.info/download_opensea1155.php?address=" ;
        baseMetadataURISuffix = "&c=.json";
    }


    //アドレスプッシュ;
        function pushDataAddress(string memory _add) public onlyOwner {
            dataAddress.push(_add);
        }



    function uri(uint256 _id) public view override returns (string memory) {

        return string(abi.encodePacked(
            baseMetadataURIPrefix,
            dataAddress[_id],
            baseMetadataURISuffix
        ));
     

    }

    function mint(uint256 _tokenId, uint256 _amount) public onlyOwner { 
        _mint(msg.sender, _tokenId, _amount, "");
    }

    function mintBatch(uint256[] memory _tokenIds, uint256[] memory _amounts) public onlyOwner { 
        _mintBatch(msg.sender, _tokenIds, _amounts, "");
    }

    function setBaseMetadataURI(string memory _prefix, string memory _suffix) public  {      
        baseMetadataURIPrefix=_prefix;
        baseMetadataURISuffix = _suffix;
    }
}


貼り付けたらコンパイルします。


左メニューのSolidity compilerをクリックします。


compilerのバージョンが0.8.0以上になっている事を確認します。

Compileボタンを押します。

コンパイルできたらデプロイ(コンパイルしたスマートコントラクトをブロックチェーンに登録します。)します。

Deploy and run transactions をクリックします。
ENVIRONMENTをinjected provider Metamaskを選択します。(メタマスに接続)
初回時にMetaMask承認の確認が出るかもですがでたら承認押してください。

メタマスを選択したらDeployをクリックします。↓


不明な処理時間となっている場合はつまりやすいのでガス代を編集します。
※つまるといつまでも待たされます、最終的にはエラーになります。
後からガス代を追加できるのですが初めから多いほうが確実かつ早いです。

低か中ぐらいがいいでしょう。時間によってどんどん変化します。
高いときもあるのでタイミングの良いところでおこなってください。

確認を押します。

Deploy(スマートコントラクトをブロックチェーンに登録)できると左下ににコントラクトが表示されますので表示を展開します。


黄色?オレンジ?カラーのボタンがこのデプロイしたスマコンのプログラムを実行するボタンです。紺色ボタンはスマコンに登録してあるデータを呼び出します。(Call)

これでスマコンの登録は完了です!
左上のコピーをおしてスマコンのアドレスをメモしておきます。
追加でNFTを発行したりするのに必要になります。

2.NFTを発行する方法。

デプロイが終わったらNFTを発行します。

始めにあらかじめ準備したデータアドレスを登録します。

まず pushDataAddress を展開します。

ここにデータアドレスを貼り付けます。


貼り付けたら Transactをクリックして登録します。
間違えるとデプロイからやり直しになるのでアドレスを間違えないように注意してください。

MetaMaskが起動するので不明な時間と出ているときは手数料を調節して確認をおして登録します。

緑の✅もしくは右下に承認された通知がくればOKです。
データの登録が完了したのでミントしてNFT(FT)を発行します。

mint の下矢印を押してメニューを展開します。

_tokenId と _amount を設定します。
tokenIdは初回は0を入力してください。
以降発行するごとに1づつ増やしていってください。0から始まることに注意してください始めは1ではありません。

※例:次に発行するときは1を入力してください。
その次は2を入力してください。

amount は発行枚数を設定します。
※例:100枚なら100 

初回なのでtokenIdに0(かならず半角)
amountは1155としました(かならず半角)

TokenIdとamountを入力したらtransactを押します。

MetaMaskが起動するのでガス代を調節して確認を押します。

これでNFTの発行が完了しましたのでOpenSeaにいって確認します。

https://opensea.io/assets/matic/0x2169c01bb9fa112e6f49913000a2d1b7e6653430/0




以上で複数枚(ERC1155)発行の方法です!
ありがとうございました。

追加の方法はこちらの記事をご覧ください。


この記事が気に入ったらサポートをしてみませんか?