.. _brief-introduction: Mud框架介绍 ============================= 引用自 `mud.dev `_: *"MUD is a framework for ambitious onchain applications. It reduces the complexity of building Ethereum apps with a tightly integrated software stack. It's open source and free to use."* MUD是一个开源、免费的用于构建伟大链上应用的框架。它通过紧密集成的软件堆栈降低了构建以太坊应用的复杂性。 *"MUD apps are autonomous worlds, infinitely extendable by default. They come with access control, upgradability, hooks, plugins, and a suite of great developer tools."* MUD应用是自主的世界,默认情况下可以无限扩展。它们配备了访问控制、可升级性、钩子、插件,以及一套出色的开发者工具。 如果你是一个合约开发者 --------------------------------------------- .. important:: 如果你的去中心化应用(dapp)不需要复杂的逻辑或者复杂的数据存储,那么使用原生 ``Solidity`` 实现将是最佳选择。例如,一个简单的同质化代币 ``ERC20`` 。 虽然Mud为你提供了便捷友好的数据读写、系统集成和权限控制,但它也可能给你带来一些麻烦,比如最直接的一点,可能会消耗更多的gas。 **但是问题的答案不是绝对的,尝试一下,然后做出你自己的决定。** 当我们在写一个单一合约时,安全是我们最优先考虑的问题。在保证业务逻辑实现正确的前提下,需要对每个公开借口的调用权限进行控制,例如防止重入。 因为以太坊网络限制了一个智能合约的大小,当我们的业务逻辑逐渐复杂到一个单一合约无法满足时,我们开始重构,将逻辑拆分到不同的智能合约。 我们甚至还需要一些额外的工作,保证这些合约之间的调用权限,以及数据的一致性。 如果我们的项目合约不具备可升级性,那么当我们处于快速迭代的阶段时,我们将不得不在每一次迭代时重新部署整个项目合约。我们开始考虑引入可升级性, 将数据和逻辑进行分离,并允许业务逻辑的升级。此时Diamond框架将会是我们的一个可能选择. Dark forest就是一个使用Diamond构建构建的复杂的链上游戏项目。 Diamon框架允许业务逻辑像钻石的每一个面一样进行包括添加、删除、替换等操作,并且所有的面代表的业务逻辑共享一个数据存储,很好的保证了数据的一致性。 但这就是终点吗?远不是。 Diamond确如钻石般光鲜亮丽,是一个非常好的,易用的合约框架。但它太原始了,每次都需要去打磨它的每一个面。换句话说,Diamon框架过于通用以至于缺少复用性。 就好像别人告诉我们一种解决问题的思路,但通往答案的每一步都要我们自己去思考并实现。所以有没有可能有一种解题的通用模式或者可以套用的公式? Mud就像一个在Diamon框架之上发展出来的更高级的合约框架,它保留了Diamon框架优点的同时,引入了更多的开发者熟知的特性,例如:插件,钩子,权限控制等。 这些特性使得我们可以更加方便的构建一个复杂的链上应用。