针对Grin设计的取舍评判——真相OR谣言

|特别感谢为 GrinUp 本篇文章的翻译做出贡献的志愿者:Pavel Liu

|原文作者:Tari Labs

|原文地址:https://bit.ly/2LF0KrC

引言

Grin 是一种使用 MimbleWimble 加密协议并通过 Cuckatoo 算法进行 PoW 挖矿计算的加密货币。Grin 项目的主要设计目标在于:隐私性、交易可扩展性和设计简易性以促进 Grin 的源代码能够得到长期的维护改进 [1]。

在 Grin 项目的开发过程中,开发人员已经收到了来自社区的关于他们所做的许多设计和决策的批评意见。本文就将研究其中的一些批评,并确定这些批评的声音是否是真实的或者是否有必要去关注。我们将就如何改善或解决这些问题提出一些建议。

(所以,你觉得生命中最重要的是什么?嗯……我猜是要活的快乐?你个傻吊,是咖啡!)

本文也将深入研究团队(Grin 币)的发行方案、PoW 算法、密钥存储库的选择以及用于签名的密码曲线的选择。从所选择的发行方案开始,将详细讨论每一个主题。

目录

  • 针对 Grin 设计的取舍评判——真相 OR 谣言
  • 引言
  • 目录
  • 基于静态发行的货币政策
  • 从 ASIC 抵抗到 ASIC 友好
  • 椭圆曲线 – secp256k1 的加密语言
  • 密钥存储库的选择
  • 结论、观察以及推荐
  • 编纂人员

基于静态发行的货币政策

比特币是一种有供应上限的币种。它能够保证 10 分钟的区块出块时间,而最初的区块奖励为 50 个比特币。这个奖励数字每四年减半一次,直到其最大的供应量 2100 万全部流通 [2]。在这个过程中,交易费用和新挖掘出的币将会支付给矿工作为对矿工维持整个区块链正常运转的报酬。一旦 2100 万个币全部释放,将会只有交易费用支付给矿工。许多人担心这样的支付报酬将不足以维持一个巨大的去中心化的矿工网络,届时只有大型矿场才能在挖矿任务中获得可观收益,从而形成中心化的网络。也有人认为届时交易费用将会显著提升而矿工的硬件成本也会下降,使得散户的挖矿行为有利可图 [3]。

Grin 决定走一条不同寻常的路:项目的币总量不设上限限制。它将使用一个静态释放速率,即每个区块恒定奖励 60 个 Grin。他们的算法则保证实现 60 秒出一个区块。这就保证了只要该主网存在,就会大约每秒出一个币 [4]。

他们选择静态释放方案的主要动机在于:

  • 可生成的币总量无上限限制;
  • 新产生的币占流通中的币比例将趋近于 0;
  • 可降低丢币和无主币的影响;
  • 鼓励流通使用而不是屯币。

Grin 的这种发行速率(emission rate)将会导致其在前 10 年保持 10% 以上的高通胀率,这高于大多数作为其竞争对手的数字货币。其他竞争货币像门罗,其在第一个八年流通后将保持低于 1% 的通货膨胀率,并且随着其最终释放阶段的开始,其通货膨胀率还将下降 0.87%[5]。在长期来看,门罗拥有更好的储值货币价值(SoV)。

恒定释放速率将会大大限制其作为储值货币的用途,因为它会经历一个长期的价格压力,这将使得 Grin 在高通胀率的前提下很难保持高价格。而高通胀率将会使得 Grin 作为交易媒介 (MoE)[6],因为它大约会在 50 年后将通胀率降到 2% 以下。Grin 团队相信通胀率不会如理论预期那样高,因为会有许多币丢失或者在主网上处于非使用状态。这种丢币的数量,团队认为会占到每年总供应量的 2%,这个比例应该排除在通胀率计算之外 [7]。交易丢币的总比例很难去估计 [8],而且一般来说价格低的币比价格高的币更容易丢失,因为用户对高价格币会更小心使用。Grin 团队相信通过选择高通胀率会提高币的分布效率,因为持币是不受鼓励的。他们也希望高通胀率能够促进价格的自然生成,从而限制持币大户对币价的操纵 [7]。

