区块链学习——区块链的技术栈

2023-10-30

摘要

我在区块链学习的上一篇博文,链接:区块链学习——区块链技术理念与工作流程中,简单介绍了区块链的技术理念以及工作流程,本文我将继续介绍区块链技术栈。

我们知道,区块链本身只是一个数据的记录格式,就像们平时使用Excel表格、Word文档一样,按照一定的格式将我们的数据存储在电脑上。与传统记录不同的是,区块链将产生的数据按照一定的时间间隔,分成一个个的数据块记录,然后再根据数据块的先后关系串联起来,也就是所谓的区块链了。按照这种规则,沿着时间线不断增加新的区块,记录下发生的每一笔操作。

这种数据记录的方式很新颖,在这种记录方式下,数据很难被篡改或者删除,有朋友可能会说,这有什么不好修改或者删除的,比如我在电脑上保存的Excel数据,再怎么复杂我也能修改啊!如果区块链的数据格式只是应用在单机环境或者一个中心化的服务器上,那确实是,毕竟自己对自己的数据拥有完全支配的权利。然而,事实上并不是如此。

事实上,区块链是一整套技术组合的代表,在这一组技术的配合下,才能显示区块链技术的优点。无论是什么样的区块链系统,不管是比特币、莱特币、以太坊还是其他的,核心结构和工作原理都是相同的。我们来看看最基本的技术组合有哪些吧。


如上图所示,这是区块链系统结构的基本组成,各种系统本质上都是在这个经典结构之上直接实现或者扩展实现。这些零部件装配在一起,组成了一个区块链软件,运行起来后就成为一个节点,多个这样的节点在不同的计算机上运行起来,就组成了一个网络。在这个网络中没个节点都是平等的,大家相互为对方提供服务,这种网络称为点对点的“对等网络”。下面我们来依次解释一下

1.区块链账本

如上所述,区块链账本它表示一种特有的数据记录形式。区块链就是“区块+链”,所谓的区块就是指数据块的意思,每个数据块之间通过某个标志连接起来的,从而形成一条链,我们看一下示意图:


如图所示,一个区块一个区块地衔接,区块之间通过某种方式串联起来,就比特币来说,大约是每10分钟产生一个区块,区块中主要包含了交易事务数据以及区块的摘要信息。我们来看看比特币中区块链数据的组成示意图:


通过上图可以看到比特币中区块链账本的数据组成以及关系,并且可以看到区块链数据在逻辑上分成了区块头和区块体,每个区块头中通过梅克尔根关联了区块中众多的交易事务,而每个区块之间通过区块头哈希值(区块头哈希值就是一个区块的身份证号)串联起来。这是一种链条格式,链条最大的特点就是一环扣一环,很难从之间去破坏。比如有人篡改了中间的2号区块,那么久的同时把2号区块后序的所有区块都要更改掉,这个难度就很大了。在区块链系统中,一个节点产生的数据或者更改的数据要发送到网络中的其他节点接受验证,而其他节点是不会通过验证一个被篡改的数据的,因为跟自己的本地区块链账本数据匹配不起来,这也是区块链数据不可篡改的一个很重要的技术设计。

这个格式还有个很巧妙的地方,如果数据总是由一个人来记录的,那自然也没什么,但是如果放到网络中,大家共同来记录这个数据,那就有意思了,每个区块数据由谁来记录或者打包,有一个规则。比如说掷骰子,大家约定谁能连续3次掷出三次6点,那就让他记录下一个区块的数据,为了补偿他的劳动投入,奖励给他一些收益。比特币正是通过这种方式不断发行新的比特币出来,奖励给打包记录区块数据的那个人的比特币就是新发型的比特币。

2.共识机制

所谓共识,就是指大家达成一致的意思。在区块链系统中,每个节点必须要做的事情就是让自己账本和其他节点的账本保持一致。如果在传统的软件系统中,这几乎不是问题,因为有一个中心服务器存在,也就是所谓的主库,其他库向它看齐就行。在实际生活中,很多事情人们也是按照这种思路来的。但是区块链是一个分布式的对等网络结构,在该结构中没有哪个节点是“老大”,一切都要商量着来。在区块链系统中,如何让每个节点按照规则保持数据一致是一个很核心的问题,这个问题的解决方案就是制定一套共识算法。

