0基础学习区块链技术——去中心化
大纲
- 去验证的中心化
- 验证者如何验证
- 验证者为什么要去传播
- 去确认的中心化
- 去存储的中心化
“去中心化”是区块链技术的核心。那么我们该如何理解这个概念呢?
我们可以假想在一次现实转账中,有哪些“中心化”的行为:
- 判断余额是否足够。即判断转出的钱是否少于账户里剩余的钱,能够判断的是账户所在的银行。
如果余额足够,在不发生其他意外的情况下,应该还有如下行为:
- 转账发起方的余额要做相应减少。能够做这样操作的是发起方账号所在的银行。
- 转账接收方的余额要做相应增加。能够做这样操作的是接收方账号所在的银行。
- 记录转账记录。转账发起和接收方都要记录这笔交易,从而方便回溯资金变动。
在这样的交易过程中,每个连接都是单点的。

假如银行系统出现问题,或者银行变得不可信,可能它会吞掉这笔转账,即从发起方的账户中扣掉了钱,而收款方并没有收到。

还可能收款方系统出现问题,或者收款方银行变得不可信。

这在我们日常生活中不太常见,毕竟一般我们资金流动都发生在国内银行间。这些银行会受到银监会监管,它们一般不敢胡作非为。
但是如果这样的交易发生在国与国之间,事情就会变得不太一样。因为国与国之间的利益是非常容易发生分歧的,而各国银行也不太会听其他国家的号召,所以没法保证公正性。比如这次俄乌战争,美国就冻结了俄罗斯大量海外资产。
如何避免这样的情况?那就要去中心化,即谁都没有不对等的权力可以干涉他人资产。美国冻结俄罗斯海外资产就是因为美国政府对这些银行的影响力(权力)要高于俄罗斯。而且在区块链技术中,技术信奉的是规则以及计算能力,而不是世俗上的权力。从而可以排除人类这样一个极不稳定的因素影响。
回到“去中心化”这个议题。上述转账的过程,如何在区块链中去中心化的呢?
去验证的中心化
在传统转账中,验证余额是否足够发生在发起方账号所在的银行。要去掉这个中心,则让余额验证发生在多个非中心化的节点中,我们可以称之为验证节点。

这样的结构很容易想到,但是要回答如下几个问题:
- 验证者如何能验证?
- 验证者为什么要去传播?
验证者如何验证
验证余额是否足够就需要知道该用户的余额。在中心化方案中,这样的数据保存在中心化的存储上。而为了在去中心化的结构中,让验证者有余额信息,则需要验证者能够向其他有全量数据的节点请求到相关数据,或者验证节点自身就有该数据。
而且需要说明的是,区块链存储的只是交易信息,即转账发起方、接收方以及金额等数据,而不存在所谓的“余额”。这些数据都是用明文的形式保存在区块中,验证者需要读取整个区块链的交易记录来计算出发起方的“余额”。这样的好处是,每次验证都是从头到尾,完整链路的校验,而不是基于某时算出来的所谓的“余额”。当然这个方案的缺点就是计算量很大,很不方便。
验证者为什么要去传播
因为转账发起方会对每次转账支付一定金额的手续费。验证者将转账记录广播给更多的验证者以及矿工还有全节点(保存区块链全部信息的节点),这样大家就都能确认存在这样的一笔申请。当矿工生产出来的区块包含这笔交易记录,它就可能因此而获利。而且全节点确认接受这个区块加入链前,还是会对区块内的交易记录进行检查。如果验证者不将转账记录广播给更多节点,则会导致后续的验证不通过的概率大大增加,从而包含这块交易的区块不能被加入到链中,整个过程大家都不会得到收入。

