元宇宙、区块链 通俗易懂

news/2024/10/30 17:29:11/

什么是区块链?比特币挖矿是什么?元宇宙是什么?

Web(万维网)的三权化进化:

基于此,介绍下“元宇宙”。1992年,美国作家史蒂芬森在《雪崩》一书中首次提出了“元宇宙(Metaverse)”的概念。元宇宙实际上就是一种虚拟现实技术,通过技术手段让用户进入到一个虚拟世界

构建元宇宙四大要素:

  1. 显示技术(DISPALY): 连接现实世界和元宇宙世界。比如VR等

2.游戏(GAME): 为元宇宙提供内容支撑以及AI。Gamefi:Game+finance,游戏加金融,即游戏装备通过区块链实现金融化,所有的游戏都变成赚钱的游戏了。比如:《Axie Infinity》

3.区块链(BLOCKCHAIN): 去中心化保障元宇宙经济系统的稳定,安全不可篡改

4.网络通信(NETWORK):5G网络提供的带宽

2021年3月,随着游戏公司Roblox(罗布乐思)在纽交所上市,元宇宙从概念走向现现实,并迅速被各大互联网大厂和投资机构热捧

元宇宙标签:Identity(身份)、Friends(朋友)、Immersive(沉浸感)、Anywhere(随地)、Variety(多样性)、Low Friction(低延迟) 、Economy(经济)、 Civility(文明)

在1982年,来斯里. 兰伯特提出了一个点对点通信中的问题,也就是拜占庭将军问题,拜占庭是一个国家首都,地址位于最近发生地震的土耳其国家,是东罗马帝国的首都。当时拜占庭罗马帝国国土辽阔,地大物博,将军们分散在各地,如果打仗,需要统一命令,打还是撤。那时候没有高启强的小灵通,只能通过派人挨个的传达消息,但是中间难免会出现叛徒。所以,拜占庭将军问题的实质就是要寻找一个方法,使得将军们在一个有叛徒的非信任环境中建立对战斗计划的共识。这个问题引起了广泛巨大的讨论和各种计算

针对讨论的就结果,科学家们提出了有两个办法处理,但是这两个办法都存在不可抗拒弊端:

1.口头协议:如果有10个将军,将军们派人用口信传达消息,互相传递一轮后,那么每个将军都会收到10个消息。此时存在不同的意见,采用少数服从多数

问题:口头协议并不会告知消息的上一个来源是谁,也就是消息不可追根溯源,出现信息不一致也很难找到叛徒在哪

讨论的最终结果:当叛变者不超过1/3时,存在有效的算法,不论叛变者如何折腾,忠诚的将军们总能达成一致的结果。如果叛变者大于等于1/3,则无法保证一定能达到一致性

2.书面协议:假设10个将军,每个将军都可以派人向其他将军派信,约定 “2月14号,一起去打x国”。收到信的将军如果同意的话,就可以在原信上签名盖章,将军们能够使用签名技术,签名不可伪造,一旦篡改即可发现,也可以实现可追根溯源

问题:真正可信的签名体系难以实现,而且签名造假的问题也没法避免

讨论的最终结果:对于任意m,最多只有m个背叛者情况下,算法SM(m)能解决拜占庭将军问题。

但是在实际状况中,书面协议却会有一些问题,比如没考虑传输信息的延迟时间,书面协议的签名体系难以实现,而且签名消息记录的保存难以摆脱一个中心化机构而独立存在,最终完美解决这个问题的是中本聪,使用的就是区块链技术。继续沿用上面的例子,通俗的解释一下(解释的比较片面,只做理解使用)

1.以当前时代为背景。比如,现在这10个将军,他们都有手机,可以收发短信。系统选中一个将军,让其统一给其他9个将军发短信,其他的9个将军都听从这一个将军的消息,那就能保证信息唯一了(广播机制)

2.那么如何挑选出来这个将军呢,没错,最公平的办法就是随机。随机选中谁,谁来发短信(比特币场景是采用工作量证明机制)

3.那如果随机到的这个将军是个叛徒,怎么办?所以我们假设有一个腾讯支持多人编辑的文档,文档里有10个sheet,10个将军分别在sheet页上编写自己的想法,是打还是不打,并且各个将军只能编辑自己的sheet页数据,同时也能查看其他将军sheet页的数据,每个sheet页记录了每个将军想法,是打还是不打,亦或者是其他各种想法(签名加密技术)

4.当这9个将军在收到短信时,他们都会看自己的sheet页的数据,来对手机收到的短信结果,进行投票,选择同意还是不同意。如果结果超过半数同意,少数服从多数,就采用当前将军的短信方案。如果结果不同意,则重新随机选发短信的将军,重新执行这个流程(详细了解可以参考:最长链选择机制)

中本聪

所以区块链技术,完善了口头协议与书面协议的缺点,完美解决了拜占庭将军问题

