《区块链技术原理》笔记

2023-11-11

一、区块链的概念:

   侠义来讲,区块链是一种按照时间顺序将数据区块一顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本

    广义来讲,区块链技术利用链式数据结构来验证和存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全性、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式

二、区块链基础技术

区块链用到的基础技术全是当前非常成熟的技术:如哈希运算数字签名P2P网络共识算法以及智能合约等。

1、哈希算法:简单讲就是把任意长度的输入,通过计算生成一个固定长度的字符串,输出的该字符串称为该输入的哈希值。

优秀的哈希算法具备正向快速(计算输出速度快)、输入敏感、逆向困难、强抗碰撞等特征。

        ①通过哈希构建区块链的链式结构,实现防篡改。

        ②通过哈希构建默克尔树,实现内容改变的快速检测。哈希值并不是直接讲所有交易内容计算得到哈希,而是一个哈希树。首先对每笔交易计算哈希值;然后两两分组,对这两个哈希值再计算得到一个新的哈希值,两个旧的哈希值作为新哈希值的叶子节点,如果哈希值为单数,则对最后一哈希值再次计算哈希值即可;然后重复上述计算,直至最后只剩一个哈希值,作为默克尔树的根。如需验证交易,只需要验证默克尔树即可。

2、数字签名

      数字签名作用:实现权限控制识别交易发起者的合法身份,防止恶意节点身份冒充

      数字签名的原理:通过密码学领域相关算法对签名内容进行处理,获取一段用于表示签名的字符。密码学领域,一套数字签名算法一般包含签名验签两种运算,数据经过签名后,非常容易验证完整性,并且不可抵赖。

      数字签名的流程:

        ①发送方A对原始数据通过哈希算法计算数字摘要,使用非对称密钥中的私钥数字摘要进行加密,加密后的数据就是数字签名;

        ②数字签名与A的原始数据一起发送给验证签名的任何一方。

      验证数字签名的流程:

       ①首先,签名的验证方,一定要持有发送方A的非对称密钥对的公钥

       ②接收到数字签名A的原始数据后,使用公钥数字签名进行解密,得到原始摘要值

       ③对A的原始数据通过同样的哈希算法计算摘要,对比解密得到的摘要值重新计算得到的摘要值对比,相同则签名验证通过。

3、共识算法

    共识算法目的:保证所有节点最终都记录一份相同的正确数据。

    共识算法主要归为一下四类:

      ①工作量证明(Proof of Work, PoW)类的共识算法

             该类算法核心思想是所有节点竞争记账权,对于每一批次的记账都赋予一个难题,要求只有能够解出难题的节点挖出的区块才是有效的。PoW算法给参与的节点带来的计算开销,除了延续区块链生长外无其他任何意义,造成了巨大的能源浪费

      ②Po* 的凭证类共识算法:

            根据每个节点的某些属性,定义每个节点进行出块的难度或优先级,并且取凭证排序最优的节点,或是取凭证最高的小部分节点进行加权随机抽取某一节点,进行下一段时间的记账出块。一定程度上降低了出块的开销,但凭证的引入提高了算法的中心化程度。且大多数该类算法未经过大规模的正确性验证。

      ③拜占庭容错(Byzantine Fault Tolerence, BFT)类算法

           BFT算法则希望所有节点协同工作,通过协商的方式来产生能被所有(诚实)节点认可的区块。

           实用拜占庭容错算法(Practical BFT)提高了BFT算法容错率,降低了算法复杂度。BFT类共识算法一般定期选出一个领导者,由领导者来接收并排序区块链系统中的交易,领导者产生区块并递交给其他节点对区块进行验证,进而其他节点”举手“表决时接受或拒绝该领导者的提议。如果大部分节点认为当前领导者存在问题,这些节点可以通过多轮投票协商过程将当前领导者推翻,再以某种预先定好的协议协商产生出新的领导者节点。

          BFT类算法一般有完备的安全性证明,但协商轮次较多,协商的通信开销较大业界普遍认为,BFT算法所能承受的最大节点数目不超过100.

      ④结合可信执行环境(Trusted Execution Environment, TEE)的共识算法

          利用软硬件结合的共识算法。可信执行环境是一类能够保证在该类环境中执行的操作绝对安全可信无法被外界干预修改的运行环境。利用可信执行环境,可对区块链系统中参与共识的节点进行限制,很大程度上可以消除恶意节点的不规范或恶意操作,从而减少共识算法在设计时异常场景的考虑,一般来说,可以大幅提升共识算法的性能。

