成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用 Python 制作 NFT 區塊鏈作品(下)

開發 后端 區塊鏈
在本文中,我們將學習如何使用 Brownie、Python 和 Chainlink 來制作非同質化的 NFT 作品,并在 OpenSea NFT 市場上展示和銷售我們的成果。

 [[405596]]

在本文中,我們將學習如何使用 Brownie、Python 和 Chainlink 來制作非同質化的 NFT 作品,并在 OpenSea NFT 市場上展示和銷售我們的成果。在學習本文前,請閱讀用 Python 制作 NFT 區塊鏈作品(上)。

動態和高級 NFT

動態 NFT 是可以隨時間變化的 NFT,或者具有我們可以用來相互交互的鏈上功能。這些 NFT 可以無限定制,讓我們可以制作整個游戲、元宇宙(metaverse)或某種互動藝術。下面我們進入高級部分。

高級快速入門

確保您的metamask中有足夠的測試網 ETH 和 LINK,然后運行以下命令: 

  1. brownie run scripts/advanced_collectible/deploy_advanced.py --network rinkeby  
  2. brownie run scripts/advanced_collectible/create_collectible.py --network rinkeby 

我們的收藏品是從 Chainlink VRF 返回的隨機犬種。Chainlink VRF 是一種獲得可證明隨機數的方法,因此我們的 NFT 真正稀缺。然后我們想要創建它的元數據。   

  1. brownie run scripts/advanced_collectible/create_metadata.py --network rinkeby 

然后我們可以選擇將此數據上傳到 IPFS,以便我們可以擁有一個 tokenURI。稍后我會告訴你如何做到這一點。現在,我們將僅使用以下示例 tokenURI: 

  1. https://ipfs.io/ipfs/Qmd9MCGtdVz2miNumBHDbvj8bigSgTwnr4SbyH6DNnpWdt?filename=1-PUG.json 

如果您將 IPFS Companion 下載到您的瀏覽器中,您可以使用該 URL 來查看 URI 返回的內容。它看起來像這樣: 

  1.  
  2.      "name": "PUG",  
  3.      "description": "An adorable PUG pup!",  
  4.      "image": "https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8?filename=pug.png",  
  5.      "attributes": [  
  6.          {  
  7.              "trait_type": "cuteness",  
  8.              "value": 100  
  9.          }  
  10.      ]  
  11.  } 

然后我們可以運行我們的 set_tokenuri.py 腳本: 

  1. brownie run scripts/advanced_collectible/set_tokenuri.py --network rinkeby 

我們會得到這樣的輸出: 

  1. Running 'scripts/advanced_collectible/set_tokenuri.py::main'...  
  2.   Working on rinkeby  
  3.   Transaction sent: 0x8a83a446c306d6255952880c0ca35fa420248a84ba7484c3798d8bbad421f88e  
  4.     Gas price: 1.0 gwei   Gas limit: 44601   Nonce: 354  
  5.     AdvancedCollectible.setTokenURI confirmed - Block: 8331653   Gas used: 40547 (90.91%)  
  6.   Awesome! You can view your NFT at https://testnets.opensea.io/assets/0x679c5f9adC630663a6e63Fa27153B215fe021b34/0  
  7.   Please give up to 20 minutes, and hit the "refresh metadata" button 

我們可以點擊給出的鏈接,看看它在 Opensea 上的樣子!您可能需要點擊刷新元數據按鈕并等待幾分鐘。

[[405597]]

隨機品種

