• 区块链算法


    交易记录

    交易记录就是这个样子的

    {
        "S-wallet-address":"..." #转账源钱包地址
        "D-wallet-address":"..." #转账目的钱包地址
        "count":"1 btc" #金额
    }
    

    账本(区块)

    账本可以理解为一组交易记录,一个下列结构称之为一个区块

    hash值-账本的摘要,序号、记账时间
    交易记录1
    交易记录2
    ...
    指向下一个区块的指针

    账本的验证凭据(数据摘要的计算)

    第一个区块

    hash(账本) = hash值
    

    后续区块

    hash(前一个账本的hash值, 新账本) = 新的hash值
    #产生新的一个区块
    

    区块链

    区块使用链表连接起来

    账本的验证

    一个参与交易记录的节点计算出一个新的区块后,会广播给相邻的计算存储节点。在不同计算存储节点核对信息时候,只需要核对最后一个区块的的hash值即可

    账户所有权问题

    一个计算节点有两个关键的账户凭证,就是钱包地址(公钥)和私钥,

    {
        "wallet-address":"asdfghjk"#public-key
        "private-key":"gaiskdjkljgsclahsdjkhasld..."
    }
    

    支付过程:一条交易记录

    deal = 
    {
        "S-wallet-address":"..." #转账源钱包地址
        "D-wallet-address":"..." #转账目的钱包地址
        "count":"1 btc" #金额
    }
    

    **对账户进行签名,不能泄露私钥##

    signature = sign(hash(deal), private-key) 
    

    验证签名,验证方会获取交易记录和签名

    if (hash(deal) == verify(signature, s-address)#s-address就是public-key
    

    说白了这里就是一个非对称加密机制用于签名的应用。钱包地址是公钥、签名过程用的是私钥对交易记录的hash值进行签名,验证方可以获得公钥和签名,从而解出来交易记录的hash值,比对成功即可验证签名方的确是其所声称的账户

    记账

    记账规则

    • 一段时间内只有一个人或者账户可以记账成功(比特币是10分钟左右)
    • 其他节点复制记账成功的结果
    • 记账有奖励,记账成功一次有奖励(比特币是12.5btc奖励,每四年减半)

    如何保证一段时间只有一个记账成功

    • 解决密码学难题(工作量证明)
    #真实记账
    hash(last_hash, deal, random) == 000..000xxsjadhkasdfgkjadsd
    #要求引入随机数,使得对交易记录的hash要满足结果开头为N个0
    #备注:这里面的交易记录集,是系统收集的网络上还没有被记账的交易行为,然后验证交易记录的有效性(验证余额和签名),并添加一笔给自己转账的交易(BTC目前转给自己12.5BTC),如果OK的话。自己也会获得12.5BTC。
    
    • 首先记账成功的就会广播,其他节点复制

    共识机制

    如果有两个节点同时记账成功怎么办,按照最长链为标准

    #chain-A
    1->2->3->4A
    #chain-B
    1->2->3->4B
    #一般一个节点收到一个链,收到两个链的则会选择其一,一个为备用。
    #不同的节点会在不同的链上继续工作-挖矿。
    #先收到下一个记账成功的就达成共识了。
    #例如
    1->2->3->4B->5B #那么B就获得了记账权
    #如果先收到收到了5B,但是没有收到4B,则5B会作为一个孤块留存
  • 相关阅读:
    Unity3D在各平台上的路径
    Unity简单的单例模式
    C#遍历枚举(Enum)
    C#常用的流类型(FileStream,SteamWriter/StreamReader,MemoryStream等)
    编写一个C程序,运行时输入a,b,c三个值,输出其中最大者
    精确一维搜索算法(直接法)
    Java一维数组求和
    java 导出EXCEL
    Java判断字符串的数字类型(小数、整数)
    网址存储
  • 原文地址:https://www.cnblogs.com/mutudou/p/13036065.html
Copyright © 2020-2023  润新知