精通比特币(二)比特币的原理

目录

交易、区块、挖矿和区块链

比特币交易

常见的交易形式

交易的构架

获取正确的输入

创建交易输出

将交易放到总账簿中

比特币挖矿

区块链中的挖矿交易记录

消费这笔交易


交易、区块、挖矿和区块链

比特币系统的构成:

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

从千分之一比特币(1毫比特币)到一亿分之一比特币(1聪比特币),比特币网络可以处理任意小额交易。

比特币交易

交易就像复式记账法账簿中的行。每一笔交易都包含一个或多个“输入”,输入是针对一个比特币账号的负债

这笔交易的另一面,有一个或多个“输出”,被当成信用点数记入到比特币账户中。这些输入和输出的总额(负债和信用)不需要相等。相反,当输出累加略小于输入量时,两者的差额就代表了一笔隐含的“矿工费”,这也是将交易放进账簿的矿工所收集到的一笔小额支付。

交易也包含了每一笔被转移的比特币(输入)的所有权证明,它以所有者的数字签名形式存在,并可以被任何人独立验证。

在比特币术语中,“消费”指的是签署一笔交易:转移一笔以前交易的比特币给以比特币地址所标识的新所有者。

交易是将钱从交易输入移至输出。输入时指钱币的来源,通常是之前一笔交易的输出。交易的输出则是通过关联一个密钥的方式将钱赋予一个新的所有者。目的密钥被称为是安全锁(Encumbrance)。这样就给资金增加了一个要求:有签名才能在以后的的交易中赎回资金,一笔交易的输出可以被当做另一笔新交易的输入,这样随着钱从一个地址被移动到另一个地址的同事形成了一条所有权链。

常见的交易形式

1、最常见的交易形式是从一个地址到另一个地址的简单支付,这种交易也常常包含给支付者“找零”。所以包含一个输入和两个输出:

输入:支付方;

输出:收款方、支付方;

2、另一种常见的交易形式是集合多个输入到一个输出。相当于现实生活中将很多零钱换成大额面钞。

像这样的交易有时由钱包用产生来清理血多在支付过程中收到的小数额的找零。

3、最后,另一种在比特币账簿中常见的交易形式是将一个输入分配各多个输出。这类交易有时被商业实体用作分配资金。

交易的构架

钱包应用甚至可以在完全离线时建立交易。

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

获取正确的输入

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

如果钱包客户端没有某一未消费交易输出,它可以通过不同的服务者提供的各种API或完胜索引节点的JSON RPC API从比特币网络中拿到这一交易。

如下展示了使用HTTP GET命令对一个特定URL建立了一个RESTful API的请求。这个URL会返回一个地址的所有未消费输出,以提供给需要这些信息的任何应用座位建立新交易的输入而进行消费。

如上展示了Alice的地址1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK上面有一个未消费输出(还未被兑换)。这个响应包含一个交易的索引。而从Joe那里转过来的未消费输入就包含在这个交易中。它的价值是一千万聪(satoshi),即0.10比特币。通过这个信息,Alice的钱包应用就可以创建新的交易将钱包转账到新地址。

Alice的钱包在单个未消费的输出中有足够的比特币支付一杯咖啡。假如不够,Alice的钱包应用就不断搜寻一些小的未消费输出,像是从一个存钱罐里找硬币一样,直到找到足够支付咖啡的数量。

创建交易输出

交易的输出被创建成为一个包含这笔数额的脚本的形式。只能被引入这个脚本的一个解答后才能兑换。简单说就是,Alice的交易输出会包含一个脚本。这个脚本说“这个输出谁能拿出一个签名和Bob的公开地址匹配上,就支付给谁”。因为只有Bob的钱包的私钥可以匹配这个地址,所以只有Bob的钱包可以提供这个签名以兑换这笔输出。因此Alice会用需要Bob的签名开包装一个输出。

这个交易还会包含第二个输出。因为Alice的金额是0.10比特币的输出形式,对于0.015比特币一杯的咖啡来说太多了,需要找零0.085比特币给Alice。Alice钱包创建给她的零钱的支付就在支付给Bob的同一个交易里。可以说,Alice的钱包将她的金额分成了两个支付:一个给Bob,一个给自己。她可以在以后的交易里消费这笔零钱输出。

最后,为了让这笔交易尽快被网络处理。Alice的钱包会多支付一小笔费用。这个不是明显地包含在交易中的;而是通过输入和输出的差值所隐含的。这个差值会被矿工当做交易费放到区块的交易里,最终放进区块链账簿中。

