区块链学习笔记(1)--区块、链和共识 区块链技术入门

embedded/2024/11/29 2:29:35/

  1. 常见的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

block body

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

默克尔树,也被称为哈希树,是一种典型的二叉树结构。它有一个根节点、一组中间节点和一组叶节点组成。叶节点包含存储数据或其哈希值,而非叶子节点(包括中间节点和根节点)则是它的两个孩子节点内容的哈希值。这种结构使得默克尔树具有一些独特的性质。

首先,任何底层数据的变动,都会传递到其父节点,一层层沿着路径一直到树根。这意味着根的值实际上代表了对底层所有数据的“数字摘要”。这种性质使得默克尔树成为快速归纳和校验区块数据存在性和完整性的理想选择。

其次,默克尔树的生成过程是将一个大数据块拆分成更多小的数据块,然后对每个数据块进行哈希运算,得到所有数据块的哈希值之后,再获得一个哈希列表。重复这个过程,最终得到一个哈希值,被称为根哈希。这个根哈希值可以用来快速验证整个区块数据的完整性和存在性。

区块链中,默克尔树主要用于高效地验证大量数据的完整性和存在性。以比特币为例,每个区块都包含一个默克尔树,该树的根哈希值被包含在区块头中。这样,当一个节点想要验证某个交易是否被包含在某个区块中时,它只需要检查该交易的哈希值是否被包含在默克尔树的叶子节点中,以及该哈希值是否最终指向根哈希值。这种方式大大提高了验证效率,降低了不必要的计算量。

此外,默克尔树还有助于提高区块链的可扩展性和去中心化程度。由于每个节点都可以独立地验证其他节点的数据完整性和存在性,这使得区块链可以更好地适应大规模的应用场景。同时,由于默克尔树的生成过程是分布式的,它不需要中心化的第三方机构进行干预,从而提高了区块链的去中心化程度。

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. 谁的链更长用谁的

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


http://www.ppmy.cn/embedded/141323.html

相关文章

Redis1——基本命令及原理

文章目录 Redis1——基本命令及原理1. Redis原理1.1 特点1.2 数据类型及其存储方式1.2.1 **string** 字符串1.2.2 **list** 列表1.2.3 **hash** 哈希表1.2.4 **set** 集合1.2.5 **zset** 有序集合 2. 基本命令及应用场景:2.1 Redis应用场景2.2 string——sds动态字符…

Fink的安装与入门

finl是做流式计算的大数据工具 官网:Apache Flink Documentation | Apache Flink Flink官方提供了Java、Scala、Python语言接口用以开发Flink应用程序 Fink的应用场景: Standalone集群模式安装部署 Flink支持多种安装模式。 local(本地&am…

电子电气架构 --- 企业级别的诊断需求规范应该有哪些?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

如何使用docker启动一个gitlab

1. 下载ce版本镜像 gitlab/gitlab-ce:17.3.6-ce.0 2. 创建相关目录 /home/lylgitlab/config/home/lylgitlab/logs/home/lylgitlab/data/home/lylgitlab/other/gitlab.rb/home/lylgitlab/other/shm 3. 启动镜像 #!/bin/shdocker run --detach \--hostname 20.198.40.20 \-p …

Windows下的Milvus安装-保姆级安装教程

文章目录 一、简介二、dockers的安装1. 环境准备2.启动WSL 的功能。4.Docker的安装5.验证是否安装成功三、安装Milvus1.Milvus下载2.Milvus启动与验证四、Milvus图形化界面attu安装1、attu下载2、attu安装一、简介 Milvus是一个高性能、高度可扩展的矢量数据库,可在从笔记本电…

15分钟做完一个小程序,腾讯这个工具有点东西

我记得很久之前,我们都在讲什么低代码/无代码平台,这个概念很久了,但是,一直没有很好的落地,整体的效果也不算好。 自从去年 ChatGPT 这类大模型大火以来,各大科技公司也都推出了很多 AI 代码助手&#xff…

二叉树:堆的建立和应用

在建立堆之前,我们要知道什么是树和二叉树 树 树是一种非线性的数据结构,它是由n(n>0)个结点组成的一个具有层次关系的集合,之所以把它叫做树,是因为它长得像一棵倒挂的树,也就是根在上面&…

百度在下一盘大棋

这两天世界互联网大会在乌镇又召开了。 我看到一条新闻,今年世界互联网大会乌镇峰会发布“2024 年度中国互联网企业创新发展十大典型案例”,百度文心智能体平台入选。 这个智能体平台我最近也有所关注,接下来我就来讲讲它。 百度在下一盘大棋…