zoukankan      html  css  js  c++  java
  • 区块链开源实现fabric快速部署及CLI体验

    本文描述fabric快速部署的步骤,及演示基于官方example02的智能合约进行CLI命令行体验。区块链涉及服务很多,且大量使用docker容器技术,所以请严格遵守以下步骤去部署,以减少各种问题的出现,方便我们先对联盟链有个大概的感觉。本文描述环境是centos7操作系统,请其他版本更正相关的安装工具(如ubuntu操作系统请把yum命令换成apt-get)。

    1、安装docker_ce版。

    如果已经安装了老版docker,请先卸载。

    再来安装docker:

    最后启动docker服务:

    2、配置好docker加速器。

    官方docker非常慢,请一定在阿里云等提供docker仓库加速器的网站注册好帐户(比如https://cr.console.aliyun.com/#/accelerator),配置好加速器。

    3、安装好pip。

    4、用pip安装docker-compose。

    5、新建存放测试、部署代码的目录。

    6、安装git。

    7、拉取fabric代码。

    请切换到最新的1.1分支上。

    8、拉取docker镜像(时间较长)及一些可执行文件。

    9、安装go语言。

    并通过在/etc/profile最后追加两行设置好工作目录:

    最后执行下:

    10、修改一个阻塞执行的bug

    修改/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/base/peer-base.yaml文件:

    11、启动服务。

    进入/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli目录,执行:

    如果最后出现下图则部署成功:

    当服务在一台server上启动后,可以看到以下docker实例:

    可以看到,默认安装了:4个peer(2个是org1的,2个是org2的)节点、4节点构成的kafka集群、3节点构成的zookeeper集群、1个orderer节点。这是因为:fabric提供的共识机制,PBFT目前还未达到生产级别的应用,只能靠kafka+zookeeper实现PAXOS算法下的共识机制(不能有作恶结点)。一般zookeeper是3或者5个结点,

    fabric提供了SDK和CLI两种交互方式,本文不讨论SDK。

    可以进入cli里执行peer命令。如果cli长时间未用退出后,可先启动cli:

    再进入cli实例里:

    接着可执行peer命令,体验区块链的命令行使用方式。

    peer命令含有五个子命令,如下:

    每个子命令可使用--help查看详细帮助。

    在fabric里,所有的交易必须通过智能合约才能操作,而chaincode链码就是智能合约。chaincode支持以下option操作:

    • package 智能合约需要打包后才能使用
    • install? 智能合约必须安装后才能使用
    • instantiate 置初始状态。比如设系统一开始用户a有100元,用户b有200元
    • invoke? 调用智能合约
    • query? 查询状态
    • signpackage? 包签名
    • upgrade? 智能合约升级
    • list? 显示智能合约

    智能合约需要先install才能使用。

    其中-n表示合约名字,-p指向合约文件目录路径,-v是版本号。

    每个智能合约实现Init和Invoke两个方法,其中前者用于初始化,中老年服装后者是日常调用。

    example02的Init方法接收4个参数(),比如:

    其中,-C指向channel名字,-c则是初始构造json格式的消息,-P是背书策略,-o指定共识节点。这里置帐户a初始余额为100,帐户b初始余额为200。其代码实现如下:

    接着查询余额,例如查询a帐户的余额:

    这里需要说明,example02的Invoke共支持3种指令:

    因此,上述查询我们会得出类似结果:

    为何结果格式是这样的呢?看下t.query的实现:

    比如由B向A转帐50:

    成功后我们会在输屏结果中找到这一行:ESCC invoke result: version:1 response:<status:200 message:"OK" >

    其实现为从A和B帐户下用GetStat方法从状态数据库取出余额,与query类似,接着加减相应的值50后,再调用PutStat方法写入状态数据库。

    此时我们可以再次查询,可以获得正确结果。

    ?

    小结:以上只适用于简单体验fabric的功能,对于智能合约、共识算法、世界状态等在接下来的文章中我们再分析。

  • 相关阅读:
    Apache httpd和JBoss构建高可用集群环境
    Ubuntu 14.04下NFS安装配置
    Ubuntu 14.04 安装 JDK 7.0
    Docker第三方项目小结
    Shipyard远程API
    Linux软件管理——yum命令详解
    Quartz集群原理及配置应用
    Rsync原理介绍及配置应用
    python构造wireshark可以解析的LTE空口数据
    A Simple Web Server
  • 原文地址:https://www.cnblogs.com/zhanglixina/p/9592443.html
Copyright © 2011-2022 走看看