比特币及区块链原理

…衆ロ難τιáo~ 提交于 2020-10-01 20:32:53

水平实在有限,也很少写文章,尽量逻辑不混乱,希望能给您一点帮助。


前言

最近对比特币感兴趣,所以在B站搜了下比特币视频,以下关于比特币几乎都是我个人按照李永乐老师的视频理解的。如果存在错误,请去看李永乐老师的视频,或者比特币官网(这是中文版链接,貌似有点不一样和英文版,如果可以,语言最好还是换成英文版吧。)
如何阅读本文?请按顺序阅读,并且如果有超链接,且超链接不造成理解障碍的话,就请阅读完本之后再去点超链接查看详细内容。


一、比特币是什么?

1.经济学知识——前提

在一个国家内,各种交易的背后是怎样的?

一个国家都有央行,除央行外有其他银行,如工商银行,农业银行等等。我们假设央行的客户是其他银行,其他银行的客户是这个国家的每一个公民,每个公民都有一笔钱存在各种银行里(除了央行,因为央行的客户不是公民,而是其他银行)。那么某个公民存在某个银行的一笔钱其实就是在这个银行账单上的一个数,例如,A银行中的账单,张三,余额100045;李四,余额50000。A银行中张三给李四转账45块,其实就是在A银行的账单上做加减法,张三,-45变成100000;李四,余额+45变成50045。如果是A银行的张三给B银行的王五转账1000,那么这个账单是由央行来记录,在央行账单中记录,A银行-45,B银行+45;A银行账单上张三-45,B银行账单上王五+45。至此,一个极其简单的银行记账模型就建成了。(此模型参考知乎上的一个回答,但是具体内容忘了,只能凭理解和记忆去写)

说说其中的问题

  1. 一是央行和其他各种银行是一个第三方的角色,我们的交易都由这个第三方角色负责,如果第三方角色不守信用,那么我们的钱随时可能增加也可能减少,所幸每个第三方本质上都是由一个国家掌控,只要这个国家的信用存在,那么公民存在银行里的钱就是安全的。而这其实就是中心化问题。
  2. 无法避免回滚,即每笔交易都是可逆的。例如,A银行内,a转给b 100块,如果A银行认为此笔交易不合法,那么A银行就可以修改a和b的账单记录,造成可逆现象发生。
  3. 还有一些问题,参考《白皮书》

2 比特币诞生

(from wiki)
Bitcoin(比特币) 是中本聪于2009年发明的一种数字货币。它同时也是为实现此货币流通之开源软件的名字。
Bitcoin是最早实现“加密货币”这一概念的系统,该设想最早由戴伟(Dai Wei,音译)于1998年在cypherpunks函件用户组首次提出的。 它建立在这样一个概念之上,即货币可以是任何东西或记录,只要它在一个国家或社会经济体系内被接受为商品服务的支付方式,或是债务偿还的方式。比特币的设计核心思想是以数学题答案作为货币,其发行权独立于任何中央机构之外。

3 如何去中心化?

本章第1节提到的第一个问题-中心化问题,如何去中心化呢?
假设用小写字母组合表示每个使用比特币的用户。
现在交易发生,a 转给 b 10个比特币,a 将“a 转给b 10个比特币”这条信息在网络中进行广播,每个比特币用户都会收到这信息,而每个收到信息的用户对其进行记录(即记账)且又广播这个信息,至此每个比特币用户最后都会知道这条交易信息,且都会记录它,也即每个用户都会有个账本。(对了,在a转给b10个比特币时,a需要多付一点作为手续费,手续费非常非常低)。
将大约4000条交易记录打包成一个区块,这个区块大约占用1MB字节,第一个区块与之后的区块形成一条链,即区块链。比特币的每个用户都会争相打包区块,因为打包区块有奖励,第一个四年打包的区块奖励是50比特币,第二个四年打包的区块奖励是25比特币,以此类推。
中本聪要求每10分钟就需要打包一个区块,可以计算大约会有2100万的奖励。(50*6*24*365*4*(1+1/2+1/4+…)=2100万)。



下面开始 0x开始的标号都是我个人的疑问。
0x00 既然大家都是靠奖励获取的比特币,那么第一条交易信息是如何产生的?

0x01 广播交易信息时,如果保证每个用户都会广播正确的信息,而不进行篡改(我对广播的知识了解不深,可能这不是问题)

0x02 如何在10分钟内产生了超过4000条交易信息,那么此时的情况是怎样的?

4 挖矿

