区块链技术与应用 - 学习笔记1【引言】

大家好,我是比特桃。本系列主要将我之前学习区块链技术时所做的笔记,进行统一的优化及整合。其中大量笔记源于视频课程:北京大学肖臻老师《区块链技术与应用》公开课。肖老师的课让我找回了求知若渴般的感觉,非常享受学习这门课的过程。当我看到区块链难度根据区块之间的间隔自动调整的时候;当我看到双重签名,通过控制反转来解决收款人签名的时候;当我知道区块恋、TheDAO、美链贼有意思的故事的时候;当我听到:不要被学术界的思维限制了头脑,不要被程序员的思维限制了想象力,尽信书不如无书的时候……都让我畅快淋漓,欲罢不能!我还记得有一天晚上,看到 BTC 巧妙的设计后,当场直接拍案而起,妙极了!推荐对区块链感兴趣的同学听一下这门课,把握时代机遇,共创美好未来。

注:本系列笔记尽量阐述基础知识细节,但还是需要数据结构相关知识和一定的编程基础。

目录

(系列笔记更新中……更新完后将统一整合目录)

一、背景

区块链技术源自中本聪在 2008 年发表的《Bitcoin-Whitepaper》,并在 2009 年创立了 BTC (比特币)网络,开发出第一个区块,即创世区块。有人将该技术称为下一代的价值互联网 WEB 3.0、伟大的发明并与工业革命相提并论。也有人说是庞氏骗局、割韭菜的工具、一文不值。虽然区块链技术的首次应用的确是 BTC,但其背后涵盖大量的计算机、分布式、密码学等多技术的交叉融合。在目前阶段,我们应当正视区块链的技术的应用。不用过分吹捧,也不必不屑一顾。目前,区块链技术正在高速发展,基于区块链技术的上层应用具有巨大价值。希望大家保持理性,不要错过区块链这么有价值的技术。
在这里插入图片描述
十四五规划中区块链已成为七大数字产业之一,是国家着重发展的技术。多项扶持政策陆续出台,迎来了发展机遇。区块链的产业生态也在更加繁荣,越来越多的企业加入了产业建设中。区块链正在解决具体的商业问题,大规模的应用正在到来。与其他技术 IOT 通讯等技术的融合发展,正在深刻改变产业协作中的生产关系。夯实数字经济可信链接的基础设施,产业协作的数字化浪潮已经到来。这将刺激产业经济,迸发出新的活力,释放出巨大的产业新动力。

二、区块链含义

区块链作为 BTC 的底层技术,本质上是一个去中心化的数据库。是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。区块链技术是一种不依赖第三方、通过自身分布式节点进行网络数据的存储、验证、传递和交流的一种技术方案。因此,有人从金融会计的角度,把区块链技术看成是一种分布式开放性去中心化的大型网络记账薄,任何人任何时间都可以采用相同的技术标准加入自己的信息,延伸区块链,持续满足各种需求带来的数据录入需要。

通俗一点说,区块链技术就指一种全民参与记账的方式。所有的系统背后都有一个数据库,可以把数据库看成是就是一个大账本。那么谁来记这个账本就变得很重要。目前就是谁的系统谁来记账,微信的账本就是腾讯在记,支付宝的账本就是阿里在记。但现在区块链系统中,系统中的每个人都可以有机会参与记账。在一定时间段内如果有任何数据变化,系统中每个人都可以来进行记账,系统会评判这段时间内记账最快最好的人,把他记录的内容写到账本,并将这段时间内账本内容发给系统内所有的其他人进行备份。这样系统中的每个人都了一本完整的账本。这种方式,我们就称它为区块链技术。
在这里插入图片描述
区块链技术被认为是互联网发明以来最具颠覆性的技术创新,它依靠密码学和数学巧妙的分布式算法,在无法建立信任关系的互联网上,无需借助任何第三方中心的介入就可以使参与者达成共识,以极低的成本解决了信任与价值的可靠传递难题。

从区块链的形成来看其具有如下特点:

  • 去中心化,无需第三方介入,实现人与人点对点交易和互动。
  • 信息不可篡改,数据信息一旦被写入区块中就不能更改撤销。例如比特币交易信息被写入比特币系统中,则任何人都不能进行更改。
  • 公开透明,极短时间内,区块信息会被复制到网络中的所有区块,实现全网数据同步,每个节点 都能回溯交易双方过去的所有交易信息。
  • 去信用化,区块链使用的非对称加密技术可实现去信用化,节点之间无需信任也可以进行交易。

