最近去了解了一下前段时间很火的比特币。以前不是从亲戚朋友那里看的。这可能类似于金字塔计划。简单了解后,觉得这东西很神奇。
说到区块链,就不能不说比特币。
区块链
1.人类商品贸易形式的发展。原始社会以物易物,到黄金等实物货币,再到纸币等符号货币,再到中央银行,也就是现在的卡支付。无论任何交易,它都会通过银行。
存在的问题:
以物易物:非常不方便,但仍然可以保留。
实物货币:货币产量有限,存在损失的可能。
符号货币:存入和取出的方式不方便。
央行:如果记账人信誉不足,记账人存在作弊的可能。
A.分类帐
1. 有一个公共账本(只有一个): 1. 任何人都可以看到所有交易的账本。交易的范围不再局限于自己个人,而是所有的交易都从账本的存在开始,其他人都可以看到。
2.取消传统的记录余额的做法,只要有一个初始变量,那么只要记录每一笔交易,就可以计算出每个人有多少钱。
有两个方面可以保证交易双方不知道对方是谁。比如自己这边的公钥是可以签名的,这个签名是无法伪造的。
然后我这边还有一个检查章,可以显示这个章的隐藏交易信息进行交易。
C簿记员
那么问题来了。有了账本和交易方式,难道还需要记账员吗?
这时候,思维就出现了误区。谁说守书的人必须是一个人?既然记账人要有信誉,那还有什么比最可信的呢?如果一项协议大多数人认为是正确的,那么它就是正确的。
这就是许多人所说的挖矿。首先,矿工必须是劳动者。他可以是很多人,很多人之间难免会有竞争。那么竞争就需要一个诱惑,而这个诱惑就是奖励,所以只需要一个奖励机制。
3. 对比特币交易和支付有了更深刻的理解比如A给B 10个比特币。这时候你的账单上应该有的信息就是A的签名证明,比特币的数量,付款人,收款人。
然后把这张账单寄给收款人B,那么就有一个问题,收款人B怎么知道A是否够付这10张账单呢?他虽然认识这个人,但又怎么知道这个人的余额是否足够。其实解决的办法并不难,就是交易生效的时间必须在矿工确认交易有效后才能确定,也就是说矿工要承担传统银行的责任和检查A的余额是否充足。
4. 所以矿工的工作其实说白了就是记账。
这时候我们就会提到一个熟悉的函数——哈希函数,因为哈希函数的种类很多,而且随着时代的发展,很多已经被证明不再安全了。其中有一个著名的生日袭击。
但是SHA256没有这个漏洞,所以使用两次可以保证不会在当前环境下造成漏洞。
也就是说,矿工实际上有很多工作要做。
那么一定不能重复记账,同一条消息记录在两页上。
最后就是判断哪个矿工的账本记录有效。
关于第一个问题,其实很简单。说白了,如何保证一页接一页?首先想到的肯定是链表。只要在这一页上记录上一页的页码,就保证了这次操作。
关于第二个和第三个问题,就是要有一个机制来比较矿工做的账单,所以比特币的创造者设置了一个幸运数字。散列函数大家都知道,任何部分的任何微小变化,都会导致最终散列结果的巨大差异。那么这个时候,我们就可以有一个生成页码的公式
当前账单的页码=Hash(账单本身的内容,上一张账单的页码,幸运数字),然后系统规定一个最终的结果必须满足一个条件,比如开头是页码必须是5 个0?这个条件被低估了,这个条件肯定很难,因为哈希函数是不可逆的,也就是说你只能用幸运数字反复试验才能得到正确的结果。如果矿工的劳动成果是正确的、完整的,那么就很简单,可以获得一定的奖励。
5、如何确认矿工得到的账本是正确的前面说了,最好的可信度其实就是多数。如果一个矿工得到了账本,那么所有其他矿工必须停止所有正在进行的工作以确认账本。这个工作是无偿的,因为比较简单,只要账本编号正确,上一页的账本存在并且有效,交易的余额就可以达到刚刚好。确认无异议后,也可以绑定此页面,交易结束,矿工也得到应有的奖励,保证矿工手里永远只有一个账本。
六、存在问题1、如果同时收到两份账本,但账本都是合法的。那么就没有办法用线性链表了,那么有人会说,很简单,用一棵树就行了。只要最长的链始终充当主干,树就会有主干。此类问题可能会导致账本不一致,但换句话说,这种不一致是无害的,因为小的分支最终会消失。
2. 如果所有矿工都被贿赂了怎么办?这显然是不存在的,因为谁都不知道对方是谁,没有人可以伪造别人的信息来支付,诚实的矿工是不会承认非法有效性的。
3.现有的攻击行为?如果一个人只有10个B,他同时支付了A和B,同时收到了A和B的奖励,也被记录了下来。
p>
那么怎么做到呢,其实很简单,这个人先付A10个B,A看到记账之后,确认到账,付了钱,账本上也有了。
然后这个人变成矿工的角色,获得刚才被确认的前一页,做出分支,超过刚才的分支长度,这样A的那个分支就不再有效,也就是不被矿工所认可。
这个时候就可以再付给B10个,理论上可以一直下去。
那么问题来了- -仔细一想,这样真的能造出比它长很多的分支吗?不可能吧。因为幸运数字完全是运气,没有推算的可能性,除非他有庞大的计算体系或是什么还未知的巧妙算法。
4.矿工收获的酬劳如何获得。
系统发放?如果一直发放不是相当于在变相增加比特币?和货币一样,大量发放是不可能的,这回严重的通货膨胀,比如说津巴布韦币。
其实问题很好解决,一开始可以由系统发放奖励,当记账数到一定程度,减少,然后再减少,一直到没有,然后比特币就定死了。
那么这个时候谁还会做矿工不是吃力不讨好吗?这个时候矿工就不再是义务了,需要支付的人给予他们类似税一样的东西,也就是办事费,手续费,。
那么区块实际就是指一页页的账本。它的数据结构实际是一个默克树。然后那个签名的了解密码学的应该也是看出来了,就是EC(椭圆曲线加密)