作者:lattice.xyz
翻译:MetaCat
排版:MetaCat

几周前,我们(Lattice)宣布完成了Open Zeppelin 的 MUD v2 审计,审计范围包括 MUD 的合约和代码生成部分。经过对客户端集成的一些最终完善后,我们发布了稳定的 MUD  2.0.0 版本!

这是一件大事。MUD v2 不会再有重大变化。我们遵循 semver(语义化版本控制),这意味着每个新功能都将作为新的次要版本(即 2.1.0)发布,小的内部补丁将作为补丁版本(即 2.0.1)发布。即使我们添加更多功能并继续改进,MUD v2 也将始终向后兼容。

我们构建MUD的原因(以及你选择使用它的原因)没有改变:我们相信 MUD 是构建链上应用程序的最佳开源框架。从区块链和客户端之间的自动同步、开箱即用的索引器、轻松升级的合约,以及对第三方插件和集成的即时支持,MUD 提供了构建可扩展的链上应用程序所需的一切。

随着稳定版的发布,MUD 的辅助轮已经关闭,我们正式推荐 MUD v2 进行生产环境使用。

不过,这仅仅是开始。我们将迎来非常激动人心的几个月,更多 MUD 功能即将推出,Redstone 主网(MUD 应用程序之家)也将发布。目前,我们正在与 Index Supply 合作开发更强大的索引器、深度帐户抽象集成以及为你的用户提供更好的 Onboarding 流程,无论他们的钱包是什么(或者是否有钱包)。我们将很快向你通报这些版本的最新情况。

如果没有 MUD 的早期采用者为我们提供持续有用且可操作的反馈,我们就无法做到这一点。感谢 Project Awakening / CCP Games、Sky Strife、Biomes、Primodium、Moving Castles、Small Brain Games、DEAR、Gaul 等团队,他们构建了令人难以置信的链上应用程序,并帮助我们提升了 MUD 开发者体验。对于所有 MUD 用户,我们非常感谢你选择我们来构建应用程序。

最后,我们要感谢 MUD 的所有贡献者:感谢您与我们一起公开构建。

MUD v2 简介

在设计 MUD v2 时,我们有两个重点:

焦点一:让构建和运营链上应用程序变得超级简单。通过 MUD v2,我们消除了索引和设置事件系统等繁琐的工作,并简化了合约升级。MUD 在这方面出人意料地有效。

焦点二:通过部署代码并向现有链上世界添加逻辑,使任何第三方开发人员能够在现有应用程序之上进行构建。我们认为 MUD 的这一功能将开辟由社区构建的新的应用程序类别,这些应用程序不会产生协作开发的额外开销,并使以太坊和 EVM 更接近其最初的可组合性承诺。

为了实现这些重点,我们在去年为 MUD v2 构建了两项主要技术:Store 和 World。

EVM 的新存储引擎:STORE

为了更轻松地构建链上应用程序,我们抛弃了在 Solidity 编译器中实现的存储模型,并将其替换为可由多个合约使用的运行时定义的存储系统。这个引擎称为 Store。我们喜欢将其视为 EVM 的 SQLite 时刻。

在这种情况下,“运行时定义”是指在合约编译和部署后可以扩展的存储系统。鉴于 EVM 具有不可变的字节码,在编译时将应用程序的存储访问模式包含在合约的字节码中似乎是合理的,这就是 Solidity 编译器所做的。但如果在 10 年前,这可能是处理 EVM 状态的合理方法,但现在却变成了严重的拐杖。链上部署规模不断扩大:它们跨越多个合约,由多个开发人员编写,并随着时间的推移进行升级。

我们认为是时候将存储管理从编译器转移到,作为应用程序和 EVM 状态之间的中间件的内核中,就像早期操作系统,通过分段状态和交错允许多个应用程序在同一台计算机上运行一样 CPU 访问。

Store 使你能够在链上做一些你以前不知道的新事情。用 Store 术语来说,EVM storage 中存储的数据结构称为表。它们与关系数据库中的表非常相似。作为其强大功能的一个例子,Store 允许你在运行时添加新表,而无需重新部署合约,或使用一些令人毛骨悚然的存储间隙(storage gaps)或命名空间存储(namespaced storage)进行升级。就像普通计算机的内核一样,Store 将通过强制该状态的使用者,通过内核上的系统调用来保护你的状态免受存储损坏。通过这些系统调用,Store 还可以在每次更新特定记录时调用一段代码,例如,以便对该数据段实施特定检查或许可。

