比特币原理

说明

本文尽量以最简洁的语言概况比特币工作的流程及原理。并对一些关键问题的解决之道做陈述,例如双花问题,链的分叉问题,当然还有比较基础的一些技术手段,例如非对称加密,签名,工作量证明等。

流程及原理

总体的原则

  • 账户地址是分配的公钥,有对应的私钥进行签名;公钥全网公开,可以验证签名身份。

  • 比特币的区块记的是一些转账记录,区块有统一的顺序,下一个区块指向前一个区块的hash值,形成一条链。例如:A转给B一个***为12345比特币、C转给F***为23456的一个比特币等;通过对区块的这些记录进行计算就可得到每个账户的余额。

  • 挖矿就是生成一个随机数然后和区块内容进行hash,得到的hash值满足一定要求,例如开头前十位均为0,并通过0的个数来调整挖矿难度,保证十分钟左右出一个区块。得到这样的随机数的节点会对交易进行验证,并公布验证结果和随机数到全网,其它几点会进行验证。

  • 挖矿成功会有奖励,一开始50个比特币,每隔21万个区块会减半大概4年左右,到2140年总的比特币会挖完,2100万个。

  • 偶然情况下,一个blockchain上会产生分支。这种情况是因为,有时候两个挖矿者几乎同时验证出来一个区块的交易。他们同时公布到网络里,有些人用一个方法更新他们的blockchain,另一些人用另外一个方法更新他们的blockchain。比特币原理
    这就造成了我们想要避免的情况 ——这种情况,交易的顺序就不清楚了,而且谁有哪个比特币也就不清楚了。有一个简单的办法可以用来消除分支。规则是这样的:如果分支情况出现,那么网络上的人们继续保持两个分支,任何情况下,挖矿者只在最长的那个blockchain上工作。

    假设我们有一个分支,有一些挖矿者先收到block A,另一些挖矿者先收到的是block B。那些收到block A的挖矿者将要继续沿着他们的分支挖矿,而其他人沿着Block B的分支挖矿。我们假设在B分支上的挖矿者先成功挖到下一个block:
    比特币原理
    当他们收到这个消息后,在A分支的人会注意到现在B分支是最长的,于是就会转换到B的分支。在A分支上的工作就会迅速的停止,这样每个人就会都在同一个顺序的blockchain上工作了。然后block A就会被忽略。当然,所有在block A里面的待定交易将会继续保持待定状态,随后会在B分支上被放到新的block里,这样,所有的交易最终还是会被验证的。

    同理,如果在分支A上的挖矿者先挖到下一个block,那么在B分支上工作的人就是停止,转到A分支上。

    不论结果是什么,这个过程保证了blockchain有统一的顺序。在比特币中,一个交易能不算作确认直到 1)它存在于最长的分支中的block里,2)至少有5个验证过的block在其后面得到验证。这种情况,我们说这个交易有了“6个确认”。这给了整个网络时间去统一block的顺序。

具体步骤

例如A转给B一个比特币。
1、A发送一条A转给B一个***为123456的比特币的交易并用私钥签名并公布到全网
2、其它节点收到交易放到待确认交易列表,等待验证
3、工作量证明,计算随机数nonce值,满足特定格式的hash值:000000000000xxxxxxx…;如果成功则验证交易的合法性,并将nonce值和交易验证结果公布全网,其它节点也会验证nonce值和交易结果,并更新区块。

双花问题

A转给B一个***为123456的比特币,A转给C一个***为123456的比特币;这里把同一个比特币给两个人,也就是花费两次,称为双花问题。

假设A要同时给B和C同样的交易。

  • 一个可能性就是让A去验证同时带有两个交易的一个block。假设A拥有百分之一的计算能力,那么A有可能比较幸运的验证出了这一个block。不幸的是,这个双重花费将会马上被其他人发现并且拒绝,尽管A解决了工作证明里的难题。所以这个可能性我们不用担心。

  • 另一种可能性是,A试图分别公布两个交易。A可能给一部分挖矿者公布一个交易,给另一部分挖矿者公布另一个交易,A希望让两个交易都得到验证。这种情况下,如我们刚才所说,网络最终只会确认其中一个交易。所以这个也不是问题。

  • 还有一种可能是,A = B,也就是说A试图将一个币给C,同时A又将那个币给A自己,因为A自己可以有多个账户。这种情况下,Al的策略是等到C接受了这个比特币,也就是在交易在最长的blockchain中被确认6次之后。A再试图去解决另外一个拥有A发给自己的交易的那个block分支。但是,这个时候A已经比最长的blockchain晚了6步。A很难在跟得上最长的分支了。其他的挖矿者不会帮助A,因为他们都需要在最长的分支上工作才能得到奖赏。除非A在解决工作证明的时候能够比网络上其他人结合起来还快(也就是说她大概有多于整个网络50%的计算能力)。当然,A可能会偶然幸运,在百分之一的算力的情况下能解决一个block,但是同时赶上6个的话相当于是 1/100^6 。这种情况概率可以说是几乎为0。
    比特币原理