区块、链和共识

区块、链和共识

准备

Hash

  1. Hash也称散列、哈希。基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出(更多解释见知乎)

  2. 特点是:相同的输入一定得到相同的输出,不同的输入大概率得到不同的输出

  3. 举例:用shell命令行下的md5sum 来计算任意的字符的MD5哈希

    $ md5sum <<< haha
    7494ab07987ba112bd5c4f9857ccfb3f  -
    $ md5sum <<< hehe
    e4439267203fb5277d347e6cd6e440b5  -
    $ md5sum <<< hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
    6f2362c812dcfd693da2e3ae537cfb41  -
    
  4. 常见的hash算法:

    1. 文件防篡改:MD5
    2. 比特币挖矿:SHA256
    3. 证明数据片段:Merkle root
    4. 文本去重:SimHash

区块

区块(block)由区块头(block header)和交易列表(transaction list,tx list)组成,block之间通过block header的hash连接成了一个链表结构。

block header

  1. 比特币的block header(Github)
int32_t nVersion;
uint256 hashPrevBlock;
uint256 hashMerkleRoot;
uint32_t nTime;
uint32_t nBits;
uint32_t nNonce;
  1. 以太坊的block header(Github)
ParentHash  common.Hash    `json:"parentHash"       gencodec:"required"`
UncleHash   common.Hash    `json:"sha3Uncles"       gencodec:"required"`
Coinbase    common.Address `json:"miner"            gencodec:"required"`
Root        common.Hash    `json:"stateRoot"        gencodec:"required"`
TxHash      common.Hash    `json:"transactionsRoot" gencodec:"required"`
ReceiptHash common.Hash    `json:"receiptsRoot"     gencodec:"required"`
Bloom       Bloom          `json:"logsBloom"        gencodec:"required"`
Difficulty  *big.Int       `json:"difficulty"       gencodec:"required"`
Number      *big.Int       `json:"number"           gencodec:"required"`
GasLimit    uint64         `json:"gasLimit"         gencodec:"required"`
GasUsed     uint64         `json:"gasUsed"          gencodec:"required"`
Time        uint64         `json:"timestamp"        gencodec:"required"`
Extra       []byte         `json:"extraData"        gencodec:"required"`
MixDigest   common.Hash    `json:"mixHash"`
Nonce       BlockNonce     `json:"nonce"`// BaseFee was added by EIP-1559 and is ignored in legacy headers.
BaseFee *big.Int `json:"baseFeePerGas" rlp:"optional"`
  1. 当前我们只需要关注其中两个字段(其他字段会在后续课程中解释)
    1. hashPrevBlock /ParentHash,上一个block header的hash
    2. hashMerkleRoot/TxHash,tx list的hash

block body

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mxguXjS6-1665390079140)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/91cdd568-9bfa-4394-8489-d9cefcc05b4a/Untitled.png)]

block body

  1. block body就是tx list,block header通过TxHash指向唯一的tx list
  2. 从tx hash list得到TxHash的hash算法叫做默克尔树(Merkle tree),相比其他的hash算法有特殊的性质(可以简洁地证明tx存在其中)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VLtZoIAF-1665390079143)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/de1f73d4-c0c9-49ca-ae99-9021411d400f/Untitled.png)]

  1. block header通过ParentHash指向唯一的上个block header,并最终形成一条链
    1. 高度为0的block称之为Genesis,即创世区块

      1. 写死在程序里(Github)

      2. 也可以在btc.com上看到比特币的创世区块,以及中本聪留下的那句话

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IEaSWMkx-1665390079143)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bb3608d8-0cfa-4a8a-81d2-daabac45cb9d/EqyhCKuXIAAOl0z.jpeg)]

        比特币创世区块上记录的报纸头条文章标题

    2. 高度最高的block称之为Tip,即最新区块

    3. 可以在etherscan上观察以太坊链的情况

  2. TxHashParentHash相结合,赋予了区块链不可篡改的特性

共识

只讲对数据结构有影响的知识点,不深入讲共识算法。

block reward

  1. 为什么:激励节点出块

    1. 对tx的有效性达成一致

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxZy1kDL-1665390079144)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3a7b08cf-d5e1-4b16-a5ac-ad93ad1e61d8/Untitled.png)]

      比特币的双花攻击(double-spending attack)

    2. 对tx的顺序达成一致

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fKzupJvy-1665390079144)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3915dbff-9a7a-4856-94c9-e6471750d973/Untitled.png)]

    以太坊的三明治攻击(sandwich attack)

  2. 怎么做:Coinbase

    1. 在block里包含一笔特殊的交易或是记录在block header里

    2. 包含block reward和所有tx fee/gas

    3. block reward一般设置为n年减半或是恒定

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GJFB81k4-1665390079145)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f4fc2c34-3d8a-4417-aca4-c6f84428b9b7/Untitled.png)]

      比特币挖矿奖励减半表格

