fabric 订阅
fabric,英语单词,主要用作为名词,意为织物;布;组织;构造;建筑物。 展开全文
fabric,英语单词,主要用作为名词,意为织物;布;组织;构造;建筑物。
信息
外文名
fabric
英式读音
[ˈfæbrɪk]
词    性
名词
释    义
织物;布;组织;构造;建筑物
fabric短语搭配
natural fabric天然纤维 ; 自然纤维 ; 自然组织 ; 服装类型英语LOOPED FABRIC毛圈布 ; 起圈布 ; 毛圈织物 ; 毛巾布PILE FABRIC毛圈布 ; 起毛织布 ; 起绒织物 ; 毛芒织物interlock fabric双罗纹针织物 ; 起绒针织物 ; 棉毛布 ; 双螺纹针织品FLAMEPROOF FABRIC防火布 ; 防燃织物 ; 防焰织物 ; 防水布fabric thickness布料厚度 ; 厚度 ; 曲斜变形FABRIC SHADING布料色差 ; 布料色彩差 ; 布料颜色差 ; 布料blended fabric[纺]混纺织物 ; 混纺布 ; 混纺 ; 混纺面料embroidered fabric绣花织物 ; 绣花面料 ; 纺织品英语 ; 刺绣品 [1] 
收起全文
精华内容
下载资源
问答
  • fabric

    2014-04-16 16:58:33
    fabric http://docs.fabfile.org/en/latest/usage/env.html fabric中的env作用

    fabric

    fabric的介绍

    http://fabric.readthedocs.org/en/1.8/tutorial.html

    fabric中的env作用

    http://docs.fabfile.org/en/latest/usage/env.html

    from fabric.api import *

    *中包含run


    settings:

    the message get from the below link

    http://docs.fabfile.org/en/latest/usage/env.html

    The settings context manager

    In many situations, it’s useful to only temporarily modify env vars so thata given settings change only applies to a block of code. Fabric provides asettings context manager, which takes any number ofkey/value pairs and will use them to modifyenv within its wrapped block.

    For example, there are many situations where setting warn_only (see below)is useful. To apply it to a few lines of code, usesettings(warn_only=True), as seen in this simplified version of thecontribexists function:

    from fabric.api import settings, run
    
    def exists(path):
        with settings(warn_only=True):
            return run('test -e %s' % path)
    
    

    with cd()

    http://docs.fabfile.org/en/latest/api/core/context_managers.html#module-fabric.context_managers

    
    
    展开全文
  • 区块链开源实现hyperledger fabric架构详解

    万次阅读 多人点赞 2018-05-26 10:34:44
    hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM、Intel、各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量。本文中我们依次讨论:区块链的共通特性、fabric核心概念、fabric的交易...

    hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM、Intel、各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量。本文中我们依次讨论:区块链的共通特性、fabric核心概念、fabric的交易执行流程。本文来源于笔者欲对公司部分业务上链而进行培训的PPT,故图多文字少,不要怕太长。

    1、区块链解决方案的特性

    1.1 分布式帐本

    区块链核心概念是分布式帐本,就像下面的图1所示,同样的帐本(全量的交易数据,详见下节)在任意一台节点(不包括客户端)上都有。所以,其优点是数据很难造假,造假后也可以通过追溯记录来追究法律责任。而缺点就是极大的浪费,传统服务每份数据都尽量少存几份,即使存了三份拷贝都已经考虑到诸多异常,并使服务可用性达到N个9了。而区块链这种特性,同时造成的另一个问题是帐本不能太大,至少不能超过区块链网络中最小结点的存储以及处理能力。所以,这制约了总交易数据(下文为方便概念介绍,统称为帐本ledger)的条数,进而也影响了能写入区块链的单条交易数据的大小。

    图1 区块链分布式帐本示意图

    什么是区块链呢?我很喜欢《区块链技术进阶与实战》一书中对它的定义:区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构。如果觉得有点抽象,那么我们再来看看下面的图2。

    图2-区块链数据结构示意

    图2中就是账本,它由多个区块构成了一个有时序的链表,而每个区块里含有多条交易trasaction(缩写为tx)构成的链表。图2下方有一个WorldState世界状态,这其实是为了提升性能用的。比如,key1共交易了10000次,为了获取它的当前状态值,需要正向执行这10000次交易,这就得不偿失了。如果这1万次交易里,每次新交易执行完,都同步更新一个数据库(在fabric里用的是levelDB),这样查询当前状态时,只需要查询该数据库即可,如图3所示。

    图3-fabric levelDB状态数据库

    图3中,区块链帐本是在FileSystem文件系统中保存的,而Level DB存放世界状态。

    1.2 智能合约smart contract

    区块链的发展过程中,一般1.0时代就是数字货币时代,代表是比特币,而2.0时代就是智能合约(现在是3.0时代,各种联盟链即为代表)。

    智能合约是运行在区块链上的模块化、可重用的自动执行脚本,有了它我们就可以完成复杂的业务逻辑,例如同一个区块链上有多份合约,而每份合约可以约定不同的参与者(企业或者相关方)。也可以指定每份合约里每个子命令做一批特定的事,大家可以把它想象成关系数据库里的事务。如图4所示,我们可以在合约里指定允许哪些企业的节点可以参与到交易流程中来(在fabric里这叫共识策略)。

    图4-智能合约图示

    在fabric中,智能合约叫做chaincode,它有6个状态,如下所示:

    • Install → Instantiate → invocable → Upgrade → Deinstantiate → Uninstall.

    实际上智能合约就是一段代码,fabric官方认可的是GO语言。首先我们需要把合约代码上传到区块链上,这一步的状态就叫Install。

    接着,需要做初始化操作。比如,现在的数据是存放在mysql中的,那么上线时需要用Instantiate把数据迁移至链上,这也算初始化。初始化后,chaincode就进入invocable可调用状态了。

    通用我们可以通过CLI命令行或者程序里用SDK调用合约(v1.1前还有RestApi调用,现已放弃)。

    联盟链由于跨多家企业、多个地区甚至国家,很难使得合约保持一致的版本,因此,每个合约都有版本号。而版本升级时,就是Upgrade状态。

    最后两个状态对应着合约下链。

    智能合约可以在供应链等较复杂的业务场景下起到很大的作用,如下面的图5所示:

    图5-智能合约技术的应用示意

    1.3 数据一致性(共识算法)

    既然区块链是一个去中心化的分布式系统,那么自然只能通过投票来决定一致性了:少数服从多数。当然,多少算多数呢?不同的共识算法下,结果并不相同。比如paxos算法(参见笔者的《paxos算法如何容错的–讲述五虎将的实践》)就是超过一半,而PBFT则需要三分之二以上。

    这里有一个拜占庭将军问题需要注意,如何理解该问题可以参见这份翻译过的The_Part-Time_Parliament(Paxos算法中文翻译)文档。简言之,就是投票的拜占庭将军(服务器)们有2种不可靠的形式。第一是迟钝(数据包延迟)、失忆(数据包丢失以及数据包重发)、失踪(服务器宕机)等不含背叛的行为,第二则是有将军是间谍(服务器被攻破)。如paxos这样的算法属于第一种,Fault-tolerance,它不能容忍服务器上有恶意代码;而如PBFT(Practical Byzantine Fault Tolerance)这样的算法是第二类,Byzantine-Fault-tolerance,它能够容忍一定数量的拜占庭将军节点存在,如PBFT、SBFT、RBFT算法等。

    第二类Byzantine-Fault-tolerance共识算法虽然看上去很美,但并不成熟,特别是性能低下,比如PBFT是一个多项式复杂度的算法O(N^2),节点过多时(大于100)性能急骤下降。第一类通常是O(N)复杂度,在某些场景下使用效果还不错,比如fabric v1.1的kafka共识机制就是这样的算法,下文我们会详述。

    像比特币、以太坊等采用的共识算法又有所不同,例如比特币的POW工作量证明算法,它定义一小时内(通过调整运算难度实现,比如调整近似程度)有一个lucky node节点,该节点是通过证明自身的努力(hash值逆解)而幸运选出,选出后它就可以为这段时间的交易做决定(似乎挺像总统选举^_^)。详情参见我这篇文章:《区块链技术学习笔记》

    1.4 非对称加密

    区块链通过非对称加密技术实现身份验证与数据加密。其实就是我们日常在用的SSL技术。

    为了方便理解,我们需要先介绍PKI(Public Key Infrastructure),它是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。有一个CA(Certificate Authority)权威机构负责向用户(包括服务提供者与使用者)提供数字证书,包括公钥与私钥,同时CA机构还需要提供一个CRL(Certificate Revocation List)证书吊销列表,如下面的图6所示。

    图6-CA机构颁发数字证书以及提供CAL

    这样,区块链可以通过PKI体系实现安全认证。PKI有三个关键点,我们下面详述。

    1.4.1 数字证书 Digital Certificate

    比如Mary Morris符合X.509规范的数字证书里,其Subject属性里就含有她的信息,包括国家C=US、所属的州或者省份ST=Michigan、所在城市L=Detroit、所属单位O=Mitchesll Cars、其他信息OU=Manufacturing、公用信息CN=Mary Morris/UID=123456等,也含有其他信息,如下面的图7所示。

    图7-PKI数字证书

    1.4.2 公钥与私钥

    CA颁发了两个证书:公钥与私钥,其中,私钥仅服务提供者保存,而公钥则可被所有人(服务使用者)保存。

    所谓非对称加密,就是公钥加密的消息仅私钥可以解密;同理,私钥加密的消息,仅公钥可以解密。对应于前者,可以实现客户端访问服务器时加密消息,例如访问安全级别高的页面时提交的表单信息都需要用公钥加密,确保只有服务器才能解密网络报文。对应于后者,则可实现签名功能,如下面的图8所示。

    图8-PKI中私钥签名后用公钥验签名

    图8中Mary Morris用私钥对一段信息的内容(若内容过大则可先HASH后获得小点的字符串)加密后,生成签名附加在消息中。接收者可从CA机构获取到公钥,用公钥解密签名后,再与内容比对,以确定消息是否来自MaryMorris及内容是否被篡改。对于文件来说也是一样,小文件直接加密,大文件先生成hash再对hash加密,如下面的图9所示。

     

    图9-对文件的签名

    1.4.3 证书信任链

    CA证书分为两类:RCA(Root CA)根证书以及ICA(Intermediate CA)中间证书。这些证书由RCA开始构成一个证书信任链,如下面的图10所示。

    图10-CA证书信任链条

    有许多CA证书权威机构,各自有其RCA。如果RCA得不到信任,那么其下的ICA也无法认证通过。

    当然,自己的服务器也可以生成RCA。

    在Fabric里,允许不同的企业使用不同的RCA,也可以使用相同的RCA和不同的ICA。这与下文中的MSP密切相关。

    1.5 小结

    我们来总结下区块链,它主要是为了解决社会上的信任问题而存在的,为此,它付出了沉重的性能、可用性代价。它怎么做到的呢?通过4点实现:1、数据到处存放;2、操作记录不可更改;3、传输数据可信;4、业务脚本约束。

    那么,这个信任问题的解决,带来了2个非功能性的约束:数据一致性和可用性。其中可用性包括两点:1、交易在可接受的时间内达成。比如比特币的分叉就会造成严重问题。2、吞吐量达标。而比特币每秒只能有7次交易,这显然太低了。

    2、fabric核心概念

    hyperledger fabric符合上面说过的区块链的所有特性。我们必须先了解它的一些概念,才能进一步理解其架构设计。由于英文资料居多,所以这些概念我都以英文描述为准:

    • chaincode:智能合约,上文已提到。每个chaincode可提供多个不同的调用命令。
    • transaction:交易,每条指令都是一次交易。
    • world state:对同一个key的多次交易形成的最终value,就是世界状态。
    • endorse:背书。金融上的意义为:指持票人为将票据权利转让给他人或者将一定的票据权利授予他人行使,而在票据背面或者粘单上记载有关事项并签章的行为。通常我们引申为对某个事情负责。在我们的共识机制的投票环节里,背书意味着参与投票。
    • endorsement policy:背书策略。由智能合约chaincode选择哪些peer节点参与到背书环节来。
    • peer:存放区块链数据的结点,同时还有endorse和commit功能。
    • channel:私有的子网络,事实上是为了隔离不同的应用,一个channel可含有一批chaincode。
    • PKI:Public Key Infrastructure,一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
    • MSP:Membership Service Provider,联盟链成员的证书管理,它定义了哪些RCA以及ICA在链里是可信任的,包括定义了channel上的合作者。
    • org:orginazation,管理一系列合作企业的组织。

    2.1 开发概念

    fabric联盟链的开发人员主要分为三类:底层是系统运维,负责系统的部署与维护;其次是组织管理人员,负责证书、MSP权限管理、共识机制等;最后是业务开发人员,他们负责编写chaincode、创建维护channel、执行transaction交易等,如下面的图11所示。

    图11-fabric技术人员的分层

    fabric大致分为底层的网络层、权限管理模块、区块链应用模块,通过SDK和CLI对应用开发者提供服务,如下面的图12所示。

    图12-fabric开发模块图

    我们的开发流程主要包括写智能合约,以及通过SDK调用智能合约,及订阅各类事件,如图13所示。

    图13-开发环节

    2.2 MSP

    每个管理协作企业的ORG组织都可以拥有自己的MSP。如下图14所示,组织ORG1拥有的MSP叫ORG1.MSP,而组织ORG2业务复杂,所以维护了3个MSP。

    图14-ORG可管理自己的MSP

    MSP出现在两个地方:在channel上有一个全局的MSP,而每个peer、orderer、client等角色上都维护有本地的局部MSP,如图15所示。

    图15-在channel上的Global MSP以及在参与角色上的Local MSP

    本地MSP只保存有Global MSP上的子集,内容保存在本地文件系统上,而全局MSP可在逻辑上认为是配置在系统上的,它实际也在每个参与者上保存一份拷贝,但会维持一致性。

    MSP也分级,如图16中所示,底层的network MSP负责网络层的准入,其MSP由ORG1拥有,而上面的某个channel的MSP则由ORG1和ORG2共同管理。

    图16-MSP是分级的

    一个MSP下含有以下结构,如图17所示。

    图17-MSP结构

    可见,MSP结构包括:

    • RCA根证书
    • ICA中间证书
    • OU组织单位
    • 管理员证书
    • RCL吊销证书列表
    • 结点上的具体证书
    • 存储私钥的keystore
    • TLS的根证书与中间证书

    3、fabric交易提交流程

     

    3.1 peer结点的部署

    peer结点上保存有账本ledger以及智能合约,如下图所示:

    channel是一个逻辑概念,可以通过MSP隔离全网不同组织的参与者,如下图所示:

    当有多方参与者时,例如4个org组织、8个peer结点时,其中channel连接了P1、P3、P5、P7、P8这五个节点,其他3个节点加入了其他channel,其部署图如下所示:

    加入MSP来管理身份时,如P1和P2由ORG1.MSP管理,而P3和P4的证书则由ORG2.MSP管理,他们共同使用一个channel,则如下图所示:

    3.2 交易的执行流程

    去中心化的设计,必然需要通过投票(多数大于少数)来维持数据一致性,而任何投票都必须经历以下三个过程:

    1. 有一方先提出议案proposal,该议案有对应的一批投票者需要对该结果背书,这些投票者依据各自的习惯投票,并将结果反馈;
    2. 统计投票结果,若获得多数同意,才能进行下一步;
    3. 将获得多数同意的议案记录下来,且公之于众。

    而这三步fabric当然也少不了,当然它的称法就有所不同,其对应的三步如下:

    1. 由client上的CLI或者SDK进行proposal议案的提出。client会依据智能合约chaincode根据背书策略endorse policy决定把proposal发往哪些背书的peer节点,而peer节点进行投票,client汇总各背书节点的结果;
    2. client将获得多数同意的议案连同各peer的背书(包括其投票结果以及背书签名)交给orderring service,而orderer会汇总各client递交过来的trasaction交易,排序、打包。
    3. orderer将交易打包成区块block,然后通知所有commit peer,各peer各自验证结果,最后将区块block记录到自己的ledger账本中。

    我们看一个具体的例子,若channel上有三个peer背书者,client提交流程如下图所示:

    详细解释下上图的流程:

    1. 首先,client发起一个transaction交易,含有<clientID, chaincodeID, txPayLoad, timestamp, clientSig>等信息,指明了3W要素:消息是谁who在什么时间when发送了什么what。该消息根据chaincode中的背书策略,发向EP1、EP2、EP3这三个peer节点。
    2. 这三个peer节点模拟执行智能合约,并将结果及其各自的CA证书签名发还client。client收集到足够数量的结果后再进行下一步。
    3. client将含背书结果的tx交易发向ordering service。
    4. ordering service将打包好的block交给committing peer CP1以及EP1、EP2、EP3这三个背书者,背书者此时会校验结果并写入世界状态以及账本中。同时,client由于订阅了消息,也会收到通知。
      如果我们从编程的角度来看,则流程会更清楚:

    参见上图,A是我们的应用程序,其步骤如下:

    1. A首先连接到peer。
    2. A调用chaincode发起proposal;与此同时,P1收到后先模拟执行,再产生结果返回给A。
    3. A收到各peer返回的结果。
    4. A向O1发起交易;与此同时,O1产生区块后会通知peer,而peer会更新其账本。
    5. 最后通过订阅事件A收到了结果。

    最后再细看下这三个阶段。

    3.2.1 proposal提案阶段

    可以看到,A1发出的<T1, P>,收到了<T1, R1, E1>和<T1, R2, E2>两个结果。

    3.2.2 package打包阶段

    O1在一个channel上会收到许多T交易,它会将T排序,在达到block的最大大小(一般应配1M以下,否则性能下降严重,kafka擅长处理小点的消息)或者达到超时时间后,打成区块P2。

    3.2.3 验证阶段

    O1将含有多条交易T打成区块的B2发往各peer节点,而P1和P2将B2加入各自的L账本中。

    4、小结

    本文偏重于概念的解释,由于篇幅所限,未涉及fabric的系统搭建(请参考笔者的这篇文章《区块链开源实现fabric快速部署及CLI体验》),也未描述共识算法在异常情况下如何维持一致性,这留待下一篇文章解决。fabric的许多思想是值得我们进一步研究的,其优秀的实现可以帮助我们通过fabric获得区块链在信任创新上的思路。

     

     

     

    (转载本站文章请注明作者和出处 陶辉笔记 ,请勿用于任何商业用途)

    展开全文
  • Fabric(二)部署Fabric2.2.0

    千次阅读 热门讨论 2020-07-17 02:00:36
    由于项目需要,将服务器上的Fabric1.4改为Fabric2.0 已经配置好go、docker、node等环境,详情见上一章 Fabric(一)部署Fabric 1.4 感谢博客:https://blog.csdn.net/hnclsl/article/details/105542864 一、更新go ...

    由于项目需要,将服务器上的Fabric1.4改为Fabric2.0
    已经配置好go、docker、node等环境,详情见上一章 Fabric(一)部署Fabric 1.4
    感谢博客:https://blog.csdn.net/hnclsl/article/details/105542864
    官方文档参考 https://hyperledger-fabric.readthedocs.io/en/latest/install.html

    可以看看我最成功的版本Fabric2.2.1 !!!
    https://blog.csdn.net/qq_43681877/article/details/110896678

    一、更新go

    Fabric2.x需要go1.13+,所以重新安装go为1.14

    1、查看go版本

    go version
    

    查看结果
    在这里插入图片描述

    2、官网下载相应安装包后上传服务器

    https://studygolang.com/dl
    在这里插入图片描述

    3、对go进行删除和重装

    https://www.jianshu.com/p/662a8411c696

    二、前期准备

    1、码云拉取github仓库

    由于github上下载速度实在感人,于是在拉取仓库到码云
    https://gitee.com/jessyl/fabric
    https://gitee.com/jessyl/fabric-samples

    2、配置阿里云镜像加速器

    因为在之后的镜像拉取中,有很多镜像是国外源,所以速度很慢,故配置阿里云镜像加速器
    参考博客:
    (1)aliyun官方教程
    (2)Docker 配置国内源加速镜像下载
    (3)利用阿里云镜像加速器对docker镜像源加速

    三、正式安装

    1、拉取仓库

    (1)进入/root/go/src/github.com/hyperledger 文件夹拉取fabric源码

    git clone https://gitee.com/jessyl/fabric.git
    

    拉取之后默认为2.2(最新版本),所以如果需要其他版本的小伙伴可以

    git checkout release-2.1
    

    (2)进入fabric文件夹,拉取fabric-samples文件夹

    git clone https://gitee.com/jessyl/fabric-samples.git
    

    2、移动config文件夹(移动配置文件)

    (1)进入fabric文件夹,会发现sampleconfig,其实就是fabric-samples的config文件夹
    在这里插入图片描述
    (2)将sampleconfig文件夹移动到fabric-samples中,并且重命名为config

    cp -r sampleconfig /root/go/src/github.com/hyperledger/fabric/fabric-samples
    
    cd fabric-samples
    
    mv sampleconfig config
    

    3、生成bin文件夹(编译生成二进制文件)

    (1)回到fabric目录下,进行源码编译,请耐心等待很长一段时间

    make all
    

    (2)在fabric文件夹下会生成build文件夹,里面含有bin和images
    在这里插入图片描述

    在bin目录中有如下二进制文件:
    在这里插入图片描述
    (3)将bin目录复制到fabric-sample 文件夹中

    cp -r build/bin /root/go/src/github.com/hyperledger/fabric/fabric-samples
    

    (4)设置环境变量
    将bin目录和config目录都添加到环境变量中
    可以看看 https://blog.csdn.net/weixin_37825371/article/details/90752386

    vim /etc/profile
    

    在末尾如下添加
    在这里插入图片描述
    生效

    source /etc/profile
    

    4、运行test-work网络进行测试

    根据官网fabric-samples描述,各个文件夹功能如下表
    在这里插入图片描述
    (1)进入test-work文件夹,启动测试网络
    在这里插入图片描述
    (2)启动成功
    在这里插入图片描述
    (3)查看docker

    docker ps -a
    

    查看结果
    在这里插入图片描述

    5、建立通道

    (1)使用network.sh脚本在Org1和Org2之间创建频道,并将其对等方加入该频道。
    运行以下命令以使用默认名称创建频道mychannel:

    ./network.sh createChannel
    

    在这里插入图片描述
    (2)创建成功
    在这里插入图片描述

    6、在通道上启动链码

    (1)命令

    ./network.sh deployCC
    

    (2)结果(未报错)
    在这里插入图片描述

    tips:
    如果出现因为访问无法下载
    在这里插入图片描述
    解决方法:设置go代理
    https://www.cnblogs.com/zhangmingcheng/p/12294156.html

    go env -w GO111MODULE=on
    
    go env -w GOPROXY=https://goproxy.cn,direct
    

    7、与网络交互

    (1)启动测试网络
    ./network.sh up
    ./network.sh createChannel
    ./network.sh deployCC

    (2)在test-network目录进行操作,将这些二进制文件添加到CLI路径

    export PATH=${PWD}/../bin:${PWD}:$PATH
    

    设置FABRIC_CFG_PATH指向存储库中的core.yaml文件fabric-samples:

    export FABRIC_CFG_PATH=$PWD/../config/
    

    (3)设置环境变量,以允许您以peer Org1的形式操作CLI:

    # Environment variables for Org1
    export CORE_PEER_TLS_ENABLED=true
    export CORE_PEER_LOCALMSPID="Org1MSP"
    export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
    export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    export CORE_PEER_ADDRESS=localhost:7051
    

    (4)获取已添加到通道分类帐中的汽车的列表

    peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
    

    出现报错
    在这里插入图片描述
    链码fabcar没有在通道上被成功定义,说明要去fabcar启动
    在这里插入图片描述
    ① 运行启动文件

    ./startFabric.sh
    

    没有找到fabric-ca-client 二进制文件
    在这里插入图片描述
    ② 去官网查询二进制文件,发现bin文件夹中缺失了client和sever文件
    在这里插入图片描述
    在这里插入图片描述
    解决方法:
    1)法一:
    参考博客:https://blog.csdn.net/ltt1st/article/details/81456484

    1. 进入/root/go/src/github.com/hyperledger文件夹
    cd /root/go/src/github.com/hyperledger
    
    1. 下载fabric-ca源码
    git clone https://gitee.com/jessyl/fabric-ca.git
    
    1. 编译报错 :go.mod有问题
      在这里插入图片描述
      未能解决 https://www.codercto.com/a/108257.html

    2)法二:
    直接加入现有的二进制文件
    在这里插入图片描述
    链接:https://pan.baidu.com/s/1Yk3U_bXhYVBTHUVkzx8qCg
    提取码:75b0

    ③ 进入fabcar文件夹,运行startFabric.sh文件
    在这里插入图片描述

    ./startFabric.sh
    

    还有报错:)
    在这里插入图片描述
    方法:
    {

    1. 删除所有docker镜像,清理环境
    docker rmi $(docker images | grep hyperledger)
    
    1. 修改bootstrap.sh,只重新下载docker镜像
      在这里插入图片描述

    }

    ④ 重新运行startFabric.sh,成功界面:
    在这里插入图片描述
    此时可以选择javascript,typescript,java,go语言

    Next, use the FabCar applications to interact with the deployed FabCar contract.
    The FabCar applications are available in multiple programming languages.
    Follow the instructions for the programming language of your choice:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    go run fabcar.go:
    第一步会生成wallet钱包以及keystore,
    第二步提交创建new car的事务
    第三步查询并返回car信息
    第四步提交更换车主的事务
    第五步查询并返回car信息

    在这里插入图片描述
    ⑥ 选择go语言

    cd go
    
    go run fabcar.go
    

    运行结果,出现fabcar列表!!!,但是最后一句显示订购者为空,提交事务失败:)
    这一部分等我解决:)
    在这里插入图片描述
    查看docker

    docker ps
    

    在这里插入图片描述
    让我再康康
    在这里插入图片描述
    (5)重新进入test-network,首先关闭网络(没有开也运行一下)

    ./network.sh down
    

    在这里插入图片描述
    (6)开启网络

    ./network.sh up
    

    (7)创建通道

    ./network.sh createChannel
    

    (8)开启链码

    ./network.sh deployCC
    

    (9)重新再设置一下环境变量

    export PATH=${PWD}/../bin:$PATH
    
    export FABRIC_CFG_PATH=$PWD/../config/
    

    在/etc/profile中再设置一下环境变量

    # Environment variables for Org1
    
    export CORE_PEER_TLS_ENABLED=true
    export CORE_PEER_LOCALMSPID="Org1MSP"
    export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
    export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    export CORE_PEER_ADDRESS=localhost:7051
    

    (10)运行以下命令以使用资产初始化分类帐:

    peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'
    

    出现-> INFO 001 Chaincode invoke successful. result: status:200则成功
    在这里插入图片描述
    (11)现在可以从CLI查询分类帐。运行以下命令以获取添加到频道分类帐的资产列表:

    peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
    

    查询结果:
    在这里插入图片描述
    (12)当网络成员希望转移或更改分类帐上的资产时,会调用链码。通过调用资产转移(基本)链码,使用以下命令更改分类帐上资产的所有者:

    peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'
    

    出现-> INFO 001 Chaincode invoke successful. result: status:200 则成功
    在这里插入图片描述
    (13)因为资产转移(基本)链码的背书策略要求事务由Org1和Org2签名,所以chaincode invoke命令需要同时针对peer0.org1.example.com和peer0.org2.example.com使用–peeradresses标志。由于为网络启用了TLS,因此该命令还需要使用–tlsRootCertFiles标志为每个对等方引用TLS证书。
    调用链代码后,我们可以使用另一个查询来查看调用是如何更改区块链账本上的资产的。因为我们已经查询了Org1节点,所以我们可以借此机会查询在Org2节点上运行的链码。
    将以下环境变量设置为Org2操作:
    向/etc/profile末尾添加,最后记得source /etc/profile

    # Environment variables for Org2
    
    export CORE_PEER_TLS_ENABLED=true
    export CORE_PEER_LOCALMSPID="Org2MSP"
    export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
    export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
    export CORE_PEER_ADDRESS=localhost:9051
    

    如图所示
    在这里插入图片描述
    (14)此时可以对网络进行查询刚刚的转移信息

    peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'
    

    查询结果:
    在这里插入图片描述

    8、关闭网络

    ./network.sh down
    

    该命令将停止并删除节点和链码容器,删除组织加密材料,并从Docker注册表中删除链码图像。
    该命令还从以前的运行中删除通道工件和docker卷,允许运行./network.sh

    9、与证书颁发机构建立网络

    ./network.sh up -ca
    

    发出命令后,可以看到脚本启动了三个CA,网络中的每个组织都有一个CA。
    在这里插入图片描述
    花时间检查由network.sh在部署CA之后编写脚本生成的日志是值得的。测试网络使用Fabric CA客户端向每个组织的CA注册节点和用户身份。然后,该脚本使用enroll命令为每个标识生成一个MSP文件夹。MSP文件夹包含每个标识的证书和私钥,并在运行CA的组织中建立标识的角色和成员资格。
    可以使用以下命令检查Org1 admin用户的MSP文件夹:

    tree organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/
    

    在这里插入图片描述
    可以在signcerts文件夹中找到admin用户的证书,在keystore文件夹中找到私钥。要了解有关MSP的更多信息,请参阅Membership Service Provider concept topic。
    cryptogen和Fabric CA都为organizations文件夹中的每个组织生成加密材料。可以在organizations/fabric-ca目录中找到用于设置网络的命令registerEnroll.sh脚本。要了解有关如何使用Fabric CA部署结构网络的更多信息,请访问Fabric CA operations guide。通过dentity and membership concept topics,您可以了解有关Fabric如何使用PKI的更多信息。

    tips
    要先安装tree工具

    yum -y install tree
    
    展开全文
  • fabric2.0开发 部署fabric环境和fabric-samples的启动(2)

    千次阅读 热门讨论 2020-04-03 21:09:11
    创建项目目录 mkdir -p ~/go/src/github.com/hyperledger cd ~/go/src/github.... 拉取fabric项目 git clone https://github.com/hyperledger/fabric.git 切换fabric版本 cd fabric git checkout v2.0....

    通过上一篇文章我们已经将fabric的基本环境搭建成功,接下来我们开始运行使用并初步认识fabric。

    创建项目目录

    mkdir -p ~/go/src/github.com/hyperledger

    cd ~/go/src/github.com/hyperledger

    拉取fabric项目

    git clone https://github.com/hyperledger/fabric.git

    切换fabric版本

    cd fabric

    git checkout v2.0.0

    拉取fabric镜像

    先进入到scripts目录

    cd ~/go/src/github.com/hyperledger/fabric/scripts

    注意:

    此处我们需要修改当前目录下的bootstrap.sh脚本

    通过阅读bootstrap脚本我们可以知道,此脚本先会拉去fabric-samples脚本,再切换分支,但由于官方切换的分支为2.0.0,可实际上现在官方提供的版本库中没有这个分支,所以会导致无法切换,而且回去拉取环境所用的二进制文件,但国内网络是无法访问的,从而导致后面的操作失败,所以我们选择手动拉取fabric-samples脚本再切换到v2.0.0-beta分支,在这之前此脚本仅仅作为拉取镜像的操作,操作如下:

    进入编辑页面

    vim ~/go/src/github.com/hyperledger/fabric/scripts/bootstrap.sh

    修改脚本

    此出我们修改脚本之后,bootstrap.sh只进行拉取镜像的操作

    开始运行脚本

    ./bootstrap.sh

    拉去的镜像如下

    拉去镜像之后下面我们进入目录

    cd ~/go/src/github.com/hyperledger

    然后开始拉取fabric-samples

    git clone https://github.com/hyperledger/fabric-samples.git

    拉取成功后切换到v2.0.0-beta分支

    git checkout v2.0.0-beta

    进入目录

    cd ~/go/src/github.com/hyperledger/fabric-samples

    紧接着我们需要下所需要的二进制文件

    wget https://github.com/hyperledger/fabric/releases/download/v2.0.1/hyperledger-fabric-linux-amd64-2.0.1.tar.gz

    然后在当前目录解压包

    tar -xzvf hyperledger-fabric-linux-amd64-2.0.1.tar.gz

    然后进入目录

    cd ~/go/src/github.com/hyperledger/fabric-samples/first-network

    然后运行命令

    ./byfn.sh up

     

    出现end之后就代表我们运行成功了!!

    我们查看一下启动的服务

    docker ps

    查看镜像完全正常,说明我们已经部署成功一个单机多节点的fabric-samples的简单例子了

    接下来我们开始在这个基础上加一个组织进去,通过手动加入一个新的组织,来更清楚的认识fabric的机制

    下一章目录

    fabric2.0 部署详解—(3)—手动加入第三个组织的学习

    展开全文
  • fabric简介

    千次阅读 2019-07-04 20:37:30
    fabric简介 Fabric架构的核心包括三部分: Identity - 身份管理 Smart Contact - 智能合约 Ledger及Transactions - 账本和交易 1.身份管理 用户身份 order节点 对交易排序,打包 peer节点 存储账本 需要...
  • # 下载1.4.8版本的release版本的 fabricfabric-samples https://github.com/hyperledger/fabric/releases/tag/v1.4.8 https://github.com/hyperledger/fabric-samples/releases/tag/v1.4.8 # 测试部署智能合约...
  • Fabric简介

    万次阅读 2018-03-08 13:53:29
    翻译自:http://hyperledger-fabric.readthedocs.io/en/latest/blockchain.htmlFabricHyperledger Fabric是一个由模块化架构支撑的分布式账本解决方案平台,...Hyperledger Fabric相比去其他的区块链解决方案提供...
  • 使用fabric1.14.0和fabric2.4.0 fabric1.14.0(支持Python2.5-2.7版本):fromfabric.api import * env.gateway = '192.168.181.2' # 指定堡垒机 ipenv.hosts = ['192....
  • mac安装fabric找不到fabric.api

    千次阅读 2018-10-16 16:29:22
    先卸载再安装低版本: pip uninstall fabric pip install fabric==1.14.0
  • fabric CA

    千次阅读 2018-01-17 10:09:33
    Fabric CA为Hyperledger Fabric行使证书机构的功能。Fabric CA提供以下功能:身份注册,或者将连接到LDAP作为用户注册;颁发登录证书(ECerts);颁发交易证书(TCerts),保证链上交易的匿名性与不可连接性;证书续期与...
  • Fabric共识机制

    千次阅读 2020-01-13 16:15:25
    Fabric共识排序 排序服务在超级账本 Fabric 网络中起到十分核心的作用。所有交易在发送给 Committer 进行验证接受之前,需要先经过排序服务进行全局排序。 在目前架构中,排序服务的功能被抽取出来,作为单独的 ...
  • fabric ca

    千次阅读 2017-07-04 16:35:54
    fabric-ca
  • fabric sdk node编写客户端app时,用到 require('fabric-client'), require('fabric-ca-client')等库, 但是这些库在哪生成的呢? fabric-sdk-node/fabric-client/package.json {  ...
  • fabric组件

    2018-09-05 22:19:19
    Fabric的组件包括客户端(Client)、网络节点(Peer)、CA(Certificate Authority)节点和排序节点。 客户端的主要作用是和fabric系统交互,实现对区块链系统的操作。这种操作分类管理类和链码类。管理类操作包括启...
  • fabric configtxlator

    千次阅读 2018-01-16 10:05:44
    最新文档 ...1.在fabric网络运行一段时间后,如何新建应用通道,并让新的组织加入新的应用通道 2.在fabric网络运行一段时间后,...
  • 运行超级账本需要设置较多的初始化配置,这里为了先有个体验,避免被众多配置搞晕了,就先用fabric-samples工程中已经生成的配置文件来体验fabric的部署安装过程。   部署超级账本网络 先下载fabric-samples文件...
  • Fabric8

    千次阅读 2018-04-10 14:39:09
    Fabric8 Developer PlatformThis project generates the distribution of the fabric8 developer platformTo install the early access of this on Minishift check out the installation guideFabric8 Platform O...
  • fabric介绍

    千次阅读 2018-01-20 13:02:15
    Fabric-SSH命令行工具 Fabric是基于python2.5及以上版本实现的SSH命令行工具,简化了SSH应用程序部署及系统管理任务,他提供了系统基础的操作组件,可以实现本地或远程shell命令,包括命令执行、文件上传、下载及...
  • Fabric 系统链码

    千次阅读 2020-01-14 16:48:02
    fabric 自 1.0 版本开始,将链码分为系统链码和普通链码两种。普通链码(智能合约)用于实现业务逻辑,而系统链码则是用于系统管理,例如 lscc、qscc等。 与普通链码需要独立沙盒环境运行不同,系统链码在 peer 服务...
  • 构建fabric

    千次阅读 2016-11-03 00:40:32
    经过上一篇 Hyperledger Fabric 开发环境搭建 搭建好开发环境后,这一篇来看一下如何构建Fabric。首先,使用vagrant up 打开虚拟机;然后使用客户端软件进行连接。在虚拟机里,我们可以build、run、test我们的fabric...
  • fabric java sdk】Hyperledger Fabric 2.0 java sdk使用入门

    千次阅读 热门讨论 2020-03-31 18:56:29
    fabric官方提供的java sdk包含两个项目[fabric-sdk-java和[fabric-gateway-java,前者用于与fabric网络交互的低级API(比如创建channel、加入channel、安装chaincode等),后者为高级API(主要针对chaincode的调用)
  • fabric - centos7安装fabric

    千次阅读 2017-03-16 21:17:37
    yum install -y python-devel python-pip openssl-devel pip install fabric
  • 1. fabric-client fabric-sdk-node/fabric-client fabric-sdk-node/fabric-client/package.json 中定义: {  "name": "fabric-client",  "//-version": " when publishing ...
  • <p>I used to set up a Fabric network and deployed a fabric network and basic application using a Fabric and Fabric GoLang SDK. I'm able to do the query and write to the chain. Is there any way to ...
  • Fabric实战(3)Fabric模块详解

    千次阅读 2019-03-25 13:40:48
    本文章所有操作基于的操作系统版本是:ubuntu16.04 64位 本文章基于《Fabric实战(2)运行一个简单的fabric网络(容器外)》的实验环境进行。
  • 首先,在搭建Fabric系统时,需要提前进行如下环境准备: 1、Linux(Centos):Fabric运行的系统平台;【因为这里是基于Centos搭建】 2、docker,docker-compose:部署虚拟化镜像容器,学习时减少机器开销;链码运行...
  • 可以参考:Fabric官方文档 可以参考:廖雪峰的官方网站 可以参考:Python模块之Fabric 可以搭配使用:Portainer,是一个轻量级的Docker环境管理UI,可以管理docker host和docker swarm 1 为什么使用Fabric Fabric的...
  • Fabric部署

    千次阅读 2018-06-12 09:54:26
    Fabric相关组件以及工具介绍:- orderer 共识节点。为交易排序,并生成区块 ;- peer共识节点。为交易背书,并记录区块信息 ;- cryptogen用于生成区块链网络中相应用户的相关证书文件 ;- configtxgen 用于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,779
精华内容 15,111
关键字:

fabric