比特币为初学者,第2部分:比特币作为技术和网络

时间:2018-06-09作者:klpeng分类:IT综合浏览:845评论:0

Dirk Merkel继续他的比特币介绍,将比特币网络视为一个系统。他简要解释了交易的机制,区块,区块链以及比特币钱包。他还讨论了双重支出和比特币挖掘,比特币的两个有争议的方面。

看到比特币是如何被使用的(在第1部分中),我们已经准备好将其一些底层概念看作技术和网络。本文介绍了比特币核心组件的机制:交易,区块和区块链。我还揭开了比特币有争议的一面,比如加密(标准客户端v0.4中增加了),双重支出问题以及比特币挖掘发生的方式和原因。最后,我使用比特币区块浏览器提取一些数据,然后用它来衡量比特币经济的整体健康状况。

要开始,请考虑图1,它说明了块链,各个块和事务之间的关系以及每个组件的结构。我讨论下面的组件。

比特币为初学者,第2部分:比特币作为技术和网络
图1.比特币网络系统(点击查看大图)

交易

比特币使用公钥密码学来签署交易。在比特币市场中,通过交换密钥在用户之间传输硬币。首先,一定数量的硬币通过密钥对与给定的用户相关联。公钥是比特币可以发送的地址,类似于传统银行中的账号。私钥类似于ATM密码,可用于访问资金并授权将其转移给其他用户。私人持有人是唯一可以转让或使用与给定公钥相关联的比特币的人。鉴于您的银行可以重置您的ATM密码,丢失您的私钥会导致资金不可挽回的损失。

有人使用想要将比特币转移给其他用户的比特币市场,必须先将收款人的地址(公钥)与所需数量的比特币相关联。这告诉比特币网络比特币将去哪里。接下来,他用自己的私钥签署交易,私钥必须与他最初收到比特币的公钥对应。这个签名过程确保了比特币网络的交易是由当前交易的比特币所有者发起的。最后,发件人将签署的交易广播到网络,在网络中它将从一个节点传播到下一个节点并集成到比特币区块链中(如下所述)。

公钥加密

公钥加密使用密钥对,公钥和私钥,可以随时由用户生成。顾名思义,公钥是分布式的,而私钥则由一个人或实体拥有。所有者的私钥必须保证安全。私钥可用于对消息进行签名,以便任何具有密钥对的相应公钥的人都能够确定地验证只有私钥的持有者才能签署该消息。

钱包

比特币钱包是一个包含所有比特币的本地数据文件。每个钱包都有一个交易清单和100个未使用的密钥对,可用于接收和发送未来资金。钱包还存储家政服务项目,如客户端版本号和您的偏好。没有钱包(尤其是密钥对),您无法发送或接收资金。如果你丢失了钱包,你将失去所有的比特币。毋庸置疑,为您的钱包提供一个良好的备份策略是一个不错的主意。

备份钱包变得更加容易,因为它包含一个数据文件,其位置取决于您的操作系统。用于备份所有敏感数据的相同规则适用于此处:创建多个备份,其中至少一个备份应位于异地。

在这个全面的12部分课程中学习从初级概念到高级设计模式的Java!]

标准客户端的0.4版引入了比特币钱包的加密功能。之前的版本以明文方式存储钱包,这对于考虑可能有价值的内容的许多用户而言通常有些令人意外。

接下来我们将看看区块链,它既是比特币经济的记录,也是移动和生成比特币的渠道。

块链

比特币交易被捆绑在一起成块,然后链接在一起,从最老的块到最新的块获取比特币经济的完整历史。区块链是比特币属于哪个地址的活动记录。通过遍历区块链,可以验证从创建比特币经济到现在的每一笔交易 - 我们将在本文结尾处探讨这些内容。

