Mimblewimble 协议的实现,这是一个不同的区块链设计方式,于2016年7月匿名分享。
但它与其他区块链设计有何不同?MWC 的区块链实际上只是一个大的单一交易。第一次听到时,这似乎没有任何意义,并且很难相信,但事实证明这是真的。我们将探索 MWC 交易的世界,以及它们如何结合在一起形成区块链。
我们将故意简化一些内容,以免你在细节中迷失,但我们保证这不会是任何太重要的内容。目的是解释协议的宏观图景,以及为什么许多密码学家认为这是迄今为止最有趣的区块链设计。
保密交易简介
MWC 建立在比特币领域的许多先前研究基础上。它在设计核心使用了保密交易,这意味着所有金额都是隐藏的。但它并未按照原始论文中描述的方式使用这个想法,而是对其进行了改进。在保密交易中,输出对任何观察者来说只是一些随机字符和数字,例如 09fe4d4d2aa97ba9c52ea494c967bddb12d1e394bbe91692e53。
Mimblewimble 的不同之处在于,这个随机序列包含了金额和所有者的信息,但不透露其中的任何一个——在原始论文中,它只包含金额的信息。在 Mimblewimble 中,没有脚本或地址的概念,输出只是一个单一的随机字符序列。保密交易的主要思想是证明输入金额的总和减去输出金额的总和为零,但以不透露金额的方式实现这种平衡——每笔比特币交易也必须遵循这一平衡(为了简化,我们忽略费用)。比特币通过公开金额来证明这一点,以便任何人都可以检查交易是否平衡,并且没有创造新的货币。我们不会深入探讨保密交易背后的密码学,重要的是要知道它在不透露金额的情况下证明了交易的平衡有效。既然我们知道了输出的样子,让我们来看看 MWC 交易的样子。
在不透露金额的情况下证明 Σinput.amount - Σoutput.amount = 0 时会有一些麻烦,因为有人可能会尝试在这个随机序列中编码一个负金额,从而可以凭空创造出货币。为了防止这种情况,需要证明输出隐藏的金额在一定的非负数范围内,但必须以不透露金额本身的方式进行。这通过一种被称为零知识范围证明的东西来实现,每个输出都带有这种范围证明。我们在这篇文章中不会讨论范围证明,因为它们对理解 Mimblewimble 没有帮助,只需要知道它们需要包括在内。
MWC 交易
MWC 中的交易由3个集合组成。一个输入集合,一个输出集合和一个内核集合。我们已经熟悉比特币的输出概念——它可以被看作是一个公开可见的有主人的钱堆。输入实际上只是一个被花费的输出,表示是相同的。如前一节所述,输出(因此也包括输入)不显示其金额,因此可以将其视为金额对任何人都不可见的钱袋。内核是在 Mimblewimble 白皮书中引入的东西,但作者在文中称其为超额。我们不需要知道内核的样子,只需要知道它作为交易有效的证明。交易的内核:
- 证明交易不会丢失任何硬币或凭空创造新的硬币 - Σinput.amount - Σoutput.amount = 0
- 证明交易的真实性,意味着所有输入和输出的所有者都同意这笔交易
这非常巧妙,我们有一个称为内核的东西,它处理了交易中的所有重要内容!
内核是一个非常小的数据片段,约100字节,只包含一个随机曲线点和一个签名。我们不需要了解这些细节才能理解 Mimblewimble 和 MWC 的主要思想,所以我们略过了内部细节,但这100字节的数据同时证明了交易的非通胀性和真实性!

如图所示,这是一笔交易,包含一个输入、两个输出和一个支付0.011费用的内核。观察这笔交易的人无法分辨发送者或接收者是谁,也不知道输入和输出的金额。他们可能会知道一些关于输入和输出的元数据,但仅通过查看交易是不可能知道的。
交易聚合
MWC 允许我们将两笔交易连接在一起以获得单笔交易。我们称之为交易聚合,但在比特币领域,这被称为 CoinJoin。这个 CoinJoin 比比特币网络上的更强大,因为你不需要匹配金额,因为它们是不可见的,并且不需要交易所有者一起进行互动。 这意味着任何看到两笔 MWC 交易的人都可以将它们连接在一起成为一笔交易。聚合后的交易,无法被没有看到聚合前交易的人分解。
假设我们有以下两笔交易

我们可以将它们聚合以获得一笔新的交易,这无法被分解为两笔交易(因为我们在聚合前看到了这些交易)。

现在我们有了一笔交易。注意输入、输出和内核的顺序有些改变。这是因为它们按升序排序,以防止猜测哪些可能是同一笔交易的一部分,例如,如果我们只是将它们添加在末尾,那么最后两个输出和最后一个输入很可能来自同一笔交易。现在我们有两个内核,这是可以的,因为交易有一组内核,当我们聚合两笔有效的交易时,它们的内核将作为证明交易有效的证据——我们需要两个内核来证明这笔聚合交易的有效性。由于结果只是另一笔 MWC 交易,我们可以将其与新交易聚合,以获得更大的交易——我们可以多次重复此聚合过程。
这使我们能够将一个块中的所有交易聚合为一笔交易。我们不再需要将块表示为一系列交易,只需说它包含一组输入、一组输出和一组内核即可。块本身只是几个头和一笔交易!
交易简化
在比特币中,新加入网络的节点需要下载所有交易的历史并在本地重放,以再现分类账的状态。Mimblewimble 和 MWC 改进了这一点。让我们看看在这种新的区块链设计中进行交易时会发生什么。
假设我们有以下交易

现在考虑另一笔交易,它花费了第一笔交易中的一个输出

现在我们将这两笔交易合并

啊?这不是我们期望的结果,对吗?绿色的输入和输出去哪儿了?!事实证明,当一个输出被花费时,我们可以删除匹配的输入和输出,并完全忘记它们,就好像它们从未存在过,交易仍然有效!这意味着我们可以在交易登记在区块链之前进行花费和遗忘。这种将交易简化为更简单的形式的过程,其中我们删除匹配的输入和输出,被称为交易简化,在 Bitcointalk 论坛上由 Greg Maxwell 首次提出。我们已经知道一个区块是一个单一的交易,因此我们可以在发布区块之前忘记匹配的输入和输出的存在,事实上,MWC 认为一个区块是无效的,除非已进行交易简化。
最后,我们终于到了见证真正魔法的时刻。
整个区块链是一笔交易
正如我们在开头提到的,整个 MWC 区块链是一笔大的交易。我们已经知道每个区块是一笔交易,并且任何两笔交易都可以聚合在一起。这意味着我们可以将所有区块交易聚合成一笔大的交易。但由于这笔交易包含了整个区块链历史,这意味着交易历史中每个花费的输出都是之前创建的输出。这意味着在区块链历史中,每个花费的输出都可以完全遗忘,就像它们从未存在过一样,我们只需要保留所有交易的内核!如果我们要验证这个包含整个区块链历史的简化交易