主页 > imtoken钱包app教程 > 揭开比特币和区块链的神秘面纱(四):比特币交易

揭开比特币和区块链的神秘面纱(四):比特币交易

imtoken钱包app教程 2024-01-05 05:12:00

在比特币区块链中,交易是核心内容。从前面的描述中,我们知道比特币使用了基于密码学的公私钥系统,交易的发起者可以使用自己的私钥对交易进行签名,其他人可以使用自己的公钥进行验证,这在数学上是有保证的用户资金安全。那么交易的具体结构是怎样的呢?

另外,想要快速了解和掌握区块链技术的同学,可以购买极客时代出品的“区块链通俗易懂”专栏。专栏以区块链技术为基础,带你形成完整的区块链知识体系。作者还将教你如何搭建自己的迷你区块链,带你走进区块链的世界。

简化模型

在中本聪的白皮书中,比特币被定义为链式数字签名字符串。币的所有者通过对上一笔交易和下一笔交易的公钥签署数字签名,并将签名附加到交易中来完成转账。转账的接收方可以通过验证签名来验证链的所有者是否是发送方。

事务的操作图如下:

这种设计的交易系统的问题在于,接收方很难验证之前的资产所有者是否进行了双花(双重支付)。通常的解决方案是引入受信任的第三方(例如银行)来验证每笔交易以防止双重支出。如果要排除第三方中介,那么交易信息就应该公开,整个系统的所有参与者都需要有唯一被认可的历史交易序列。收款人需要确保在交易过程中绝大多数节点都同意该交易是第一次发生。

账本系统不是基于“账户”

比特币区块链本质上是一个基于互联网的去中心化账本系统,记录在这个账本上的记录,是比特币地址之间的转账交易。具体的交易流程如上图所示。整个系统应该如何构建? .

通常有一种简单的说法,比特币公钥类似于用户的银行卡号比特币合约一秒亏50w,也就是用户的账户。那么最容易想到的交易系统的记账方式就是基于账户,简化示意图如下:

我投了比特币会亏吗_比特币合约交易中心_比特币合约一秒亏50w

这种记账方法是最容易想到的,但是比特币区块链不使用这种方法。重要的事情说了三遍,比特币的交易系统不是这样的,不是这样的,不是这样的。原因很简单。如果采用这种记账方式,每当有新的交易发生时,系统都要回溯所有的交易历史,来判断最近一笔交易是否合法,如上图所示。 ,用户C有钱吗?当系统很大,交易量很大时,每次都进行这样的检查无疑是繁琐且低效的。

那么比特币交易系统是如何构建的呢? UTXO是比特币交易的基本单位

UTXO(Unspent Transaction Outputs)是未使用的交易输出,是比特币交易生成和验证的核心概念。事务形成一组链结构。所有合法的比特币交易都可以追溯到一笔或多笔远期交易的输出。这些链的来源是挖矿奖励,最终是当前未花费交易的输出。所有未使用的输出都是整个比特币网络的 UTXO。

比特币规定,每笔新交易的输入必须是一笔交易的未花费输出,而且每笔输入还需要用之前输出对应的私钥签名,每个比特币节点都会将当前的UTXO存储在整个区块链,整个网络上的节点将通过 UTXO 和签名算法验证新交易的合法性。通过这种方式,节点可以验证新交易的合法性,而无需回溯历史。

交易输入输出

比特币交易不是通常意义上的交易,而是转账。为每次转账构建交易数据会很笨拙。为了使价值易于组合和拆分,比特币交易被设计为包含多个输入和输出。也就是说,一笔交易可以转移给多个人。从生成到在网络中传播,到工作量证明,整个网络节点的验证,最后到比特币区块链,就是一笔交易的整个生命周期。

交易的本质是一个包含交易发送方、接收方、资产转移等相关信息的数据结构。数据结构如下:

比特币合约一秒亏50w_比特币合约交易中心_我投了比特币会亏吗

字段

说明

尺寸

版本

本次交易参考的规则

4 个字节

输入数

我投了比特币会亏吗_比特币合约交易中心_比特币合约一秒亏50w

p>

交易输入列表的数量

1 - 9 个字节

输入列表

一个或多个交易输入

不确定

输出数量

我投了比特币会亏吗_比特币合约一秒亏50w_比特币合约交易中心

事务输出列表的数量

1 - 9 个字节

输出列表

一个或多个交易输出

变量

锁定时间

锁定时间

比特币合约交易中心_我投了比特币会亏吗_比特币合约一秒亏50w

4 个字节

从整体结构来看,交易的两个主要单元字段是交易的输入和输出。输入标识交易的发送者,输出标识交易的接收者和自己的找零,交​​易费用是输入之和与输出之和之间的差额。由于所有的交易输入都必须是前一笔交易的输出,所以交易的核心字段就是交易的输出。

一笔交易的数据结构图如下:

比特币交易输入(TxIn)一共有三种,分别是Standard TxIn(标准输入)、Spend Coinbase TxOut(花费挖矿奖励)、Coinbase/Generation(产生挖矿奖励),下图描述了这三种的结构输入:

比特币交易输出(TxOut Script)有两种,分别是Standard TxOut(标准交易输出)和Coinbase TxOut(挖矿奖励输出)。下图描述了这两个 TxOut 的结构:

脚本

脚本是另一种重要的交易技术。严格来说,每笔交易的每个输出都不是指向一个地址,而是指向一个脚本。脚本就像一组规则,用于控制接收者如何使用锁定在此输出上的资产。

交易合法性的验证也依赖于脚本。目前它依赖于两种类型的脚本:锁定脚本和解锁脚本。锁定脚本基于可变模式,通过一种脚本语言实现,位于交易的输出端。解锁脚本对应于锁定脚本。只有按照加锁脚本的规则解决,脚本上对应的资产才能被花费比特币合约一秒亏50w,位于交易的输入端。脚本语言可以表达无数的条件变体。这也是比特币作为“可编程货币”所具有的特点。脚本通过一个类似于我们编程领域的“虚拟机”来解释,它分布在比特币网络的每个节点上运行。

目前常用的比特币脚本有两种,一种是常见的类型P2PKH(Pay-to-Public-Key-Hash),即支付给公钥的hash就是地址,接收方只需要用地址对应的私钥对输出进行签名,才能花费输出。另一个是P2SH(Pay-to-Script-Hash),支付脚本的哈希。以多重签名为例,它要求输出有 M 个私钥(M