块头由六个字段组成,其中一个或多个随着每个连续的散列尝试而改变。这些字段如下所示:

  1. 客户端软件版本号
  2. 前一块的哈希值; 块链中最后一个已知块
  3. 块主体中交易的Merkle根(通过散列块体内的所有交易产生的256位散列)
  4. 时间戳
  5. 由所有节点共享的256位数字,称为目标
  6. 随着每个散列值增加的计数器称为随机数

在任何时候,网络上的所有节点都可能竞争创建下一个块。如果块头的双SHA256哈希低于所有节点共享的256位数(目标),则只认为该块有效。目标越低,找到有效的块越困难。节点通过增加一个计数器或随机数来搜索目标,这会略微修改块头。网络调整目标,使得大约每10分钟创建一个新块。

由于需要多次尝试才能找到构成有效块的散列,因此与创建新块相关的计算成本并不是微不足道的。截至2011年9月中旬,该目标需要平均7,539,609,386,691,347次散列尝试来解决新的区块。作为查找和创建有效区块的奖励,用户可以获得50个新创建的比特币。因此,这一过程负责逐步将比特币释放到经济中 - 目前平均每小时300比特币。

比特币存储

您可能会认为将完整的比特币经济体的交易记录存储在您的硬盘上会占用太多空间。比特币创造者Nakamoto实际上估计摩尔定律将确保存储和处理要求的提高将超过比特币网络和本地客户的需求。

如果您不想在比特币经济中兑换硬币,那么了解区块链如何运作非常重要。了解比特币的双重支出解决方案也是至关重要的 - 这是任何现实世界经济必须解决的问题。

比特币网络中的双重支出

当所有者尝试将资金花费两次时,双重支出就会发生。这对于实体货币来说不是一个问题,因为一旦有人花钱把钱交给别人,他就不能再把它拿走(也就是说,除非他复制了它,这是非法的)。一家传统银行通过记录保存解决了这个问题:银行保留一个分类帐并根据金钱的流入或流出来调整您的余额。一旦资金离开你的账户,你不能再花费一次。换句话说,如果有足够的资金存在,账户上的支票将被清除; 否则,支票将会弹跳。

比特币经济面临同样的问题。什么是防止用户同时向两个或更多的商家承诺相同的比特币?比特币解决这个问题的解决方案是一个点对点分布式时间戳服务器,它与链接证明工作的想法一起工作。

比特币如何管理交易

让我们假设一个用户试图双重花费她的资金。假设在交易A中,她通过向一个商家支付资金,而在交易B中她将同样的资金发送给不同的商家。所有新的交易都会被广播到网络中,这是用户面临的第一个挑战:她无法将两个交易广播到同一个网络节点。这样做会为节点提供检测其双重支出并拒绝任何一项交易所需的全部信息。对于试图双倍使用相同比特币的给定交易对,任何给定节点将保留并传播它首先收到的交易,并忽略第二个收到的交易。所以她会将每个事务发送到一组不同的节点。每个节点集将在为其给定事务创建块链中的下一个块时工作。

现在,可能存在两个或更多替代版本的块链。在这种情况下,我们可以拥有包含事务A的最后一个块和最后一个包含事务B的块的替代链。您可以将其作为分支在大街上。在这种情况下,决定的规则是最长的连锁胜出。每个节点集将继续延伸它认为是最长的链。尽管其他分支可能会以相同的速度增长一段时间,但一个分支最终会超过另一个分支。当发生这种情况时,越来越多的节点将加入较长的分支,最终较短的分支将被抛弃并消失。回到我们的例子中,创建最长分支的这场竞赛确保了只有一个交易进入主要区块链,而另一个交易随着废弃的分支而终止。

查找有效块所需的时间和CPU功率被视为工作证明 - 这意味着每个块都起着离散证明的作用。尽管需要大量的计算能力才能找到下一个块,但可以使用简单的散列操作来检查其有效性。收件人通常会在他们认为确认之前等待创建一定数量的包含该交易的块。对于原来的比特币客户端,这个数字是6,但是在接受交易之前,每个新的接收者需要多少个块才能确认。

