7*24快訊如何創建N...

如何創建NFT

同質化收藏證(NFT)是區塊鏈上的數字通證,每一個都代表著獨特的東西,例如數字收藏品、特殊的非遊戲物品、稀有的交易卡品或任何其他特殊的數字貨幣NFT與同質化通證完全不同:都是一個獨一無二的。 NFT持有者們他們持有的是哪一個,而不是數量。

在本技術教程中,你將學習如何開發NFT 作品並將其部署到OpenSea。你的NFT 將是具有不同背景顏色的表情符號。我們將使用Chainlink VRF可以隨時生成每個NFT 的符號和背景顏色的組合。

開始吧。

複製代碼倉庫

第一步是複制Chainlink 智能合約示例存儲庫完成此操作後,前往隨機安裝SVG NFT 目錄和所需的依賴項。

git clone https://github.com/smartcontractkit/smart-contract-examples.git
cd smart-contract-examples/random-svg-nft

yarn

然後,使用代碼編輯器中打開項目。按照項目“Readme”文件中的說明設置所需的環境變量(需要註冊一個免費的)煉金術帳戶和一個免費的Etherscan API密鑰)。在本教程中,我們將在以太坊上使用Rinkeby 測試網。

ETHERSCAN_API_KEY=<YOUR ETHERSCAN API>

RINKEBY_URL=https://eth-rinkeby.alchemyapi.io/v2/<YOUR ALCHEMY KEY>

PRIVATE_KEY=<YOUR PRIVATE KEY>

NFT 元數據

它連接到NFT 的元數據提供描述性信息,這樣就可以在哪裡顯示該NFT 的應用程序的第一個顯示智能。 (鏈上中心)通過各種方式在並IPFS或者說Filecoin去化解決方案上(鏈下)在鏈上等本教程中,我們的元數據存儲在鏈上等,正在基於鏈上的各種數據生成,,將這些值的SVG 表示存儲在智能合約中。

開發NFT 智能合約

創建一個新的NFT.solep 名為的Solidity 文件。我們將在新的智能OpenZepelin 庫繼承繼承協議中,使用Chainlink VRF。

初始化存儲變量的表情符號並使用你最喜歡的表情符號,比如在你最近的手機上使用的十個符號。

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;




import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol";

import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol";

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

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

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

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




contract EmojiNFT is ERC721URIStorage, VRFConsumerBaseV2 {

  using Counters for Counters.Counter;

  Counters.Counter private tokenIds;




  string[] private emojis = [

    unicode"😁",

    unicode"😂",

    unicode"😍",

    unicode"😭",

    unicode"😴",

    unicode"😎",

    unicode"🤑",

    unicode"🥳",

    unicode"😱",

    unicode"🙄"

  ];




  VRFCoordinatorV2Interface internal immutable vrfCoordinator;

  bytes32 internal immutable keyHash;

  uint64 internal immutable subscriptionId;

  uint32 internal immutable callbackGasLimit;

  uint32 internal immutable numWords;

  uint16 internal immutable requestConfirmations;




  mapping(uint256 => address) requestToSender;




  event RandomnessRequested(uint256 indexed requestId);

為了確保智能合約能夠部署這些值,我們添加了一個構造函數,並使用“EmojiNFT”作為NFT 系列名稱,使用“EMOJI”作為符號。可自由更改並正確使用你的任何名字來命名NFT 系列。

  constructor(

    address _vrfCoordinator,

    bytes32 _keyHash,

    uint64 _subscriptionId,

    uint32 _callbackGasLimit,

    uint16 _requestConfirmations

  ) VRFConsumerBaseV2(_vrfCoordinator) ERC721("EmojiNFT", "EMOJI") {

    vrfCoordinator = VRFCoordinatorV2Interface(_vrfCoordinator);

    keyHash = _keyHash;

    subscriptionId = _subscriptionId;

    callbackGasLimit = _callbackGasLimit;

    numWords = 4;

    requestConfirmations = _requestConfirmations;

  }

我們現在添加一個新的方法,根據我們的新方法,在鏈接VRF 請求中添加隨機值,函數中的第一個值,從列表中的每個符號中,其他任何時間生成的值顏色,生成鏈上文件,創建一個OpenSea SVG 使用通證的URL,然後構建一個新的NFT。看來Chainlink VRF 是同步的,我們將請求發送方將所有Chainlink VRF 請求映射到通證的製造者。

  function mint() public returns (uint256 requestId) {

    requestId = vrfCoordinator.requestRandomWords(

      keyHash,

      subscriptionId,

      requestConfirmations,

      callbackGasLimit,

      numWords

    );




    requestToSender[requestId] = msg.sender;




    emit RandomnessRequested(requestId);

  }





  function fulfillRandomWords(uint256 requestId, uint256[] memory randomNumbers)

    internal

    override

  {

    uint256 tokenId = tokenIds.current();




    uint256 emojiIndex = (randomNumbers[0] % emojis.length) + 1;

    string memory emoji = emojis[emojiIndex];

    string memory color = pickRandomColor(randomNumbers[1], randomNumbers[2], randomNumbers[3]);

    string memory svg = createOnChainSvg(emoji, color);

    string memory tokenUri = createTokenUri(emoji, svg);




    _safeMint(requestToSender[requestId], tokenId);

    _setTokenURI(tokenId, tokenUri);




    tokenIds.increment();

  }

}

