Fabric 1.0源代码笔记 之 MSP(成员关系服务提供者)

1、MSP概述

MSP,全称Membership Service Provider,即成员关系服务提供者,作用为管理Fabric中的众多参与者。

成员服务提供者(MSP)是一个提供抽象化成员操作框架的组件。
MSP将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。一个MSP可以自己定义身份,以及身份的管理(身份验证)与认证(生成与验证签名)规则。
一个Hyperledger Fabric区块链网络可以被一个或多个MSP管理。

MSP的核心代码在msp目录下,其他相关代码分布在common/config/msp、protos/msp下。目录结构如下:

  • msp目录
        * msp.go,定义接口MSP、MSPManager、Identity、SigningIdentity、IdentityDeserializer。

* mspimpl.go,实现MSP接口,即bccspmsp。
    * mspmgrimpl.go,实现MSPManager接口,即mspManagerImpl。
    * identities.go,实现Identity、SigningIdentity接口,即identity和signingidentity。
    * configbuilder.go,提供读取证书文件并将其组装成MSP等接口所需的数据结构,以及转换配置结构体(FactoryOpts->MSPConfig)等工具函数。
    * cert.go,证书相关结构体及方法。
    * mgmt目录
        * mgmt.go,msp相关管理方法实现。
        * principal.go,MSPPrincipalGetter接口及其实现,即localMSPPrincipalGetter。
        * deserializer.go,DeserializersManager接口及其实现,即mspDeserializersManager。

  • common/config/msp目录
        * config.go,定义了MSPConfigHandler及其方法,用于配置MSP和configtx工具。
  • protos/msp目录,msp相关Protocol Buffer原型文件。

2、核心接口定义

IdentityDeserializer为身份反序列化接口,同时被MSP和MSPManger的接口嵌入。定义如下:

type IdentityDeserializer interface {DeserializeIdentity(serializedIdentity []byte) (Identity, error)
}
//代码在msp/msp.go

MSP接口定义:

type MSP interface {IdentityDeserializer //需要实现IdentityDeserializer接口Setup(config *msp.MSPConfig) error //根据MSPConfig设置MSP实例GetType() ProviderType //获取MSP类型,即FABRICGetIdentifier() (string, error) //获取MSP名字GetDefaultSigningIdentity() (SigningIdentity, error) //获取默认的签名身份GetTLSRootCerts() [][]byte //获取TLS根CA证书Validate(id Identity) error //校验身份是否有效SatisfiesPrincipal(id Identity, principal *msp.MSPPrincipal) error //验证给定的身份与principal中所描述的类型是否相匹配
}
//代码在msp/msp.go

MSPManager接口定义:

type MSPManager interface {IdentityDeserializer //需要实现IdentityDeserializer接口Setup(msps []MSP) error //用给定的msps填充实例中的mspsMapGetMSPs() (map[string]MSP, error) //获取MSP列表,即mspsMap
}
//代码在msp/msp.go

Identity接口定义(身份):

type Identity interface {GetIdentifier() *IdentityIdentifier //获取身份IDGetMSPIdentifier() string //获取MSP ID,即id.MspidValidate() error //校验身份是否有效,即调取msp.Validate(id)GetOrganizationalUnits() []*OUIdentifier //获取组织单元Verify(msg []byte, sig []byte) error //用这个身份校验消息签名Serialize() ([]byte, error) //身份序列化SatisfiesPrincipal(principal *msp.MSPPrincipal) error //调用msp的SatisfiesPrincipal检查身份与principal中所描述的类型是否匹配
}
//代码在msp/msp.go

SigningIdentity接口定义(签名身份):

type SigningIdentity interface {Identity //需要实现Identity接口Sign(msg []byte) ([]byte, error) //签名msg
}
//代码在msp/msp.go

未完待续感谢关注兄弟连区块链教程分享!