4、智能合约

     简单来说,只能合约是一种在满足一定条件时,就自动执行计算机程序

     一个基于区块链的智能合约需要包括事务处理机制数据存储机制以及完备的状态机,用于接收和处理各种条件。并且事务的触发、处理及数据保存都必须在链上进行

    但是智能合约的安全性需要关注。

5、P2P网络

      传统的网络服务架构大部分是客户端/服务端client/server, C/S架构,即通过一个中心化的服务端节点。对许多个申请服务的客户端进行应答和服务。 C/S架构也称主从式架构服务端是整个网络服务的核心,客户端之间通信需要依赖服务端的协助。 C/S架构的优点是能够保持一致的服务形式,方便服务和升级,便于管理。缺点是当服务节点发生故障时,整个服务都会陷入瘫痪。

      对等计算机网络Peer-to-Peer Networking,P2P网络),消除了中心化,将所有的网络参与者视为对等者(Peer),并在他们之间进行任务和工作负载分配。P2P网络具有极强的可靠性网络容量没有上限,P2P网络节点数目越多,P2P网络提供的服务质量就越高

三、区块链的分类

  • 公有链(Public Blockchain):比特币
  • 私有链
  • 联盟链

“币”只公有链经济生态和模型中的一部分区块链技术并不一定要有币

公有链离开“币”的概念难以存活联盟链和私有链的参与的节点的投资和收益都是较为特殊的,参与者希望从链上获得可信数据或者共同完成某种任务,所有他们有义务和责任取维护区块链系统的稳定运行。


 

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

