5 分鐘帶你認識動態NFT(dNFT)和其發展可能性

2023/10/11閱讀時間約 10 分鐘
raw-image

前言
從去年開始,NFT這個詞如火如荼地邁向全世界,相關的科技應用也令它成為了一個企業間炙手可熱的話題。不同於傳統的NFT,動態NFT作為近期更受關注的一個分支,它包含的互動性可變化元素,為它帶來了更多的創新和價值應用。

什麼是動態NFT

首先,動態NFT的最大優勢就如其名 — 高度的變化性延展性。它可以呈現出比靜態NFT更多的元素,比如動畫、聲音、互動式圖像等,而且能隨著時間或條件產生元數據(Metadata)的變動。舉例來說,一個動態NFT的藝術品可以在不同的時間點呈現不同的風格或表現出不同的情感;一個動態NFT的遊戲道具可以隨著遊戲進程升級,提高了遊戲的互動性和可玩性。

動態 NFT 可以更新Metadata的內容,從而改變 NFT 的外觀和屬性

動態 NFT 可以更新Metadata的內容,從而改變 NFT 的外觀和屬性

這主要功虧於其對數據的接受性,您可以透過「鏈上數據」或「鏈下數據」來更改您NFT的屬性。其中鏈上數據可以通過智能合約直接訪問,鏈下數據則需透過預言機(Oracle)進行網上數據抓取後,再添加到區塊鏈中。

如何建造你自己的動態NFT

寫動態NFT需要具備一定的技術知識和專業技能,因此下文將針對基礎的建構步驟協助您籌備項目。

步驟一:確定您的設計

首先,你需要確定您的NFT設計。請注意,這邊不單單只你的NFT圖像,而是涵蓋這個項目的所有計畫(白皮書、路線圖等等),因為這會直接影響未來dNFT的變化形式以及智能合約的撰寫。舉例來說,你的dNFT可以是藝術品遊戲道具音樂作品或是實體資產綁定等等。你需要考慮元素的可變化性和互動性,以及它們如何為持有者提供更多的價值和體驗。

MLB 於去年發行的 dNFTs,球員數據會隨著場次變動

MLB 於去年發行的 dNFTs,球員數據會隨著場次變動

步驟二:選擇你的公鏈

接下來,您需要選擇你欲發佈的公鏈。像是以太坊、幣安鏈、Polygon等等,這些平台都支援動態NFT的創建和發行。但請注意,你選擇的鏈會直接影響撰寫智能合約時所使用的程式語言

步驟三:編寫智能合約

編寫智能合約是創建動態NFT的關鍵步驟。你需要使用Solidity或其他支持NFT創建的程式語言(e.g. Rust 、 Vyper 和 Move)來創建智能合約,這個合約會結合metadata來定義NFT的屬性、圖像。在創建動態NFT時,你需要確定動態元素的變化方式和變化頻率,以及它們發布後如何與智能合約互動。

讓我們看看其中一種簡單的 dNFT 代碼:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

contract DynamicNFT is ERC721URIStorage {
using Counters for Counters.Counter;

Counters.Counter private _tokenIds;

constructor() ERC721("DynamicNFT", "DNFT") {}

struct NftMetadata {
string name;
string description;
string image;
uint256 price;
uint256[] dynamicAttributes;
}

mapping(uint256 => NftMetadata) private _nftMetadata;

function createNft(
address recipient,
string memory tokenURI,
string memory name,
string memory description,
string memory image,
uint256 price,
uint256[] memory dynamicAttributes
) public {
_tokenIds.increment();

uint256 newItemId = _tokenIds.current();

_mint(recipient, newItemId);
_setTokenURI(newItemId, tokenURI);

_nftMetadata[newItemId] = NftMetadata(
name,
description,
image,
price,
dynamicAttributes
);

emit NftCreated(
newItemId,
recipient,
tokenURI,
name,
description,
image,
price,
dynamicAttributes
);
}

function getNftMetadata(uint256 tokenId)
public
view
returns (NftMetadata memory)
{
require(
_exists(tokenId),
"DynamicNFT: metadata query for nonexistent token"
);

return _nftMetadata[tokenId];
}

function updateDynamicAttribute(
uint256 tokenId,
uint256 attributeIndex,
uint256 newValue
) public {
require(
_exists(tokenId),
"DynamicNFT: attribute update for nonexistent token"
);

NftMetadata storage metadata = _nftMetadata[tokenId];

require(
attributeIndex < metadata.dynamicAttributes.length,
"DynamicNFT: invalid attribute index"
);

uint256 oldValue = metadata.dynamicAttributes[attributeIndex];

metadata.dynamicAttributes[attributeIndex] = newValue;

emit NftAttributeUpdated(tokenId, attributeIndex, oldValue, newValue);
}

event NftCreated(
uint256 newItemId,
address recipient,
string tokenURI,
string name,
string description,
string image,
uint256 price,
uint256[] dynamicAttributes
);

event NftAttributeUpdated(
uint256 tokenId,
uint256 attributeIndex,
uint256 oldValue,
uint256 newValue
);
}

//This code is for educational purposes only, please do not invest in any assets.

步驟四:編寫前端界面

一旦你的智能合約編寫完成,你需要編寫前端界面(一個能連結錢包的Dapp),讓使用者可以與NFT互動。你可以使用Web3.js等框架來編寫前端界面,這些框架可以與以太坊等區塊鏈進行互動,實現NFT的銷售、轉移和觸發變動條件等功能。

步驟五:測試和發行

最後,你需要針對動態NFT進行測試,確保其功能正常,並在區塊鏈上發行它。你可以選擇在自己的平台上進行一級發售(步驟四所建立的平台),或是直接將NFT上傳到現有的二級市場,如OpenSea、Rarible等,進行出售或拍賣。

結論

dNFT是一個相對較新的NFT類型,它可以提供更豐富的體驗和更多的應用場景。要創建dNFT,您需要編寫專門的智能合約來定義動態屬性並更新它們。此外,我們相信dNFT將在未來變得越來越受歡迎,並為藝術家、遊戲開發人員和收藏家等創造更多的機會。

如果你在尋找專業的dNFT開發人員,歡迎聯繫我們的區塊鏈專家

AVS Consulting官網:https://avsconsulting.pro/

AVS Consulting官網:https://avsconsulting.pro/

AVS Consulting
AVS Consulting
https://avsconsulting.pro/ Founded in 2015, AVS Consulting is a Blockchain, 3D, Web3 and Mobile technologies One-Stop Service Provider.
留言0
查看全部
發表第一個留言支持創作者!