java随记

坚持就是胜利!

 

Fabric 1.1源代码分析(3) 系统链码执行过程示例(弟弟篇)

# Fabric 1.1源代码分析(3) 系统链码执行过程
## 1、系统链码执行过程
* 以peer channel join -b gensis.block命令为例。该命令结果是peer节点加入通道.
这个命令会单独启一个进程.在该进程中会构建一个名称为cscc的链码消息传到peer节点.
通过grpc调用最终会进到endorser.go中的ProcessProposal函数进行处理。
参考Fabric 1.1源代码分析(2)http://www.blogjava.net/fool/archive/2018/06/12/433277.html
系统链码初始化过程,可以找到../shim/handler.go中
的handleTransaction()函数.最终会调用res := handler.cc.Invoke(stub).这里的
cc就是importsysccs.go文件中systemChaincodes数组中的cscc系统链码的.    
Chaincode,其实例是&cscc.PeerConfiger{},实现在cscc/configure.go文件中。每个系统
链码都实现了这个Chaincode接口()
```go
type Chaincode interface {
    // Init is called during Instantiate transaction after the chaincode container
    // has been established for the first time, allowing the chaincode to
    // initialize its internal data
    Init(stub ChaincodeStubInterface) pb.Response

    // Invoke is called to update or query the ledger in a proposal transaction.
    // Updated state variables are not committed to the ledger until the
    // transaction is committed.
    Invoke(stub ChaincodeStubInterface) pb.Response
}
```

* 至此就可以清晰地看到每一个系统链码都会启动一对协程,通过chan通信。系统链码消息由
shim/handler.go中的函数处理.并且这里最终调用各自的具体实现的Ivoke方法进行业务处理

## 2、peer channel join命令处理流程图
* peer channel join命令会调用configure.go中的Excute方法。对应cscc系统链码的处理,
原因如下,以下流程图大致可以了解cscc都做了些什么
![](cscc.png)

## 3、小结

* 上面的流程图也不是非常地强细,忽略掉了一些方法。但是有了整个流程的理解,就能理解其
它系统链码的调用过程,需要时直接细读其实现就好了。从上流程图中可以看到文件末尾添加区
区块,leveldb中记录了区块号,索引位置信息等等。另外因为系统链码跟一般链码虽然经过
的文件基本一样,但最终处理方式还是不一样,一个是协程,一个是grpc.可能参考Fabric 1.1
源代码分析之 Chaincode(链码)初始化 http://www.blogjava.net/fool/archive/2018/06/12/433275.html

posted on 2018-06-13 14:37 傻 瓜 阅读(1248) 评论(0)  编辑  收藏 所属分类: 杂项


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(7)

我参与的团队

随笔分类

随笔档案

文章分类

友情链接

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