Nakamoto consensus

  1. 为什么:对block的有效性达成一致

    1. 决定每个高度上使用哪个block
      1. tx list
      2. block reward
  2. 怎么做:PoW(Proof of Work)算法

    1. 调节block header:NonceTxHash
    2. 让block header的hash小于Target
      1. 可以看到比特币的block hash都是一堆0开头的(btc.com)
      2. nBits会随着nTime调整,保持区块间隔时间为10分钟
    3. 多个block时的选择
      1. 谁的块先出用谁的

      2. 谁的链更长用谁的

        外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WdsQG74W-1665390079145)(https://youtu.be/JRPu-vUdJU0)]上找到的说明最长链法则(longest chain rule)的视频

        Youtube上找到的说明最长链法则(longest chain rule)的视频

  3. 分析:这种争抢出块权的方式称作中本聪共识

    1. 去中心化、可用性、终局性的取舍
      1. 去中心化:节点多、permission-less、节点对等(都能出块)、网络差
      2. 可用性/liveness:链持续接受新数据写入、交易随时上链、网络不会停止出块
      3. 终局性/safety:所有节点对数据达成一致、写入的数据不可撤销、状态不可逆
      4. 保证去中心化、可用性,弱化终局性
      5. 用经济手段来强化终局性(比特币交易确认时间是6block)
    2. 中本聪共识的优点在于完全的去中心化、免信任
      1. 不阻止节点破坏共识而是让其付出经济代价
      2. 全网所有节点都是恶意但趋利的就能正常工作
    3. 中本聪共识的风险在于51%攻击/Selfish Mining
      1. 控制全网一半以上的算力,即可无视别人的block,构建只包含自己block的链,并在block选择中胜出
      2. 不断改变算法实现中所依赖的硬件来降低风险
  4. 举例:中本聪共识的实现

    1. Bitcoin(ASIC)、Ethereum(GPU)、Monero(CPU)、Arweave(CPU+IO)
  5. 非中本聪共识(简述)

    1. 市场经济→计划经济:拜占庭共识

      1. 怎么做:
        1. 弱中心化:有限且固定数量的出块节点
        2. 指派:轮到某个节点出块
        3. 投票:超过2/3的出块节点同意
        4. 无难度,出块间隔固定
      2. 分析:保证终局性,弱化可用性、去中心化
      3. 举例:dPoS(delegated Proof of Stake)的算法大都属于拜占庭共识
        在这里插入图片描述

      Practical Byzantine Fault Tolerance(PBFT)共识

    2. 介于市场经济和计划经济之间:可验证随机数

      1. 怎么做:通过所有节点可验证的随机数生成器来不断指派一个或多个节点出块

        1. 随机数生成器
          1. 链上的随机数
          2. VDF(Verifiable Delay Function)、VRF(Verifiable Random Function)
          3. 第三方随机数服务
        2. 所有节点候选,按power为概率被选中,一个高度可能有0到多个被选中
        3. 有难度调整,出块间隔固定
      2. 分析:和中本聪共识一样保证去中心化、可用性,弱化终局性

        1. 和中本聪共识的区别是在分叉上出块无需额外代价,需要打补丁来强化终局性
        2. 比如stake slashing、revert limit等,限制在分叉上出块
      3. 举例:

        1. Proof of Stake:Qtum、Algorand、Solana
        2. Proof of Storage:Filecoin、Chia

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88j1nwPk-1665390079146)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/eb7baa02-3bda-4c2d-99ad-3a25fbe7f447/Untitled.png)]

        Filecoin最早期的共识算法

分叉

  1. 分叉的原因:去中心化、区块间隔、终局性的取舍

    1. 去中心化程度越高,网络环境越差
      1. block和tx的全网同步速度变慢
      2. 节点难以时刻保持同步
    2. 区块间隔时间越短,节点越容易在非最新高度上出块
  2. 分叉的结果:

    1. 孤块(orphant block)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ck5fY7xW-1665390079147)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bcb5f182-577d-406e-a82e-4c7c9730fc4a/Untitled.png)]

    比特币网络中的孤块

  3. 分叉的缓解(Etherscan):

    1. 一个block能包含最多2个(Github)叔块(uncle block)在UncleHash
    2. 奖励
      1. 每包含一个叔块,能增加少量的block reward
      2. 被包含的叔块,能获得大部分的block reward
    3. 激励节点切换到被更多人所共识的链上
      1. 你出的块我已经给你算上了,赶紧切换到最长链吧

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubnZHlz7-1665390079148)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f5618568-ab62-47f1-ab28-7877b8c38f95/Untitled.png)]

    以太坊网络中的叔块

