零点课堂 | 比特币脚本及交易分析-智能合约雏形(1)

大家都有转过账,每笔交易是这样的:张三账上减¥200,李四账上加¥200。

比特币区块链中,交易不是这么简单,交易实际是通过脚本来完成,以承载更多的功能个,这也是为什么比特币被称为是一种“可编程的货币”。

本文就来分析一下交易是如何实现可编程的。

未花费的交易输出(UTXO)

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

其实比特币的交易都是基于UTXO上的,即交易的输入是之前交易未花费的输出,这笔交易的输出可以被当做下一笔新交易的输入。

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

UTXO是交易的基本单元,不能在分割。

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

随着钱从一个地址被移动到另一个地址的同时形成了一条所有权链,像这样:

比特币脚本

比特币交易是首先要提供一个用于解锁UTXO(用私钥去匹配锁定脚本)的脚本(常称为解锁脚本:Signature script),这也叫交易输入,

交易的输出则是指向一个脚本(称为锁定脚本:PubKey script),这个脚本表达了:谁的签名(签名是常见形式,并不一定必须是签名)能匹配这个输出地址,钱就支付给谁。

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

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

如最为常见类型的比特币交易脚本(支付到公钥哈希:P2PKH(Pay-to-Public-Key-Hash))组合是这样:

比特币脚本及交易分析-智能合约雏形

常见交易脚本验证过程

比特币交易脚本语言是一种基于逆波兰表示法的基于栈的执行语言(不知道逆波兰和栈的同学去翻大学数据结构课本,你也可跳过这个部分)。

比特币脚本语言包含基本算数计算、基本逻辑(比如if…then)、报错以及返回结果和一些加密指令,不支持循环。

脚本语言通过从左至右地处理每个项目的方式执行脚本。

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

比特币脚本及交易分析-智能合约雏形

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

比特币脚本及交易分析-智能合约雏形

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

本文由 零点财经 作者:tao 发表,其版权均为 零点财经 所有,文章内容系作者个人观点,不代表 零点财经 对观点赞同或支持。如需转载,请注明文章来源。
分享生成图片
56

发表回复

零点课堂 | 比特币脚本及交易分析-智能合约雏形(1)

2021-06-10 16:22:07

大家都有转过账,每笔交易是这样的:张三账上减¥200,李四账上加¥200。

比特币区块链中,交易不是这么简单,交易实际是通过脚本来完成,以承载更多的功能个,这也是为什么比特币被称为是一种“可编程的货币”。

本文就来分析一下交易是如何实现可编程的。

未花费的交易输出(UTXO)

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

其实比特币的交易都是基于UTXO上的,即交易的输入是之前交易未花费的输出,这笔交易的输出可以被当做下一笔新交易的输入。

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

UTXO是交易的基本单元,不能在分割。

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

随着钱从一个地址被移动到另一个地址的同时形成了一条所有权链,像这样:

比特币脚本

比特币交易是首先要提供一个用于解锁UTXO(用私钥去匹配锁定脚本)的脚本(常称为解锁脚本:Signature script),这也叫交易输入,

交易的输出则是指向一个脚本(称为锁定脚本:PubKey script),这个脚本表达了:谁的签名(签名是常见形式,并不一定必须是签名)能匹配这个输出地址,钱就支付给谁。

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

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

如最为常见类型的比特币交易脚本(支付到公钥哈希:P2PKH(Pay-to-Public-Key-Hash))组合是这样:

比特币脚本及交易分析-智能合约雏形

常见交易脚本验证过程

比特币交易脚本语言是一种基于逆波兰表示法的基于栈的执行语言(不知道逆波兰和栈的同学去翻大学数据结构课本,你也可跳过这个部分)。

比特币脚本语言包含基本算数计算、基本逻辑(比如if…then)、报错以及返回结果和一些加密指令,不支持循环。

脚本语言通过从左至右地处理每个项目的方式执行脚本。

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

比特币脚本及交易分析-智能合约雏形

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

比特币脚本及交易分析-智能合约雏形

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