一. CouchDB

状态数据库可选类型包括LevelDB和CouchDB。LevelDB是嵌入在peer进程中的默认键/值状态数据库,CouchDB是一个可选的外部状态数据库。与LevelDB键/值存储一样,CouchDB可以存储任何以chaincode建模的二进制数据(CouchDB附件函数在内部用于非json二进制数据)。但是,当chaincode值(例如,资产)被建模为JSON数据时,作为JSON文档存储,CouchDB支持对chaincode数据进行丰富的查询。

LevelDB和CouchDB都支持核心chaincode操作,例如获取和设置一个键(资产),并根据键进行查询。键可以通过范围查询,可以对组合键进行建模,以支持针对多个参数的等价查询。例如,作为所有者的组合键,资产id可以用于查询某个实体拥有的所有资产。这些基于key的查询可以用于针对账本的只读查询,以及更新总账的事务。

如果将资产建模为JSON并使用CouchDB,那么就可以使用chaincode中的CouchDB JSON查询语言对chaincode数据值执行复杂的富查询,这些类型的查询对于理解账本上的内容很有帮助。对于这些类型的查询,事务协议响应通常对客户端应用程序有用,但通常不会作为事务提交到排序服务。事实上,也无法保证结果集在chaincode执行与富查询提交时间之间的稳定性,因此使用富查询的结果去执行最终的事务更新操作是不合适的,除非可以保证结果集在chaincode执行时间与提交时间之间的稳定性,或者可以处理在后续交易中的潜在变化。例如,如果对Alice所拥有的所有资产执行一个富查询并将其传输给Bob,那么一个新的资产可能会被另一个事务分配给Alice,这是在chaincode执行时间和提交时间之间的另一个事务,可能此过程中会错过这个“虚值”。

CouchDB作为一个独立的数据库进程与peer一起运行,因此在设置、管理和操作方面有额外的考虑。我们可以考虑从默认的嵌入式LevelDB开始,如果需要额外的复杂的富

二. 启用CouchDB

本文均采用Hyperledger Fabric1.2中fabric-samples中相关组件与资源,在测试环境(fabric-samples/chaincode-docker-devmode)通过Docker启动CouchDB服务

1.配置CouchDB启动信息

修改:fabric-samples/chaincode-docker-devmode/docker-compose-simple.yaml 末尾添加并修改

  couchdb:container_name: couchdbimage: hyperledger/fabric-couchdb# Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password# for CouchDB.  This will prevent CouchDB from operating in an "Admin Party" mode.environment:- COUCHDB_USER=- COUCHDB_PASSWORD=# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,# for example map it to utilize Fauxton User Interface in dev environments.ports:- "5984:5984"

2.配置CouchDB连接信息

修改:fabric-samples/chaincode-docker-devmode/docker-compose-simple.yaml 中peer模块

修改后

peer:container_name: peerimage: hyperledger/fabric-peerenvironment:- CORE_PEER_ID=peer- CORE_PEER_ADDRESS=peer:7051- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer:7051- CORE_PEER_LOCALMSPID=DEFAULT- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock- CORE_LOGGING_LEVEL=DEBUG- CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp- CORE_LEDGER_STATE_STATEDATABASE=CouchDB- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984- CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=- CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=volumes:- /var/run/:/host/var/run/- ./msp:/etc/hyperledger/mspworking_dir: /opt/gopath/src/github.com/hyperledger/fabric/peercommand: peer node start --peer-chaincodedev=true -o orderer:7050ports:- 7051:7051- 7053:7053depends_on:- orderer- couchdb

注意JSON文件的格式以及配置信息的一致性,如couchdb名称等

3.启动测试环境

# docker-compose  -f docker-compose-simple.yaml  up -d# docker container ls

二. 测试链码

测试过程

这里在以最简单的sacc.go为例,该链码只涉及到简单的存储(set)和查询(get)功能。整个过程需要启动三个终端:

终端一:启动网络

首先进入开发者模式目录:

1

cd fabric-samples/chaincode-docker-devmode

启动网络:

1

docker-compose -f docker-compose-simple.yaml up

当看到Going to wait for newer blocks时表示启动成功,此时网络中存在四个容器(1 orderer,1 peer, 1 chaincode, 1 cli),创建了通道myc并将peer成功加入。

终端二:编译链码

进入chaincode容器

1

docker exec -it chaincode bash

编译想要测试的chaincode:

1

2

cd sacc

go build

成功执行后单当前目录下会出现生成的可执行文件。此时需要启动这个可执行文件:

1

CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./sacc

终端三:在cli中测试链码

进入cli容器:

1

docker exec -it cli bash

安装和实例化链码(实例化设置了a的初始值10):

1

2

peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 0

peer chaincode instantiate -n mycc -v 0 -c '{"Args":["a","10"]}' -C myc

进行测试:

调用 set() 接口将 a 的值设置为20:

1

peer chaincode invoke -n mycc -c '{"Args":["set", "a", "20"]}' -C myc

调用 get() 接口查询 a 的值,发现a的值已经更新为20,测试完毕。

1

peer chaincode query -n mycc -c '{"Args":["get","a"]}' -C myc