《区块链技术原理》笔记 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • Fiddler-抓包步骤详解

    一 工作原理介绍 1 Fiddler抓包是在 客户端和服务器之间建立一个代理服务器 监听本机发出的请求和服务器返回的响应结果 允许监视 设置断点 甚至修改输入输出数据 2 Fiddler使用的代理地址是127 0 0 1 端口是8888 它
  • 从“白人饭”到美味佳肴,拓世AI为你打造独一无二的饮食计划

    最近 白人饭 作为一种饮食方式在社交媒体上火了 成为打工人新的 午餐之光 所谓 白人饭 就是花最少的功夫准备仅仅能维系基本器官正常运作的食物 主打生吃或者简单炒 比如一个丹麦网友晒出的同事的午饭就是几根小胡萝卜和青菜 德国网友中午只吃一个白
  • Pycharm同一目录下py文件相互调用

    1 首先确保所在目录是Python Package而不是一般的New Stratch File 或者是普通的Directory也可以 Python Package下有 init py或自己建空的 init py 2 pycharm不会将当前
  • 免费JS富文本编辑器 总有一款会适合你

    什么是富文本编辑器 概述 javascript Text Editor 我们平常在页面上写文章 或者 后台发布文章内容 或内容描述等 一直都是用的是富文本编辑器 包括很多论坛发帖的文字窗口也是典型的富文本编辑器 它跟office中的word
  • linux C函数之stat函数

    1 函数功能 通过文件名filename获取文件信息 并保存在buf所指的结构体stat中 2 函数原型 函数头文件 include
  • 用C语言实现DFT算法

    一 简介 离散傅里叶变换 Discrete Fourier Transform 缩写为DFT 是傅里叶变换在时域和频域上都呈离散的形式 将信号的时域采样变换为其DTFT的频域采样 在形式上 变换两端 时域和频域上 的序列是有限长的 而实际上
  • vue.js element radio 单选框选中切换不同内容

    代码 span 分区类型 span
  • 如何检测linux系统下ftp服务器是否开启

    查看下端口是不是开启 netstat an grep 21 查看进程 ps ef grep ftp
  • RTX2080Ti-深度学习环境配置

    最近新购置了一台服务器 被环境折腾了半天 在这里纪念一下安装的心酸历程 环境配置 ubuntu18 04 cuda10 0 cudnn7 3 1 tensorflow gpu1 12 0 1 下载显卡驱动 cuda cudnn cuda10
  • 逍遥模拟器拷贝android根目录文件,逍遥android模拟器怎么导出APK文件

    1 运行SDK Manager 选择模拟器 并运行模拟器3 点击开始 运行 输入cmd 打开cmd窗口 输入cd C Program Files android sdk windows platform tools 进入platform t
  • Win11将WSL做SSH服务器,实现通过局域网SSH远程连接到WSL上,并且开机自动启动,手把手教学

    前言 本人的需求是经常需要将自己的台式机作为服务器使用 但是工作的主力又是笔记本 在公司使用服务器 在家使用台式机 笔记本台式同步代码数据很麻烦 于是产生了这种需求 利用台式机的WSL搭建SSH服务器 局域网内笔记本可直接ssh连接到WSL
  • 数据结构视频教程 -《[麻省理工学院]_算法导论_翻译版》

    整个视频打包下载地址 史上最全的数据结构视频教程系列分享之 麻省理工学院 算法导论 翻译版 转载请保留出处和链接 更多优秀资源请访问 我是码农 MIT无论是在美国还是全世界都有非常重要的影响力 培养了众多对世界产生重大影响的人士 是全球高科
  • mysql 创建用户,指定数据库,表的读写权限常用命令

    mysql 创建用户 指定数据库 表的读写权限常用命令 老是记不住mysql命令 然后网上找了点资料 然后记录下来 方便查询使用 1 远程登录mysql mysql h ip u root p 密码 2 创建用户 格式 grant 权限 o
  • git在项目已存在的情况下拉取某个文件

    git在项目已存在的情况下拉取某个文件 切换到本地该分支后 git checkout Garrick name 如果是某个文件 git checkout Garrick a txt 如果是真个文件夹 文件夹名字为a git checkout
  • 稳压二极管及特性介绍

    稳压二极管及特性介绍 稳压二极管是一种特殊工艺制造的面结型硅半导体二极管 此类二极管杂质浓度比较高 空间电荷区的电荷密度比较大 该区域狭窄 容易形成强电场 当反向电压来临时 反向电流急剧增加 产生反向击穿 稳压管核心理论 稳压管未工作时 处
  • sqli-labs-less-13 post传参+布尔盲注

    Less 13 post 布尔盲注 首先通过burp suite抓包获取报文体 利用harkbar插件进行注入 判断闭合方式 uname or 1 1 passwd submit Submit 发现闭合方式为 uname passwd su
  • 90后的头上少了头发,多了压力

    我已经不怎么笑了 内心也没有以前那么波动了 就像一潭死水 扔个石头都激不起水花 一个刚刚下班的网友这样形容工作后的自己 下了班回到家不就轻松了吗 不 其实只有加班后的回家路上 在地铁上那一个小时可以算得上轻松 虽然拥挤 可地铁上的通勤路 却
  • Python二级(10)——Python的计算机生态

    一 知识导图 二 计算思维 1 人类在认识世界 改造世界过程中表现出三种基 本的思维特征 以实验和验证为特征的实证思维 以物理学科为代表 以推理和演绎为特征的逻辑 思维 以数学学科为代表 以设计和构造为特征 的计算思维 以计算机学科为代表
  • 解决org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back beca

    文章目录 1 复现错误 2 分析错误 3 分析spring的事务机制 3 1 入口程序 3 2 事务管理的主方法 3 3 细究各对象的获取 4 functionTwo方法抛异常后的回滚操作 5 functionOne方法尝试提交时的操作 6
  • 《区块链技术原理》笔记

    一 区块链的概念 侠义来讲 区块链是一种按照时间顺序将数据区块一顺序相连的方式组合成的一种链式数据结构 并以密码学方式保证的不可篡改和不可伪造的分布式账本 广义来讲 区块链技术利用链式数据结构来验证和存储数据 利用分布式节点共识算法来生成和