区块链技术与应用学习笔记(1-4节)——北大肖臻课程

目录

1.   区块链初识(课程简介)

被过度炒作,落地应用有限?

下一代的价值互联网?世界上最慢的数据库?

  2.   BTC-密码学原理(比特币)

1)哈希

哈希函数特点

个人学习所得

2)签名

个人对于签名了解

3.    BTC-数据结构(哈希指针)

1)哈希指针:

个人对于哈希指针了解

2)merkle tree(补充):

个人对于Merkle tree的理解

4.   BTC-协议

1)协议:

2)铸币交易:

3)分布式共识:

Paxos算法:

4)比特币共识(Consensus in BitCoin):

投票机制达成共识是不可行的,那如何解决比特币共识问题?

工作量证明难度是非常大的,那其他节点凭什么做这种大量的工作呢?

由于网络会延迟等原因,可能会出现两个矿工同一时间挖出区块的可能。如果他们一起参与记账,就会造成区块链分叉。这时我们两边都要承认吗?

总结


1.   区块链初识(课程简介)

被过度炒作,落地应用有限?

伴随比特币市场占比的增加,以及其他加密货币的出现,区块链是不是骗局是不是炒作,它的落地应用又可以有哪些?成为了我最初的问题?比特币是区块链的一种应用,比特币是一种加密货币,所有区块链都应用数字加密技术。伴随着越来越多人加入区块链,区块链的确有很大的争议,但我认为区块链未来及落地应用在经过时间积累后会被大众认可的,如过去的互联网+思维,未来也可能会有区块链+思维。

下一代的价值互联网?世界上最慢的数据库?

价值互联网,就是我们的资产,我们价值,都存在于互联网上,但这个互联网不是传统的互联网,而是区块链互联网,价值体现就是数字资产。与传统互联网上,多数都是在查看信息,更多的信息。而价值互联网,是上网行为多数都是在操控自己的价值资产。其次我并不认为区块链只是“数据库”,区块链四大核心技术如共识机制,哈希算法,点对点分布式技术(p2p),智能合约,这些都表明区块链是安全可信赖的这比单纯的数据库更重要。同时我也相信区块链的出现也不是为了成为数据库

                                              
2.   BTC-密码学原理(比特币)

1)哈希

哈希函数特点

(1)collision resistance:很难产生哈希碰撞(但是不可避免,无法去求证。MD5)    

(2)hiding:哈希是单向的,不可逆。

(3)puzzl friendly:只有穷举才能得到对应输出空间的范围

算法:SHA-256  

个人学习所得

①  哈希碰撞在视频中被多次提及什么是哈希碰撞?

哈希计算的输入端是不定长、而输出端是定长,那么就存在一个可能,即同 一个哈希值可能会对应不止一个输入数值串,这个现象就称为“哈希碰撞”, 每一次碰撞就相当于猜一次密码,而猜的次数越多、速度越快,那么猜中的 几率也就越大。所以,很多人为了得到更多的比特币,就不断增加自己进行 哈希碰撞猜中密码的能力、也就是常说的“算力”。

②digital commitment(digital equivalent of sealed envelope)

collision resistance+hiding可以合起来实现digital commitment,比如预测股票,为了不影响股市,预测结果不能提前公开;为了保证预测的公平性,预测结果不能被篡改。哈希函数可以解决这两个问题,提前将预测结果计算哈希保存,将哈希值公开。将最终结果的哈希和预测结果的哈希比对,可以确认结果是否正确;同时,只要预测结果的哈希值不变,则可以保证数据未被篡改。

2)签名

非对称加密产生公私钥对,签名用私钥,验证签名用公钥,加密用公钥,解密用私钥。 类似于银行账户为公钥,银行账户密码为私钥。

个人对于签名了解

