区块链学习笔记(1)--区块、链和共识 区块链技术入门
- 常见的hash算法:
- 文件防篡改:MD5
- 比特币挖矿:SHA256
- 证明数据片段:Merkle root
- 文本去重:SimHash
区块
区块(block)由区块头(block header)和交易列表(transaction list,tx list)组成,block之间通过block header的hash连接成了一个链表结构。
block header
- 比特币的block header(Github)
int32_t nVersion;
uint256 hashPrevBlock;
uint256 hashMerkleRoot;
uint32_t nTime;
uint32_t nBits;
uint32_t nNonce;
- 以太坊的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"`
- 当前我们只需要关注其中两个字段(其他字段会在后续课程中解释)
hashPrevBlock/ParentHash,上一个block header的hashhashMerkleRoot/TxHash,tx list的hash
block body
block body
- block body就是tx list,block header通过
TxHash指向唯一的tx list - 从tx hash list得到
TxHash的hash算法叫做默克尔树(Merkle tree),相比其他的hash算法有特殊的性质(可以简洁地证明tx存在其中)

默克尔树,也被称为哈希树,是一种典型的二叉树结构。它有一个根节点、一组中间节点和一组叶节点组成。叶节点包含存储数据或其哈希值,而非叶子节点(包括中间节点和根节点)则是它的两个孩子节点内容的哈希值。这种结构使得默克尔树具有一些独特的性质。
首先,任何底层数据的变动,都会传递到其父节点,一层层沿着路径一直到树根。这意味着根的值实际上代表了对底层所有数据的“数字摘要”。这种性质使得默克尔树成为快速归纳和校验区块数据存在性和完整性的理想选择。
其次,默克尔树的生成过程是将一个大数据块拆分成更多小的数据块,然后对每个数据块进行哈希运算,得到所有数据块的哈希值之后,再获得一个哈希列表。重复这个过程,最终得到一个哈希值,被称为根哈希。这个根哈希值可以用来快速验证整个区块数据的完整性和存在性。
在区块链中,默克尔树主要用于高效地验证大量数据的完整性和存在性。以比特币为例,每个区块都包含一个默克尔树,该树的根哈希值被包含在区块头中。这样,当一个节点想要验证某个交易是否被包含在某个区块中时,它只需要检查该交易的哈希值是否被包含在默克尔树的叶子节点中,以及该哈希值是否最终指向根哈希值。这种方式大大提高了验证效率,降低了不必要的计算量。
此外,默克尔树还有助于提高区块链的可扩展性和去中心化程度。由于每个节点都可以独立地验证其他节点的数据完整性和存在性,这使得区块链可以更好地适应大规模的应用场景。同时,由于默克尔树的生成过程是分布式的,它不需要中心化的第三方机构进行干预,从而提高了区块链的去中心化程度。
Nakamoto consensus
- 为什么:对block的有效性达成一致
- 决定每个高度上使用哪个block
- tx list
- block reward
- 决定每个高度上使用哪个block
- 怎么做:PoW(Proof of Work)算法
- 调节block header:
Nonce和TxHash - 让block header的hash小于Target
- 可以看到比特币的block hash都是一堆0开头的(btc.com)
nBits会随着nTime调整,保持区块间隔时间为10分钟
- 多个block时的选择
- 谁的块先出用谁的
- 谁的链更长用谁的
- 调节block header:

