0基础学习区块链技术——链之间数据同步样例

2024-06-05 07:12

本文主要是介绍0基础学习区块链技术——链之间数据同步样例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们可以在https://blockchaindemo.io/体验这个过程。

创建区块

默认第一个链叫Satoshi(中本聪)。链上第一个区块叫“创世区块”——Genesis Block。后面我们会看到创建的第二条链第一个区块也是如此。
在这里插入图片描述
在这里插入图片描述

新增链

在这里插入图片描述
新创建的链叫Debby。默认上面有一个创世区块。
在这里插入图片描述
然后我们让这个链和其他链(Satoshi)连接。
在这里插入图片描述
在这里插入图片描述
如上图,Satoshi链是标蓝的,即当前链。Debby上的数字7,表示Satoshi链上发生了7次行为。
在这里插入图片描述
我们看下这7条消息。
在这里插入图片描述
这是Satoshi链的视角。

  • 连接到Debby链。
  • 向Debby要它的最后一个区块。
  • Debby向我要我的最后一个区块。
  • 我向Debby发送我的最后一个区块。
  • Debby把它最后一个区块发给我了。
  • 判断出Debby的最后一个区块的索引并没有我大,所以我什么都不要做。因为之前我们在Satoshi上创建了一个区块,所以有两个区块。而Debby是新创建的链,它上面只有一个创世区块。Debby最后一个区块的索引是0,Satoshi最后一个区块的索引是1。
  • Debby把它最后一个区块发给我了。
  • 判断出Debby的最后一个区块的索引并没有我大,所以我什么都不要做。

我们再切换到Debby视角来看
在这里插入图片描述
可以看到Debby已经同步了Satoshi的链上所有区块了。
在这里插入图片描述

  • Satoshi和我连接上了。
  • 向Satoshi要它的最后一个区块。
  • Satoshi将它最后一个区块发给我了。
  • Satoshi最后一个区块的Pre hash和我最后一个区块的Hash一致,于是我们将该区块添加到我这条链上。
  • Satoshi向我要我的最后一个区块。
  • 向Satoshi发送我的最后一个区块。
  • 向Satoshi发送我的最后一个区块。

区块链直接替换

在上面的例子中,Debby收到的Satoshi最后一个区块,这个区块的Pre Hash正好是Debby最后一个区块的Hash。这样Debby就直接把这个区块加入自己的链上。
如果链上区块差距比较多,那是怎么做的呢?我们可以继续做实验。
我们在Debby链上新增一个区块
在这里插入图片描述
我们看下Debby链上的行为,主要集中在新增区块后的行为
在这里插入图片描述

  • 向Satoshi发送我的最后一个区块。
  • Satoshi给我发送了它的最后一个区块。
  • 判断出Satoshi最后一个区块索引并不比我大,所以我什么都不用做。这个是正确的,因为我们第二次新增的区块是在Debby上,所以它的最后一个区块不可能比Satoshi最后一个区块的索引小。

我们再切换到Satoshi视角,可以看到它已经同步了Debby链上数据
在这里插入图片描述
Satoshi视角看在Debby上新增一个区块后的行为
在这里插入图片描述

  • Debby向我发送了它的最后一个区块。
  • 判断出Debby的最后一个区块索引的Pre Hash和我的最后一个区块的Hash一致,我就将这个区块直接加入我的链上。
  • 向Debby发送我的最后一个区块。

上面的情况都是在链不一致时,由于只是差一个区块,于是就在当前链上直接追加这个区块。
我们再新建一个新链,它和老链Satoshi和Debby差两个区块。
新建的区块链叫Tony。我们让它和Satoshi同步数据。
在这里插入图片描述
在这里插入图片描述

  • Satoshi和我连接上了。
  • 我向Satoshi要它的最后一个区块。(已经领先2个区块了)
  • Satoshi将它的最后一个区块发送给我。
  • 我向Satoshi要它的全部区块。
  • Satoshi将它的所有区块发送给我。
  • 判断出Satoshi的区块链比我的长,我直接用它的全部区块链来替换我的区块链
  • Satoshi找我要我的最后一个区块。
  • 我向Satoshi发送我的最后一个区块。
  • 我向Satoshi发送我的最后一个区块。

我们再切换到Satoshi的视角,看它和Tony的数据同步
在这里插入图片描述
在这里插入图片描述

  • 我连接到Tony。
  • 我找Tony要它的最后一个区块。
  • Tony找我要我的最后一个区块。
  • Tony找我要我的全部区块链。
  • 我向Tony发送我的完整的区块链。
  • 我向Tony发送我的最后一个区块。
  • Tony把它的最后一个区块发送给我了。
  • 判断出Tony的最后一个区块的索引没有我的大,所以我什么都不用做。
  • Tony把它的最后一个区块发送给我了。
  • 判断出Tony的最后一个区块的索引没有我的大,所以我什么都不用做。

这篇关于0基础学习区块链技术——链之间数据同步样例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032405

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口