区块链教程Fabric1.0源代码分析MSP成员关系服务提供者一相关推荐

  1. 区块链教程Fabric1.0源代码分析Peer peer channel命令及子命令实现

    区块链教程Fabric1.0源代码分析Peer peer channel命令及子命令实现,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实 ...

  2. 区块链教程Fabric1.0源代码分析配置交易-生成通道配置二

    兄弟连区块链教程Fabric1.0源代码分析配置交易-生成通道配置二.Generator接口实现,即bootstrapper. type bootstrapper struct {channelGro ...

  3. 区块链教程Fabric1.0源代码分析scc(系统链码)

    区块链教程Fabric1.0源代码分析scc(系统链码),2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期泡沫的渐退,让人们更 ...

  4. 区块链教程Fabric1.0源代码分析Tx(Transaction 交易)一

    区块链教程Fabric1.0源代码分析Tx(Transaction 交易)一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期 ...

  5. 兄弟连区块链教程Fabric1.0源代码分析configupdate处理通道配置更新

    区块链教程Fabric1.0源代码分析configupdate处理通道配置更新,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初 ...

  6. 兄弟连区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令一

    区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初 ...

  7. 区块链教程Fabric1.0源代码分析流言算法Gossip服务端二

    区块链教程Fabric1.0源代码分析流言算法Gossip服务端二 Fabric 1.0源代码笔记 之 gossip(流言算法) #GossipServer(Gossip服务端) 5.2.commIm ...

  8. 区块链教程Fabric1.0源代码分析configtx#genesis-兄弟连

    区块链教程Fabric1.0源代码分析configtx#genesis,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期泡沫的 ...

  9. gossip 区块链_区块链教程Fabric1.0源代码分析流言算法Gossip服务端一兄弟连区块链教程-阿里云开发者社区...

    区块链教程Fabric1.0源代码分析流言算法Gossip服务端一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期泡沫的渐退 ...

  10. 区块链教程Fabric1.0源代码分析Tx(Transaction 交易)二

    4.交易相关部分工具函数(protos/utils包) putils更详细内容,参考:Fabric 1.0源代码笔记 之 putils(protos/utils工具包) 5.RWSet(读写集) RW ...

最新文章

  1. Android简单封装类似JQuery异步请求
  2. JSF:直接从页面将参数传递给JSF操作方法,这是JavaEE 6+的一个不错的功能
  3. 《TensorFlow 2.0深度学习算法实战教材》学习笔记(二、回归问题和分类问题)
  4. mysql unescape解码_python mysql escape\n(简单语法错误)
  5. 谷歌:早在这个0day 补丁发布前几周,朝鲜国家黑客就已利用
  6. 【机器学习原理】KNN分类算法
  7. Codeforces 1153C
  8. 从零开始F28069M launchPAD板的点灯
  9. |9 其他(linux特定的), 用来存放内核例行程序的文档.,Linux常用操作指令
  10. java计算机毕业设计springboot+vue青少年编程在线考试系统
  11. A pseudo attribute name is expected.解决方法
  12. 安卓 APP更新的两种途径
  13. 用python制作weblogo/SeqLogo/序列保守性分析图
  14. android自动化测试unity,基于Unity3D引擎的UI自动化测试方案
  15. 算法快学笔记(十三):狄克斯特拉(Dijkstra)算法原理与实现
  16. 教你如何解决VS2015的30天试用期已过即VS2015许可证已过期的问题,使用激活 密钥
  17. CSS文字超出用省略号...鼠标悬停显示全部文字
  18. Android Content开头的Uri和文件绝对路径互相转换
  19. uniapp本地数据库_Uniapp教程|App/uni-app离线本地存储方案
  20. P1498 南蛮图腾---洛谷(分冶)

热门文章

  1. 写一简单kernel心得
  2. 抽取、转换和装载介绍(五)抽取数据
  3. android AsyncTask 详细例子
  4. Java第二节课总结
  5. reactNative之react-native-picker
  6. JavaScriptjQuery.HTML5事件
  7. Spark学习笔记6:Spark调优与调试
  8. 有关css3的一些问题
  9. Android Studio(十):添加assets目录
  10. 对select into表复制的一点思考