共识算法其实就是一个规则,每个节点都要按照这个规则去确认自己的数据,并且我们要从所有的节点中选举出一个最具有代表性的节点,那么如何筛选呢?其实就是设置一组条件,就像我们筛选运动员、尖子生一样,给一组指标让大家来完成,谁完成得更好,谁就有机会被选上。在区块链系统中,存在着多种这样的筛选方案,比如PoW(proof of work工作证明)、PoS(Proof of stake权益证明)、DPoS(Delegate proof of stake委托权益证明)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)等等。区块链系统就是通过这些删选算法或者共识算法使得网络中各个节点的账本数据达成一致。

3.密码算法

密码算法的应用在区块链系统中很巧妙,应用点也很多,我在这里不详细介绍密码的原理,就从几个很关键的应用来介绍一下。

首先我们回顾下区块链账本格式。通过上述讲解我们知道,区块链账本就是一个链接起来的一个个区块。到底是通过什么技术来链接的呢?学过数据结构的同学都知道,数据结构中有一种变量叫指针(Java中没有指针概念)它是可以用来指向某个数据地址的。区块之间的连接,往往不是靠数据地址来关联的,而是靠一种叫做哈希值的数据来关联,什么是哈希值?这是通过密码算法中的哈希算法计算得出的。哈希算法可以通过一段数据计算得出一段摘要字符串,这种摘要字符串与原始数据是唯一对应的。什么意思呢?如果对原始数据进行修改,哪怕只是一点点的修改,那么计算出来的哈希值都会发生完全的变化。区块链账本对每个区块都会计算出一个哈希值,称为区块哈希。通过区块哈希来串联区块。这有一个很好的作用就是,如果有人篡改了中间的某一个区块数据,那么后面的区块就都要进行修改,这个时候并不是简单地修改一下后面区块地址指向就能结束的。由于后面的区块是通过区块哈希来指向的,只要前面的区块发生改动,这个区块哈希就无效了,就指不到正确的区块了。

当然密码算法在区块链中的应用远不止这些,比如通过密码算法来创建账户地址、签名交易事务等等,这些应用在后面会介绍。

4.脚本系统

脚本系统在区块链中是一个相对抽象的概念,也是一个及其重要的功能,可以说是区块系统之所以能形成一个价值的网络,依靠的就是脚本系统。它就像一个发动机一样,驱动着区块链系统不断地进行各种数据的收发。所谓脚本,就是指一组程序规则。在区块链中有些程序的规则是固定的,比如在比特币系统中,只能进行比特币的发送与接收,这个与发送与接收的过程就是通过实现在比特币中的一组脚本程序来完成的。而有些系统是允许用户自行编写一组程序规则的,编写好后可以部署到区块链账本中,这就可以扩展区块链系统的功能,比如以太坊就是通过实现一套可以自定义功能的脚本系统,进而实现了只能合约的功能。

脚本系统使得在区块链中可以实现各种各样的业务功能。本来大家只是通过区块链来财务记账,通过脚本系统,大家可以使用区块来记录各种各样的数据,比如订单、众筹账户、物流信息、供应链信息等,这些数据一旦可以记录到区块链上,那么区块链的优点就能充分发挥出来。有关脚本系统的具体使用和开发,我后面会讲解。

5.网络路由

这个功能模块比较简单。区块链系统是一个分布式的网络,这些网络中的节点如何来彼此进行通信呢?依靠的就是网络路由功能。在分布式的网路结构中,不存在一个指定的服务器,大家没办法通过一个服务器来直接交换彼此的身份信息,就只能依靠彼此联系并传播信息。在区块链系统中,这个功能一般会定义成一种协议,称为“节点发现协议”。

除了要发现节点外,更重要的一个功能就是同步数据。节点要保持自己账本数据是最新的,就必须时时更新自己的数据。从哪更新呢?既然没有服务器下载下来,那就通过邻近的节点了。通过向邻近节点发送数据请求来获得最新的数据,节点彼此都充当服务者和被服务者,通过这种方式,网路中的每个节点都会在某一个时刻达成数据上的一致。