区块链系统采用去中心化的组织形式,整个系统非常的扁平化不存在中心化的权威机构或者层级结构管理机构,通过分布式节点间博弈来达到整个系统的自适应,确保了系统整体的稳定性。区块链目前被普遍认为是一种颠覆性的新兴技术,其最大的创新性在于重构了弱信用主体间的信任关系,从而避免了之前依赖中心化的具有高信用的中介机构的方式。这种重建信用体系的方式并非基于个人或者权威机构,而是依赖于共识算法和密码学,具有公开透明的特点。

区块链甚至可以帮助建立全球的去中心化信用体系,让价值传递可以像互联网信息传递一样的便捷,基于这样的方式可以重新构建新型的经济生态体系。以金融行业的清算和结算业务为例,传统中心化的数据库因无法解决多方互信问题,使得每个参与方都需要独立维护一套承载自己业务数据的数据库,这些数据库实际上是一座座信息孤岛,造成清结算过程耗费大量人工进行对账,目前的清结算时间最快也需按天来计。如果存在一个多方参与者一致信任的数据库系统,则可显著减少人工成本及缩短结算周期。

区块链目前被业界认为是引发产业革命的核心要素之一,其去中心化,去中介化,及难篡改,可追溯性,安全可靠等特点以及其发展前景乃至对社会带来的深刻影响都已经获得了广泛的认可。

三、区块链技术体系分类

一般来说业界会按照区块链中心化程度将区块链划分为公有链,联盟链和私有链三类。

公有链通常对加入网络的节点没有限制,节点可以自由的加入或退出网络,每个节点具有平等的权利参与到整个区块链平台的运行中,同时公链的区块链网络也是完全去中心化分布式的组织结构。也正是由于这种组织结构的灵活性就需要对区块链系统的网络扩展能力、可支撑节点数量,共识机制的可扩展性、容错能力、效率方面提出了更高的要求。在公链中每个节点都共享整个区块链系统的账本,无疑对系统的隐私性,安全性构成了巨大的挑战。最后还要对节点进行一定的激励,促使节点可以持续的维护下去从而对整个网络的持续运行作出贡献。比特币和以太坊就是典型的公链。

联盟链则弱化了公链完全去中心化的特性,做到了部分中心化或者多中心化以此来换得更好的性能和更低的维护成本,以便更好的满足企业对于区块链平台的期许。联盟链中的节点通常分属于不同的组织或者联盟,对于想要加入的节点需要获得中心化或者权限较高节点的授权,区块链的维护规则需要由联盟链的参与方协调定制。联盟链适用于小范围的数据交换频繁的组织间共享数据服务等的应用场景,比如跨境汇款结算等业务。超级账本就是非常典型的联盟链平台。

私有链是一种中心化满足特定需求的区块链平台,不对外提供服务或者选择性的开放少许接口,重点满足组织内部的数据管理和审计的区块链平台。

比特币,以太坊,超级账本,三个典型的技术架构体系:
在这里插入图片描述

网络层

区块链网络的 P2P 协议最主要的作用是节点间通信,将分布在不同地理位置的节点通过网络和 P2P 协议连接起来,节点间传输的内容主要是交易数据和区块数据。在区块链网络中,节点时刻监听网络中广播的数据,当接收到邻居节点发来的新交易和新区块时,其首先会验证这些交易和区块是否有效,包括交易中的数字签名、区块中的工作量证明等,只有验证通过的交易和区块才会被处理(新交易被加入正在构建的区块,新区块被链接到区块链)和转发,以防止无效数据的继续传播。

共识层

去中心化的区块链由多方共同管理维护,其网络节点可由任何一方提供,当缺乏准入机制时,部分节点可能并不可信,因而需要支持更为复杂的拜占庭容错(Byzantine Fault-Tolerant,BFT),像超级账本(Hyperledger Fabric)添加了准入机制,只有被授权的节点才能加入网络,因此采取更高效的不容错的RAFT算法。但是在公链场景下,并没有节点准入机制,并且节点数远远高于联盟链场景,导致并不适用BFT算法。同时也为了解决节点自由进出可能带来的女巫攻击(sybil attack)问题,比特币应用了工作量证明(Proof of Work,PoW)机制。其是一种基于哈希函数的工作量证明算法。比特币要求只有完成一定计算工作量并提供证明的节点才可生成区块,每个网络节点利用自身计算资源进行哈希运算以竞争区块记账权,只要全网可信节点所控制的计算资源高于 51%,即可证明整个网络是安全的。

女巫攻击是指攻击者通过创建大量的假名身份来破坏网络服务的信誉系统,并使用它们获得不成比例的巨大影响力。

数据层

