当前位置: 首页 > news >正文

大白话说区块链和通证

1 区块链

简单地说,区块链其实就像是一个不可篡改的分布式数据库,该分布式数据库记录了一系列交易或事件。区块链运行在至少1个以上的节点上,每个节点都有自己的一个分布式数据库,也就是分布式账本。正常情况下,每个节点的分布式数据库里的数据都是一样的。区块链由不断生成的区块链接而成。一个区块包含区块头(Block Header)和区块数据(Block Data),区块数据又称为区块体(Block Body)。每个区块包含了一批交易的数据、时间戳和前一个区块的哈希值。哈希值是一种唯一标识,它保证了每个区块的完整性,一旦数据发生改变,哈希值也会立刻发生变化,因此保障了数据的安全性。而要改变一个区块,就要改变它之后所有的区块,这种特性使得区块链非常安全。此外,区块链是分布式的,因此没有单一的控制中心(除非区块链只运行在1个节点上),使得数据变得更加透明、可追溯和公开。总的来说,区块链是一种用于记录交易和事件数据的技术,它的特点是去中心化、不可篡改、透明、安全,并且可以实现智能合约等功能。

1.1 区块头

对于比特币来说,区块头(Block Header)包含以下几个字段:

  1. 版本号(Version):这是表示区块链协议的版本号。
  2. 前一个区块的哈希值(Previous Block Hash):这是前一个区块的哈希值,将前一个区块与当前区块链接起来,形成区块链。
  3. 默克尔根(Merkle Root):这是由所有交易数据构建的默克尔树的根哈希值,确保区块中的交易数据的完整性。
  4. 时间戳(Timestamp):这是区块的创建时间,以UNIX时间戳的形式表示。
  5. 难度目标(Difficulty Target):这是一个用于控制区块链的挖矿难度的参数,在计算哈希值时起到限制条件的作用。
  6. 随机数(Nonce):这是一个用于满足挖矿难度要求的随机数,矿工需要不断尝试不同的随机数来寻找满足要求的哈希值。

1.2 区块体

区块数据可以包含0笔、1笔或多笔交易,这些交易包括矿工的挖矿交易和其他转账交易。每笔交易信息都可以通过哈希函数,例如MD5、SHA-256,得到一个唯一对应的哈希值,也就是这笔交易的哈希值。对于比特币来说,使用SHA-256哈希函数。需要注意的是,每笔交易的信息,改变了哪怕1 bit的内容,交易的哈希值也就会被改变。哈希函数,简单地说,就是对于任意长度的输入,通过散列算法变换,都能得到一个成固定长度的输出,该输出就是散列值。

例如,如果使用MD5算法:

对于输入:"123456",它的MD5的输出就是:"E10ADC3949BA59ABBE56E057F20F883E",即: MD5("123456")="E10ADC3949BA59ABBE56E057F20F883E"

对于输入:"哈希函数,简单地说,就是对于任意长度的输入,通过散列算法变换,都能得到一个成固定长度的输出,该输出就是散列值。",它的MD5的输出就是:"1AC00B1CA622EF532564A51C29DA5D0D",

即: MD5("哈希函数,简单地说,就是对于任意长度的输入,通过散列算法变换,都能得到一个成固定长度的输出,该输出就是散列值。")="1AC00B1CA622EF532564A51C29DA5D0D"

关于哈希函数和交易id是如何来的,详细可以参考我的这篇文章:

以太坊的交易id是如何来的 - 知乎

默克尔根的计算过程:

假设,区块数据里包含有5笔交易A、B、C、D、E。这5笔交易通过哈希函数得到的交易哈希分别是H1、H2、H3、H4、H5,然后把这5个交易哈希再两两组合,再一次进行哈希运算。即把H1和H2组合起来进行哈希运算,得到H12;把H3和H4组合起来进行哈希运算,得到H34,H5不变。这时候,得到新的交易哈希集合:H12、H34、H5。然后再进行新一轮的组合哈希运算,得到新的交易哈希集合:H1234、H5。最后,进行最后一轮的组合哈希运算,得到新的交易哈希根值:H12345。整个过程形成了Merkle树(Merkle Tree),这棵树的根节点就是交易哈希根值:H12345,也就是默克尔根(Merkle Root),它是由所有交易数据构建的默克尔树的根哈希值。默克尔树是一种二叉树结构,用于对多个交易进行散列和汇总,确保区块中的交易数据的完整性。

