简 介
Grin和BEAM是两个基于Mimblewimble协议的开源加密货币项目。Mimblewimble协议最初是由匿名用户使用笔名Tom Elvis Jedusor(《哈利·波特》系列书籍中伏地魔名字的法语翻译)提出的。该用户登录了一个比特币研究(bitcoin research)互联网中继聊天(IRC)频道,并发布了一个链接,指向托管在Tor隐藏服务上的一篇文本文章。本文为构建区块链式交易的新方法提供了基础,该交易提供了固有的隐私性,并具有通过压缩链的交易历史记录显着减小区块链大小的能力。最初的文章介绍了该协议的主要思想,但遗漏了实际实现所需的一些关键元素,甚至在密码公式中包含错误。安德鲁·珀尔斯特拉(Andrew Poelstra)发表了解决这些问题中许多问题的后续论文,并完善了Mimblewimble的核心概念,该概念已在Grin和BEAM项目中用于该协议的实际实施。
Mimblewimble协议描述了事务处理方如何使用其公钥/私钥对(用于证明事务输出的所有权)和交互选择的盲因子以交互方式构建有效事务。盲因子用于混淆每个参与者(包括彼此)之间参与者的公钥,并在该特定交易中向交易对方(除了交易对方)隐藏交易的价值。该协议还执行一个称为直通的过程,该过程通过消除中间事务来压缩事务。这改善了隐私并压缩了区块链上维护的数据量。这种直截了当的过程排除了诸如比特币中的通用脚本系统。但是安德鲁·珀尔斯特拉(Andrew Poelstra)提出了无脚本脚本的概念,该脚本利用Schnorr签名来构建适配器签名,该适配器签名允许对传统上用来实现脚本的许多行为进行编码。无脚本脚本启用了诸如支付渠道(如闪电网络)和原子交换之类的功能。
Grin和BEAM项目都实现了Mimblewimble协议,但都是从头开始构建的。Grin是用C ++的RUST和BEAM编写的。本报告描述了每个项目中使它们与众不同的一些方面。此外BEAM项目文档主要仅以俄语提供。在撰写本报告时,并非所有技术细节都适用于英语读者。因此随着项目的发展,本报告中的讨论很可能会过时。
该报告的结构如下:
1. 首先给出了一些具体的实现细节,并讨论了项目的特点。
2. 其次分析了项目工作证明(PoW)算法的差异。
3. 最后讨论了项目的治理模型。
Grin与BEAM的特点比较及实现
这两个项目是由不同的团队以不同的语言(Rust和C ++)从头开始独立构建的,因此原始实现会有很多差异。例如Grin使用Lightning内存映射数据库(LMDB)作为其嵌入式数据库,BEAM使用SQLite。尽管它们之间存在性能差异,但它们在功能上相似。Grin使用有向无环图(DAG)来表示其mempool以避免事务引用循环,而BEAM使用带逻辑的多集键值数据结构来实现其一些扩展特性。
从特性的角度来看,这两个项目展示了Mimblewimble固有的所有特性。Grin的既定目标是生成一个简单易维护的Mimblewimble协议实现。然而BEAM的实现包含了对Mimblewimble方法的一些修改,目的是为其实现提供一些独特的特性。在我们讨论将这两个项目分开的特性和设计元素之前,让我们先讨论一下这两个项目都实现了的一个有趣的特性。
Grin和BEAM都合并了一个Dandelion中继协议版本,该协议支持事务聚合。加密货币在隐私方面面临的一个主要突出挑战是,当交易添加到mempool并在网络上传播时,可以跟踪交易,并将这些交易链接到其原始IP地址。即使在具有强大交易私密性的网络上,此信息也可用于使用户匿名。Dandelion网络传播方案的提出是为了改善交易向网络传播过程中的隐私性。在这个方案中,事务传播分为两个阶段:匿名(或“stem”)阶段和传播(或“fluff”)阶段,如图1所示。
- 在stem(匿名性)阶段,事务只传播到当前节点的对等列表中随机选择的单个对等节点。在沿网络随机跳数之后,每个跳数仅传播到一个随机对等体,传播过程进入第二阶段。
- 在fluff(扩展)阶段,如在大多数网络中所发现的那样,事务使用full flood/diffusion方法进行传播。这种方法意味着在flood网络之前,事务已先传播到网络中的随机点,从而使跟踪其来源变得更加困难。
两个项目都采用了这种方法来处理Mimblewimble事务。Grin的实现允许在传播的stem阶段进行事务聚合和切入,从而在事务在fluff阶段传播之前为它们提供更大的匿名性。除了事务聚合和切入之外,BEAM还引入了“dummy”事务,这些事务被添加到stem阶段,以补偿实际事务不可用的情况。
Grin独特功能
Grin的目标是成为Mimblewimble区块链的简单且最少的参考实现。因此不打算包括许多功能来扩展核心Mimblewimble功能,如所讨论的。但是Grin实现确实包含一些有趣的实现选择,这些选择已在其不断增长的Github存储库的Wiki中进行了深入记录。
例如Grin实现了一种方法,使节点只下载部分历史记录就可以非常快速地同步区块链。进入网络的新节点将查询链的当前头区块,然后在水平上请求该区块头。在该示例中,水平线最初设置为当前磁头之前的5,000个块。然后节点检查是否有足够的数据来确认共识。如果没有共识,则该节点将扩大其视野,直到达成共识。届时,它将下载水平线区块的完整未用交易输出(UTXO)集。这种方法的确引入了一些安全风险,但是提供了缓解措施,其结果是,节点可以以较少的数量级数据同步到网络。
自从本文撰写以来(2018年10月),BEAM已发布其使用macroblocks进行快速节点同步的解决方案。macroblocks是BEAM节点定期创建的所有UTXO的完整状态。
BEAM独特特性
BEAM已经开始以多种方式扩展mimblewible的特征集。BEAM支持在UTXO上设置一个显式的潜伏期,这限制了它在创建之后花费在特定数量块上的能力。这与时间锁不同,时间锁可以防止在一定时间之前将事务添加到区块中。BEAM还支持传统的时间锁定功能,但还具有指定时间上限的功能,之后该事务将不再包含在区块中。此功能意味着,当事方可以确定,如果一定时间后交易未包含在主区块链的某个区块中,则该交易将永远不会出现。
BEAM的另一个独特特性是实现了一个可审计的钱包。企业要在特定的监管环境中运营,就需要向相关部门证明其合规性。BEAM提出了一种专为合规企业设计的钱包,它可以生成额外的公共/私人密钥对,专门用于审计目的。这些签名用于标记交易,以便只有被授予公钥的审计机构才能识别区块链上的那些交易,但不能使用此标记创建交易。这使企业可以在不损害公众隐私的情况下向给定的机构提供其交易的可见性。
BEAM对Dandelion的实现通过在stem阶段添加诱饵事务输出来提高隐私。每个此类输出的值为零,但与常规输出没有区别。在后期阶段(随机计算每个输出的块数),将utxo添加为新事务的输入,从而将其花费并从区块链中移除。
BEAM还提出了另一个旨在保持区块链尽可能紧凑的功能。在Mimblewimble中,随着交易的增加,执行切入,从而消除所有中间交易承诺。但是每个事务的事务内核都不会被删除。BEAM提出了一种重用这些事务内核来验证后续事务的方案。为了在不影响事务不可逆性原则的情况下使用现有内核,BEAM建议由对旧内核具有可见性的同一用户对旧内核应用乘数,并在新事务中使用乘数。为了激励以这种方式建立的交易,BEAM包括针对此类交易的费用退还模型。此功能将不属于初始版本。
在构建一个有效的Mimblewimble交易时,当事方需要进行协作以选择平衡的盲因素。这种交互式协商需要许多步骤,这意味着各方需要保持沟通以完成交易。Grin通过使用基于套接字的通道在“实时”会话中彼此直接连接的两方来促进此过程。这意味着双方都需要同时在线。BEAM已实施在BEAM全节点上运行的安全公告板系统(SBBS),以允许事务异步协商。
在使用Mimblewimble区块链时,要求双方互动参与构建交易可能是一个摩擦点。除了安全的BBS通信通道外,BEAM还计划支持单方交易,即交易中的收款人如果希望获得一定金额的付款,则可以构造其交易的一半,并将此一半构造的交易发送给付款人。然后付款人可以完成交易的构建并将其发布到区块链。在常规的Mimblewimble系统下,这是不可能的,因为这将涉及向交易对手揭示您的盲目因素。BEAM通过使用一个它称为kernel fusion的进程来解决这个问题,其中一个内核可以包含对另一个内核的引用,因此它只有在事务中同时存在两个内核时才有效。这样只有在事务中同时存在两个内核时,该引用才有效。这样收款人可以使用秘密的盲目因子和补偿盲目因子的内核来构建交易的一半,当支付者完成交易时必须将其包括在内。
这两个项目都使用了许多Merkle树结构来跟踪各个区块链的各个方面。这两个项目都记录了确切的树木及其记录的详细信息。但是BEAM对其某些树使用了Radix-Hash树结构。此结构是经过修改的Merkle树,也是二叉搜索树。这提供了许多标准Merkle树所不具备的功能,以及BEAM在其实现中所利用的功能。
在编写本文时(2019年5月),可以在代码中看到此处讨论的所有功能,但这不能保证它们可以正常工作。文献中提到的一些功能已计划在将来使用,但尚未实现。这些措施包括将签名的文本内容嵌入可用于记录合同文本的交易中,以及发行机密资产。
(PoW)工作证明挖掘算法
BEAM宣布将采用Equihash PoW挖掘算法,并将参数设置为n = 150,k = 5。Equihash在2016年被提出为一种难于存储的PoW算法,该算法在很大程度上依赖于存储器的使用来实现专用集成电路(ASIC)的电阻。其目标是产生一种算法,该算法将更有效地运行在消费者图形处理单元(GPU)上,而不是当时主要由Bitmain生产的不断增长的ASIC矿工领域。希望这将有助于使用该算法的加密货币分散采矿能力。Equihash抵制ASIC的想法是,当时,在ASIC中实现内存非常昂贵,GPU在计算Equihash PoW方面效率更高。这种ASIC抵抗持续了一段时间,但在2018年初,Bitmain发布了Equihash专用ASIC,其效率明显高于Zcash,Bitcoin Gold和Zencash等使用的Equihash配置的GPU。可以调整Equihash算法的参数,使其更加内存密集,从而使当前的asic和较老的GPU挖掘场过时,但BEAM是否会这样做还有待观察。
Grin最初选择使用新的Cuckoo Cycle PoW算法,由于受内存延迟的限制,该算法也据称具有ASIC抵抗性。这意味着该算法受内存带宽的约束,而不是受原始处理器速度的约束,希望它能使在商用硬件上进行挖掘成为可能。
在2018年8月,Grin团队在其主网启动时宣布,它已经意识到ASIC可能可用于Cuckoo循环算法。虽然承认ASIC采矿是不可避免的,但Grin担心当前的ASIC市场非常集中(即Bitmain),并且它希望在Grin成立之初就建立一个基层GPU采矿社区,为期两年。两年后,Grin希望ASIC不再是一种商品,而是去中心化产品。
为了解决这个问题,建议首先使用两种PoW算法:一种是ASIC Friendly(AF),另一种是ASIC Resistant(AR),然后在24小时内选择每个区块使用哪种PoW来平衡两种算法之间的挖掘回报。治理委员会于2018年9月25日决定采用称为布谷鸟循环(Cuckatoo Cycle)的布谷鸟循环算法的修改版本继续采用这种方法。推出的AF算法将是Cuckatoo32 +,它将逐渐增加其内存需求,以使旧的单芯片ASIC随着时间的推移而过时。尚未定义AR算法。
治理模式与货币政策
Grin和BEAM项目都是开源的,可以在Github上使用。Grin项目有75位贡献者,其中有8位贡献了绝大多数代码。BEAM有10位贡献者,其中有4位贡献了大部分代码(在撰写本文时)。这两个项目选择了不同的治理模式。BEAM选择建立一个包括核心开发人员的基金会来管理该项目。这是该领域大多数加密货币项目所采用的路线。Grin社区已决定不成立中央基金会,并就中央基金会的利弊进行了有趣的讨论。文档包含一个非常深入的讨论,它权衡了基金会可能服务的各种治理功能,并评估了每个用例。Grin社区得出的结论是,尽管基金会很有用,但它们并不是解决治理问题的唯一解决方案,因此选择保留一个完全分散的社区驱动项目.当前决策是在Gitter与社区成员召开的定期治理会议上做出的,讨论议程并批准决策。这些会议的议程和会议记录可在Grin论坛的管理部分找到。此类会议成果的一个例子可以在中看到。
这两个项目都不会进行首次投币发行(ICO)或预售,但这两个项目也有不同的融资模式。BEAM成立了一家有限责任公司(LLC),并吸引了投资者参与其首轮非盈利BEAM基金会,该基金会将在启动后的第一年内接管协议的管理工作。该基金会的目标是支持BEAM的维护和进一步发展、促进相关的密码研究、支持金融隐私领域的意识和教育、支持邻近领域的学术工作。在行业中,这种库存机制称为开发税。Grin不会对采矿奖励征税,而是依靠社区参与和社区资金。Grin项目确实接受财政支持,但这些资助活动是根据他们的“社区资助原则”进行的,将在“按需”的基础上进行。一个活动将指定它要实现的特定需求(例如“X明年的托管费”)和资金将由负责该活动的社区成员获得。这将提供100%关于谁负责接收资金的可见性。融资活动的一个例子是Yeastlume开展的开发商融资活动,为他在2018年10月至2019年2月期间全职参与该项目提供资金。
就这两个项目的货币政策而言,BEAM表示将使用通货紧缩模型,将其采矿奖励定期减半,BEAM的最大供应量为262,800,000个硬币。BEAM将以每个区块100个代币开始。第一次减半将在一年后发生,然后每四年减半一次。Grin选择了一种通胀模型,在这种模型中,区块报酬将保持不变,在中提出了这种方法的论点。随着供应量的增加,这种方法将渐渐趋向于零稀释,而不是强制执行固定的供应量。Grin还没有具体说明其采矿奖励或费用结构,但根据其目前的文件,它正计划每区块60 Grin的奖励。这两个项目都没有就如何安排费用做出最终决定,但Grin项目已经开始探索如何使用“每分钟奖励费用”这一指标来设定费用基准。
结论,意见和建议
总之Grin和BEAM是两个正在实施Mimblewimble区块链方案的开源项目。这两个项目都是白手起家的。Grin使用Rust,而BEAM使用C ++;因此它们的设计和实现存在许多技术差异。但是从功能角度来看,两个项目都将支持Mimblewimble的所有核心功能。每个项目确实包含一些独特的功能,但是由于Grin的目标是生成Mimblewimble的简约实现,因此扩展Mimblewimble的大多数独特功能都在BEAM项目中。下面的列表总结了两个项目之间的功能异同。
1. 相似之处:
-
核心Mimblewimble功能集。
-
Dandelion 中继协议。
2. Grin独特功能:
-
部分历史同步。
-
Mempool的DAG表示,以防止重复的UTXOs和循环事务引用。
3. BEAM的独特功能:
-
托管在节点上的安全BBS,用于在钱包之间建立通信。消除了发送方和接收方同时在线的需求。
-
Dandelion stem期使用诱饵输出。诱饵输出后来被用来避免在区块链上混乱。
4. 显式UTXO潜伏期。
-
具有最小和最大阈值的时间锁。
-
可审核交易是路线图的一部分。
-
非交互式支付的单面交易结构。
-
使用基数哈希树。
这两个项目都还很年轻。在撰写本报告时(2019年5月),两者都仍处于测试网阶段,并且它们的许多核心设计选择尚未构建或测试。BEAM Wiki的大部分内容仍为俄语,因此很可能有些细节我们还不了解。