大白话说区块链和通证

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

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

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

你的鼓励,我的动力!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python基础篇: 环境安装

Python基础环境使用 一:运行环境Anaconda介绍1、Anaconda搭建1.1、下载方式1.2、安装1.3、验证是否安装成功 2、管理python环境2.1、列出所有环境2.2、创建环境2.3、进入指定虚拟环境2.4、离开虚拟环境2.5、删除虚拟环境 3、依赖管理3.1、安装依赖3.2、卸载依赖3.3、…

[C#]winform部署PaddleDetection的yolo印章检测模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleDetection.git 【算法介绍】 PaddleDetection 是一个基于 PaddlePaddle(飞桨)深度学习框架的开源目标检测工具库。它提供了一系列先进的目标检测算法,包括但不限于 Faster R-CNN, …

Prometheus-Alertmanage钉钉实现告警

获取钉钉的webhook地址 1、注册企业钉钉 a、注册企业钉钉 浏览器打开钉钉注册页面 填入手机号码,填入获取到的验证码,点注册 填入企业资料并注册 注册成功后,扫描二维码下载钉钉,如下图: b、添加机器人 管理后台 因…

社科院与美国杜兰大学金融管理硕士项目——为金融领域人士照亮寒冬中的新机遇

随着全球金融市场的不断演变,金融领域的发展日新月异,充满了不确定性和挑战。特别是在当前的经济寒冬期,许多金融领域人士面临着巨大的压力和困境,需要寻找新的发展机遇和突破口。社科院与杜兰大学金融管理硕士项目如同明灯&#…

Java学习——设计模式——行为型模式1

文章目录 行为型模式模板方法策略模式命令模式责任链模式 行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,涉及算法与对象间职责的分配。 行为型模式分为类行为模式和…

PHPStudy快速搭建网站并结合内网穿透远程访问本地站点

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

上门回收小程序开发的优势,顺应时代发展

当下,人们的生活水平不断提高,相应产生的闲置物品也在不断增加,回收行业因此得到了快速发展。 同时,在互联网的发展下,回收行业也慢慢转到了线上,人们在卖闲置物品时不需要到门店内,只需要在手…

x-cmd pkg | pdfcpu - 强大的 PDF 处理工具

目录 简介首次用户多功能支持性能表现安全的加密处理进一步阅读 简介 pdfcpu 是一个用 Go 编写的 PDF 处理库。同时它也提供 API 和 CLI。pdfcpu 提供了丰富的 PDF 操作功能,用户还能自己编写配置文件,用来管理和使用各种自定义字体并存储有效的默认配置…

【SpringCloud】设计原则之数据一致性与设计模式

一、设计原则之数据一致性 数据一致性分以下几种情况。 强一致性 当更新操作完成之后,任何多个后续进程或线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论&#…

代码随想录算法训练营第五十八天|739. 每日温度、496.下一个更大元素I

代码随想录 (programmercarl.com) 739. 每日温度 栈里面存放的是元素的下标,确保栈里面的下标对应的元素是单调递增的。 如果栈里面存放的是元素的话,就没有办法定位到下标值,无法计算出距离,所以直接就存入下标。 class Solut…

COCO Dataset Format

COCO (Common Objects in Context) dataset数据集是一个广泛应用于目标检测、语义分割的数据集,包含330K 图片数据 与 2.5 million 个目标实体。 1.数据集下载 !wget http://images.cocodataset.org/zips/train2017.zip -O coco_train2017.zip !wget http://image…

【JAVA】深入了解 Java 中的 DelayQueue

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 Java中的DelayQueue是一个强大的工具,常用于处理需要延迟执行的任务或具有过期时间的元素。通过实现Delayed接口&#x…

​三子棋(c语言)

前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…

HCIP-端口隔离、arp代理、聚合vlan、QinQ

目录 一,端口隔离(同vlan间同交换机下的端口隔离技术) 端口隔离原理: 双向隔离配置 4,端口隔离特殊使用:单向隔离 6,ARP代理 6.1 路由式代理 6.2 VLAN内ARP代理 6.3 VLAN间ARP代理 6.3…

js逆向第8例:猿人学第1题-js 混淆-源码乱码

题目1:抓取所有(5页)机票的价格,并计算所有机票价格的平均值,填入答案。 老规矩打开控制台调试,出现debugger 过掉这个很简单了,右键点击“一律不在此处暂停” 这样就可以查看具体的网络请求如下: m是加密值,熟悉的大佬能发现这串加密字符非常像md5,|后面的就是时…

三分钟弄清数据传输方式

数据传输方式是指在计算机网络和通信系统中,数据如何在发送端和接收端之间进行传输和交换的方法和技术。不同的数据传输方式可以影响到数据传输的效率、安全性和可靠性,因此在实际应用中选择合适的数据传输方式至关重要。本文将从数据传输方式的基本概念…

初学编程,到底选Java还是C++?

初学编程,到底选Java还是C? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#x…

Excel 读写

using System.Collections; using System.Collections.Generic; using OfficeOpenXml; using System.IO; using UnityEngine; using System.Text;public class ExcelTest : MonoBehaviour {void Start(){string _filePath Application.streamingAssetsPath "/学生信息.x…

yolov5目标检测神经网络——损失函数计算原理

前面已经写了4篇关于yolov5的文章,链接如下: 1、基于libtorch的yolov5目标检测网络实现——COCO数据集json标签文件解析 2、基于libtorch的yolov5目标检测网络实现(2)——网络结构实现 3、基于libtorch的yolov5目标检测网络实现(3)——Kmeans聚类获取anc…

AcWing 861. 二分图的最大匹配—匈牙利算法

题目链接:AcWing 861. 二分图的最大匹配 问题描述 分析 该题是一道典型的二分图匹配模板题,求解最大匹配数,可以用匈牙利算法来解决,下面举一个例子来说明匈牙利算法是如何运行的 以该图为例,其中 1可以匹配a,c 2可以匹配a,b 3…