区块链运行原理

文章目录

  • 前言
  • 区块链的结构
  • 区块链的交易过程
  • 区块链的共识机制
  • 区块链交易存在的问题
  • 特性总结

前言

上文《认识区块链》中可以知道区块链是一个通过各种加密算法、共识机制以及其他技术可以实现一个点对点的电子现金系统,从而达到去第三方的效果(通常称之为去中心化)。本文将从区块链的内部结构、交易的过程、如何对一笔交易达成共识以及交易存在的问题详细介绍区块链是如何运行的,并且在此过程中了解区块链更多的特性。

区块链的结构

在我们网购过程中,当一笔交易发生时,第三方交易平台(淘宝、京东)会对用户的账户进行资产增减操作并记录交易信息,这些数据都会存储在平台的数据库中。那么在区块链的世界中这些信息是怎样被记录的?

在这里插入图片描述

首先在区块链的世界中用户的账户密码是以私钥和公钥的形式存在。私钥是随机生成的,相当于密码,由用户自己掌握,如果私钥丢失后无法像平台一样找回密码,就相当于丢钱。而公钥则是曲线加密生成,相当于账户,在全网公开,用于账户之间的转账,二者存在数学验证关系,只能通过私钥单向的计算出公钥,所以通过私钥可以证实你是这个公钥的持有者。

当两个账户(公钥)发生交易后,交易记录最终会被打包到一个区块中,而区块会按照时间顺序连接成一条链,最终形成了逻辑上的区块链。

这里要提一下在区块链中是如何记录账户余额的。
在传统账户中余额就是一个账户的最终状态,改变余额直接在其基础上增加或减少即可。而在区块链中记录账户余额有个专业的名词 UTXO(Unspent Transaction Output ),翻译过来就是未花费的交易输出
在这里插入图片描述

如何理解?如上图,当账户A像账户B转账30个BTC,那么账户A会将自己的余额作为交易的输入,而输出则是给账户B的30,剩余的20又作为输出转给了自己,那么账户B的余额则为未花费的交易输出30,账户A的余额则为未花费的交易输出20。

区块链的交易过程

在区块链中达成交易需要经过以下几个环节:

  1. 发起交易:如果A要向B转账,那么A会全网广播一条消息,这条信息中包括付款人A的账户地址、收款人B账户地址、付款人A的资金来源、转账的数量以及A的数字签名。在这里插入图片描述

  2. 验证交易:在网络中的记账者们(矿工)在接收到交易消息后会验证付款人/收款人的地址是否存在、付款人A资金是否足够以及通过数字签名验证消息的真实性,验证通过后会将该交易消息记录下来,组成备用区块。

  3. 竞争记账权(挖矿):由于在网络中存在大量的记账者,且都会维护一本账单,那新的区块应该记录哪个记账者的账本呢?区块链中通过共识机制对此行为达到共识。

  4. 打包区块:当某个记账者竞争到记账权后,会将自己本地某一段时间的交易打包到区块,并让全网的记账者接受这个区块。

  5. 验证区块:当其他的记账者接收到区块后会验证几点来证明区块的真实有效。

    1. 验证父哈希是否与自己的匹配 。
    2. 验证区块中所记录的所有交易。
    3. 验证区块中的头哈希是否与账单匹配。

当区块被验证通过后,其他记账者们也就很遗憾的将这个区块同步到区块链上,并且基于新的区块进行记账。为什么遗憾呢?因为竞争到记账权的矿工会得到相应的奖励,比特币的网络中现在每挖一个区块会奖励6.25个BTC,也就是18万美元而已😜。

在这里插入图片描述

区块链的共识机制

说到共识,大家应该都知道Paxos、raft一致性算法,为了某个值达成一致,但是使用该算法的前提是不存在拜占庭将军问题(即网络中的节点都是可信的,不会发送假的消息,没有叛徒、作恶者),而在区块链的网络中这一情况是无法避免的,每个可以进行网络通信的节点都可以加入到区块链网络中,对于可能存在作恶者节点的网络,区块链中通过以下几点达到对同一本账本统一记账的的共识:

  1. 随机性:不能所有记账者都记账,随机选择记账者。
  2. 抗女巫攻击:提高作恶成本。
  3. 激励机制:激励遵守规则的记账者。

应用在区块链中的共识机制有 Pow(Proof of work)工作量证明、Pos(Proof of stake)权益证明、 DPos(Delegated Proof of stake)代理权益证明。

工作量证明中的随机性是通过哈希解谜选择一个记账者,哈希解谜需要大量的算力、电力,从而提供了作恶成本,当解谜工作完成后对工作者进行区块奖励和手续费奖励,代表有BTC、ETH1.0、莱特币。

权益证明中的随机性是通过VDF、VRF随机算法确保随机数的生成是有效的,通过锁定代币的数量以及时间来提高作恶成本,同样用区块奖励和手续费奖励激励记账者遵守规则,代表有ETH2.0。

