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…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
