见证结构(Witness Structure)

在法庭上,证人是指证明他们目睹了重要事件发生的人。人类证人并不总是可靠的,因此法院有各种程序来审问证人,以便(理想情况下)只接受那些可靠的证据。

想象一下数学问题的证人会是什么样子。例如,如果重要的问题是 x + 2 == 4,某人声称他们目睹了解决方案,我们会问什么?我们想要一个数学证明,证明存在一个值,将其与2相加得到4。我们甚至可以省去人的需要,只使用提议的 x 值作为我们的证人。如果我们被告知证人是2,那么我们可以填写方程,检查它是否正确,并决定重要的问题已经解决了。

当花费比特币时,我们想要解决的重要问题是确定该花费是否得到了控制这些比特币的人或团体的授权。执行比特币共识规则的成千上万的全节点无法审问人类证人,但他们可以接受完全由用于解决数学问题的数据组成的证人。例如,一个值为2的见证将允许花费由以下脚本保护的比特币:

2 OP_ADD 4 OP_EQUAL

显然,允许任何能够解决简单方程的人花费您的比特币是不安全的。正如我们将在第8章中看到的那样,一个不可伪造的数字签名方案使用的方程只能由某人在掌握某些他们能够保密的数据时解决。他们可以使用公共标识符引用该秘密数据。该公共标识符称为公钥,方程的解称为签名。

以下脚本包含一个公钥和一个操作码,要求与花费交易中的数据相对应的签名。就像我们简单示例中的数字2一样,签名就是我们的见证:

<public key> OP_CHECKSIG

见证者是用于解决保护比特币的数学问题的值,在使用它们的交易中需要包含它们,以便全节点进行验证。在所有早期比特币交易中使用的传统交易格式中,签名和其他数据放置在输入脚本字段中。然而,当开发者开始在比特币上实现合约协议时,就像我们在“原始基于序列的交易替换”中所看到的那样,他们发现将见证者放置在输入脚本字段中存在几个重大问题。

Last updated