リスク警告:「仮想通貨」「ブロックチェーン」の名のもとでの違法な資金調達のリスクに注意してください。—銀行保険監督管理委員会など5部門
検索
ログイン
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
View Market
NFT (ERC721) で乱数を取得するにはどうすればよいですか?
Chainlink
特邀专栏作者
2020-11-25 05:02
この記事は約4905文字で、全文を読むには約8分かかります
スマート コントラクトの開発者は、NFT でまったく新しいランダムな世界を構築しています。

最初のレベルのタイトル

導入ERC721続く(NFT標準的な非代替トークンChainlink VRF)は、スマートコントラクト開発者にとって常に困難な問題でした。今、

すでにメインネットワーク上で起動されているSolidityベースのスマートコントラクトは、公平であることが証明され、暗号証明によってサポートされる改ざん防止のオンチェーン乱数をシームレスに生成できます。 Chainlink VRF を使用すると、安全なランダム性ソースを必要とする動的 NFT の作成が簡単かつ安全になります。 Chainlink はオフチェーン データ ソースを使用して NFT のあらゆる種類の動的プロパティを実装することもできますが、ここでは ERC721 ノンス、つまり NFT の使用に焦点を当てます。このチュートリアルでは、最初のレベルのタイトル

NFTとは何ですか?

NFTとは何ですか?ERC20NFT (ERC721 標準に準拠) は、独自で互いに異なるトークンを作成するためのフレームワークを定義します (そのため、非代替可能という用語が使われます)。"標準では次のように定義されています"均質化"つまり、トークンはすべて交換可能であり、同じ値を持つことが保証されます。"均質化

通貨の例は USD、EUR、JPY であり、代替可能なブロックチェーン トークンの例は AAVE、SNX、YFI です。これらの場合、1 USD が 1 USD、1 LINK が 1 LINK であるのと同様に、1 つの代替可能トークンは同じ種類の他の 1 つのトークンと同等です。ただし、NFT/ERC721 は、各トークンが一意であり、同じ値や交換可能なアイテムを表すものではないため、異なります。すべての NFT は固有であるため、特定の土地などの現実世界の資産に対するトークン化された所有権の主張、または希少なデジタル トレーディング カードなどのデジタル資産の実際の所有権を表すことができます。そして、その人気はますます高まっています。参照できますOpenSeaのNFTバイブル

続きを読みに来てください。

ランダムなキャラクターを構築する

uint256 strength;

uint256 dexterity;

uint256 constitution;

uint256 intelligence;

uint256 wisdom;

uint256 charisma;

私たちが検討しているのは、D&D キャラクターの 6 つの属性を持つキャラクターを作成することです。

uint256 experience;

string name;

役割には次のものも含まれます。

そこで、それらをレベルアップして楽しい名前を付けることができます。

ここでは自由に行動しており、ダンジョンズ & ドラゴンズのガイドラインに 100% 従ったわけではありませんが、ゲームをより正確に表現したい場合は、これを簡単に変更できます。

この契約では次のことを定める必要があります。

1. NFT およびその他すべての NFT 標準の所有権を譲渡できます。

2. キャラクターに名前とランダムな属性を付けます。

コード リポジトリをセットアップしましたので、それを使用して開始する方法を説明します。

クローンコード

git clone https://github.com/PatrickAlphaC/dungeons-and-dragons-nft

cd dungeons-and-dragons-nft

npm install

最初のレベルのタイトル

環境変数を設定するInfura

次に、それらを「bash_profile」ファイルに設定するか、ターミナルにエクスポートします。例:

export MNEMONIC='cat dog frog....'

export RINKEBY_RPC_URL='www.infura.io/YOUR_PROJECT_ID_HERE'

最初のレベルのタイトル

コードディレクトリには何が入っているのか

pragma solidity ^0.6.6;

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

import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";

import "@openzeppelin/contracts/access/Ownable.sol";

import "@openzeppelin/contracts/utils/Strings.sol";

