区块链(1):区块链简介

区快链是通过密码技术保护的分布式数据库这是比特币背后的技术。

本文将逐步带您了解区块链。 

1 区块链BLOCKCHAIN的类的定义

区块链有一个区块列表。

它从一个单独的块开始,称为 genesis block【创世区块】

2 区块链BLOCK的类的定义

第一个区块叫做 Genesis[创世] block,每个块存储以下信息:

  • Index
  • Timestamp
  • Hash
  • Previous Hash
  • Data
  • Nonce(挖矿原理,比特币难度举例)

3 区块链中创世区块

创世区块(genesis block)是区块链中的第一个区块,其区块序号是0。它是区块链中唯一一个不指向前一个区块的区块,因为没有前一个区块。它也不包含交易,因为还没产生任何以太币。

只有网络中的两个节点有相同的创世区块,它们才会彼此配对,也就是说,如果两个对等节点有相同的创世区块才会进行同步 区块,否则它们将彼此拒绝。不同的创世区块有较高难度值也不能替代难度值较低的。每一个节点生成自己的创世区块。对于不同的网络,创世区块被硬编码到客户端里。

4 区块Block6个属性的说明

(1)Index

该索引是链中的块的位置。

【创世区块】的索引是0。下一个区块的索引是1。

(2)Timestamp

创建块的时间记录。

时间戳有助于保持区块链的顺序。

(3)HASH

哈希看起来像一堆随机数。它是唯一标识数据的数值,或数据的“数字指纹”。

Hash属性:

  • 哈希具有固定的长度
  • 相同的数据结果相同的hash值。
  • 器实际上不同的数据会导致不同的hash值。
  • 图 Hash值很容易计算。
  •  不可能将Hash值转换为数据。[不可逆]
  • 个数据的小改变会导致Hash值的巨大变化。

  • VALID HASH(有效散列)

有效的Hash是满足特定要求的Hash。对于这种区块链,哈希前面的三个前导零是对有效散列的要求。

