区块链运行原理

news2024/11/16 4:29:05

文章目录

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

前言

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

区块链的结构

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

在这里插入图片描述

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

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

这里要提一下在区块链中是如何记录账户余额的。
在传统账户中余额就是一个账户的最终状态,改变余额直接在其基础上增加或减少即可。而在区块链中记录账户余额有个专业的名词 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.coloradmin.cn/o/688937.html

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

相关文章

SNMP 计算机网络管理 实验3(三) SNMP协议工作原理验证与分析

🚀write in front🚀 一、实验目的 学习捕获SNMP报文,通过报文分析理解SNMP协议的工作过程。二、实验内容与设计思想 实验内容:编写代码,测试 1)使用snmputilg发送SNMP数据包; 使用wireshark抓包&…

【css】实现单独一区域滚动,不影响整体滚动

来源:css实现单独一区域滚动,不影响整体滚动,两种方法 方法 第一种:就该区域高度固定,然后overflow-auto 第二种:使用属性overscroll-behavior: contain; .overfolw{position: absolute;width: 100%;ov…

mysql看视频---01

计算机上的易失和非易失存储器 什么是IO,IO消耗的时间,举例.内存条存什么. IO是指对数据流的输入和输出,就是读写数据,也称为IO流。Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。 io消耗的时间(如下图)…

【Guava】Guava: Google Core Libraries for Java 好用工具类

文章目录 Guava前言Guava的优势官方网址guava类库使用基本工具类:让使用Java语言更令人愉悦。集合类:集合类库是 Guava 对 JDK 集合类的扩展。Guava 缓存: 本地缓存,可以很方便的操作缓存对象,并且支持各种缓存失效行为模式。Func…

python爬虫-逆向实例小记-1

注意!!!!某政府网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!! 案例分析 第一步:下图标注出来的是获取请求断点,断点出自 请求…

Android实现拨打电话功能

Android实现拨打电话功能 先上UI效果图点击联系博主拒绝权限同意权限直接拨号 跳转到拨号界面跳转到拨号界面 同时附带号码 代码实现AndroidManifest.xml中添加权限点击联系博主判断是否有拨号权限申请权限回调直接拨号跳转到拨号界面跳转到拨号界面 同时附带号码 完整代码Main…

chatgpt赋能python:Python色板介绍:让数据可视化更加迷人

Python色板介绍:让数据可视化更加迷人 在数据可视化中,合适的配色方案是非常重要的。Python色板是一种常用的工具,可以帮助数据分析师和科学家创建漂亮、易于阅读的图表。本文将为大家介绍Python色板,包括一些主流的Python色板、…

百度排名代发|百度排名蜘蛛池代发收录排名接单!

百度排名代发|百度排名蜘蛛池代发收录排名接单! 推广告忽然没有展现了,咋回事? 这是今天一个粉丝问我的问题,我帮他看了一下,是因为他推广了一个打不开的链接,所以说百度没有给他展现,可以看一下这个还好…

微信小程序-上拉加载更多和下拉刷新

微信小程序-上拉加载更多和下拉刷新 下拉刷新 页面配置文件中配置"enablePullDownRefresh": true开启下拉刷新 {"usingComponents": {},"navigationBarTitleText": "订单列表","enablePullDownRefresh": true }设置onPul…

使用阿里云域名和腾讯云服务器 出现的问题--------记录

这里使用阿里云申请的域名&#xff0c;阿里云备案成功 服务器为腾讯云&#xff0c;后端使用的node这里获取数据时返回一篇html如下 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" c…

【bug】vscode python 3.6 无法debug 解决方案

某个环境是使用python 3.6 安装的&#xff0c;vscode没法调试。是由于python插件太新了&#xff0c;直接下载一个&#xff0c;用VSIX安装 1.下载python 拓展包 https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/2022.6.0/…

【简单】使用ChatGPT和QT从零开始构建一个计算器应用

在这篇博文中&#xff0c;我将向大家展示如何使用ChatGPT和Qt来构建一个完整的计算器应用。我们将从零开始&#xff0c;逐步引导您完成整个项目&#xff0c;包括需求分析、软件设计、代码编写等环节。该项目代码全部由GPT编写,10分钟完成。 一&#xff0c;项目概述 本项目旨在…

数据库监控与调优【八】—— 索引类型

索引类型 MySQL有多种索引类型&#xff0c;使用不同的角度&#xff0c;分类也有所不同。 程序猿之间沟通时&#xff0c;经常会聊到各种索引类型&#xff0c;比如你说&#xff1a;“这是一个组合索引”&#xff0c;他说“这是一个聚簇索引”&#xff0c;如果不了解这些术语&am…

【计算机网络】UDP和TCP的对比

1.协议栈 2.面向连接&#xff1f; 3.支持单薄、多播、广播&#xff1f; 4.面向应用报文还是字节流&#xff1f; 5.应用场景 6.首部长度 7.小结

python 实现批量图片不拉伸尺寸归一化

在进行机器学习或深度学习之前&#xff0c;都要对样本图片进行预处理&#xff0c;其中需要将图片的尺寸统一调整。很多时候&#xff0c;样本的来源很多&#xff0c;尺寸和比例也不统一&#xff0c;可能来自于互联网爬虫&#xff0c;可能来自于不同的手机拍摄。如果将不同尺寸与…

CentOS Linux 8使用阿里源(安装jdk11、git测试)

一、备份 cd /etc/yum.repos.d/ mkdir bak mv CentOS-Linux-* bak二、下载新源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo三、安装软件测试 sudo yum -y install java-11-openjdk-devel java -versionsudo yu…

瑞亚太空活动公司RSA与英国国防与安全加速器达成量子项目合作

​ &#xff08;图片来源&#xff1a;网络&#xff09; 瑞亚太空活动公司&#xff08;RSA&#xff09;与英国国防与安全加速器&#xff08;DASA&#xff09;签署了合作协议&#xff0c;主要开发名为“无限交换”的可操纵量子真空的技术项目。这是RSA在英国签订的第一份合同&…

B端产品之数据分析能力

目录 学习目标&#xff1a;数据分析的思维框架以及工作需要的知识结构&#xff0c;数据分析结果外化-撰写数据分析报告 分析流程分析要点分析报告 数据分析流程 明确主题&#xff0c;尽量细化提出假设验证并修正假设&#xff1a;分析过程中对各个关联维度进行数据可视化观察…

怎么用迅捷PDF转换器在线提取PDF文件中的图片

大家在学习或者是办公中经常使用到PDF文件&#xff0c;我们在做一份工作文件的时候&#xff0c;需要一些资料来补充内容&#xff0c;这些资料是以PDF文件格式呈现&#xff0c;在使用PDF文件时&#xff0c;文件中有的图片做到很精细&#xff0c;想要单独提取保存下来备用。那么&…

【解决】IntelliJ IDEA无法识别package.json里面定义的脚本问题(npm: No scripts found)

错误提示&#xff1a;npm: No scripts found 在File-Settings-Editor-File Types&#xff0c;右边找到JSON&#xff0c;在File name patterns中添加了*.json,然后就识别了