困挠我的几个fabric问题咨询

近期通过对fabric的研究,有很多问题难以解决,不知道IBM推了那么区块链商业项目,是怎么解决的:1、部署一个合约就会启动一个docker镜像,根据pbft方式,一台机器上部署4个节点,那么启动100个合约就会启动400个镜像,这样是不是启动的镜像太多了,hyperledger为什么要这样设计?难道就是方...显示全部

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

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

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

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

收起

查看其它 2 个回答xixuejia的回答

xixuejiaxixuejia  软件开发工程师 , IBM
bh4rtp晓黎赞同了此回答

目前的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
浏览3651
  • 请问智能合约之间互访,怎么配置权限控制?
    2017-10-13

回答者

xixuejia软件开发工程师, IBM

回答状态

  • 发布时间:2016-12-17
  • 关注会员:3 人
  • 回答浏览:3651
  • 关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
    © 2018  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30