区块链学习笔记3——BTC协议

2023-11-08

区块链学习笔记3——BTC协议

学习视频:北京大学肖臻老师《区块链技术与应用》
笔记参考:北京大学肖臻老师《区块链技术与应用》公开课系列笔记——目录导航页

数字货币所面临的主要挑战

Double spending attack(双花攻击,同一张数字货币可以复制的使用)
防范:通过一个可信第三方(如央行)维护一个很大的数据库存储每张货币的所有人,对每张货币添加一个唯一编号,当一个人花掉这张货币的时候,这张货币的所有人也会相应的发生变化,

去中心化

  • 所谓去中心化即没有可信第三方的参与,那么就需要解决数字货币的发行由谁执行?如何发行?发行多少?什么时候发行?

在传统中心化货币体系中,这些问题我们可以交给第三方机构(如央行)。当引入去中心化思想后,系统中节点平等,交易不通过第三方,那么货币发行权的分配必然是一个需要解决的问题。
比特币通过挖矿来决定货币的发行权,发行量

  • 去中心化如何防范双花攻击,恶意用户等

该问题的解决,依赖于系统中维护的一个数据结构,记录货币的使用情况(是否被花过?被谁花过?)。该数据结构由系统中全体用户共同维护,保证了交易的有效性。该数据结构,便是区块链。

简单的区块链交易模型

在这里插入图片描述
在该模型中,A获得了铸币权,发行了十个币,在第一个交易中,A转给了B五个币,转给了C五个币,A对该交易签名,同时,通过一个指针指出了这十个币的来源,后面的两个交易类似。

在进行交易时,需要付款人的签名和收款人的地址,在比特币系统中,该地址即为收款人的公钥的哈希。可以将其视为银行账户,根据此进行转账交易。(虽然公钥可以公开,但实际中更多公开的是公钥的哈希)
在交易中,收款方需要知道付款方的公钥,从而验证A签名是否有效。即A需要提供自己的公钥(实际上其他节点都需要知道付款方公钥,验证交易合法性)实际中A转账时候提供的公钥需要和铸币交易中公钥对的上,这样就防止了恶意节点伪造A的公钥来“偷”走A的比特币。
在比特币系统中,通过执行脚本实现上述验证过程。将当前交易输入脚本与前一个交易输出脚本(说明币的来源的交易)拼接执行,如果可以正确执行,说明交易合法。
在该图中,一个区块仅含有一个交易,实际中一个区块中包含多个交易,交易通过Markle Tree组织起来,在区块中存储。

区块信息

Block header 区块头
Version 比特币的协议版本
Hash of previous block header 区块链中指向前一个区块的指针
Merkle root hash 整课Merkle tree的根哈希值
Target 难度目标阈值(比特币有关)
nonce 随机数(比特币有关)

Merkle root hash保证了block body内容不被篡改,所以只需要计算block header即可保证整个区块内容不会被篡改

Block body 区块体
Transaction list 交易列表

Full node:保存区块链的所有信息,验证每一个交易
Light node:只保存block header,不参与区块链的构造维护

Distributed consensus(分布式共识)

FLP impossibility result
系统网络传输是异步的,网络时延没有上限,哪怕系统中有一个成员是faulty的,那就无法达成共识。
CAP Theorem
C:consistency 一致性
A:Availability 可靠性
P:Partition tolerance 容错性
任何一个分布式系统中这三个性质最多只能满足两个。

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