对于去中心化的系统,每个账户就是公私钥对,本地直接产生(public key, private key),当随机源较好时,产生相同公私钥对的概率可忽略不计。常见的对称加密体系,加密解密使用相同的密钥,密钥不能公开,只有发送信息双方间知晓。一旦密钥泄露,则会导致信息泄露。而非对称加密体系,接收方的公钥是公开的,发送者使用接收方的公钥对数据进行加密,接收方再使用私钥解密,保证了加密的安全性。签名是和加密相对的过程,使用私钥对数据进行签名,其他人可以使用公开的公钥进行验证。


3.    BTC-数据结构(哈希指针)

1)哈希指针:

①区块链本质是有哈希指针连接起来的链表。

②区块由 block header 和 block body 组成,block body 存放具体的交易信息,交易内容以 Merkle Tree 的形式组织在一起,data block 内存放交易具体内容,计算 hash,相邻 block 的 hash 拼接起来再次计算 hash。依次类推,最后的二叉树根结点称为 Merkle Root Hash。根据 root hash 值是否被修改, 可以判断区块内的交易是否被篡改。block header 存放版本信息、前一个区块的 hash pointer,block body 中的 root hash,开始时间,以及挖矿所需的 nBits 和 nonce,不包含具体的交易内容

③区块存放在系统中的节点内,包括全节点和轻节点,轻节点仅包含 block header,全节点则是完整的节点,还包含具体的 block body。系统中大部分节点以轻节点形式存在。当轻节点想要验证某个交易是否已写入节点(proof of membership/inclusion),需要由交易证明方提供 merkle proof,即此交易到根结点的交易路径中涉及的哈希值,证明交易被写到区块中。首先在本地计算该交易的哈希值,并向全节点请求merkle proof。

个人对于哈希指针了解

①只需要记住一个哈希指针,我们就可以记住从头到尾的哈希。因此我们可以建立一条区块链,可以包含任意多的信息块并可以回到最初的创世区块。

②使用哈希指针来实现的数据结构就是二叉树。使用哈希指针实现的二叉树叫做默克尔树(merkle tree) 

2)merkle tree(补充):

每个区块中交易列表中的交易作为tree的叶子节点,向上取哈希值,不断向上传递计算新的哈希值,直到获得根节点的哈希值作为merkle tree root 。任何一笔交易被篡改或者伪造都会改变哈希值。

个人对于Merkle tree的理解

①默克尔树算法并不是直接计算整个字符串的Hash值,而是每个交 易都计算一个Hash值,然后两两连接再次计算Hash,一直到最顶层 的Merkle根。 ②默克尔树(Merkle Tree)算法的最大好处就是,每个交易都可以 单独直接删除,只保留这个交易的Hash值即可。这样,对整个区块 来说,并没有改变他的密码学安全性和完整性,但是数据量可以大 大减小。(Hash值32个字节,而一笔交易一般要400多个字节)。 如果一个区块中只有一个交易没有后续交易,那么删除其他所有交 易,整个区块的数据量会大大减小。因此,在UTXO的记账模式中,使用默克尔树结构,通常就无需担心数据 量一直增长导致数据过大的问题了。(utxo记账模式在账本小组ppt 如何规范双花问题有进行解答)   


4.   BTC-协议

1)协议:

比特币协议属于应用层协议,基于p2p网络通信,使用tcp传输保证可靠信。比特币协议版本号会写在block header中。

2)铸币交易:

铸币交易有固定的格式,算法公开,在比特币协议 中有明确的规定。每个区块只能写一条铸币交易, 这条交易大概是这样:coinbase奖励address( 由挖矿节点的公钥通过哈希生成)6.25BTC (当前比特币区块奖励是6.25BTC)。铸币交易里, 新币是锁定给挖矿节点的公钥地址的。这意味着只有 这个挖矿节点的私钥才能签名这笔钱,其他任何人动 不了它的。

3)分布式共识:

所谓分布式共识,主要包含两点:分布式与共识, 分布式指的是系统运作由参与该系统的所有个体分 工合作进行,共识就是所有参与者达成的一致决定。 分布式共识系统简单来说就是所有参与者共同决策、 共同运作、共同维护的系统。 补充:FLP impossiblity result 在一个异步 (asynchronous)的系统中