然我們看一下剛剛做了什么。這是我們的 AdvancedCollectible.sol: 

  1. pragma solidity 0.6.6;  
  2. import "@openzeppelin/contracts/token/ERC721/ERC721.sol";  
  3. import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";  
  4. contract AdvancedCollectible is ERC721, VRFConsumerBase {  
  5.     uint256 public tokenCounter;  
  6.     enum Breed{PUG, SHIBA_INU, BRENARD}  
  7.     // add other things  
  8.     mapping(bytes32 => address) public requestIdToSender;  
  9.     mapping(bytes32 => string) public requestIdToTokenURI;  
  10.     mapping(uint256 => Breed) public tokenIdToBreed;  
  11.     mapping(bytes32 => uint256) public requestIdToTokenId;  
  12.     event requestedCollectible(bytes32 indexed requestId);   
  13.     bytes32 internal keyHash;  
  14.     uint256 internal fee;  
  15.     uint256 public randomResult;  
  16.     constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyhash)  
  17.     public   
  18.     VRFConsumerBase(_VRFCoordinator, _LinkToken)  
  19.     ERC721("Dogie", "DOG")  
  20.     {  
  21.         tokenCounter = 0 
  22.         keyHash = _keyhash 
  23.         fee = 0.1 * 10 ** 18;  
  24.     }  
  25.     function createCollectible(string memory tokenURI, uint256 userProvidedSeed)   
  26.         public returns (bytes32){  
  27.             bytes32 requestId = requestRandomness(keyHash, fee, userProvidedSeed);  
  28.             requestIdToSender[requestId] = msg.sender;  
  29.             requestIdToTokenURI[requestId] = tokenURI;  
  30.             emit requestedCollectible(requestId);  
  31.     }  
  32.     function fulfillRandomness(bytes32 requestId, uint256 randomNumber) internal override {  
  33.         address dogOwner = requestIdToSender[requestId];  
  34.         string memory tokenURI = requestIdToTokenURI[requestId];  
  35.         uint256 newItemId = tokenCounter 
  36.         _safeMint(dogOwner, newItemId); 
  37.         _setTokenURI(newItemId, tokenURI);  
  38.         Breed breed = Breed(randomNumber % 3);   
  39.         tokenIdToBreed[newItemId] = breed;  
  40.         requestIdToTokenId[requestId] = newItemId;  
  41.         tokenCountertokenCounter = tokenCounter + 1;  
  42.     } 
  43.     function setTokenURI(uint256 tokenId, string memory _tokenURI) public {  
  44.         require(  
  45.             _isApprovedOrOwner(_msgSender(), tokenId),  
  46.             "ERC721: transfer caller is not owner nor approved"  
  47.         ); 
  48.          _setTokenURI(tokenId, _tokenURI);  
  49.     }  

我們使用 Chainlink VRF 從 PUG、SHIBA_INU、BRENARD 列表中創建一個隨機品種。當我們這次調用 createCollectible 時,我們實際上向鏈下的 Chainlink VRF 節點發起了一個請求,并返回一個隨機數,以使用這 3 個品種之一創建 NFT。

在你的 NFT 中使用真正的隨機性是創造真正稀缺性的好方法,使用 Chainlink oracle 隨機數意味著你的數字可以證明是隨機的,并且不會受到礦工的影響。

您可以在文檔中了解有關 Chainlink VRF 的更多信息。

https://docs.chain.link/docs/chainlink-vrf/

Chainlink 節點通過調用 fulfillRandomness 函數進行響應,并根據隨機數創建收藏品。然后我們仍然需要調用 _setTokenURI 來為我們的 NFT 提供它需要的外觀。

我們沒有在這里給出我們的 NFT 屬性,但屬性是讓我們的 NFT 進行交互的好方法。您可以在此 龍與地下城示例中看到具有屬性的 NFT 的一個很好的示例。

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

來自 IPFS 的元數據

我們使用 IPFS 來存儲兩個文件:

  •  NFT 的形象(哈巴狗形象)
  •  tokenURI 文件(JSON 文件,其中還包含圖像的鏈接)

我們使用 IPFS 是因為它是一個免費的去中心化平臺。我們可以通過下載 IPFS 桌面并點擊導入按鈕將我們的 tokenURI 和圖像添加到 IPFS。