最後是為代碼的挑選ChainRandomColor、一步createOnSvg和createTokenUri函數添加。

我們將使用Chainlink VRF通過請求三種不同的顏色隨時為NFT藝術生成我們顏色的每種顏色,產生RGB格式的每種顏色值。計算機顏色科學以及電視、RGB常用和顯示中。

紅色、藍色和藍色將其強度定義為例如參數顏色0和25之間的設置。 rgb(0,0,255)被渲染為藍色,因為藍色為為參數值(255) 和其他設置為0。類似地,rgb(255, 0, 0) 看起來為紅色。

VRF 提供的值可能遠大於255,因此我們需要取模來計算r、g 和b 。

  function pickRandomColor(uint256 firstRandomNumber, uint256 secondRandomNumber, uint256 thirdRandomNumber)

    internal

    pure

    returns (string memory)

  {

    uint256 r = firstRandomNumber % 256;

    uint256 g = secondRandomNumber % 256;

    uint256 b = thirdRandomNumber % 256;




    return

      string(

        abi.encodePacked(

          "rgb(",

          Strings.toString(r),

          ", ",

          Strings.toString(g),

          ", ",

          Strings.toString(b),

          ");"

        )

      );

  }

SVG(Scalable Vectors)是一種基於XML的標記語言,描述基於二維的向量形式。簡單來說,SVG是一種圖像,但它是一個用代碼製造的圖像。示例下這以格式打印,將在調整大小時不會損失任何質量。 ——我們的SVG可以通證的元數據中生成,不適合從外部。

  function createOnChainSvg(string memory emoji, string memory color) internal pure returns(string memory svg) {

    string memory baseSvg = "<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio='xMinYMin meet' viewBox='0 0 350 350'><style>.base { font-size: 100px; }</style><rect width="100%" height="100%" style="fill:";

    string memory afterColorSvg = "" /><text x='50%' y='50%' class="base" dominant-baseline="middle" text-anchor="middle">";




    svg = string(abi.encodePacked(baseSvg, color, afterColorSvg, emoji, "</text></svg>"));

  }

通證是通證示例數據中我們的“URL”中的鏈接。包含“描述”的“名稱”和看起來的JSON,下面是這樣的:

