区块链
比特币:
- 财产只受自己控制;
- 无通胀
- 无假钞
- 流通性好
- 去中心化记账系统
比特币原理
- 账本如何验证
- 所有权问题
- 为什么记账(挖矿)
- 以谁的账本为准(共识机制)
1. 账本如何验证
Hash函数:Hash(原始信息)=摘要信息
同样的原始信息用同一个哈希函数总能得到相同的摘要信息;
原始信息任何变化都会哈希出不同的摘要信息;
摘要信息无法逆向推算出原始信息
第一个账本:
第二个账本:
2.账户所有权问题:
账号->地址
转账:{
“付款地址”:“29A39C68def89”
"收款地址":"39EFRBD7978A"
"金额":"0.5bt"
}
谁能够用付款地址进行支付,就拥有账户的所有权。
地址:29A39C68def89
私钥:23sadfu8809sdfd8989asdf7987979aklwex
私钥经过哈希运算之后,就能得到比特币的地址 Hash(Hash(function(23sadfu8809sdfd8989asdf7987979aklwex))) = 29A39C68def89
交易签名: 对交易进行哈希得到摘要,用私钥对摘要进行签名。
签名过程:
hash('
{
“付款地址”:“29A39C68def89”
"收款地址":"39EFRBD7978A"
"金额":"0.5bt"
}
')=8aDOABC798
sign("8aDOABC798","23sadfu8809sdfd8989asdf7987979aklwex")=3df89puyxcr89
交易摘要 + 私钥 = 签名信息
交易完成后进行广播,广播内容包括:交易原始信息和签名信息
验证:
签名 + 付款地址 = 交易摘要
verify("3df89puyxcr89","29A39C68def89")=8aDOABC798
代码表示:
if(verify("3df89puyxcr89","29A39C68def89")) == hash('{"付款地址":"29A39C68def89","收款地址":"39EFRBD7978A","金额":"0.5bt"}'){
写入账本;
广播;
}
3.为什么记账
记账就是一个hash计算的过程,会消耗资源,完成记账的节点会获取奖励;
记账的规则:
一段时间内只有一个人可以记账;
通过解决密码学难题(即工作量证明)竞争获得唯一记账权;
其他节点复制记账结果
工作量证明(挖矿):
Hash(上一个Hash值,交易记录集) = 4568DDQTU
Hash(上一个Hash值,交易记录集,随机数) = 000000000aFD49813ER
通过更换随机数,算出符合规范的结果.
交易记录集:
收集广播中还没有被记录账本的交易
交易有效性的验证
添加一笔给自己转账的交易(挖矿奖励)
工作量分析:
得到一个零,需要计算16*16次.