Store 会针对状态的每次更改发出事件,这使得客户端应用程序能够在每个块上保持更新,并使索引器能够重建存储的状态。永远不要再编写 Solidity 事件,忘记 the Graph,并删除大块客户端代码,在加载时用 view 函数调用轰炸 RPC,并订阅十几个事件以保持同步。

为了使 Onboarding 尽可能轻松,Store 是一个独立的库。它是任何智能合约中 Solidity 存储系统的直接替代品。Store 不会强迫应用程序重新思考它们的操作和设计方式。

构建链上应用程序的新方式:WORLD

通过 MUD v2,我们的目标之一是为开发者和社区提供一条不同的路径来构建和扩展链上应用程序。为了引入这种新的链上构建方式,我们创建了 World:一个构建在 Store 之上的智能合约框架。

World 是 EVM 应用程序的新范例。你可以把它想象成一台社区计算机:它作为一个多人游戏内核(Kernel)而存在,接受来自链上任何人的贡献,无论是代码还是状态。

添加到 World 的智能合约是无状态的,所有记录和 tables 都由 World 控制和保护。任何智能合约都不会导致存储损坏或访问未经授权的状态区域。

World 有一个可编程的访问控制,可以让任何状态或逻辑,控制哪个帐户(或其他逻辑)可以访问它们。这使得建立信任层次结构成为可能,并让不受信任的智能合约读取状态并参与规则,而不让它们直接写入存储。

这种信任层次结构,使团队能够定义一组可以由社区中的任何人构建的链上数字物理法则(digital physics):端到端执行创建、修改和销毁的规则。World 会阻止在未执行相应规则的情况下发生修改。没有人可以从任何地方铸造代币或将链上宇宙飞船传送到宇宙的另一边。

World 上也有本地代理(delegation)。人们可以将其视为 ERC20代币标准中 transferFrom() 的超通用版:transferFrom 允许智能合约代表用户触发代币转账,最高可达特定的代币限额。

World 将这种许可概念推广到任何链上操作:World 内的任何实体,无论是人类、DAO 还是其他链上合约,只要满足特定条件,都可以让其他人代表他们执行操作。例如,这使得链上世界中的玩家,能够将其资产的管理委托给交易市场或链下机器人。他们还可以使用它与其他实体进行无托管交易或复杂交易。

Building on World 为你提供所有这些开箱即用的功能。

使用 MUD V2 组合的链上世界

Store 和 World 共同引入了一项重要功能:使第三方开发人员能够以安全的方式,向正在运行的应用程序添加代码对于任何智能合约系统、EVM 或其他系统来说,允许社区构建一个共享世界是前所未有的。我们相信 MUD v2 的这一核心特性,将对区块链生态系统产生持久影响,并且需要时间来充分理解这一发展所带来的新数字结构。

看到早期的 MUD v2 用户在他们的应用程序中充分利用这种模式,对我们来说是非常有益的。使用 MUD v2,你可以按照开发者文档将代码“上传”到Primodium (一款链上太空征服和制造游戏)中。如果你足够幸运能够参加他们的一场黑客松,你可以在觉醒计划(Project Awakening)的物理基础上进行构建,以便通过与其他玩家合作来增加你的生存机会。如果你不喜欢太空工程,Sky Strife 和 Biomes AW 可以让你在世界中创建自己的自定义激励系统,以击败玩家、摧毁特定单位或为你的联盟积累足够的资源。

World 引入的新构建方式让我们离自治世界(AW)的愿景又近了一步。现在可以创建一组数字物理法则,来确定世界如何创建和转变,并随后销毁对其自身的根访问;永远奉行一套规范的规则,而不限制功能集:世界上的任何人:人类和机器,都可以与这些规则交互,并在它们之上构建社会和工程装置。

我们很高兴推出 MUD 的第二个主要版本,并希望你会发现它很有价值。链上见!

原文链接:https://lattice.xyz/blog/mud-2-is-ready