Cảnh báo rủi ro: Đề phòng huy động vốn bất hợp pháp dưới danh nghĩa 'tiền điện tử' và 'blockchain'. — Năm cơ quan bao gồm Ủy ban Giám sát Ngân hàng và Bảo hiểm
Tìm kiếm
Đăng nhập
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
Xem thị trường
Làm cách nào để lấy số ngẫu nhiên trong NFT (ERC721)?
Chainlink
特邀专栏作者
2020-11-25 05:02
Bài viết này có khoảng 4905 từ, đọc toàn bộ bài viết mất khoảng 8 phút
Các nhà phát triển hợp đồng thông minh đang xây dựng một thế giới ngẫu nhiên hoàn toàn mới trong NFT.

tiêu đề cấp đầu tiên

giới thiệuERC721tiếp theo(NFTMã thông báo không thể thay thế tiêu chuẩnChainlink VRF) luôn là một bài toán khó đối với các nhà phát triển hợp đồng thông minh. Hiện nay,

Đã được ra mắt trên mạng chính, các hợp đồng thông minh dựa trên Solidity có thể tạo liền mạch các số ngẫu nhiên trên chuỗi chống giả mạo có thể được chứng minh là công bằng và được hỗ trợ bởi các bằng chứng mã hóa. Với Chainlink VRF, việc tạo NFT động yêu cầu nguồn ngẫu nhiên an toàn rất đơn giản và an toàn. Mặc dù Chainlink cũng có thể triển khai bất kỳ loại thuộc tính động nào cho NFT bằng cách sử dụng các nguồn dữ liệu ngoài chuỗi, nhưng chúng tôi sẽ tập trung vào việc sử dụng nonce ERC721 hoặc NFT.Trong hướng dẫn này, chúng ta sẽ xây dựng mộttiêu đề cấp đầu tiên

NFT là gì?

NFT là gì?ERC20NFT (tuân theo tiêu chuẩn ERC721) xác định một khuôn khổ để tạo các mã thông báo duy nhất và khác biệt với nhau (do đó có thuật ngữ không thể thay thế), trong khi phổ biến"Tiêu chuẩn xác định"đồng nhất hóa"mã thông báo, có nghĩa là tất cả các mã thông báo đều có thể hoán đổi cho nhau và đảm bảo có cùng giá trị."đồng nhất hóa

Ví dụ về các loại tiền tệ là USD, EUR và JPY, trong khi các ví dụ về mã thông báo chuỗi khối có thể thay thế được là AAVE, SNX và YFI. Trong những trường hợp này, 1 token có thể thay thế bằng 1 token khác cùng loại, giống như 1 USD là 1 USD và 1 LINK là 1 LINK. Tuy nhiên, NFT/ERC721 khác vì mỗi mã thông báo là duy nhất và không đại diện cho cùng một giá trị hoặc các mục có thể hoán đổi cho nhau.Vì tất cả các NFT là duy nhất, nên chúng có thể đại diện cho quyền sở hữu được mã hóa đối với tài sản trong thế giới thực, chẳng hạn như một mảnh đất cụ thể hoặc quyền sở hữu thực tế đối với tài sản kỹ thuật số, chẳng hạn như thẻ giao dịch kỹ thuật số hiếm. Và chúng đang ngày càng phổ biến. bạn có thể tham khảoKinh thánh NFT của OpenSea

Hãy đọc thêm.

xây dựng nhân vật ngẫu nhiên của bạn

uint256 strength;

uint256 dexterity;

uint256 constitution;

uint256 intelligence;

uint256 wisdom;

uint256 charisma;

Những gì chúng tôi đang xem xét là tạo một nhân vật có sáu thuộc tính của nhân vật D&D, cụ thể là:

uint256 experience;

string name;

Vai trò cũng bao gồm:

Vì vậy, chúng tôi có thể tăng cấp cho chúng và đặt cho chúng một cái tên vui nhộn.

Chúng tôi đã có một số quyền tự do ở đây và không tuân theo 100% hướng dẫn của Dungeons & Dragons, nhưng điều này có thể dễ dàng sửa đổi nếu bạn muốn mô tả trò chơi chính xác hơn.