区块链目的是在解决分布式下,数据真实有效且保持一致性的核心原理。分布式、去中心化、记账本是区块链核心要素,保证数据难以篡改,实现安全性、匿名性、独立性、开放性

区块链起源于比特币,2008年11月1日,一位自称中本聪(Satoshi Nakamoto)的人发表了《比特币:一种点对点的电子现金系统》一文,阐述了基于P2P网络技术、加密技术、时间戳技术、区块链技术等的电子现金系统的构架理念,这标志着比特币的诞生。两个月后理论步入实践,2009年1月3日第一个序号为0的创世区块诞生。几天后2009年1月9日出现序号为1的区块,并与序号为0的创世区块相连接形成了链,标志着区块链的诞生

很多人一开始并不了解区块链,都是从比特币价格的飙升,才开始关注比特币,并且了解区块链,10几年前,我周边朋友,也有人参加了挖矿。那么所谓的比特币挖矿,到底在挖什么?

1.应该有人听说过,使用比特币买披萨的例子,比特币就像我们银行账户里面的金额一样。既然产生了交易,那么就会产生数据,实际上比特币系统一直都在产生交易。比特币系统会将一段时间内的交易数据打成的一个包,称为区块,每一个区块都链接到上一个区块,依次相连形成区块链。比特币全网平均每10分钟产生一个区块

2.区块从1开始编号,因此节点A连接节点B后,只要检查双方的区块编号高度,就能方便地同步交易数据。例如节点A自己的区块高度是100,发现节点B的区块高度是110,则只要向B请求同步101~110这10个区块即可

3.为保证有节点打包比特币交易的数据,比特币规则规定:负责打包交易的节点将获得比特币作为酬劳

4.既然有酬劳,那就使得有大量节点想打包交易。但是为保证区块链的唯一性,比特币规则规定:每一个节点都来使用做题的方法争夺交易打包权。系统会出一个计算题,节点会进行不断的计算,谁首先计算出结果,谁就能获得这个区块的交易打包权,以及这个区块的打包奖励,也就是比特币的奖励

5.计算题在实现上是计算机做一次哈希(SHA-256)运算,并检查运算结果,错误之后,就会再次重复的计算,再次验证结果,直到正确。节点获胜的唯一诀窍是提高计算效率,提高试错的次数,一个每秒能计算100亿次的节点(做100亿次哈希计算)的节点,抢到打包权的概率是每秒计算1亿次哈希节点的100倍

6.一旦有某个节点扔出符合系统规则的硬币结果,他就会立即将这段时间搜集到的交易打包成一个区块,附上计算出的哈希结果、当前的区块序号、上一区块关系等附加信息广播出去,其它节点一旦收到区块信息并验证无误,就会停止计算,停止抢这一区块,转而在这一区块的基础上开始计算抢下一区块

7.节点大量进行哈希计算需要计算机设备,并消耗大量电力,这个过程在本质上和金矿挖矿很相似(通过挖矿设备,消耗能源换取黄金)。比特币总量恒定,产量越来越少的产生方式也和黄金很相似。因此人们形象地将比特币抢打包权的过程称为挖矿,将抢打包权的比特币节点称为矿工

8.矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的结果为准,并且决定谁赢得新发行的比特币和交易费。这种靠竞争来解决交易共识的问题,避免了单一节点垄断整个网络的风险,让整个网络形成了良性竞争的局面

上图中,密密麻麻的都是AMD高性能显卡,在不停的挖矿。我们已知,所谓的挖矿就是通过一种算法,来不停的计算哈希值并循环验证,计算量虽然很大,但计算方法确很简易。想提高效率, 增加线程即可,而这正符合GPU的工作原理。目前高性能的CPU最多是128、256进程,而GPU都是上千的进程,并且GPU都只能进行相应的测算,正好符合这一原理

根据区块链网络中心化程度的不同,分化出3种不同应用场景下的区块链:

1.公有链:全网公开,无用户授权机制的区块链,称为公有链。比如:BTC-比特币、ETH-以太坊币等

2.联盟链:允许授权的节点加入网络,可根据权限查看信息,往往被用于机构间的区块链,称为联盟链或行业链,比如:蚂蚁链,星火链等

3.私有链:所有网络中的节点都掌握在一家机构手中,称为私有链

要想深入了解区块链,一定要知道共识机制、共识算法

什么是共识机制? 对中心的数据库操作,为保证数据一致性,同时只可以有一个节点操作(串行)。通过一个算法筛选出具有代表性的节点,这个机制就是共识机制。所谓的共识就是在人人平等的社会里需要大家共同形成一个共识,产生一个操作者、临时决策者,代表大家来进行中心化的操作

