前言
我不时有一种状态,就是翻遍了所有课程、书籍,就是不知道要做学什么好,像只无头苍蝇。每当有这种感觉的时候,我告诉自己学什么都好过什么都没学,以此破局。
此笔记记录学习慕课网视频:区块链技术核心概念与原理讲解,一直不理解区块链到底是什么,看了这个视频才有了一个认识,建议和视频一起看。
下面部分是比特币原理的剩余三个小节:
2.账户所有权问题?
怎么确定一个比特币是属于谁的?首先还是看看现实中操作:平时我们在刷卡的时候,会需要两样东西:银行卡和银行卡密码。如果银行卡与密码与系统存储的结果对上了,就可以消费了。如果你的银行卡和密码都给盗了,盗贼使用你的卡进行消费。我们还可以通过银行和警察叔叔的协助,确定是盗贼使用了你的卡。
但是在比特币系统中:交易是点对点的,没有银行等第三方。
image.png
在比特币系统中,比特币账户是一个地址,谁能用这个地址进行交易,谁就拥有这个账户的所有权。
注意:地址和私钥是非对称的关系,私钥经过一系列Hash运算后得到地址。
image.png由上可知,私钥和账户有着绝对确定的直接对应关系,而不能像银行卡那样再修改密码了。谁拥有了私钥,就相当于谁就拥有了这个账户,谁就可以用这个地址进行交易。所以私钥超重要,如果私钥泄露了,比特币就可能丢失。
所以所有权的问题就变成了在不泄露私钥的情况下,证明自己拥有某个地址的私钥。(也就是验证私钥的正确性就行了)。
(这里我是这样理解的:要想证明自己拥有私钥,就要得到别人的验证,一种方法就是:你直接把密码告诉别人,就好像你把银行密码直接告诉别人,然后说:“你看吧,这个是正确的密码,不信你输入看看,可以取款的,没骗你吧。”
当然,这是傻子才会做的事。有没有不告诉别人密码,然后又可以验证的方法呢?)
这里就用到了非对称加密技术(交易签名)。
- 交易进行hash得到交易摘要
- 用私钥对摘要进行签名
签名过程:
首先是对原始交易信息进行hash,生成交易摘要,然后再用交易摘要和私钥进行一个签名运算。
image.png
在签名运算之后,该节点会在整个网络进行广播:广播内容为原始的交易信息(包含付款方地址)和签名信息。
image.png而接收到的节点又会以同样的方法进行广播,以致传递到所有节点(就像洪泛法??)
验证过程:
用签名和付款方的地址进行一个验证的运算,如果结果是原始交易信息的摘要(hash值),那么说明这笔交易就是私钥所有者发出的,验证通过。这时候就会把交易的信息写入到账本。然后再次进行广播
可以看出,签名和验证是个相反的运算,签名是个加密的过程,验证是个解密的过程。我发现,原来这个付款方地址就是公钥嘛!!(视频后面也说了)这样就不用把私钥告诉别人,而是用公钥就可以验证私钥的正确性了。
签名运算
交易摘要 + 私钥 ===> 签名
验证运算
签名 + 付款方地址 ===> 交易摘要
image.png
视频后面补充了:关于隐私和安全,不打出来了。
3.为什么记账(挖矿)?
记账:Hash打包过程。在比特币的设计中,完成记账是可以获得一定比特币奖励的,所以大家将记账形象的叫做——挖矿,这个奖励其实就是比特币发行的过程。
规则:
- 一段时间内只有一人可以记账成功(10分钟)
- 通过解决密码学难题(即工作量证明)来竞争获得唯一的记账权
- 其他节点只能复制记账结果了
之前说到,记账过程就是如下:
image.png
如果只是这样的运算,那么每个人都可以轻松完成,而要保证一段时间内只能有一个人记账成功,就必须要故意大大提高计算的难度。
比特币规定这个计算结果要满足以若干个0开头的要求。
image.png这时在计算hash时,就要引入一个随机数变量,不断的去改变随机数,每个都可以得到一个新的hash值,直到找一个符合以若干个0开头的hash值。我们现在的电脑要找出4个0开头的hash,一般需要1、2分钟的时间。
比特币因为现在很多人参与挖矿,算力很强大,所以将挖矿的难度设为以18个0开头。第一找到这个hash的,就可以获得交易记录集,这个交易记录集就可以这样用:
- 收集广播中还没有被记录账本的交易
- 交易的有效性验证
- 添加一笔给自己转账的交易(挖矿奖励)
这个交易记录集可以理解为通关奖励的宝箱,当然我们要的就是后面那个啦。
image.png18个0的计算量是非常巨大的,要非常强大的设备与消耗巨大的电力(之前听说一些矿工跑到贵州等电费较低的地区挖矿,原来是这个原因,感觉这种故意要消耗巨大算力的设定很浪费啊,最终只有一人能挖到矿。机器没日没夜的跑,其他没能挖到的所有的投入都白费了,陪跑一样)。
所以现在已经没有独立的矿工进行挖矿了,因为几十年也可能挖不出一个。
而且随着越来越多的人投入挖矿,那么计算难度必然又将加大。成本也将越来越高。最终这样作用下去,成本甚至是接近收益的。
4.共识机制(这里听得不太清楚,有时间再补充了)
如果两个节点同时完成工作量证明,使用谁的区块?无仲裁机构裁决,而且都说用我的区块。
为什么要遵守协议:节点工作量只有在其他的节点认同其是有效的。
image.png image.png image.png后记
最后,我还看了一套用GO语言构建自己的区块链,这个视频用go实现了一个区块链的结构吧,个人觉得算是代码的简单实现。
关于比特币余额的问题:http://web.jobbole.com/94322/
JS实现区块链:http://web.jobbole.com/94322/
网友评论