区块链技术与应用 - 学习笔记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.mzph.cn/news/65003.shtml

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

相关文章

内存管理方式

内存管理 一、C/C内存分布1、内存空间的介绍2、示例题目3、示例题目图解 二、C语言动态内存管理方式1、代码2、介绍 三、C内存管理方式1、概念2、代码3、代码所代表的意义 四、new和delete操作自定义类型1、代码2、运行结果3、特点 五、operator new与operator delete函数1、概…

Go的数据结构-hashmap

开放寻址法和拉链法 runtime.hamp bucket的数据结构 bucket的指针指向这里 map初始化:make 和字面量 make初始化 新建一个hamp结尾体,计算大B,创建一个桶数组 字面量初始化 map的并发解决 sync.map

无涯教程-JavaScript - QUARTILE函数

QUARTILE函数取代了Excel 2010中的QUARTILE.INC函数。 描述 该函数返回数据集的四分位数。四分位数通常用于销售和调查数据中,以将人群分为几类。 语法 QUARTILE (array,quart)争论 Argument描述Required/OptionalArrayThe array or cell range of numeric values for whi…

怎么提取视频中的音乐保存到本地?其实方法很简单

当你想要使用视频中的音乐时,你可以考虑将它从视频中提取出来。这可以用于制作音频样本集,制作铃声或其他音频素材,或者向其他人展示视频的音乐部分而无需显示视频本身。如果你是一位音乐制作人员,你可能会需要一些特定类型的音效…

CP Autosar-Ethernet配置

文章目录 前言一、Eth层级结构介绍二、Autosar实践2.1 ETH Driver2.2 Eth InterfaceEth Interface Autosar配置2.3 TcpIp模块Eth TcpIp Autosar配置2.4 SoAdEth SoAd配置前言 因汽车E/E架构和功能的复杂度提升而带来的对车辆数据传输带宽提高和通讯方式改变(基于服务的通讯-S…

JavaScript(函数,作用域和闭包)

目录 一,什么是函数1.1,常用系统函数1.2,函数声明 1.3,函数表达式二,预解析2.1,函数自调用 2.2,回调函数三,变量的作用域3.1,隐式全局变量 四,作用域与块级作…

Seaborn绘制热力图的子图

Seaborn绘制热力图的子图 提示:如何绘制三张子图 绘制的时候,会出现如下问题 (1)如何绘制1*3的子图 (2)三个显示条,如何只显示最后一个 提示:下面就展示详细步骤 Seaborn绘制热力…

vue 根据数值判断颜色

1.首先style样式给两种颜色 用:class 三元运算符判断出一种颜色 第一步&#xff1a;在style里边设置两种颜色 .green{color: green; } .orange{color: orangered; }在取数据的标签 里边 判断一种颜色 :class"item.quote.current >0 ?orange: green"<van-gri…

单片机-控制按键点亮LED灯

1、按键电路图 定义四个按键引脚 1、按键按下 为 输入为低电平 2、按键不按下 IO有上拉电阻&#xff0c;为高电平 // 定义 按键的 管教 sbit KEY1 P3^1; sbit KEY2 P3^0; sbit KEY3 P3^2; sbit KEY4 P3^3; 2、LED灯电路图 LED 输出高电平为亮 // 定义LED灯 管教 sbit LED1…

pycharm 打开Terminal时报错activate.ps1,因为在此系统上禁止运行脚本,并因此无法进入虚拟环境

pycharm 打开Terminal时报错activate.ps1&#xff0c;因为在此系统上禁止运行脚本&#xff0c;并因此无法进入虚拟环境 如下图所示&#xff1a; 网上说可以set_restrictFalse什么的&#xff0c;虽然也可但可能会降低电脑安全性&#xff0c;可以将下面的终端改为cmd.exe即可

使用candump+grep查看CAN报文

在Linux系统中观察看CAN报文&#xff0c;我们一般使用candump&#xff0c;但是有时候会发现总线上CAN报文太多&#xff0c;例如开启了好几个PDO&#xff0c;这就导致想看的报文被夹杂到报文的海洋里&#xff0c;然后再去找&#xff0c;非常麻烦。 candump也提供了只观察某个报…

ImageSharp.Web实战:轻松搭建高效图片服务

很多情况下&#xff0c;在开发如PC、H5、小程序等综合平台的时候&#xff0c;图片的展示是个比较头疼的问题。尤其是有会员功能&#xff0c;会员可以上传图片的平台&#xff0c;更是一件麻烦事。 平台展示图片的地方&#xff0c;尺寸是定义好的。但用户不配合&#xff0c;上传的…

开发总结:webpack

webpack官网webpack | webpack 中文文档 | webpack 中文网 一、什么是webpack webpack 可以看做是模块打包机&#xff0c;它所做的事情是&#xff1a;分析你的项目结构&#xff0c;找到JavaScript 模块以及其它的一些浏览器不能直接运行的拓展语言&#xff08;Scss&#xff0…

Segment Routing原理

以上内容均属原创&#xff0c;如有不详或错误&#xff0c;敬请指出。本文作者&#xff1a; 坏坏 本文链接&#xff1a; http://t.csdn.cn/2fUE5 版权声明&#xff1a; 本博客所有文章除特别声明外&#xff0c;如需转载&#xff0c;请联系作者注明出处并附带本文链接&#xf…

处理时延降低24倍,联通云粒数据引擎优化实践

*作者&#xff1a;郑扬勇&#xff0c;云粒星河数据中台产品负责人 云粒智慧科技有限公司成立于 2018 年 6 月&#xff0c;是中国联通集团混改以来成立的首家合资公司&#xff0c;是中国智慧城市数智化建设者。一直以来&#xff0c;云粒智慧以数字化、智能化、集约化产品为核心&…

CS144(2023 Spring)Lab 0:networking warmup(环境搭建 webget bytestream)

文章目录 前言其他笔记相关链接 1. Set up GNU/Linux on your computer2. Networking by hand3. Writing a network program using an OS stream socket3.1 Linux配置3.2 C规范3.3 Writing webget3.3.1 实现3.3.2 测试 4. An in-memory reliable byte stream4.1 思路分析4.2 代…

HTTPS安全通信和SSL Pinning

随着互联网的迅速发展&#xff0c;网络通信安全问题日益凸显。在这一背景下&#xff0c;HTTPS作为一种加密通信协议得到了广泛应用&#xff0c;以保障用户的数据隐私和信息安全。本文将介绍HTTPS的基本原理、发展历程&#xff0c;以及与之相关的中间人攻击和防护方法。 1. HTT…

Lesson4-1:OpenCV图像特征提取与描述---角点特征

学习目标 理解图像的特征知道图像的角点 1 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片&#xff0c;然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序&#xff0c;那计算机就也会玩拼图游戏了。 在拼图时&#xff…

linux定时删除服务器日志

不说废话。直接进入操作流程 linux 定时任务是用的crontab 查看 crontab是否启动 service crond statusdead 死的 启动crontab service crond start 再次查看状态 running 运转的 查看 crontab cat /etc/crontab 查看 crontab任务 crontab -l 编辑 crontab任务 crontab …

进程、操作系统

文章目录 一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09;1. 概述2. CPU 二、操作系统&#xff08;Operating System&#xff09;三、进程(process)/任务(task) 一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; 1. 概述 分类 CPU 中央处…