怎么证明账目没人改过?
如果是中心的唯一数据库, 记的就是最终结果,改了就完了
分布式,每个人都保存一份账本,账本是去中心化的 ,
区块链账本的验证,利用了hash的如下特点:
这样只对比hash, hash值都一样 就是没被改过, 被hash的数据都是一样的
对下一个账本hash时,加入上一个账本的hash值
这时,只要都是
456635B
第一个账本和第二个账本就都是没被改过 , 是真的
这样形成一个区块链, 再长都只要对比最后一个hash值, 一样就是之前都一样的,最后的摘要信息对上了 ,所有账本都没被改过,是真的
怎么证明这钱是你的?
https://learnblockchain.cn/2017/11/10/bitcoin-script/
这样转账,如何证明自己是2A39CBaZ390FDe
的拥有者?有这0.2btc?
谁拥有这个地址对应的私钥就是地址的所有者,比如:
Hash(Hash(fun(sdgHsdniNIhdsgaKIhkgnakgaihNKHIskdgal))) -> 2A39CBa2396FDe
私钥就是sdgHsdniNIhdsgaKIhkgnakgaihNKHIskdgal
谁有私钥谁就拥有这个地址,谁都夺不走,除非自己忘记或者泄露
这条转账信息的发布者如何证明自己有这个地址(知道这个地址对应的私钥私钥)呢?
签名
先算转账信息的hash值
再用只有自己有的私钥 算得一个签名
这个签名和转账信息一起发布,
其他节点收到这个信息以后,都会去验证真假, 通过就会转发信息, 通不过就算了
神奇的是,验证签名真伪(是不是用地址对应的私钥求得的)不用私钥, 有公开的地址就行了
verify(签名, 付款方地址) ==hash
记账
必须鼓励人记账,记账是有奖励的, 奖很多钱
奖励只能给一个人, 就是首先完成记账的人,其他人只能复制第一个记账成功的人的结果
每10分钟记一次账,
10分钟: 记账速度和 分叉 的妥协
必须让记账有难度, 大概十分钟能碰对一次,就是如下这个随机数, 通过对0的个数的要求 来调整得到这个随机数的难度, 十分钟能算出来
如果还是有那么巧, 同时有多个算出来了, 节点们认可哪个? 这需要共识机制
比如, 某节点收到了2个块, 都是对的 , 那就都不扔, 存着
等下一个区块到来, B的下一个区块到了,这样就可以扔掉A了
孤块: 如果
#3459B
到了, 但是#3458B
没到 ,就暂存#3459B
到孤块池