-图 5. 区块链交易请求结构-
那么,系统如何确认这些交易的输入是有效的?它会通过查询 “输入” 来检查所有与你用于支付的钱包相关的交易。为了使得这一检查更加快捷,网络节点会保留未花费货币的记录。多亏了这种安全检查,我们才能确保比特币不能被双花(即一笔钱被同时支付给不同的人)。
拥有比特币也就意味着比特币账本中的一些交易指向你的钱包地址,并且它们暂时还没有被用作 “输入”。在比特币网络上所有用于执行交易的代码都是开源的;也就是说,任何一台联网的笔记本电脑的持有者都可以进行交易。然而,一旦用于广播交易请求信息的代码存在任何问题,与交易相关的比特币就会永远消失。
编者注:就实际而言,上面这段话的最后一句是错的。因为只要代码没有破坏掉账本,全网就有无数个副本;记录在账本上的钱,只要没花掉,自然也就不会少。但是会不会有一些软件漏洞会让比特币完全失去价值呢?可以看看下面这篇文章的讨论:
《比特币与社会契约》
请记住,由于网络是分布式的,客服电话是不存在的,也没有人可以帮助你找回消失的交易或遗忘的密码。因此,如果你对比特币网络交易感兴趣,最好使用比特币钱包的官方开源版本(如 Bitcoin Core),并把你的钱包密码和私钥保存在一个固若金汤的保险柜里。
放在比特币钱包里的钱真的安全吗?“区块链 ”的名字来源说~
人人都能够匿名连接比特币网络(例如:可以通过 TOR network 或者 VPN network 来连入比特币网络),而且收发交易的过程都只需公开公钥(而无需透露其它信息)。如果有人总是使用同一公钥,人们只要通过他的公钥,就可以查询到他所有的交易了。但是人们可以创建很多个钱包,每个钱包的私钥各不相同,这样用户就可以用不同的钱包接收转账了。除非你把所有比特币都转到一个钱包,否则,其他人无论如何也不可能知道哪些钱包地址是你的。
比特币地址的总数有 2160个,或者说 1461501637330902918203684832716283019655932542976 个。
比特币钱包地址数量之大,使得每个用户都能拥有自己的钱包,又无需担心被攻击者破解。
尽管有了这一设置,但还有一个安全漏洞未解决――撤回已经花掉的比特币。因为交易是在节点间随机传递的,因此两单交易的在节点间传输的顺序可能会有所不同。攻击者可以先发送交易指令,等到交易对手方发货之后,就立马发送相反的交易指令到他自己的账户。在这种情况下,一些节点可能赶在接受到第一交易指令前早已收到了第二交易指令,故把第一支付交易指令视作无效。可此时,交易输入项已然显示为 “完成”。那么,问题来了――人们究竟怎么检验哪个交易指令为先呢?用时间戳给各单交易进行排序是极其不安全的,因为时间戳很容易被人伪造。所以,(在这样的开放网络中)并没有任何(简单的技术)办法辨别交易的先后顺序;这就出现了欺诈的可能。
如果真的有人恶意撤回交易,网络中的节点接收到的交易顺序就会不一致。因此,区块链系统有意设计得需要节点达成一致(共识),以此来防止上面所说的诈骗事件。
比特币网络把各单交易分进不同的区块来给它们排序,每个区块包含确定数量的交易和该区块与前一区块的链接。如此一来,区块就一个接着一个地按时间排列。区块也因此变成了时间顺序的链条,故而得其名曰:区块链。
-图 6. 简化的区块链排序结构-
在同一区块内的交易被认为同时发生,而还没被纳入区块的交易都是未确认交易。每个节点都可以将交易打包进一个数据块,并广播到网络中、建议其它节点接受该数据块作为最新区块。可是,按照这意思,任意节点都可以提议新区块,面对众多的答案,系统中节点应该怎么就下一个区块达成共识呢?
每一区块必须解开由(计算上)不可逆的密码学哈希函数设置的复杂数学问题,才可成为区块链中的一员(块)。解决这复杂数学问题的唯一方法是――结合着上一个区块的内容,不断地猜测随机数,直至找到一个符合定义的结果。一台普通电脑大约需要花近一年的时间来猜对这个数字。这个数字听起来很大,但大家不要忘了网络中有千千万万台电脑在猜数字,平均每 10 分钟就会产生一个区块。解决数学难题的节点会获得广播该区块并要求大家把该块当作最新区块的权利。
此文由 比特币官网 编辑,未经允许不得转载!:首页 > 比特币行情 » 科普 | 区块链的运作方式(注释版)