比特币、以太坊和超级账本在区块链数据结构、数据模型和数据存储方面各有特色。在数据模型的设计上,比特币采用了基于交易的数据模型,每笔交易由表明交易来源的输入和表明交易去向的输出组成,所有交易通过输入与输出链接在一起,使得每一笔交易都可追溯;以太坊与Hyperledger Fabric 需要支持功能丰富的通用应用,因此采用了基于账户的模型,可基于账户快速查询到当前余额或状态。

在数据存储的设计上,因为区块链数据类似于传统数据库的预写式日志,因此通常都按日志文件格式存储;由于系统需要大量基于哈希的键值检索(如基于交易哈希检索交易数据、基于区块哈希检索区块数据),索引数据和状态数据通常存储在Key-Value 数据库,如比特币、以太坊与超级账本都以 LevelDB数据库存储索引数据。

智能合约层

智能合约是一种用算法和程序来编制合同条款、部署在区块链上且可按照规则自动执行的数字化协议。由于早期计算条件的限制和应用场景的缺失,智能合约并未受到研究者的广泛关注,直到区块链技术出现之后,智能合约才被重新定义。区块链实现了去中心化的存储,智能合约在其基础上则实现了去中心化的计算。

比特币脚本是嵌在比特币交易上的一组指令,由于指令类型单一、实现功能有限,其只能算作智能合约的雏形。以太坊提供了图灵完备的脚本语言Solidity、Serpent与沙盒环境以太坊虚拟机(Ethereum Virtual Machine)简称EVM,以供用户编写和运行智能合约。超级账本的智能合约被称为链码(Chaincode),其选用 Docker 容器作为沙盒环境,Docker 容器中带有一组经过签名的基础磁盘映像及 Go 与 Java 语言的运行时和 SDK,以运行 Go 与 Java 语言编写的链码。

应用层

比特币平台上的应用主要是基于比特币的数字货币交易。以太坊除了基于以太币的数字货币交易外,还支持去中心化应用( Decentralized Application,Dapp),Dapp 是由 JavaScript 构建的Web 前端应用,通过 JSON-RPC 与运行在以太坊节点上的智能合约进行通信。超级账本主要面向企业级的区块链应用,并没有提供数字货币,其应用可基于 Go、Java、Python、Node.js 等语言的SDK 构建,并通过 gPRC 或 REST 与运行在超级账本节点上的智能合约进行通信。

简单来说,网络层保证了节点连通,共识层保证了节点间数据的一致性,数据层高效的组织了区块链中各种数据,智能合约层由用户定义了一套规则用于产生符合具体逻辑的数据,应用层则被用来对外提供各种服务。

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

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

相关文章

弹性盒子的使用