{"name": "😍", "description": "Random Emoji NFT Collection Powered by Chainlink VRF", "image": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHByZXNlcnZlQXNwZWN0UmF0aW89J3hNaW5ZTWluIG1lZXQnIHZpZXdCb3g9JzAgMCAzNTAgMzUwJz48c3R5bGU+LmJhc2UgeyBmb250LXNpemU6IDEwMHB4OyB9PC9zdHlsZT48cmVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBzdHlsZT0nZmlsbDpyZ2IoNDcsIDIyNCwgNzYpOycgLz48dGV4dCB4PSc1MCUnIHk9JzUwJScgY2xhc3M9J2Jhc2UnIGRvbWluYW50LWJhc2VsaW5lPSdtaWRkbGUnIHRleHQtYW5jaG9yPSdtaWRkbGUnPvCfmI08L3RleHQ+PC9zdmc+"}
Notice that the SVG image representation is Base64 encoded to match OpenSea’s requirements.
  function createTokenUri(string memory emoji, string memory svg) internal pure returns(string memory tokenUri) {

    string memory json = Base64.encode(

      bytes(

        string(

          abi.encodePacked(

            '{"name": "',

            emoji,

            '", "description": "Random Emoji NFT Collection Powered by Chainlink VRF", "image": "data:image/svg+xml;base64,',

            Base64.encode(bytes(svg)),

            '"}'

          )

        )

      )

    );




      tokenUri = string(

      abi.encodePacked("data:application/json;base64,", json)

    );

  }

VRF v2

為了向區塊鏈實時更新,我們使用最新發布的Chainlink VRF v2。

首先,導航到 VRF 訂閱頁面,Rinkeby 網絡,連接部署你的環境,點擊“創建訂閱”。然後,將訂閱ID 保存為SUBSCRIPTION_ID。然後選擇下面的輸入中的內部表情符號NFT 智能合約:

yarn deploy

或者

SUBSCRIPTION_ID=<your_subscription_id> yarn deploy

部署後,返回VRF 訂閱頁面,導航到你的訂閱,點擊“添加消費者”按鈕,並粘貼最近部署的合同地址。

,給你的訂閱充一些Rinkeby 測試值網最後鏈接。

鑄造你的通證並在OpenSea 上進行交易

現在,你可以將你的錢包連接並點擊“創建”函數,或者通過你的智能合約UI 來創建一個dApp UI。Rinkeby 上的OpenSea 並蒐索你的NFT 收藏或錢包地址。

總結

在本文中,我們學習瞭如何編寫NFT 合約、鏈上和鏈下NFT 元數據之間的區別、如何使用Chainlink VRF,以及如何在Solidity 中生成SVG 圖像並在OpenSeaNFT 等市場上正確顯示它們。要了解更多信息,可前往 Chainlink 智能合約示例存儲庫並開始這個和其他示例項目試驗。

帖子 如何創建NFT 首先出現在 Chainlink 博客.

Source Link

最受歡迎

繼續閱讀

長期持有者持有的比特幣(BTC)供應量達到最高水平

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打...

現在讀

$COOKIE, the Cookie3 Mark...

Tallinn, Estonia, March 26th, 2024...

長期持有者持有的比特幣(BTC)供應量達到最高水平...

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持有者和投機者。 儘管BTC 的價格在過去一個月中保持相對平穩,範圍在約29,000 美元至31,000 美元之間,但人們還是開始瘋狂囤積。 ...

Caldera 宣布與Espresso Syste...

Caldera 開發人員可以利用Espresso Sequence...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打開了大門。對於那些尋求利用Web3 遊戲巨大潛力的人來說,確保先發優勢至關重要。 了解Web3 遊戲生態系統在深入研究Web3 遊戲之前,有...

Taapsee Pannu 推出NFT 平台,介紹...

企業家貢獻者表達的意見是他們自己的。 您正在閱讀《企業家印度》,這是企業家媒體的國際特許經營刊物。 女演員Taapsee Pannu 最近推出了“taapseeclub.com”,這是她自己的非同質代...

比特幣(BTC) 地址休眠超過11 年,轉移310...

經過11 年多的閒置之後,一個包含3100 萬美元BTC 的休眠比特幣地址最近突然活躍起來。 2023年7月22日,地址 轉入 將其全部餘額轉移到新地址。 早期BTC 地址復活 比特幣自2009 年以來就已經存在,因此存在多年來不活躍的休眠地址,其中包含大量BTC。這種加密貨幣的一些早期採用者能夠...

加密貨幣死了嗎?當今加密貨幣的現狀

您之前可能聽說過加密貨幣正在消亡(或比特幣已消亡)。在這篇文章中,我們將研究加密貨幣的狀態,並嘗試回答這個問題:加密貨幣現在已經死了嗎? 在我們開始之前,我們想澄清一下,本文指的是最廣泛意義上的“加密貨幣行業”; 在裡面 網絡3 感覺。該定義包括加密資產市場; 但它還包括其他非財務用例。 隨著近來加...

Chancer 可能成為體育和社交博彩領域的下一個...

加密貨幣 隨著企業財報季節的繼續,本週股市表現好壞參半。在Ne...

以太坊(ETH) 創下兩個月來CEX 流入最高紀錄...

過去一周,以太坊(ETH)流入中心化交易所(CEX)的資金量創下了過去兩個月來的最高水平。這些重大的資產變動表明ETH 的價格可能會下跌。 CoinGecko 數據顯示,第二大加密貨幣的價格一直在小幅下跌,過去一周價值下跌了2.5%。截至撰寫本文時,以太幣易手價格為1,892.65 美元,過去24...

新的DeFi 法案有“不可行的義務”

加密貨幣創新委員會表示,新的反洗錢法案沒有為DeFi 中的非法金融...

幣安大幅削減成本,瑞波幣為美國銀行和加密貨幣風險投...

美國證券交易委員會(SEC)對加密貨幣公司的打擊似乎嚴重影響了幣安的業務。據報導,在過去幾週內,該加密貨幣交易所解雇了1,000 多名員工,並削減了一些福利。 幣安表示,“當前的市場環境和監管環境”導致利潤下降,這表明可能正在進行更多削減。一位發言人告訴Cointelegraph,該公司將考慮縮減“...

Automata 雙週更新:第48 期| 通過自動...

迎接新的季度意味著設定我們的意圖並為團隊規劃下一步的行動。幕後醞釀的一切——合作、產品功能和營銷發布——很難抑制我們的興奮。我們一開始就在1RPC(2 個備受期待的第2 層主網)上添加了對Linea 和Base 的支持。科技載體更新頁腳以顯示界面版本平滑的用戶體驗 USDC CCTP 支持 關於仲裁...