对于我们的用户双倍使用比特币,她将不得不等待,直到为接收方创建足够的区块才能确信交易有效。收到商品或服务后,她将通过指示不同的收件人来更改交易。但是现在她将不得不重新创建所有以前的工作证明,因为每个后续块都会包含前一个块的散列。解决所有这些工作证明和超越原来的分支将需要巨大的计算能力 - 超过网络的其他部分。

比特币挖掘

比特币的挖掘是用于试图找到下一个有效块的客户端的术语。由于这可能是一个相当有利的活动,许多用户试图参与。这个过程中CPU最多且耗时最多的部分是持续计算SHA256哈希。事实证明,GPU在此操作上的效率大约比CPU高50至100倍。因此,用户已经组装了由GPU组成的专用硬件,这些硬件通过SHA256散列算法不需要做任何事情。这些设置有时被称为采矿设备每个哈希尝试都可以被认为是一张彩票。用户计算的哈希越多,解决下一个块的可能性就越大,并收集令人垂涎的50比特币。

由于没有专用硬件的个人用户几乎没有希望解决下一个块,因此用户已经开始集中计算资源。一旦解决了问题,奖励就会被分配到采矿池的参与者之中。授予每位参与者的比特币数量通常取决于他或她对解决尝试做出了多少贡献。

衡量比特币网络上的交易活动

所有的交易都是通过比特币公开的,因此不难发现比特币网络上的交易量或交易活动。Bitcoin Block Explorer是一款基于Web的界面,我用它来浏览区块链。由于网络是透明的,我可以深入到各个块的内容,甚至查看一些单个事务的内容。

在2011年9月的一个星期三下午(UTC)的四个小时的过程中,我收集了以下统计数据:共创建了20个区块,这意味着生成了1,000个新的比特币。(也就是说,首先找到20个新街区之一的每个人或团体都被授予了50个BTC。)平均而言,每12.35分钟发现一个街区,尽管在一分钟内发现了两个街区。在此期间发现的最后一个街区是144,391st被添加到区块链的末尾。平均而言,每个区块包含63.85笔交易,其中交易最少的交易数量为8,最大的数量为119.在BTC数量方面,块中易手的比特币数量最多为7,301.66个,最小数量为457.83个。平均交易规模是60。

在四小时内,接近8万(77,261.71)BTC被交易。最后,各个块所需的存储空间从3.97 KB到67.35 KB不等,平均为27.87 KB。这意味着描述比特币经济中所有活动所需的数据可以存储在超过半兆字节的磁盘空间中。

更多关于Bitcoin Block Explorer的信息

Bitcoin Block Explorer近乎实时地显示关于比特币经济的数据,最多延迟两分钟。然而,该网站还支持基于HTTP的查询接口,用于多个指标,如getblockcount(最长链中的块数),totalbc(流通中的比特币总数)和latesthash(最新的块散列)。我使用这个接口从Bash命令行进行一些快速计算。例如,如图2所示,我使用curl来检索比特币总数和块数bc,并使用另一个进行划分,并显示输出。

比特币为初学者,第2部分:比特币作为技术和网络
图2.命令行中的Bitcoin Block Explorer(点击查看大图)

图2中的结果证实,主块链中每块的确有50个BTC。这是因为从经济开始以来,找到一个区块的回报一直是50 BTC,尽管这个数字会随着时间的推移而减少。

您可以使用比特币区块浏览器做的其他事情是显示所谓的创世区块 - 主区块链中的第一个区块。起始区块只包含一笔交易,即解决该区块的50 BTC奖励。

第2部分的结论:为BitCoinJ做好准备

过去两篇文章从用户角度和网络系统开始了解比特币。在第3部分中,我们将与比特币进行一些实际操作。为此,我们将使用比特币协议和客户端的Java实现BitCoinJ。BitCoinJ是开源的,旨在比原来的C ++客户端更容易访问和轻量级。我们将利用BitCoinJ创建小样本应用程序,以便我们探索比特币中涉及的数据结构和网络交互。


打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