一、定义 弹性盒子是一种用于按照布局元素的一维布局方法,它可以简便、完整、响应式地实现各种页面布局。 容器中存在两条轴,主轴和交叉轴(相当于我们坐标轴的x轴和y轴)。我们可以通过flex-direction来决定主轴的方向。 主轴(main axis&am…

数学建模:Logistic回归预测

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 数学建模:Logistic回归预测 Logistic回归预测 logistic方程的定义: x t 1 c a e b t x_{t}\frac{1}{cae^{bt}}\quad xt​caebt1​ d x d t − a b e b t ( c a e b t ) 2 >…

HarmonyOS—UI开发性能提升的推荐方法

注:本文转载自HarmonyOS官网文档 开发者若使用低性能的代码实现功能场景可能不会影响应用的正常运行,但却会对应用的性能造成负面影响。本章节列举出了一些可提升性能的场景供开发者参考,以避免应用实现上带来的性能劣化。 使用数据懒加载 开…

vue Cesium接入在线地图

Cesium接入在线地图只需在创建时将imageryProvider属性换为在线地图的地址即可。 目录 天地图 OSM地图 ArcGIS 地图 谷歌影像地图 天地图 //矢量服务let imageryProvider new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/vec_w/wmts?s…

Zookeeper 入门

第 1 章 Zookeeper 入门 1.1概述 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将…

找redis大key工具rdb_bigkeys

github官网 https://github.com/weiyanwei412/rdb_bigkeys 在centos下安装go [roothadoop102 rdb_bigkeys-master]# wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz [roothadoop102 rdb_bigkeys-master]# tar -zxf go1.13.5.linux-amd64.tar.gz -C /usr/local将g…

第一个实例:QT实现汽车电子仪表盘

1.实现效果 1.1.视频演示 QT 实现汽车仪表盘 1.2.实现效果截图 2.生成的安装程序 此程序是个windows下的安装程序,可以直接安装,看到汽车仪表盘的实现效果,安装程序从下面链接下载: 【免费】使用QT实现的汽车电子仪表盘,在windows下的安装程序资源-CSDN文库 3.功能概述…

【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型(全网首发)

【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型(全网首发) 一、学习资料 (LGBM)是一种基于梯度增强决策树(GBDT)算法。 本次研究三个内容,分别是回归预测,二分类预测和多分类预…

unity面试题(性能优化篇)

CPU 预处理、缓存数据 注释空的unity函数 运算cpu->gpu 减少昂贵计算(开方) 限制帧数 加载(预加载、分帧加载、异步加载、对象池) 慎用可空类型比较 避免频繁计算(分帧、隔帧) 算法优化 变体收集预热 使用clear操作代替容器的new操作 unity spine使用二进制格式…

[SpringBoot3]博客管理系统(源码放评论区了)

八、博客管理系统 创建新的SpringBoot项目,综合运用以上知识点,做一个文章管理的后台应用。依赖: Spring WebLombokThymeleafMyBatis FrameworkMySQL DriverBean Validationhutool 需求:文章管理工作,发布新文章&…

windows11 利用vmware17 安装rocky9操作系统

下载相关软件和镜像 vmware17 下载 下载页面 Download VMware Workstation Pro ​ rocky8镜像下载 官网链接:Rocky Linux 下载页面 Download Rocky | Rocky Linux 点击Minimal下载 安装rocky9 选择镜像文件,点击下一步 点击下一步 启动虚拟机 选…

CSS中border-radius的来美化table的实战方案

border-radius是一种CSS属性,用于设置元素的边框的圆角程度。其具体的用法如下: 设置一个值:可以为元素设置一个单一的圆角半径,这个半径将应用于元素的四个角。例如: div {border-radius: 10px; }设置四个值&#x…

【文心一言】学习笔记

学习资料 《听说文心一言App霸榜了,那必须来一波全方位实测了》 情感陪伴:文心一言 App 可以充当用户的情感树洞,提供知心姐姐、【暖男】等角色扮演,为用户提供情绪疏导、情感分析、约会建议等服务。 1. 模型属性 【提示词工具…

NTT功能与实现

NTT的基础功用与拓展功能: 1.evaluate和interpolate evaluate的本质是选择n个点(假设f(x)的度为n),计算得到其值,因此根据定义可以直接进行代入计算。为了加快计算的过程选取 w n w_n wn​的幂次(DFT问题即离散傅里叶变换),使用FFT算法来加…

OpenGL-入门-BMP像素图glReadPixels(1)实现读取屏幕中间的颜色和获取屏幕上鼠标点击位置的颜色

glReadPixels函数用于从帧缓冲区中读取像素数据。它可以用来获取屏幕上特定位置的像素颜色值或者获取一块区域内的像素数据。下面是该函数的基本语法: void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *da…

JVM内存模型

文章目录 一、前言二、JVM内存模型1、Java堆2、方法区3、Java栈3.1、局部变量表3.2、操作数栈3.3、动态链接3.4、返回地址 4、本地方法栈5、程序计数器 一、前言 本文将详细介绍JVM内存模型,JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM…

手撕二叉平衡树

今天给大家带来的是平衡树的代码实现&#xff0c;如下&#xff1a; #pragma once #include <iostream> #include <map> #include <set> #include <assert.h> #include <math.h> using namespace std; namespace cc {template<class K, clas…

TypeScript学习 + 贪吃蛇项目

TypeSCript简介 TypeScript是JavaScript的超集。它对JS进行了扩展&#xff0c;向JS中引入了类型的概念&#xff0c;并添加了许多新的特性。TS代码需要通过编译器编译为JS&#xff0c;然后再交由JS解析器执行。TS完全兼容JS&#xff0c;换言之&#xff0c;任何的JS代码都可以直…

IP地址、网关、网络/主机号、子网掩码关系

一、IP地址 IP地址组成 IP地址分为两个部分&#xff1a;网络号和主机号 &#xff08;1&#xff09;网络号:标识网段&#xff0c;保证相互连接的两个网段具有不同的标识。 &#xff08;2&#xff09;主机号:标识主机&#xff0c;同一网段内&#xff0c;主机之间具有相同的网…

构建稳定的爬虫系统:如何选择合适的HTTP代理服务商

在构建一个稳定、高效的爬虫系统中&#xff0c;选择合适的HTTP代理服务商是至关重要的一步。本文将介绍如何选取可靠且性能优秀的HTTP代理服务供应商&#xff0c;来完成搭建一个强大而稳定的爬虫系统。 1.了解不同类型和特点 -免费公开代理服务器:提供免费但可能存在限制或不…