当前位置: 首页 > news >正文

区块链的运行原理与演示

目录

前言

具体演示

1、在浏览器中输入区块链演示网址:

2、创建新区块

3、篡改区块信息使其无效

4、新增P2P 网络节点。

 5、节点连接。

6、区块信息同步

总结


前言

        区块链系统是由一系列分布在全球各地的分布式节点组成的。这些节点互不隶属,通过专门的网络协议进行连接,从而构成一种在对等者(Peer)之间分配任务和工作负载的分布式对等计算机网络,我们通常将其称为P2P(PeertoPeer)网络。P2P网络的相关知识,在此先不赘述。
        构成区块链的去中心化P2P网络中的第一个节点被初始化并生成创世区块以后,后续运行通常包括以下几个主要步骤。
(1)添加新节点(数据上链)。
(2)节点加入后同步最新的区块链数据。
(3)节点生成的区块向网络中其他节点进行广播,其他节点收到广播后开始判断是否已经收到过该区块,若收到就忽略,否则将验证其有效性,有效的区块会被收到广播的节点添加到自身节点的区块链中。
        下面通过一个区块链演示网站来直观地了解区块链具体是如何运行的。


具体演示

1、在浏览器中输入区块链演示网址:

Blockchain Demo - A visual demo of blockchain technologyicon-default.png?t=N7T8https://blockchaindemo.io/

介绍页面的元素

2、创建新区块

在操作页面底部的"DATA

文本框中输入“New Block 1”,并单击“ADD NEW BLOCK”按钮来添加一个新区块。同样,在下面在添加内容为“New Block 2”的新区块。该演示网站会自动为这两个新区块生成有效的哈希值,并将这两个新区块与之前的区块依次连接起来。(操作和结果如下图)

3、篡改区块信息使其无效

        由于当前区块的哈希值由区块的数据、父区块哈希值、区块索引、时间戳、随机数等一起生成,其中任何一个数据的改动皆会导致区块哈希值的变化,而该哈希值的变化又会导致区块无效,即当前区块哈希值可能不再以“000”作为开头。例如,将“BLOCK#1”区块的“DATA”内容修改为“Block Changed”,则对应的哈希值随之发生改变,区块哈希值的颜色也从绿色(代表有效)变成红色(代表无效),如图。


        由于后续区块用到了前序区块的哈希值,因此一个无效区块将导致后续所有区块无效,从而产生断链。该演示网站提供了区块修复功能。若要修复无效的区块,单击每个区块右下角的修复按钮,对每个区块再重新计算一遍哈希值即可,演示结果如图修复后的区块哈希值又会重新变成绿色,即恢复至有效状态。

4、新增P2P 网络节点。

        单击操作页面右上角的“Add Peer”按钮即可新增一个节点(节点名称自动生成), 此时该模拟区块链中将存在两个节点, 分别为“Satoshi”与“Peter”,如图所示。若要切换节点,只需单击相应节点即可。节点有3 种显示颜色,其中蓝色表示当前节点,绿色表示节点和当前节点相连,红色表示节点未和当前节点相连。红色节点下面有一个按钮用来进行连接,鼠标指针悬浮于该按钮上,则该按钮将显示为绿色,单击该按钮即可进行节点连接。(这个Peter是随机生成的名字)


 5、节点连接。

        单击节点“Peter”下的连接按钮进行连接后,可看到该节点颜色变成绿色,表示已经连接,并且节点下面多了一个按钮,即消息列表按钮,节点右上角的数字表示消息的个数,如图 所示。单击消息列表按钮,即可显示消息记录,如图 所示。消息列表中会显示每个连接、区块请求、区块发送等相关信息。

6、区块信息同步

节点之间会互相同步区块信息。点击“Peter”节点。可以看到该节点下也包含“Satoshi”节点的3个区块。


总结

        通过上述模拟生成区块链的过程,我们能够对区块链的运行原理和区块同步过程等有较为直观的认识。区块链的节点始终都将最长的链条作为正确的链,并持续延长和维护该链。当节点发现更长的链条并且自身链条不是最新链时,就会使用最长的链条来替换自身链条。当一个节点判断出自身区块链是最新的,再接收到新的区块信息时,节点将会把新的区块添加到自身链条最后。

相关文章:

  • Vue 离线地图实现
  • 蓝桥杯2023(十四届)省赛——统计日期(八重神子)
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(2)
  • Android视频开发入门指南
  • 云原生Kubernetes: K8S 1.26版本 部署KubeSphere
  • 关于如何创建一个可配置的 SpringBoot Web 项目的全局异常处理
  • Excel模板计算得出表格看板
  • 如何在Python爬蟲中設置代理伺服器?
  • 民国漫画杂志《时代漫画》第18期.PDF
  • 阿木实验室联合openEuler开源社区-Embedded SlG组(海思项目)参加第五届「开源之夏」,参赛学生火热招募中...
  • ARP基本原理
  • 【Python设计模式14】状态模式
  • 决策树最优属性选择
  • 2024最新 Jenkins + Docker 实战教程(四) - 编写自己的Springboot项目实现自动化部署
  • Apache JMeter操作
  • 230. Kth Smallest Element in a BST
  • Android Volley源码解析
  • CSS实用技巧
  • iOS | NSProxy
  • Java 网络编程(2):UDP 的使用
  • JS函数式编程 数组部分风格 ES6版
  • js继承的实现方法
  • JS字符串转数字方法总结
  • LintCode 31. partitionArray 数组划分
  • quasar-framework cnodejs社区
  • spring学习第二天
  • SQLServer之创建数据库快照
  • Xmanager 远程桌面 CentOS 7
  • 前端工程化(Gulp、Webpack)-webpack
  • 数组大概知多少
  • 网页视频流m3u8/ts视频下载
  • 学习HTTP相关知识笔记
  • 栈实现走出迷宫(C++)
  • 正则与JS中的正则
  • 字符串匹配基础上
  • $$$$GB2312-80区位编码表$$$$
  • $(selector).each()和$.each()的区别
  • (9)STL算法之逆转旋转
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (二)学习JVM —— 垃圾回收机制
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (算法)求1到1亿间的质数或素数
  • (一)u-boot-nand.bin的下载
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .bat批处理(一):@echo off
  • .net core 6 集成和使用 mongodb
  • .Net Core和.Net Standard直观理解
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 服务 ServiceController
  • .NET 解决重复提交问题
  • .NET技术成长路线架构图
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @AutoConfigurationPackage的使用