最近几天,看了一下有关比特币的介绍,再此做一下笔记。
2008年11月1日,世界金融危机爆发,一位名叫"中本聪"的极客发表《比特币:一种点对点式的电子现金系统》的文章(称之为"白皮书"),提出了比特币的概念和比特币协议,从而标志着比特币的诞生。
现在主流的记账系统为中心化记账系统,比如银行,生活在一个群体里的每个人都不需要知道其他人的账户信息,记账这一工作交由银行来进行。
比如,在一个群体里,有A、B、C、D四个群体,A付给B10个BTC(比特币),这个记账信息不必传给C和D,只用将记账信息传递给银行,由银行来进行管理记账信息。
而比特币是一种去中心化记账系统,它的形象理解如下图所示:
当A给B十个BTC后,没有银行这个中心记账系统,A需要将这个交易信息广播给这个群体里的每一个人。
1.为何记账?
2.以谁为准?
3.如何防伪?
在比特币交易系统中,没有银行这个中心记账系统,为什么群体中的人要浪费时间和精力给你记账呢?
答案:不是白记账,有好处——记账奖励;规定用户的其它人记账会得到一定比率的手续费 ,而且还会有打包奖励
如果在群体中A给B10BTC,B给C5BTC,C给D2BTC,这个时候它会生成一个账单,这时我们将记账信息打包成一个"区块",如下图所示:
然后将此打包好的记账信息与之前的记账记录的区块连接起来,就形成了区块链。
而这个用户群体里面的哪一个用户完成了对当前交易记录的打包,形成了区块,并与之前的交易记录连接起来,就形成了区块链,就会得到打包奖励,并向全网传播此次完成的区块链。
比特币设计者设计平均每10min打一个包,打包奖励首四年是一次50个比特币,然后后面的一个四年为25个,又后面一个四年就是12.个,按此每四年打包奖励减少一半,总共比特币的数量为2100万个。而打包的这个过程就是所说的"挖矿过程"。
那么如何挖矿呢?
相关函数:哈希函数:sha256加密:将一个输入转换成256为二进制数,加密方法特点:正向容易,反向困难。
如上图所示,一个新的账单信息需要打包,此时又A、B、C三个人在尝试打包。
挖矿过程就是一个解数学题的过程,具体步骤如下:
1.字符串:前块头部+账单信息+时间+随机数
区块包含一个头部和信息。,而此时用户打包时,需要解的字符串格式如上式所列,前四项是确定的,我们只有通过不断地改变随机数这一项来进行解密。(故要求电脑运行性能计算能力快)
2.将上述字符串通过sha256加密算法加密,得到256位二进制数hash
3.要求前n(难度等级)位必需是0,若A、B、C三个人如果有人通过改变随机数项完成了要求,算出了规定的字符串就形成了一个头部,完成打包,获得打包奖励,挖矿成功。
n越大,难度越高,矿越不容易挖,但比特币设计者规定平均每十分钟可以打包出一个块,所以难度等级n并不是一成不变的,而是根据当前算力在进行变化,故要想提高挖矿效率,就需要有更多算力的设备来挖矿,这样从理论上讲,提高了挖矿成功率。
这么多人进行打包,那么最终形成的区块链以谁为准呢?
答:规定以最先完成打包的人形成的区块链为准
传统的身份认证方式有:人脸、签名、指纹
而比特币采用电子签名,示意图如下:
首先用户注册,系统会生成随机数,并形成私钥(注意这个需要保密),私钥用于加密信息,然后通过私钥可以计算出公钥(通过公钥推不出私钥,非对称加密),公钥用于解密私钥加密的信息。最后还会有地址。
别人给你钱:只需要你的地址
你给别人钱:需要公钥和地址
eg:A给B十个BTC
首先A给B十个BTC通过加密获得摘要,然后摘要通过私钥加密得到密码。
然后A将此交易信息广播出去,如何判断消息真伪,首先记录信息是已经公开的,通过HASH加密,获得摘要1,然后还可以通过公钥和密码解密出摘要2,将摘要1和摘要2进行对比,看起是否相同就可以查出此条信息的真伪。
1.余额检查
由于用户的账单信息区块链是公开的,所以可以通过回溯用户的区块链来获得该用户的余额信息。
2.双重支付
问题:A给了10BCT给B,同时A又给10BTC给C,由于信息传递速度不同,其他用户接受到两条消息的顺序也不同,如何确认那一条信息为真,并作为区块链呢?
答:等到其他用户有一个幸运儿成功打包交易信息,并形成区块链,则以此用户的消息为准,其他正在尝试打包的用户,放弃打包此条消息。
1.原则:最长链原则
用户已最长的区块链为准,并在此区块链上继续打包,使其不断延长。
2.关于篡改
如图,若当A给B10BTC后,A进行篡改信息,从当前交易信息之前开始打包出新的一条区块链,由于最长链原则,其他用户都在A给B10BTC这条打包信息后进行打包,而A则单独在另一条链上进行打包,此时A就相当于与全世界做对抗,若A新开辟的区块链长于其它用户共同打包的区块链后,则表明篡改成功,但逻辑告诉我们,此时A拥有全世界超过50%的算力,完全可以沿着长的区块链进行运算,而不会去做出篡改数据这种吃力不讨好的工作,效益不高。
至此,比特币介绍完毕
在某些场景中,我们希望在 Linux 服务器(CentOS/RHEL)的同一块以太网卡(NIC)...
1.element的时间选择提交的格式转化 例如 Fri Sep 07 2018 00:00:00 GMT+0800 (...
首先要知道html标签的一些特点: 1.类似关键字这样由尖括号包关键字组成,例如ht...
1、什么是语义化? 必应网典的解释 语义化是指用合理HTML标记以及其特有的属性去...
什么是Viewport 手机浏览器是把页面放在一个虚拟的窗口(viewport)中,通常这个...
本文实例讲述了PHP 命名空间和自动加载原理与用法。分享给大家供大家参考,具体...
对于IT部门来说,管理无限增长的数据存储是非常大的挑战。 不断增加的管理工作量...
上篇文章给大家介绍了 vue实现裁切图片同时实现放大、缩...
以前大部分时间都是在做b端相关的项目,在实现此类需求时,通常都是直接借助 a ...
文章目录 题目描述 代码实现 题目描述 在一个长度为 n 的数组 nums 里的所有数字...