代理权益证明与权益证明类似,不同的是代理权益证明通过锁定代币获得投票权,给其他节点投票,代表有EOS。

区块链交易存在的问题

在点对点交易的电子现金系统中很容易出现“双花”问题,什么“双花”?双花就是一份钱花了两次,在现实的现金世界中,我们线下交易是不会将一份钱同时花两次的,都是一手交钱一手交货,而在区块链中,付款者是可以同时发送两条合法的交易消息,一个向账户A转走所有余额,一个向账户B转走所有余额,因为还没被验证,所以可以这样做。由于网络是存在延迟、丢包现象,且有多个记账者,所以可能记账者Z收到了第一条消息,记账者X收到第二条消息,与此同时两个记账者几乎同时完成了哈希解谜的过程,获得了记账权,那么都会把自己的区块放在区块链上,这个时候就发生了分叉,也就是有两个区块接在了一个区块的后面。

在这里插入图片描述

但是,在区块链中最终只会承认一条链,解决该问题的办法就是少数服从多数,也叫最长链原则。由于更多的记账者会在认可的链上继续记账,所以在经过一段时间后,就会有一条链明显长于另一条,矿工们就会遵循最长链原则在长链上区块继续记账。

基于最长链原则以及挖矿的成本来讲,作恶者们也会放弃作恶的念头,不然辛辛苦苦浪费的算力、电力、时间挖出来的矿不被承认,得不偿失。

那对于被淘汰的链上的区块,其合法交易不也丢失了?对于这种情况,区块链中解决方案是:区块中的所有的交易在6个区块后才会被确认,也就是说在如果发生分叉了,账户上的资金以最长链的区块交易为准。
在这里插入图片描述

特性总结

首先根据分布式记账的本质:互相不信任,不希望任何一个个体单独控制账本,可以知道的是区块链是去中心化的。

根据公钥、地址公开透明,但是没有关联实际人的信息,所以说区块链是具有匿名性的。但是如果经过链上交易查询,定位分析到某个地址来源某个交易所,且进行了KYC认证,依然是可以查到相关信息,所以也可以说是伪匿名

根据私钥完全由自己掌控,不需要第三方监管,所以说区块链是具有安全性的。但是如果私钥丢失了或者被盗取了,资产依然存在不安全性

根据UTXO模型,记录的是交易过程而不是余额最终状态,我们可以沿着交易过程追溯,所以区块链是可溯源性的。但是如果在上链时数据就做假了,即使溯源了,也没有任何意义。

根据区块之间有哈希关联以及共识机制,我们知道要修改一个数据成本是非常高的,所以区块链是“难以篡改”的,而不是“不可被篡改”。

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

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

相关文章

【Wifi】Wifi架构介绍

Wifi架构介绍 本文基于Android介绍其Wifi架构。Wifi是许多操作系统提供的重要功能之一,特别是越来越多的车载系统wifi是其必备功能。为啥wifi是必备功能? 一方面是传统的上网(现在有些车载使用DCM模块管理网络),另一方…

没有前端如何测试后端跨域问题

一、问题 前段时间对项目中的跨域做了相关的处理,网上有很多跨域的解决方案。前端解决,后端解决,nginx代理解决。我采用的是在后端中使用Cors来解决跨域的问题。但是前端项目还没有搭建起来,并不知道Cors的解决方案是否会生效&am…

Apollo(阿波罗)分布式配置中心

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

CSS Vue/RN 背景使用opacity,文字在背景上显示

