什么是隔离验证:一个小举动显著提升比特币的潜力

2019-01-10 11:43 栏目:经验之谈 来源: 查看()
如果您在2015年的香港比特币扩展研讨会上提出最激动人心的建议,那么无疑是开发商Pieter Wuille博士提出的隔离证人。该提议得到了技术界的好评,隔离验证有望提高比特币的性能,有些人甚至希望能够提供解决方案来扩大比特币社区以恢复一定的和谐。

什么是隔离验证:一个小举动显著提升比特币的潜力

我将使用比特币杂志的前三名来解释隔离验证的工作原理。这篇文章是第一篇。

什么是比特币交易?

为了更好地理解隔离验证,最好先了解技术层面的比特币交易。 (如果你对此并不陌生,你可以直接跳到本文的最后部分。)

对于初学者来说,重要的是要意识到比特币协议的核心是交易。实际上,对等网络上的节点不会相互发送比特币,而是相互发送包含交易数据的数据包。

在某种程度上,比特币交易实际上是一组“锁定”。更具体地说,每个交易包括两个主要组成部分。其中一半可以有效地解锁上一次交易中锁定的比特币。使用的数据段称为输入。输入包括脚本和如何解锁输入的说明(称为scriptSigs)。

另一半由一个或多个称为输出的新锁组成,它们再次锁定相同或更少数量的比特币,包括一个名为scriptPubKeys的脚本。因此,比特币在单个交易中有效地从输入转移到输出,同时从一个交易跳转到另一个交易。

这条规则有一个主要的例外。币基交易(不要与币基交易混淆)是矿工在找到新区块时创建的交易,包括区块奖励:25比特币(现12.5)。此外,矿工可以添加在交易中解锁的比特币,但不会再次锁定到币基奖励:只需输入和输出之间的差额,即交易费用。

所有这些比特币都被交易发送者“解锁”和“锁定”,然后以比特的形式通过比特币网络传输。然后,网络上的所有节点将检查解锁和锁定过程是否正确完成。如果没有问题,他们会将事务转发给其他节点。如果节点也是矿工,它可以将事务打包到块中。然而,是否将其打包成块将取决于矿工,这是矿工费用的原因。

所有节点遵循的事务验证规则与(几乎)所有矿工使用的规则兼容是非常重要的。如果某些矿工将事务打包到另一个节点拒绝的块中,则该节点将认为整个块无效。如果节点是矿工,则可能导致双花和网络叉。

共识规则允许事务同时以多种不同方式锁定(和解锁)比特币。但锁定比特币的输出通常包括至少一个scriptPubKey:“证明您拥有(或知道)与比特币地址对应的公钥的私钥。”

(使用私钥很容易导出公钥,但通过公钥导出私钥几乎是不可能的。同样,通过公钥很容易计算比特币地址,但很难推导出来。通过比特币公钥。因此,从私钥计算比特币地址也很容易,但是不可能从比特币地址中导出私钥。这是“单向的”。)

当然,用于在scriptPubKey中锁定比特币的比特币地址由交易接收者提供。由于收件人使用只有他知道的私钥创建比特币地址,因此他是唯一可以创建有效scriptSig的人,也是唯一可以创建新事务并使用锁定比特币的人。

签名是怎么来的?

为了证明对应于比特币地址的私钥的所有权,理论上可以在事务的scriptSig中包含私钥,但这不安全。最重要的是,任何看到交易的人都可以获得私钥并创建新交易(或更改原始交易)以将原始交易中的收件人更改为自己。如果是这种情况,那么矿工窃取比特币将是一块蛋糕,因为他们是选择交易进行确认的人。

因此,scriptPubys通常要求scriptSig包含一个或多个签名来解锁比特币。

签名是一种加密技术,它使用私钥与任何其他数据组合来计算唯一的数字字符串。并且,根据密码学原理,可以使用相应的公钥来验证签名是否是使用私钥创建的。因此,签名不仅证明私钥的所有权,而且还证明私钥的所有者批准特定数据而不泄露私钥。

在比特币中,私钥通常用于签署交易数据以减去交易输入。 (包括,scriptPubKeys,锁的数量以及一些其他细节。)随后,用于使用比特币的签名和公钥被添加到事务的输入字段中。这也证明私钥的所有者确实打算创建事务并确保它不会被篡改。

