主页 > 最新imtoken官方下载 > 比特币交易原理分析

比特币交易原理分析

最新imtoken官方下载 2023-11-07 05:12:13

比特币交易原理分析

最近一直在自学区块链。 这段时间开始系统的总结一些学习内容,写博客内容,希望能给想系统学习区块链技术的初学者或者同学一些帮助。

总结完这一系列的技术,我们就带大家从零开始开发一个迷你区块链。

迷你区块链体验地址:

关键词:比特币,区块链,交易脚本,智能合约,UTXO账户模型,价值转移

比特币交易原理分析-LMLPHP

一、比特币的UTXO模型

在谈及比特币交易流程之前,首先要说明一件事。 比特币系统没有平衡的概念。 它使用UTXO模型(Unspent Transaction Outputs,未使用的交易输出)。 我们在交易过程中常说的钱包余额,其实就是钱包地址的UTXO集合。 因此,在比特币网络中,存储比特币余额的是交易输出。 准确的说是未使用的交易输出,每笔交易的输入实际上是指上一笔交易的输出。 下图展示了比特币系统中交易输入输出的过程:

比特币交易原理分析-LMLPHP

图0 比特币系统中的交易输入输出流程

如下图所示,每笔交易都记录了时间、发送方、接收方和金额。 如果你要计算A的余额,那么你必须遍历与A相关的所有交易,减去A发送的每一笔金额,加上A收到的每一笔金额,你可以计算出来。

比特币系统中计算余额的方法也类似。 因此,计算一个用户的比特币余额,需要遍历整个交易历史。 但是,由于以太坊采用了Account模型,即余额的概念,因此无需追溯整个交易历史。

比特币交易原理分析-LMLPHP

图 1 分类帐

因此,我们可以将 UTXO 理解为一种币:它有一个数量和一个所有者。 要使交易有效,必须满足两个条件:

(1) 本次交易必须包含其花费的 UTXO 所有者的有效签名

(2) 花费的UTXO总量必须大于等于交易产生的UTXO总量。

2、交易流程

上面,我们介绍了比特币的UTXO模型,解释了比特币“余额”的概念。 接下来我们正式开始讲解比特币的交易过程,在接下来的分析过程中我们将回答两个非常重要的问题:

(1) 如何保证用户只能使用自己的比特币? (比特币账本全网公开)

(2) 如何保证交易的有效性?

下图展示了一笔交易的完整流程。 这里有两种交易,一种是Coinbase交易,即挖矿奖励的比特币,比较特殊的是没有发送方。 另一种是我们常见的普通交易,包括输入和输出。

比特币交易原理分析-LMLPHP

图2 比特币交易的基本流程

这里我们假设 Alice 获得了 12.5 个比特币的挖矿奖励。 在一笔交易中,Alice 需要转 10 个比特币给 Bob。 而Bob最终确认并收到了Alice发送的10个比特币,同时还有2.5个比特币。 事实上,这笔交易最终产生了2个输出,一个是10个比特币发送给Bob,另一个是找零产生的2.5个比特币发送给Alice(注:这里不考虑交易手续费)。

其中,进行了几个关键操作:

(1) 最初,Alice 获得了 12.5 个比特币的挖矿奖励,产生了一笔 Coinbase 交易。 此交易包含输入和输出。 输出包含当前输出的索引、数量、锁定脚本和接收者的公钥。 这里的锁定脚本的作用是设置为只有Alice可以使用这个输出。 要使用这个 UTXO,你必须证明你是爱丽丝。 如何证明将在后面解释。

(2) 然后,由于 Alice 想给 Bob 发送 10 个比特币,她要做的第一件事就是确认她是否有足够的“余额”来支付这笔交易。 上一节我们说过,要计算用户的余额比特币限定的原理,需要遍历Alice的所有交易记录。 这里比特币限定的原理,我们假设 Alice 只有一笔 Coinbase 交易,也就是说 Alice 当前的余额是 12.5 个比特币。 由于 12.5 大于要花费的 10 个比特币,交易可以继续进行。

(3) 下一步是创建交易。 这笔交易包含 1 个输入和 2 个输出(一个发送给 Alice,一个发送给她自己找零)。

由于比特币采用UTXO模型,一笔交易的输入实际上使用的是上一笔交易的输出(UTXO)。 输入还包含发送者的公钥,在本例中为 Alice 的公钥。 这里,有一个很重要的问题,我们怎么知道Alice使用的是她自己的UTXO呢? 如果 Alice 使用了别人的 UTXO,我们如何验证呢?

在这里,我们看到除了参考之前的交易输出和发送者 Alice 的公钥外,输入还包含一个解锁脚本。 解锁脚本包含 Alice 在之前交易的输出上的签名和她自己的公钥。 在《区块链快速入门》中我们知道,通过数字签名技术,我们可以使用公钥验证用户的签名(私钥加密),从而证明签名者是否为用户本人。 如下图所示,我们可以通过解锁脚本中提供的Alice签名和公钥来验证Alice是否使用了自己的UTXO。