总结

  1. 区块链是去中心化网络环境下,具有极高可用性、较高终局性的数据库设计

  2. coin和block reward是保证区块链在去中心化环境下能够运行的前提

  3. 继完全去中心化的公有链之后又产生了几种弱中心化的链

    1. 减弱去中心化换来更高的终局性和更短的区块间隔

    2. Hybrid:delegated PoS系列

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgnFjG07-1665390079148)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/90e90590-9e71-4c6e-b522-4b9a6dccb704/Untitled.png)]

  4. 继blockchain之后又产生了DAG(Directed Acyclic Graph)的数据结构

    1. 允许block/tx的并发,TPS提升
    2. 分叉加剧,终局性降低
    3. IOTA、Conflux、Avalanche

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjSN5OW2-1665390079149)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c50b7434-b22f-470b-86af-b29acfbac8c7/Untitled.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33582.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

都2021年了,还不知道什么是区块链就out了 | 从区块链数据结构到应用

序言 在现阶段及后10年都是发展主流的数字化经济的催动下&#xff0c;区块链技术越来越火爆。那么比特币的区块数据结构是如何构成的&#xff0c;区块链有什么特性&#xff0c;我们用区块链能用来做什么&#xff1f;我们一起来探讨下。 区块链诞生背景 2008年11月1日&#xff0…

基于区块链的内容社交平台,他们凭什么说比知乎更吸引人?

本堂茜 渡鸦区块链专栏记者 张杰拥有10多年的软件开发经验和创业经验&#xff0c;自称是“互联网老兵&#xff0c;区块链新秀”。随着互联网的发展&#xff0c;渐渐的他们不再满足于做线下的软件外包项目&#xff0c;更想在互联网方面做。 他们在互联网方面做了很多SAAS服务。例…

在清华讲区块链,高晓松竟这样解读共识与Token

本文仅代表作者观点 作者 | 李画 编辑 | 秦晋 高晓松2019年的第一期《晓说》&#xff0c;在母校清华大学做了以一场没有"诗和远方"全是苟且的演讲&#xff1a;《5G与区块链&#xff1a;文创产业的重要赛道》。他认为&#xff0c;5G与区块链是文创/内容产业在未来最重…

朋友聚会上,当你被cue聊聊区块链时.....

来源 | 白话区块链 责编 | 晋兆雨 头图 | 付费下载于视觉中国 转眼间&#xff0c;又到了一年一度的同学聚会。这次班长牵头&#xff0c;把班上绝多数同学都叫了过来&#xff0c;甚至还请了班主任王老师到场&#xff0c;摆了好几大桌。 一时间觥筹交错&#xff0c;各个都喝得满…

家用2kw风力电机满负荷的发电量有多少

家用风力发电机2kw的一天的满负荷发电量是48度电&#xff0c;3级风发电5级风满负荷发电&#xff0c;电机是永磁发电机&#xff0c;足功率发电&#xff0c;纯铜线圈缠绕&#xff0c;叶片是增强玻璃钢材质的

PyTorch搭建LSTM实现时间序列预测(负荷预测)

目录 I. 前言II. 数据处理III. LSTM模型IV. 训练V. 测试VI. 源码及数据 I. 前言 在上一篇文章深入理解PyTorch中LSTM的输入和输出&#xff08;从input输入到Linear输出&#xff09;中&#xff0c;我详细地解释了如何利用PyTorch来搭建一个LSTM模型&#xff0c;本篇文章的主要目…

TensorFlow搭建LSTM实现时间序列预测(负荷预测)

目录 I. 前言II. 数据处理III. 模型IV. 训练/测试V. 源码及数据 I. 前言 前面已经写过不少时间序列预测的文章&#xff1a; 深入理解PyTorch中LSTM的输入和输出&#xff08;从input输入到Linear输出&#xff09;PyTorch搭建LSTM实现时间序列预测&#xff08;负荷预测&#xf…

TensorFlow搭建LSTM实现多变量时间序列预测(负荷预测)

目录 I. 前言II. 数据处理III. LSTM模型IV. 训练/测试V. 源码及数据 I. 前言 在前面的一篇文章TensorFlow搭建LSTM实现时间序列预测&#xff08;负荷预测&#xff09;中&#xff0c;我们利用LSTM实现了负荷预测&#xff0c;但我们只是简单利用负荷预测负荷&#xff0c;并没有利…

深度学习--Matlab使用LSTM长短期记忆网络对负荷进行预测

