主页 > imtoken官网版 > 谈谈我对比特币脚本的理解

谈谈我对比特币脚本的理解

imtoken官网版 2023-10-09 05:10:21

锁定脚本和解锁脚本

比特币脚本存在的意义在于让每一笔交易合法化。 这种合法化不是人工审查的,而是通过脚本自动验证的。

脚本分为锁定脚本和解锁脚本。 锁定脚本和UTXO对应,一个UTXO包含一个锁定脚本。

当要用到这个UTXO的时候,比如alice在给bob转账的时候需要引用这个UTXO,从而产生一笔交易。 只有当交易被验证时,它才能在比特币网络中传播(传播后可以由矿工添加到区块链中,这部分不再详细描述。)

验证需要的是解锁脚本。

从上面的流程可以看出,锁定脚本是关联UTXO的,而解锁脚本是关联某笔交易的。

锁定脚本称为scriptPubKey,解锁脚本称为ScriptSig。

脚本以什么形式存在? 其实就是一堆命令加参数。

比特币行情实时走势图比特币行情_比特币区块和比特币的区别_比特币的理解

图片

比特币区块和比特币的区别_比特币的理解_比特币行情实时走势图比特币行情

上图中dup、hash160等为命令,sig、pubk为参数。

脚本语言执行原理

脚本执行流程基于堆栈模型。 这和我大学数据结构课上讲的表达式求值的实现逻辑很像。

输入形式:表达式,如2*(3+4)

输出格式:运算结果

其中2、3、4相当于脚本中的参数比特币的理解,而*、+号是脚本的命令。

实现逻辑是基于栈结构的,先入栈,再出栈,决定如何操作。

比特币脚本也实现了类似的逻辑,而且更简单(没有优先级)。

比特币行情实时走势图比特币行情_比特币区块和比特币的区别_比特币的理解

比特币区块和比特币的区别_比特币行情实时走势图比特币行情_比特币的理解

图片

上图是一个非常简单的脚本,就是判断2加3是否等于5。下面将详细介绍一个实际的比特币交易脚本的执行过程。

数字签名和验证

Bitcoin Script 的认证机制使用了数字签名的概念。 这部分知识是一个单独的部分,基于非对称密钥算法,不特定于比特币脚本。 这部分如果要详细解释,会占用很多篇幅,这里不再赘述。 不懂的请自行参考。

比特币地址是如何产生的

在继续之前,您需要了解公钥和比特币地址之间的关系:

以公钥K为输入,计算其SHA256哈希值,并根据此结果计算RIPEMD160哈希值

十六进制得到一个长度为 160 位(20 字节)的数字:

A = RIPEMD160(SHA256(K))

比特币的理解_比特币区块和比特币的区别_比特币行情实时走势图比特币行情

式中,K为公钥,A为生成的比特币地址。

比特币交易示例

假设alice要付给bob 0.015个比特币,alice会使用一个UTXO(假设是单一输入,单一输出)比特币的理解,这个UTXO有一个锁定脚本来为交易设置一个“障碍”。

锁定脚本如下:


OP_DUP OP_HASH160 be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG

比特币区块和比特币的区别_比特币行情实时走势图比特币行情_比特币的理解

bob如果想收到这个比特币(换种说法是bob可以参考输出),他必须给一个解锁脚本,然后解锁脚本和锁定脚本的组合结果为真来确认交易有效。

解锁脚本如下:

3046022100ba1427639c9f67f2ca1088d0140318a98cb1e84f604dc90ae00ed7a5f9c61cab02210094233d018f2f014a5864c9e0795f13735780cafd51b950f503534a6af246aca301
03a63ab88e75116b313c6de384496328df2656156b8ac48c75505cd20a4890f5ab

它看起来像是一串数字,但实际上是“签名”和“公钥”(sig & pubkey)的组合。 签名是用bob的私钥加密交易信息的结果,公钥是指bob的公钥。

因为只有 bob 知道私钥,所以只有他才能想出正确的签名。

下面是脚本执行的过程:

比特币行情实时走势图比特币行情_比特币区块和比特币的区别_比特币的理解

比特币行情实时走势图比特币行情_比特币区块和比特币的区别_比特币的理解

图片

比特币行情实时走势图比特币行情_比特币区块和比特币的区别_比特币的理解

图片

一个几十字节的简单脚本就完成了对交易的验证,确保转账的合法性。

比特币脚本的变体

上面介绍的例子都是基于比特币最基本的P2PKH交易类型。 现在比特币核心已经升级了很多版本,脚本的验证机制也发生了很大的变化。 比如现在广泛使用的多重签名脚本。 尽管这些变体脚本变得越来越复杂,但基本思想都是基于以上原则。

参考

[1] Andreas M. Antonopoulos

[2]