0基础学习区块链技术——去中心化

“去中心化”是区块链技术的核心。那么我们该如何理解这个概念呢?
我们可以假想在一次现实转账中,有哪些“中心化”的行为:

  • 判断余额是否足够。即判断转出的钱是否少于账户里剩余的钱,能够判断的是账户所在的银行。

如果余额足够,在不发生其他意外的情况下,应该还有如下行为:

  • 转账发起方的余额要做相应减少。能够做这样操作的是发起方账号所在的银行。
  • 转账接收方的余额要做相应增加。能够做这样操作的是接收方账号所在的银行。
  • 记录转账记录。转账发起和接收方都要记录这笔交易,从而方便回溯资金变动。

在这样的交易过程中,每个连接都是单点的。
在这里插入图片描述
假如银行系统出现问题,或者银行变得不可信,可能它会吞掉这笔转账,即从发起方的账户中扣掉了钱,而收款方并没有收到。
在这里插入图片描述
还可能收款方系统出现问题,或者收款方银行变得不可信。
在这里插入图片描述
这在我们日常生活中不太常见,毕竟一般我们资金流动都发生在国内银行间。这些银行会受到银监会监管,它们一般不敢胡作非为。
但是如果这样的交易发生在国与国之间,事情就会变得不太一样。因为国与国之间的利益是非常容易发生分歧的,而各国银行也不太会听其他国家的号召,所以没法保证公正性。比如这次俄乌战争,美国就冻结了俄罗斯大量海外资产。
如何避免这样的情况?那就要去中心化,即谁都没有不对等的权力可以干涉他人资产。美国冻结俄罗斯海外资产就是因为美国政府对这些银行的影响力(权力)要高于俄罗斯。而且在区块链技术中,技术信奉的是规则以及计算能力,而不是世俗上的权力。从而可以排除人类这样一个极不稳定的因素影响。

回到“去中心化”这个议题。上述转账的过程,如何在区块链中去中心化的呢?

去验证的中心化

在传统转账中,验证余额是否足够发生在发起方账号所在的银行。要去掉这个中心,则让余额验证发生在多个非中心化的节点中,我们可以称之为验证节点。
在这里插入图片描述
这样的结构很容易想到,但是要回答如下几个问题:

  • 验证者如何能验证?
  • 验证者为什么要去传播?

验证者如何验证

验证余额是否足够就需要知道该用户的余额。在中心化方案中,这样的数据保存在中心化的存储上。而为了在去中心化的结构中,让验证者有余额信息,则需要验证者能够向其他有全量数据的节点请求到相关数据,或者验证节点自身就有该数据。
而且需要说明的是,区块链存储的只是交易信息,即转账发起方、接收方以及金额等数据,而不存在所谓的“余额”。这些数据都是用明文的形式保存在区块中,验证者需要读取整个区块链的交易记录来计算出发起方的“余额”。这样的好处是,每次验证都是从头到尾,完整链路的校验,而不是基于某时算出来的所谓的“余额”。当然这个方案的缺点就是计算量很大,很不方便。

验证者为什么要去传播

因为转账发起方会对每次转账支付一定金额的手续费。验证者将转账记录广播给更多的验证者以及矿工还有全节点(保存区块链全部信息的节点),这样大家就都能确认存在这样的一笔申请。当矿工生产出来的区块包含这笔交易记录,它就可能因此而获利。而且全节点确认接受这个区块加入链前,还是会对区块内的交易记录进行检查。如果验证者不将转账记录广播给更多节点,则会导致后续的验证不通过的概率大大增加,从而包含这块交易的区块不能被加入到链中,整个过程大家都不会得到收入。
在这里插入图片描述

去确认的中心化

