主页 > imtoken钱包劫持 > 比特币与区块链揭秘(四):比特币交易

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

imtoken钱包劫持 2023-07-01 05:47:12

在比特币区块链中,交易是核心内容。 通过前面的描述我们知道,通过基于密码学的公私钥体系,交易的发起方可以使用自己的私钥对交易进行签名比特币孤块中的交易,其他人可以使用自己的公钥进行验证,这在数学上是有保证的。 用户资金安全。 那么交易的结构究竟是怎样的呢? 本文将重点介绍。 附上前三篇文章。

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

交易运行图如下:

比特币孤块中的交易_比特币莱特币量子链等交易_如果国内比特币交易网站销户了,那以后怎么交易

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

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

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

经常有一种简单的说法,比特币公钥比作用户的银行卡号,即用户的账户。 那么最容易想到的交易系统的记录方式就是基于账户的,简化示意图如下:

比特币孤块中的交易_比特币莱特币量子链等交易_如果国内比特币交易网站销户了,那以后怎么交易

如果国内比特币交易网站销户了,那以后怎么交易_比特币莱特币量子链等交易_比特币孤块中的交易

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

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

UTXO(Unspent Transaction Outputs)是未花费的交易输出,是比特币交易生成和验证的核心概念。 交易构成了一套链式结构。 所有合法的比特币交易都可以追溯到一笔或多笔交易的输出。 这些链条的源头是挖矿奖励,终点是当前未花费的交易产出。 所有未花费的输出都是整个比特币网络的 UTXO。

比特币规定每笔新交易的输入必须是某笔交易未花费的输出,每笔输入还需要用之前输出对应的私钥进行签名,每个比特币节点都会将当前的UTXO存储在整个区块链上,全网节点通过UTXO和签名算法验证新交易的合法性。 这样,节点就不需要追溯历史来验证新交易的合法性。

交易输入输出

比特币交易不是通常意义上的一手支付一手交付的交易,而是转账。 每次转账都构造一个交易数据会很尴尬。 为了使价值易于组合和分割,比特币交易被设计成包括多个输入和输出。 即一笔交易可以转给多人。 从产生到在网络中传播,通过工作量证明,整个网络节点的验证,最后记录在比特币区块链中,就是交易的整个生命周期。

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

场地

比特币莱特币量子链等交易_如果国内比特币交易网站销户了,那以后怎么交易_比特币孤块中的交易

描述

尺寸

版本

本次交易参考的规则

4字节

输入数量

交易输入列表的数量

1 - 9 字节

如果国内比特币交易网站销户了,那以后怎么交易_比特币孤块中的交易_比特币莱特币量子链等交易

输入列表

一个或多个交易输入

不定

输出数量

交易输出列表数量

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),支付脚本的哈希值。 以多重签名为例,要求输出的N个私钥中有M个私钥(M