1.3 区块的哈希值的计算过程

以下是涉及到计算比特币区块哈希值的一些关键步骤和数据:

  1. 区块头(Block Header):比特币的每个区块都有一个区块头,它是一个包含多个字段的数据结构。区块头中包含了一些重要的信息,包括版本号、前一个区块的哈希值、默克尔根、时间戳和难度目标等。
  2. Merkle树(Merkle Tree):在区块头中有一个字段叫做默克尔根(Merkle Root),它是由所有交易数据构建的默克尔树的根哈希值。默克尔树是一种二叉树结构,用于对多个交易进行散列和汇总,确保区块中的交易数据的完整性。
  3. 工作量证明(Proof-of-Work):比特币的区块链使用工作量证明机制来保护区块的安全性。为了计算区块哈希值,需要找到一个特殊的值,称为Nonce(随机数),使得通过对区块头的所有字段进行哈希运算后,得到的哈希值满足难度目标。这个过程是一个不断尝试的过程,需要大量的计算和能量消耗。
  4. 哈希函数(Hash Function):比特币使用SHA-256(Secure Hash Algorithm 256-bit)算法作为其哈希函数。SHA-256是一种加密哈希函数,它将输入数据转换为一个固定长度的哈希值,通常是256位。

根据上述数据和步骤,计算比特币区块的哈希值的过程如下:

  1. 将区块头的各个字段进行拼接,得到一个长的二进制数据。
  2. 使用SHA-256哈希函数对拼接后的二进制数据进行哈希运算,得到一个256位的哈希值。
  3. 如果得到的哈希值不符合难度目标,即不满足比特币网络中设定的困难程度,就需要不断尝试不同的Nonce值,再次进行哈希运算,直到找到满足要求的哈希值为止。
  4. 最终找到满足要求的哈希值后,将这个哈希值添加到区块头中的哈希字段,形成最终的区块头。

比特币的区块哈希值计算是一个耗时且困难的过程,需要大量的计算资源和能量。也就是说,比特币矿工挖矿的过程,就是不断地调整Nonce值进行哈希函数运算,使其计算出来的区块的哈希值满足难度目标,这样就获得了出块权产生该区块,从而获得区块奖励。更具体来说,就是比特币矿工计算出来的哈希值,等于或低于比特币网络设定的256位目标数字的有效哈希值的难度时,矿工就可以成功找到并解锁新区块。因此,该目标值越低,挖掘难度就越高,而且该目标值是动态调整的。比特币大约每10分钟产生一个区块,每挖出2016个块调整一次比特币挖矿难度调整。正常情况下,比特币每挖出2016个块,也就是需要每14天左右,所以,矿工也称14天为一个难度期。比特币挖矿难度调整是根据之前一个难度周期比特币挖矿难度调整的比特币全网算力来调整,所以难度和全网算力是相关的,时间上有一定的滞后。当矿工在一个难度期内发现区块挖掘时长低于10分钟这个目标平均值时,比特币网络将会增加难度;反之,就会降低难度。这样的做法,保证矿工挖掘新区块的时间尽可能地接近10分钟的平均值。

除了创世区块外,每一个区块都通过指向前一个区块的区块哈希值,和前一个区块关联起来,这样所有的区块就形成了一条内容难以被篡改的链,这就是区块链。因为一个区块的内容如果改变了,那么它的区块哈希值也就变了,后面的区块的原来保存的前一区块的区块哈希值就无法指向这个被改变的区块,意味着区块链断裂了。除非后面的区块里保存的前一区块的区块哈希值也被改为改动后的区块哈希值,这样,区块链才能保持连接状态。

另一方面,区块链可以运行在至少1个节点上,如果区块链运行在多个节点上,哪怕其中一个节点改变了自己的区块链上的数据,那么它的区块链的数据,也就是区块链账本,就会和其它节点的区块链账本不一样,这样,就会形成区块链的硬分叉,形成2条不同的区块链。这也是区块链的数据难以被篡改的原因之一。当然,如果区块链运行在1个节点上的时候,区块链的数据还是可以直接被修改的,但只有1个节点的区块链,也说不上去中心化了,和中心化的系统没有太大区别,只是数据修改起来更麻烦一点。

