购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4
交易的构建

Alice的钱包应用程序包含了选择输入和生成输出来构建交易的所有逻辑,以满足Alice的具体要求。Alice仅需选择付款地址、金额和交易手续费,之后的构建过程在钱包应用程序中自动完成,她无须关注细节。重要的是,如果钱包已经知道该使用哪些输入,那么即使它完全离线,也能构建交易。就像在家写支票然后把它放在信封里之后寄到银行一样,在不连接比特币网络的状态下也能完成交易的构建和签名。

2.4.1 获取正确的输入

Alice的钱包应用程序首先需要找到能够支付她想要发送给Bob的金额的输入。大多数钱包会追踪属于钱包中地址的所有可用输出。因此,Alice的钱包也包含来自Joe交易的交易输出的记录,这个输出是现金换币产生的(见1.2.6节)。一个在全节点上运行的比特币钱包应用程序实际上包含了每一个已确认交易但未花费输出的记录,这些输出被称为未花费交易输出(Unspent Transaction Output,UTXO)。然而,因为全节点需使用更多资源,许多用户运行的是轻量级客户端钱包,所以这些客户端只跟踪用户自己的UTXO。

在这个例子中,这一个单独的UTXO足以支付这个播客节目的费用。如果不是这样,那么Alice的钱包应用程序可能需要组合多个较小的UTXO,就像从钱包里挑选硬币一样,直到找到足够的硬币来支付播客节目。无论哪种情况,都可能需要找零,我们将在2.4.2节看到,钱包应用程序是如何创建交易输出(付款或找零)的。

2.4.2 创建交易输出

一个交易输出以脚本的形式被创建,其内容大意是:“谁能够出示对应Bob公共地址私钥的签名,就能使用这个输出。”因为只有Bob才拥有与该地址对应的私钥钱包,所以只有Bob的钱包能够出示这样的签名,并在之后消费这笔输出。因此Alice需要来自Bob的签名来保护转账的金额。

这笔交易还将包含第二个输出,因为Alice的输入资金超过了购买播客的费用。Alice的找零输出和支付给Bob的款项在同一笔交易中被创建。本质上,Alice的钱包将她的输入资金分成了两部分:一部分给Bob,另一部分作为找零还给她自己。她可以在后续的交易中使用这个找零输出。

最后,为了让这笔交易及时被网络处理,Alice的钱包应用程序会多付一小笔手续费。这笔费用没有显式地包含在交易中,而是通过输入和输出的差值隐含表示。这笔手续费由矿工收取,作为将交易纳入记录在区块链上的区块中的费用。

要查看Alice发送给Bob商店的交易,请见 https://oreil.ly/GwBq1

2.4.3 打包交易到区块链

Alice的钱包应用程序创建的交易包含了确认原始资金和新所有者所有权的全部信息。现在,这笔交易必须广播到比特币网络,在那里它将成为区块链的一部分。接下来我们将看到一个交易是如何成为新区块的一部分,以及该区块是怎样被挖矿的。最后,我们将看到一旦新区块被添加到区块链中,随着更多区块的加入,网络对它的信任程度是如何逐渐增强的。

广播交易

因为一个交易包含了处理它所需的所有信息,所以它可以随时随地传输到比特币网络。比特币网络是一个点对点网络,每个比特币节点通过连接其他多个比特币节点来加入网络。比特币网络的目的是将交易和区块传播给所有节点。

交易是如何传播的

在比特币的点对点网络中,节点是既拥有处理逻辑又包含验证新交易正确性所需的全部数据的程序。节点之间的连接相当于无向图中的边(线条),而节点本身则是无向图中的点(节点)。因此,比特币网络中的节点通常被称为“全验证节点”,简称全节点。

Alice的钱包应用程序可以通过任何网络连接将新交易发送至任意一个比特币节点:有线、Wi-Fi、移动网络等。她还可以将交易发送至其他程序(例如区块链浏览器),由其转发至节点。她的比特币钱包无须直接连至Bob的比特币钱包,也不必使用Bob提供的互联网连接,尽管这两种选项也都是可行的。任何比特币节点在收到一笔新的有效交易后都会将其转发至连接的其他所有节点,这种传播技术被称为“流言算法”(Gossip协议)。因此,这笔交易迅速在点对点网络中传播开来,几秒钟内就能到达大部分节点。

Bob的视角

如果Bob的比特币钱包应用程序与Alice的钱包应用程序直接连接,那么Bob的钱包应用程序可能是第一个收到交易的。然而,即使Alice的钱包通过其他节点发送交易,交易也将在几秒钟内到达Bob的钱包。Bob的钱包将立即识别Alice的交易作为待收款的交易,因为它包含一个由Bob的私钥可赎回的输出。Bob的钱包应用程序还可以独立验证交易的格式是否正确。如果Bob有自己的全节点,那么他的钱包还能进一步验证Alice的交易输入的UTXO(未花费交易输出)的合法性。 deODoWEtTeP1EySmEgAIr5K6QLaRK7P2lHQwWzxvXFaJDVO7JVrIxOWiwabjOlV+

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开