然后,将所有这些事务数据(包括此时的事务输入)一起散列,以创建标识特定事务的事务ID。如果随后将事务打包成块,则矿工用另一个事务ID对事务ID进行哈希处理以生成新的哈希值。如果存在其他两个事务ID的哈希值,则再次执行哈希处理,直到它只剩下一个哈希值。该散列结构称为Merkle树,结果散列是Merkle Root。 Merkel根与其他块数据组合以形成用于标识特定块的块头。最后,该块头的散列包含在下一个块的块头中,将块链接在一起。

比特币被认为是不可篡改的,因为追溯性地改变任意交易的任何部分将改变交易ID,从而改变块头。更改的块头不再满足工作负载证明的要求,并且由于块头影响后续块头的组成,因此任何块头都将被视为无效。

什么是隔离验证?

Wuille在香港提出的检疫验证提案基于Blockstream的侧链元素中使用的概念,结合比特币核心开发人员Luke Dashjr的补充概念。在过去的几个月里,Wuille与比特币核心开发人员Gregory Maxwell和Eric Lombrozo合作,对隔离验证进行了概念化,并计划在2016年推出隔离验证。

因此,对于不使用隔离验证(我们称之为“旧节点”)的比特币节点,可能会在一些新创建的事务输出中使用奇怪的scriptPubKeys。奇怪的是,这些scriptPubKeys几乎不能被认为是锁,基本上表明它们不需要签名,或者它看起来像“任何人都可以花钱”。此外,它们还包括一些无意义的文本。

从旧的角度来看,这些交易都是疯狂的。他们会认为任何人都可以创建一个新的scriptSig来解锁这些事务输出,这意味着这些事务非常不安全。但与此同时,旧节点仍将像往常一样运行。毕竟,这对他们自己的交易来说不是问题。无意义的文字很奇怪,但不会引起任何问题。因此,他们仍将确认事务是否有效并将其转发给其他节点。

但是,使用隔离验证的节点(我们称之为“新节点”)会识别其他内容。他们会在scriptPubKey中看到那些“毫无意义的文本”,但他们不会认为它们毫无意义。相反,新节点将此文本识别为另一种非常特殊的输出类型。

与典型的事务输出类似,这种新类型的输出需要一个或多个签名才能解锁比特币。但与典型输出不同,这种新类型的输出不需要在后续事务的scriptSig中包含签名。相反,它需要将签名包含在事务之外的新区域中:隔离见证数据区域。

该隔离验证数据区域基本上是带有签名和一些附加数据的“附加组件”。重要的是,旧节点完全忽略隔离的验证区域,但新节点将识别该区域。此外,它们携带的数据不会与事务的其余部分一起散列到事务ID中。

因此,旧节点和新节点都将认为包含隔离验证中的签名的事务有效。旧节点将验证它们,因为从他们的角度来看,这些事务根本不需要签名(它们看不到签名),并且新节点也将验证它们,因为所需的签名处于隔离状态认证领域。并且由于旧节点和新节点都将事务数据散列为相同的事务ID,因此每个节点都识别这些块的组成,甚至整个区块链的结构。

(值得注意的是,所有或大多数矿工都应该使用隔离验证来防止双重和硬叉。或者不是。如果所有矿工都使用隔离验证,即使网络上的旧节点可能我想知道为什么某些交易没有打包,但由于交易是由矿工决定的,而这些交易不是他们的交易,旧节点也不会介意。)

但是仍然存在一个问题:如果签名对区块链的组成没有影响,那么区块链就无法证明交易包含正确的签名。

为了确保区块链中嵌入了签名,启用隔离验证的矿工也需要添加手段。不仅在所有事务中创建Merkel树,还要从所有隔离验证创建Merkel树以镜像事务树。

然后,错误验证的Merkel根被包括在coinbase事务的输入字段中。因此,孤立验证的Merkel根将改变coinbase事务的事务数据及其事务ID,从而影响块头并最终影响区块链的组成。

Wuille的检疫验证提议允许从比特币交易中删除签名,同时保持比特币不可操作,并且不违反任何现有的共识机制。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发