zoukankan      html  css  js  c++  java
  • 区块链·01概念

    .数据区块

    #区块头:版本号、前一区块地址、时间戳、随机数、当前区块的目标hash值、merkle树根

            另一说法:上一区块的hash值、时间戳、挖矿难度值、工作量证明随机数、merkle树根hash值

            大小为80字节,可用于spv(简化支付验证)

    #区块体:交易计数、交易详情

           (merkle树会对每笔交易进行数字签名,保证真实和不重复)

    #以太坊区块头:不同于比特币只包含一棵merkle,以太坊包含了三棵merkle(交易/收据(交易影响的数据条)/状态)

            交易树:这笔交易被包含在区块中了吗

            收据树:XX地址在过去XX时间中,发生了XX事件的数据

            状态树:账户是否存在/当前余额多少/假装在这个合约中运行这笔数据,他的输出是什么

    .挖矿与分叉

    #工作量证明机制挖矿

    #最长链解决分叉问题

    .时间戳和不可篡改性

    #时间维度使得数据易追溯

    #数据在特定时间的存在,保证了不可篡改性

    .分布式数据库

    #单一节点数据被破坏不影响整体

    .utxo交易模式

    #未花费的交易输出,每笔交易都有若干输入(资金来源)+ 若干输出(资金去向)

    #满足来源于utxo+数字签名的交易才是合法交易

    #所以:判断交易的合法性不需要追溯整个交易历史

    .哈希函数

    #通过两次sha256哈希函数,生成长度为256的二进制数字进行识别和存储

    #哈希的优点:

            单向性:基本不会被发现原始值

            耗费:处理数据耗费时间一致,且输出值定长

    .merkle树

    #可以是二叉树也可以是多叉树,比特币采用的是二叉树:

    #实现:通过向上递归运算最终只剩树根存于区块头中

    #优点:

            运行效率:消息头只包含根的hash值,不必封装底层数据,将会高效运行在智能/物联网设备上

            简化验证:不运行完整区块节点,也能对交易数据进行校验

    .双重支付/双花支付

    #时间戳+utxo(未花费的交易)+数字签名   保证不双重支付

    .p2p网络

    #对等网络

    #每个节点都会承担网络路由、验证数据区块等功能

    .加密算法

    #1、sha256:上面介绍过的哈希,用于保证交易不可篡改

    #2、非对称加密:用于交易不可伪造,使用的是椭圆曲线加密算法(ECC)

            私钥加密(交易方用私钥签名),公钥解密(可通过交易方公钥进行验证)

            公钥可以从私钥提取,反之不达

    ##私钥产生:

            操作系统底层密码学安全的256随机数为私钥(总数为2256,难以破解)

            通过sha256和base58转换为易书写和识别的50位长度私钥

    ##公钥产生:

            私钥+secp256k1椭圆曲线算法生成65字节长度的随机数

    ##比特币钱包地址产生:

            前缀+body+后缀,通过base58转换为易识别的地址

            前缀:0x00(版本前缀)

            body:公钥通过sha256+ripemd160双哈希,hash160生成20字节长度的摘要

            后缀:对body进行两次sha256运算,取前四位

    .数字签名

    #签名:用hash算法处理信息得出hash值+私钥加密

    #解密:用公钥对签名解密得出hash值,比对此hash值和自己另外通过hash算法得出的hash值

    .比特币隐私模型

    #传统隐私模型:

            身份信息----交易----可信任的第三方----交易对手  |  公众

            依靠第三方不暴露交易双方信息,使公众无从知晓

    #比特币隐私模型:

            身份信息  |  交易----公众

            通过比特币地址和交易对手完成准匿名交易

            准匿名:通过对交易地址和交易额等信息进行分析,可发现交易者的蛛丝马迹

    【完】

  • 相关阅读:
    Windows平台下的读写锁
    进程的阻塞和挂起的区别
    事件函数SetEvent、PulseEvent与WaitForSingleObject详解
    多线程的那点儿事(之多线程调试)
    多线程同步内功心法——PV操作上(未完待续。。。)
    读者写者问题(有bug 后续更改)
    解决VS2010控制台程序运行结束不显示请按任意键继续
    Method has too many Body parameters openfeign
    Eclipse中Cannot nest src folder解决方法
    restTemplate重定向问题 &cookie问题
  • 原文地址:https://www.cnblogs.com/duduchong/p/9049667.html
Copyright © 2011-2022 走看看