区块链基本知识梳理

版权声明:版权所有。转载请注明出处:扶风的博客 https://blog.csdn.net/JohnnyMartin/article/details/83622286

公钥私钥与地址

  • 私钥是一切的根本,由它可以导出公钥、地址,而无法通过公钥推出私钥
  • 公钥加密私钥解密,私钥签名公钥验证
  • 以太坊使用的椭圆曲线算法可以从签名的数据中推算出该数据发送方的地址
  • 公钥经过一系列操作之后可以推出地址,以太坊是将公钥做Keccak-256哈希,然后取最后的40位16进制字符
  • 私钥一定要妥善备份,常用备份方式有:
  • 助记词,一般由12个单词组成,得到它就等于得到了私钥
  • keystore文件,一个json文件,本质上是把私钥加密之后的数据文件,解密需要输入加密时的密码

钱包 热钱包 冷钱包

  • 钱包的本质:生成密钥、管理密钥、使用密钥的工具。
  • 钱宝负责生成一个随机的私钥,根据此私钥生成公钥,再根据公钥得到地址
  • 冷热钱包的本质区别在于存储私钥的方式
  • 冷钱包:网络无法访问到私钥
  • 热钱包:网络可以访问到私钥
  • 冷钱包安全性好但是不适合频繁交易,热钱包反之。

硬分叉软分叉

  • 本质区别:区块链网络上旧的节点是否认可新节点产生的区块。(一般新节点会在共识规则上做出一些改变)
  • 若不认可,则新节点挖出的区块会被旧节点否决(达不成共识),于是新节点和旧节点会开始在不同的链上运行(挖矿、交易、验证等)
  • 旧矿工的去留将决定旧分叉的生死
  • 硬分叉影响较大,除非得到整个链生态的同意,否则贸然硬分叉极易造成该链的分裂。同时,硬分叉又具有相当大的”医疗作用“,尤其当发现重大bug、重大缺陷的时候(此时较容易得到整个链生态的同意)
  • 软分叉不会产生两条链,新节点产生的区块可以被旧节点承认(达成共识),但是旧节点却无法识别新块中属于新规则的那部分数据真实意义。
  • 软分叉不能增加数据字段,只能在现有结构上修改,升级空间有限,而且会让代码变复杂。
  • 硬分叉通常是扩展共识规则,而软分叉是收紧共识规则,所以一旦进行了软分叉,想要回退就非常困难了,很可能造成硬分叉而导致资金损失

UTXO
熟悉比特币的人应该都知道,为了尽可能少的泄露公钥,每次交易时比特币社区建议将余额转向一个新的地址。
(从公钥反推私钥虽然是极为困难的,但是不一定抵抗量子计算机,比特币地址的双重hash以及交易时将余额转向一个新的地址都是为了保护公钥,尽可能少的暴漏)

那么问题来了,每次都将余额转到了一个新的地址,那我的账户下的余额岂不是无端没了?
当然不会没了,事实上比特币世界中并没有账户的概念,也没有余额的概念,有的只是UTXO(Unspend Transaction Output)未花费的交易输出。“账户的余额”便是与该账户相关的UTXO的和。
简单来说,比特币只记转账过程,不记余额。一笔转账由两大部分组成:输入部分、输出部分。输入部分便由一个个UTXO组成,例如,A打算转5个BTC给B,钱包知道A的所有UTXO,于是钱包挑出了A的A1,A2,A3三个UTXO,每个2 BTC,将这三个UTXO作为本次转账的输入,本次的输出有两部分:一部分将5 BTC转给 B,另一部分将剩余的1BTC转到一个新的地址(此处假设没有矿工费),这个新的地址是由钱包管理的。于是,这个拥有一个BTC的UTXO又可以作为下一次交易的输入。
最关键的问题是:每一次都将未花费的余额存入新地址,新地址意味着对应一个新的私钥,这么多私钥,我都得一一备份么?当然不用——HD钱包(Hierarchical Deterministic 分层确定性)只是用一个“根私钥”也就是种子(seed),生成任意多的子私钥。我们备份钱包,只需备份“根私钥”的助记词即可。比如我们可以用这样一套算法生成子私钥:SHA256(seed + n)。只要seed确定了,后面的所有子私钥也都确定了。

双花问题的解决
1.每发起一个交易,都要检查该交易的各个输入是否是“未花费的”。
2.交易接受者要等待6个确认块之后再确定本次交易成功了。(以太坊是12)

拜占庭问题的解决

叔块奖励
叔块奖励是以太坊中的机制。比特币中的叔块并没有任何奖励,以太坊为何要给挖出叔块的矿工奖励呢?
源于GOHST协议。

重放攻击

猜你喜欢

转载自blog.csdn.net/JohnnyMartin/article/details/83622286
今日推荐