RSK采用双挖机制 初衷是将智能合约赋能给比特币

2019-11-07 19:00:37
来源: 腾讯

  【摘要】 创建RSK的初衷是将区块链的智能合约功能赋予比特币。RSK是最有趣的智能合约开发平台之一,因为它结合了比特币的网络安全与Solidity语言易于使用的特性。为了给系统提供

创建RSK的初衷是将区块链的智能合约功能赋予比特币。

RSK是最有趣的智能合约开发平台之一,因为它结合了比特币的网络安全与Solidity语言易于使用的特性。为了给系统提供动力,Rootstock使用双挖方式。想知道双挖是怎么回事吗?让我们开始吧!

工作量证明(Proof-of-Work)的简要概述

在进一步讨论之前,让我们快速地总结一下工作量证明(POW)。

· 矿工通过解决密码学难题来“挖”区块并将其添加到链上。

· 这个过程需要大量的能源消耗和计算能力。这些加密问题的设计方式使它变得难以解答,并对系统造成负荷。

· 当一个矿工解决了难题时,可以向网络提交区块以供验证。

在比特币的生态系统中挖矿是一个艰难的过程。这就是为什么矿工将他们的资源和算力集中起来以创建“矿池”。 矿池遵循客户端-服务器架构,其中矿工(客户端)连接到矿池服务器(服务端)。矿池服务器运行矿池服务器软件。常见的软件有CKpool、BTCpool和Eloipool。

什么是双挖?