大多数传统流通系统的经济学家都相信通缩是不好的,因为它提高了负债,而适度的通胀对于一个国家的经济是有一定的刺激作用的 [9]。伴随通胀,存款的购买力将会与日降低,这刺激了消费,并导致了货币更倾向于用作交易媒介而不是储值货币。像有学习贷款、汽车贷款和住房贷款等负债的人也受益于通货膨胀,因为它对长期偿还的总债务产生侵略性的影响。目前,这种好处并不适用于数字货币,因为由于数字货币的匿名属性,很难维持成功的借贷关系,所以债务并不多 [10]。

另一方面,传统流通领域的通缩会导致存款的购买力提高,从而鼓励储蓄抑制借贷行为,这导致货币作为储值工具。不幸的是,它带来的负面效果是人们停止消费。比特币就可以看作是通缩的货币,因为人们购买比特币并屯币待涨,这就限制了比特币作为交易媒介的使用。此外,高通货紧缩可能导致通货紧缩的螺旋,因为负债者将拥有更多的债务,而有钱人将开始囤积他们的钱,因为它可能在以后的阶段更有价值 [11]。传统法定货币制度的通货紧缩通常只在经济危机和经济衰退时出现,通过引入货币政策来管理 [12]。

随着大多数的通胀流通系统得到政府的支持,他们通过控制通胀的程度来帮助政府减轻债务,降低财政赤字 [13]。这可能导致恶性通货膨胀,货币以极快的速度贬值,导致许多人失去储蓄和养老金 [14]。数字货币则提供了一个算法透明的货币通胀率,它不受任何的中心化团体或政府控制,避免了它的滥用。

找到一个介于 SoV 和 MoE 之间的平衡点对于开发一个成功的货币体系至关重要。通胀与通缩间的平衡需要刺激储蓄同时鼓励使用。一个低的通胀模型其通胀率通过算法来维持,并不受任何单一团体的控制,这看上去是一个最安全的选择,但只有时间能验证 Grin 的高通胀模型是否能够实现其预期的效果。

从 ASIC 抵抗到 ASIC 友好

起初,Grin 团队提出使用两种抗 ASIC 算法:Cuckoo Circle 和一个高内存要求的等散列算法(EquiGrin)。这些算法能够起到挖矿去中心化的作用。ASIC 抗性是通过对 PoW 算法具有高的存储要求,将其计算限制在中央处理器(CPU)和高范围图形处理器(GPU)而获得的 [15]。计划是每 6 个月调整这些 PoW 算法的参数,以阻止潜在的 ASIC 矿机挖掘,并转向只使用 Cuckoo Circle 作为主要的 PoW 算法。

近期,Grin 团队提出切换到一个新的双 PoW 算法系统,其中一个 PoW 算法对 ASIC 友好而另一个具有 ASIC 抗性。Grin 将不会使用新的 Cuckatoo Circle 算法,但是第二种算法的细节依然不明确。Cuckatoo PoW 算法是 Cuckoo 算法的一个变种,其对 ASIC 相对友好 [16]。这是通过将普通位用于三进制计数器和需要大量静态随机存取存储器 (SRAM) 来加速随机节点位的存储器延迟限制存取来实现的。SRAM 往往局限于 CPU 和 GPU 处理器,但是增加 ASIC 处理器上的 SRAM 更容易实现 [17]。

ASIC 矿机针对某一特定算法会使用特定的硬件来计算,从而保证效率。当网络达到一个更高的算力后,鼓励 ASIC 矿机存在于网络中是一个不错的选择。这会使得黑客更难于攻击而且相比于以 CPU 和 GPU 为基础的矿工,其更节能。

不幸的是,采用 ASIC 友好的算法的负面效果是有可能会使网络的矿工趋向中心化。一般消费者不会使用或需要这种类型的硬件;这限制了 ASIC 矿机的使用,他们主要为忠诚爱好者和建立矿场的大公司保留。网络中的大多数算力集中在大型矿场将会提高主网受到 51% 攻击的可能性 [18],特别是当 ASIC 矿机制造商推荐或强行指定他们的硬件设备必须使用特定的由个别人控制的矿池的时候。

使用主要用于游戏和大型工作站的通用和多用途硬件,如 CPU 和 GPU,确保矿工网络分布更广,并且不受单个潜在的坏玩家的控制。这将使单个实体更难控制超过 50% 的网络哈希或总算力,从而限制了双花攻击的潜在可能性。