矿工在验证完交易后,并不会将交易记录立即打包成区块——否则一个区块就是一条交易记录了——太浪费了。而是积累起来,并挑选出它觉得有价值的交易——比如给的手续费很多的交易,然后将这些交易记录进行打包。
打包涉及一个暴力计算过程,即原始数据加上不停变化的Nonce值,以尝试出一个符合某个特定规则的Hash值——比如前面8个数字是0的Hash。在比特币中,这个过程需要几分钟。
一旦一个矿工“碰撞”出一个匹配的Hash值,则可以认为它算出了区块,但是不能认为该区块被上链。这个时候矿工会向区块链网络广播该区块:
全节点在收到区块后会校验其合法性,比如Hash值,交易记录等。在确认都没有问题时,将该区块上链。后续达到的区块会被抛弃。
矿工节点收到该区块后会校验其合法性。如果合法,则终止自己的计算——这样可以节省自己的计算资源,何乐而不为,反正自己也抢不到这个区块了。如果不合法,就继续自己的计算,尝试争抢下合法的区块。
哪个矿工有更强大的算力,就更有可能第一个算出区块,进而也可能第一个被上链,进而获得奖励。所以在区块链中,交易被确认(上链)来源于算力,而不是某个人的权力。

去存储的中心化

当全节点将区块上链成功后,其他比它短的链会同步该长链的数据,这就是“最长链原则”。
这样交易记录就会分布在各个链上,而不会存储在某个链上,这样数据存储就去中心化了。
关于区块链直接数据同步的样例可以参考《0基础学习区块链技术——链之间数据同步样例》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读AI未来进行式笔记03自然语言处理技术

1. AI伙伴 1.1. 作为AI能力的集大成者,AI伙伴融合了各种复杂的AI技术 1.2. 人类唯一可能超越AI的领域,只可能在机器无法触及之处,那是属于人类感性与直觉的领域 1.3. 要读懂人类,需要漫长而平缓的学习过程 1.4. AI塑造了我们&…

I.MX RT1170之MIPI CSI摄像头初始化和显示流程详解

在上一篇文章I.MX RT1170之MIPI DSI初始化和显示流程详解中,我们介绍了RT1170单片机中MIPI DSI显示屏初始化和显示的详细步骤,那这一节就来介绍MIPI的另一个接口应用:摄像头CSI的初始化和配置流程。 对于摄像头来说,一般我们还要…

Adobe XD最新版号查询,如何使用?

Adobe XD是Adobe家推出的基于矢量的原型设计合作工具,被业界视为应对Sketch的“对抗”产品。Adobe XD不同于Sketch的系统限制,灵活性比较高,Windows和Mac都可以使用。自2017年推出以来,Adobe XD版经历了多次更新,这篇文…

Android RelativeLayout Rtl布局下的bug:paddingStart会同时作用于左右内边距

