区块链学习笔记 \huge{区块链学习笔记} 区块链学习笔记
这是关于北京大学肖臻老师的《区块链技术与应用》课程的学习笔记。

BTC的数据结构

hash pointers:既保存结构体的对应地址位置(指针),又保存结构体对应映射的hash值(hash)。
区块链:本质就是一个一个区块组成的链表。
Block chain is a linked list using hash pointers.
在这里插入图片描述
后区块的hash pointer存放的是前区块的地址以及hash值。
对于一个区块的hash是连同这个块中所有的内容来取hash值的。
tamper-evident log:因为区块链中后区块存放着指向前一个区块的指针,如果其中的一个区块发生了变化,那么后续的区块指针都会变化,最终导致最后一个区块的hash pointer发生变化,从而可以侦测数据的变化以及变化的位置

Merkel tree:相对于binary tree来讲,使用了哈希指针来代替了普通的指针。
在这里插入图片描述
树顶的块拥有的是根哈希值(对于根节点取hash 的哈希值)
在这里插入图片描述
对于Merkel树上任何一个节点的修改,都能通过根hash值来进行检索。

block header:存放hash值,但是不保存交易的具体信息。
block body:保存交易的具体信息。
Merkel proof:
在这里插入图片描述
树中最低层的交易(叶子节点),双亲节点中存储的hash值组合,然后逐级向上寻找节点,最后找到根节点,然后比较接收的Merkel proof中存储的信息与最终找到的信息是否一致,如果一致就说明这个交易就是发生在这个区块中。
collision resistance
proof of membership:O(logn)复杂度
proof of non-membership:O(n)复杂度
sorted Merkel tree:排序方便查询节点。

小细节:
在这里插入图片描述
对于普通的指针,上述结构是成立的,但是对于哈希指针就不成立,因为hash指针中的hash要根据指向的块的信息来确定,从而使得上述结构出现循环依赖。

BTC的协议

数字货币与纸质货币最大的区别:唯一性
double spending attack:双花攻击
数字货币要解决的中心问题:(去中心化)
①. 数字货币的发行问题
②. 如何验证交易的正确性(防范双花攻击)
中心化系统 → 去中心化职能分担 区块链 中心化系统\xrightarrow[]{去中心化职能分担}区块链 中心化系统去中心化职能分担 区块链
小型区块链结构示意图:
在这里插入图片描述
私钥签名,公钥验证
输入部分:A的公钥与币的来源
输出部分:收款人公钥的hash
币的来源:证明交易的合法性与防范双花攻击。
交易双方信息互通:A需要知道B的地址,以此来对B进行转账交易。B以及其他所有的节点都需要知道A的公钥,来对这笔交易进行验证。
容易混淆的一点:A向B交易,加密的时候使用B公开的公钥进行加密,然后B接收到交易之后再B自己的私钥进行解密。

Block header

一般包含区块链比较宏观的信息
version:协议版本信息
hash of previous block header:前一个区块的hash值
Merkel root hash:
target:解决问题时答案所需要落入的区间
nonce:出块时的随机数

Block body

transaction list:交易列表
full node:全节点,保存着区块链中所有的信息,也用于交易的合法性验证。
light node:只是保存当前block的相关信息,无法进行交易合法性查验。

distributed consensus 分布式共识

distributed hash table:分布式哈希表
FLP impossibility result:如果整个异步系统没有通信速率的上限,那么即使系统中仅有一个成员处于fault状态,那么整个系统中也不能存在共识。
CAP Theorem:下面的三个性质在一个分布式系统中最多只能满足两个条件,不能同时满足三个。
C:consistency
A:availability
P:partition
Paxos:分布式系统中如果系统到达了共识,那么这个共识必然是唯一的(但是该协议可能会导致整个系统无法达成共识)。

Consensus in BitCoin 比特币中的共识协议

(假设多数成员是好的)
基于投票的解决方案:关键是投票人员的投票权问题。
sybil attack:使用性能强大的计算机来注册大量用户,从而操作系统中的投票结果。

区块链中记账权的分配:
H ( b l o c k h e a d e r ) < = t a r g e t H(block header) <= target H(blockheader)<=target
保证块头信息的hash处于目标阈值内,就视为能够分配记账权。