- 分叉的缓解(Etherscan):
- 一个block能包含最多2个(Github)叔块(uncle block)在
UncleHash里 - 奖励
- 每包含一个叔块,能增加少量的block reward
- 被包含的叔块,能获得大部分的block reward
- 激励节点切换到被更多人所共识的链上
- 你出的块我已经给你算上了,赶紧切换到最长链吧
- 一个block能包含最多2个(Github)叔块(uncle block)在
相关文章:
区块链学习笔记(1)--区块、链和共识 区块链技术入门
常见的hash算法: 文件防篡改:MD5比特币挖矿:SHA256证明数据片段:Merkle root文本去重:SimHash 区块 区块(block)由区块头(block header)和交易列表(transac…...
【Android+多线程】IntentService 知识总结:应用场景 / 使用步骤 / 源码分析
定义 IntentService 是 Android中的一个封装类,继承自四大组件之一的Service 功能 处理异步请求 & 实现多线程 应用场景 线程任务 需 按顺序、在后台执行 最常见的场景:离线下载不符合多个数据同时请求的场景:所有的任务都在同一个T…...
Python Tornado框架教程:高性能Web框架的全面解析
Python Tornado框架教程:高性能Web框架的全面解析 引言 在现代Web开发中,选择合适的框架至关重要。Python的Tornado框架因其高性能和非阻塞I/O特性而备受青睐。它特别适合处理大量并发连接的应用,比如聊天应用、实时数据处理和WebSocket服务…...
通过端口测试验证网络安全策略
基于网络安全需求,项目中的主机间可能会有不同的网络安全策略,这当然是好的,但很多时候,在解决网络安全问题的时候,同时引入了新的问题,如k8s集群必须在主机间开放udp端口,否则集群不能正常的运…...
Excel把其中一张工作表导出成一个新的文件
excel导出一张工作表 一个Excel表里有多个工作表,怎么才能导出一个工作表,让其生成新的Excel文件呢? 第一步:首先打开Excel表格,然后选择要导出的工作表的名字,比如“Sheet1”,把鼠标放到“She…...
第四份工作的环境配置
最近在内网中工作,会遇到不少的环境问题. 下面记录一下这个过程中的挑战: 环境:内网,连接不到外网. 如何配置开发环境: 方法0: 在服务器上安装环境. 但是服务器上没有相应的python包.因为python包是从外界获得的.并且,这些python包不能同步更新.所以,在服务器上直接搭建环…...
SpringBoot开发——Maven多模块工程最佳实践及详细示例
文章目录 一、前言二、Maven多模块工程的最佳实践1、项目结构清晰2、依赖管理统一3、插件配置统一4、版本控制一致5、模块间通信简化 三、详细示例1、项目结构2、父模块(parent)的pom.xml文件3、子模块(module-api)的pom.xml文件4…...
C 语言面向对象
面向对象的基本特性:封装,继承,多态 1.0 面向过程概念 当我们在编写程序时,通常采用以下步骤: 1. 将问题的解法分解成若干步骤 2. 使用函数分别实现这些步骤 3. 依次调用这些函数 这种编程风格的被称作 面向过程…...
无人机探测:光电侦测核心技术算法详解!
核心技术 双光谱探测跟踪: 可见光成像技术:利用无人机表面反射的自然光或主动光源照射下的反射光,通过高灵敏度相机捕捉图像。该技术适用于日间晴朗天气下的无人机探测,具有直观、易于识别目标的特点。 红外成像技术࿱…...
ffmpeg视频滤镜:替换部分帧-freezeframes
滤镜描述 freezeframes 官网地址 > FFmpeg Filters Documentation 这个滤镜接收两个输入,然后会将第一个视频中的部分帧替换为第二个视频的某一帧。 滤镜使用 参数 freezeframes AVOptions:first <int64> ..FV....... set first fra…...
PHP 超级全局变量
超级全局变量是指在php任意脚本下都可以使用 PHP 超级全局变量列表: $GLOBALS:是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。 $_SERVER:$_SERVER 是一个PHP内置的超级全局变量,它是一个包含了诸如头信息(header)、路…...
Pytorch使用手册-Tensors(专题二)
这段代码是对 PyTorch 中张量(Tensors)的详细介绍和操作演示。以下是逐步讲解: 1. 什么是张量 (Tensor) 张量是一种专门的数据结构,与 NumPy 的多维数组(ndarray)类似: 它可以在 GPU 或其他硬件加速器上运行。张量可以与 NumPy 共享内存,避免不必要的数据拷贝。它是为…...
centos安装小火车
平时没事闲着 装个小火车玩-------->>>>> yum install sl.x86_64 启动命令 sl 就会出现以下场景...
241125学习日志——[CSDIY] [InternStudio] 大模型训练营 [17]
CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…...
sklearn中常用数据集简介
scikit-learn库中提供了包括分类、回归、聚类、降维等多种机器学习任务所需的常用数据集,方便进行实验和研究,它们主要被封装在sklearn.datasets中,本文对其中一些常用的数据集进行简单的介绍。 1.Iris(鸢尾花)数据集…...
机器学习在教育方面的应用文献综述
引言 随着大数据时代的到来,机器学习作为人工智能的一个重要分支,在教育领域展现出广泛的应用前景。本文综述了机器学习技术在教育领域的应用,包括个性化学习、智能评估、知识图谱构建等多个方面。 个性化学习 个性化学习是机器学习…...
滑动窗口最大值(java)
题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,5,3,6,7]…...
sklearn学习
介绍:scaler:换算的意思 1. 归一化MinMaxScaler() 归一化的意思是将一堆数,如果比较离散,为了让数据更适合模型训练,将离散的数据压缩到0到1之间,以方便模型更高效优质的学习,而对数据的预处理…...
Ubuntu下手动设置Nvidia显卡风扇转速
在Ubuntu下,您可以使用 NVIDIA显卡驱动程序提供的工具手动调整风扇转速。以下是详细步骤: 1. 确保已安装NVIDIA显卡驱动 确保系统已经安装了正确的NVIDIA驱动: nvidia-smi如果没有输出驱动信息,请先安装驱动: sudo…...
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...
Hunyuan-MT-7B应用案例:国际展会AI同传助手系统后端架构设计
Hunyuan-MT-7B应用案例:国际展会AI同传助手系统后端架构设计 1. 项目背景与需求分析 国际展会现场的同声传译一直是技术难题。传统人工翻译成本高昂,且难以覆盖所有语言组合。随着多语言大模型的发展,AI同传系统成为可行的解决方案。 Huny…...
Windows Defender Remover:彻底移除Windows安全组件的终极解决方案
Windows Defender Remover:彻底移除Windows安全组件的终极解决方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh…...
3步解锁iOS激活锁:Applera1n工具完整使用指南
3步解锁iOS激活锁:Applera1n工具完整使用指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当你面对一部显示"激活锁"界面的iPhone,反复输入Apple ID却始终无法进入…...
Python AI 用例工具部署踩坑实录:Docker镜像体积暴增300%、GPU显存泄漏、模型热加载失败的5个根因与秒级修复方案
第一章:Python AI 用例工具部署的典型失败图谱在真实生产环境中,Python AI 工具链(如 LangChain、LlamaIndex、FastAPI 封装的推理服务)的部署失败往往并非源于模型能力缺陷,而是由基础设施、依赖冲突与配置漂移引发的…...
Markdown Viewer 突破限制:全新自定义主题功能释放创作潜能
Markdown Viewer 突破限制:全新自定义主题功能释放创作潜能 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 副标题:如何通过自定义主题功能实现文档视觉体…...
农机经销商必看:如何用2000-2020年县级数据精准定位区域市场?
农机经销商区域市场精准定位实战指南:基于2000-2020年县级数据分析 站在山东潍坊的田间地头,老张望着远处几台正在作业的拖拉机陷入了沉思。作为一家中型农机经销商的区域经理,他每年最头疼的就是如何准确预测各县区的农机需求——备货多了占…...
[认知计算] 神经网络架构:从生物启发的神经元到现代激活函数演进
1. 从生物神经元到人工神经元的数学抽象 1943年,麦卡洛克和皮茨在论文《神经活动中内在思想的逻辑演算》中首次提出用数学模型模拟生物神经元。这个看似简单的想法,彻底改变了人类对智能的认知方式。生物神经元由树突、细胞体和轴突三部分组成࿱…...
AnythingtoRealCharacters2511应用案例:为小说角色生成真人参考形象
AnythingtoRealCharacters2511应用案例:为小说角色生成真人参考形象 1. 引言:从动漫到真人的魔法转换 想象一下,当你阅读一本精彩的小说时,脑海中浮现的角色形象突然变得栩栩如生。这正是AnythingtoRealCharacters2511能够实现的…...
vLLM与SGLang多模型统一API部署实战指南
1. 为什么需要多模型统一API部署 在实际生产环境中,我们经常会遇到需要同时部署多个AI模型的场景。比如一个智能客服系统可能需要同时支持问答、情感分析和文本摘要等多个功能,每个功能背后可能对应不同的模型。如果每个模型都单独部署一套服务ÿ…...
Magisk完整指南:Android设备终极Root与系统定制解决方案
Magisk完整指南:Android设备终极Root与系统定制解决方案 【免费下载链接】Magisk The Magic Mask for Android 项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk Magisk是一款革命性的Android系统定制工具套件,它通过独特的系统无痕修改…...