问题现象 如上图,只是设置了paddingStart,在RTL布局下,左右都产生了10dp的间距。其他布局如LinearLayout,FrameLayout则没有这个问题。 private void positionAtEdge(View child, LayoutParams params, int myWidth) {if (isLayou…

tensorrt-llm与vllm的量化性能比较

准备部署lora微调好的语言大模型,有tensorrt-llm和vllm两种加速策略可选,而量化策略也有llm.int8,gptq,awq可用, 怎样的组合才能获得最佳精度与速度呢,这是个值得探讨的问题,本文以llama-factor…

代理记账公司的五大问题及其解决方案

代理记账公司是现代企业管理中不可或缺的一部分,它为企业的日常运营提供了专业、高效的服务,随着行业的发展和竞争的加剧,代理记账公司的面临的问题也日益突出,这些问题主要表现在以下几个方面: 业务流程不规范 许多代…

【前端】display:none和visibility:hidden两者的区别

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。公粽号:洲与AI。 🤓 欢迎大家关注我的专栏,我将分享Web前后端开发、…

C语言 | Leetcode C语言题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; int minCut(char* s) {int n strlen(s);bool g[n][n];memset(g, 1, sizeof(g));for (int i n - 1; i > 0; --i) {for (int j i 1; j < n; j) {g[i][j] (s[i] s[j]) && g[i 1][j - 1];}}int f[n];for (int i 0; i <…

YOLOv8改进 | Conv篇 | 利用YOLOv10提出的C2fUIB魔改YOLOv8(附代码 + 完整修改教程)

一、本文介绍 本文给大家带来的改进机制是利用YOLOv10提出的C2fUIB模块助力YOLOv8进行有效涨点&#xff0c;其中C2fUIB模块所用到的CIB模块是一种紧凑的倒置块结构&#xff0c;它采用廉价的深度卷积进行空间混合&#xff0c;并采用成本效益高的点卷积进行通道混合。本文针对该…

AI大数据统计《庆余年2》中的小人物有哪些?

《庆余年2》除了主角表演经常&#xff0c;每个配角小人物也很出彩。那到底有哪些小人物呢&#xff1f; 在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要写一个Python脚本&#xff0c;具体步骤如下&#xff1a; 读取文档&#xff1a;"D:\qyn\…

数据结构与算法之Floyd弗洛伊德算法求最短路径

目录 前言 Floyd弗洛伊德算法 定义 步骤 一、初始化 二、添加中间点 三、迭代 四、得出结果 时间复杂度 代码实现 结束语 前言 今天是坚持写博客的第18天&#xff0c;希望可以继续坚持在写博客的路上走下去。我们今天来看看数据结构与算法当中的弗洛伊德算法。 Flo…

Leetcode3164. 优质数对的总数 II

Every day a Leetcode 题目来源&#xff1a;3164. 优质数对的总数 II 解法1&#xff1a;统计因子 遍历 nums1&#xff0c;统计所有元素的因子个数&#xff0c;记录到哈希表 cnt 中。 遍历 nums2&#xff0c;那么有 cnt[nums2[i]*k] 个数可以被 nums2[i]*k 整除&#xff0c;…

利用conda进行R的安装

1.miniconda3的安装 官网&#xff1a;Miniconda — Conda documentation 找到对应系统、Python版本下载 wget https://mirrors.ustc.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh #wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x…

信息系统项目管理师0141:产品范围和项目范围(9项目范围管理—9.1管理基础—9.1.1产品范围和项目范围)

点击查看专栏目录 文章目录 第9章 项目范围管理9.1 管理基础9.1.1 产品范围和项目范围 第9章 项目范围管理 项目范围管理包括确保项目做且只做所需的全部工作&#xff0c;以成功完成项目。项目范围管理主要在于定义和控制哪些工作应该包括在项目内&#xff0c;哪些不应该包含在…

Spring运维之boot项目开发关键之日志操作以及用文件记录日志

日志基础 日志 在企业级开发中还是比较重要的 我们来写一个日志 RestController RequestMapping("/books") public class Controller {//创建记录日志的对象private static final Logger log LoggerFactory.getLogger(Controller.class);GetMappingpublic String …

java自学阶段二:JavaWeb开发60(mybatis学习)

目录&#xff1a; 学习目标mybatis的基础用法&#xff08;新增、删除、修改、查询&#xff09; 一&#xff1a;学习目标&#xff1a; 1&#xff09;了解mybatis的基础概念&#xff1b; 2&#xff09;学会mybatis的基础用法&#xff1b; 二、mybatis的基础概念&#xff1a; M…

在Cisco Packet Tracer上配置NAT

目录 前言一、搭建网络拓扑1.1 配置PC机1.2 配置客户路由器1.3 配置ISP路由器 二、配置NAT2.1 在客户路由器中配置NAT2.2 测试是否配置成功 总结 前言 本篇文章是在了解NAT的原理基础上&#xff0c;通过使用Cisco Packet Tracer 网络模拟器实现模拟对NAT的配置&#xff0c;以加…

C++ | Leetcode C++题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; class Solution { public:int minCut(string s) {int n s.size();vector<vector<int>> g(n, vector<int>(n, true));for (int i n - 1; i > 0; --i) {for (int j i 1; j < n; j) {g[i][j] (s[i] s[j]) &…

Jenkins+Rancher2.7部署构建

在Jenkins中使用rancher插件时需要去查找工作负载地址 在Rancher2.7没有查看Api按钮了需要自己去查找 1.进入https://192.168.x.xx:6443/v3/projects/ 2.输入在rancher中要查找的的项目名称并点击deployment连接进入下一个页面 3.找到自己的deployment随便点一个进去 4.浏览…

Nginx设置缓存后,访问网页404 问题原因及解决方案(随手记)

目录 问题描述Nginx文件 解决方案查看error_log日志问题原因修改文件并测试Nginx文件测试 总结 问题描述 在Nginx中设置缓存expires后&#xff0c;结果重启nginx&#xff0c;网站访问404了。 Nginx文件 server {listen 80;server_name bird.test.com;location / {root /app/…