Paxos算法:

Paxos算法解决的问题正是分布式一致性问题,即一个分布式系统中的各个进程如 何就某个值(决议)达成一致。Paxos算法运行在允许宕机故障的异步系统中不要 求可靠的消息传递,可容忍消息丢失、延迟、乱序以及重复。它利用大多数 (Majority) 机制保证了2F+1的容错能力,即2F+1个节点的系统最多允许F个节点 同时出现故障。一个或多个提议进程 (Proposer) 可以发起提案 (Proposal), Paxos算法使所有提案中的某一个提案,在所有进程中达成一致。系统中的多数派 同时认可该提案,即达成了一致。最多只针对一个确定的提案达成一致。

4)比特币共识(Consensus in BitCoin):

比特币系统实际上是一个去中心化的分布式账本,那么账本就要保证一致性,也就是要保证每一笔交易在所有记账节点上的一致性,让全网都达成共识。

采用投票机制达成共识是否可行呢? 举例:某个节点打包一个区块,将这个区块全网广播,其他节点收到后会核验这个候选区块,若正确则投赞成票,不正确则投反对票,正确票过半就添加到区块链中。

这样做会出现的问题:

问题1:网络延迟是不可避免的,整个投票环节需要多久不可预知,效率上有很大问题。

问题2:恶意节点的存在不可避免。

问题3:恶意节点可造成女巫攻击(sybil attack),所谓女巫攻击就是模仿出多种身份进行的攻击。在比特币中创建一个账户只需在本地生成一个公私钥对即可,黑客可以生成大量的账户来进行投票,影响投票结果。

投票机制达成共识是不可行的,那如何解决比特币共识问题?

比特币中采用了一个非常巧妙的方案:就是通过算力来进行投票,因为算力要做大量的工作,所以比特币中的共识机制就是工作量证明(Proof of Work),简称POW。 工作量证明的实质是:尝试大量的随机数来进行哈希运算。 具体是找到一个随机数加入块头中,计算区块的块头的哈希值,使得计算的哈希结果小于或等于块头中目标值,公式如下:H(block header + nonce) <=target 算力最强的节点掌握记账权即“挖矿”的权力

工作量证明难度是非常大的,那其他节点凭什么做这种大量的工作呢?

那就是比特币系统中的奖励机制,由于奖励十分高,因此工作 量证明的过程也俗称为“挖矿”,这些挖矿的节点也俗称为“矿工”。 比特币系统中规定,只要工作量证明在全网达成共识并加入到区块链 中后就可以获得比特币,也就是出块奖励。比特币的来源就是通过 出块奖励(block reward)产生,也是比特币增多的唯一来源。 奖励规则 比特币系统中维持着平均每10分钟会有一个工作量证明成功 (挖矿成功)。比特币系统最初始的挖矿奖励是50BTC,区块链 中的区块每21万个后奖励就减半,也就是25BTC,以此类推。 理论上约到2140年左右,比特币将不再增长,达到饱和。矿工挖 矿不再获得奖励。

由于网络会延迟等原因,可能会出现两个矿工同一时间挖出区块的可能。如果他们一起参与记账,就会造成区块链分叉。这时我们两边都要承认吗?

肯定不可以,此时我们采取最长链原则,即当两个矿工同时挖出区块的时候,系统就会根据最长链原则进行取舍,即哪个新产生的区块能使其所在的区块链变得更长,则哪个区块得以被记录。如果两者一起记账就会造成区块链的分叉,这时会把其中有更多工作量的一条会继续作为主链,另一条作为备用链保存,如果新添加的区块使备用链累积了更多的工作量,那么这条备用链将被作为新的主链。

总结

