Hyperledger fabric 1.0 代码解析 之 system chaincode

2017-08-30

cscc:PeerConfiger

{
        Enabled:           true,
        Name:              "cscc",
        Path:              "github.com/hyperledger/fabric/core/scc/cscc",
        InitArgs:          [][]byte{[]byte("")},
        Chaincode:         &cscc.PeerConfiger{},
        InvokableExternal: true, // cscc is invoked to join a channel
},

主要处理参数:”JoinChain”,”GetConfigBlock”,”GetChannels”. 主要用处:对peer进行config,具体如下:

  1. channel join过程中会调用,涉及到其JoinChain过程,其作用主要是通过block创建chain,并进行初始化。详见:Hyperledger fabric 1.0 代码解析 之 channel join的第3步到第7步。
  2. chaincode的InitCmdFactory过程,对于invoke,instantiate等需要orderer参与的过程,在InitCmdFactory中需要GetOrdererEndpointOfChain中会涉及到cscc的GetConfigBlock过程,主要用处是从css获得configblock,然后从configblock中解析出orderer的address.
  3. channel list过程会调用,涉及到其GetChannels过程,其作用主要是获取peer加入了那些channel。

    lscc:LifeCycleSysCC

 {
        Enabled:           true,
        Name:              "lscc",
        Path:              "github.com/hyperledger/fabric/core/scc/lscc",
        InitArgs:          [][]byte{[]byte("")},
        Chaincode:         &lscc.LifeCycleSysCC{},
        InvokableExternal: true, // lscc is invoked to deploy new chaincodes
        InvokableCC2CC:    true, // lscc can be invoked by other chaincodes
},

主要处理参数: “install”,”deploy”,”upgrade”,”getid”,”getdepspec”,”getccdata”,”getchaincodes”,”getinstalledchaincodes” 主要用处:管理chaincode的整个生命周期,具体如下:

  1. chaincode install过程中会调用,涉及到其install过程,其作用主要是将chaincode写入文件系统。详见:Hyperledger fabric 1.0 代码解析 之 chaincode install的第3步和第4步。
  2. chaincode instantiate过程中会调用,涉及到其deploy过程,其主要作用是将用户的chaincode put到lscc中。详见:Hyperledger fabric 1.0 代码解析 之 chaincode instantiate or upgrade
  3. chaincode upgrade过程会调用,涉及到其upgrade过程,其主要作用是将用户的chaincode put到lscc中。
  4. chaincode invoke过程中,对于非system chaincode会首先需要从lscc中得到chaincode data,涉及其getccdata过程。
  5. chaincode Lanuch过程中,对于部分情况,需要调用GetCDSFromLSCC,涉及到lscc的getdepspec过程。
  6. “getid”,”getchaincodes”,”getinstalledchaincodes”暂未找到相关调用。

    escc:EndorserOneValidSignature

{
        Enabled:   true,
        Name:      "escc",
        Path:      "github.com/hyperledger/fabric/core/scc/escc",
        InitArgs:  [][]byte{[]byte("")},
        Chaincode: &escc.EndorserOneValidSignature{},
},

主要处理参数:只做签名背书用,无参数 主要用处:ProcessProposal中的endorseProposal过程会调用,用以对模拟执行的结果进行签名。

vscc:ValidatorOneValidSignature

{
        Enabled:   true,
        Name:      "vscc",
        Path:      "github.com/hyperledger/fabric/core/scc/vscc",
        InitArgs:  [][]byte{[]byte("")},
        Chaincode: &vscc.ValidatorOneValidSignature{},
},

主要处理参数:只做验证背书用,无参数 主要用处:peer端在处理deliverBlock(从orderer端传过来的block)的时候,在真正commit block过程中做证实用。

qscc:LedgerQuerier

{
        Enabled:           true,
        Name:              "qscc",
        Path:              "github.com/hyperledger/fabric/core/chaincode/qscc",
        InitArgs:          [][]byte{[]byte("")},
        Chaincode:         &qscc.LedgerQuerier{},
        InvokableExternal: true, // qscc can be invoked to retrieve blocks
        InvokableCC2CC:    true, // qscc can be invoked to retrieve blocks also by a cc
},

主要处理参数:”GetChainInfo”,”GetBlockByNumber”,”GetBlockByHash”,”GetTransactionByID”,”GetBlockByTxID” 主要用处:客户端和SDK端调用,用来查询当前区块和交易等。