Fabric 1.0源代码分析(5)Chaincode(链码)体系总结

# Fabric 1.0源代码笔记 之 Chaincode(链码)

## 1、Chaincode概述

Chaincode,即链码或智能合约,代码分布在protos/peer目录、core/chaincode和core/common/ccprovider目录,目录结构如下:

* protos/peer目录:
     * chaincode.pb.go,ChaincodeDeploymentSpec、ChaincodeInvocationSpec结构体定义。
* core/chaincode目录:
     * platforms目录,链码的编写语言平台实现,如golang或java。
         * platforms.go,Platform接口定义,及部分工具函数。
         * java目录,java语言平台实现。
         * golang目录,golang语言平台实现。
* core/common/ccprovider目录:ccprovider相关实现。

## 2、protos相关结构体定义

### 2.1、ChaincodeDeploymentSpec结构体定义(用于Chaincode部署)

#### 2.1.1 ChaincodeDeploymentSpec结构体定义

```go
type ChaincodeDeploymentSpec struct {
    ChaincodeSpec *ChaincodeSpec //ChaincodeSpec消息
    EffectiveDate *google_protobuf1.Timestamp
    CodePackage [] byte //链码文件打包
    ExecEnv ChaincodeDeploymentSpec_ExecutionEnvironment //链码执行环境,DOCKER或SYSTEM
}

type ChaincodeDeploymentSpec_ExecutionEnvironment int32

const (
    ChaincodeDeploymentSpec_DOCKER ChaincodeDeploymentSpec_ExecutionEnvironment = 0
    ChaincodeDeploymentSpec_SYSTEM ChaincodeDeploymentSpec_ExecutionEnvironment = 1
)
//代码在protos/peer/chaincode.pb.go
```

#### 2.1.2、ChaincodeSpec结构体定义

```go
type ChaincodeSpec struct {
    Type ChaincodeSpec_Type //链码的编写语言,GOLANG、JAVA
    ChaincodeId *ChaincodeID //ChaincodeId,链码路径、链码名称、链码版本
    Input *ChaincodeInput //链码的具体执行参数信息
    Timeout int32
}

type ChaincodeSpec_Type int32

const (
    ChaincodeSpec_UNDEFINED ChaincodeSpec_Type = 0
    ChaincodeSpec_GOLANG ChaincodeSpec_Type = 1
    ChaincodeSpec_NODE ChaincodeSpec_Type = 2
    ChaincodeSpec_CAR ChaincodeSpec_Type = 3
    ChaincodeSpec_JAVA ChaincodeSpec_Type = 4
)

type ChaincodeID struct {
    Path string
    Name string
    Version string
}

type ChaincodeInput struct { //链码的具体执行参数信息
    Args [][] byte
}
//代码在protos/peer/chaincode.pb.go
```

### 2.2、ChaincodeInvocationSpec结构体定义

```go
type ChaincodeInvocationSpec struct {
    ChaincodeSpec *ChaincodeSpec //参考本文2.2
    IdGenerationAlg string
}
//代码在protos/peer/chaincode.pb.go
```

## 3、ccprovider目录相关实现

### 3.1、ChaincodeData结构体

```go
type ChaincodeData struct {
    Name string
    Version string
    Escc string
    Vscc string
    Policy [] byte //chaincode 实例的背书策略
    Data [] byte
    Id [] byte
    InstantiationPolicy [] byte //实例化策略
}

//获取ChaincodeData,优先从缓存中读取
func GetChainc
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值