主页 > 下载imtoken钱包官方 > 比特币脚本与交易分析——智能合约原型

比特币脚本与交易分析——智能合约原型

下载imtoken钱包官方 2023-01-18 23:57:31

单位时间.media

比特币最早在哪里交易_比特币币币交易是什么意思_火币比特币交易手续费

全球视野,独到见解

每个人都转账了,每笔交易都是这样的:张三的账户扣200元,李四的账户加200元。

在比特币区块链中,交易并不是那么简单。 交易实际上是通过脚本完成的,承载了更多的功能,这也是比特币被称为“可编程货币”的原因。

本文分析事务是如何可编程的。

火币比特币交易手续费_比特币币币交易是什么意思_比特币最早在哪里交易

未花费的交易输出 (UTXO)

先介绍一个概念:未花费交易输出——UTXO(Unspent Transaction Output)

事实上,比特币交易都是基于UTXO,即交易的输入是上一笔交易未花费的输出,而本次交易的输出可以作为下一笔新交易的输入。

挖矿奖励属于一种可以没有输入的特殊交易(称为 coinbase 交易)。

UTXO 是交易的基本单位,不可分割。

比特币没有余额的概念,只有分散到区块链中的UTXO

当钱从一个地址转移到另一个地址时,所有权链就形成了,就像这样:

比特币最早在哪里交易_火币比特币交易手续费_比特币币币交易是什么意思

比特币脚本

比特币交易是先提供一个解锁UTXO的脚本(通常称为解锁脚本:Signature script)(使用私钥匹配锁定脚本)比特币最早在哪里交易,也称为交易输入,交易输出指向一个脚本(称为签名脚本)。 对于锁脚本:PubKey script),这个脚本表达的是:谁的签名(signature是一种普通形式,不一定是签名)可以匹配输出地址,钱就付给谁。

每个比特币节点将通过同时执行解锁和锁定脚本(不是当前的锁定脚本,而是之前交易的锁定脚本)来验证交易。 如果脚本组合的结果为真,则为有效交易。

当解锁版脚本与锁定版脚本的设置条件匹配时,执行组合有效脚本时结果显示为真

例如,最常见的比特币交易脚本类型(Pay-to-Public-Key-Hash:P2PKH(Pay-to-Public-Key-Hash))组合是这样的:

火币比特币交易手续费_比特币币币交易是什么意思_比特币最早在哪里交易

通用交易脚本验证流程

比特币交易脚本语言是一种基于逆波兰表示法的栈式执行语言(不懂逆波兰和栈的同学可以去看大学数据结构教材,这部分也可以跳过)。

比特币脚本语言包括基本算术计算、基本逻辑(如if...then)、报错、返回结果和部分加密指令,不支持循环。

脚本语言通过从左到右处理每一项来执行脚本。

下面两张图说明了常见类型的比特币交易脚本的验证执行过程:

火币比特币交易手续费_比特币币币交易是什么意思_比特币最早在哪里交易

上图是解锁脚本的运行过程(主要是入栈)

比特币最早在哪里交易_火币比特币交易手续费_比特币币币交易是什么意思

上图展示了锁定脚本的运行过程(主要是出栈),最终结果为true,说明交易有效。

交易分析

事实上,比特币交易旨在合并多个输入和输出。

交易结构

让我们看一下完整的交易结构比特币最早在哪里交易

火币比特币交易手续费_比特币币币交易是什么意思_比特币最早在哪里交易

交易的锁定时间定义了可以添加到区块链的最早交易时间。 在大多数事务中,它被设置为 0 以指示立即执行。

如果锁定时间不为0且小于5亿,则视为区块高度,即在指定区块高度之前交易不会被写入区块链。

如果锁定时间大于 5 亿,则将其视为 Unix 纪元时间戳(自 1970 年 1 月 1 日以来的秒数),直到这个指定时间,交易才会被纳入区块链。

交易数据结构没有交易费用字段,交易费用由所有输入之和与所有输出之和之差表示,即:

交易费用 = sum(所有输入) – sum(所有输出)

交易输入结构

刚刚我们提到了输入需要提供解锁脚本,现在我们来看一个交易的输入结构:

比特币最早在哪里交易_比特币币币交易是什么意思_火币比特币交易手续费

我们结合整个交易的结构来看输入结构:

比特币币币交易是什么意思_火币比特币交易手续费_比特币最早在哪里交易

交易输出结构

刚才我们提到输出指向一个解锁脚本,具体交易的输出结构为:

比特币最早在哪里交易_比特币币币交易是什么意思_火币比特币交易手续费

下面结合整个交易的结构来看一下输出结构:

比特币最早在哪里交易_比特币币币交易是什么意思_火币比特币交易手续费

交易哈希计算

在比特币区块结构默克尔树和简单支付验证的分析中提到,区块结构包含了多笔交易的哈希。

那么交易哈希是怎么计算出来的呢?

1.交易结构的每个字段被序列化为一个字节数组

2. 将字节数组连接成支付字符串

3. 对支付字符串进行两次SHA256计算得到交易哈希