不论是密码学,数据结构,协议,都是区块链中重要的理论知识,从中我再一次深入了解了双花问题,拜占庭将军问题,不可否认其实我在 这个博客只浅显了解了区块链的一部分,肖臻老师的网课 尽管我有认真看了几遍进行总结我认为还是有所欠缺 学习区块链知识还是一个任重道远的过程,最长链原则 也曾经受到过挑战如BCH分叉事件。之后, 我会再次认真研读肖臻老师课程简介推荐的有关区块链 的书籍,最后附上挖矿过程图片

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

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

相关文章

利用Spring Boot后端与Vue前端技术构建现代化电商平台

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

竞赛课第九周(埃式筛法,矩阵乘法)

1.埃式筛法:求区间[2, n]内所有的素数对 【参考代码】 #include <bits/stdc.h> using namespace std;const int N 1e5; vector<int> prime; bool visit[N];int main() {int n;cin>>n;memset(visit, false, sizeof(visit));for(int i2; i<sqrt(n); i){i…

成都百洲文化传媒有限公司电商服务如何?

在当今数字化快速发展的时代&#xff0c;电商行业日益繁荣&#xff0c;成都百洲文化传媒有限公司作为专注电商服务的领先者&#xff0c;以其独特的服务理念和创新能力&#xff0c;赢得了市场的广泛认可。本文将从公司的背景、服务特点、市场优势以及未来展望等方面&#xff0c;…

深入理解GTK、Qt、AWTK:跨平台GUI框架对比

目录标题 GTK特性&#xff1a;优点&#xff1a;缺点&#xff1a; Qt特性&#xff1a;优点&#xff1a;缺点&#xff1a; AWTK特性&#xff1a;优点&#xff1a;缺点&#xff1a; 适用场景 在当今的软件开发领域&#xff0c;图形用户界面&#xff08;GUI&#xff09;的开发是不可…

炫云云渲染:免费体验与高性价比的首选,设计师们的渲染利器

使用云渲染是要收费的&#xff0c;如果你是第一次使用&#xff0c;是可以白嫖一波云渲染的&#xff0c;所有的云渲染都会或多或少送一些渲染券&#xff0c;你可以用它们送的渲染券免费渲一波图。但是不能一直白嫖&#xff0c;再次注册账号人家就不会送体验券了&#xff0c;有些…

搭建AI知识库的终极指南

今天我们来聊聊一个挺火的话题——搭建AI知识库。你可能在想&#xff0c;这AI知识库到底是什么&#xff1f;为什么现在这么多企业都要搭建它呢&#xff1f;下面我们就一起逐步了解对AI知识库从认识到搭建的全过程。 一、什么是AI知识库 AI知识库就是一个利用人工智能技术&#…

基于Python实现的推箱子小游戏

Python贪吃蛇小游戏实现: 推箱子曾经在我们的童年给我们带来了很多乐趣。推箱子这款游戏现在基本上没人玩了&#xff0c;甚至在新一代人的印象中都已毫无记忆了。。。但是&#xff0c;这款游戏可以在一定程度上锻炼自己的编程能力。 运行效果如图所示&#xff1a; 游戏关卡有点…

一文读懂海外站建设平台选择,HubSpot为何独占鳌头?

说起海外站建设平台&#xff0c;就像咱们挑餐馆一样&#xff0c;得看菜色合不合胃口&#xff0c;环境舒不舒服&#xff0c;还有价格能不能接受。市面上那些平台&#xff0c;各有各的招牌菜&#xff0c;但哪道最适合你&#xff0c;还真得好好琢磨琢磨。如果你想要的是那种既实用…

【产品经理修炼之道】- 从需求到功能的转化过程

产品经理的最大作用是将需求转化为产品或者功能&#xff0c;从需求到功能&#xff0c;会经历哪些过程&#xff1f;本文总结了从需求到功能的转化过程&#xff0c;希望对你进一步了解有所帮助。 “大部分的产品经理特别是数字化产品经理其核心价值就是如何去解决如何把需求转化为…

Azure AKS集群监控告警表达式配置

