美文网首页
4. 杂七杂八

4. 杂七杂八

作者: eftales | 来源:发表于2020-03-08 15:46 被阅读0次

    到这一步想必你已经对 fabric 有大致了解了,但是仍存在一点疑惑。这里记录一些零碎的小知识,或许可以解答你的疑惑。

    fabric 一定要用到 docker 吗?

    在默认情况下,智能合约的运行需要一个独立的环境,因此你每实例化一个 chaincode(即运行 peer chaincode instantiate ),peer程序都会创建一个docker镜像(fabric-ccenv)用于运行该 chaincode,因此fabric是避不开docker的。

    但是似乎可以设置 fabric 的模式,设置为非 dev 模式就不依赖 docker 了。(似乎)

    我把fabcar例子跑通过了,但是没有见到 fabric-ccenv 这个镜像啊

    fabric-ccenv 只在 chaincode 实例化的过程中被创建,实例化完成之后就会被 commit 为一个新镜像,也就是 dev 开头的镜像。用 docker images 也可以看到这个镜像,用docker ps 可以看到这个容器。

    chaincode 实例化的过程中都做了哪些事情

    1. 下载 fabric-shim 和 fabric-contract-api 两个 nodejs 库
    2. 但是这两个库不是纯 JavaScript,因此还需要下载一些 c 代码,然后通过 node-pre-gyp 编译为可执行文件
    3. 完成以上两步之后,才算完成了实例化的第一阶段
    4. 将完成第一阶段的容器 commit 为一个新的镜像(镜像的名字以dev开头),之后run这个镜像。

    chaincode 实例化到哪里了?

    逻辑上说是 channel。链码在 channel 上实例化,但是 channel 并不是一个物理存在的东西,因此实例化对应到实现上就是创建若干个dev开头的容器。dev开头容器的数量和背书节点相同。
    例如背书节点有两个,这两个背书节点应该形成两个dev容器,但是这两个容器并不是在同时生成的。peer chaincode instantiate 的时候会生成第一个dev容器,之后用 peer chaincode invoke 调用智能合约会生成剩余的dev容器。

    一定需要虚拟专用网络嘛

    十分推荐,由于实例化不仅仅需要nodejs库,还会下载其他文件,所以即使更换了npm源也没有用。
    如果没有虚拟专用网的话,实例化就是一个抽签过程,大概率失败,小概率成功。

    chaincode 实例化失败怎么办?

    如果有虚拟专用网

    直接把实例化的命令再执行一遍,一般就ok了

    没有虚拟专用网

    烧香拜佛,然后再执行一遍

    更多有关报错的可以参见文章常见错误

    一个 channel 是否可以实例化多个 chaincode ?

    可以,实例化的方法见文章。

    同一个 channel 的 chaincode 是否可以实现数据共享?

    默认情况下不行,不同的 contract 有不同的 context。但是有 chaincode 间交互的api,可以参考 https://hyperledger.github.io/fabric-chaincode-node/

    相关文章

      网友评论

          本文标题:4. 杂七杂八

          本文链接:https://www.haomeiwen.com/subject/pnnddhtx.html