1.4 区块链的结构形态

区块链一般是以链式结构存在的,即后一个区块有一个指向前一个区块的区块哈希值,和前一个区块关联起来,形成一条直线的链。除非发生硬分叉,这条链才会在某个区块形成分叉,分叉成两条链,像一棵二叉树。但需要注意的是,链式结构并不是区块链唯一存在的结构形态。除了链式结构,目前区块链的另一种结构形态是有向无环图(Directed Acyclic Graph,DAG)。简单地说,有向无环图指的是一个无回路的有向图,它由有限个顶点和“有向边”组成,从任意顶点出发,经过若干条有向边,都无法回到该顶点,这种图就是有向无环图。

上图中的有向无环图和普通有向图的区别在于:普通有向图里有些节点形成了回路

1.5 区块链使用了哪些技术

区块链使用的技术有:分布式数据库、点对点传输、非对称性加密算法、共识算法、智能合约。其中,分布式数据库、点对点传输、非对称性加密这3种技术在区块链诞生前就已经存在了,共识算法、智能合约这2种技术是区块链新引入的。区块链技术实际上是把上面这5种技术巧妙地结合在一起。

分布式数据库:一个区块链系统由多个分布式节点构成(可以认为区块链系统是一个多节点的系统,对外提供服务的节点有多个,并且节点数可以无限扩展;但不一定是所有的节点都参与共识算法来验证交易数据),每个分布式节点都拥有一个分布式数据库。

点对点传输:节点之间通过点对点传输技术来进行信息传输。

非对称性加密:区块链系统中的每个用户都有自己的私钥(相当于密码,由用户自己单独拥有,非公开的)和公钥,公钥可以通过私钥使用非对称性加密算法推导出来。私钥和公钥之间的关系依赖于非对称性加密算法。钱包地址(相当于银行账号,公开的)可以通过公钥得到。

共识算法:共识算法是在分布式系统中用于解决参与者之间达成一致的算法。常见的共识算法包括:工作量证明(Proof of Work,PoW),权益证明(Proof of Stake,PoS),委托权益证明(Delegated Proof of Stake,DPoS),联邦拜占庭(Federated Byzantine Agreement,FBA )等,详细可以参考我的这篇文章:

各种主流区块链共识算法大比拼 - 知乎

智能合约:智能合约就像是一种编程的方式,它是在区块链上执行的自动化合约,其中包含了双方合同条款的规则和逻辑。一旦满足了预定条件,智能合约就会自动执行,无需第三方干预。智能合约通常基于区块链平台上的特定协议编写,并且被存储在区块链上。它们的执行依赖于区块链上的节点,因此具有分布式、透明、安全、不可篡改的特点。智能合约有许多应用场景,比如数字货币交易、资产转让、保险理赔等。它们可以自动化和确保交易的执行,减少人为干预和减轻人力成本。

2 通证

通证(Token)是指在区块链中使用的数字资产,它可以代表某种价值或拥有某种权益。通证是构建区块链生态系统的一种重要工具,它可以用于表示某种权益、交换价值、激励参与者等。

通证可以有不同的形式和功能,以下是一些常见的通证类型:

  1. 代币(Token):代币是区块链中最常见的通证类型之一,可以用来表示某种价值或资产。代币可以在区块链上进行创建、传输和销毁,可以用于支付、投资、治理权益等。
  2. 不可替代通证(Non-Fungible Token,NFT):又叫非同质通证。NFT是一种独特且不可互换的通证,每个NFT都有其独特的价值和属性。NFT常用于表示艺术品、游戏道具、虚拟地块等独特的数字资产。
  3. 安全通证(Security Token):安全通证是通过区块链发行的符合证券法规的数字证券,代表着某种权益,如股份、债券、房地产等。安全通证可以提供更高的透明度、流动性和可编程性。
  4. 使用权通证(Utility Token):使用权通证是一种用于访问和使用特定平台或应用服务的通证。持有使用权通证的用户可以使用它们访问平台的功能或获取相应的特权和优惠。

通证的功能和用途可以因其类型和所属区块链平台的不同而有所差异。它们可以促进价值交换、建立经济激励机制、实现去中心化治理等。通过通证化,人们可以更方便地交换和管理数字资产,推动更广泛的创新和参与。

