來源 | ethresear.ch

作者 | Vitalik Buterin

NFT 生態在迅速增長,並且構成了以太坊鏈上 gas 消耗的重要部分。NFT 生態系統仍處於年輕態並相對缺乏根基,並且由於 NFT 領域很大一部分屬於非金融性質,因此更需要避免高額費用,這使 NFT 成爲轉移到 Layer2 的主要目標,但如何轉移呢?

一個簡單的提議是通過社會性協調轉移到一個特定的 Rollup 平臺(例如 Arbitrum,因其目前已經支持通用智能合約部署),但這樣做也有幾處劣勢:

  • 所有目前支持 EVM 的主要 Rollup 平臺都有後門、中心化排序或其他輔助措施,將整個生態系統轉移到單個 Rollup 是有風險的,而 Rollup 將如何升級這些功能還存在不確定性;

  • NFT 生態系統最終可能成長到單個 Rollup 無法安全承載的體量;

  • NFT 生態系統的任何部分,甚至整個 NFT 生態系統,都不是封閉的;他們將需要與以太坊生態系統的其他部分進行互操作;

  • 本文提出了一個使 NFT 友好跨 Rollup 並使其遷移到整個 Layer2 生態中的提案。

提議解決方案一

NFT 可以在單個 Rollup 中進行初始註冊,然後通過創建 wrapper NFT (封裝 NFT)在不同的 Rollups (或者是底層鏈) 中轉移。

NFT wrapping 過程如下:

  1. 在 Rollup A 上,將 NFT (設爲 X)發送到封裝管理器合約(wrapper manager contract),指定(i)目標 Rollup 和(ii)初始所有者。加密箱合約(lockbox contract)存儲一條記錄,爲 X 分配一個新的序列號 R,並保存目標 Rollup (設爲 B)和目標 Rollup 的初始所有者(設爲 01)。

  2. 在 Rollup B 上,任何人都可以使用 Rollup B 上的封裝管理器合約創建 wrapper NFT。創建一個 wrapper NFT 需要指定源 Rollup 和序列號。要創建 X 的一個「有效」 wrapper NFT,只能由指定的所有者和通過聲明(R, A)作爲序列號和源 Rollup 完成。注意,有可能會創建一個指向無內容的無效 wrapper NFT,而 Rollup B 無法分辨有效和無效。封裝管理器合約存儲(序列號、源 Rollup、初始所有者)值組並防止使用同一個值組創建多個 wrapper NFT。

  3. 要從加密箱中提出 NFT,Rollup B 上 wrapped-X 的當前所有者必須將其發送回封裝管理器,後者發佈收據說明「序列號爲 R、源 Rollup A 和初始所有者 01 的 NFT 已經解除封裝,以及潛在的新所有者 02」。

  4. 加密箱合約可以在收到 Rollup B 上收據的證明之後將 NFT X 交由 02,並根據其存儲的信息檢查序列號、源 Rollup 和初始所有者,並驗證 NFT 的轉移。

Vitalik: 跨 Rollup 封裝及遷移 NFT

Vitalik: 跨 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 個)。

Vitalik: 跨 Rollup 封裝及遷移 NFT

Vitalik: 跨 Rollup 封裝及遷移 NFT

請注意,爲了簡單起見,「提款」本身不再是跨 Rollup 的操作,而是通過跨 Rollup 完成的,在 Rollup A 上創建 wrapped-X (X 的同一個 Rollup),然後單獨進行一步 unwrapping (解除封裝) 操作。

實際上,當 NFT 從一個 Rollup 轉移到另一個 Rollup 時,轉移路徑上的鏈會產生一串收據,該收據鏈中的每一個收據都被鏡像到 Rollup A,並且在未來,當其他 Rollup 的狀態根最終確定時,這些收據將在某個時間點按序被處理(在短期內可以通過 Kate 承諾進行空間優化,長遠來看可以通過 ZK-SNARK 證明整條收據鏈)。

用戶要驗證 wrapped X 的真實性,需要驗證 反映跨 Rollup 轉移的所有 Rollup 上的整個收據鏈(或者至少是繼上一個收據之後已經鏡像到 Rollup A 的收據鏈)。

擴展 2:在底層鏈上優化發行 gas

所有 NFT 都可以這種方式發行:由以太坊底層鏈上的加密箱「擁有」。爲了優化 gas 的效率,加密箱合約將具備生成一套序列號並將其傳輸到 Rollup 的功能。實際上,所有 NFT 都是預先創建的,但尚未賦予「意義」給其中任何一個(可以想象成有 2*256 個尚未分化的「幹細胞」NFT),並且它們被批量轉移到 Rollup。

「發行」過程現在就變成了賦予意義的過程。這可以通過在收據中傳遞「含義哈希」來完成,與所有者傳遞的形式相同:如果 NFT 沒有意義(是一個「幹細胞」),所有者可以爲其賦予一個含義,使其成爲一個具有「差異性」的 NFT。底層鏈只有在驗證收據鏈後才知道 NFT 的含義,直到賦予含義爲止(實際上,收據驗證必須是 ZK-SNARK 的才具備可行性)。

這允許所有 NFT 都在底層鏈中「紮根」,而不是 Rollup。這對於處理 Rollup 故障,因其他原因不可用或是應用需要永久遷移到其他域的情況來說很有幫助。

- THE END -