最长合法链
在这里插入图片描述
比特币中新增的区块应当连接至最长合法链之后。
上述图中的新增分支是一种分叉攻击(forking attack),试图回滚已经发生了的交易。
当一个区块节点后接节点发生分叉的时候,就会出现如下的情况:
在这里插入图片描述
这种情况会保持一段时间,直到下一个区块进行链接的时候:
在这里插入图片描述
假设下一个区块连接到了上方的区块,此时上方的链就变成了当前的最长合法链,下方分叉处单独的区块自然就是非法的了。

block reward 出块奖励

coinbase transaction:比特币数量增加的唯一来源。
50 B T C → 25 B T C → 12.5 B T C 50BTC\xrightarrow[]{}25BTC\xrightarrow[]{}12.5BTC 50BTC 25BTC 12.5BTC
随着时间的推移,挖掘一个区块获得的比特币数量,开始减少,但是单位比特币所相当的价值逐渐飞跃。
在这里插入图片描述
此图中下方的块就已经是无效块了,那么他其中所保存的BTC也就无效了,因为BTC交易的时候会查询的是区块链中最长合法链中BTC数据(上面一条链)。

❗❗比特币的共识机制本质是算力投票。
比特币中要取得的共识是去中心化账本中的数据,但是只有系统中具有记账权的区块才能够获得数据,所以大家需要获得记账权力。记账权力的分配就是通过:
H ( b l o c k h e a d e r ) < = t a r g e t H(block header) <= target H(blockheader)<=target
解决这个问题,使得结果在阈值内来获得的。
但是上述这个问题根据puzzle friendly特性,必然是需要通过大量数据验证(没有捷径)来进行操作的,所以从根上面来讲计算速度越高,获得记账权的概率就越大。这就是比特币共识机制是算力主导的本质。
比特币争夺记账权的过程就是挖矿(mining)。
争夺记账权的节点成为矿工(miner)。

BTC的基本实现

transaction-based ledger:基于交易的机制。
UTXO:Unspent Transaction Output 未花费交易输出
T o t a l I n p u t s = T o t a l O u t p u t s TotalInputs = Total Outputs TotalInputs=TotalOutputs
输入 大于 输出(中间的交易费)
transaction fee:交易费
随着时间推移,一个区块中“挖掘”出来的BTC价值变小,是有可能使得一次交易中的交易费大于交易金额的。

挖矿过程的概率分析

Bernoulli trial:a random experiment with binary outcome 单次随机的(等概率)并且仅有两种结果的实验。
Bernoulli process:a sequence of independent Bernoulli trials 一组无关联的伯努利实验组合
memoryless:无记忆性,每次实验都是独立的,当次实验结果不会影响下次实验的结果。

如果实验的次数比较多,并且实验成功的结果比较小,那么伯努利实验可以通过泊松实验来进行近似。Poisson process
在这里插入图片描述
上图中数轴代表的是概率密度,横轴代表出块时间,类似指数分布。
每次出块的概率都是相同的,与之前的实验没有任何的关系。(progress free:这个性质保证了挖矿的公平性)挖矿的时候就只是存在单次算力的差距,而不存在出块概率的差距。

geometric series BTC的数量

21 万 × 50 + 21 万 × 25 + 21 万 × 12.5 + . . . = 21 万 ∗ ( 1 + 1 2 + 1 4 . . . . ) ( 几何级数 ) = 2100 万 21万\times50 + 21万\times25 + 21万\times12.5 + ... = 21万\ast(1 + \frac{1}{2}+\frac{1}{4}....)(几何级数) = 2100万 21×50+21×25+21×12.5+...=21(1+21+41....)(几何级数)=2100
对的,整个系统中BTC的数量是确定的,包括已经挖出和未被挖出的,总量就是2100万。
Bitcon is secured by mining.
挖矿的背后就是算力的比拼,只要系统中多数的节点正常运行争夺记账权,那么整个系统的安全性就不会发生重大问题(共识机制),所以单说挖矿只是纯粹的算力,但是对于BTC系统来讲挖矿能够保证系统的安全性。

恶意节点掌握记账权的情况

分叉攻击

在这里插入图片描述
此时两个链都是登场的合法链
在这里插入图片描述
M → A M→A MA是M向着A进行转账, M → M ‘ M→M‘ MM是M向着自己进行转账,设定一个背景,当M从A购买东西的时候,M向A转账,A将物品交易给M,整个过程写入到了 M → A M→A MA,并且加入到链中,表示当前的交易已经进行了记录。
但是如果M向着自己发起转账,并且算力够强的情况下额外增加节点,将下面强行变成当前系统中的最长合法链,那么后续读取记录的时候 M → A M→A MA此纪录相当于没发生,M既获得了物品,又通过回滚的方式获得了货币。

