比特币和区块链,这两个词出现了有较长一段时间了,但还有许多人对其原理却知之甚少,我就以比特币的出现到发展历史来讲讲比特币和区块链的原理。
白皮书
事情要从2008年说起,当时金融危机爆发,2008年11月1日一名网络极客,化名叫中本聪,在网上发表一篇文章,我们现在叫它《白皮书》,全名《比特币:一种点对点的电子现金系统》。 里面提出了一种去中心化的电子记账系统。在进行交易时,肯定要记账,现在我们记账都是由银行来记账,我们信任银行是因为银行背后是国家的信用。而中本聪提出的去中心化的记账系统,是让每一个人记账,账本都是公开给别人看的。举个例子:有四个人,分别叫A、B、C、D。 A现在要给B支付10个比特币,则A要把这件事告诉B、C、D三人。 B现在要给C支付5个比特币,则B把这件事告诉A、C、D三人。 C现在要给D支付2个比特币,则C把这件事告诉A、B、C三人。 接着把这个账单打包成一个块,这个块叫区块。一个区块大小为1M,可存4000条左右交易记录。再把这个块链接到之前的交易记录上,形成一条链。过个一段时间,再把新的块链接到它后面,这个就叫区块链。
问题
1、为什么要记账
为什么我要记录别人的账?为什么我要花费自己的电脑资源记录一个和我无关的账目?
2、账单以谁为准
每个人的账单可能不一样,例如,A先记录A给B支付10个比特币,后记录B给C支付5个比特币。因网络延迟,D先记录B给C支付5个比特币,再记录A给B支付10个比特币。
3、如何防伪
例如B告诉所有人A支付了10个比特币给B,但实际上没有支付。
4、如何防止双重支付
例如A同时给B、C两个人支付10个比特币,但A总共只有10个比特币。
5、如何防止篡改
如何防止别人直接把之前的支付记录改掉?
回答
1、为什么要记账
(1)记账有奖励。记账有手续费的收益,A给B支付10个比特币时,A还要多支付一点点手续费。这个手续费是给打包的人,也就是记账的人的手续费。
(2)打包有奖励。只能由一个人打包,这个人的打包奖励多少呢?中本聪提出的方案是,每十分钟打一个包,最开始的这个包会奖励打包者50个比特币。四年后,每打一个包奖励25个比特币。再过四年,打一个包奖励12.5个比特币。也就是说每过四年打包奖励减半。 那么我们就可以算一下比特币的总数: 50×6×24×365×4×[1+(1/2)^2+(1/2)^3+……]=2.1×10^7也就是2100万 (初始50个比特币,每十分钟打包一个则一个小时打包6个,一天24小时,一年365天,每四年奖励减半) 比特币的发放方式是打包奖励,那自然就有许多人抢着要去打包,那以谁为准呢?
2、账单以谁为准
中本聪提出了一种办法叫工作量证明,每一个参与者都要做一个很难的数学题,谁先做出来了,就有权力打包。这个数学题很难,要一个一个数去尝试,直到把它尝试出来,这个过程称之为挖矿。
3、如何防伪
如何保证每一条记录都是比特币持有者所发出的,而不是其他人伪造的。我们传统的认证方式有:人脸识别、签名、指纹等等,但这些方式在网络上不行,因为计算机系统可以对这些数据拷贝。网上的认证方式为电子签名。 比特币用户注册时系统生成一个随机数,通过这个随机数产生一个私钥的字符串,通过这个私钥产出一个公钥的字符串,同时又产生一个地址。 私钥是私密的,公钥和地址是公开的。当别人给你比特币时,他会把地址和公钥给你。同样,当你给他比特币时,你把你的地址和公钥给他就可以了。并且从私钥可以算出公钥,但通过公钥是反算不出私钥来(这个有时间我再水篇文章)。 私钥可以对一串字符加密,公钥可以把这个私钥加密后的数据解密。只有私钥的持有者可以加密,任何人都可以解密。加密和解密的方式不一样,这种加密算法称之为非对称加密。 那么A给B支付10个比特币,则A先要写一条转账记录,再将记录进行哈希运算算出一个摘要,然后用自己的私钥对摘要进行加密出密码,最后把自己的转账记录、公钥以及加密后的密码广播出去。 别人要验证转账记录,则先对转账记录进行哈希运算出摘要(这个摘要和A算出的摘要是一样的),再用公钥和密码进行解密出摘要,然后将这两个摘要对比,一致则是真实信息,不一致则为伪造信息。
4、如何防止双重支付
(1)余额检查
比特币是把交易记录一个块一个块打包串联起来的,每个人使用这个区块链比特币时,都要下载所有区块信息。当A给B支付10个比特币,别人接受到该信息,会通过区块链上的一个一个块中的账单信息进行追溯,查找到A这10个比特币从哪里来的。 如果查找发现A没有10个比特币,则别人都会拒绝这条账单信息。 如果查找发现A有10个比特币,则接受这条账单信息。再产生一个新的块链接到区块链上,那么这条信息就被确认。 (2)双重支付
A只有10个比特币,A同时发出两条信息:
信息1:A给B支付10个比特币,
信息2:A给C支付10个比特币。
因网络延迟等影响,这两条信息的接受顺序会不同。
甲组人先对信息1余额检查,接受了信息1,再对信息2余额检查,拒绝了信息2。
乙组人先对信息2余额检查,接受了信息2,再对信息1余额检查,拒绝了信息1。
两组人都在挖矿,有个人挖到了,可以打包了,假如他在甲组,则他打包了信息1的记录到区块链上,那些乙组的人看到这个新块,就会放弃自己的块,接受新接的块,信息2被抛弃。反之同理。所以要等记录在区块链的母链上才算是支付成功。
5、如何防止篡改
比特币有个原则叫最长链原则。挖矿时,有两个人同时挖到了矿,把块链接上去,这就产生了分支,就叫分支甲和分支乙吧。有些人接收了分支甲的块,有些人接收了分支乙的块,各自往后继续挖矿。假如,有个人在分支甲算出了下一个块链接上去,此时分支甲这条链长,在分支乙的人都跑到分支甲上继续挖矿。 如果有人依旧不选择到分支甲上去,也是可以的,但因为最长链原则,相当于这个人需要比得过其余所有人的算力,假设他算出的分支乙这条链比分支甲要长,则人们才会跑到分支乙。 区块链篡改数据,则要在你要篡改的信息所在块的前一个块后面分支出一个块,这计算量很大,分支出来的链不长,别人是不承认的。要继续计算,直到超过原来的链别人才承认。随着块的增加,篡改难度也越大,因此在大的交易时,需要多等几个块的出现才能确认。
后记
今年年初,中国鼓励发展区块链并颁布《区块链信息服务管理规定》,随后比特币迎来暴涨,然而区块链不能代表比特币,因此发展区块链与比特币没有太大关系,随后比特币再下跌。前几天嘉楠耘智这个矿机制造商上市,比特币又一次暴跌。也不知道是这个制造商的股价影响了比特币,还是比特币影响了这个制造商的股价。我建议各位不要想着靠着虚拟货币投机,因为任何一种投机行为都有可能让你倾家荡产。