其实,更广义的通证概念包含了更大的范围,它代表的是一种权利和权益,并不限于在区块链中使用的数字资产,它还包括了证券市场上的证券、日常生活中的优惠券和积分、虚拟币(如QQ币)等。

网上流行着另一种说法:就是某条链上的原生代币就叫做coin,即币。在这条链上发行的其它代币叫做token,即通证。例如:以太坊这条链上的原生代币就叫做以太币,即eth。在以太坊这条链上发行的其它代币就叫做通证。我个人认为这样的概念划分不太准确。我认为币只是通证这个概念的其中一种表现形式,通证不限于币,更广泛地表示一种权益。对于以太坊这条链,不管是原生代币eth,还是在以太坊这条链上发行的其它代币,都可以叫做币。当然,这只是我个人的理解。

3 区块链和通证的关系

区块链是通证的载体,通证在区块链上发行。每条区块链可以发行多种通证,而区块链也不是只有一条,可以有多种不同类型的区块链。区块链和通证这个关系就好比证券交易所和股票的关系,一个证券交易所可以发行多股票,证券交易所也可以有多个,当然这个比喻不一定恰当。

更多区块链方面的文章,可以看我的学习笔记 :www.0101.vip

----------------------------------------------------------------------------------

我是powervip,区块链程序员

我的公 众 号 和 知 识 星 球:区块链战斗机

我的知乎:powervip - 知乎

我的学习笔记:www.0101.vip

原创作品,版权所有,侵权必究!商业转载请联系作者获得授权;非商业转载需保留作者署名信息,注明出处并保留原文链接。

写作不易,喜欢我写作内容的朋友,请帮忙点 “ 赞同 ” 按钮,谢谢!

你的鼓励,我的动力!

相关文章:

大白话说区块链和通证

1 区块链 简单地说,区块链其实就像是一个不可篡改的分布式数据库,该分布式数据库记录了一系列交易或事件。区块链运行在至少1个以上的节点上,每个节点都有自己的一个分布式数据库,也就是分布式账本。正常情况下,每个节…...

Jvm之垃圾收集器(个人见解仅供参考)

问:什么是垃圾收集算法中的分代收集理论? 答:分代收集理论是垃圾收集算法的一种思想,根据对象存活周期的不同将内存分为几块,一般将java堆分为新生代和老年代。这种理论使得我们可以根据各个年代的特点选择合适的垃圾收…...

Minitab 21软件安装包下载及安装教程

Minitab 21下载链接:https://docs.qq.com/doc/DUkNHZVhwTXhtTFla 1.选中下载好的安装包,鼠标右键解压到”Minitab 21“文件夹 2.选中”Setup.exe“,鼠标右击选择“以管理员身份运行” 3.点击“下一步” 4.点击“是” 5.点击“下一步” 6.勾选…...

Java版商城:Spring Cloud+SpringBoot b2b2c电子商务平台,多商家入驻、直播带货及免 费 小程序商城搭建

​随着互联网的快速发展,越来越多的企业开始注重数字化转型,以提升自身的竞争力和运营效率。在这个背景下,鸿鹄云商SAAS云产品应运而生,为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的…...

阿里云被拉入黑洞模式怎么办?该怎么换ip-速盾网络

被拉入黑洞模式(BGP黑洞路由)意味着所有进入目标IP的流量都会被丢弃,从而导致目标IP对外完全不可访问。这种情况通常发生在面对大规模DDoS攻击时,为了防止攻击流量对其他网络造成影响。如果你使用的是阿里云服务并遭受到这种攻击&…...

Android 13.0 recovery竖屏界面旋转为横屏

1.概述 在13.0系统项目定制化开发中,由于平板固定横屏显示,而如果recovery界面竖屏显示就觉得怪怪的,所以需要recovery页面横屏显示的功能, 所以今天就来解决这个问题 2.实现功能相关分析 Android的Recovery中,利用 bootable\recovery下的minui库作为基础,采用的是直接…...

异地环控设备如何远程维护?贝锐蒲公英解决远程互联难题

青岛某企业致力于孵化设备、养禽设备和养猪设备的研发、生产和服务,历经三十多年发展,目前已成长为行业主要的养殖装备及工程服务提供商,产品覆盖养殖产业链中绝大多数环节,涉及自动化设备、环控设备、整体解决方案等。 在实际应用…...

