首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

让我们一起通过xd转账给首富513个BTC来了解一下比特币网络的运行机制

第7篇,总365篇

关键词:比特币、区块链

相信那些炒币和进行元认识修炼的吃瓜群众还记得前不久币圈首富和xd大神的撕逼事件,今天我们就拿xd大神转账给首富等价的513个BTC的过程来探索一下比特币网络的运行机制。

先贴一张比特币网络的概览图,可以帮助我们更好滴理解正文。

普及几个概念:

比特币地址,就是我们的银行卡卡号

私钥,就是我们的银行卡密码

钱包中没有比特币,钱包只是保存了比特币地址和私钥,比特币地址对应的余额是放在比特币网络中的区块链账本中的

比特币网络中所有的节点都是对等的

下面我会详细介绍xd大神通过imToken钱包给首富转账513个BTC(玩币的真有钱)首富换成美钞点烟的整个过程中,比特币网络底层是怎么运行的。

1.xd大神通过imToken钱包给首富转账513个BTC

钱包先用xd的密钥给这笔转账交易进行数字签名(同你在饭店结账时刷卡签字一样),然后带上签名向比特币网络广播一条转账信息。

如果XD大神账户中余额大于513个BTC,她会同时把多余的钱转给自己。这是比特币系统基本的转账规则:每笔交易都必须将进账金额用完,如果你发送的比特币金额与所有金额不等时,都需要将余额发送给自己。比特币系统为什么牛逼从这儿就体现出来了

像XD这种大神,账户余额肯定远大于513个,为了藏富,她可以把余额发给自己的另一个地址,而不是默认打给自己当前这个地址,因为谁也不知道那个地址到底是不是xd的。这样操作可以防止别人将她的所有交易信息连在一起,要知道这些交易信息在每个节点上都有存储,是公开可见的。这正是比特币匿名性的体现!

密钥表明你拥有比特币的交易权。

转账动作表明你在使用比特币,此时需要证明你是公钥地址的真正拥有者。

数字签名作为一种媒介,证明你拥有密码,同时并不要求你将密码信息展示出来。它是通过算法实现的,该算法能够防止数据复制或伪造。签名的过程可以证明你真正拥有者的身份。数学公式表示就是Signature = f(private_key, message) ,f表示用于签名的数学函数。

2. 网络中各节点会把这条转账信息记录到自己的未确认的交易池中,并广播给网络中其他的节点

网络中的各节点是指连接到比特币网络中的安装有比特软件的计算机。

节点首先首先要验证这条交易消息是否可信,主要是通过数字签名、消息和公钥来验证XD是否是拥有者,数学公式表示就是v(Signature, message, public_key)。

然后确认交易的金额是否够。比特币系统中各账户中不像银行中直接校验剩余金额。节点会校验XD的比特币地址所有入账的未消费的交易之和,如果总和大于513个btc,说明可以进行转账。强调一下:此处校验的事是未交易的进账之和。

不过此处仍然有个安全漏洞,可导致“未被消费的检查结果”不可靠,这与交易的顺序有关,就是XD先转账一笔给首富,然后转账一笔给自己,由于无法保证交易的消费顺序和被创建的顺序一致,会导致首富拿不到513个BTC。这也是去中心化系统的面临的一个大难题——双重支付问题!比特币系统给出了非常漂亮的解决方案:通过一种数学竞赛的方式来决定交易达到节点的时间,并同时保护这种顺序。

3.节点把这笔转账交易加到区块链中

在比特币系统中,是通过将交易按组分配来交易进行排序的,这样的组被称为“块”;然后将这些区块链接起来,称为区块链(区块链用来对交易排序,而交易链是跟踪记录所有权发生变化的)。

任何节点都可以将一组未经确认的交易放入区块,向网络中的其他节点广播他们对于下一区块链应该是什么的建议,各节点基于区块竞猜一个数学难题的答案,节点计算机会计算区块内的整个文本的哈希值,直到得出一个低于某个特定数值的值。

实际上在比特币系统中一台电脑可能需要几年才能猜到,而比特币网络中所有计算机都在猜测时,只需要花上平均10分钟某节点就能成功地猜出答案。 当一个节点找到了符合条件的解就会向全网广播自己的结果,并且将他们的这组交易排在区块链的下一位。当节点解出一个区块时,就会被给予一定的奖赏。这也是猜解区块被称为挖矿的原因。

猜测的随机性有效地分散了人们找到结果的时间。以致不会有两个人同时猜到结果,但偶尔也会出现不至于一个区块不猜到的情况,从而导致若干可能的分叉,这种状态只是暂时的,当有人解开下一个区块时,这种链接就会被打破。一般情况下,所有节点会立即切换至最长的分支。数学难题使得同时解开区块变得几乎不可能,更不能连续发生几次,最终的结果是区块链会迅速稳固下来。这意味着每个节点都接受区块链的结尾处几个区块的排列顺序。

如果某一交易被打包在较短的分支里,他就会区块链中消失。需要重新回到未确认的交易池中,然后被包括在之后的区块中。这个链末尾块消失的特性为“双重支付”攻击打开了大门,而最初制定排序系统的目的恰恰是想要避免双重支付。 XD有没有可能利用这种特性提前造一个给自己转让的区块,让转账给首富的区块失效呢? 这就要谈到区块链的另一个规则了:前一个区块尚未被解开之前,后一个区块无法被解开。因为对前一个区块的引用会成为哈希函数的一部分。所以任何对它的更改都需要重新找解。这个规则很好地限制了XD无法提前生成给自己转账的块了。

不过上述规则也有个漏洞,那就是XD掌握的算力超过了全网的51%,她能独自生成转账给自己的区块去追赶分叉的链,直到成为最长的链被全网接受,让转账给首富的块失效。如果是追赶一两个块,还有更能,如果要追赶更多的块,需要更强的算力。对于XD的场景以及目前挖矿的难度,即使追赶一个块的成本也太高,对于513个BTC有点得不偿失了!这也是为什么建议在最后收到钱之前等待上几个区块了。

相信XD在微信上告知首富已打款后(如果没被拉黑的话),首富会在1小时以后再次查询他的的账户的...

4.总结一下比特币网络的运行机制

比特币是一种由数学计算保护的、基于P2P协议的数字货币。

数字签名用来授权每笔交易。

所有权通过交易链来传递;交易的顺序在区块链中被保护起来了。

节点通过猜解数学难题把交易加入到区块链中。首先猜解出难题的节点会获得网络奖励的比特币。

因为存在“解答出数学难题才能解出每个区块”的要求,攻击者需要和全网进行算力比赛,超过全网51%,才有可能实施双付攻击。

区块链是未来!

99.99%的炒币者将死无葬身之地!

你觉得你是那万分之一?

声明一下

文中举例imToken钱包只是让场景更真实。并不代表推荐它。1月27号,007有个战友使用imToken钱包被盗了40万等值的EOS。此处也提醒币圈土豪,最好使用纸钱包等离线钱包保管自己的币。

(完)

欢迎加入不出局

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128G0GM7F00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券