背景需求 Azure AKS集群中&#xff0c;需要对部署的服务进行监控和告警&#xff0c;需要创建并启用预警规则&#xff0c;而这里怎么去监控每个pod级别的CPU和内存&#xff0c;需要自己写搜索查询 解决方法 搜索和查询的语句如下&#xff0c;需要自己替换其中的部分信息,其中…

汽车驾驶3D模拟仿真展示系统更立体直观

随着新能源汽车的普及&#xff0c;它已成为现代生活中不可或缺的交通工具。并且国产车的崛起&#xff0c;其设计与零部件制造水平已能与合资车相媲美&#xff0c;因此汽车维修技能的学习变得尤为重要。汽车维修3D仿真教学软件应运而生&#xff0c;为广大学员提供了一个直观、高…

vLLM-prefix浅析(System Prompt,大模型推理加速)

原文&#xff1a;vLLM-prefix浅析&#xff08;System Prompt&#xff0c;大模型推理加速&#xff09; 简介 本文浅析了在大模型推理加速方面一个非常优秀的项目 vLLM 的一个新特性 Prefix。在 Prompt 中有相同前缀时可以提高吞吐量降低延迟&#xff0c;换句话说可以省去这部分…

解线性方程组——上三角、下三角,回代算法 | 北太天元

1. 解上三角(回代) a i i ≠ 0 a_{ii\neq0} aii0​ , i 1 , 2 , … , n i1,2,\ldots,n i1,2,…,n a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 22 x 2 ⋯ a 2 n x n b 2 ⋯ a n n x n b n \begin{aligned} a_{11}x_1a_{12}x_2\cdotsa_{1n}x_n&b_1 \\ a_{22}x_2\cdot…

解决idea不识别${pageContext.request.contextPath}的方法

文章目录 一、产生原因二、解决方法——直接修改web.xml文件三、修改模板——找到web.xml模板&#xff0c;修改替换 一、产生原因 由于web.xml 使用的web-app版本号过低。导致无法识别"{pageContext.request.contextPath}"。 IDEA在创建javaweb项目的时候&#xff0…

synchronized 之谜

序言 本文给大家介绍一下 synchronized 关键字的部分原理。 一、内存中的 Java 对象 class A {private String attr; }先引入一个问题&#xff1a;上面类 A 有一个属性 attr。当类 A 实例化之后的对象在内存中是如何表示的呢&#xff1f; 在内存中&#xff0c;Java 对象由三…

2024年03月CCF-GESP编程能力等级认证Python编程二级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共15题,共30分) 第1题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是? A.小程序 B.计时器 C.操作系统 D.神话人物 答案…

【Linux驱动层】iTOP-RK3568学习之路(三):字符设备驱动框架

一、总体框架图 二、字符设备相关函数 静态申请设备号 register_chrdev_region 函数原型&#xff1a;register_chrdev_region(dev_t from, unsigned count, const char *name) 函数作用&#xff1a;静态申请设备号&#xff0c;可以一次性申请多个连续的号&#xff0c;count指定…

电阻理论基础

电流的形成是电荷运动&#xff0c;电子方向相反&#xff0c;标量 电压&#xff1a;电势有参考点&#xff0c;是一个相对量 电阻的值不取决于电压和电流的&#xff0c; Ra表示标准电阻 R表示任意温度的电阻

Transformer step by step--Positional Embedding 和 Word Embedding

Transformer step by step往期文章&#xff1a; Transformer step by step--层归一化和批量归一化 要把Transformer中的Embedding说清楚&#xff0c;那就要说清楚Positional Embedding和Word Embedding。至于为什么有这两个Embedding&#xff0c;我们不妨看一眼Transformer的…

【Java GUI】人机对弈五子棋

在学校的Java课程中&#xff0c;我们被分配了一项有趣的任务&#xff1a;开发一款能够实现人机对弈的五子棋游戏。为了更好地理解Java GUI的运用&#xff0c;并与大家分享学习心得&#xff0c;我将整个开发过程记录在这篇博客中。欢迎大家阅读并提供宝贵的意见和建议&#xff0…