比特币脚本语言简介

2019-02-26 15:42 栏目:经验之谈 来源: 查看()
在下面的介绍中,块网络将研究比特币网络中使用的简单而强大的编码语言。比特币脚本的设计只考虑了一些功能;它很紧凑,图灵不完整,它基于堆栈。通过这种方式,语言可以为某些目的提供有效和安全的服务。

尽管功能非常小,但与过去几十年的网络相比,它已经证明自己足够强大,足以支持过去十年的有价值交易。

比特币脚本带有“可编程货币”

对于许多人来说,这种开创性加密货币背后的编程语言是奥卡姆剃刀的完美典范。

即使与加密前加密编码语言相比,它也是基本的。更重要的是,Nakamoto刻意设计了这种简洁性。具有多种功能并允许复杂数据事务的语言也允许更多的攻击向量。批评者解释说,像Solidity这样的语言,虽然范围很广,但在安全性方面还远远不够。

此时,比特币脚本语言的图灵不完整。相比之下,Solidity是Turing-complete,这意味着它可以复制任何图灵机或可以自主遵循特定算法的抽象机器。有了这个概念,人们就可以开始了解智能合约的运作方式。

回到主要焦点,比特币脚本语言不提供此功能,使用比特币区块链深入研究智能合约将成为后续文章的主题。

比特币的主要用例一直是加密货币及其价值转移。因此,图灵完成语言的附加功能不是必需的。但是,这并不意味着脚本有限。

此外,比特币脚本语言的局限性阻止了无限循环被包含在任何单个事务中。此限制消除了网络上拒绝服务(DoS)攻击的可能性。这些约束的范围,例如不仅将值发送到X和Y的事务,将在后面的部分中讨论。

比特币脚本语言的特点

比特币的编码语言使用“反向抛光”作为符号系统,这意味着随着复杂性的增加,像“3 + 4”这样的线条会出现“3 4+”。另一个功能可以追溯到比特币脚本——的根“类似于Forth”。此功能是相关的,因为两种语言都是“基于堆栈的”。

比特币脚本语言简介

堆栈是一个非常常见的数据结构,用Andreas Antonopolous的话说,它允许“堆栈顶部”的信息“推”或“弹出”。前者解释了向堆栈添加信息的过程,而后者描述了从堆栈中删除信息的过程。此外,弹出或推送信息的顺序遵循“后进先出”原则。

比特币脚本语言简介

“34+”等操作的行为如下:

按“3”进入堆栈。
按“4”进入堆栈。
“+”运算符接受这两个参数,将它们全部弹出堆栈,将它们加在一起,然后将结果推回堆栈。 (即,弹出,弹出,添加,推送)

在这种情况下,结果操作导致“7”出现在堆栈上并且程序终止。

在比特币脚本语言中,此操作将遵循相同的步骤,但在每个变量之前还将包含前缀“OP”。让我们来看看这些新单词如何在真实比特币交易中结合起来。

比特币脚本语言正在运作

大多数操作都是签名交易。这包括付款,交换以及涉及公钥和私钥的大多数工作。让我们来看看发送者和他的同事Eddie Mitchell之间的沟通。这里,发送者将指定Mitchell(接收者)的公钥,Mitchell将通过使用相同的公钥指定签名来兑换传输的比特币。

比特币脚本语言简介

接下来,这种事务的前两个指令是用于生成签名的签名和公钥。该信息被标识为“< sig>”和“< pubKey>”并被推入堆栈。米切尔决定这些价值观,因为他是收件人。事务的前半部分通常称为“scriptSig”或“unlock script”。在操作的这一部分中,还引用了先前存在的未使用事务输出(UTXO)。

添加UTXO可确保发送方确实拥有他希望发送给Mitchell的比特币金额。比特币网络通过记录器和比特币节点完成验证。在《掌握比特币》,作者Andreas Antonopoulos解释了:

每个输入都包含一个解锁脚本,并引用以前存在的UTXO。验证软件将复制解锁脚本,检索输入引用的UTXO,并从UTXO复制锁定脚本。

然后,发件人执行事务的第二部分“锁定脚本”或“scriptPubkey”。根据上面的图像,弹出下一条指令“OP_DUP”< pubKey>从堆栈中复制它,并将其返回到堆栈。

比特币脚本语言简介

OP_DUP指令

然后通过“OP_HASH160”指令对该最高值(< pubKey>的副本)进行散列,并变为“< pubKeyHash>”。

比特币脚本语言简介

pubKeyHash

比特币交易中使用的特定散列函数称为SHA-256(安全散列算法),它是较大的功能组SHA-2的一部分,SHA-2是1993年国家安全局。发展。 SHA-2系列的其他成员包括SHA-224,SHA-256,SHA-384和SHA-512,每个数字代表它们生成的消息的位。

这些应用程序在信息安全领域非常广泛,其中最相关的是比特币和Haschash的工作证明(PoW)共识机制。 SHA-256最显着的特点是它能够防止上面提到的DoS攻击。

比特币脚本语言简介

回到发件人和他的同事之间的交易,用户仍然需要向堆栈添加另一条数据。下一条消息是作者在事务开始时指定的公钥。需要签名才能兑换所请求的比特币。

此时,堆栈顶部有两个键哈希值。:作者指定的公钥的哈希值和Mitchell使用的公钥的哈希值。在此处开始使用“OP_EQUALVERIFY”命令以确保发件人实际使用正确的公钥。在早期几次失败的比特币交易之后,作者反复检查了米切尔的公钥。 当公钥匹配时,OP_EQUALVERIFY指令将使用这些数据点。用户现在只剩下一个签名和一个公钥。最后一步是验证交易的签名是否正确。 

比特币脚本语言简介

签名和公钥堆栈

比特币脚本语言在这里是有利的,因为它不需要从大量库中提取以确认签名的有效性。所有这些都内置于语言中。

比特币脚本语言简介

最后的“OP_CHE高仿CKSIG”指令然后将剩余的两个项目弹出堆栈。如果< sig>匹配< pubKey>,操作将变为有效。

比较,对比和增加复杂性

虽然上面的介绍很简短,但它应该提供如何执行比特币交易的基本思路。在此基础上,开发人员和爱好者可以开始尝试更高级的操作,这将是稍后简要介绍的主题。

在此基础上的后续文章将深入研究数字签名(ECDSA),多签名操作,付费脚本哈希(P2SH)和时间锁。


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

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

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

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