网络路由可以说是区块链系统的触角,通过大量的触角将每个节点连入网络,从而形成一个功能强大的区块链共识网络。



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

区块链学习——区块链的技术栈 的相关文章

  • vue3+vite+element-plus+husky+commitzen搭建项目

    1 1 编辑器统一编码规范 http editorconfig org root true 表示所有文件适用 charset utf 8 设置文件字符集为 utf 8 indent style space 缩进风格 tab space in
  • 【WIFI】WIFI基本知识汇总

    这里对wifi的802 11协议中比较常见的知识做一个基本的总结和整理 便于后续的学习 因为无线网络中涉及术语很多 并且许多协议都是用英文描述 所以有些地方翻译出来会有歧义 这种情况就直接英文来描述了 主要内容 目录 一 基本概述 1 有线
  • Concurrent Mark Sweep(cms)垃圾回收器

    好长时间没写过博客了 突发奇想 开始写下最近几年的积累吧 先从Concurrent Mark Sweep cms 开始 希望自己没有太懒吧 坚持写完吧 先介绍以下概念 GC ROOT 这里我引用下RednaxelaFX的原话 所谓 GC r
  • Linux串口相关的操作及绑定

    Linux串口相关的操作及绑定 操作串口出现权限不足情况处理 要查看某个串口的波特率等信息 cat打印串口数据 排查问题常用方法 1 查看串口是否可用 2 查看串口名称使用 3 查看串口驱动 4 查看串口设备 5 查一下板子上的串口有没有设