解决方法
通俗一点来讲就是多等几个confirmation,使得上面的链一定是最长合法链的时候才会视为当前的交易是完成的不可篡改的交易。
在这里插入图片描述
上图中等待了后续六个节点才看作 M → A M→A MA这个交易的完成,这样再次发生分叉攻击变换最长合法链的时候就变得非常的困难。
irrevocable ledger:不可篡改性
区块链是一个不可篡改的分布式账本,此处的不可篡改是在概率方面进行说明的,新加入的节点相对来说是比较容易篡改的,但是旧节点相对于新节点来说,篡改难度是指数倍数的增加,所以是“不可篡改”的。
zero confirmation:表面是区块链无需后续多个confirmation,实际上交易中已经保证了后续有了等待的时间。

selfish mining(挖出而不发)

在具有强大算力的支撑之下,如果已经挖出了几个块,但是不将这些块进行上链,等待好的时机的时候将所有的块都上链,这样也能操作最长合法链的判定。
在这里插入图片描述
当其他用户挖取上方的块时,如果有用户已经挖取了多个块,并且发出,那么不但上方的用户做了半天的无用功(进度全部作废),下方的用户能够一次性获取多个块的奖励(selfish)。

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

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

相关文章

MongoDB 驱动升级性能测试报告

测试背景 将 MongoDB Java 驱动从 4.11.5 升级至 5.5.1&#xff0c;并配合 Reactor Core 3.8.0-M4 进行性能对比测试。测试主要围绕插入、查询、更新和删除四个核心操作进行。 环境配置 操作系统: Windows 11CPU: Intel Core™ i7-14700F, 28 核心, 2.10 GHzJDK: OpenJDK 21.…

淘宝商品评论实时采集 API 接入指南:从零开始实战开发

在电商数据分析领域&#xff0c;商品评论数据蕴含着用户对产品的真实反馈&#xff0c;对商家优化产品、提升服务质量具有重要价值。本文将详细介绍如何接入淘宝 API&#xff0c;实现商品评论的实时采集&#xff0c;从环境搭建到代码实现进行全流程讲解。 1. 淘宝api概述 淘宝…

ffpaly播放 g711a音频命令

ffpaly播放 g711a音频命令 ffplay 播放 G.711 A-law (8kHz, mono, 16bit) 音频的命令&#xff1a; ffplay -f alaw -ar 8000 -ac 1 input.g711a 或ffplay -f alaw -ar 8000 -ac 1 audio_chn0.g711a 各参数说明&#xff1a; -f alaw&#xff1a;指定输入音频格式为 G.711 A-law…

composer全局配置

composer配置 composer查看全局配置 composer config -l -gcomposer 更新慢 composer下载不下来问题解决 更换composer镜像源&#xff0c;可以执行尝试以下几种&#xff1a; 1、更换成阿里镜像&#xff1a; composer config -g repo.packagist composer https://mirrors.al…

ivx创建一个测试小案例

文章目录 前端后端提交信息服务提交信息事件跳转列表页事件下载事件详情页事件 https://editor.ivx.cn/ 主题选择一下 前端 在前台新建一个页面名为提交页&#xff0c;内边距左和内边距右都设置为40&#xff0c;水平居中和垂直居中设置一下&#xff1b; 新建两个输入框&#x…

【MongoDB】MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作

MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作 一、核心概念与原理1. 核心组件2. MongoDB vs 关系型数据库 二、环境搭建&#xff08;Windows/Linux/CentOS&#xff09;1. Windows安装2. CentOS安装3. 连接验证 三、基础操作&#xff08;CRUD&#xff09;1. 数据库…

GeoTools 结合 OpenLayers 实现属性查询

前言 在GIS开发中&#xff0c;属性查询是非常普遍的操作&#xff0c;这是每一个GISer都要掌握的必备技能。实现高效的数据查询功能可以提升用户体验&#xff0c;完成数据的快速可视化表达。 本篇教程在之前一系列文章的基础上讲解如何将使用GeoTools工具结合OpenLayers实现Post…

vue-27(实践练习:将现有组件重构为使用组合式 API)

实践练习:将现有组件重构为使用组合式 API 理解重构过程 重构是任何开发者的关键技能,尤其是在采用新范式如 Vue.js 中的 Composition API 时。它涉及在不改变外部行为的情况下重新组织现有代码,旨在提高可读性、可维护性和可重用性。在从 Options API 迁移到 Composition…

