隨著 NFT 生態的迅速增長,並且造成了以太坊鏈上 gas 的嚴重消耗。且由於 NFT 領域很大一部分屬於非金融性質,因此更需要避免高額費用,這些因素使 NFT 成為轉移到 Layer 2 的主要目標,但如何轉移呢? V 神 Vitalik Buterin 於 9 月 6 號於 ethresear.ch 發表原文《 Cross-rollup NFT wrapper and migration ideas 》提出解決方案,由專欄作者藍狐筆記重新編譯、整理和撰寫。
(前情提要:觀點|以太坊公鏈王者的宏圖大略,一文說透 ETH 2.0 升級之路)
(事件背景:中國監管事件》全球第2大ETH礦池「星火停運日期出爐」,以太坊全網20%算力衝擊未知)
NFT 生態在迅速增長,並且構成了以太坊鏈上 gas 消耗的重要部分。 NFT 生態系統仍處於年輕型態並相對缺乏根基,而且由於 NFT 領域很大一部分屬於非金融性質,因此更需要避免高額費用,這使 NFT 成為轉移到 Layer 2 的主要目標,但該如何轉移呢?
一個簡單的提議是通過社會性協調轉移到一個特定的 Rollup 平台(例如 Arbitrum,因為該平台目前已經支持通用智能合約部署),但這樣做也有幾處劣勢:
- 所有目前支持 EVM 的主要 Rollup 平台都有後門、中心化排序或其他輔助措施,將整個生態系統轉移到單個 Rollup 是有風險的,而 Rollup 將如何升級這些功能還存在不確定性;
- NFT 生態系統最終可能成長到單個 Rollup 無法安全承載的規模;
- NFT 生態系統的任何部分,甚至整個 NFT 生態系統,都不是封閉的;他們將需要與以太坊生態系統的其它部分進行互操作。
本文提出了一個使 NFT 友好跨 Rollup 並使其遷移到整個 Layer 2 生態中的提案。
延伸閱讀:鏈上數據|一文看懂「以太坊世界的現況、各個趨勢、未來」,Defi Eth2 NFT 正加速擴張
提議解決方案一
NFT 可以在單個 Rollup 中進行初始註冊,然後通過創建 wrapper NFT(封裝 NFT)在不同的 Rollups(或者是底層鏈) 中轉移。
NFT wrapping 過程如下:
- 在 Rollup A 上,將 NFT(設為 X)發送到封裝管理器合約(wrapper manager contract),指定(i)目標 Rollup 和(ii)初始所有者。加密箱合約(lockbox contract)儲存一條記錄,為 X 分配一個新的序列號 R,並保存目標 Rollup(設為 B)和目標 Rollup 的初始所有者(設為 01)。
- 在 Rollup B 上,任何人都可以使用 Rollup B 上的封裝管理器合約創建 wrapper NFT。創建一個 wrapper NFT 需要指定源 Rollup 和序列號。要創建 X 的一個「有效」 wrapper NFT,只能由指定的所有者和通過聲明(R, A)作為序列號和源 Rollup 完成。注意,有可能會創建一個指向無內容的無效 wrapper NFT,而 Rollup B 無法分辨有效和無效。封裝管理器合約儲存(序列號、源 Rollup、初始所有者)值組並防止使用同一個值組創建多個 wrapper NFT。
- 要從加密箱中提出 NFT,Rollup B 上 wrapped-X 的當前所有者必須將它發送回封裝管理器,後者發布收據說明「序列號為 R、源 Rollup A 和初始所有者 01 的 NFT 已經解除封裝,以及潛在的新所有者 02」。
- 加密箱合約可以在收到 Rollup B 上收據的證明之後將 NFT X 交由 02,並根據其儲存的資訊檢查序列號、源 Rollup 和初始所有者,並驗證 NFT 的轉移。
請注意,提取 NFT 存在時間延遲,因為 Optimistic Rollup 類解決方案的狀態根需要大約一週的延遲才能最終確定,以便驗證收據。到目前為止,更快地進行多跳的唯一方法是進行多層封裝。
用戶要驗證 wrapped X 是否合法,需要自己驗證 Rollup B 上的狀態和 Rollup A 上的收據。
拓展:增加跨 Rollup 轉帳
在 Rollup B 上,wrapped-X 的所有者可以將它發送給封裝管理器,並附上一條指令發布不同的收據「序列號為 R、源 Rollup A 和初始所有者為 01 的 NFT 剛剛轉移到 Rollup C,以及潛在的新所有者 02」。
在 Rollup C 上,任何人都可以透過指定原始源 Rollup(在目前示例中為 Rollup A)、序列號和初始所有者來製作 wrapped-X 對象,並且 Rollup C 上的此 wrapped-X 可以進行自由交易。但是一旦如此,提出 wrapped-X 需要發布跨 Rollup 轉移產生的所有收據(當前實例中為 2 個)。
請注意,為了簡單起見,「提款」本身不再是跨 Rollup 的操作,而是通過跨 Rollup 完成的,在 Rollup A 上創建 wrapped-X(X 的同一個 Rollup),然後單獨進行一步 unwrapping(解除封裝) 操作。
實際上,當 NFT 從一個 Rollup 轉移到另一個 Rollup 時,轉移路徑上的鏈會產生一串收據,該收據鏈中的每一個收據都被鏡像到 Rollup A,並且在未來,當其他 Rollup 的狀態根最終確定時,這些收據將在某個時間點按序被處理(在短期內可以通過 Kate 承諾進行空間優化,長遠來看可以通過 ZK-SNARK 證明整條收據鏈)。
用戶要驗證 wrapped X 的真實性,需要驗證 反映跨 Rollup 轉移的所有 Rollup 上的整個收據鏈(或者至少是繼上一個收據之後已經鏡像到 Rollup A 的收據鏈)。
延伸閱讀:觀點|以太坊Layer 2賽道分析:中短期Optimistic Rollup,長期Zk Rollup
擴展2:在底層鏈上優化發行 gas
所有 NFT 都可以這種方式發行:由以太坊底層鏈上的加密箱「擁有」。為了優化 gas 的效率,加密箱合約將具備生成一套序列號並將其傳輸到 Rollup 的功能。
實際上,所有 NFT 都是預先創建的,但尚未賦予「意義」給其中任何一個(可以想像成有 2 * 256 個尚未分化的「幹細胞」NFT),並且它們被批量轉移到 Rollup。
「發行」過程現在就變成了賦予意義的過程。這可以通過在收據中傳遞「含義哈希」來完成,與所有者傳遞的形式相同:如果 NFT 沒有意義(是一個「幹細胞」),所有者可以為其賦予一個含義,使其成為一個具有「差異性」的 NFT。
底層鏈只有在驗證收據鏈後才知道 NFT 的含義,直到賦予含義為止(實際上,收據驗證必須是 ZK-SNARK 的才具備可行性)。
這允許所有 NFT 都在底層鏈中「紮根」,而不是 Rollup。這對於處理 Rollup 故障,因其他原因不可用或是應用需要永久遷移到其他域的情況來說很有幫助。
📍相關報導📍
盤點|你現在就可以在「以太坊 Layer 2」上做的 7 件事
陳品|給忙碌人的EIP-1559簡史:將怎麼改變「以太坊Ethereum」的未來?
剩9小時倒數,ETH大漲12%!以太坊將迎來歷史最重要升級
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務