另外:
执行docker-compose命令后就可以启动couchdb容器,同时在浏览器中输入地址http://localhost:5984/_utils还可以进入couchdb的web端管理界面,更清晰的看到存入的数据,从而方便配合我们进行测试。 

测试遇到的错误:

结论:fabric1.2.1应选择指定2.1.1版本的couchdb否则会报错,难以解决,错误提示如下:

Hyperledger Fabric 1.2.1启用CouchDB作为状态数据库相关推荐

  1. Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念

    Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念 总目录 3.关键概念 引言 什么是区块链? 区块链为什么有用? 什么是Hyperledger Fabric? Hyper ...

  2. Linux搭建Hyperledger Fabric区块链框架 - Hyperledger Fabric模型概念

    企业选型的区块链底层技术 Hyperledger Fabric 概念 2015年,Linux基金会启动了Hyperledger项目,目标是发展跨行业的区块链技术. Hyperledger Fabric ...

  3. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(下)

    Hyperledger Fabric 2.0 官方文档中文版 第6章 教程下 总目录 6.教程(下) 使用CouchDB 为什么使用CouchDB? 在Hyperledger Fabric中启用Cou ...

  4. Hyperledger Fabric(术语表)

    术语表 术语很重要,以便所有Hyperledger Fabric用户和开发人员都同意每个特定术语的含义,例如,什么是智能合约.文档将根据需要引用术语表,但如果你愿意,可以随意阅读整个内容:这很有启发性 ...

  5. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(上)

    Hyperledger Fabric 2.0 官方文档中文版第6章 教程上 总目录 6.教程(上) 将智能合约部署到通道 启动网络 Logspout设置 打包智能合约 安装链码包 批准链码定义 将链码 ...

  6. Hyperledger Fabric 官网翻译入门教程--之关键概念(Hyperledger Fabric 模型)

    英文地址:http://hyperledger-fabric.readthedocs.io/en/latest/fabric_model.html Hyperledger Fabric Model/ ...

  7. Hyperledger Fabric Model——超级账本组成模型

    超级账本组成模型 本文主要讲述Hyperledger Fabric的关键设计特性,并细述如何实现了一个全面的.可定制的企业级区块链解决方案: 资产定义--资产这里理解为任何具有货币价值的东西,它们都可 ...

  8. Hyperledger Fabric 2.0 官方文档中文版 第5章 开发应用程序

    Hyperledger Fabric 2.0 官方文档中文版 第5章 开发应用程序 总目录 5.开发应用程序 情景 PaperNet网络 介绍参与者 分析 商业票据生命周期 交易 账本 过程和数据设计 ...

  9. Hyperledger Fabric CA User’s Guide——概述(二)

    概述 下面的图表说明了如何将Hyperledger Fabric CA与总体的Hyperledger Fabric结构相匹配. 有两种方式与一种Hyperledger Fabric CA服务器进行交互 ...

最新文章

  1. 通过Python实现某个目录下所有文件(包含子目录中的文件)的列出
  2. 计算机 注册表 远程桌面,仅允许运行使用网络级别身份验证的远程桌面计算机连接失败处理方法(远程桌面连接)...
  3. 8051 管脚定义_8051微控制器的引脚说明
  4. 说说普通人挣钱的思路
  5. python 正则表达式简介
  6. Python - 列表与字典相互转换
  7. sierpinski三角形的维数_遥感图象分形维数的几种估计算法研究
  8. 如何创建一个facebook账户
  9. PMP学习考试感悟之——坚持、努力是唯一法宝
  10. 浏览器下载文件时文件名中文乱码问题
  11. 李开复:李飞飞是人工智能的“良心”
  12. 用python画猫和老鼠_一个Python游戏:猫和老鼠
  13. 数字孪生城市,智慧城市可视化技术解决方案案例
  14. clipboard.js 实现动态获取内容并复制到剪切板
  15. 电影《名侦探柯南:万圣节的新娘》观后感
  16. vscode 护眼主题 界面UI配色 语法配色
  17. Jeff Dean长文展望:2021年后,机器学习领域的五大潜力趋势!
  18. 知乎越来越无聊了,真是想破了脑袋找可以装逼的地方!
  19. 野火iMX6ULL Pro开发板移植SDL2
  20. TensorFlow入门教程(1)安装、基础、Tensorboard

热门文章

  1. 历年美元对人民币汇率表
  2. 远程桌面连接的开启,和借助内外网软件,实现外网PC手机远程控制内网电脑,详细图文教程
  3. 基于BS的传统中医诊断系统软件开发与实现
  4. 适合计算机专业的志愿者活动,大学计算机与信息科学系青年志愿者协会活动的总结.docx...
  5. PowerShell 实现Word批量替换关键词
  6. 新闻快报| 虹科与瑞士Dimetix已联手合作三周年, 致力于提供高效、精确的激光测距解决方案!
  7. 还不错的全民采矿小程序源码+代码已开源
  8. PPT基础教学(从PPT图片插入讲解的水平,真的不能再基础)
  9. h2database源码解析-表和索引
  10. 互联网行业进入焦虑时代,如何才能做到攻守有道?