比特币交易原理分析-LMLPHP

图3 数字签名技术(签名和验证)

(4) 在上一步中,我们验证了交易中输入引用的最后一个UTXO确实是Alice的,从而证明了输入的有效性。 接下来需要创建2个output,一个是给Bod的10个比特币,其中还包含一个只有Bod才能使用的锁定脚本; 另一个是找零产生的输出,是发送给爱丽丝的 2.5 个比特币比特币,同样包含一个只能由爱丽丝自己使用的锁定脚本。

(5) 最终交易创建后,将广播到比特币网络。 当比特币网络对这笔交易进行确认,并将该笔交易放入下一次挖矿竞争中时,该笔交易将被打包到区块中,得到全网的共识确认后,确认该笔交易有效。

比特币的基本交易流程基本上是这样的。

从下图中,我们可以了解到真正的比特币交易中包含哪些数据?

b6f6b339b546a13822192b06ccbdd817afea5311845f769702ae2912f7d94ab5交易

比特币交易原理分析-LMLPHP

比特币交易原理分析-LMLPHP

图 4 普通事务

3. 关键概念

交易包含以下信息:

3.1 交易分类

交易分为两类:

比特币交易原理分析-LMLPHP

图 5 Coinbase 交易

3.2 交易输入

交易的输入结构如下:

比特币交易原理分析-LMLPHP

图 6 交易输入结构

3.3 交易输出

交易的输出结构如下:

比特币交易原理分析-LMLPHP

图 7 交易输出结构

3.4 交易脚本(一)概念

比特币客户端使用类似 Forth 的脚本语言编写的脚本来验证比特币交易。 这种脚本语言不是图灵完备的,也没有诸如循环之类的复杂特性。 它是一种基于堆栈的执行语言。 虽然脚本语言的简单性使其无法实现复杂的功能,但也提高了交易脚本的安全性(设计简单,攻击面减少)。 但以太坊批评比特币交易脚本功能有限,因此设计了图灵完备的脚本语言,也就是我们常说的智能合约脚本语言,可以实现更复杂的功能,但同时也增加了安全风险。

当验证比特币交易时,每个输入中的解锁脚本与其引用的输出中的锁定脚本同时执行,从而检查交易是否有效。 图 8 显示了最常见的比特币交易类型的解锁和锁定脚本。

比特币交易原理分析-LMLPHP

图8 解锁脚本和锁定脚本

(2) 验证过程

当我们拿到一笔交易时,如何验证交易输入是否有效,即如何验证输入引用的输出是否有效。

首先将当前输入的解锁脚本与输入引用的上一笔交易输出的锁定脚本结合起来如图8所示,进行如下验证过程。 如果最终返回 TRUE,则交易有效。

比特币交易原理分析-LMLPHP

图9 交易有效性验证流程

从上面的验证过程中,其实我们可以发现,如果我们要实现多人签名的验证和定时消费的验证(需要多长时间才能使用),也可以利用上面的原理。

(3)实例分析

接下来,我们将通过分析一笔真实的比特币交易来加深对比特币交易脚本验证过程的理解。

地址:

比特币交易原理分析-LMLPHP

图10cca7507897abc89628f450e8b1e0c6fca4ec3f7b34cccf55f3f531c659ff4d79交易数据

为了验证交易是否有效,我们需要

使用当前输入中的解锁脚本验证 cca7507897abc89628f450e8b1e0c6fca4ec3f7b34cccf55f3f531c659ff4d79 中输入引用的最后一个输出的锁定脚本。

解锁脚本(SriptSig):

8b4830450221009908144ca6539e09512b9295c8a27050d478fbb96f8addbc3d075544dc41328702201aa528be2b907d316d2da068dd9eb1e23243d97e444d59290d2fddf25269ee0e0141042e930f39ba62c6534ee98ed20ca98959d34aa9e057cda01cfd422c6bab3667b76426529382c23f42b9b08d7832d4fee1d6b437a8526e59667ce9c4e9dcebcabb

翻译后:

解锁脚本包含发送者的签名(绿色部分)和公钥(红色部分)。

此输入引用的先前输出的锁定脚本:

比特币交易原理分析-LMLPHP

输入引用的最后一个交易输出可以找到如下:

比特币交易原理分析-LMLPHP

它的锁定脚本是:1976a91446af3fb481837fadbb421727f9959c2d32a3682988ac

翻译后:

我们将解锁脚本和锁定脚本结合在一起进行验证:

然后一条一条执行命令:

最终交易脚本返回TRUE,证明交易的有效性。

注:如果你想了解更多关于比特币的脚本语言,你可以查看: