《区块链技术与应用》学习笔记3——BTC共识协议

2023-11-16

1. 数字货币中经常出现的问题

  • 双花攻击
    1)数字货币本身为带有签名的数据文件,可以进行复制。对于用户来说就可以花两次。
    2)解决:对货币添加唯一编号,每次支付向货币发行单位查询真伪。
    3)问题:货币发行单位是一个第三方机构,并且这是一个典型的第三方中心化方案。基于这个背景,以去中心化思想为核心的比特币系统便吸引了人们的注意力。

2. 去中心化需要解决的问题

  • 比特币系统中由挖矿来决定货币发行权和发行量。
  • 保证交易有效和双花攻击依赖于区块链这个数据结构,记录货币的使用情况,区块链由全体用户共同维护,保证交易的有效性。

3. 一个例子

    进行交易时,需要付款人的签名和收款人的地址,在比特币系统中,该地址即为收款人的公钥的哈希。(虽然公钥可以公开,但实际中更多公开的是公钥的哈希)
    在交易中,收款方需要知道付款方的公钥,从而验证A签名是否有效。(实际上其他节点都需要知道付款方公钥,验证交易合法性)实际中A转账时候提供的公钥需要和铸币交易中公钥对的上,这样就防止了恶意节点伪造A的公钥来“偷”走A的比特币。
    在该图中,一个区块仅含有一个交易,实际中一个区块中包含多个交易,交易通过Markle Tree组织起来,在区块中存储。

4. 比特币区块信息

Version(版本协议)、Hash of previous block header(指向前一个区块指针)、Merkle root hash(默克尔树根哈希值)、target(挖矿难度目标阈值)、nonce(随机数)
1) 挖矿求解问题:Hash(block header)<=target
2)只计算区块块头部分的哈希
3)区块链系统中,轻节点(只存储区块block header信息)只利用区块链,但并不参与区块链系统维护和构造

5. 分布式共识

    各个节点不能独立完成区块链构建,各个节点必须独立打包交易,形成区块链,必然无法避免区块链内容不一致。从分布式系统角度来说,账本内容需要获得分布式共识,从而保证区块链内容在不同节点上的一致性。

6. 比特币共识协议

    某个节点打包交易到区块,将其发给其他节点,其他节点检查该候选区块,检查若正确投赞成票,若票数过半,加入区块链。
Q1:恶意节点不断打包不合法区块,导致一直无法达成共识。
Q2:无强迫投票手段,某些节点不投票。
Q3:网络延迟事先未知,投票时间未知。
Q4:比特币系统,任何人都可以加入,且创建账户及其简单,只需要本地产生公私钥对即可。只有转账(交易)时候,比特币系统才能知道该账户的存在。这样,黑客可以使用计算机专门生成大量公私钥对,当其产生大量公私钥对超过系统中一半数目,就可以获得支配地位(女巫攻击)。
    比特币系统中依据算力进行投票。
    在比特币系统中,每个节点都可以自行组装一个候选区块,而后,尝试各种nonce值,这就是挖矿。
    当某个节点找到符合要求的nonce,便获得了记账权,从而可以将区块发布到系统中。其他节点受到区块后,验证区块合法性,如果系统中绝大多数节点验证通过,则接收该区块为最新的区块并加入到区块链中。

7. 合法区块被拒绝

    发生分叉的情况下,暂时保存分叉情况,但区块链只承认最长合法链,随着时间推移,必然存在某一条链变成最长合法链。这样合法区块被拒绝。

8. 分叉攻击

    A给B转账后,用分叉攻击将钱又转回来,覆盖掉原来的记录。
    在比特币系统中,这种情况实际上很难发生。因为大多数矿工认可的是最长的合法链,会沿着上面的链继续挖下去。而A这个攻击者要想回退记录,就必须使得下面的链变得比上面的链还长。理论上来说,攻击者需要达到整个系统中51%的计算力,才能使得这种攻击成功。
    此外,区块链正常运行场景下,也可能会发生分叉。当两个节点同时获得记账权时,会有两个等长的合法链。在缺省情况下,节点接收最先听到的区块,该节点会沿着该区块继续延续。但随着时间延续,必然有一个链胜出,由此保证了区块链的一致性。

9. 比特币激励机制

    比特币通过设置出块奖励来解决该问题,一个获得合法区块的节点,可以在区块中加入一个特殊交易(铸币交易)。事实上,这种方式也是唯一一个产生新比特币的途径。比特币系统设计规定,起初每个区块可以获得50个比特币,但之后每隔21万个区块,奖励减半。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《区块链技术与应用》学习笔记3——BTC共识协议 的相关文章

  • Vue2 +Element-ui实现前端页面

    1 页面项目 以一个简单的前端页面为例 主要是利用vue和element ui实现 里面涉及的主要包括 新建vue项目 一行多个输入框 页面实现等 2 项目流程 1 新建项目 首先安装nodejs 这部分在此就不讲啦 然后安装vue cli