然后,我們可以通過點擊要共享的文件旁邊的 3 個點、點擊共享鏈接并復制給定的鏈接來共享 URI。然后我們可以將此鏈接添加到我們的 set_tokenuri.py 文件中以更改我們想要使用的 tokenURI。

持久性

但是,如果 tokenURI 僅在我們的節點上,這意味著當我們的節點關閉時,沒有其他人可以查看它。所以我們希望其他人 pin我們的 NFT。我們可以使用 Pinata 之類的 pin服務來幫助我們的數據保持活動狀態,即使我們的 IPFS 節點已關閉。

我想未來會有越來越多的元數據存儲在 IPFS 和去中心化存儲平臺上。集中式服務器可能會宕機,這意味著這些 NFT 上的藝術將永遠丟失。請務必檢查您使用的 NFT 的 tokenURI 所在的位置!

我也希望更多的人會使用像 Filecoin 這樣的 dStorage 平臺,因為使用 pin服務也沒有像它應該的那樣去中心化。

現在,您已經具備了制作漂亮有趣、可定制、交互式 NFT 的技能,并讓它們在市場上呈現。

NFT 是一種有趣、強大的方式,可以補償藝術家們所做的辛勤工作。 

 

責任編輯:龐桂玉 來源: Python中文社區 (ID:python-china)
相關推薦

2021-06-15 10:16:08

PythonNFT區塊鏈

2022-04-28 06:49:39

區塊鏈NFT

2022-06-02 15:19:18

加密貨幣穩定幣數字貨幣

2022-06-01 13:57:05

區塊鏈NFT游戲

2022-05-30 15:27:48

數字資產NFT區塊鏈

2022-06-08 15:44:51

區塊鏈NFT金融

2022-04-15 13:57:40

區塊鏈元宇宙NFT

2022-05-06 14:03:18

區塊鏈NFT加密貨幣

2022-07-07 11:14:12

MetaNFT數字收藏品

2022-04-19 14:15:08

區塊鏈元宇宙NFT

2022-06-03 23:35:31

區塊鏈元宇宙NFT

2022-06-17 11:05:33

區塊鏈NFT加密貨幣

2022-05-09 14:28:31

NFT區塊鏈代幣

2021-03-07 00:56:05

區塊鏈Python安全

2022-03-04 14:24:21

區塊鏈技術供應鏈

2022-05-03 23:52:25

NFT虛擬幣品牌

2022-07-29 15:21:38

加密貨幣區塊鏈NFT

2022-03-26 22:26:21

區塊鏈NFT技術

2018-01-16 11:00:25

2021-05-28 11:10:18

區塊鏈加密貨幣比特幣
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲av毛片 | 日韩在线资源 | 一区二区三区视频免费观看 | 国产综合精品 | 成人精品一区二区三区中文字幕 | 国产精品久久久久久久久免费丝袜 | 91久久久久久久久久久久久 | 亚洲视频欧美视频 | 久久一区 | 成人在线免费电影 | 国产在线第一页 | 亚洲综合无码一区二区 | 久久久久九九九女人毛片 | 91在线观看网址 | 亚洲欧美日韩在线 | 精品亚洲一区二区三区 | 欧美激情五月 | 国产一区欧美一区 | 在线视频国产一区 | 中文字幕av在线 | 国产精品永久免费 | 国产视频精品免费 | 亚洲福利网 | 日韩欧美在线不卡 | 亚洲精品一区二区 | 国产特级毛片aaaaaa喷潮 | 日本一区二区三区精品视频 | 国产清纯白嫩初高生视频在线观看 | av黄色在线观看 | 国内精品久久久久久 | 久久精品亚洲一区二区三区浴池 | 欧美久久天堂 | 国产激情视频网 | 国产美女精品视频 | 一本一道久久a久久精品综合 | 久久精品男人的天堂 | 小h片免费观看久久久久 | 午夜精品久久久久久久星辰影院 | 国产不卡一区 | 国产精品一区一区三区 | 国产精品久久久久久久久免费丝袜 |