08-BTC-脚本
2022-12-06 02:56
Words count:
9239
北京大学公开课《区块链技术于应用》笔记,由肖臻老师讲授,主要讲解区块链的基本概念和实现原理。
交易实例
上图是比特币的一个交易实例。该交易有一个输入两个输出。左上角写着 Output,其实是这个交易的输入。右边两个输出,上面 Unspent 即没有花出,下面 Spent 表示已花出。该交易已经收到了 23 个确认,所以回滚的可能性很小了。
下面是这个交易的输入输出脚本,输入脚本包含两个操作,分别把两个很长的数压入栈里。比特币使用的脚本语言是非常简单的,唯一能访问的内存空间就是一个堆栈。不像通用的编程语言,像 C 语言 C++那样有全局变量、局部变量、动态分配的内存空间,它在这里就是一个栈,所以叫做基于栈的语言。这里输出脚本有两行,分别对应上面的两个输出。每个输出有自己单独的一段脚本。
交易结构
- txid - transaction ID,交易ID。
- hash - 该交易的哈希值。
- version - 使用的比特币协议的版本。
- size - 该交易的大小。
- locktime - 用来设定交易的生效时间。此处的 0 表示立即生效。绝大多数情况下,locktime 都是 0。如果是非零值,那么该交易要过一段时间才能生效。比如要等 10 个区块以后才能被写入区块链里。
- vin、vout - 是输入输出部分,下面会详细讲解。
- blockhash - 是这个交易所在区块的哈希值。
- confirmations - 该交易已经有多少个确认信息。
- time - 是交易产生的时间。
- blocktime - 是这个区块产生的时间。(time 和 block time 都是指很早的一个时间到现在过了多 少秒)
交易的输入
上图是交易的输入结构,是一个数组结构。意味着,一个交易可以有多个输入,在这个例子中只有一个输入。每个输入都要说明该输入花的币是来自之前哪个交易的输出,所以前两行给出输出币的来源。
- txid - 表示之前交易的哈希值。
- vout - 表示之前交易里的第几个输出。所以这里表示花的币来自于哈希值为
c0cb...c57b的交易中第 0 个输出。 - scriptSig:表示输入脚本,输入脚本最简单的形式就是给出 signification 就行了,证明你有权利花这个钱。下文中 scriptSig 就写成 input script(输入脚本)。如果一个交易有多个输入,每个输入都要说明币的来源,并且要给出签名,也就是说比特币中的一个交易可能需要多个签名。
0
times bought
•
0
times reward