搜索
首页后端开发Golang区块链实战-Hyperledger Fabric(一) 10分钟新手入门

导语

大家好,我是Michael,现在在一家上海的互联网公司工作,随着政府对区块了项目的重视,人们开始称2020年将会是区块链发展的元年,我也跟朋友聊了很多次区块链,也想自己实践一下,于是在调研了以太坊、EOS、NEO等众多选型之后选择了联盟链,也就是我们今天的主角 Hyperledger fabric。

文章结构

本系列文章将分为三部分,通过三篇文章帮助大家入门Hyperledger Fabric开发,搭建自己的联盟链项目:

一、基础介绍

二、环境搭建

三、应用部署与启动

基础介绍

Hyperledger fabric——区块链世界的新希望

2015 年 12 月,开源世界的旗舰组织 —— Linux 基金会牵头,联合 30 家初始企业成员(包括 IBM、Accenture、Intel、J.P.Morgan、R3、DAH、DTCC、FUJITSU、HITACHI、SWIFT、Cisco 等),共同宣布了超级账本(Hyperledger)联合项目的成立。超级账本项目致力为透明、公开、去中心化的企业级分布式账本技术提供开源参考实现,并推动区块链和分布式账本相关协议、规范和标准的发展。项目官方网站为 hyperledger.org ,Hyperledger fabric 是其重要的项目之一。

很多新同学对区块链很多专属名词可能不是太了解,所以第一节跟大家先介绍一下Hyperledger fabric 中涉及到的名词。

名词介绍:

Anchor Peer – 锚节点锚节点是通道中能被所有对等节点探测、并能与之进行通信的一种对等节点。通道中的每个成员都有一个(或多个,以防单点故障)锚节点,允许属于不同成员身份的节点来发现通道中存在的其它节点。

Block – 区块在一个通道上,(区块是)一组有序交易的集合。区块往往通过密码学手段(Hash 值)连接到前导区块。

Zhu Jiang:区块是一组有序的交易集合,在通道中经过加密(哈希加密)后与前序区块连接。

Chain – 链chain就是block之间以hash连接为结构的交易日志。peer从order service接收交易block,并根据背书策略和并发冲突标记block上的交易是否有效,然后将该block追加到peer文件系统中的hash chain上。Z

hu Jiang:账本的链是一个交易区块经过“哈希连接”结构化的交易日志。对等节点从排序服务收到交易区块,基于背书策略和并发冲突来标注区块的交易为有效或者无效状态,并且将区块追加到对等节点文件系统的哈希链中。

Chaincode – 链码链码是一个运行在账本上的软件,它可以对资产进行编码,其中的交易指令(或者叫业务逻辑)也可以用来修改资产。

Channel – 通道通道是构建在“Fabric”网络上的私有区块链,实现了数据的隔离和保密。通道特定的账本在通道中是与所有对等节点共享的,并且交易方必须通过该通道的正确验证才能与账本进行交互。通道是由一个“配置块”来定义的。

Commitment – 提交一个通道中的每个对等节点都会验证交易的有序区块,然后将区块提交(写或追加)至该通道上账本的各个副本。对等节点也会标记每个区块中的每笔交易的状态是有效或者无效。

Concurrency Control Version Check – 并发控制版本检查(CCVC)CCVC是保持通道中各对等节点间状态同步的一种方法。对等节点并行的执行交易,在交易提交至账本之前,对等节点会检查交易在执行期间读到的数据是否被修改。如果读取的数据在执行和提交之间被改变,就会引发CCVC冲突,该交易就会在账本中被标记为无效,而且值不会更新到状态数据库中。

Configuration Block – 配置区块包含为系统链(排序服务)或通道定义成员和策略的配置数据。对某个通道或整个网络的配置修改(比如,成员离开或加入)都将导致生成一个新的配置区块并追加到适当的链上。这个配置区块会包含创始区块的内容加上增量。

Consensus – 共识共识是贯穿整个交易流程的广义术语,其用于产生一个对于排序的同意书和确认构成区块的交易集的正确性。

Current State – 当前状态ledger的current state表示其chain交易log中所有key的最新值。peer会将处理过的block中的每个交易对应的修改value提交到ledger的current state,由于current state表示channel所知的所有最新的k-v,所以current state也被称为World State。Chaincode执行交易proposal就是针对的current state。