什么是共识算法?为了实现分布式一致性协议而产生的一系列流程与规则。当分布在不同地域的节点都按照这套规则进行协商交互之后,最终总能就某个/某些问题得到一致的决策,从而实现分布式系统中不同节点的一致性。共识算法种类近30多种,我只说常用的几个:

  1. 工作量证明PoW(在公有链中,常见的选择是通过工作量证明算法(PoW)来防止拜占庭攻击,比如:比特币(BTC)、以太坊(ETH)、莱特币(LTC)

2.权益证明PoS,比如:点点币(ppc)

3.委托权益证明DPOS,比如:比特股( Bitshare)

4.拜占庭共识算法系列PBFT/DBFT机制(在联盟链中,常见的选择是通过理论完备的BFT共识算法来防止拜占庭攻击)

具体解释一下工作量证明算法(PoW):

PoW本质上就是在求一个概率题,谁先算出来就算谁赢,奖励就归谁。难度随着答题的速度会动态调整,而这个难度就是由上面的难度目标值决定,这样就能保证平均每10分钟完成一次挖矿

说工作量证明怎么来之前我们先说下Hash算法,Hash算法有一个特性,通过hash加密的文本或文件,哪怕只有一个字节改变,Hash的值就完全不相同。在区块链中,需要找出一个Nonce,Nonce的值和区块上的信息拼接后进行SHA256哈希运算,当hash值满足给定条件时候,那么第一个找出nonce值的节点获得记账权

假设我们区块上的信息是 blockchain ,我们要找出一个Nonce随机数和blockchain拼接,最后计算的Hash值结果以6个0开头(或者小于某个值), 率先找到随机数的节点就获得此次记账的唯一记账权。Nonce一般从0开始递增计算,所以Nonce计数器可以统计总共计算了多少次,有了Nonce值,这样别的矿工就可以根据Nonce数字大小再一次印证这个矿工是否有作弊

工作量证明算法(POW)机制好处:工作量证明其实相当于提高了做叛徒(发布虚假区块)的成本,这也不会产生做叛徒的动机

工作量证明算法(POW)机制存在明显的弊端:一是浪费大量的算力,只用来竞争挖矿权,并没有更多实际或科学价值。二是它并不完全公平,当计算机硬件升级到一定程度,比如量子计算机可能几秒就计算出了Hash值。


http://www.ppmy.cn/news/33057.html

相关文章

103.【Java Microbenchmark Harness】

JMH(一)、JMH概述1.什么是JMH?2.JMH入门操作(1).没有JMH的时候我们怎么进行测试的?(2).利用JMH进行测试(二)、JMH运用展示1.Hello JMH(三)、JMH注解1.Warmip和Measurement (预热和真实执行)【类】2.BenchmarkMode和OutputTimeUnit (输出方式和输出单位)【方法】3.State (状态…

SDIO读写SD卡速度有多快?

前两天测试了SPI方式读写SD卡的速度《SPI方式读写SD卡速度测试》,今天来测试一下SDIO方式的读写速度。测试条件:单片机:STM32F407VET6编译环境:MDK 5.30HAL库SD卡:闪迪32GB/64GB TF卡文件系统:FatFS R0.12c…

Python 异步: 在非阻塞子进程中运行命令(19)

动动发财的小手,点个赞吧! 我们可以从 asyncio 执行命令。该命令将在我们可以使用非阻塞 I/O 写入和读取的子进程中运行。 1. 什么是 asyncio.subprocess.Process asyncio.subprocess.Process 类提供了由 asyncio 运行的子进程的表示。它在 asyncio 程序…

flutter调用go

文章目录命令引入greeting.aar和使用android中使用Flutter2gopluginPlugin.kt参考文档命令 mkdir demo cd demo go mod init demo 编写greeting.go go env -w GOPROXYhttps://goproxy.cn go install golang.org/x/mobile/cmd/gomobilelatest gomobile init go get golang.org/x…

第九章:C语言数据结构与算法初阶之堆

系列文章目录 文章目录系列文章目录前言一、堆的定义二、堆的实现三、堆的接口函数1、初始化2、销毁3、插入4、删除5、判空6、元素个数四、堆排序1、建堆2、排序五、堆的应用——TOPK1、什么是TOPK问题?2、解决方法总结前言 堆就是完全二叉树。 一、堆的定义 我们…

Springboot新手开发 Cloud篇

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:后端专栏 📧如果文章知识点有错误的地方,…

URLConnection/JNI

目录 URLConnection SSRF JNI安全基础 构建动态链接库供Java调用 JNI-定义native方法 JNI-生成类头文件 JNI-编写C/C本地命令执行实现 主函数调用 URLConnection 在java中,java抽象出来了一个URLConnection类,它用来表示应用程序以及与URL建立通…

进程和线程的区别和联系

进程和线程的区别和联系1. 认识线程2. 进程和线程的关系3. 进程和线程的区别4. 线程共享了进程哪些资源1. 上下文切换2. 线程共享了进程哪些资源1.代码区2. 数据区3. 堆区1. 认识线程 线程是进程的一个实体,它被包含在进程中,一个进程至少包含一个线程,一个进程也可以包含多个…