随机推荐

  • 关于BIO、AIO、NIO的 区别于联系

    目录 IO BIO NIO AIO 区别及联系 各自适用场景 使用方式 IO 什么是IO 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口 它对于任何计算机系统都非常关键 因而所有 I O 的主体实际上是内置在操作系统中的
  • 深度学习——贝叶斯神经网络

    文章目录 前言 什么是贝叶斯神经网络 How to train BNN BNN背后的数学原理 pytorch实现BNN 参考文献 前言 本文将总结贝叶斯神经网络 首先 我将简单介绍一下什么是贝叶斯神经网络 BNN 接着我将介绍BNN是怎么训
  • Orcad Captue原理图更改后同步更新到Allegro PCB

    Cadence软件的原理图和PCB是两个软件 原理图到PCB需要创建网表 然后在PCB中放置已经建好分封装的元器件 如果对于已经画好的PCB 后期发现需要更改原理图的某个部分 原理图更改后 怎么同步更新到PCB中 而不变动原来已经布好局 布
  • MySQL备份及恢复

    目录 MySQL备份 MySQL备份方法 备份策略 mysql的完全备份 mysql的增量备份 MySQL恢复 mysql完全恢复 mysql增量备份的恢复 MySQL备份 MySQL备份是基于对MySQL的日志进行备份 且恢复也是通过日志
  • Multispectral Pedestrian Detection using Deep Fusion Convolutional Neural Networks (深度学习多光谱行人检测综述)

    Now salient detection methods most of current pedestrian detectors explored color images of good lighting and they are v
  • 基于Arduino的双向交通灯系统

    学 号 231 姓 名 福福 指导教师 赵志鹏 年 7 月 2 日 实训题目 交通灯系统 1 系统设计 设计要求 设计任务 设计基于Arduino的双向交通灯系统 实现控制和方向显示功能 性能指标要求 1 基本要求 1 按照题目要求独立完成
  • 动态显示带图片列表【Android】

    一 功能描述 1 动态获取服务器端商品信息显示 2 动态加载服务器端图片显示 二 技术点 ListView BaseAdapter JSON数据解析 Handler Thread HttpUrlConnection AsyncTask Ht
  • unity 字体 素材_教程篇

    Unity异步加载 在使用Unity引擎开发项目时 很多时候需要用到异步加载场景或资源 如需打开一个非常大的场景时需要等待 两个场景之间的一个过渡 游戏关卡的加载等等 通过添加一个进度条的方式可以很好的增强用户体验 并让用户了解场景的加载进
  • 【DevOps】Centos 7.9 安装、部署与使用 k8s集群(v1.21.3)

    卸载 k8s集群 1 平滑移除 Node kubectl get node kubectl cordon node name 不可调度 kubectl drain node name 驱逐资源 kubectl delete node nam
  • 【Python_requests学习笔记(一)】基于requests和re模块,爬取百度图片

    基于requests和re模块 爬取百度图片 前言 此篇文章中介绍requests的基本用法 和基于requests和re模块 爬取百度图片的案例 正文 1 requests模块 1 1 requests模块介绍 requests模块 类似
  • 看书标记【统计学习理论与方法】1

    第一章 概率论基础 在R中 分布函数名为func 则形如dfunc的函数就提供了相应的概率分布函数 dfunc x p1 p2 形如pfunc的函数提供了相应的累积分布函数 pfunc q p1 p2 分位数函数 p为由概率构成的向量 qf
  • go 首字母大写,代表对外部可见,首字母小写代表对外部不可见,适用于所有对象,包括函数、方法

    go中根据首字母的大小写来确定可以访问的权限 无论是方法名 常量 变量名还是结构体的名称 如果首字母大写 则可以被其他的包访问 如果首字母小写 则只能在本包中使用 可以粗暴的理解为首字母大写是公有的 首字母小写是私有的
  • yolov5车辆识别、目标检测教程

    车辆识别视频 yolov5车辆识别视频 车牌识别视频 订阅专栏获得源码 我们首先介绍一下最原始的YOLO模型 然后简要介绍一下YOLOv5版本的改进 主要通过具体的例子一起看看怎么把YOLOv5模型用好 YOLOv1的网络结构并没有什么特别
  • Nacos启动出现Error creating bean with name ‘memoryMonitor‘ 、‘externalDumpService‘

    目录 问题 解决方法 这里是CS大白话专场 让枯燥的学习变得有趣 没有对象不要怕 我们new一个出来 每天对ta说不尽情话 好记性不如烂键盘 自己总结不如收藏别人 问题 用KubeSphere创建Nacos时出现Error creating
  • CSAPP Lab5- MallocLab

    实验目标 本实验需要用c语言实现一个动态的存储分配器 也就是你自己版本的malloc free realloc函数 实验步骤 tar xvf malloclab handout tar解压文件 我们需要修改的唯一文件是mm c 包含如下几个
  • 信息收集之 端口扫描

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 专栏简介 此文章已录入专栏 网络安全快速入门 为什么要扫描端口 知道主机开放了哪些端口 就可以推断出端口所对应的服务 从而根据
  • 深度学习编译中间件TVM之编译&安装

    参考文档 mxnet官方install手册 TVM 0 4 0官方安装指导手册 LLVM下载地址 Debian Ubuntu Linux下安装LLVM Clang编译器 开发环境介绍 操作系统版本 Ubuntu16 04 LTS 64 bi
  • ElasticSearch学习4--复杂查询

    1 查询分类 查询所有 查询出所有数据 一般测试用 例如 match all 全文检索 full text 查询 利用分词器对用户输入内容分词 然后去倒排索引库中匹配 例如 match query 根据单个字段查询 multi match
  • vue3学习—state的变化和使用

    sate的变化和使用 一 state的变化 1 reactive 1 什么是reactive 2 reactive注意点 2 state的类型 1 setup里面的vuex的使用方式 2 封装获取state方式 二 state使用 1 st
  • 《区块链技术与应用》学习笔记3——BTC共识协议

    1 数字货币中经常出现的问题 双花攻击 1 数字货币本身为带有签名的数据文件 可以进行复制 对于用户来说就可以花两次 2 解决 对货币添加唯一编号 每次支付向货币发行单位查询真伪 3 问题 货币发行单位是一个第三方机构 并且这是一个典型的第