主页 > imtoken 下载 > 《精通比特币》学习笔记02——比特币交易模型

《精通比特币》学习笔记02——比特币交易模型

imtoken 下载 2023-10-16 05:12:54

交易输出的锁定和解锁(重点)——锁定脚本和解锁脚本

上面说了,一个账户可以控制的比特币来自于票据的输出,票据是公开的。 每个比特币账户都可以知道这笔交易以及交易的输出,那么如何保证输出只有对应的比特币账户才能使用呢?

比特币的锁机制是通过类 Forth 语言脚本实现的,它是一种非图灵完备的语言。 什么是图灵完备语言? 当一种编程语言内存无限、时间无限时,如果它能解决所有问题,则称为图灵完备,例如:C/C++、JAVA都是图灵完备的语言,否则就是图灵不完备的,没有loop in Bitcoin 脚本,所以这个脚本不能解决: 这些条件下退出循环的问题比特币交易需要收款人签名吗,否则无限循环。 比特币的脚本语言是一种简单的低级语言。 它的许多功能已被编译成二进制文件。 即使不懂语言,只要会调用接口,也可以直接使用C/C++、JAVA等语言完成加锁和解锁功能。 那么,为什么不直接使用 C++ 这样的图灵完备语言呢? 这是出于安全考虑,因为C++、JAVA等语言与内存、操作系统等运行环境密切相关,而比特币脚本运行不需要任何运行环境,可以抵御基于内存的攻击或其他通过Attacks on system vulnerabilities(这个在书上有解释。在我看来,比特币脚本更像是机器语言中一串0-1的字符串。由于低级机器语言的限制,很难执行高级编程。同样,安全性是有保证的,因为 0-1 机器语言很难破解和更改)。

下面以加锁脚本和解锁脚本为例,说明加锁的交互机制。

假设这笔交易是A向B支付比特币,当双方完成交易并生成一个账单(非矿工添加的解锁和锁定脚本),A在账单中添加一个锁定脚本,这个锁定脚本包含B的比特币地址C,因为B是在公钥哈希后才公开比特币地址C,而且由于HASH函数的性质,比特币网络上没有人可以通过C逆向B的公钥,即只有B知道他的公钥可以构建解锁脚本,也就是只有B的公钥才能通过HASH算出地址C,只有能算出地址C的比特币账户才能控制比特币。

比特币币币交易是什么意思_比特币交易 人换美元_比特币交易需要收款人签名吗

脚本语言运行

脚本语言仅由常量和操作组成。 它从前到后遍历脚本。 如果遇到常量,则将该常量压入堆栈。 如果遇到操作,则根据操作的具体要求,弹出栈顶元素或弹出两个元素。 进行计算,然后将其压入堆栈。 当脚本运行结束时,只剩下栈顶元素,它的值为 TrueFalse。 显然,True表示验证成功,也意味着执行脚本的用户有权控制bill输出比特币,用户可以将bill作为下一笔交易(bill)的输入,如下图一个具体的例子

比特币币币交易是什么意思_比特币交易需要收款人签名吗_比特币交易 人换美元

比特币交易 人换美元_比特币交易需要收款人签名吗_比特币币币交易是什么意思

比特币交易需要收款人签名吗_比特币交易 人换美元_比特币币币交易是什么意思

锁定/解锁脚本类型

1) P2PKH (Pay-to-Public-Key-Hash)——比特币网络上的大多数交易都是这种类型

解锁脚本,锁定脚本

比特币交易 人换美元_比特币交易需要收款人签名吗_比特币币币交易是什么意思

比特币交易 人换美元_比特币币币交易是什么意思_比特币交易需要收款人签名吗

比特币交易需要收款人签名吗_比特币币币交易是什么意思_比特币交易 人换美元

比特币交易需要收款人签名吗_比特币交易 人换美元_比特币币币交易是什么意思

2) P2PK (Pay-to-Public-Key)

写成收款人的公钥,收款人通过自己的私钥生成对应的公钥,从而获得控制权。

比特币交易需要收款人签名吗_比特币交易 人换美元_比特币币币交易是什么意思

比特币币币交易是什么意思_比特币交易 人换美元_比特币交易需要收款人签名吗

3) P2SH (Pay-to-Script-Hash)

此脚本类型用于多重签名支付。 比如一个公司的账户由5个人控制,但是只要有2个人以上的签名就可以进行比特币支付。

我们考虑使用2)编写多重签名命令:

比特币交易需要收款人签名吗_比特币交易 人换美元_比特币币币交易是什么意思

比特币交易 人换美元_比特币币币交易是什么意思_比特币交易需要收款人签名吗

也就是说,在使用上面的多重签名方式时,需要在锁脚本中加入每个人的公钥,因为Attorney Public Key是每个人的公钥计算的结果,而Public Key(公钥)有260bit长这样,当人多的时候,锁定脚本的容量甚至会超过账单本身比特币交易需要收款人签名吗,而且这样的脚本也很难维护,而且暴露了大家之间的联系(虽然比特币地址是匿名的)。

P2SH很好的解决了这个问题。 除了锁定脚本和解锁脚本,P2SH还有额外的赎回脚本:

比特币交易 人换美元_比特币币币交易是什么意思_比特币交易需要收款人签名吗

使用方法分为两步:①使用兑换脚本确认用户可以属于定义的群组; ②使用解锁脚本解锁(Sig1 Sig2为2组用户签名)

比特币币币交易是什么意思_比特币交易需要收款人签名吗_比特币交易 人换美元