假设0x系列的问题都不是问题。
既然每个用户都会打包,那么以谁的为准?
中本聪出了个数学题,这个数学题人力无法计算得出,只能依靠计算机算出,谁的计算机算力大,谁算出的希望就大,如果一个人或者机构掌控了世界上超过一半的电脑,那么比特币就是不安全的,显然没有人或者机构有这种本事,一个国家也不可能。
(补充,每个区块不仅包括4000条交易信息,也包括一个区块头,区块头的组成:上一个区块的区块头+时间戳+本区块的4000条交易信息+一个随机数)
这个数学问题是,将本区块的区块头进行两次SHA256运算,最终得到一个256位的二进制数。我们要求这个256位的二进制数的前66位必须是0,谁能符合这个要求,那么就以谁的为准。如何获得这样的一个数呢?请看区块头的组成:上一个区块的区块头+时间戳+本区块的4000条交易信息+一个随机数。我们只可以改变随机数的值而影响最后哈希的结果,可以从0开始试,1,2…。你无法从一个前66位是0的256位二进制数,反推出随机数是多少,这基本上是不可能的。你只有依靠计算机的算力,最后总体上总是谁的算力大,谁算出的希望就大。
其实上述解数学题的过程就是所谓的挖矿,这个名字真是不太好联想。
为什么是前66位是0?我没有写出,因为计算略微复杂,不想写,请看李永乐老师的视频。





二、使用比特币

1 申请比特币账号

如何申请比特币账号?
申请时会产生一个随机数,这个随机数唯一。
根据此随机数,产生一个私钥和公钥,以及地址。
私钥保密,相当于银行卡密码,地址相当于银行卡账号。
公钥和地址都是可以公开的。
别人给你转账,只需要你把你的地址发送给他就行。




2 使用比特币

再叙述一下第一章第1节的交易流程:
a 用户给 b用户转账10个比特币,首先a会用a自己的私钥将这条信息进行加密,之后广播这条信息和自己的公钥,其他用户可以用a的公钥对这条信息进行解密,得到“a转账给b10个比特币”这个信息,且a用户无法否认这条信息。
但是,如果a本身没有10个比特币怎么办?那么没有人会承认这笔交易,也不会将这条交易信息记录到自己的账本上。每个用户是如何得知a用户没有10个比特币呢?那是因为每个用户都有此前所有的区块链记录。从记录上就可以得知这个用户发生的一切交易和余额,自然就可以否认a的交易。
双重支付问题,即a同时转账给b和c两个人各10个比特币,但a只有10个比特币,如何解决此类问题?a->b,10 与 a->c,10 这两条交易信息是本区块的交易信息,但是本区块还没产生,我们只需要等待10分钟让此区块产生结果,那么查看此区块就可以判断那一个交易不是真的,可能是a->b 为真,也有可能是a->c为真。 因为此区块中不可能同时存在a->b,a->c两条记录。这样就可以解决双重支付问题。
0x03 一笔交易只有在十分钟后才能验证是否是真实,那么在生活中的可行性方面问题会很大吧?



3 最长链路问题(安全问题)

假设目前最新的区块号是第3000块,有人想要篡改下一个区块的交易记录,比如他想更改成a转给了c10000个比特币这条记录(a有这么多钱)。虽然a没有广播这条交易信息,但是他就是记录这个信息,并且算出3001块的区块头,
这里补充,即使他算出了第3001块的区块头,并且是第一个算出的,别人也有可能不采用他的第3001号区块,因为那条交易信息只有他以及他的同伙知道,而其他大多数人的交易记录里根本就没有那条交易信息,并且会有不少人同时算出第3001块的区块头,且这些人的区块里的记录是不包含那条伪造的信息的,而只有这个人的区块里的记录是包含的,大家很容易辨别出且相信真正的第3001号区块。
如果这个人一意孤行,继续伪造自己的第3002号区块,但是他的算力是不可能到全球的一半的,也即不可能跟的上世界的速度,最关键的是,大家在选择相信那一个区块号时,是遵循了基本的最长链路原则的,即谁的链路长,就相信那一个链路。久而久之,伪装者的链路就被放弃了,因为他的速度不可能跟的上世界的速度。

4 保密问题

上述第1节中,申请比特币账号时,会得到三个东西,即私钥,公钥,地址。
私钥时保密的。
公钥和地址是公开的。
这样的话,别人知道你的地址和公钥,也没法知道你的个人信息,不知道你的姓名,年龄住哪等等一切的个人信息,他最多知道这个账户有多少余额,有过什么交易,但又有什么关系呢,他无法知道你在现实生活中的任何信息。
这就解决了保密问题。



总结

对于比特币的去中心化,是经济学中的革命,也是对于基于信用的交易的不信任,建立一种基于密码学之上的交易,是人类的里程碑。好比月球上的第一个人类脚印般。
但是比特币也存在很多问题,比如0x03问题,在10分钟后才能验证交易的真实性,生活中没人能忍受。还有就是总共2100万的比特币,是否够用也是一大问题。真的是未来可期啊,希望能活久一点吧。

注意

本人水平有限,文章中无法避免出现错误以及歧义,本文只作为我的思路整理以及记录用处。如果您想入门比特币及区块链最好是去官网查询资料,尽量不要相信第三方博客,那些东西只能作为参考,我的也是。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!