作者 | Vitalik Buterin
編譯 | 凱爾
我們需要將 NFT 轉移到第 2 層(L2)生態系統以降低費用, 然而,這樣正確做到這一點需要良好的跨 Rollup 可移植性標準,從而生態系統可以避免被鎖定在一個特定的 L2 中。——Vitalik Buterin
NFT 生態系統正在迅速發展,已經成為以太坊鏈 gas 消耗的重要組成部分,NFT 生態系統的年輕化和相對缺乏根基,以及由于 NFT 的很大一部分的非金融性質而更需要避免高額費用,這也使得 NFT 成為轉移到第 2 層(Layer2)網路的主要目標,然而,這就提出了如何將 NFT 遷移到 Layer2 的問題。
一個簡單的提案是:在社區內協調將 NFT 遷移到單個 Rollup 平臺(例如 Arbitrum,因為它目前可用于一般合約部署),但這存在一些重要的缺點:
- 所有現有的支持 EVM 的主要 Rollup 平臺都有后門、集中排序或其他實驗性功能,將整個生態系統交給單個 Rollup 是有風險的,而 Rollup 將如何超越這些功能存在不確定性,
- NFT 生態系統可能會變得太大,以至于單個 Rollup 無法安全處理
- NFT 生態系統的任何部分,甚至整個 NFT 生態系統,都不是封閉的世界;他們將需要與以太坊生態系統的其他部分進行互操作
這篇文章提出了一種關于如何使 NFT 跨 Rollup 友好的提案,允許 NFT 移動到整個 Layer2 生態系統,
提議的解決方案 1
NFT 將首先在一個 Rollup (或基礎鏈)中注冊,通過創建一個封裝 NFT,NFT 可以在其他 Rollup (或基礎鏈)之間跳轉,
封裝 NFT 的過程如下:
- 在 Rollup A 上,將 NFT (我們稱之為 X)發送到封裝管理器合約,指定 (i) 目的地 Rollup 和 (ii) 初始所有者。密碼箱合約在存儲中保存一條記錄,為 X 分配一個新的序列號 R,并保存目標 Rollup (我們稱之為 B)和目標 Rollup 的初始所有者(我們稱這個賬戶 O1)
- 在 Rollup B 上,任何人都可以使用 Rollup B 上的封裝管理器合約創建封裝 NFT。創建一個封裝 NFT 需要指定源 Rollup 和序列號,創建 X 的一個「有效」封裝 NFT 只能由指定的所有者并通過聲明 (R, A) 作為序列號和源 Rollup 來完成,請注意,可能會創建一個無指向內容的無效封裝 NFT;Rollup B 不知道什么是有效和無效,封裝管理器合約存儲(序列號、源 Rollup、初始所有者)元組(tuples)并防止使用同一個元組創建多個 NFT。
- 要從密碼箱中提取 NFT,Rollup B 上的封裝-X 的當前所有者必須將其發送回封裝管理器,后者會發出收據,說明「序列號為 R、源匯總 A 和初始所有者 O1 的 NFT 剛剛接觸封裝,帶有想要的新所有者 O2」,
- 密碼箱合約可以在收到匯總 B 上的收據的證明時將 X 交給 O2,并根據自己存儲的資訊檢查序列號、源 Rollup 和初始所有者,并驗證它是否通過,
請注意,提款會有一個時間延遲,因為 Optimistic Rollup 狀態根需要大約 1 周的時間延遲才能最終確定,以便驗證收據,到目前為止,更快地進行多跳的唯一方法是進行多層封裝。
為了讓用戶驗證封裝-X 是否合法,他們需要自己驗證 Rollup B 上的狀態和 Rollup A 上的收據,
擴展:添加跨 Rollup 傳輸
在匯總 B 上,wrapped-X 的所有者可以將其發送給包裝管理器,并附上發出不同收據的指令:「序列號為 R、源 Rollup A 和初始所有者 O1 的 NFT 剛剛移至 Rollup C,與想要的新所有者 O2」,
在 Rollup C 上,任何人都可以通過指定原始源 Rollup (在此示例中為 Rollup A)、序列號和初始所有者來制作封裝-X 對象,并且 Rollup C 上的此封裝-X 可以自由交易。但是,為了能夠撤回封裝-X,需要將 Rollup B 的收據發送到 Rollup A,
實際發生的事情是,當 NFT 從一個 Rollup 移動到另一個 Rollup 時,轉移鏈留下了一個收據鏈,該收據鏈中的每一個收據都被鏡像到 Rollup A 并在某個時間點按順序處理。未來,當其他 Rollup 的狀態最終確定時(這可以在短期內通過 Kate 承諾進行空間優化,從長遠來看,可以通過 ZK-SNARK 證明整個收據鏈),
為了讓用戶驗證封裝的 X 是合法的,他們需要驗證反映跨 Rollup 轉移的所有 Rollup 上的整個收據鏈(或者至少,自上一個收據以來已經鏡像到 Rollup 的收據鏈一種)。
此外請注意,該協議可以簡化:「提款」只是一個跨 Rollup 轉移 Rollup A,如果認識到 Rollup A 發布的特定序列號現在在 Rollup A 上,那么該封裝的合約可以直接兌換,
擴展 2:基礎鏈上的 gas 優化發行
所有 NFT 都可以以這樣的方式發行,即它們由以太坊基礎鏈上的密碼箱合約「擁有」,為了使這種 gas 高效,密碼箱合約將獲得生成一整套序列號并將它們傳輸到 Rollup 的功能,實際上,所有 NFT 都是預先創建的,但尚未分配給其中任何一個「意義」(想想:有 2**256 個尚未分化的「干細胞」NFT),并且它們被批量轉移到 Rollup,
「發行」的過程現在變成了賦予意義的過程。這可以通過在收據中傳遞「含義哈希」來完成,就像傳遞所有者的方式一樣:如果 NFT 沒有意義(它是一個「干細胞」),所有者可以為其分配一個含義,轉動它變成了一個「差異化」的 NFT,基礎鏈只有在驗證收據鏈后才知道 NFT 的含義,直到分配含義為止(實際上,收據驗證必須是 ZK-SNARK 的才能使其可行),
這允許所有 NFT 都在基礎鏈中「扎根」,而不是 Rollup,這對于處理 Rollup 中斷或以其他方式變得不可行以及應用需要永久遷移到其他域的情況很有用,