美文网首页Nervos Fans
比特币脚本指南(三)

比特币脚本指南(三)

作者: 526ba0512193 | 来源:发表于2018-07-09 18:15 被阅读0次

脚本的工作原理

脚本是一种类Forth、基于栈操作、逆波兰式、图灵不完整语言。

先看看基于堆栈操作、逆波兰式系统什么套路。

加法操作

逆波兰式中3+4长成34+的样子。下面执行加法操作。

第一步:把3推进堆栈

第二步:把4推进堆栈

第三步:添加完成,先弹出4,然后是3。

第四步:3、4相加,结果是7,推上堆栈。

用脚本表示,过程长这样:

OP_3 OP_4 OP_ADD

只是外观发生变化,其余操作跟上图一样。“OP_”前缀是脚本语言特点。

比特币脚本加法、检查操作

假设想做2 + 3 = 5。

逆波兰语式中,长成23 + 5 =。

脚本表示法中,长这样:

OP_2 OP_3 OP_ADD OP_5 OP_EQUAL

若在EQUAL中使用后缀VERIFY会怎样? 意思是,OP_EQUAL变成 OP_EQUALVERIFY。

添加后缀VERIFY后,TRUE或FALSE就不推到堆栈上了。 若TRUE,脚本继续执行;若FALSE,停止执行。

操作码后添加“VERIFY”时就会发生这种情况。

最后再举个例子:

脚本中的简单复制

举这个例子是为了介绍一个非常重要的操作码,DUP,又称复制。

假设想推个数字进堆栈然后复制,看看弹出的两个数字是否相同。

需要使用此脚本:

OP_5 OP_DUP OP_EQUALVERIFY

希望你看懂了比特币脚本怎么处理计算的。 接下来,看看交易的执行。

锁定&解锁游戏

比特币交易可以理解成不停的上锁、开锁。 使用scriptPubKey锁定UTXOs的同时交易输入中包含scriptSig。 或者说用scriptPubKey上锁是为了让scriptSig能解锁。

能说的更乱一点么?

说,Alice给Bob发比特币的想法一直没停。

Bob的地址所有人可见,那么Alice直接把BTC发到这个地址上,但是有个条件:只有Bob本人才能提出地址中的BTC。

下面后退一步,回顾些基础概念。

比特币中所有人有俩钥匙:

私钥

公钥

从私钥导出公钥。

想收钱,至少有个地址吧。公钥先过一道SHA-256,再过一道RIPEMD-160哈希算法,就是地址了。

注:两道加密算法后的输出是个160位的哈希值。

行了,Alice可以把BTC发到Bob的公共地址了,然后附个条件,Bob证明自己是自己了才能从地址里提取BTC。

Bob用自己的数字签名来解锁BTC,这个签名是从Bob私钥导出的。

或者干脆这么理解Alice&Bob之间的BTC交易:

说Alice给Bob寄了个密码箱,箱子里边有钱,只有Bob的签名才能开锁。

好了,回到脚本。

Alice给Bob发的BTC自带scriptPubKey,scriptPubKey中有Bob的地址。

Bob用自己的scriptSig签名解锁BTC, scriptSig包括Bob签名和公钥。

这套动作的代码长这样:

scriptPubKey = OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

scriptSig =

为解锁BTC,Bob进行一波scriptSig和scriptPubKey的串联操作,大概其长这样:

Image Credit: CryptoCompare

下面看看脚本如何让Bob能访问自己的这笔资金,脚本现在长这样:

OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

解锁/验证过程的脚本实现

代码现在看起来这样:

OP_CHECKSIG弹出和,检查公钥和签名是否有效。

整个过程完成后,Bob就可以解锁交易拿BTC了。

以上,是比特币交易全过程。

希望你没有中途暴走。

这也是比特币交易最常见的类型:P2PKH,即付款给公钥哈希。

有没有觉得CHECKSIG运算符有点神奇?什么情况?

下面有请比特币身后的密码学。

未完待续

相关文章

网友评论

    本文标题:比特币脚本指南(三)

    本文链接:https://www.haomeiwen.com/subject/hzbpuftx.html