contract DungeonsAndDragonsCharacter is ERC721, VRFConsumerBase, Ownable {

は、Solidity およびスマート コントラクト エンジニアの開発作業を容易にするパッケージのコレクションです。まだ使ったことがない方は、ぜひたくさん使ってみましょう! ERC721 は単なるトークン標準であるため、すべての ERC721 は同様である必要があるため、テンプレートを使用できることがわかります。インポートした「ERC721.sol」ファイルは、NFT のすべての基準を定義します。これをコントラクト内で継承し、「contract DungeonsAndDragonsCharacter is ERC721」と定義するだけです。 Chainlink VRF と対話して nonce を取得するには、「VRFConsumerBase.sol」が必要です。最後の 2 つのインポートは、アクセス許可と文字列の操作に役立つだけです。

最初のレベルのタイトル

ロール構造とコンストラクター

struct Character {

      uint256 strength;

      uint256 dexterity;

      uint256 constitution;

      uint256 intelligence;

      uint256 wisdom;

      uint256 charisma;

      uint256 experience;

      string name;

  }

  Character[] public characters;

Character 構造では、キャラクターが持つプロパティを定義し、作成される各キャラクターを追跡できるようにキャラクターのリストを作成します。配列を使用して文字のリストを保存しているため、各文字は配列内でそれを定義する一意の ID を持ちます。これは「tokenId」と呼ばれるもので、さらに参照します。

  constructor()

      public

      VRFConsumerBase(VRFCoordinator, LinkToken)

      ERC721("DungeonsAndDragonsCharacter", "D&D")

  {

      keyHash = 0x2ed0feb3e7fd2022120aa84fab1945545a9f2ffc9076fd6156fa96eaff4c1311;

      fee = 0.1 * 10**18; // 0.1 LINK

  }

受信した「VRFConsumerBase」およびERC721パラメータに対応します。 Chainlink VRF には VRF コーディネーター アドレスと LinkToken アドレスが必要です。これらのアドレスは Rinkeby ネットワークにハードコーディングされています。 Chainlink VRF 用に定義された他の変数 (keyHash や Fee など) もいくつかあります。でできますChainlink VRF ドキュメントChainlink VRF ドキュメント"DungeonsAndDragonsCharacter", "D&D"これらの変数の役割の詳細については、「 」を参照してください。 `ERC721("D&D"` は MetaMask と NFT マーケットプレイスに表示されるものになります。

最初のレベルのタイトル

ランダムなキャラクターを生成する

キャラクターの 6 つのステータスごとにランダムなステータスが必要ですが、キャラクターの名前は自分で決められるようにしたいと考えています。 Chainlink VRF を呼び出すだけで、この NFT/ERC721 で乱数を生成できます。リクエスト関数では、新しいロールに名前と「userProvidedSeed」を与えるだけで、多くのことを行う必要はありません。与えられたシードは、提供された数値が本当にランダムであることを VRF コーディネーターに検証するために使用されます。好きなシードを選択できます。詳細については、ランダム シードの選択について読むことができます。

乱数がフェッチされたときに、それを作成中のキャラクターにマッピングできるように、「requestId」を追跡したいと考えています。これにより、Chainlink ジョブが開始されます。Chainlink ノードがコントラクトにコールバックするまで待つだけです。 Chainlink のドキュメントでリクエスト モデルの詳細を読み、Chainlink リクエストの送信がどのように機能するかについて詳しく知ることができます。

Chainlink ノードがリクエストの処理を完了すると、「fulfillRandomness」関数を呼び出して応答します。この関数には、指定された属性の計算、リストへのキャラクターの追加、NFT の鋳造が含まれています。

ご覧のとおり、6 つの属性はすべて 1 つの乱数で作成されています。モジュロ演算を使用して、返された大きな乱数をサブセット化します。これをしたくない場合は、Chainlink VRF を直接 6 回呼び出すこともできますが、この方法でも効果は同じです。返されるノンスの最後の 2 桁は強さ、最初の 2 桁は敏捷性などを表します。これは、CryptoKitties が遺伝子を使用して猫に値を割り当てる方法と似ています。

*注: ビット演算を実行する方が、ここで説明するものよりも効率的ですが、理解しやすいため、ビット演算がどのように機能するかを学ぶ必要はありません。 *

Truffle と Chainlink を使用するので、Truffle に詳しくない場合は、[Truffle で Chainlink を使用する方法]() に関するこのブログ投稿を参照してください。ただし、このブログ投稿ではすべてのコマンドについて説明します。あまりにも!

最初のレベルのタイトル

何が起こっているかがわかったので、ランダムな NFT をデプロイしましょう。いくつか必要ですRinkeby LINKそしてRinkeby ETHそして

truffle migrate --reset --network rinkeby

truffle exec scripts/fund-contract.js --network rinkeby

truffle exec scripts/generate-character.js --network rinkeby

truffle exec scripts/get-character.js --network rinkeby

これらのスクリプトを実行します。

上記のコマンドは次のことを行います。

1. NFT契約の展開

2. Chainlink VRF 通話ができるように契約に資金を提供します

3. Chainlink VRF 呼び出しを使用してキャラクターを生成する

4. NFT値を返すEtherscan APIデプロイ後は、etherscan プラグインを使用してコントラクトを検証し、Etherscan 上でコントラクトを読み取ることもできます。を取得する必要があります

truffle run verify DungeonsAndDragonsCharacter --network rinkeby --license MIT

キーを入力し、環境変数 `ETHSCAN_API_KEY` を設定します。その後、以下を実行します。

その後、Etherscan 上の NFT へのリンクが表示されます。契約内容はEtherscanで読むことができます。

これにより、契約を操作できるページが表示されます。キャラクターセクションに移動すると、生成したばかりの tokenId 0 を入力でき、新しい D&D キャラクターの統計を確認できるようになります。Rinkeyby最初のレベルのタイトル

要約する

要約する

開発者向けドキュメント開発者向けドキュメントそして参加してくださいDiscordここここお問い合わせ。

お問い合わせ。

NFT
开发者
Odaily公式コミュニティへの参加を歓迎します
購読グループ
https://t.me/Odaily_News
チャットグループ
https://t.me/Odaily_CryptoPunk
公式アカウント
https://twitter.com/OdailyChina
チャットグループ
https://t.me/Odaily_CryptoPunk