免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。
边肖:记得要集中注意力。
来源:比特部落实验室
比特币脚本的设计只考虑了几个功能;它是紧凑的,图灵是不完整的,它是基于栈的。这样,语言有效而安全地服务于某些目的。
虽然它的功能很小,但与以太坊这样的网络相比,它已经在过去的十年中证明了自己足够强大,可以支持有价值的交易。
比特币脚本和“可编程货币”
在许多人看来,这种先锋加密货币背后的编程语言是奥卡姆剃刀的完美例子。
它是基本的,即使与前加密货币编码语言相比。更重要的是,中本聪刻意设计了这种简洁。具有多种功能并允许复杂数据交易的语言也允许更多的攻击媒介。批评者解释说,像Solidity这样的语言,虽然在范围上令人印象深刻,但在安全性方面远远不够。
至此,比特币脚本语言的图灵并不完整。相比之下,实性是图灵完备的,这意味着它可以复制任何能够自主遵循特定算法的图灵机或抽象机。掌握了这个概念,人们就可以开始理解智能合约是如何工作的。
回到主要焦点,比特币脚本语言不提供这个功能。使用比特币区块链更深入地研究智能合约将是后续文章的主题。
比特币的主要用例一直是加密货币及其价值转移。因此,图灵完全语言的附加特征是不必要的。然而,这并不意味着脚本是有限的。
此外,比特币脚本语言的局限性阻止了无限循环被包含在任何单个交易中。这种限制消除了网络上拒绝服务(DoS)攻击的可能性。这些约束的范围,比如不只是向X和Y发送值的事务,将在后面的章节中讨论。
比特币脚本语言的投资特点
比特币的编码语言使用“反向打磨”作为符号系统,这意味着随着复杂度的增加,会出现“3 4”。另一个功能可以追溯到比特币脚本的根源——“类似于Forth”。这个特性是相关的,因为两种语言都是“基于堆栈的”。
堆栈是一种非常常见的数据结构。用Andreas Antonopolous的话说,它允许“堆栈顶部”的信息被“推入”或“弹出”。前者解释了向堆栈添加信息的过程,而后者描述了从堆栈中删除信息的过程。另外,信息弹出或推送的顺序遵循“后进先出”的原则。
类似“34”的操作行为如下3360
按堆栈上的“3”。
按堆栈上的“4”。
“”运算符接受这两个参数,将它们都弹出堆栈,将它们相加,然后将结果推回堆栈。(也就是。弹出、弹出、添加、推送)
在本例中,结果操作导致“7”出现在堆栈上,程序终止。
在比特币脚本语言中,这个操作将遵循相同的步骤,但也会在每个变量前包含前缀“op”。接下来,我们来看看这些新词在真实的比特币交易中是如何组合的。
比特币脚本语言正在工作。
大多数操作都是签名事务。这包括支付、交换和大多数涉及公钥和私钥的工作。让我们分开来看发送者和他的同事埃迪米切尔之间的通信。在这里,发送方将指定Mitchell(接收方)的公钥,Mitchell将通过使用相同的公钥指定签名来赎回发送的比特币。
接下来,这种事务的前两条指令是签名和用于生成该签名的公钥。该信息被标识为“
UTXO的添加确保了发送者确实拥有他希望发送给Mitchell的比特币数量。比特币网络通过挖矿机和比特币的所有节点进行验证。在《掌握比特币》一书中,作者安德烈亚斯安东诺普洛斯是这样解释3360的。
每个输入都包含一个解锁脚本,并引用一个预先存在的UTXO。验证软件将复制解锁脚本,检索输入引用的UTXO,并从该UTXO复制锁定脚本。
事务的第二部分,即“lock script”或“scriptPubkey”,然后由发送方执行。根据上图,下一条指令“OP_DUP”从堆栈中弹出。
DUP DUP操作说明
这个最高值,也就是
密钥哈希
比特币交易中使用的特定哈希函数被称为SHA-256(安全哈希算法),它是一个更大的函数组SHA-2的一部分,该函数组由美国国家安全局(National Se)于1993年成立
curity Agency)开发的。SHA-2家族的其他成员包括SHA-224、SHA-256、SHA-384和SHA-512,每个数字表示它们生成的消息的位。这些应用在信息安全领域非常广泛,其中最相关的是比特币和Haschash的工作量证明(Proof-of-Work, PoW)共识机制。SHA-256最显著的特性是它能够防止上面提到的DoS攻击。
回到发送者和他的同事之间的交易,用户仍然需要向堆栈中添加另一段数据。接下来的信息是作者在交易开始时指定的公钥。需要生成签名来赎回所请求的比特币。
此时,堆栈顶部有两个关键的哈希值数据:作者指定的公钥的哈希值和Mitchell使用的公钥的哈希值。从这里开始使用“OP_EQUALVERIFY”指令,确保发送者确实使用了正确的公钥。在早期经历了几次比特币交易失败后,作者再三检查了Mitchell的公钥。 当公钥匹配时,OP_EQUALVERIFY指令将消耗这些数据点。用户现在只剩下一个签名和一个公钥。最后一步是验证该事务的签名是否正确。
签名和公钥堆栈
比特币脚本语言在这里很有优势,因为它不需要从大量的库中提取来确认签名的有效性。所有这些都内置在语言中。
最后的“OP_CHECKSIG”指令,然后将剩余的两项从堆栈中弹出,如果