Vue <div class"training_project_tip"> <div class"tip">展示的文字</div> </div> .training_project_tip { font-size: 12px; font-weight: 400; text-align: left; color: #ffffff; margin-top: 8px; position: relative; dis…

如何将前后端分离项目部署到本地的Docker Desktop容器运行并且访问

文章目录 前言 完成了客户的一个前后端分离项目&#xff0c;要求部署到客户电脑上去展示&#xff0c;那肯定不能直接把代码弄上去跑呀~~~&#xff0c;于是我就想把他们都打包部署到本地的docker容器里面&#xff0c;方便运行和访问&#xff0c;so&#xff0c;以下内容就详细介…

LeetCode09——回文数

LeetCode09 自己写的解,转化为字符串再反转&#xff0c;比较笨。 import java.util.Scanner; public class Result01 {public static void main(String[] args) {System.out.println("请输入整数&#xff0c;我来帮您判断是否是回文数。");Scanner scanner new Sc…

Linux之解除ssh远程登录限制

背景&#xff1a;复制了一个虚拟机&#xff0c;将root密码重置为123456后&#xff0c;使用xshell通过ssh登录竟然失败&#xff0c;检查了很多次&#xff0c;确定root账号密码正确&#xff0c;以下是记录的排查过程。 1、查看ssh登录日志 Ubuntu&#xff1a;/var/log/auth.log…

2023年中国门把手产量、销量及市场规模分析[图]

门把手行业是指专门从事门把手的设计、制造、销售和安装等相关业务的行业。门把手是门窗装饰硬件的一种&#xff0c;用于开启和关闭门窗&#xff0c;同时也具有装饰和美化门窗的作用。 门把手行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 随着消…

R/d2及S/C4估计总体标准差,比较其CPK及规格限概率的差异

R/d2 和 S/C4 是用于估计总体标准差的无偏估计方法&#xff0c;通常用于控制图中。这些估计方法的主要目的是通过样本数据来估计总体标准差&#xff0c;以便监测过程的稳定性和变异性&#xff0c;而不需要收集整个总体的数据。 具体来说&#xff1a; R图中的 R/d2 和 S图中的…

【数据结构】二叉树--OJ练习题

目录 1 单值二叉树 2 相同的树 3 另一颗树的子树 4 二叉树的前序遍历 5 二叉树的最大深度 6 对称二叉树 7 二叉树遍历 1 单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09; bool isUnivalTree(struct TreeNode* root) {if (root NULL){return true;}…

【linux】重定向+缓冲区

重定向缓冲区 1.重定向1.1重定向本质1.2重定向接口1.3重定向分类1.3.1>输出重定向1.3.2>>追加重定向1.3.3<输入重定向 2.理解 >&#xff0c; >>&#xff0c; <3.如何理解linux下一切皆文件4.缓冲区4.1理解缓冲区问题4.1.1为什么要有缓冲区4.1.2缓冲区刷…

【yolov5】改进系列——特征图可视化

文章目录 前言一、特征图可视化二、可视化指定层三、合并通道可视化总结 前言 对于特征图可视化感兴趣可以参考我的另一篇记录&#xff1a;六行代码实现&#xff1a;特征图提取与特征图可视化&#xff0c;可以实现分类网络的特征图可视化 最近忙论文&#xff0c;想在yolov5上…

Java系列 | 如何讲自己的JAR包上传至阿里云maven私有仓库【云效制品仓库】

什么是云效 云效是云原生时代一站式 BizDevOps 平台&#xff0c;产研数字化同行者&#xff0c;支持公共云、专有云和混合云多种部署形态&#xff0c;通过云原生新技术和研发新模式&#xff0c;助力创新创业和数字化转型企业快速实现产研数字化&#xff0c;打造“双敏”组织&…

Python数据挖掘入门进阶与实用案例:自动售货机销售数据分析与应用

文章目录 写在前面01 案例背景02 分析目标03 分析过程04 数据预处理1. 清洗数据2.属性选择3.属性规约 05 销售数据可视化分析1.销售额和自动售货机数量的关系2.订单数量和自动售货机数量的关系3.畅销和滞销商品4.自动售货机的销售情况5.订单支付方式占比6.各消费时段的订单用户…

uni-app 瀑布流布局的实现

方式一&#xff1a;使用纯 CSS 实现 使用 flex 布局方式 <!-- 瀑布流布局 --> <template><view class"container"><viewclass"cont-box":style"{ --layout-width: 100 / flowData.column - flowData.columnSpace % }"v-f…

CatBoost算法模型实现贷款违约预测

前言 此篇文章为整个Boost(提升方法)集成算法模型的终章&#xff0c;前几篇文章依次结合详细项目案例讲解了AdaBoost、GBDT、XGBoost、LighGBM共四个常用的集成算法模型&#xff0c;每一篇文章都包含实战项目以及可运行代码。仅通过看一遍文章不去实践是很难掌握集成算法模型的…

【API篇】三、转换算子API(上)

文章目录 0、demo数据1、基本转换算子&#xff1a;映射map2、基本转换算子&#xff1a;过滤filter3、基本转换算子&#xff1a;扁平映射flatMap4、聚合算子&#xff1a;按键分区keyBy5、聚合算子&#xff1a;简单聚合sum/min/max/minBy/maxBy6、聚合算子&#xff1a;归约聚合re…

maven 新建模块 导入后 按Ctrl 点不进新建模块pom定义

新建的ruoyi-common-mybatisplus 模块,导入一直不正常 画出的模块一直导入不进来 这是提示信息 这是正常的提示信息 加上 <version>3.6.3</version> 后,才一切正常

C++入门之引用与内联函数

一、引用 1、初步理解 引用在语法上的理解就是起别名&#xff0c;用法就是在类型后面加&&#xff0c;例子&#xff1a;int a 1; int& b a; 上例所示&#xff0c;执行后&#xff0c;b就是a的别名&#xff0c;它们代表同一块空间&#xff0c;a的改变会影响b&#xff0…

进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)

目录 目录 API 1.0 Arrays 类的说明 1.1 Arrays 类中的 toString() 静态方法 1.2 Arrays 类中的 copyOfRange(int[] original, int from, int to) 静态方法 1.3 Arrays 类中的 copyOf(int[] original, int newLength) 静态方法 1.4 Arrays 类中的 setAll(do…