帮酷LOGO
  • 显示原文与译文双语对照的内容
Hyperledger Fabric SDK written on Go

  • 源代码名称:gohfc
  • 源代码网址:http://www.github.com/CognitionFoundry/gohfc
  • gohfc源代码文档
  • gohfc源代码下载
  • Git URL:
    git://www.github.com/CognitionFoundry/gohfc.git
  • Git Clone代码到本地:
    git clone http://www.github.com/CognitionFoundry/gohfc
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/CognitionFoundry/gohfc
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • GOHFC - Golang Hyperledger fabric-客户端

    这是用纯Golang编写的Hyperledger fabric,使用的是。 这不是官方 SDK,并且不遵循Hyperledger团队提供的官方 SDK API准则。 官方Hyperledger文档的官方参考sdk列表。

    它被设计成易于使用,并且尽可能快。 目前,它的性能远远超过了官方的。

    我们在生产应用程序中使用它,但没有提供保证。

    这里版本将被更新和支持,因此请求请求和报告任何问题都非常受欢迎。

    推荐的转到版本是> =1.9

    这里SDK被测试为 Hyperledger fabric 1.1. x.

    版本 1.0. x 应该有效,但某些功能将不可用。 我们不打算再支持 1.0. x 。 我们计划保留版本> =1.1.x的后向比较

    有关示例,请参见示例文件夹。

    依赖项

    go get -u golang.org/x/crypto/sha3
    go get -u gopkg.in/yaml.v2

    安装

    go get -u github.com/CognitionFoundry/gohfc

    基本概念

    Gohfc提供两个高级客户端,一个用于 FabricCA,一个用于 fabric 。 它们一起工作,但用户可以单独使用它们。

    FabricCAClient的客户端使用 fabric 证书颁发机构( CA ),并允许你进行 register 。注册。撤销证书。管理属性和属性。

    fabric 中的每个操作都必须通过正确的证书签名。 你可以使用openssl或者其他工具生成这个证书,但是FabricCA服务器使这个过程更加精简,并隐藏了许多复杂的问题。

    如果不希望使用 cryptogen 工具,则可以使用 FabricCAClient 生成完整的MSP结构。

    FabricClient 为区块区块,分类帐,chaincodes,通道和事件公开了高级别的api 。

    一般流程如下所示:

    • 使用docker编写 fabric 或者任何适合你的工具。 运行 fabric 不是gohfc的责任。
    • 通过将频道配置发送到订购orderer创建一个或者多个频道。 这是用 gohfc.CreateUpdateChannel 完成
    • 将一个或者多个节点加入到一个或者多个频道中。 这是用 gohfc.JoinChannel 完成
    • 在一个或者多个节点中安装一个或者多个 chaincodes 。 这可以用 gohfc.InstallChainCode 完成
    • 实例化一个或者多个已经安装的chaincodes 。 可以使用 gohfc.InstantiateChainCode 进行就餐
    • 使用 gohfc.Query 查询 chaincode 。这是只读操作。 不对区块区块或者分类帐进行任何更改。
    • 使用 gohfc.Invoke 调用 chaincode 。这里操作可能会更新区块区块和分类帐。
    • 使用 gohfc.ListenForFullBlock 或者 gohfc.ListenForFilteredBlock 侦听事件

    有很多方法可以获取特定的块。列表通道。获取chaincodes等。

    请参见示例文件夹。

    初始化

    两个客户机都可以从yaml文件或者手动初始化。

    FabricCAClient 配置 file:

    ---
    url: http://ca.example.com:7052 # URL for the CA server
    skipTLSValidation: true # skip TLS verification in case when you are not providing custom transport
    mspId: comp1Msp # this value will be added automatically to any gohfc.Identity returned from this CA 
    crypto: # cryptographic settings 
     family: ecdsa 
     algorithm: P256-SHA256 
     hash: SHA2-256

    从配置 file: 初始化 FabricCAClient

    caClient, err := gohfc.NewCAClient("./ca.yaml", nil)
    if err!= nil {
     fmt.Println(err)
     os.Exit(1)
    }

    关于 MSPId

    fabric 中的每个对等方和订购方都必须拥有 root 证书。中间证书。撤销证书列表和更多证书等加密材料。 这里证书集与ID关联,这里标识称为 MSP ( 成员服务提供程序) 。 在每个操作中必须提供 MSPID,以便对等和订单知道要加载哪一组加密材料并用于验证。

    通常MSP定义组织内的组织和实体,其中包含角色。 组合组合成一个联合,以便多个组织,每个具有自己证书集合的组合可以以共同工作。

    因此,当向 fabric 发送请求时,必须由 Ecert ( gohfc.Identity 中的用户证书) 签名这里请求,并且MSPID必须提供 fabric by该请求来自组织的成员,并且这里成员具有适当的访问权限。

    由于( 一般情况下) 一个FabricCa正在服务一个组织( 一个 MSP ),因这里在新的gohfc.Identity 生成( 注册或者重新注册) 时将这里is放入配置并自动填充。 这是为了方便,用户总是可以覆盖这个值。

    FabricClient 配置 file:

    ---
    crypto:
     family: ecdsa
     algorithm: P256-SHA256
     hash: SHA2-256
    orderers:
     orderer0:
     host: orderer0.example.com:7050
     useTLS: false
     tlsPath:/path/to/tls/server.pem
     orderer1:
     host: orderer0.example.com:7048
     useTLS: false
     tlsPath:/path/to/tls/server.pem
    peers:
     peer01:
     host: peer0.example.com:7051
     useTLS: false
     tlsPath:/path/to/tls/server.pem
     peer11:
     host: peer1.example.com:8051
     useTLS: false
     tlsPath:/path/to/tls/server.pem
     peer02:
     host: peer0.example.com:9051
     useTLS: false
     tlsPath:/path/to/tls/server.pem
     peer12:
     host: peer1.example.com:10051
     useTLS: false
     tlsPath:/path/to/tls/server.pem
    eventPeers:
     peer0:
     host: peer0.example.com:7051
     useTLS: false
     tlsPath:/path/to/tls/server.pem

    从配置 file: 初始化 FabricClient

    c, err := gohfc.NewFabricClient("./client.yaml")
    if err!= nil {
     fmt.Printf("Error loading file: %v", err)
     os.Exit(1)
    }

    安装 chaincode

    安装新chaincode时,必须提供 gohfc.InstallRequest 类型的结构:

    request := &gohfc.InstallRequest{
     ChainCodeType: gohfc.ChaincodeSpec_GOLANG,
     ChannelId:"testchannel",
     ChainCodeName:"samplechaincode",
     ChainCodeVersion:"1.0",
     Namespace:"github.com/hyperledger/fabric-samples/chaincode/chaincode_example02/go/",
     SrcPath:"/absolute/path/to/folder/containing/chaincode",
     Libraries: []gohfc.ChaincodeLibrary{
     {
     Namespace:"namespace",
     SrcPath:"path",
     },
     },
    }

    fabric 将支持用不同语言编写的chaincode,因此必须使用 ChainCodeType Gohfc指定语言类型,现在仅支持。 其他chaincode语言将在 fabric 正式开始支持它们时添加。

    ChannelId 是必须安装chaincode的通道 NAME 。

    ChainCodeName 是chaincode的NAME 。 这里 NAME 将用于将来请求( 查询,调用,等等 。) 以指定必须执行哪个 chaincode 。 一个通道可能有多个 chaincodes 。 在通道上下文中,NAME 必须是唯一的。

    ChainCodeVersion 指定版本。

    Gohfc被设计为无需进入环境即可工作。 所以当用户尝试安装chaincode时,他/她必须提供 NamespaceSrcPath 和可选的Libraries

    Namespace 是in命名空间,在 fabric 运行时中chaincode将是"已经安装"。 像 github.com/some/code

    SrcPath 是源代码的绝对路径,从那里它必须是红色,打包和准备安装。

    这种分离允许gohfc在没有任何外部运行时依赖性的情况下运行,这在word系统上非常灵活。

    Libraries 是一个可选的库列表,将包括在chaincode的包装中。 它们遵循 NamespaceSrcPath的相同逻辑。

    Vendoring是一个选项,但在更复杂的chaincodes中,有一些库作为库安装,而不是多个地方的vendored依赖。

    关于名称的注释

    许多操作要求指定特定的对等方或者排序方。 Gohfc使用 NAME 别名,并从配置文件中获取名称。 例如如果你想查询特定的节点:

    client.Query(*identity, *chaincode, []string{"peer01","peer11"})

    在这个示例中"peer01"和"peer11"是给配置文件中的对等点的名字,查询操作将被发送到这两个节点。

    待办事项

    • 全块解码。目前用户可以采取原始块数据,但将更好的提供效用函数解码区块。
    • InstantiateChainCode 中指定策略。等待 fabric的官方工具,并决定如何集成它。
    • gencrl调用 FabricCA
    • 轻松相互TLS配置

    可用加密算法

    族算法描述
    ecdsaP256-SHA256椭圆曲线为 P256,签名使用弹出
    ecdsaP384-SHA384椭圆曲线为 P384,签名使用 SHA384
    ecdsaP521-SHA512椭圆曲线为 P521,签名使用 SHA512
    rsa-----fabric 中不支持 RSA

    散列

    家庭
    SHA2-256
    SHA2-384
    SHA3-256
    SHA3-384



    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语