Mastering Bitcoin Chapter02 比特币原理

2.1 交易,块,挖矿和区块链

2.1.1 比特币概述

比特币系统的三个组成部分:

  1. 用户(用户通过密钥控制钱包);
  2. 交易(每一笔交易都会被广播到整个比特币网络)
  3. 矿工(通过竞争计算生成在每个节点达成共识的区块链,区块链是一个分布式的公共权威账簿, 包含了比特币网络发生的所有的交易)。 图2-1比特币网络概览

常见的区块链数据查询网站包括:

Bitcoin Block Explorer

BlockCypher Explorerblockchain.info

BitPay Insight

以上每一个查询网站都有搜索功能,可以通过地址,交易哈希值或区块号,搜索到在比特币网络和区块链中对应的数据。我们将给每个交易和区块例子提供一个链接,方便你做详细研究。

2.1.2 买咖啡

注意从千分之一比特币(1毫比特币)到一亿分之一比特币(1聪比特币),比特币网络可以处理任意小额交易。在本书中,我们将用“比特币”这个术语来表示任意数量的比特币货币,从最小单元(1聪)到可被挖出的所有比特币总数 (21,000,000)。

例1. 查看Alice的交易

点击查看Alice的交易

2.2 比特币交易

简单来说,交易告知全网:比特币的持有者已授权把比特币转帐给其他人。而新持有者能够再次授权,转移给该比特币所有权链中的其他人,产生另一笔交易来花掉这些比特币,后面的持有者在花费比特币也是用类似的方式。

2.2.1 交易输入输出

每一笔交易包含一个或多个“输入”。这笔交易的另一面,有一个或多个“输出”。这些输入和输出的总额不需要相等。

当输出累加略少于输入量时,两者的差额就代表了一笔隐含的“矿工费”,这也是将交易放进账簿的矿工所收集到的一笔小额支付。如图2-3描述的是一笔作为记账簿记录的比特币交易。交易也包含了每一笔被转移的比特币(输入)的所有权证明,它以所有者的数字签名形式存在,并可以被任何人独立验证。在比特币术语中,“消费”指的是签署一笔交易:转移一笔以前交易的比特币给以比特币地址所标识的新所有者。

图2-3交易就像复式记账

2.2.2 交易链

最近交易的输入对应以前交易的输出。Alice的密钥提供了解锁之前交易输出的签名,因此向比特币网络证明她拥有这笔钱。她将买咖啡的这笔支付附加到Bob的地址上,实现“阻止”那笔输出,明确指明要求是Bob签名才能消费这笔钱。这就描述了在Alice和Bob之间钱的转移。下图展示了从Joe到Alice再到Bob的交易链。

图2-5交易链中,一笔交易输出就是另一笔交易的输入

2.2.3 找零

许多比特币交易都会包括新所有者的地址(买方地址)和当前所有者的地址(称为找零地址)的输出。称为赵找零地址。重要的是,找零地址不必与输入时提供的地址相同,出于隐私的原因,通常是所有者钱包中的新地址。

不同的钱包可以在汇总输入以进行用户请求的付款时使用不同的策略。它们可能会聚合许多小输入,或者使用等于或大于所需付款的输入。除非钱包可以以这样的方式汇总输入,以便将所需付款与交易费用完全匹配,否则钱包将需要产生一些找零。

2.2.4 常见的交易形式

最常见的交易形式是从一个地址到另一个地址的简单支付,这种交易也常常包含给支付者的“找零”。一般交易有一个输入和两个输出,如图2-5所示:

图2-5最普通的交易

另一种常见的交易形式是集合多个输入到一个输出(如图2-6)的模式。这相当于现实生活中将很多硬币和纸币零钱兑换为一个大额面钞。像这样的交易有时由钱包应用产生来清理许多在支付过程收到的小数额的找零。

图2-6打包资金的交易

最后,另一种在比特币账簿中常见的交易形式是将一个输入分配给多个输出,即多个接收者(如图2-7)的交易。这类交易有时被商业实体用作分配资金,例如给多个雇员发工资的情形。

图2-7分散资金的交易

2.3 交易的构建

比特币交易建立和签名时不用连接比特币网络。只有在执行交易时才需要将交易发送到网络。

2.3.1 获取正确的输入

大多数钱包应用跟踪着钱包中某个地址的所有可用输出。因此钱包会记录比特币的交易输出副本。完整客户端含有整个区块链中所有交易的所有未消费输出副本。这使得钱包既能拿这些输出构建交易,又能在收到新交易时很快地验证其输入是否正确。然而,完整客户端占太大的硬盘空间,所以大多数钱包使用轻量级的客户端,只保存用户自己的未消费输出。

例子2-1展示了用HTTP GET命令对一个特定URL建立了一个API的请求。这 个URL会返回一个地址的所有未消费交易输出,以提供给需要这些信息的任何应用作为建立新交易的输入而进行消费。 我们用一个简单的HTTP命令行客户端 cURL来获得这个响应数据。

例2-1 查找Alice的比特币地址所有的未消费的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ curl https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK
{

"unspent_outputs":[

{
"tx_hash":"186f9f998a5...2836dd734d2804fe65fa35779",
"tx_index":104810202,
"tx_output_n": 0,
"script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 10000000, // 千万聪 (satoshi),即 0.10比特币
"value_hex": "00989680",
"confirmations":0
}

]
}

提示点击这里 查看Joe和Alice间的交易信息

2.3.2 创建交易输出