双挖(https://dwz.cn/xQtXvIjL)是一种允许使用相同算法的不同加密货币同时挖矿的机制。在这种情况下,由于比特币和RSK都基于SHA-256算法,它们可以通过双挖的方式联合挖矿。双挖的两个最大优势是:

· 大大降低了矿工的投资成本,因为他们不需要购买新的挖矿设备。

· 具有较低算力的加密货币可以通过与具有较高算力的加密货币锚定来获得足够的算力。

· 矿工也可以通过维护双挖链获得额外奖励。

Namecoin是第一种和比特币双挖的加密货币。让我们来看看双挖的总体工作流程:

· 双挖链的区块ID嵌入在主链的区块中。该区块ID是二级链中区块的加密哈希。

· 该双挖区块的哈希值以双挖的“标签”为前缀。该标签可以是一些简短的描述性文本或魔术字节(magic bytes)。

· 为避免混淆,主链中的区块只能与第二链中不超过一个区块相关联。

· 为了确保双挖的整体安全性,必须保证:在主链上挖出一个可与副链中的两个区块关联的主块的难度,要难于在主链上挖出两个分别只关联一个副链区块的主块的难度。

在RSK-比特币的例子里,RSK的挖矿难度相当于70-bit,而比特币难度相当于74 bits。

比特币矿池通常在向矿工提供的每个采矿作业中都引用RSK的区块。每次矿工找到解决方案时,都会将其与比特币和RSK的挖矿难度进行比较。此时可能出现三种情况:

· 矿工计算出的解决方案满足比特币网络难度。区块被封装并发送到网络。比特币网络还将传播RSK的双挖参数。因为RSK的难度比比特币低,所以这个解决方案也适用于封装RSK。

· 此解决方案满足RSK,但不满足比特币。解决方案将提交给RSK网络,而不是比特币网络。

· 解决方案不满足任何难度要求。

无论如何,最终提交给RSK的解决方案允许节点构建SPV证明。如果证明是有效的,那么它将成为提交给网络的区块的一部分。

深入研究双挖

比特币区块头类似于双挖中的POW代理。RSK区块链解释了比特币区块头的工作量证明。通过在比特币区块中搜索标签以确定RSK链上的哪一个区块应该与之相关联。同时我们需要记住,RSK区块链不需要一个完整的比特币区块来验证区块头的POW,并将其与相应的RSK区块头部相关联。一个简易SPV证明就足以建立这种关系。我们将会继续探讨一点SPV证明。在此之前,让我们对RSK标签做进一步的理解。

RSK标签的当前格式是:

RSKBLOCK:RskBlockHeaderHash

其中:

· “RSKBLOCK:” 是由52 53 4b 42 4c 4f 43 4b 3a字节组成的ASCII字符串。

· RskBlockHeaderHash 是不含双挖区域的二进制格式的RSK区块头的Keccak哈希运算结果摘要,双挖区域将在PoW解决后被填充。

虽然不是强制性的,但RSK标记应该包含在输出脚本的OP_RETURN OP_PUSHDATA1操作码之后。这有助于防止向比特币UTXO发送垃圾数据。

RskBlockHeaderHash 由标准RSK节点(rskj daemon)创建。矿池服务器插件轮询rskj daemon,并维护提供给矿池服务器的最新RskBlockHeaderHash值。

除上述规定之外,以下附加限制也可能适用:

· RskBlockHeaderHash之后直到coinbase最新交易之间的字节数必须小于或等于128字节。

· 二进制字符串“ RSKBLOCK:”(52 53 4b 42 4c 4f 43 4b 3a)不能包含在结尾的原始字节中。

· 如果RSK标记位于非最后一个输出脚本中,那么它有可能出现在下一个输出的字节中。这就是为什么强烈建议使用最后一个输出脚本用于RSK标记的原因。

· 如果RSK标记位于coinbase区域中,那么“RSKBLOCK:”就有可能出现在Coinbase区域中。

什么是SPV证明?

如上所述,二级RSK区块链与一级比特币区块链之间的关联可以通过SPV证明来建立。SPV证明主要由Merkle树成员证明构成。

蓝色方框表示SPV证明中包含的信息,并沿RSK块传输。由于尾随字节的限制,RSK 全节点将创建SPV证明的压缩版本,包括:

· 比特币区块头(80字节)。

· 一个Coinbase交易的Merkle分支(约320个字节)。

· 消耗Coinbase交易头的SHA-256中间状态(32字节)。

· 一个由Coinbase交易记录和RSK标签组成的64字节对齐的数据块(最大169字节)。

· 目前,SPV双挖证明的最大大小为780字节。

矿池服务器软件可以向rskj daemon发送完整的区块或SPV证明。如果rskj接收到一个区块,它将解析它并提取必要的字段来构建SPV证明。

双挖难度

在继续之前,我们需要弄懂难度的含义以及为什么首先引入此概念。你可能知道,比特币的上限是2100万枚。随着越来越多的矿工参与挖矿,需要有一个机制来防止矿工很快挖完所有的比特币。

为了防止比特币的供应失控,并使其成为一种更可持续的模式,中本聪(Satoshi Nakamoto)引入了难度机制。随着挖掘出越来越多的区块,解决密码学问题的难度呈指数级增长。基本上,挖掘出的比特币越多,挖掘过程就越困难。

考虑到RSK链的难度远低于比特币。在系统内部,难度被转换成“目标”,与难度成反比。目标是一个256位无符号整数。

在同一天,合并挖掘出的区块链是一个近似的目标。而RSK有更高的目标,因为其出块频率高达比特币的20倍以上。

这就是为什么解决RSK POW难题的区块头可能无法被比特币网络接受的原因,因为它可能无法满足其难度。因此,这里要问的问题是:如果一个矿池总是在寻找比特币区块,它怎么才能探测到一个RSK区块呢?现有事实已经证明,矿工们一直在寻求以较低难度解决区块的方法。这些中间的、低难度的区块称为“配额(Shares)”,它们是矿池服务器在记帐时需要的。矿池中的许多矿工将在比特币的真实解答之间积极地创建更多的配额,从而为矿工的贡献提供更高的颗粒度。

以下是关于配额需要注意的事情:

· 配额会非常频繁地传输到矿池服务器。因此,服务器可以根据相关矿工的算力贡献,在他们之间分配未来的收入。

· 取决于系统的整体算力,比特币挖矿的难度有时会下降。这就是为什么要在系统内传递配额,因为它有可能是解决当前比特币POW运算的办法。

· 如果配额的哈希摘要低于比特币当前的目标,那么它会被转发到bitcoind daemon,后者会在网络上传播它。

· 不同的次级区块链可能有不同的难度。这就是为什么一个能够进行双挖的矿池服务器必须将配额的目标与它所支持的次级区块链的所有目标进行比较的原因。因此,如果配额满足RSK的目标,那么相应的区块就被认为对RSK网络是有效的。

RSK双挖的安全性

在RSK双挖的机制中,一个理性的挖矿者只需要进行2^69次运算(RSK当前的难度)。一个恶意的攻击者需要在30秒内计算多达2^80次哈希运算才能对系统造成破坏。为了进行这种攻击,攻击者必须投入比矿工多2000倍的硬件。投入总额约为5万亿美元。

然而,这里还有一件事需要考虑。攻击者也可以只为相同的RSK区块高度生成一个或多个共享其POW的区块。如果是这样的话,也需要浪费5万亿美元的成本才能实现。

(译者注:所以RSK网络现在已经非常安全了。)

SHA256算法的假设弱点

RSK使用一种非标准的加密手段来压缩交易生成。RSK只传输尾部,而不是通过对Merkle-Damgard构造的中间态进行哈希来传输整个交易。 然而,这个手段假设SHA256算法完全抵抗“自由启动碰撞(freestart collision)”。根据RSK的设置,SHA256至少需要和暴力破解80比特的难度一样安全。

在SHA256中目前没有发现自由启动碰撞,最接近的结果也只是在SHA256的简化版中发现半自由启动碰撞(64轮中的第38轮,代价是2^65次运算)。

到目前为止,该算法被认为是安全的。然而,如果发现这样的攻击,RSK可以通过网络升级来应对。在这种情况下,RSK将不使用加密压缩技术。当然,这将导致区块大小的小幅增加。

注意:如果SHA256遭遇了自由启动碰撞攻击,它将完全失效。对于比特币来说,这也是一个非常大的问题。

另外,RSK的1.0.0版本提供了80位的安全性,以防止可能的标签冲突。80位碰撞攻击在理论上是不经济和无法计算的。

· POV计算: 如此大规模的攻击将需要天量的内存。而且,碰撞攻击的CPU成本比解决RSK PoW难题的成本高出2000多倍(69 vs 80比特)。

· POV理论:RSK的DECOR+共识认为碰撞的区块可共享区块奖励,因此,如果过去的区块奖励大约等于新区块的奖励,挖出过去区块的新替代区块将变得无利可图。这实际上意味着攻击者将主要与他们自己竞争。

· POV经济:善意的双挖矿工可以赚取比特币交易手续费,因此双挖由比特币补贴。 另一方面,攻击者将必须支付碰撞攻击的全部费用。这意味着对POW链接的任何攻击都是没有成本效益的。

RSK团队表示:“即使考虑到计算效率的提升,我们认为标签在未来20年仍然是安全的。然而,如果计算趋势发生根本变化,则未来的网络升级可以很容易地将哈希的大小扩展到完整的32字节。”

总结

RSK是比特币双挖中最赚钱的选择。RSK团队已经为CoiniumServ、CKpool、BTCpool和Eloipool等矿池开发了几个完全可用的插件。其他矿池也开发了他们自己的插件。RSK团队更推荐CKpool,因为它做了适当的优化。如果您是一个新上线的矿池,只需遵循RSK双挖的说明进行操作即可。(作者|Rajarshi Mitra)