Vitalik: 跨rollup封装及迁移NFT提案

NFT生态在迅速增长,并且构成了以太坊链上gas消耗的重要部分。NFT生态系统仍处于年轻态并相对缺乏根基,并且由于NFT领域很大一部分属于非金融性质,因此更需要避免高额费用,这使得转移到layer2成为主要目标。然而,这就抛出了如何转移到layer2的问题。一个简单的提议是通过社会性协调转移到一个特定的rollup平台(例如Arbitrum,因为目前已经支持通用智能合约部署),但这样做也有几处劣势:所有目前支持EVM的主要rollup平台都有后门、中心化排序或其他辅助措施,将整个生态系统转移到单个rollup是有风险的,而rollup将如何升级这些功能还存在不确定性;NFT生态系统最终可能成长到单个rollup无法安全承载的体量;NFT生态系统的任何部分,甚至整个NFT生态系统,都不是封闭的;他们将需要与以太坊生态系统的其他部分进行互操作本文提出了一个使NFT友好跨rollup并使其迁移到整个layer2生态中的提案。提议解决方案一

NFT可以在单个rollup中进行初始注册,然后通过创建wrapperNFT(封装NFT)在不同的rollups(或者是底层链)中转移。NFTwrapping过程如下:在RollupA上,将NFT(设为X)发送到封装管理器合约(wrappermanagercontract),指定(i)目标Rollup和(ii)初始所有者。加密箱合约(lockboxcontract)存储一条记录,为X分配一个新的序列号R,并保存目标Rollup(设为B)和目标Rollup的初始所有者(设为01)。在RollupB上,任何人都可以使用RollupB上的封装管理器合约创建wrapperNFT。创建一个wrapperNFT需要指定源Rollup和序列号。要创建X的一个“有效”wrapperNFT,只能由指定的所有者和通过声明(R,A)作为序列号和源rollup完成。注意,有可能会创建一个指向无内容的无效wrapperNFT,而RollupB无法分辨有效和无效。封装管理器合约存储(序列号、源Rollup、初始所有者)值组并防止使用同一个值组创建多个wrapperNFT。要从加密箱中提出NFT,RollupB上的wrapped-X的当前所有者必须将其发送回封装管理器,后者发布收据说明“序列号为R、源rollupA和初始所有者01的NFT已经解除封装,以及潜在的新所有者02”。加密箱合约可以在收到rollupB上收据的证明之后将NFTX交由02,并根据其存储的信息检查序列号、源Rollup和初始所有者,并验证NFT的转移。请注意,提取NFT存在时间延迟,因为OptimisticRollup类解决方案的状态根需要大约一周的延迟才能最终确定,以便验证收据。到目前为止,更快地进行多跳的唯一方法是进行多层封装。

用户要验证wrappedX是否合法,需要自己验证RollupB上的状态和RollupA上的收据。拓展:增加跨rollup转账

在rollupB上,wrapped-X的所有者可以将其发送给封装管理器,并附上一条指令发布不同的收据“序列号为R、源RollupA和初始所有者为01的NFT刚刚转移到RollupC,以及潜在的新所有者02”。在RollupC上,任何人都可以通过指定原始源Rollup(在目前示例中为RollupA)、序列号和初始所有者来制作wrapped-X对象,并且RollupC上的此wrapped-X可以进行自由交易。但是一旦如此,提出wrapped-X需要发布跨rollup转移产生的所有收据(当前实例中为2个)。

请注意为了简单起见,“提款”本身不再是跨rollup的操作,而是是通过跨rollup完成的,在rollupA上创建wrapped-X(X的同一个rollup),然后单独进行一步unwrapping(解除封装)操作。实际上,当NFT从一个rollup转移到另一个rollup时,转移路径上的链会产生一串收据,该收据链中的每一个收据都被镜像到rollupA,并且在未来,当其他rollup的状态根最终确定时,这些收据将在某个时间点按序被处理(在短期内可以通过Kate承诺进行空间优化,长远来看可以通过ZK-SNARK证明整条收据链)。用户要验证wrappedX的真实性,需要验证所有路径rollup反映了跨rollup转移的整个收据链(或者至少是继上一个收据之后已经镜像到rollupA的收据链)。扩展2:在底层链上优化发行gas

所有NFT都可以这种方式发行:由以太坊底层链上的加密箱“拥有”。为了优化gas的效率,加密箱合约将具备生成一套序列号并将其传输到rollup的功能。实际上,所有NFT都是预先创建的,但尚未分配“意义”给其中任何一个(可以想象成有2*256个尚未分化的“干细胞”NFT),并且它们以批量形式转移到rollup。“发行”过程现在就变成了分配意义的过程。这可以通过在收据中传递“含义哈希”来完成,与所有者传递的形式相同:如果NFT没有意义(是一个"干细胞"),所有者可以为其分配一个含义,使其成为一个具有“差异性”的NFT。底层链只有在验证收据链后才知道NFT的含义,直到分配含义为止(实际上,收据验证必须是ZK-SNARK的才具备可行性)。这允许所有NFT都在底层链中“扎根”,而不是rollup。这对于处理rollup故障、因其他原因不可用或是应用需要永久迁移到其他域的情况来说很有帮助。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-6:629ms