区块链笔记

date
Mar 25, 2021
slug
blockchain-bitcoin-note
status
Published
tags
blockchain
比特币
区块链
summary
type
Post
读书笔记

密码学

哈希(hash):
密码学中的哈希函数 cryptographic hash function 两个性质: collision resistance(collision free)抗碰撞性 hiding:单向的,不可逆 x->H(x) H(x) !<- x 比特币中要求第三个性质 puzzle friendly 需要k个0开始的哈希值,没有捷径,只能一个一个尝试 H(block header) <= target 找寻nonce很困难,但是验证nonce哈希之后的值很简单。
两个性质结合实现 digital commitment(digital equivalent of a sealed envelope)
场景:预测结果不能提前公开,但是如何防止被篡改过呢? 预测结果哈希一把,公开这个哈希值,等结果出来以后,结果哈希一把和预测的哈希一致,说明预测对了。
签名:
开户过程就是创建一对公私钥(public key,private key)
非对称加密->加密用公钥,解密用私钥
发布交易的时候对这个交易用自己的私钥签名,其他人对这个交易用公钥验证签名
万一两个人的公私钥签名一致,理论上是不可行的,前提是好的随机源,助记词就是随机源,现实中有人实现了这种破解,因为有些人懒,用了简单的助记词。

数据结构

  • blockchain hash Pointers(哈希指针) tamper evident log(防篡改日志) 哈希指针是区块的信息哈希以后得出的值
  • merkle tree 只要知道根hash,就能检测出整棵树是否被修改 用途: merkle proof
全节点和轻节点(只保存block header)
轻节点提供验证的交易,向全节点发出请求,全节点收到请求后,将红色的哈希值返还给轻节点,轻节点对这些哈希两两做哈希,得到最终的哈希值,和block header中的哈希比较。
每个区块分为块头(block header)和块身(block body)
block header 有merkle tree的hash值
Sorted Markle tree

协议

double spending attack(双花攻击)
转账交易合法,必须验证交易,A在发起交易的时候放入自己的公钥和签名,让所有人对这笔交易进行验证。
共识(分布式共识)
CAP理论 : Consistency 一致性 、Availability 可用性、Partition tolerance 分区容错性
sybil attack(女巫攻击):产生一堆账户,进行简单的直接投票。
比特币中用算力来进行投票
longest valid chain(最长合法连)
fork attack(分叉攻击)
block reward(出块奖励):获取出块权的节点可以发布一个特殊的交易coinbase transaction(铸币交易)

实现

transaction-based ledger (隐私保护好一些)
utxo:unspent transaction output 为了检测double spending
transaction fee(交易费)
account-based ledger

挖矿难度

difficult = difficult_1_target/target
difficult_1_target:挖矿难度等于1的时候,挖矿难度和目标阈值成反比
参数人少的时候,10分钟出一个块,后来人多了,1分钟出一个块,再后来设备先进,几秒就出一块,所以要调整难度
出块时间短,分叉几率就会增加,对系统达成共识是不利的。
(2016个区块×10分钟)/(60分钟×24小时)=14天 ,调整一次难度
target = target * (actual_time/expected_time)
expected_time = 2016*10
actual_time = 最近产生2016个区块实际花费的时间
目标阈值target最多增大或者减少四倍

挖矿

挖矿设备 CPU->GPU->ASIC( Application Specific Integrated Circuit )
某个矿产占了51%的算力,能够发动分叉攻击、boycott(封锁):如果不喜欢A这个账户,可以封锁A的所有交易。

脚本

脚本形式:
P2PK
P2PKH(最常用)
P2SH(多重签名)
proof Of Burn(销毁币)

分叉

hard fork 必须所有的节点都更新软件,系统才不会分叉
soft fork 只要系统中有半数更新系统,系统不会分叉
交易数量:1000000字节/(一个交易差不多250字节)=4000交易
出块速度:4000交易/60秒*10分钟=7 tx/sec

匿名性

coin mixing
同态隐藏
盲签方法

© Frandy 2024