Dynamic Membership – 动态成员Fabric支持动态添加-移除members、peers和ordering服务节点,而不会影响整个网络的操作性。当业务关系调整或因各种原因需添加-移除实体时,Dynamic Membership至关重要。

Endorsement – 背书Endorsement 是指一个peer执行一个交易并返回YES-NO给生成交易proposal的client app 的过程。chaincode具有相应的endorsement policies,其中指定了endorsing peer。

Endorsement policy – 背书策略Endorsement policy定义了依赖于特定chaincode执行交易的channel上的peer和响应结果(endorsements)的必要组合条件(即返回Yes或No的条件)。

Endorsement policy可指定对于某一chaincode,可以对交易背书的最小背书节点数或者最小背书节点百分比。背书策略由背书节点基于应用程序和对抵御不良行为的期望水平来组织管理。在install和instantiate Chaincode(deploy tx)时需要指定背书策略。

Fabric-caFabric-ca是默认的证书管理组件,它向网络成员及其用户颁发基于PKI的证书。CA为每个成员颁发一个根证书(rootCert),为每个授权用户颁发一个注册证书(eCert),为每个注册证书颁发大量交易证书(tCerts)。

Genesis Block – 初始区块Genesis Block是初始化区块链网络或channel的配置区块,也是链上的第一个区块。

Gossip Protocol – Gossip协议Gossip数据传输协议有三项功能:

1)管理peer发现和channel成员;

2)channel上的所有peer间广播账本数据;

3)channel上的所有peer间同步账本数据。

Initialize – 初始化一个初始化chaincode程序的方法。

Install – 安装将chaincode放到peer的文件系统的过程。(译注:即将ChaincodeDeploymentSpec信息存到chaincodeInstallPath-chaincodeName.chainVersion文件中)

Instantiate – 实例化启动chaincode容器的过程。(译注:在lccc中将ChaincodeData保存到state中,然后deploy Chaincode并执行Init方法)Invoke – 调用用于调用chaincode内的函数。

Chaincode invoke就是一个交易proposal,然后执行模块化的流程(背书、共识、 验证、 提交)。invoke的结构就是一个函数和一个参数数组。

Leading Peer – 主导节点每一个Member在其订阅的channel上可以拥有多个peer,其中一个peer会作为channel的leading peer代表该Member与ordering service通信。ordering service将block传递给leading peer,该peer再将此block分发给同一member下的其他peer。

Ledger – 账本A ledger is a channel’s chain and current state data which is maintained by each peer on the channel.Ledger是个channel的chain和由channel中每个peer维护的world state。(这个解释有点怪)

Member – 成员拥有网络唯一根证书的合法独立实体。像peer节点和app client这样的网络组件会链接到一个Member。

Membership Service Provider – MSPMSP是指为client和peer提供证书的系统抽象组件。

Client用证书来认证他们的交易;peer用证书认证其交易背书。该接口与系统的交易处理组件密切相关,旨在使已定义的成员身份服务组件以这种方式顺利插入而不会修改系统的交易处理组件的核心。

Membership Services – 成员服务成员服务在许可的区块链网络上认证、授权和管理身份。

在peer和order中运行的成员服务的代码都会认证和授权区块链操作。它是基于PKI的MSP实现。fabric-ca组件实现了成员服务,来管理身份。特别的,它处理ECert和TCert的颁发和撤销。ECert是长期的身份凭证;TCert是短期的身份凭证,是匿名和不可链接的。

Ordering Service – 排序服务或共识服务将交易排序放入block的节点的集合。

ordering service独立于peer流程之外,并以先到先得的方式为网络上所有的channel作交易排序。ordering service支持可插拔实现,目前默认实现了SOLO和Kafka。ordering service是整个网络的公用binding,包含与每个Member相关的加密材料。Peer – 节点一个网络实体,维护ledger并运行Chaincode容器来对ledger执行read-write操作。peer由Member拥有和维护。

Policy – 策略有背书策略,校验策略,区块提交策略,Chaincode管理策略和网络-通道管理策略。

Proposal – 提案一种针对channel中某peer的背书请求。每个proposal要么是Chaincode instantiate要么是Chaincode invoke。

Query – 查询对于current state中某个key的value的查询请求。

Software Development Kit – SDKSDK为开发人员提供了一个结构化的库环境,用于编写和测试链码应用程序。

