一、构架
重新认识区块链,让他们从最已经开始的比特币已经开始。
比特币其本质上来说,是三个亚洲地区标准化的分布式系统账单,历史记录着大部份的买卖历史记录。如果依照你大部份的买卖历史记录,就能晓得你那时有几万元了。
弄三个账单很单纯,但要让在世界上都信赖那个账单就极难了,他们来看一看比特币是怎样努力做到的。
区块链构架
支撑力比特币的控制技术节兰约莫能分成四层:
第几层 p2p应用层。这几层主要就化解的难题是,分布式系统的结点怎样发觉人,结点间怎样通讯逐步形成三个互联网。第几层 一致意见储存层。亚洲地区所以多结点怎样达成一致一致意见,协力保护惟一的这份账单,因此自己还打架没法。第几层 账单数学模型。账要是不是记才科学合理呢。二、账单数学模型
2.1 买卖
比特币的账单中只历史记录三个小东西,是“买卖”。
上图历史记录了一万六千买卖
每一大笔买卖主要就有三个部份:
买卖输入:历史记录了该笔买卖钱从哪里来。
买卖输入:输入的这些钱将到哪里去。
他们来看这一万六千买卖:
1001号买卖:一般的买卖买卖输入填写的是已经历史记录在案的交易输入,而挖矿是一种特殊的买卖,输入不用引用其他的买卖输入
2001号买卖:买卖输入引用了1001号买卖的第一号输入,输入有两项:2.5给李四,10给张三。也是张三把挖矿所得的12.5分了2.5给李四,自己留下了10。一般买卖输入之和等于买卖输入之和,所以比特币中经常会有这种自己出现在买卖输入中称为找零。
3001号买卖:买卖输入有两项,买卖输入也有两项。李四和张三协力转钱给王五。
2.2 是不是晓得自己有几万元
那时假设你是张三你那时晓得自己有多少余额吗,如果你要转3个币给李四又该是不是做。
他们已经晓得每笔买卖的输入,都是之前的买卖的输入,所谓的花钱是构造一大笔买卖引用之前的买卖输入,所以比特币中余额称作UTXO(未被花费的买卖输入)。想晓得你有多少余额,只需要找到买卖输入是你的账号,而且没有被其他买卖输入引用的全部买卖输入额之和,是你的全部余额了。
如果你想要转3个币给李四,你就找到到你的UTXO填入买卖输入,李四的账号填入买卖输入,构造一大笔买卖发布到比特币互联网中等待矿工打包,当你的买卖打包发布到了互联网中得到承认的时候你的转账就成功了,李四就多了3个币的UTXO了。
2.3 是不是证明钱是你的
比特币买卖输入都是公开,那是不是能保证只有我能使用我的买卖输入,而自己不会用了我的钱呢,首先他们来科普下非对称加密的相关知识。
非对称加密中,公钥和私钥是成对存在的,公钥加密的小东西只有与之匹配的私钥能解开,私钥加密的小东西只有与之匹配的公钥能解开。
加密:一般来说他们把公钥放出去,想给你传信息的人就使用你的公钥把信息加密传送给你,你用私钥解密就能看到真实的信息了,而没有私钥的人死活解不开密文的。
签名:你把你说过的话用私钥加密放出去,自己使用你的公钥就能验证这话是不是你说的,因为只有你的私钥加密的小东西你的公钥才能解开,其他人是没法伪造的,其他人你得不到你的私钥。
在比特币中公钥能看作是你的账号,私钥你就悄咪咪自己保管好,自己转钱给你的时候就把你的公钥放到买卖输入中,如果你要使用该笔UTXO就得使用你的私钥提供三个签名证明这你有这公钥对应的私钥,才能得到矿工的承认,才能得到在世界上的承认,最后你该笔钱才能算花出去了。
2.4 智能合约
上图才是一大笔买卖真正的样子,每个买卖输入都包含三个锁定脚本,每个买卖输入都包含三个解锁脚本。这里的脚本是指编程的那种脚本,是能一段能运行程序代码。普通的买卖锁定脚本的意思是让解锁脚本提供三个签名能与自身的公钥匹配上那你就能使用该笔UTXO。当你构造好解锁脚本和买卖之后,矿工会运行锁定脚本和解锁脚本来验证你的该笔买卖合不合法,决定是否打包。这里你是否看出了比特币实现智能合约牛B之处。比如你爸想给你一大笔钱,但又希望你用的时候得你妈同意,那你爸就可以构造一大笔买卖在锁定脚本中写到得同时用你妈和你的签名才能使用该笔钱,这样你就必须得到你妈的签名才能构造解锁脚本,才能用该笔钱了。这里又能看出其实比特币对于账户的概念是比较弱的:如果你能给出解锁脚本匹配上锁定脚本就能使用该笔UTXO了,没有什么账户的概念。有了锁定脚本和解锁脚本,他们就能做很多扩展的事情了。
参考资料:锁定脚本和解锁脚本是不是运行
三、一致意见储存
上面他们已经晓得怎样构造三个合法的买卖,这么多买卖怎样来组成三个合法的账单呢,账单又应该存在哪里才安全呢。
3.1 账单-区块链
账单就长这样,他们把一堆买卖历史记录打个包成为上图的每三个小方块,这样的方块称为区块,然后把他们首尾相连就成了区块链也,是不是so easy. 每一块都历史记录了上一块的hash值,这样就使得它有这样三个特性:如果你想改变其中的一大笔买卖历史记录那那个区块的hash就会变,也就导致了下三个区块hash改变,产生一连串的反应,所以想篡改越久远的历史越难。
3.2 账单放哪里
这样的三个账单应该存哪里呢。
比特币的策略是让每个人都存下来保护着,当有人挖出了新的区块就大吼一声,大部份人都来验证看是不是真的,验证成功就更新账单,这样历史账单就几乎不可能被篡改了,除非你改变大部份人的。
3.3 挖矿
历史不能被更改,那他们是不是来写入新的区块呢。
假设他们每个人都能写,岂不是就很混乱了,你想在A上加一区块B,他却想在A上面加个区块C,就不能维持惟一的这份账单了。
比特币想了个办法使得每个新的区块只能有三个人来写。谁来写呢,比特币说谁每次我发布一道题,谁先解出来,谁就能拥有记账权写下那个新的区块。然后大家来解题了,那个题极难解出来(可能要耗费十几分钟时间),但又很好去验证(大家一看就晓得你做的对不对),哪些没解出题来却想滥竽充数的人就很容易被大家看出来,得不到大家的承认。
解题争取记账权的过程就称作挖矿,比特币这种耗费计算资源来算题争取记账权的模式又被称为工作量证明,意思是想要记账就得让我看到你的努力,越努力就越有机会得到记账权。
3.4 一致意见
介绍来这么多,大家应该能从中明白“一致意见”这三个字的含义了吧,比特币建立的这一套体系其实只是一套规则而已,大家都去相信且遵守这套规则,抵制不守规则的人,那比特币就能一致存在下去。
四、总结
讲到这里大家应该都明白了比特币的基本概念了吧,至于它用到的p2p互联网,又是一片新天地了。
从分布式系统系统来看比特币的话,挖矿其实是个leader选举的过程,只有leader拥有写权限,写完从结点再进行同步。
区块链给世界带了很多新的小东西,请在评论区说下你的高见。