flutter 判断是否是web环境

代码如下 import package:flutter/foundation.dart show kIsWeb;void main() {if (kIsWeb) {print(Running on the web!);} else {print(Not running on the web!);} } 如果是使用 Platform.isAndroid 会报错 所以使用上面的方式...

视频智能分析/云存储平台EasyCVR接入海康SDK,通道名称未自动更新该如何解决?

视频监控GB28181平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能…...

后端开发——JDBC的学习(三)

本篇继续对JDBC进行总结: ①通过Service层与Dao层实现转账的练习; ②重点:由于每次使用连接就手动创建连接,用完后就销毁,这样会导致资源浪费,因此引入连接池,练习连接池的使用; …...

Redis 生产环境查找无过期时间的 key

在项目中,Redis 不应该被当作传统数据库来使用;储存大量没有过期时间的数据。如果储存大量无过期时间,而且无效的key的话;再加上 Redis 本身的过期策略没有被正确设置,就会大量占用内存。这样就会导致再多的内存资源也不够用。 情况大致是这样,项目中采用 Redis 二级存储…...

Visual Studio 2017编译Python3.8.18源码

一直纠结Python的开发环境没有升级到最新版3.8.18。这是当前的最新版,正在用的版本3.8.10。他是官方制作出安装包的最新版。 1、准备Visual C 2017的开发环境包括但不限于使用C的桌面开发x64 2、在Python官网下载Python3.8.18的源码。 3、解压缩源码 4、进入控制…...

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError 文章目录 【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError1. 报错的具体情况2. 解决过程3. 其他问题3.1 ModuleNotFoundError: No module named OpenGL3.2 ModuleNotFoundEr…...

机器学习的三个方面

1 机器学习的三个方面 1.1 数据 包括数据采集、增强和质量管理,相当于给人工智能模型学习什么样的知识 第一、什么专业的知识; 第二、知识是否有体系,也就是说样本之间是否存在某种关联、差异等,这个涉及到样本选择等问题&#x…...

关于一名资深Java程序员在移动端的进阶之路

今天呢,就借此机会,跟大家聊一聊我的个人职业经历吧! 那年刚毕业 刚毕业时候,入职的第一家公司,进去后,说实话,没有太大成长吧!基本就是让我做一些可有可无的边缘性的工作&#xff…...

clickonce excel 插件发布安装的原理

ClickOnce 是一种由 Microsoft 提供的部署技术,用于简化和加速Windows应用程序的部署。ClickOnce 可以用于部署各种类型的应用程序,包括 Excel 插件。 以下是 ClickOnce Excel 插件发布和安装的一般原理: 1. 发布应用程序: -…...

关于MySQL Cluster

目录 1.MySQL Cluster2.MySQL Cluster架构3.MySQL Cluster 与 MySQL 主从架构有什么区别4.参考 MySQL Cluster是MySQL的一个高可用性,高性能的分布式数据库解决方案。它结合了内存数据库和共享无状态架构的技术,提供了99.999%的可用性,满足严…...

牵绳遛狗你我他文明家园每一天,助力共建文明社区,基于YOLOv7开发构建公共场景下未牵绳遛狗检测识别系统

遛狗是每天要打卡的事情,狗狗生性活泼爱动,一天不遛就浑身难受,遛狗最重要的就是要拴绳了,牵紧文明绳是养犬人的必修课。外出遛狗时,主人手上的牵引绳更多是狗狗生命健康的一道重要屏障。每天的社区生活中,…...

命令行艺术:简洁指南,效率倍增 | 开源日报 No.136

jlevy/the-art-of-command-line Stars: 141.7k License: NOASSERTION 这个项目是关于命令行的艺术,它提供了一系列有用的笔记和技巧,涵盖了基础知识、日常使用、文件和数据处理以及系统调试等方面。该指南旨在帮助初学者和经验丰富的用户掌握 Bash 命令…...

python基础教程五(字典概念和基本操作)

需要将一些列值组合成数据结构并通过编号来访问各个值时,列表很有用。本章介绍一种通过名称来访问各个值的数据结构。这种数据结构称为映射。字典是python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数,…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四&#xff…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...