学习视频:北京大学肖臻老师《区块链技术与应用》 笔记参考:北京大学肖臻老师《区块链技术与应用》公开课系列笔记——目录导航页
哈希指针BTC系统中很多地方用到了哈希指针,比如区块的块头就包含指向前一个区块的哈希指针。指针保存的是本地内存的地址,只在本地的计算机上有意义,发送给其他计算机就没意义了。那么在发布区块的时候,哈希指针是如何通过网络进行传播?
所谓的哈希指针,只是系统中一种形象化的方法。实际应用的时候,只有哈希而没有指针。 回顾一下之前提到的Block header的数据结构: 图示位置即为前一个区块的哈希 因此可见,在block header中只有hash值,没有指针。那么如何查找到前一个区块的内容? 全节点一般将区块存储于一个key-value数据库中,key为哈希,value为区块内容。常用的key-value数据库为levelDB,所谓的链式结构实际上就是在levelDB中通过哈希值串连起来的,只要掌握了最后一个区块的哈希值,就可以根据levelDB把最后一个区块的内容取出来,然后这个区块的块头中又有指向前一个区块的哈希值,以此类推,最终就能把整个区块链都找出来。 有些节点只保存最近的区块链的部分信息,如果需要用到前面的区块,可以问其他的全节点要。哈希指针性质保证了整个区块链内容是不可篡改的。
有情侣一起买BTC,将私钥从中截断,每人保留其中一部分。如果未来两人依旧感情很好,就可以将钱取出;如果分手,这部分钱就会永久锁死,谁也无法取出,通过区块链的不可篡改性作为两人的爱情见证。这样做有什么问题?
如此下来,N个人怎么办? 如果按照这种方法,将私钥分为N份。但这样会有一系列问题。一. 如果N个人中任意一个人忘记私钥,则无法将钱取出。二.截断私钥长度,会降低安全性,因为私钥长度会直接影响破解难度(假如一共四个人,其中三个人串通起来,他们只需要尝试264种可能就可以破解),对于多个人的共享账户不要用截断私钥的方式,用多重签名。三.如果分手,该钱变成死钱,一直保存在UTXO集合中,对矿工不友好。
分布式共识为什么比特币系统能够绕过分布式共识中的那些不可能结论? 严格地说比特币并没有达成真正意义下的共识,因为取得的共识随时都有可能被推翻。 比如:分叉攻击,本来你以为已经达成了某个共识,分叉攻击后系统会回滚到前一个状态。理论上甚至可能一直回滚到创世区块 按照分布式共识理论的要求,共识一旦达成后就不应该再改了,从这点来看,比特币并没有绕过分布式共识中那些不可能的结论。
发明比特币的中本聪应该不是学术界出身,否则他不会设计出像比特币这样的系统 搞科研是很有意义的,但是不要被学术界的思维限制头脑,不要被程序员的思维限制想象力
比特币的稀缺性为什么要挖矿?因为有收益,且收益大于开销。早期BTC难度低且出块奖励高,从而吸引矿工。 之前有提到,BTC总量固定,有人认为其是一个精妙的设计。但实际上,总量固定的东西并不适合作为货币,这也就决定了BTC并不能在未来完全颠覆现有货币体系。以太坊中便没有BTC中出块奖励定期减半的做法,此外,某些新型货币会自带通货膨胀的功能。 对个人来说,通货膨胀并非好事,因为钱不值钱了。但人类每年创造的价值在增多,如果用总量固定的东西作为货币,则其只会越来越值钱,而这会导致拥有者不断看着其升值,其他没有的人无论如何奋斗都赶不上(房市也是如此,炒房使一部分人靠房租便可大赚特赚,个人奋斗却很难买房。这也是我国目前存在的较大的问题,社会财富的分配不公,最终引发各种社会矛盾,需要政府解决)。
量子计算比特币这种建立在密码学上的加密货币,在量子计算出来后会不会变得不安全。
- 量子计算距离使用仍然有很长距离(在BTC的有生之年,不一定会产生实质性的威胁)
- 量子计算若真正强大到破坏现有加密体系的话,首先冲击的是传统金融业。
- 比特币使用非对称加密体系,通过私钥是可以推导出公钥的,公钥推不出私钥。假如量子计算发达之后,能够从公钥推出私钥的话,比特币又加了一层保护,实际中使用的并非公钥,而是用公钥的哈希。所以如果有人想偷你账户里的钱的话首先要通过地址推导出你的公钥。相当于把公钥的哈希进行逆运算推导出公钥的本身,这一点即使是量子计算机也没法完成。(在取哈希的时候本身就会有信息的丢失,BTC中用的SHA-256,无论输入多大,最终结果都为256位,必然会导致信息丢失,无法反推原本数据。)
收钱只需要提供公钥的哈希,取钱才需要公钥和私钥产生的签名,如果有人监听到你取钱的交易,知道你的公钥是什么,他要偷你的钱,他需要实时的从你的公钥推导出你的私钥,然后产生一个和你竞争的交易,你要把钱转到你的账户,他要把钱转到他的账户,即使是量子计算机,也很难在几分钟之内把你的私钥破解了,而且他发布的交易还要抢在你之前,因为一旦你把钱转走了,他的交易就没用了,属于double spending。所以从安全性的角度来看,地址一旦用过之后就不要再用了。每次取钱最好一次性都取走。除了支付给别人的钱,剩下的钱可以转给自己的另一个账户,这样不但提高了安全性,也提高了隐私保护的程度