交易的输出会被创建成为一个包含这笔数额的脚本的形式,只能引入这个脚本的一个解后才能兑换。这个脚本只有接收方的钱包的私钥可以匹配这个地址,所以只有接受方的钱包可以提供这个签名以兑换这笔输出。因此Alice 会需要Bob的签名来包装一个输出。

这个交易还会包含第二个输出,即 Alice 对自己的找零。

最后,为了让这笔交易尽快地被网络处理,Alice的钱包会多付一小笔费用。这个不是明显地包含在交易中的;而是通过输入和输出的差值所隐含的。如果Alice创建找零时只找 0.0845比特币,而不是 0.085比特币的话,这里就有剩下 0.0005比特币(50万聪) 。因为加起来小于 0.10,所以这个 0.10 比特币的输入就没有被完整的消费了。这个差值会就被矿工当作交易费放到区块的交易里,最终放进区块链帐薄中。

这个交易的结果信息可以用区块链数据查询站点看到,如图2-8所示。

图2-8 Alice和Bob咖啡店的交易

提示点击这里查看Alice支付Bob咖啡的交易的信息

2.3.3 将交易放到总账簿中

这个被Alice钱包应用创建的交易大小为258字节,包含了确认资金所有权和分配给新所有者所需要的全部信息。

2.3.3.1 交易的传送

因为这个交易包含处理所需的所有信息,所以这个交易是被如何或从哪里传送到比特币网络的就无所谓了。比特币网络是由参与的比特币客户端联接几个其他比特币客户端组成的P2P网络。比特币网络的目的是将交易和区块传播给所有参与者。

2.3.3.2 如何传播

参与比特币网络的任何系统(例如服务器,桌面应用程序或钱包)都称为比特币节点。任何比特币网络节点(其它客户端)收到一个之前没见过的有效交易时会立刻将它转发给联接到自身的其它节点。 因此,这个交易迅速地从P2P网络中传播开来,几秒内就能到达大多数节点。

2.3.3.3 Bob的视角

提示一个对比特币交易的常见误解是它们必须要等10分钟后被确认加进一个新区块,或等60分钟以得到六次确认后才是有效的。虽然这些确认可以确保交易已被整个网络接受,但对于像一杯咖啡这样的小额商品来说就没有必要等待那么长时间了。一个商家可以免确认来接受比特币小额支付。这样做的风险不比没有身份证或签名的信用卡付款的风险更大,而后者是现在商家常做的事情。

2.4 比特币挖矿

这个交易现在在比特币网络上传播开来。但只有被一个称为挖矿的过程验证且加到一个区块中之后,这个交易才会成为这个共享账簿(区块链)的一部分。比特币系统的信任是建立在计算的基础上的。交易被包在一起放进区块中时需要极大的计算量来证明,但只需少量计算就能验证它们已被证明。

挖矿在比特币系统中有两个重要作用:

▷ 挖矿节点通过参考比特币的共识规则验证所有交易。 因此,挖矿通过拒绝无效或畸形交易来提供比特币交易的安全性。

▷ 挖矿在构建区块时会创造新的比特币,和一个中央银行印发新的纸币很类似。每个区块创造的比特币数量是固定的, 随时间会渐渐减少。

挖矿在成本和报酬之间取得了良好的平衡。 挖矿采用电力来解决数学问题。 一个成功的矿工将以新的比特币和交易费的形式获取奖励。 但是,只有矿工正确验证了所有的交易,才能获得奖励,才能达到协商一致的规则。 这种微妙的平衡为没有中央权力机构的比特币提供安全保障。

2.5 区块中的挖矿交易记录

新交易不断地从用户钱包和应用流入比特币网络。当比特币网络上的节点看到这些交易时,会先将它们放到各自节点维护的一个临时的未经验证的交易池中。当矿工构建一个新区块时, 会将这些交易从这个交易池中拿出来放到这个新区块中,然后通过尝试解决一个非常困难的问题(也叫工作量证明)以证明这个新区块的合法性。

这些交易被加进新区块时,以交易费用高的优先以及其它的一些规则进行排序。矿工一旦从网络上收到一个新区块时, 会意识到在这个区块上的解题竞赛已经输掉了,会马上开始下一个新区块的挖掘工作。

Jing的ASIC矿机发现了新区块的正解并将之发布为第277,316号区块,包含420个交易,包括Alice的交易。包含Alice交易的区块对这个交易来说算一次"确认"。

提示你可以查看包含Alice交易记录的这个区块的信息。

大约19分钟后,第277,317号新区块诞生在另一个挖矿节点中。因为这个新区块是在包含Alice交易的第277,316号区块的上层(栈),在这个区块的基础上增加了更多的计算,因此就加强了这些交易的可信度。基于这个区块每产生一个新区块,对这个交易来说就会增加了一次"确认"。当区块一个个堆上来时,这个交易变得指数级地越来越难被推翻,因此它在网络中得到更多信任。按惯例来说,一个区块获得六次以上“确认”时就被认为是不可撤销的了,因为要撤销和重建六个区块需要巨量的计算。在第10章我们会详细描述挖矿和信任建立的过程。

图2-9Alice的交易包括在区块277316

2.6 消费这笔交易

既然Alice的这笔交易已经成为区块的一部分被嵌入到了区块链中,它就成为了整个分布式比特币账簿的一部分并对所有比特币客户端应用可见。每个比特币客户端都能独立地验证这笔交易是有效且可消费的。

图2-10Alice的交易成为 Joe 和 Gopesh交易的一部分

在本章中,我们看到了交易如何被构建为一个链,并将价值从一个所有者转移到所有者。 我们还追踪了Alice的交易,从她的钱包中创建的那一刻起,通过比特币网络被矿工记录在区块链。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×