存在的问题:系统中存在恶意结点
1.直接投票
某个结点发布交易到区块链中,其他结点检查该区块,通过投票决定是否将其加入到区块链中,如果赞成票数超过一半,则加入区块链。
问题1——恶意结点不断打包不合法区块,导致一直无法达成共识,时间全浪费在投票上
问题2——无激励机制,有些节点不会投票
问题3——网络延迟为止,投票等待时间不确定,效率上会产生问题
女巫攻击——比特币系统允许任何人加入,只需要本地创建公私钥对即可创建账户。这样,恶意用户只需不断产生新的节点,当节点数达到一半以上时就会有区块链的控制权,操纵投票结果。
2.算力投票
算力投票是比特币使用的共识协议,即通常所说的“挖矿”,每个结点都可以自行组装区块,尝试各种nonce值,当找到某个符合条件的nonce时便获得了记账权,从而将区块发布到系统中,其中节点收到区块后可以验证其合法性,如果系统中大多数结点验证通过,则接受该区块。
forking attack(分叉攻击)
在这里插入图片描述
如上图所示,A对同时给两个用户转账。在两条链上,发现交易都合法,这是典型的双花攻击。A先给B转账后,通过分叉攻击将交易回滚,把钱又转回来,这在验证上是可以通过的。
但在实际的比特币系统中,这种情况很难发生,因为大多数矿工认可的是最长的合法链,会沿着上面的链继续挖下去,如果A想回退这个记录,就必须使得下面的链比上面的还要长,理论上需要达到51%的算力才能攻击成功,实际中这是很困难的。

在这里插入图片描述
如上图所示,在区块链正常的工作中,也可能会发生分叉,当连个节点同时获得记账权时,会有两个区块同时上链,此时会有两个等长的合法链。在缺省情况下,节点接受最先听到的区块,该节点会沿着该区块继续延续,但随着时间延续,必然有一个链胜出,由此保证了区块链的一致性。

Block reward(出块奖励)

出块奖励是比特币中的激励机制,获得记账权的结点在发布的区块中可以加一个特殊的交易(铸币交易),这是发布比特币的唯一方法,不需要指明币的来源。
最开始每个区块可以发布50个比特币,每过21万个区块比特币会减半,现在只有12.5个比特币。

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

区块链学习笔记3——BTC协议 的相关文章

  • Unity的Input.GetAxis()的返回值

    Unity的Input GetAxis float moveHorizontal Input GetAxis Horizontal 水平的向左是 1 向右是1 静止返回值是0 float moveVertical Input GetAxis