一、LSTM描述 长短期记忆网络&#xff08;LSTM&#xff0c;Long Short-Term Memory&#xff09;是一种时间循环神经网络&#xff0c;是为了解决一般的RNN&#xff08;循环神经网络&#xff09;存在的长期依赖问题而专门设计出来的&#xff0c;所有的RNN都具有一种重复神经网络…

电力负荷预测数据集

电力负荷预测&#xff0c;用电量以及温度、湿度、风速、降雨等数据&#xff0c;每15min一组&#xff0c;共计13个月 下载链接&#xff1a;https://download.csdn.net/download/ncusz/82632972

Python画用电客户日负荷曲线图

Python版本&#xff1a;Python3.6.2 一、日负荷曲线 摘自百度百科&#xff0c;日负荷曲线是描述一日内负荷随时间变化的曲线。 二、数据处理 数据:申请的爱尔兰开源用户用电数据&#xff0c;txt格式&#xff0c;一个文件将近400M&#xff0c;用写字板打开&#xff0c;很卡。 截…

基于改进粒子群IPSO与LSTM的短期电力负荷预测

短期电力负荷预测是电力系统安全调度、经济运行的重要依据 , 随着电力系统的市场化 , 负荷预测的精度直接影响到电力系统运行的可靠性、经济性和供电质量。LSTM 为短期电力负荷预测提供了一个新的研究方向。本文将LSTM用于短期电力负荷预测 , 提出基于LSTM 的短期电力负荷预测模…

电力负荷预测三篇综述总结

三篇综述链接&#xff1a; 深度学习方法在负荷预测中的应用综述&#xff08;论文阅读&#xff09;光伏发电量和用电量的概率预测研究综述&#xff08;1&#xff09;光伏发电量和用电量的概率预测研究综述&#xff08;2&#xff09;光伏发电量和用电量的概率预测研究综述&#…

记录一次生产服务器CPU400%满负荷处理过程

记录一次生产服务器CPU400%满负荷处理过程 文章目录 记录一次生产服务器CPU400%满负荷处理过程步骤猜测解决方法反思总结 步骤 top命令 31779进程 占 CPU 361% &#xff0c;通过最后的COMMAND可以判断是java进程 通过jvm的 jsp -l命令 查询 31779进程 是 zipkin-server-2.…

Python 多进程下开多线程满负荷工作

最开始只是有这样一个想法,后来想实现一下 本文只是写一个例子,实现了开多个进程,每个进程下面开多线程,每个进程执行单独一个任务,并行执行,进程下的多线程执行任务,并发执行 import multiprocessing import threading import timedef m_test():for i in range(25):tthreadin…

磁盘IO满负荷性能分析

磁盘IO满负荷性能分析 2011-06-26 22:30:59| 分类&#xff1a;linux优化 |举报|字号 订阅 磁盘IO满负荷性能分析&#xff08;一&#xff09; 有个项目最近发现在执行一些oracle数据库的数据补入的sql语句时非常慢&#xff0c;经查发现来自存储的硬盘io会冲到100busy devic…

【板卡调试】测试篇 满负荷 网口测试篇

1、满负荷测试 对于window环境下载&#xff0c;下载使用7.zip的软件&#xff0c;进入工具中选择基准测试&#xff0c;即可。 原理&#xff1a;根据选择的线程核数&#xff0c;进行多线程式的解压缩操作&#xff0c;进而实现CPU满负荷运载。 工具下载链接&#xff1a;https:/…

Android Studio实现记单词App,背完四六级一次过~

项目目录 一、项目概述二、主要技术三、开发环境四、详细设计1、数据库2、单词详情3、搜索单词 五、运行演示六、源码获取 一、项目概述 本系统包含高考、四级、六级、托福和雅思词汇五个章节。每个章节分为多个单元&#xff0c;每个单元又包含上百个词汇。可以在单元列表查询…

英语背单词秘籍

注:文章已于2021年2月4日更新。 文章目录 1. 大多数人背单词的现状2. 为什么不推荐使用现成的单词书3. 费曼学习法来帮助背单词1. 大多数人背单词的现状 背单词是大型考试中极为基础但却至关重要的一步。但很多同学都在此步中就踩了坑,比如买了一本厚厚的单词书开始背起,如…

安卓android记单词软件

课程设计项目总结,基于安卓的记单词软件,分为前端和服务器端,前端使用安卓,后端使用SSM框架。 具体技术栈为&#xff1a; 前端&#xff1a;android、okhttp、sqlite、litepal等 后端&#xff1a;SSM&#xff08;SpringMVCSpringMybatis&#xff09;、mysql数据库、tomcat服务器…