售前客服二维码
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!
比特币的编码语言使用“反向抛光”作为符号系统,这意味着随着复杂性的增加,像“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,每个数字代表它们生成的消息的位。
回到发件人和他的同事之间的交易,用户仍然需要向堆栈添加另一条数据。下一条消息是作者在事务开始时指定的公钥。需要签名才能兑换所请求的比特币。
此时,堆栈顶部有两个键哈希值。:作者指定的公钥的哈希值和Mitchell使用的公钥的哈希值。在此处开始使用“OP_EQUALVERIFY”命令以确保发件人实际使用正确的公钥。在早期几次失败的比特币交易之后,作者反复检查了米切尔的公钥。 当公钥匹配时,OP_EQUALVERIFY指令将使用这些数据点。用户现在只剩下一个签名和一个公钥。最后一步是验证交易的签名是否正确。
签名和公钥堆栈
比特币脚本语言在这里是有利的,因为它不需要从大量库中提取以确认签名的有效性。所有这些都内置于语言中。
最后的“OP_CHE高仿CKSIG”指令然后将剩余的两个项目弹出堆栈。如果< sig>匹配< pubKey>,操作将变为有效。
比较,对比和增加复杂性
虽然上面的介绍很简短,但它应该提供如何执行比特币交易的基本思路。在此基础上,开发人员和爱好者可以开始尝试更高级的操作,这将是稍后简要介绍的主题。
在此基础上的后续文章将深入研究数字签名(ECDSA),多签名操作,付费脚本哈希(P2SH)和时间锁。
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!