自从上篇文章到现在已经很久,由于不是技术出身对比特币的运行原理查找了很多资料,原因就是大多数文章或者书籍都是以点概面,一个零件一个零件的解读,如果从比特币背后的运营机制和理念入手,那么问题就迎刃而解。
一、比特币概述:
比特币提出了一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何的金融机构。运用密码学技术,保证交易的安全,快捷,低成本。
比特币的核心是区块链技术,由各个区块通过哈希函数链接在一起的分布式账本,简单理解分布式账本可以认为它是带页码的大账本。
比特币的特点:不可篡改的分布式系统,对于去中心化个人保留意见。
二、重要概念:非对称加密算法
比特币能被世界,安全性起到决定性作用。比特币采用的非对称的加密算法。
非对称加密算法的加密时使用的秘钥是私钥,私钥只能自己知道;解密时使用的秘钥是公钥,比特币的公钥生成地址。
注意:公钥可以通过私钥中计算出来,但私钥却不能从公钥中推出,因此保证了比特币交易的安全性。一旦私钥泄漏,整个比特币账户信息完全暴漏,任何人都可以转走该地址的比特币。
举例说明交易流程:
比如比特币付款方发送支付消息0.5btc、付款方私钥签名、公钥地址,比特币收款方使用付款方的公钥对付款方的数字签名进行解密,将0.5btc保存在自己的
公钥地址。
三、比特币网络运行流程:
1.新的交易向全网进行广播
比如张三给李四转账0.5btc,发送完毕之后,该交易通过附近的节点像全网进行广播。
2.每一个节点都将收到的交易信息纳入一个区块中
这个时候不仅张三进行交易,隔壁李四也给王五0.5个btc,还有更多人正在进行转账。
矿工接收发送到网络上各个比特币交易记录,逐个检查建交易记录是否符合要求,例如检查每条交易记录是否有正确数字签名,每条记录的输入值是否使用过,输入值是否大于输出值等等,然后将符合要求的比特币交易记录添加到自己正在制作的区块中。
3.每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明
那么问题就来了:比特币网络有很多矿工,每个矿工都可以生成新区块,比如生成100个新区块,交易记录大致相同,但是每个区块具体包含哪些交易可能略有不同。
也就是说这100个区块各不相同,而比特币网络仅仅认可和维护同一条区块链添加到末尾。
至少是不能按照到达的先后顺序进行选择。因为节点分布世界各地,每个节点接收到的新区块各不相同。
上述问题的解决办法:
工作量证明引入:
比特币工作量证明(POW)制定每隔十分钟左右,只有一个矿工能将自己做好的新区块发步到网上,即不需要进行选择。
矿工把检查好的交易记录填写到新区块后,还要求矿工做一个额外的工作,当矿工完成额外的工作后,才能发布到网上。这个额外的工作整个比特币网络一般之后一个矿工在10分钟左右时间完成
比特币工作量证明(POW)详解:
第一步:将新制作的区块包含的内容(前一个区块的SHA-256函数值+新区块的基本信息+这个新区块所包含的建交易记录)组合成一个新字符串。
前一个区块的SHA-256函数值,即前一区块所有的输入内容输入SHA-256函数后所得到的结果,每一个区块和它的sha-256函数值一一对应。区块的SHA-256函数值代表着这个区块。
第二步:找到一个随机数,在第一步的字符串末尾添加上这个随机数,组成新的字符串,将这个新字符串输入到sha-256函数,得到一个256位的二进制数。如果这个256二进制数的前72位都为零,额外工作完成。
工作量证明的难度非常高,高到整个比特币网路一般只有一个矿工在十分钟左右时间才能成功找到这个随机数。前72位都为0的概率为:2的72次方分之1。因为完全靠运气,可能三四分钟,也可能10多分钟算出来。由于是靠运气,所以哪个矿工计算出来完全是随机的
4.当一个节点找到了一个工作量证明,它就向全网进行广播
该节点将新区块包含的所有内容内容(前一个区块的SHA-256函数值+新区块的基本信息+这个新区块所包含的交易记录+找到的随机数)组合成一个新字符串。并将这个字符串输入sha-256函数,如果结果满足前72位都为0,说明这个矿工成功完成这个操作。它向全网进行广播,请求全网节点验证这个区块。
5.当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性
节点检查其他方面是否符合要求,以及区块中的记录是否符合要求,一切没有问题的话,加入新区块。
6.网络上接收到这个新区块的所有节点都做相同动作:检查区块链,检查区块链符合要求添加到区块链的末尾
四、比特币解决分叉问题
重点:节点始终都将最长的链条视为正确的链条,并持续工作和延长它。
分叉:两个矿空同时“挖出”新区块,系统把这两个区块都添加到最后一个区块的后面,矿空同时保留两个新区块,形成两个分支。
一般情况下分叉后的下一个10分钟,不会那么凑巧同时产生两个新区块。
如果下一个新区块在绿色区块上创建,则接收到这个区块链的节点将添加到绿色区块后面,同时放弃紫色区块,反之亦然。
也就是说如果区块链分叉,网络上的所有节点只认可最长的那个支链,保证唯一性。
被放弃的支链的区块,被确定为未被确认交易,等待被加入新的区块中
比特币解决一致性问题:
1.如何进行同步?
整个比特币网络节点将最长的链条视为正确的链条,并持续工作和延长它。
2.如何防止篡改?
当交易记录被加入到区块链中,对于区块链的任何修改都会改变这个区块的SHA-256函数值,导致后面的一个区块所包含的SHA-256函数值与这个区块的修改后的函数值不同。导致区块链断裂。而比特币网络只认可和维护最长的一条区块链。
大额转账因为担心交易记录所在的区块可能被添加到临时的支链上。一般在所在区块后面增加3-6个区块后,就可以断定交易得到比特币网路的确认,无法篡改和撤销。
五、如何防止双重支付(双花)
矿工会检查放入新区块的每个交易记录中的输入值是否在前面的交易记录中使用过,如果被使用过,则认为这个交易无效,不会被放入新区块。
发现有两个交易记录的输入值中出现相同的先前交易,矿工只认可其中一个交易记录并只将其加入新的区块中。
六、比特币激励方式
比特币作为对矿工的奖励进入比特币网络进行流通
没生成21万个区块,奖励金额减半;
从第0个区块开始的21万个区块,每生成一个区块,矿工获得50比特币作为奖励;
从第21万个区块开始的21万个区块,每生成一个区块矿工获得25比特币作为奖励;
从第42万个区块开始的21万个区块,每生成一个区块矿工获得12.5比特币作为奖励,以此类推;
从第693万个区块开始,对矿工的奖励为0,也就是不再有新的比特币流入网络,矿工的收入来自每笔比特币交易的交易费。
也就是说比特币网络的总量永远不会超过2100万。
区块链的开山鼻祖是比特币,一篇文章只能简要概述比特币的运行原理,而且还有很多表达不完善的地方。如果有对更深层的区块链技术感兴趣的,可以通过专业的书籍来学习。
感谢Chaoex平台赞助支持
微信公众号,欢迎订阅: