1.账号如何验证
a.Hash(账本1)=787635A
b.区块
序列号 时间戳 Hash值+交易记录
c.Hash(787635A,账本2)=456635B
i.少数服从多数 x
ii.Hash y
2.账户所有权问题
a.账户->地址
{
"付款地址":"2A39CBa2390FDe",
"收款地址":"AAC9CBa239aFcc",
"金额":"0.2btc"
}
b.密码->私钥
地址:2A39CBa2390FDe
私钥:sdgHsdniagsadfsadfdsfdsafasdfdsafasdfdsfadsf
Hash(Hash(fun(sdgHsdniagsadfsadfdsfdsafasdfdsafasdfdsfadsf))) ->2A39CBa2390FDe
c.非对称加密(不泄露私钥证明我们拥有私钥)(交易签名)
交易进行hash得到摘要
用私钥对摘要进行签名
d.签名过程
hash('
{
"付款地址":"2A39CBa2390FDe",
"收款地址":"AAC9CBa239aFcc",
"金额":"0.2btc"
}
')->8aDB23CDEA6
参数1为交易摘要
参数2为私钥
返回签名信息
sign("8aDB23CDEA6","rgsfdgdfsgf") ->"3cdferdadgadg"
e.广播
{
"付款地址":"2A39CBa2390FDe",
"收款地址":"AAC9CBa239aFcc",
"金额":"0.2btc"
}
签名信息:3cdferdadgadg
f.验证
参数1为签名信息
参数2为付款地址
返回交易摘要
verify("3cdferdadgadg","2A39CBa2390FDe")->"8aDB23CDEA6"
if(verify("3cdferdadgadg","2A39CBa2390FDe")
== hash('{
"付款地址":"2A39CBa2390FDe",
"收款地址":"AAC9CBa239aFcc",
"金额":"0.2btc"
}')):
# 写入账本
# 广播
else:
# donothing
3.为什么记账-挖矿
a.记账:Hash打包 消耗资源 奖励
b.规则
i一段时间内只有一人可以记账成功
ii通过解决密码学难题(即工作量证明)竞争获得唯一记账权
iii其他节点复制记账结果
c.工作量证明
Hash(上一个Hash值, 交易记录集)=456635BCD
Hash(上一个Hash值, 交易记录集, 随机数)=0000aFD635BCD
d.交易记录集
i.收集广播中还没有被记录账本的交易
ii.交易的有效性验证
iii.添加一笔给自己转账的交易(挖矿奖励)
e.工作量分析
16进制 4个0 理论16*16*16*16次
4.共识机制
两个节点同时完成工作量证明, 使用谁的区块?
i.无仲裁机构裁决
累计工作量最大的区块链(难度最大)
i.独立
ii.延长最长链
分叉
#3456<-#3457<-3458A
<-3458B<-3459B