注意:所需的前导零的个数是困难或难度系数,个数越多,难度系数越大。

  • BLOCK HASH CALCULATION(块散列计算

Hash函数将数据作为输入,并返回一个唯一的Hasn值。

f(data) = hash

由于哈希是整个块的“数字指纹”,因此数据是索引,时间截,以前的哈希,块数据和随机数的组合

f(index+previous hash+timestamp+data+nonce)= hash

替换我们的起源块的值,我们得到

f(o+"o"+1508270000000+"Welcome to Blockchain Demo 2.!"+604) =ooodc75a315ca1f9c9816247do3ddieid219939d3810hd98ed2

(4)Previous Hash

Previous Hash是前一个Hash,为前一个块的Hash。 由于没有以前的块,因此[创世区块]的前一个散列值为“0”。

(5)Data

Data为存储在块上的数据。在诸如比特币这样的加密货币中,数据将包括货币交易。如果数据发生更改,由于数据是输入变量的Hash,因此更改数据将更改Hash值。新的散列将失去三个前导零,并且变得无效。需重新挖矿生成有效的Hash值。

数据更改后,后续的区块也将无效。Hash更改将导致后续块的前一个Hash值发生变化。由于之前的Hash值用于计算Hash值,因此后面的Hash值会改变。这将导致区块的级联失效。

所以说,挖矿是查找有效Hash值的过程。

(6)Nonce(重点说明:挖矿原理,比特币难度举例)

nonce是用于查找有效散列的数字。nonce从0开始迭代,直到找到有效的散列。这用到了处理能力【工作量证明】!

随着难度的增加,可能的有效散列数量会减少。,使用较少可能的有效哈希值,需要更多的处理能力才能找到有效的哈希。

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

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

相关文章

QT5到QT6产生的一些变化【QT环境搭建篇】

1、QT 重写enterEvent 鼠标进入事件没有作用 widget中的事件函数 由原来的event(QEvent *event) 变为enterEvent(QEnterEvent *event) 重写改成这样就可以了 void enterEvent(QEnterEvent *event); 2、error C4996: QString::SkipEmptyParts(“SkipEmptyParts”:…

一阶低通滤波器滞后补偿算法

一阶低通滤波器的推导过程和双线性变换算法请查看下面文章链接: PLC算法系列之数字低通滤波器(离散化方法:双线性变换)_双线性离散化_RXXW_Dor的博客-CSDN博客PLC信号处理系列之一阶低通(RC)滤波器算法_RXXW_Dor的博客-CSDN博客_rc滤波电路的优缺点1、先看看RC滤波的优缺点…

Redis 篇

1、为什么要用缓存? 使用缓存的目的就是提升读写性能。而实际业务场景下,更多的是为了提升读性能,带来更好的性能,带来更高的并发量。 Redis 的读写性能比 Mysql 好的多,我们就可以把 Mysql 中的热点数据缓存到 Redis…

设计模式:组合模式

目录 组件代码实现优缺点源码中应用总结 组合模式是一种结构型设计模式,用于将对象组织成树形结构,以表示“部分-整体”的层次结构。组合模式使得客户端可以统一地处理单个对象和组合对象,而不需要区分它们之间的差异。 在组合模式中&#x…

Linux学习第14天:Linux设备树(一):枝繁叶茂见晴天

本节笔记主要学习了Linux设备树相关知识点,由于内容较多,打算分两天进行总结。今天着重学习Linux设备树,主要包括前三节内容,分别是概念、格式和语法。 本节思维导图内容如下: 一、什么是设备树 设备树可以用一个图来进…

Vivado XADC IP核 使用详解

本文介绍Vivado中XADC Wizard V3.3的使用方法。 XADC简介 XADC Wizard Basic Interface Options: 一共三种,分别是AXI4Lite、DRP、None。勾选后可在界面左侧看到相应通信接口情况。Startup Channel Selection Simultaneous Selection:同时监…

qt4,qt5,qt6嵌入式linux运行Qt程序不同的地方

下面为Qt 4、Qt 5 和 Qt 6分别举例说明它们在嵌入式Linux上运行Qt程序的一些不同之处: Qt 4 示例场景: 假设你正在开发一个嵌入式Linux设备上的控制面板应用程序,该应用程序使用Qt 4。 不同之处: 构建系统: 使用qma…

长胜证券:煤价突破900元大关 GLP-1减重药进入集中获批期

上星期五,两市股指早盘震动上扬,午后回落走低。到收盘,沪指跌0.28%报3117.74点,深成指跌0.52%报10144.59点,创业板指涨跌0.45%报2002.73点,科创50指数涨0.71%;两市合计成交7217亿元,…

【算法训练-二叉树 一】【遍历二叉树】前序遍历、中序遍历、后续遍历、层序遍历、锯齿形层序遍历、二叉树右视图

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【二叉树的遍历】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为…

OmniShade - Mobile Optimized Shader

OmniShade Pro是一款专为移动设备设计的高性能着色器。它包含多种技术,使其几乎可以实现从现实到卡通到动漫的任何外观,但由于自适应系统仅计算任何功能集所需的内容,它的速度也非常快。 它旨在弥合Unity的标准着色器和移动着色器之间的差距,但由于其高级别的风格化、组合…

浏览器事件机制详解

目录 前言 事件类型 鼠标事件 表单事件 窗口事件 DOM事件 多媒体事件 拖拽与放置事件 移动设备事件 剪切板事件 错误事件 过渡、动画事件 事件监听 onevent addEventListener(event) 事件触发 事件流程 捕获阶段 目标阶段 冒泡阶段 事件对象 总结 相关代…

Pyhton压缩JS代码

文章目录 1.安装依赖2.目录结构3.代码4.执行结果 1.安装依赖 pip install jsmin2.目录结构 3.代码 import jsmindef run(src_path, tgt_path):with open(src_path, "r", encodingutf-8) as input_file:with open(tgt_path, "w", encodingutf-8) as outpu…

【Java 基础篇】Java 字节流详解:从入门到精通

Java中的字节流是处理二进制数据的关键工具之一。无论是文件操作、网络通信还是数据处理,字节流都发挥着重要作用。本文将从基础概念开始,深入探讨Java字节流的使用,旨在帮助初学者理解和掌握这一重要主题。 什么是字节流? 在Ja…

万能适配器basequickadapter + recycleview实现单选并且默认选择第一个

1、首先,确保您已经添加了BaseQuickAdapter和RecyclerView的依赖项。您可以在项目的build.gradle文件中添加以下依赖项: dependencies {implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4implementation androidx.recyclerview:r…

C/C++ sscanf正则测试

分号分割&#xff0c;等号解析 #include <iostream> #include <string.h>typedef struct{char name[32];int priority; }codes_t;int codes_get(char* str, codes_t* codes){int i 0;char *ptr;std::cout<<"before strtok str: "<<str<&…

Claude 使用指南 | 可与GPT-4媲美的语言模型

本文全程干货&#xff0c;让你轻松使用上claude&#xff0c;这也是目前体验cluade的唯一途径&#xff01;废话不多说&#xff0c;直接上教程&#xff0c;cluade的能力不逊于GPT4&#xff0c;号称是ChatGPT4.0最强竞品。相对Chatgpt来说&#xff0c;Claude不仅是完全免费的&…

每个高级前端工程师都应该知道的前端布局

首发于公众号 大迁世界,欢迎关注。📝 每周一篇实用的前端文章 🛠️ 分享值得关注的开发工具 😜 分享个人创业过程中的趣事 快来免费体验ChatGpt plus版本的,我们出的钱 体验地址:https://chat.waixingyun.cn 可以加入网站底部技术群,一起找bug,另外新版作图神器已上线…

vue自定义指令来控制按钮权限

参考视频 在src下新建directives/has.js文件用来创建自定义指令 export default {bind(el, bindings) { // bind钩子函数,接收两个参数// console.log(指令绑定到元素上的时候);// 所有权限const permissions JSON.parse(localStorage.getItem(permissions));// 需要的权限c…

springboot集成kafka

创建工程 父工程pom 父工程做了子工程管理和包管理 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocati…

Java | 多线程综合练习

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、卖电影票1.题目2.分析3.代码 &#x1f334;二、送礼物1. 题目2. 分析3.代码 &#x1f334;三.打印奇数1. 题目2.…