原文作者:LATTICE
几周前,我们宣布MUD v2完成了由Open Zeppelin主持的审计,审计范围包括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(https://indexsupply.com/)合作开发更为强大的索引器,进行深度的账户抽象集成,并为用户提供更顺畅的登陆体验,不论他们使用什么钱包(或者他们是否拥有钱包)。我们将很快向你报告这些新功能的发布计划。
如果不是MUD的早期采用者给予我们的持续、有价值的反馈,我们无法取得如此进展。特别感谢Project Awakening / CCP Games、Sky Strife、Biomes、Primodium、Moving Castles、Small Brain Games、DEAR、Gaul等团队,他们不仅构建了出色的全链上应用,还帮助我们极大地提升了MUD的开发者体验。感谢所有选择使用MUD来构建应用的用户,我们对你的信任和支持深表感激。
最后,我们要向所有为MUD做出贡献的人表示感谢:感谢你与我们共同在这个开放的平台上开发和成长。
01.MUD V2简介
在开发MUD v2的过程中,我们专注于实现两个主要目标:
目标一:最大程度简化全链上应用的开发及运营成本。MUD v2消除了诸如构建索引、设置事件系统(event system)等繁琐工作,并简化了合约升级流程。在这方面,MUD表现得出奇的简单:他非常有效。
目标二:使任何第三方开发者都可以基于现有的应用进行开发:通过在现有的全链上世界中部署代码和添加逻辑。我们认为,MUD的这项功能将开启由社区构建的新应用类别,这些应用无需付出额外开销便可协同开发,并让以太坊和以太坊虚拟机(EVM)更易实现其本应具有的可组合性。
为了实现这些目标,我们在过去一年中为MUD v2开发了两项主要技术:Store和World。
02.新的EVM存储引擎:Store
为了简化全链上应用的开发过程,我们放弃了嵌入到Solidity编译器中的传统存储模型,转而采用了一种新的存储系统,这种系统由runtime定义,能够被多个合约所共同使用。这种新引擎名为Store,我们认为这将是EVM的一个重要转折点,就像SQLite在数据库领域的地位一样。
“由runtime定义”意味着该存储系统可以在合约编译和部署后进行扩展。考虑到EVM的字节码是不可变的,因此在编译时在合约的字节码中包含应用的存储访问模式看起来是合理的,这正是Solidity编译器的做法。
然而,这种处理EVM状态的方式,在大约10年前或许合理,但在今天已成为一个限制。链上部署的应用规模日益增大,他们跨越多个合约,由众多开发者编写,并随时间推进不断升级。
我们认为现在是时候将存储管理从编译器中剥离出来,转而采用一个充当应用与EVM状态之间中间层的内核,这与早期操作系统允许多个应用在同一台计算机上运行的方式类似,通过分段状态(segmenting the state)和交错CPU访问(interleaving CPU access)来实现。
Store可以让你在链上完成一些以前无法想象的任务。在Store的术语中,存储在EVM中的数据结构被称为“表(table)”。他们与关系型数据库中的表格非常相似。Store的强大之处在于,你可以在runtime添加新的表,而无需重新部署你的合约或执行带有某些复杂的storage gap(https://docs.openzeppelin.com/contracts/3.x/upgradeable#storage_gaps)或namespaced storage(https://eips.ethereum.org/EIPS/eip-7201)升级。
就像常规计算机的内核,Store通过强制访问状态的用户通过Kernel进行系统调用,从而保护你的状态不受存储损坏。通过这些系统调用,Store还可以每次在特定记录更新时调用一段代码,如为了在数据上实施特定的检查或权限控制。
Store每次在状态发生变更时都会发出事件(emit event),这使得客户端应用能够在每个区块上保持最新状态,并允许索引器重建Store的状态。这样你就可以不再编写Solidity事件、忘掉the Graph,并删除那些在加载时通过view function call以及订阅一堆事件,最终使得RPC过载的一大坨客户端代码。
为了使onboarding过程尽可能无痛,Store被设计为一个独立的库。他可以直接替换任何智能合约中的Solidity存储系统,Store不会强迫开发者重新考虑他们的应用操作和设计方式。
03.构建全链上应用的新范式:World
在MUD v2中,我们引入了一种新的全链上应用开发方式:World。World是一个智能合约框架,建立在Store之上,旨在为开发者和社区提供一个全新的方式来开发并扩展全链上应用。
World代表了EVM应用的新范式,可以被视为一台社区计算机:他作为一种多用户内核,接受链上任何人的代码或状态贡献。
在World中,添加的智能合约是无状态的,所有的记录和表格都由World控制和保护,确保没有任何智能合约能够引发存储损坏(storage corruption)或访问未经授权的状态区域。
World拥有可编程的访问管理功能,能够让任何状态或逻辑单元指定哪个账户(或逻辑单元)有权访问他们。这使得在链上构建信任层级(hierarchy of trust)成为可能,允许不受信任的智能合约在不直接写入存储的情况下读取状态并参与规则的制定。
通过这种信任层级,团队可以在链上定义一套“数字物理规则”,任何社区成员都可以基于这些规则构建应用,实现创建、修改和销毁过程的全面规范化。World确保任何修改都必须按照对应的规则执行,从而避免了凭空发行的代币或在链上空间中随意将飞船传送到宇宙另一端的情况发生。
World还内置了委托功能。这可以视为ERC20代币标准中的transferFrom功能的高度泛化版本,transferFrom允许智能合约代表用户进行代币转移,直到达到特定的数量上限。
World将这种配额概念扩展到任何链上行为:World内的任何实体——无论是人类、DAO或是其他链上合约——都可以在满足特定条件时,授权其他实体代表自己执行操作。例如,这将允许链上世界中的玩家可以委托市场或离线机器人管理他们的资产,或者进行无需托管的交易或实现与其他实体间的复杂交易。
04.MUD v2将开启具有可组合性的链上世界
Store和World共同带来了一项重要能力:允许第三方开发者以安全的方式向正在运行的应用添加代码。此前,无论是EVM还是其他智能合约系统,社区都未能在共享的世界上构建应用。我们认为,MUD v2的这一核心特性将对区块链生态系统产生深远的影响,我们需要更多的时间来完全理解本次更新所带来的新型数字架构。
看到早期MUD v2用户在他们的应用中深度利用这一模式非常令我们鼓舞。通过MUD v2,只需遵循其开发文档,你便可以在Primodium(一个全链上的太空征服与建造游戏)中“上传代码”。如果你有幸参加他们的黑客马拉松,你就可以在Project Awakening的物理规则之上进行开发,以增加与其他玩家合作生存的可能性。如果太空工程不是你的兴趣所在,Sky Strife和Biomes AW则允许你在世界中创造自己的定制激励系统,击败对手、摧毁特定单位或为联盟积累资源。
World所引入的开发新范式,使我们更接近实现自主世界的愿景。现在,可以创建一套决定世界如何形成和发展的数字物理系统,然后销毁对这些规则的底层访问权限,永久确立一套规范规则,而不限制功能集:世界中的任何一员——无论是人类还是机器——都可以与这些规则互动,并在其基础上构建社会甚至进行工程开发。
我们很高兴推出MUD的第二个重要版本,并且希望你认可他的价值。期待在链上与你相遇!
MUD 网站:https://mud.dev/
Twitter:https://twitter.com/mud_dev
YouTube:https://www.youtube.com/@latticexyz
Careers:https://lattice.xyz/careers
Discord:https://lattice.xyz/discord
关于我们:
FunBlocks是一家聚焦全链游戏(Fully On-Chain Game)与自主世界(Autonomous World)最新发展动态的媒体。我们相信为玩家创造快乐才是区块链游戏的价值所在!