風險提示:防範以"虛擬貨幣""區塊鏈"名義進行非法集資的風險。——銀保監會等五部門
資訊
發現
搜索
登錄
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
查看行情
如何在NFT(ERC721)中獲取隨機數?
Chainlink
特邀专栏作者
2020-11-25 05:02
本文約4905字,閱讀全文需要約8分鐘
智能合約開發者正在NFT中建設一個全新的隨機世界。

介紹

一級標題ERC721介紹(NFT在遵循Chainlink VRF一級標題

介紹一級標題已經在主網上線,基於Solidity的智能合約可以無縫生成防篡改的鏈上隨機數,這些隨機數可以證明是公平的,並且有密碼學證明支持。有了Chainlink VRF,創建需要安全隨機性來源的動態NFT變得非常簡單、安全。雖然Chainlink也可以使用鏈外數據源為NFT實現任何類型的動態屬性,但我們將專注於使用ERC721的隨機數,或NFT。

什麼是NFT?

一級標題ERC20什麼是NFT?"角色! D&D(Dungeons and Dragons)是一款流行的角色扮演遊戲(RPG),人們在遊戲中創建角色並進行冒險。創建角色的重要環節之一是給他們賦予屬性或統計數據,以顯示他們的力量、敏捷、智力等。為了在區塊鏈上為他們的統計數據創建真正的隨機數,我們將展示如何使用Chainlink VRF給你的角色隨機屬性。使用Chainlink VRF,區塊鏈中的隨機數生成很簡單!"什麼是NFT?"同質化"什麼是NFT?

同質化NFT(遵循ERC721標準)定義了一個框架,用於製作獨一無二且彼此不同的代幣(因此被稱為非同質化),而流行的標準則定義了

同質化

的代幣,這意味著代幣都可以互換,並保證具有相同的價值。

uint256 strength;

uint256 dexterity;

uint256 constitution;

uint256 intelligence;

uint256 wisdom;

uint256 charisma;

同質化

uint256 experience;

string name;

貨幣的例子是美元、歐元和日元,而可互換區塊鏈代幣的例子是AAVE、SNX和YFI。在這些情況下,1個同質化的代幣等於1個同類的另一個代幣,就像1美元等於1美元,1LINK等於1LINK一樣。然而,NFT/ ERC721是不同的,因為每個代幣都是獨一無二的,並不代表相同的價值或可互換的項目。

由於所有的NFT都是獨一無二的,它們可以代表現實世界資產的代幣化所有權要求,如一塊特定的土地,或數字資產的實際所有權,如稀有的數字交易卡。而且它們越來越受歡迎。你可以參考

OpenSea的NFT聖經

來閱讀更多內容。

構建你的隨機角色

我們要看的是創造一個具有D&D角色六大屬性的角色,即:

這份合約應該確立以下內容:

一級標題

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

cd dungeons-and-dragons-nft

npm install

我們不去製作合約的動態,但請繼續關注未來的一篇文章,它將在我們在這裡學到的知識的基礎上構建!

一級標題Infura

一級標題

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 {

你需要一個`MNEMONIC`和一個rinkeby網絡的`RINKEBY_RPC_URL`環境變量。 `MNEMONIC`是你的錢包的助記詞。你可以從節點提供者服務中找到一個`RINKEBY_RPC_URL`,比如

然後,要么在`bash_profile`文件中設置它們,要么將它們導出到你的終端,比如:

一級標題

struct Character {

      uint256 strength;

      uint256 dexterity;

      uint256 constitution;

      uint256 intelligence;

      uint256 wisdom;

      uint256 charisma;

      uint256 experience;

      string name;

  }

  Character[] public characters;

一級標題

  constructor()

      public

      VRFConsumerBase(VRFCoordinator, LinkToken)

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

  {

      keyHash = 0x2ed0feb3e7fd2022120aa84fab1945545a9f2ffc9076fd6156fa96eaff4c1311;

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

  }

目錄中有我們所有的模板代碼,但真正的魔法是在`DungeonsAndDragonsCharacter.sol`文件中。我們可以看到它開始時是一個普通的Solidity文件,但我們在頂部有一些導入:一級標題是一個包的集合,它讓Solidity和智能合約工程師的開發工作變得更輕鬆。如果你之前沒有用過它,那就準備好多用它吧!由於ERC721只是一個代幣標準,每一個ERC721應該都差不多,所以我們知道我們可以用一個模板就可以了。我們導入的`ERC721.sol`文件定義了一個NFT的所有標準。我們只要在合同中繼承它,定義`contract DungeonsAndDragonsCharacter is ERC721`。我們需要`VRFConsumerBase.sol`來與Chainlink VRF交互,並獲得隨機數。最後兩個導入只是幫助我們處理權限和與字符串的工作。"DungeonsAndDragonsCharacter", "D&D"一級標題"D&D"定義好之後,我們可以創建構造函數。

對應傳入`VRFConsumerBase`和ERC721參數。 Chainlink VRF需要VRF協調器地址和LinkToken地址。我們已經在Rinkeby網絡中硬編碼這些地址了。還有一些其他變量為Chainlink VRF定義,比如keyHash和fee。你可以在

一級標題

Chainlink VRF文檔

)`這一行定義了NFT的名稱,然後是它的代幣符號。 `

一級標題

`將是MetaMask和NFT市場中顯示的內容。

一級標題

我們希望角色的六個屬性中的每一個都有隨機統計,但我們希望能夠自己決定角色的名字!一個簡單的調用Chainlink VRF允許我們在這個NFT / ERC721中生成隨機數。在我們的請求函數中,不需要做太多的事情,只需要給新的角色一個名字,和一個`userProvidedSeed`。我們給它的種子是用來給VRF協調器驗證所提供的數字是否真的是隨機的。你可以選擇任何你喜歡的種子,你可以閱讀關於選擇隨機種子的文章來了解更多。

我們要跟踪`requestId`,這樣當隨機數獲取到時,我們就可以把它映射到我們正在創建的角色上。這將啟動Chainlink Job,需要等待Chainlink節點回調到我們的合約即可!你可以在Chainlink文檔中閱讀更多關於請求模型的內容,了解更多關於發送Chainlink請求的工作原理。

可以看到,只是用一次隨機數來創建所有六個屬性。使用取模運算對返回的大隨機數取一個子集。如果我們不想這樣做,我們也可以直接調用Chainlink VRF六次,但這種方式的效果是一樣的。返回的隨機數的最後兩位數字用於強度,前面的兩位數字用於敏捷,以此類推。這與CryptoKitties使用基因給貓咪賦值的方式類似。Rinkeby LINKRinkeby 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

我們將使用Truffle和Chainlink,所以如果你不熟悉Truffle,這篇關於[如何使用Chainlink With Truffle的博文](將給你一個複習的機會,但我們也會在這篇博文中介紹所有的命令!

部署和快速啟動

現在我們知道是怎麼回事了,讓我們來部署我們的隨機NFT吧!你需要一些

來運行這些腳本。Etherscan API4. 返回NFT值

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

上述命令做了下面這些事情:

1. 部署NFT合約

2. 向合約注資以便可以發起Chainlink VRF調用Rinkeyby密鑰,並設置環境變量`ETHSCAN_API_KEY`。之後運行:

總結

一級標題

的這個合約的例子。其中有幾個角色的名字很有意思!開發者文檔一級標題Discord開發者文檔這裡聯繫我們。

這裡

NFT
开发者