选择对 ASIC 抵抗或对 ASIC 友好是影响主链安全性的重要决策。Grin 团队选择支持 ASIC 社区,并试图平衡 ASIC 友好型和 ASIC 抵抗型 PoW 算法,这很有趣,但仍存在许多潜在的缺陷。

椭圆曲线 – secp256k1 的加密语言

椭圆曲线密码学用于生成私钥和公钥对,可用于数字签名以及个人和交易的授权。与其他公钥加密技术(如 RSA)相比,它更加安全,并且需要较小的密钥来实现类似的安全性 [19]。

Secp256k1 是一种定义在有效加密算法标准 [20] 中的椭圆曲线加密法,其被很多数字货币用于数字签名,如比特币,以太坊,EOS,莱特币等等 [21]。Grin 使用同样的标准 [22]。一些安全专家建议不要使用这种算法,因为它已经暴露出了一些问题,但这个建议没有被采纳。其中一个问题是复数乘法域鉴别器不够高以至于不够安全。这可能导致潜在的未来漏洞,因为具有低复数乘法域鉴别的曲线更容易被打破 [23]。

使用可能有问题的曲线开始项目似乎不是一个好主意,尤其是当存在具有更好安全性能和特性的其他曲线时。有许多可用于提高安全性的替代曲线,例如 Curve25519,该曲线可用于改进的 Ed25519 公钥签名系统。Ed25519 签名方案利用了 Edwards 曲线数字签名算法 (EdDSA),并在不牺牲安全性的前提下,利用 SHA-512 和 Curve25519[24] 构造了一个快速签名方案。

存在许多其他替代方案,由 Daniel J. Bernstein 和 Tanje Lange 维护的 SafeCurves 等平台可以帮助调查和选择替代安全曲线。SafeCurves 平台将使评估许多密码曲线的安全特性和潜在漏洞变得更加容易 [25]。

密钥存储库的选择

Grin 最初使用 RocksDB[26] 作为内部键值存储,但是针对这个决定团队受到了一些批评。存在许多具有其他性能和安全特性的替代方案,如 LevelDB[27]、HyperLevelDB[28] 和闪电内存映射数据库 (LMDB)[29]。在这些库之间进行选择,以找到用于主链应用程序的「最佳」键值存储库仍然是一个难题,因为存在许多信息冲突的在线来源。

基于来自许多在线基准测试的有争议的结果,这些替代方案中的一些似乎具有更好的性能,比如生成较小的数据库大小和执行更快的查询 [30]。例如,与其他数据库相比,RocksDB 或 LevelDB 产生最快读取和删除并产生一些最小的数据库,因此它们似乎不是 LMDB 的更好替代 [31]。这并不完全正确,因为在测试过程中出现了一些错误。Howard Chu 写了一篇题为「谎言、该死的谎言、统计和基准」的文章,揭示了其中的一些问题,并表明 LMDB 是最好的键值存储库 [32]。Symas 公司执行的其他基准也支持这种说法,其中 LMDB 的性能优于所有测试的密钥存储库 [33]。

Grin 后来用 LMDB 替换了 RocksDB,以保持 Grin 钱包的状态 [34]、[35]。这个替换看起来是个好主意,因为 LMDB 似乎是用于与区块链相关的应用程序的最佳键值存储库。

结论、观察以及推荐

  • 选择正确的发行率以建立可持续的货币政策是一个重要的决策,并且应当注意确保在 SoV 和/或 MoE 之间找到正确的平衡。
  • 与抵抗 ASIC 相比,衡量 ASIC 友好的优势和潜在的问题需要仔细评估。
  • 可以使用诸如 SafeCurves 之类的工具来为应用程序选择安全的椭圆曲线,具有潜在安全漏洞的密码曲线应该被舍弃。
  • 当使用在线基准来帮助选择项目的库时,应该小心,因为结果可能具有误导性。

编纂者

  • https://github.com/neonknight64
  • https://github.com/hansieodendaal
  • https://github.com/SWvheerden
  • https://github.com/philipr-za

原文链接:https://github.com/tari-labs/tari-university/blob/e95e13464109d6a7eaa607f43b6b9c31362279fe/src/protocols/grin-design-choice-criticisms/MainReport.md

Be the first to comment

Leave a Reply

Your email address will not be published.