SDK完全可以通过标准接口实现配置和扩展,像签名的加密算法、日志框架和state存储这样的组件都可以轻松地实现替换。SDK API使用gRPC进行交易处理,成员服务、节点遍历以及事件处理都是据此与fabric通信。目前SDK支持Node.js、Java和Python。

State Database – stateDB为了从Chaincode中高效的读写,Current state 数据存储在stateDB中,包括levelDB和couchDB。

System Chain – 系统链包含在系统级定义网络的配置区块。

系统链存在于ordering service中,与channel类似,具有包含以下信息的初始配置:MSP信息、策略和信息配置。对整个网络的任何变化(例如新的Org加入或者添加新的Ordering节点)将导致新的配置区块被添加到系统链。

系统链可看做是一个channel或一组channel的公用binding。例如,金融机构的集合可以形成一个财团(以system chain表示),然后根据其相同或不同的业务创建channel。

Transaction – 交易Chaincode的invoke或instantiate操作。Invoke是从ledger中请求read-write set;Instantiate是请求在peer上启动Chaincode容器。

小结:

以上就是我们第一节为大家介绍的区块链的基础知识,这些可能比较枯燥,但是我们需要对这些名词和内容进行初步的了解,这好比我们写代码需要了解函数名与关键词一样,只有掌握了这些才能更好的开始我们的工作。

以上是区块链实战-Hyperledger Fabric(一) 10分钟新手入门的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Golang的影响:速度,效率和简单性Golang的影响:速度,效率和简单性Apr 14, 2025 am 12:11 AM

GoimpactsdevelopmentPositationalityThroughSpeed,效率和模拟性。1)速度:gocompilesquicklyandrunseff,ifealforlargeprojects.2)效率:效率:ITScomprehenSevestAndArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增强开发的简单性:3)SimpleflovelmentIcties:3)简单性。

C和Golang:表演至关重要时C和Golang:表演至关重要时Apr 13, 2025 am 12:11 AM

C 更适合需要直接控制硬件资源和高性能优化的场景,而Golang更适合需要快速开发和高并发处理的场景。1.C 的优势在于其接近硬件的特性和高度的优化能力,适合游戏开发等高性能需求。2.Golang的优势在于其简洁的语法和天然的并发支持,适合高并发服务开发。

Golang行动:现实世界中的示例和应用程序Golang行动:现实世界中的示例和应用程序Apr 12, 2025 am 12:11 AM

Golang在实际应用中表现出色,以简洁、高效和并发性着称。 1)通过Goroutines和Channels实现并发编程,2)利用接口和多态编写灵活代码,3)使用net/http包简化网络编程,4)构建高效并发爬虫,5)通过工具和最佳实践进行调试和优化。

Golang:Go编程语言解释了Golang:Go编程语言解释了Apr 10, 2025 am 11:18 AM

Go语言的核心特性包括垃圾回收、静态链接和并发支持。1.Go语言的并发模型通过goroutine和channel实现高效并发编程。2.接口和多态性通过实现接口方法,使得不同类型可以统一处理。3.基本用法展示了函数定义和调用的高效性。4.高级用法中,切片提供了动态调整大小的强大功能。5.常见错误如竞态条件可以通过gotest-race检测并解决。6.性能优化通过sync.Pool重用对象,减少垃圾回收压力。

Golang的目的:建立高效且可扩展的系统Golang的目的:建立高效且可扩展的系统Apr 09, 2025 pm 05:17 PM

Go语言在构建高效且可扩展的系统中表现出色,其优势包括:1.高性能:编译成机器码,运行速度快;2.并发编程:通过goroutines和channels简化多任务处理;3.简洁性:语法简洁,降低学习和维护成本;4.跨平台:支持跨平台编译,方便部署。

SQL排序中ORDER BY语句结果为何有时看似随机?SQL排序中ORDER BY语句结果为何有时看似随机?Apr 02, 2025 pm 05:24 PM

关于SQL查询结果排序的疑惑学习SQL的过程中,常常会遇到一些令人困惑的问题。最近,笔者在阅读《MICK-SQL基础�...

技术栈收敛是否仅仅是技术栈选型的过程?技术栈收敛是否仅仅是技术栈选型的过程?Apr 02, 2025 pm 05:21 PM

技术栈收敛与技术选型的关系在软件开发中,技术栈的选择和管理是一个非常关键的问题。最近,有读者提出了...

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。