随机推荐

  • 【策略工厂模式】使用策略工厂模式解决if else过多的问题

    目录 一 为什么要用策略工厂解决问题 1 1 使用策略模式之前 1 2使用策略模式之后 二 怎么用策略工厂模式解决问题 2 1 创建枚举类 2 2 创建抽象类 2 3 创建工厂类 2 4 编写子类型 三 意义 一 为什么要用策略工厂解决问题
  • Tensorflow加载预训练模型和保存模型(ckpt文件)以及迁移学习finetuning

    转载自 https blog csdn net huachao1001 article details 78501928 使用tensorflow过程中 训练结束后我们需要用到模型文件 有时候 我们可能也需要用到别人训练好的模型 并在这个基
  • 快速理解图神经网络(GCN)

    网上对图卷积神经网络 Graph Convolutional Networks 的介绍大都说的云里雾里 让人看了不甚明白 无意中找到了篇很好的文章 对图神经网络中 f H i A
  • 前端下载二进制流文件

    前端下载文件有两种方法 第一种 后台直接返回下载流格式的文件地址 前端用a标签新开窗口或者window open 下载即可 另外一种 后台返回二进制流文件内容 前端通过blob进行转化后再下载 具体代码 async downloadFn t
  • pyautogui.locateOnScreen()扫描屏幕返回none问题

    我们有一张这样的图片 我们想用pyautgui模块的locateOnScreen 定位该图片在屏幕对应的位置 发现屏幕中明明存在改图片 但是扫描失败 找不到该图片 如下两张图 我们给locateOnScreen 括号里添加confidenc
  • Linux——主函数的三个参数,printf方法的隐藏缓冲区

    主函数的三个参数 在windows下 c语言的主函数默认有两个参数 很多人会惊奇 这是什么 好像从没有听说过 我们在写C代码的时候都是习惯性的新建空项目然后自己添加 cpp文件 但是可能有部分人习惯直接新建控制台程序 然后可能就会看到这么一
  • 对你的屁股好一点!

    作为软件开发人员 买一把上乘的电脑椅也许是你能做的最明智的投资之一 事实上 在过去几年看过各种各样的椅子之后 我得出了一个结论 如果你想买一把上乘的椅子 你要花的钱不会少于500美元 如果你在座椅上花的钱没那么多 除非你正在经历那场跨世纪互
  • 技术博客写作「个人经验分享」

    技术博客写作 个人经验分享 仔细想来 从19年我刚开始试着技术写作算起 已经过去了好几年时间 刚好趁着这次的 赠送奖牌活动 奖牌很好看 我很想要hhh 来分享一下我关于技术博客写作的一些个人经验 文章目录 技术博客写作 个人经验分享 Wha
  • 新装机电脑网速特别慢

    老主机最近有些问题 我一直没能解决 也用了5年了 索性出给闲鱼二道贩子 又自己新配置了一台主机 具体表现为 主机插网线后 跟之前主机比 浏览网页或者下载资源速度特别慢 打开百度浏览器都要转上一会 不管下载什么资源 下载速度最快只有100 2
  • Redis面试题整理

    1 什么是Redis以及Redis的优缺点 Redis是一个非关系型数据库 NO SQL 类似于Java中Map 其中key为字符串类型 Redis支持的Value类型有5种 字符串 String 列表 List 集合 set 散列表 Ha
  • 【Python技巧】python字符串编码全是Unicode,Unicode压缩到utf-8,encode和decode,bytes

    一 Python3字符串全是Unicode 这意味着 只要用python3 x 无论我们的程序以那种语言开发 都可以在全球各国电脑上正常显示 python3 x中 把字符串变成了unicode 文件默认编码为utf 8 unicode 分为
  • Acwing 893. 集合-Nim游戏

    Mex运算 设S表示一个非负整数集合 定义mex S 为求出不属于集合S的最小非负整数的运算 即 mex S min x x属于自然数 且x不属于S SG函数 在有向图游戏中 对于每个节点x 设从x出发共有k条有向边 分别到达节点y1 y2
  • Linux文件恢复

    0 前言 用rm命令多了 难免会出现误删文件的情况 本人就在Ubuntu14 04中做项目时遇到该问题 本来想使用rm命令删除以14开头的文件 结果写成如下形式 导致文件被误删 rm 14 14 和 误增了一个空格 1 工具 ext3和ex
  • C语言程序设计基础OJ练习题(实验六一维数组)

    一 C语言实验 最值 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 有一个长度为n的整数序列 其中最大值和最小值不会出现在序列的
  • 网站接入CDN显示不正常无法加载HTTPS样式表

    网站接入腾讯云内容分发网络CDN后 显示不正常 网站加载的CSS样式表HTTP协议 无法加载HTTPS 如何解决 解决方法 修改回源协议为HTTPS即可 腾讯云CDN网站HTTPS样式表无法载入的解决方法 网站接入腾讯云CDN后 网站显示不
  • IOCTL命令号

    IOXX是驱动IOCTL命令号的宏转换定义 用于对命令进行分类 防止不同类驱动程序具有相同命令号 导至误打开驱动程序而驱动程序功能调用被误操作 命令码的组织是有一些讲究的 因为我们一定要做到命令和设备是一一对应的 这样才不会将正确的命令发给
  • 记一次生产环境tomcat线程数打满情况分析

    前言 旨在分享工作中遇到的各种问题及解决思路与方案 与大家一起学习 学无止境 加油 Just do it 问题描述 运行环境描述 tomcat 8 5 单节点 该应用集群20个节点 avg tps 250 max tps 350 tomca
  • HDFS客户端写流程

    HDFS客户端写流程 1 创建文件 首先调用DistributedFileSystem creat 创建一个空的HDFS文件 然后这个方法在底层会通过调用ClientProtocol create 方法通知Namenode执行对应的操作 N
  • Flutter开发之——单组件布局容器-FittedBox

    一 概述 当子组件的宽高比和父组件的宽高比不一样时 我们等比拉伸或者填充父组件 这时我们可以使用FittedBox 二 FittedBox 2 1 构造方法 const FittedBox Key key this fit BoxFit c
  • 区块链学习——区块链的技术栈

    摘要 我在区块链学习的上一篇博文 链接 区块链学习 区块链技术理念与工作流程中 简单介绍了区块链的技术理念以及工作流程 本文我将继续介绍区块链技术栈 我们知道 区块链本身只是一个数据的记录格式 就像们平时使用Excel表格 Word文档一样