比特币基本知识
北大肖臻老师区块链技术与应用上课笔记
比特币
1、发明人:中本聪
2、著名交易所:门头沟(Mt. go)
3、私钥256位
比特币:共识协议
Merkle tree
Double Spending Attack
1、数字货币与纸质货币的区别:double spending attack,花两次攻击(数组货币可复制粘贴,纸质只有一个花了就没了 )
方案1: 维护数据库,017号货币在某某手里,花出去修改数据库,中心化方案
2、去中心化的数字货币解决两个问题:
- 数字货币的发行,谁有权利发行数字货币,什么时候发行
- 验证交易的有效性
3、验证交易的有效性
- signed by A,用A的私钥签名
- A->B A要知道B的地址,B的公钥取hash,B公开公钥
- B要知道A的公钥,所有节点都要A的公钥
- 输入要说明A的公钥,B的来源
- 输出收款人公钥的hash
- 下个区块的输入脚本与上个脚本的输出脚本拼接完好成功执行才是无误
- 每个区块中可以形成merkle tree
4、区块的组成:
- block header
- version
- hash of previous block header
- merkle root hash
- target(H(block header)<= target)
- nonce(挖矿用的随机数) 4 bytes
- block body
- transaction list–最多不超过1M
5、系统中的节点: full node、light node
- full node
- 保存全部信息
- 内存维护UTXO集合–谁有多少钱
- light node
- 只保存block header
6、账本的内容要取得分布式的共识
- 分布式的hash table
- FLP impossibility result:异步系统中(网络时延没有上线),有一个节点挂掉,这个异步系统也无法达到共识
- CAP Theorem: 任何一个分布式系统,只能办满足以下两个
- consistency
- availability
- Partiontion tolerance
7、比特币中的共识协议:
基于投票:
- hyperledger fabric 联盟链协议
- 比特币系统中无法控制投票权,一个密钥对就是一个账户,存在sybil attack,恶意照很多账户投票
H(block header) <= target
使用计算力来投票,每个节点都可以在本地组装一个候选区块将认为合法的交易放入,加入到区块链中,然后尝试不同的nonce值满足上述,则获得记账权;其他节点验证block header与block body是否合法
接受的区块应该是最长合法链,下图为分叉攻击,看是否存在两次转账,则只看前面的链,不看分叉链,解决方案:多等几个区块–6个;诚实的算力多,保证最长合法链,等待时间越长,被篡改几率越小
同时获得记账权,存在相同的最长合法链,然后竞争最长,最长合法链才是合法的
获得记账权的节点可以获得铸币权(coinbase transaction) 50BTC—21万个之后—25BTC—21万个之后—12.5BTC,每隔10分钟产生一个区块
取得的共识是:去中心化账本中的内容是共识的
根据算力来,hash rate
争夺记账权的过程叫挖矿
比特币:实现
1、transaction-based ledger
拥有记账权的节点,可以记录交易,并收取小费
2、每一次挖矿的概率与挖矿时间无关,每次出块的平均时间为10分钟
3、系统中比特币的总量21w*50+21w*25+21w*12.5…..=2100w
比特币: 挖矿
1、挖矿芯片
- CPU
- GPU
- ASIC:专用挖矿芯片,一种币种有专用的,除非mining puzzel相同
2、矿池:充当全节点,给每个矿工分配任务,矿工只负责计算hash值,矿池负责组装
3、矿工如何证明工作量:每个矿工提交share(近似的hash)来证明工作量
4、coinbase–>A: 在区块merkle tree里面
比特币: 脚本
- 只进行堆栈操作
- 输入脚本有签名
- OP_RETURN: 当前区块的输出脚本,判断当前区块是否合法根本不执行这个脚本
比特币:分叉
state fork
- 分叉攻击
protocol fork:由于是去中心化的,新协议无法全部普及到全部节点
hard fork:
新协议,旧节点不认新协议,新节点不认旧协议
block size limit: 1M—>3M
规定每个区块1M,增加交易的延迟,增加吞吐量,一个交易差不多250字节
可以允许有两条链,各带一个chainid
soft fork:
- 新协议,旧节点也认新协议,但是新节点不认旧协议
- block size limit: 1M—>0.5M
- Coinbase: 铸币交易
- 前8 bytes: 可以调节里面的extra nonce:
- 里面的某些域:可以作为UTXO的hash值存进去
比特币:匿名性
匿名性是笔名,网名,不是跟现金一样完全无关
1、如果银行用匿名,隐私性是否比比特币要好?
是的,比特币的账本是公开的, 且不可篡改
2、比特币什么时候可以破坏匿名性
- 一个人多个账户,什么操作将不同的账户关联?(这些账户是一个人的)
- 网上买东西:
- inputs:addr1,addr2;
- output:addr3,addr4
- addr1与addr2就有联系
- 网上买东西:
- 跟真实世界联系
- 买入比特币,卖出比特币
3、实现匿名性:
- application layer:
- 把很多人的比特币混在一起(coin mixing)
- network layer:
- 洋葱路由(Tor)
4、零知识证明:一方向另一方证明一个陈述是正确的,而无需透露该陈述是正确的以外的任何信息
- 证明这个私钥是我的,我签名你用公钥验证(有争议)
5、同态隐藏:
- x 不等于 y,则E(x) 不等于E(y)—hash碰撞
- E(x) 很难推出 x — hiding property
- 同态运算:
- 同态加法:E(x) 和 E(y) –>可以算出 E(x+y)
- 同态乘法:E(x) 和 E(y) –>可以算出 E(xy)
- 扩展到多项式
5、零币和零钞:完全匿名
比特币:思考
1、区块链中hash指针的传播:所谓的hash指针只是形象的说法,只有hash,没有指针。全节点存储(key,value)数据库,在levelDB查找value就可以查找出来,hash指针的性质保证了整个区块链不可被篡改
2、区块恋:单个账户的私钥被切分成两份, 不提倡。提倡使用多重签名,每个私钥都是独立产生,可以要求N个人中任意M个
3、分布式共识:分布式系统理论上不可能取得共识,很多理论上的不可能结论只是在特定上的条件下,在实际的时候改模型可行
4、稀缺的东西不适合用来做货币:比特币不适合,总量一定
5、量子计算:可以破解各种各样的密码
6、收钱:只需要提供公钥的hash,取钱:提供公钥与私钥的签名