什么是比特币,通俗理解,及其原理

通俗地说,比特币就是一种不需要任何第三方机构(支付宝或者微信等)就能完成远程交易的虚拟数字货币,其特点是大家一起参加记账而不依赖某一个特定的人。本文简要介绍比特币的主要技术和实现原理。
比特币的底层技术是区块链,是去中心化的数字货币,而区块链包括如下技术:
- 点对点传输(P2P)
- 工作量证明
- 加密技术
- 时间戳协议
区块链应用场景:
- 资产类:数字资产的发行(ICO)、支付/跨境支付、交易、结算等
- 记账类:股权交易、供应链金融、商业积分
- 不可篡改类:溯源、众筹、医疗证明、存在性证明等
- 点对点类:共享经济、物联网等
- 隐私:匿名交易
账本验证

使用hash函数对账本进行hash运算生成对应的摘要信息,通过对比摘要信息来判断账本是否有非法的篡改,在区块链里面,一个账本就可以理解为一个区块
。

如果新来了一个账本,那么我们在对该账本进行hash运算的时候,需要在原始信息里面加上上一个区块的hash值

这样我们验证了序号为1的账本,那么序号为0的账本也被验证了。区块的这样串联就形成了区块链

这种串联的结构使得账本的验证非常高效和快速。
账户证明
银行采用的是数据库来记录账户和用户之间的关系,查询数据库就可以知道该账户是否是属于对应的用户。而比特币没有中心服务器,是没有这样的中心数据库的。
比特币的账户是一个地址,一串字符串,每一个账户又对应一个私钥,私钥是用户用来验证该账户属于自己的凭证,在区块链里面,私钥一旦丢失就不能再被找回,账户里面的比特币也不能再被使用。
在区块链里面,账号(地址)和私钥是有关系的

从计算方法可以看出该计算不可逆(使用了两次hash操作)。所以只要我们不泄漏私钥,我们就能证明我们拥有某一个账户。其实账户和私钥应该就是非对称加密的两个秘钥:公钥和私钥(下面的交易验证可以看出)。
交易验证
在进行交易的时候,付款方先使用指定的hash函数对交易信息进行hash运算,然后使用自己的私钥对hash结果进行签名(其实就是加密)

然后将签名信息、原始的交易信息广播到网络里面的其他节点

验证节点收到广播信息之后进行验证:

验证其实就是一个解密的过程,签名和验证一个是加密一个是解密(非对称加解密),验证的时候使用签名信息和付款地址进行verify,如果得到的信息是交易信息的hash值,那么说明该交易信息是没被篡改的,然后验证节点会验证该账户的余额等情况,最后决定是否进行交易记账。

挖矿(工作量证明)
挖矿其实就是对参与记账的节点的奖励,如果没有奖励那么节点为什么要加入到记账中呢?所以这个设计是非常巧妙的,让我想起了和PT里面的有上传工作才还有下载权限的设计如出一辙,BT没有上传工作要求就导致了我这种只下载不上传的伸手党。
记账不是每个节点都能的,有一定的规则

那么比特币怎么去保证一段时间只能有一个人记账呢?关键在于账本记账的时候需要生成hash值,比特币对hash值是有要求的,在生成hash值的时候还需要在原始信息里面加入一个随机数,当生成的hash值有n个0作为开头的时候才能算是有效的记账。

挖币的过程就是看谁先找到这样一个随机数生成满足要求的hash值。生成了满足条件的随机数后就广播到网络里面,该节点就得到了一次记账权。下面再来看看所谓的交易记录集

其中的最后一条非常重要,因为一旦该交易记录集找到对应的随机数了后,该交易就是合法了,那么该交易记录集就会变成一个区块(账本)被记录到区块链网络里面,该节点就获得了对应的奖励。那么计算量有多大呢?

一个0大概需要尝试16次,16个0就需要16的16次方次尝试,难度是巨大的。
共识机制
这里讨论当两个节点同时完成计算得到记账权的时候该怎么办?比特币选择延长最长的链。我们来看个例子:

如果有两个节点同时打包生成#3458A和#3458B两个区块,在进行广播的时候,其它节点有的收到#3458A,有的收到#3458B,或者两个都收到,节点就会使用自己收到的节点进行后面运算(两个都收到的选择一个),后面发现#3458B的区块先生成后面的区块#3459B,这时候就能判定#3458A是无效的,会被丢弃。
比特币的缺点
- 效率低下,现阶段不能解决大并发的问题,现阶段比特币每秒能进行的交易也就寥寥几笔,原因是形成共识需要时间;