基于Uniapp+SpringBoot+Vue 的在线商城小程序

开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,jquery,html,vue 角色:用户 商家 管理员 用户菜单:首页:商…

华为云Flexus+DeepSeek征文|利用华为云一键部署的Dify平台构建高效智能电商客服系统实战

目录 前言 1 华为云快速搭建 Dify-LLM 应用平台 1.1 一键部署简介 1.2 设置管理员账号登录dify平台 2 接入 DeepSeek 大模型与 Reranker 模型 2.1 接入自定义 LLM 模型 2.2 设置 Reranker 模型 3 构建电商知识库 3.1 数据源选择 3.2 分段设置与清洗 3.3 处理并完成 …

python应用day07---pyechars模块详解

1.pyecharts安装: pip install pyecharts 2.pyecharts入门: # 1.导入模块 from pyecharts.charts import Line# 2.创建Line对象 line Line() # 添加数据 line.add_xaxis(["中国", "美国", "印度"]) line.add_yaxis("GDP数据", [30…

高档背景色

https://andi.cn/page/622250.html

教学视频画中画播放(PICTURE-IN-PICTURE)效果

视频平台的画中画&#xff08;PIP&#xff09;功能通过小窗播放提升用户体验&#xff1a;1&#xff09;支持多任务处理&#xff0c;如边看教程边操作文档&#xff1b;2&#xff09;减少应用跳出率&#xff0c;增强用户粘性&#xff1b;3&#xff09;优化屏幕空间利用&#xff1…

MySQL (一):数据类型,完整性约束和表间关系

在当今数据驱动的时代&#xff0c;数据库作为数据存储与管理的核心工具&#xff0c;其重要性不言而喻。MySQL 作为一款广泛应用的开源数据库&#xff0c;凭借其高性能、高可靠性和丰富的功能&#xff0c;深受开发者喜爱。本文作为 MySQL 系列博客的开篇&#xff0c;将带你深入了…

【软考高项论文】信息系统项目的资源管理

摘要 本文围绕信息系统项目的资源管理展开论述。首先阐述了项目资源管理的基本过程&#xff0c;包括资源规划、估算、获取、配置、监控和释放等关键步骤&#xff0c;并给出资源分解结构示例。接着结合2024年参与管理的某信息系统项目实际情况&#xff0c;详细说明资源管理的具…

阿里云Ubuntu服务器上安装MySQL并配置远程连接

1. 安装MySQL 首先连接到你的Ubuntu服务器&#xff0c;然后执行&#xff1a; # 更新软件包列表 sudo apt update# 安装MySQL服务器 sudo apt install mysql-server# 启动MySQL服务 sudo systemctl start mysql# 设置MySQL开机自启 sudo systemctl enable mysql# 检查MySQL状态…

STM32HAL 旋转编码器教程

配置时钟编码模式读取方法&#xff1a; if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim1) 0){count - __HAL_TIM_GET_COUNTER(&htim1);}else{count __HAL_TIM_GET_COUNTER(&htim1);}bsp_dtUInt32_show(count);__HAL_TIM_SET_COUNTER(&htim1, 0); 通过 __HAL_TIM…

激光束修复手机屏任意层不良区域,实现液晶线路激光修复原理

摘要 手机屏结构多层复合&#xff0c;任意层线路不良严重影响显示质量。激光束凭借高能量密度与可调控性&#xff0c;能够穿透不同介质精准作用于目标层。本文基于激光与多层材料相互作用机制&#xff0c;解析激光束对手机屏各层不良区域的修复原理&#xff0c;为全层液晶线路…

【软件开发】架构与架构师

文章目录 一、前言二、关于系统架构1. 保障用户访问速度2. 支持大规模并发请求3. 应对复杂业务逻辑4. 应对海量数据的存储与读写三、关于系统架构师四、关于安全架构1. 产品安全架构2. 安全体系架构五、关于安全架构师一、前言 在系统建设与技术架构实践不断推进的背景下,关于…

Blender速成班-基础篇2

视频教程&#xff1a;【第一章】基础操作_哔哩哔哩_bilibili 目录 编辑模式 1.1侧边属性 挤出选区——E 挤出方式选择——AltE ​编辑 内插面——I 倒角——CtrlB 环切——CtrlR 旋绕 本片继续基于视频教程介绍Blender的一些基础操作 勾选Cavity使物体边线更清晰 编…