去确认的中心化
矿工在验证完交易后,并不会将交易记录立即打包成区块——否则一个区块就是一条交易记录了——太浪费了。而是积累起来,并挑选出它觉得有价值的交易——比如给的手续费很多的交易,然后将这些交易记录进行打包。
打包涉及一个暴力计算过程,即原始数据加上不停变化的Nonce值,以尝试出一个符合某个特定规则的Hash值——比如前面8个数字是0的Hash。在比特币中,这个过程需要几分钟。
一旦一个矿工“碰撞”出一个匹配的Hash值,则可以认为它算出了区块,但是不能认为该区块被上链。这个时候矿工会向区块链网络广播该区块:
全节点在收到区块后会校验其合法性,比如Hash值,交易记录等。在确认都没有问题时,将该区块上链。后续达到的区块会被抛弃。
矿工节点收到该区块后会校验其合法性。如果合法,则终止自己的计算——这样可以节省自己的计算资源,何乐而不为,反正自己也抢不到这个区块了。如果不合法,就继续自己的计算,尝试争抢下合法的区块。
哪个矿工有更强大的算力,就更有可能第一个算出区块,进而也可能第一个被上链,进而获得奖励。所以在区块链中,交易被确认(上链)来源于算力,而不是某个人的权力。
去存储的中心化
当全节点将区块上链成功后,其他比它短的链会同步该长链的数据,这就是“最长链原则”。
这样交易记录就会分布在各个链上,而不会存储在某个链上,这样数据存储就去中心化了。
关于区块链直接数据同步的样例可以参考《0基础学习区块链技术——链之间数据同步样例》
相关文章:
0基础学习区块链技术——去中心化
大纲 去验证的中心化验证者如何验证验证者为什么要去传播 去确认的中心化去存储的中心化 “去中心化”是区块链技术的核心。那么我们该如何理解这个概念呢? 我们可以假想在一次现实转账中,有哪些“中心化”的行为: 判断余额是否足够。即判断…...
索引的强大作用和是否创建的索引越多越好
在经常查询字段上创建索引。 在大数据的情况下,在索引上查找可以提交10倍以上甚至1000倍的速度。 实际测试,不在索引上查找用时12秒左右。建立索引,在索引上查找速度提高只耗时1.1秒左右。当然索引也是一把双刃剑,在一个表上创建索…...
批量GBK转UTF-8
大家都有这样的需求,把GBK编码的源代码转换成utf-8编码的源代码。 毕竟现在UTF-8的支持是很好的。 以前一些旧代码是GBK的,尤其是里面的注释,如果不采用UTF-8,在vscode里面可能看着就是乱码。 试了各种工具,最后发现…...
C#WPF数字大屏项目实战08--生产量/良品统计
1、区域划分 生产量/良品统计这部分位于第二列的第二行 2、livechart拆线图 定义折线图,如下: <lvc:CartesianChart> <lvc:CartesianChart.Series> <!--设置Series的类型为 Line 类型, 该类型提供了一些折线图的实现--> <lvc:LineSeries/>…...
22、matlab锯齿波、三角波、方波:rectpuls()函数/sawtooth()函数/square()函数
1、采样的非周期性矩形 语法 语法1:y rectpuls(t) 返回一个以数组 t 中指示的采样时间采样的连续非周期性单位高度矩形脉冲,该矩形脉冲以 t 0 为中心。 语法2:y rectpuls(t,w) 生成一个宽度为 w 的矩形 参数 t:采样时间 w:矩形宽度…...
手机和WINDOWS电脑蓝牙连接后怎样放歌,无法选择媒体音频 蓝牙媒体音频勾选不上
手机和电脑蓝牙连接后怎样放歌 要将手机通过蓝牙连接到电脑并播放音乐,可以按照以下步骤操作: 确保手机和电脑都支持蓝牙功能,并且蓝牙功能已经开启。 在电脑上,打开“设置”> “设备”> “蓝牙和其他设备”。 点击“添…...
MatrixOne→MatrixOS:矩阵起源的创业史即将用“AI Infra”和“AI Platform”书写新章程
在数字化浪潮的推动下,MatrixOne的故事就像一部科技界的创业史诗,它始于一个简单而宏伟的梦想——构建一个能够支撑起新一代数字世界的操作系统。想象一下,在AIGC时代,数据流动如同“血液”,算法运转如同“心跳”&…...
vue3将自定义组件插入指定dom
需求简要描述 页面渲染了一个 id 为 videoPlayerId 的div盒子,代码自定义了一个名为CustomComponent 的组件,现在需要在vue3中,通过纯 js 的方式将组件 CustomComponent 插入 videoPlayerId 的div中,作为其子节点。 实现代码 C…...
flutter封装日历选择器(单日选择)
简单封装: 引入库:table_calendar import package:generated/l10n.dart; import package:jade/utils/JadeColors.dart; import package:jade/utils/Utils.dart; import package:util/easy_loading_util.dart; import package:flutter/material.dart; im…...
SwiftUI调用相机拍照
在 SwiftUI 中实现拍照功能,需要结合 UIViewControllerRepresentable 和 UIImagePickerController 来实现相机功能。下面是一个详细的示例,展示如何使用 SwiftUI 来实现拍照功能: 1. 创建一个 ImagePicker 组件 首先,创建一个 U…...
elasticsearch (dsl)
正排索引 和 倒排索引 正排索引:通过id ,查询content 倒排索引:通过content,查询到符合的 ids eg: 正排索引就是通过《静夜思》,找到整片文章。 倒排索引通过“明月”,找到《静夜思》 《望…...
聊聊大模型微调训练全流程的思考
前言 参考现有的中文医疗模型:MedicalGPT、CareGPT等领域模型的训练流程,结合ChatGPT的训练流程,总结如下: 在预训练阶段,模型会从大量无标注文本数据集中学习领域/通用知识;其次使用{有监督微调}(SFT)优化…...
Python变量符号:深入探索与实用指南
Python变量符号:深入探索与实用指南 在Python编程的世界中,变量符号扮演着至关重要的角色。它们不仅是存储数据的容器,更是构建复杂逻辑和算法的基础。然而,对于初学者来说,Python的变量符号可能会带来一些困惑和挑战…...
实验八 页面置换模拟程序设计
网上找到的程序得到的答案经过手算验证是错的,所以自己实现了一个,具体实现看代码吧,多余的操作已经去掉了。 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>#define VM_PAGE 7 /*假设每个页面可以存放10…...
Spring类加载机制揭秘:深度解析“卸载”阶段
1. 引言 在Spring框架中,类的加载和卸载是一个复杂但至关重要的过程。加载主要涉及将类的字节码加载到JVM中,创建对应的Class对象,并准备使其可用的过程。而卸载,则是指当一个类不再被需要时,将其从JVM中清除…...
Jupyter Notebook快速搭建
Jupyter Notebook why Jupyter Notebook Jupyter Notebook 是一个开源的 Web 应用程序,允许你创建和分享包含实时代码、方程、可视化和解释性文本的文档。其应用包括:数据清洗和转换、数值模拟、统计建模、数据可视化、机器学习等等。 Jupyter Notebo…...
Linux C语言:数组的定义和初始化
一、数组 1、定义 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来,具有一定顺序关系的若干个变量的集合就是数组 。 2、特点 组成数组的各个变量称为数组的元素数组中各元素的数据类型要求相同元素在内存中是连…...
spring框架限制接口是否要登录过才能访问
1、引入spring 、spring boot依赖,这部分不再多说,正常开发spring boot项目就可以。 2、定义类,实现WebMvcConfigurer接口 package com.hmblogs.config;import com.hmblogs.config.web.interceptor.PortalTokenInterceptor; import org.spri…...
【全开源】废品回收垃圾回收小程序APP公众号源码PHP版本
🌟废品回收小程序:绿色生活的新助手🌱 一、引言 随着环保意识的逐渐提高,废品回收成为了我们日常生活中的重要一环。但是,如何更方便、高效地进行废品回收呢?今天,我要向大家推荐一款超级实用…...
勒索软件分析_目标文件扫描行为分析
BlackBasta首先通过 FindFirstVolumeW 与 FindNextVolumeW 实现系统中第一个卷的搜索和其余卷的遍历,之后通过 GetVolumePathNamesForVolumeNameW 检索指定卷的驱动器号和挂载的文件夹路径列表,然后通过 GetVolumeInformationW 获取关于指定卷的信息,具体代码如下所示。 Fin…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
