比特币、挖矿调整
SHA-256
全节点、轻节点
全节点
1.一直在线
2.在本地硬盘上维护完整的区块链信息
3.在内存里维护UTXO集合,以便快速检验交易的正确性
4.监听比特币网络上的交易信息,验证每个交易的合法性
5.决定哪些交易会被打包到区块里
6.监听别的矿工挖出来的区块,验证其合法性
7.挖矿
·沿最长合法链挖下去
·出现等长分叉时,选择最先接收到的分叉
轻节点
1.不是一直在线
2.不用保存整个区块链,只要保存每个区块的块头
3.不用保存全部交易,只保存与自己相关的交易
4.无法检验大多数交易的合法性,只能检验与自己相关的那些交易的合法性
5.无法检测网上发布的区块的正确性
6.可以验证挖矿的难度
7.只能检测哪个是最长链,不知道哪个是最长合法链
Bitcoin交易验证
P2PK(Pay to Public Key)
1 | input script: |
P2PKH(Pay to Public Key Hash)
1 | input script: |
P2SH(Pay to Script Hash)
1 | input script: |
用P2SH实现多重签名
1 | input script: |
Proof of Burn
1 | output script |
这种形式的output被称为:Provably Unspendable/Prunable Outputs
分叉
硬分叉(hard fork)
ex:旧节点挖出小区块,新节点挖出大区块
旧节点如果不更新,该分叉将永久保存
必须所有节点更新,该分叉才能消失
###软节点(soft fork)
ex:旧节点挖出大区块,新节点挖出小区块
旧节点如果不更新,则会转到新节点,分叉是暂时性的
只需要部分节点更新分叉就会消失
Bitcoin匿名性
Bitcoin具有一定的匿名性,匿名性小于法币交易,大于平台实名交易
由于区块链是公开性的、不可更改的,因此需要注意个人不同账户的关联性,否则隐私泄露后会全网公开且不可抹除
零知识证明
零知识证明是指一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透露除该陈述是正确的以外的任何信息
同态隐藏
·如果x,y不同,那么他们的加密函数E(x),E(y)也不相同(一一映射)
·给定E(x)的值很难反推出x的值
·给出E(x),E(y)的值,很容易计算出某些关于x,y的加密函数值
-同态加法:通过E(x),E(y)计算E(x+y)的值
-同态乘法:通过E(x),E(y)计算E(xy)的值
零币、零钞
零币零钞在协议层融合了匿名化处理,其匿名属性来自密码学保证