将交易放到总账簿中

这个被Alice钱包应用创建的交易大小为258字节。包含了金额未来所属需要的全部信息。现在,这个交易必须要被传送到比特币网络中以成为分布式账簿(区块链)的一部分。

交易的传送、传播:任何比特币网络节点(其他客户端)收到一个之前没有见过的有效交易时会立刻将它转发给连接到自身的其他节点。因此,这个交易迅速地从P2P网络中传播开来,几秒就能达到大多数节点。

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

比特币挖矿

交易在比特币网络上传播开来。但只有被一个称为挖矿的过程验证且加到一个区块中之后,这个交易才会成为真个共享账簿(区块链)的一部分。

比特币系统的信任建立在计算的基础上的。交易被包在一起放进区块中时需要极大的计算量来证明,但只需要少量计算就能验证它们已被证明。挖矿在比特币系统中起着两个作用:

  • 挖矿在构建区块链时会创造新的比特币,和一个中央银行印发新的纸币很类似。每个区块创造的比特币数量术固定的,随时间会渐渐减少。
  • 挖矿创建信任。挖矿确保只有在包含交易的区块上贡献了足够的计算量后,这些交易才被确认。区块越多,花费的计算量越大,意味着更多的信任。

描述挖矿可以类比为一个巨大的多人数独谜题游戏。一旦有人发现正解之后,这个数独游戏会自动调整困难度以使游戏每次需要大约10分钟解决。这个数独游戏的困难度可以通过改变其大小(更多或更少行列)来调整,但即使它非常大时验证它也是相当容易的。而比特币中的“谜题”是基于哈希加密算法的,其展现了相似的特性:非对称地,它解起来困难而验证很容易,并且它额困难度可以调整。

大概每10分钟,成千上万矿工一起开展一场对一个区块的交易寻找正解的全球竞赛。为寻找这个解,也被称为工作量证明,整个网络需要具有每秒亿万次哈希计算的能力。这个工作量证明算法指的用SHA256加密算法不断地对区块头和一个随机数字进行哈希计算,直到出现一个和预设值相匹配的解。第一个找到这个解的矿工会赢得这局竞赛并会将此区块发布到区块链中。

随着更多的矿工加入比特币网络,寻找谜题正解的困难迅速增大。要升级更专业的硬件,如游戏桌面电脑或控制台专用的高端独享提箱处理单元芯片(即显卡GPU)。在之后,只有使用集成了几百个挖矿专用算法硬件并能同时在一个单独芯片上并行工作的专用集成电路(ASIC)挖矿才会盈利。

区块链中的挖矿交易记录

网络中产生的一笔交易直到成为整个比特币大账簿--区块链的一部分时才会被确认有效。平均每10分钟,矿工会将自上一个区块以来发生的所有交易生成一个新的区块。交易不断的流入比特币网络,当比特币网络上的节点看到这些交易时,会将它们放到各自节点维护的一个临时的未经验证的交易池中。当矿工构建一个新区块时,会将这些交易从这个交易池中拿出来放到这个新区快中,然后通过尝试解决一个非常困难的问题(也叫工作量证明)以证明这个新区快的合法性。

交易被加进新区块时,以交易费用高的有效以及其他的一些规则进行排序。矿工一旦从网络上收到一个新区快时,会意识到在这个区块上的解题精彩已经输掉了,会马上开始下一个新区快的挖掘。它会立刻将一些交易和这个新区块的数字指纹仿造一起开始构建下一个新区块,并开始给它计算工作量证明。每个矿工会在他的区块中包含一个特殊的交易,将新生成的比特币(当前每个区块为25比特币)作为报酬支付到他自己的比特币地址。

包含Alice的交易的区块277316号生成,Alice的交易被“确认”,当277317号区块产生时,它是基于277316号包含Alice交易的区块的,在这个区块的基础上增加个更多的计算,因此就增加了交易的可信度。基于这个区块每产生一个新的区块,对这个交易来说就会增加一次“证明”。一个区块获得六次以上的“证明”时就被认为是不可撤销的,因为要撤销和重建六个区块需要巨量的运算。

消费这笔交易

Alice的这笔交易已经成为区块的一部分被嵌入区块链中,每个比特币客户端都能独立的验证这笔交易是有效且可消费的。

全索引客户端可以追钱款的来源。轻量级客户端通过确认一个交易在区块链中且在它后面有几个新区块来确认一个支付的合法性。这种方式叫“简易支付验证”。

猜你喜欢

转载自blog.csdn.net/sinat_37138973/article/details/111471394