Hợp đồng này nên thiết lập như sau:

1. Cho phép bạn chuyển quyền sở hữu NFT và tất cả các tiêu chuẩn NFT khác.

2. Đặt tên nhân vật và thuộc tính ngẫu nhiên.

Chúng tôi đã thiết lập kho lưu trữ mã cho bạn và chúng tôi sẽ chỉ cho bạn cách sử dụng nó để bắt đầu!

mã nhân bản

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

cd dungeons-and-dragons-nft

npm install

tiêu đề cấp đầu tiên

đặt biến môi trườngInfura

Sau đó, đặt chúng trong tệp `bash_profile` hoặc xuất chúng sang thiết bị đầu cuối của bạn, ví dụ:

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

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

tiêu đề cấp đầu tiên

có gì trong thư mục mã

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 {

là một tập hợp các gói giúp công việc phát triển của Solidity và các kỹ sư hợp đồng thông minh trở nên dễ dàng hơn. Nếu bạn chưa từng sử dụng nó trước đây, hãy sẵn sàng sử dụng nó thật nhiều! Vì ERC721 chỉ là một tiêu chuẩn mã thông báo, mọi ERC721 phải giống nhau, vì vậy chúng tôi biết rằng chúng tôi có thể sử dụng một mẫu. Tệp `ERC721.sol` mà chúng tôi đã nhập xác định tất cả các tiêu chí cho một NFT. Chúng tôi chỉ kế thừa nó trong hợp đồng, xác định `hợp đồng DungeonsAndDragons Character là ERC721`. Chúng tôi cần `VRFConsumerBase.sol` để tương tác với Chainlink VRF và nhận nonce. Hai lần nhập cuối cùng chỉ giúp chúng tôi có quyền và làm việc với các chuỗi.

tiêu đề cấp đầu tiên

Cấu trúc vai trò và hàm tạo

struct Character {

      uint256 strength;

      uint256 dexterity;

      uint256 constitution;

      uint256 intelligence;

      uint256 wisdom;

      uint256 charisma;

      uint256 experience;

      string name;

  }

  Character[] public characters;

Trong cấu trúc Ký tự, chúng tôi xác định các thuộc tính mà ký tự của chúng tôi sẽ có và tạo một danh sách các ký tự để chúng tôi có thể theo dõi mọi ký tự được tạo. Vì chúng ta đang sử dụng một mảng để lưu trữ danh sách các ký tự, nên mỗi ký tự sẽ có một ID duy nhất trong mảng để xác định nó. Đây được gọi là `tokenId` và chúng tôi sẽ đề cập đến nó nhiều hơn.

  constructor()

      public

      VRFConsumerBase(VRFCoordinator, LinkToken)

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

  {

      keyHash = 0x2ed0feb3e7fd2022120aa84fab1945545a9f2ffc9076fd6156fa96eaff4c1311;

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

  }

Tương ứng với các tham số `VRFConsumerBase` và ERC721 sắp tới. Chainlink VRF yêu cầu địa chỉ điều phối viên VRF và địa chỉ LinkToken. Chúng tôi đã mã hóa cứng các địa chỉ này trong mạng Rinkeby. Ngoài ra còn có một số biến khác được xác định cho Chainlink VRF, chẳng hạn như keyHash và phí. bạn có thể tạiTài liệu Chainlink VRFTài liệu Chainlink VRF"DungeonsAndDragonsCharacter", "D&D"Đọc thêm về vai trò của các biến này trong . `ERC721("D&D"` sẽ là những gì được hiển thị trong MetaMask và thị trường NFT.

tiêu đề cấp đầu tiên

tạo ký tự ngẫu nhiên của bạn

Chúng tôi muốn các chỉ số ngẫu nhiên cho từng chỉ số trong số sáu chỉ số của nhân vật, nhưng chúng tôi muốn có thể tự quyết định tên của nhân vật! Một cuộc gọi đơn giản tới Chainlink VRF cho phép chúng tôi tạo các số ngẫu nhiên trong NFT/ERC721 này. Trong chức năng yêu cầu của chúng tôi, chúng tôi không cần phải làm gì nhiều, chỉ cần đặt tên cho vai trò mới và `userProvidedSeed`. Hạt giống chúng tôi cung cấp được sử dụng để xác minh với điều phối viên VRF rằng số được cung cấp thực sự là ngẫu nhiên. Bạn có thể chọn bất kỳ hạt giống nào bạn thích và bạn có thể đọc về cách chọn hạt giống ngẫu nhiên để tìm hiểu thêm.

Chúng tôi muốn theo dõi `requestId` để khi số ngẫu nhiên được tìm nạp, chúng tôi có thể ánh xạ nó tới ký tự mà chúng tôi đang tạo. Thao tác này sẽ bắt đầu Công việc Chainlink, chỉ cần đợi nút Chainlink gọi lại hợp đồng của chúng ta! Bạn có thể đọc thêm về mô hình yêu cầu trong tài liệu Chainlink để tìm hiểu thêm về cách hoạt động của việc gửi yêu cầu Chainlink.

Khi nút Chainlink xử lý xong yêu cầu, nó sẽ phản hồi bằng cách gọi hàm `fulfillRandomness`. Hàm này chứa các phép tính cho các thuộc tính đã cho, thêm ký tự vào danh sách và đúc NFT.

Như bạn có thể thấy, tất cả sáu thuộc tính được tạo chỉ với một số ngẫu nhiên. Tập hợp con số ngẫu nhiên lớn được trả về bằng thao tác modulo. Nếu chúng tôi không muốn làm điều này, chúng tôi cũng có thể gọi trực tiếp Chainlink VRF sáu lần, nhưng theo cách này thì hiệu quả là như nhau. Hai chữ số cuối cùng của nonce được trả về là sức mạnh, hai chữ số đầu tiên là sự nhanh nhẹn, v.v. Điều này tương tự như cách CryptoKitties sử dụng gen để gán giá trị cho loài mèo.

*Lưu ý: Thực hiện các phép toán bit sẽ hiệu quả hơn những gì chúng ta có ở đây, nhưng nó dễ hiểu hơn, vì vậy chúng ta không phải nghiên cứu cách thức hoạt động của các phép toán bit. *

Chúng tôi sẽ sử dụng Truffle và Chainlink, vì vậy nếu bạn chưa quen với Truffle, bài đăng trên blog này về [Cách sử dụng Chainlink với Truffle]( sẽ giúp bạn ôn lại, nhưng chúng tôi sẽ đề cập đến tất cả các lệnh trong bài đăng trên blog này cũng vậy!

tiêu đề cấp đầu tiên

Bây giờ chúng ta đã biết chuyện gì đang xảy ra, hãy triển khai NFT ngẫu nhiên của chúng ta! bạn cần một ítRinkeby 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

để chạy các tập lệnh này.

Lệnh trên thực hiện những việc sau:

1. Triển khai hợp đồng NFT

2. Cấp vốn cho hợp đồng để có thể thực hiện lệnh gọi Chainlink VRF

3. Sử dụng lệnh gọi Chainlink VRF để tạo ký tự

4. Trả về giá trị NFTEtherscan APISau khi triển khai, bạn cũng có thể xác minh hợp đồng và thậm chí đọc hợp đồng trên Etherscan bằng plugin etherscan. bạn cần phải có được một

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

key và đặt biến môi trường `ETHSCAN_API_KEY`. Sau đó chạy:

Sau đó, nó sẽ cung cấp cho bạn một liên kết đến NFT trên Etherscan. Bạn có thể đọc nội dung hợp đồng trên Etherscan.

Thao tác này sẽ đưa bạn đến trang nơi bạn có thể tương tác với hợp đồng. Nếu bạn chuyển đến phần nhân vật, bạn có thể nhập mã thông báoId mà chúng tôi vừa tạo, 0 và bạn sẽ có thể xem số liệu thống kê cho nhân vật D&D mới của mình.Rinkeybytiêu đề cấp đầu tiên

tóm tắt

tóm tắt

tài liệu dành cho nhà phát triểntài liệu dành cho nhà phát triểnvà tham giaDiscordđâyđâyliên hệ chúng tôi.

liên hệ chúng tôi.

NFT
开发者
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký
https://t.me/Odaily_News
Tài khoản chính thức
https://twitter.com/OdailyChina