主页 > imtoken钱包下载 > 揭秘比特币和区块链(四):比特币交易

揭秘比特币和区块链(四):比特币交易

imtoken钱包下载 2023-01-16 21:51:54

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

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

简化模型

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

区块链比特币哥

事务的操作图如下:

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

账本系统不以“账”为基础

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

区块链比特币哥

经常有一种简单的说法,比特币公钥类似于用户的银行卡号,也就是用户的账户。那么考虑交易系统最简单的方法就是基于账户,简化示意图如下所示:

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

那么比特币交易系统是如何构建的呢?

UTXO是比特币交易的基本单位

区块链比特币哥

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

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

交易输入输出

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

区块链比特币哥

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

字段 描述 大小 版本 本次交易涉及的规则 4 字节 输入编号 交易输入列表编号 1 - 9 字节 输入列表 一个或多个交易 多个交易输出 无限锁定时间 锁定时间 4 字节 从整体结构来看,交易的两个主要单元字段交易是交易的输入和输出。输入标识交易的发送者,输出标识交易的接收者和自己的零钱,交易费用是输入之和与输出之和之间的差额。由于所有的交易输入都必须是前一笔交易的输出,所以交易的核心领域就是交易的输出。

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

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

区块链比特币哥

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

脚本

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

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

比特币脚本目前主要分为两种,一种是普通类型的P2PKH(Pay-to-Public-Key-Hash)区块链比特币哥,即支付到公钥的hash就是地址,接收方只需要使用对应的地址输出可以通过用私钥对输出进行签名来使用。另一个是P2SH(Pay-to-Script-Hash),支付脚本的哈希。以多重签名为例,它要求输出有M个私钥(同时N个私钥中的M个私钥)