随机推荐

  • 使用boost::range模块进行反转操作的相关测试程序

    使用boost range模块进行反转操作的相关测试程序 在C 中 使用第三方库可以帮助我们更方便地进行各种操作 boost库是一个受欢迎的C 库之一 提供了许多功能强大的模块 其中 boost range模块为我们提供了一组用于操作范围的
  • 一线大厂的企业云原生成本优化实践指南

    胡忠想 星汉未来联合创始人 CPO 读完需要 18分钟 速读仅需 6 分钟 1 前言 近年来 公有云 混合云等技术在全球迅速发展 云的普及度越来越高 Docker Kubernetes DevOps Service Mesh 等云原生技术蓬
  • 软件测试常见面试题

    文章目录 1 你的测试职业发展是什么 2 你认为测试人员需要具备哪些素质 3 你为什么能够做测试这一行 4 测试的目的是什么 5 测试分为哪几个阶段 6 单元测试的测试对象 目的 测试依据 测试方法 7 怎样看待加班问题 8 结合你以前的学
  • 【Python数据科学手册】Pandas——二、Pandas对象简介

    文章目录 二 Pandas对象简介 1 Pandas的Series对象 1 Serise是通用的NumPy数组 2 Series是特殊的字典 3 创建Series对象 2 Pandas的DataFrame对象 1 DataFrame是通用的
  • Spring Oauth2-Authorization-Server jwt 认证

    Spring Oauth2 Authorization Server jwt 认证机制 基于 spring security oauth2 authorization server 0 2 3 配置 资源服务器配置 Bean Securit
  • 全鲸董事长韩耀宁受邀出席第十九届中国科学家论坛,发表重要演讲

    9月18日 第十九届中国科学家 国际 论坛在京隆重开幕 来自全国各地行业的院士 科学家 教授 学者 科技工作者以及2000多名各行业领军企业家出席了本次年度盛会 大会以 推动科技国际合作 提高我国科技创新国际影响力 塑造创新发展新优势 为主
  • 用递归算法实现开平方根

    用递归算法实现开平方根 前言 本文是用手算平方根的解法 用python代码实现 手算平方根方法学自西瓜视频李永乐老师 代码为个人原创 手算平方根方法 现在我们有一个非负数S 要求S的平方根 我们可以先将S拆成两个数相加 这两个数分别是小于等
  • Filter过滤器——javaweb

    介绍 Filter 过滤器 用来过滤网站数据 每次请求都会走一次过滤器 直到服务器关闭 Filter 实现步骤 导包
  • QT界面:控件随界面大小自适应变化

    在用QT做一个图像显示界面的过程中需要控件随着QT界面缩放进行自适应变化的问题 特此记录一下 环境 Win10 VS2015 QT5 1 拖拽控件 首先 新建一个QT GUI工程 在Qt Designer中调整界面大小并拖拽需要的控件 如图
  • Vue---Vue常用特性

    一 常用特性概览 表单操作 自定义指令 计算属性 过滤器 侦听器 声明周期 1 表单操作 2 表单域修饰符 number 转化为数值 trim 去掉开始和结尾空格 lazy 将input事件切换change事件
  • el-upload+额外的参数 , element上传功能组件及其参数的详解

    前言 我们使用 element ui 的时候 可能会有一个需求要给后台传入额外的值 我这边是遇到了 然后通过找到各种资料解决了 现在把我的upload的组件分享一下 可以实现导入 导出功能 导入的时候也会有额外的参数 这个是通过 gjlx
  • C++11:右值引用

    新特性目的 右值引用 Rvalue Referene 是 C 新标准 C 11 11 代表 2011 年 中引入的新特性 它实现了转移语义 Move Sementics 和精确传递 Perfect Forwarding 它的主要目的有两个方
  • 【论文阅读】Three scenarios for continual learning

    文章目录 题目 2019 Three scenarios for continual learning 1 论文的总体介绍 2 论文提出的 benchmark 三种场景 2 1 三种场景的定义如下 2 2 split task protoc
  • 动态个人导航网HTML单页源码

    一款单页的网址发布页单页 HTML 模板 可用于网址发布页使用 本模板简约商务 页面精美没有花里胡哨的效果 喜欢的敬请使用 右键单击直接就可以单页面修改 直接下载就可以使用啦 源码地址 旭音导航网 zip 蓝奏云
  • unix域套接字

    UNIX域套接字被用来和同一机器上运行的进程通信 尽管因特网域套接字可以用作同样的目的 然而UNIX域套接字更高效 UNIX域套接字只拷贝 数据 它们没有要执行的协议处理 没有要增加或删除的网络头 没有要计算的校验和 没有要产生的序列号 没
  • 量子芯片是什么

    量子芯片是一种制造的芯片 它能够用来执行量子计算任务 量子芯片通常是用来执行量子纠缠运算的 这是一种特殊的量子运算 可以用来解决计算机难以解决的问题 如密码破解 分子模拟和机器学习 量子芯片通常由多个量子比特 或称为量子位 组成 并且可以通
  • elementui 解决select框有值,但不回显问题

    问题描述 在使用Vue框架和element ui开发时 下拉框遇见一个问题 比如有一个所在地需要选择省市区 当省市选完后 选择区的时候 会发现值已经改变 但是区的下拉框没回显选中的数据 在打印中查看是修改成功了 但在页面中没有及时刷新改变后
  • 崩溃场景_【3D】MaxScript 回调脚本异常(病毒清理)撤销崩溃 灯光消失等常见问题...

    这是另众多3DMAX新老玩家头疼的问题 回调脚本异常是什么 其实它是病毒的体现 而且老版本的ALC等杀毒插件对它无效 出现这个弹窗伴随出现的就是撤销崩溃 灯光删除 关闭文件自动保存等等问题 来了解一下彻底解决的方法 视频版 图文版 1 打开
  • 记录一下 CMU 15445 项目

    目录 Write In Front PROJECT 1 BUFFER POOL TASK 1 LRU REPLACEMENT POLICY 核心概念 数据结构 Other TASK 2 BUFFER POOL MANAGER INSTANC
  • 区块链学习笔记3——BTC协议

    区块链学习笔记3 BTC协议 学习视频 北京大学肖臻老师 区块链技术与应用 笔记参考 北京大学肖臻老师 区块链技术与应用 公开课系列笔记 目录导航页 数字货币所面临的主要挑战 Double spending attack 双花攻击 同一张数