区块链学习记录(3)

比特币、挖矿调整

SHA-256

全节点、轻节点

全节点

1.一直在线
2.在本地硬盘上维护完整的区块链信息
3.在内存里维护UTXO集合,以便快速检验交易的正确性
4.监听比特币网络上的交易信息,验证每个交易的合法性
5.决定哪些交易会被打包到区块里
6.监听别的矿工挖出来的区块,验证其合法性
7.挖矿
·沿最长合法链挖下去
·出现等长分叉时,选择最先接收到的分叉

轻节点

1.不是一直在线
2.不用保存整个区块链,只要保存每个区块的块头
3.不用保存全部交易,只保存与自己相关的交易
4.无法检验大多数交易的合法性,只能检验与自己相关的那些交易的合法性
5.无法检测网上发布的区块的正确性
6.可以验证挖矿的难度
7.只能检测哪个是最长链,不知道哪个是最长合法链

Bitcoin交易验证

P2PK(Pay to Public Key)

1
2
3
4
5
6
input script:
PUSHDATA(Sig)

output script:
PUSHDATA(PubKey)
CHECKSIG

P2PKH(Pay to Public Key Hash)

1
2
3
4
5
6
7
8
9
10
input script:
PUSHDATA(Sig)
PUSHDATA(PubKey)

output script:
DUP
HASH160
PUSHDATA(PubKeyHash)
EQUALVERIFY
CHECKSIG

P2SH(Pay to Script Hash)

1
2
3
4
5
6
7
8
9
10
input script:
...
PUSHDATA(Sig)
...
PUSHDATA(serialized redeemScript)

output script:
HASH160
PUSHDATA(redeemScriptHash)
EQUAL

用P2SH实现多重签名

1
2
3
4
5
6
7
8
9
10
11
12
input script:
X
PUSHDATA(Sig_1)
PUSHDATA(Sig_2)
...
PUSHDATA(Sig_M)
PUSHDATA(serialized RedeemScript)

output script:
HASH160
PUSHDATA(RedeemScript)
EQUAL

Proof of Burn

1
2
3
output script
RETURN
...

这种形式的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)的值

零币、零钞

零币零钞在协议层融合了匿名化处理,其匿名属性来自密码学保证