代幣標準與 NFT

鏈上元資料

鏈上元資料指的是把 NFT 的資料、往往連同作品本身,直接存放在智慧合約裡,而非以一個外部連結指過去。當 tokenURI 被呼叫時,合約會在程式碼中即時組出 JSON(有時還包含一張 SVG 圖像),並以 data: URI 的形式、把內容用 base64 內嵌回傳。沒有任何東西放在網頁伺服器、甚至 IPFS 上;那張圖是真真切切地由區塊鏈所儲存的位元組重建出來的,因此鏈活多久,它就活多久。

其魅力在於永久性與自給自足。一枚完全鏈上的 NFT 不會因為圖像被刪、託管到期、或 IPFS 釘選被撤而「跑路」,因為根本沒有可被破壞的鏈下依賴。這正是那些珍視長久的專案——Autoglyphs、Chromie Squiggle、Nouns、Loot——以鏈上程式碼或種子資料確定性地生成其作品的原因。它也成就了真正可組合、可動態的藝術,因為其他合約能讀取並重混其底層資料。

代價,說白了,就是 gas 與大小。把位元組存上鏈既昂貴、區塊又有上限,因此鏈上藝術傾向於生成式、向量式(SVG)或高度壓縮,而非一張數 MB 的照片。像 SSTORE2(把資料當成合約位元組碼寫入以更便宜地讀取)與程序化生成等技巧,讓它變得可行。這個取捨十分鮮明:鏈下儲存便宜卻脆弱,鏈上儲存昂貴卻與網路本身一樣耐久。

function tokenURI(uint256 id) public view returns (string memory) {
    string memory svg = _renderSVG(id);          // build art in code
    string memory json = string.concat(
        '{"name":"Glyph #', id.toString(),
        '","image":"data:image/svg+xml;base64,', Base64.encode(bytes(svg)), '"}');
    return string.concat('data:application/json;base64,', Base64.encode(bytes(json)));
}

tokenURI 完全在鏈上組出 JSON 與 SVG,毫無外部連結。

「鏈上」是一道光譜:有些 NFT 只把 JSON 放上鏈、圖像卻在鏈下,有些則兩者都上鏈。真正無法被竄改的作品,需要的是圖像本身、而非只有它的元資料被存上鏈。

又稱
fully on-chain NFT完全鏈上 NFT