账户所有权

账号 --> 地址

    转账的过程 是把 比特币 从一个地址转到另外一个地址。

{

    "付款地址":"2A39CBa2390FDe"

    "收款地址":"AAC9CBa239aFcc"

    "金额":"0.2btc"

}

密码 --> 私钥

    地址: 2A39CBa2390FDe

    私钥:    sdgHsdniNIhdsgaKIhkgnakgaihNKHIskdgal

    Hash(Hash(fun(sdgHsdniNIhdsgaKIhkgnakgaihNKHIskdgal)))

非对称加密技术(交易签名):如何在不泄露私钥的情况下,来证明我们拥有某个地址的私钥

    交易进行 hash 得到摘要

    用私钥对摘要进行签名

签名过程

    ① 先对原始交易记录进行 hash 运算,得到摘要信息

    hash('

            {"付款地址": "2A39CBa2390FDe",

            "收款地址": "AAC9CBa239aFcc",

            "金额": "0.2btc"

            }')  -> 8aDB23CDEA6

    ② 用摘要信息和私钥 进行签名运算,得到签名信息

    #参数1  为 交易摘要

    #参数2  为 私钥

    #返回签名信息

    sign ("8aDB23CDEA6","J78sknJhidhLIqdngalket") -> "3cdferdadgadg"

验证

    #参数1 为签名信息

    #参数2 为付款方地址

    #返回交易摘要

    verify("3cdferdadgadg","2A39CBa2390FDe") -> "8aDB23CDEA6"

    if ( verofy ("3cdferdadgadg","2A39CBa2390FDe")

            == hash('{"付款地址": "2A39CBa2390FDe",

                            "收款地址": "AAC9CBa239aFcc",

                            "金额": "0.2btc"}')) :

        # 写入账本

        # 广播

    else:

        # donothing

签名及验证:(付款的地址是公钥,签名的过程是对摘要进行的一个加密的过程)

    #参数1 为交易摘要

    #参数2 为私钥

    #返回签名信息

    sign("8aDB23CDEA6","J78sknJhidhLIqdngalket") -> "3cdferdadgadg"

    (验证则是一个解密的过程,用付款方地址和签名的信息进行一个解密的过程)

    #参数1 为签名信息

    #参数2 为付款方地址

    #返回交易摘要

    verify("3cdferdadgadg","2A39CBa2390FDe") -> "8aDB23CDEA6"

挖矿-工作量证明(记账的过程被称为挖矿) 12.5btc

    打包区块

    规则:

        一段时间内只有一人可以记账成功(一般为10分钟)

        通过解决密码学难题(即工作量证明)竞争获得唯一记账权

        其他节点复制记账结果

    工作量证明:

        Hash(上一个 Hash 值,交易记录集) = 456635BCD

        Hash(上一个 Hash 值,交易记录集,随机数) = 0000aFD635BCD    若干个0开头的哈希值

    交易记录集:

        收集广播中还没有被记录账本的交易

        交易的有效性验证

        添加一笔给自己转账的交易(挖矿奖励  一般为 12.5 BTC)

共识机制

    两个节点同时完成工作量证明,使用谁的区块?

        无仲裁机构裁决

        都说用我的区块

    

    为什么要遵守协议?

        节点工作量只有在其他的节点认同其是有效的

    累计工作量最大的区块链(会被其他节点认可)

        独立

        延长最长链

猜你喜欢

转载自blog.csdn.net/Darryl_Tang/article/details/90766213