困挠我的几个fabric问题咨询

近期通过对fabric的研究,有很多问题难以解决,不知道IBM推了那么区块链商业项目,是怎么解决的:

1、部署一个合约就会启动一个docker镜像,根据pbft方式,一台机器上部署4个节点,那么启动100个合约就会启动400个镜像,这样是不是启动的镜像太多了,hyperledger为什么要这样设计?难道就是方便用docker吗?

2、什么时候建一个智能合约,是一个应用一个智能合约,还是一个应用可以多个智能合约?智能合约之间貌似不可以相互访问。比如我在A智能合约里创建了3个table,然后B智能合约要去读表里的数据,这样怎么能够实现?

3、fabric开发智能合约需要操作rocksdb,,可是事务处理如何做? 还有就是rocksdb的单表查询,只能根据PK查询,不能根据其他字段查询,怎么处理呢?

参与10

3同行回答

xixuejiaxixuejia软件开发工程师IBM
目前的v0.6-dev-preview版本确实有一部分功能不够完善,不过在接下来马上要发布的v1.0版本会得到解决。以下是针对所提问题的个人解答:1. 4个节点可以部署在4台机器上,这样可以一定程度减少单台机器启动的docker镜像数; 目前一般的系统中并不会部署那么多的合约。Hyperledge...显示全部

目前的v0.6-dev-preview版本确实有一部分功能不够完善,不过在接下来马上要发布的v1.0版本会得到解决。

以下是针对所提问题的个人解答:

1. 4个节点可以部署在4台机器上,这样可以一定程度减少单台机器启动的docker镜像数; 目前一般的系统中并不会部署那么多的合约。Hyperledger使用docker的原因,个人认为有以下几点: 1). 可以实现不同合约之间的隔离, 合约之间无法直接调用,合约之间的交互需要通过peer控制; 2) 可以很容易支持不同语言实现的合约, 目前已支持Golang, Java, 将来也可以很容易地实现其他语言的支持; 3) docker社区较为成熟,使用成本较低。

2. 一个应用可以对应一个智能合约,也可以有多个。智能合约之间可以互相访问,但是需要做好权限控制。API-> https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim#ChaincodeStub.InvokeChaincode

3. Fabric节点类似于一个event sourcing系统,每个节点要执行的交易是已经排序好的event,然后顺序执行,并生成一致的结果(非拜占庭节点&确定性输出)。Rocksdb的查询方式确实较单一,不支持类似SQL那么灵活的方式。可以考虑使用https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim#ChaincodeStub.GetRows 若这种方式还无法满足需求,可考虑创建额外的索引表来支持复杂的查询方式。在Fabric v1.0会支持更多的存储方式, goleveldb, CouchDB等等,这样会直接提供复杂的查询支持。

收起
软件开发 · 2016-12-17
浏览6776
  • 请问智能合约之间互访,怎么配置权限控制?
    2017-10-13
焱de想象焱de想象CEO上海塔链网络科技有限公司
现阶段的区块链确实相比关系型数据库要弱很多。不是为了效率存在的显示全部

现阶段的区块链确实相比关系型数据库要弱很多。不是为了效率存在的

收起
互联网服务 · 2016-11-23
浏览3109
焱de想象焱de想象CEO上海塔链网络科技有限公司
不是的。这里提出的是一种共识理念类似于联合国中的常任理事国和普通国家一样,不需要很多真正参与的共识节点显示全部

不是的。这里提出的是一种共识理念

类似于联合国中的常任理事国和普通国家一样,不需要很多真正参与的共识节点

收起
互联网服务 · 2016-11-23
浏览3189

提问者

qq373793057
系统工程师某银行
擅长领域: 存储灾备分布式系统

问题来自

相关资料

问题状态

  • 发布时间:2016-11-18
  • 关注会员:3 人
  • 问题浏览:10599
  • 最近回答:2016-12-17
  • X社区推广