zoukankan      html  css  js  c++  java
  • 区块链

    比特币:

    • 财产只受自己控制;
    • 无通胀
    • 无假钞
    • 流通性好
    • 去中心化记账系统

    比特币原理

    • 账本如何验证
    • 所有权问题  
    • 为什么记账(挖矿
    • 以谁的账本为准(共识机制)

    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次.

        

  • 相关阅读:
    使用Shell脚本查找程序对应的进程ID,并杀死进程
    转,mysql快速保存插入大量数据一些方法总结
    L2TP/IPSec一键安装脚本
    全文搜索引擎 Elasticsearch 入门教程
    vmware设置扩大硬盘后如何在linux内容扩容
    Java序列化说明
    GIT常用命令
    java中的CAS
    Class.forName()用法详解
    Java用pdfbox或icepdf转换PDF为图片时,中文乱码问题
  • 原文地址:https://www.cnblogs.com/taiguyiba/p/10057316.html
Copyright © 2011-2022 走看看