MCPcopy Index your code
hub / github.com/BSNDA/PCNGateway-Go-SDK

github.com/BSNDA/PCNGateway-Go-SDK @v1.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.2.0 ↗ · + Follow
2,409 symbols 3,662 edges 157 files 260 documented · 11%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

SDK调用参考

Go语言SDK

框架及秘钥支持

Go语言SDK目前支持官网所有的框架和秘钥组合应用的调用

具体如下:

框架秘钥上传秘钥托管
secp256r1secp256k1SM2secp256r1secp256k1SM2
Fabric支持支持支持支持
FISCO-BCOS支持支持支持支持
XuperChain支持支持
CITA支持

  • fabric框架应用使用secp256r1、SM2 秘钥的秘钥托管和秘钥上传两种模式;
  • FISCO-BCOS框架应用使用secp256k1、SM2 秘钥的秘钥托管和秘钥上传两种模式;
  • XuperChain框架应用使用SM2 秘钥的秘钥托管和秘钥上传两种模式;
  • CITA框架应用仅支持SM2秘钥的秘钥托管模式;

1. 调用前准备

应用参数

应用参数是用户在参与应用成功之后在应用详情页面获取,或者由本地设置的一些参数,具体包含以下参数 * 节点网关接口地址: 参与的城市节点的节点网关的调用地址 * 用户编号: 用户的编号 * 应用编号: 参与的应用的编号 * 应用公钥: 用户参与成功之后下载的节点网关的应用公钥 * 应用私钥: 托管类型应用再参与成功之后由BSN生成的应用公钥,非托管应用为在参与应用时上传的公钥所对应的私钥 * Https证书: 调用https网关接口时使用的https证书

#### 本地参数 * 证书存储目录: 用来存储非托管应用在调用用户证书登记时生成的用户私钥和证书的目录

2. 准备调用

导入sdk包

Fabric 需要引入下面的包

import (
    "github.com/BSNDA/PCNGateway-Go-SDK/pkg/client/fabric"
    "github.com/BSNDA/PCNGateway-Go-SDK/pkg/core/config"
    )

FISCO-BCOS 需要引入下面的包

import (
    "github.com/BSNDA/PCNGateway-Go-SDK/pkg/client/fisco-bcos"
    "github.com/BSNDA/PCNGateway-Go-SDK/pkg/core/config"
    )

XuperChain 需要引入下面的包

import (
    "github.com/BSNDA/PCNGateway-Go-SDK/pkg/client/xuperchain"
    "github.com/BSNDA/PCNGateway-Go-SDK/pkg/core/config"
    )

初始化config

可以初始化一个存储所有配置的对象,这些具体的配置信息应当由调用者根据各自的项目配置或者读取之后,在调用时传入, 在config的Init方法中实现了获取一个App基础信息的操作,该操作请不要频繁的调用,该接口将占用您的TPS和流量,可以在项目使用一个静态对象存储config在需要时使用。 值得注意的是,在配置证书的时候,应用的证书(即用来签名和验签的证书)是直接传证书内容,而Https的证书是证书的文件路径。

    api:="" //节点网关地址
    userCode:="" //用户编号
    appCode :="" //应用编号
    puk :="" //应用公钥
    prk :="" //应用私钥
    mspDir:="" //证书存储目录
    cert :="" //证书
    config,err :=config.NewConfig(api, userCode, appCode, puk, prk, mspDir, cert )
    if err !=nil{
        log.Fatal(err)
    }

初始化Client

使用已经生成的配置对象,调用以下代码可以创建一个Client对象,用来调用节点网关

    client,err :=fabric.InitFabricClient(config)
    //client,err :=fisco_bcos.NewFiscoBcosClient(config) //FISCO-BCOS Client
    //client,err :=xuperchain.NewXuperChainClient(config) //XuperChain Client
    if err !=nil{
        log.Fatal(err)
    }

调用接口

每一个网关接口已经封装了请求和响应的参数对象,只需要赋值就可直接调用,方法内已经实现了签名和验签的操作。 以下为注册子用户的调用操作,其他类似。

    req :=user.RegisterReqDataBody{
        Name:"abc",
        Secret:"123456",
    }

    res,err :=client.RegisterUser(req)
    if err !=nil{
        log.Fatal(err)
    }

    if res.Header.Code != 0{
        log.Fatal( res.Header.Msg)
    }

3.一些其他说明

非托管应用的用户身份证书的说明

由于Fabric框架的非托管的应用在调用网关进行交易的时候所需要的用户证书需要用户自己生成,其流程是:注册用户->登记用户证书 。在登记用户证书的操作中,会由本地生成一对秘钥,然后通过秘钥导出证书的CSR文件(证书申请文件),调用用户证书 登记接口获取一个有效的证书,使用该证书才能在通过托管应用交易处理接口中正常的发起交易。 需要注意的是在CSR文件中设置CN时,并不直接是注册的Name,而是由Name和AppCode拼接的名称,格式为Name@AppCode 。 该操作是在 FabricClientEnrollUser方法中实现的。
FISCO-BCOS框架的非托管应用在进行交易时只需要在本地生成一对符合框架算法的密钥对即可,无需其他操作。

证书的存储 是通过 util中的keystoreuserstore实现的,该方法只存储本地文件形式的证书,如果需要其 他形式的证书存储方式。是需要实现具体的接口即可,详细请参考具体的代码。 keystore的实现参考了fabric-sdk-go中的实现方式,通过计算证书的SKI区分私钥,也可以通过其他方式区分证书和私钥的关系

关于加密

为方便在进行数据交易的上链操作中对数据进行加密解密,SDK中实现了一种对称加密AES和一种非对称加密SM2算法 其中对称加密为AES具体调用如下

    data :=[]byte("abc")
    key :=[]byte("123456")

    //CBC模式,秘钥不足16位 PKCS7填充秘钥
    key = keystore.Pkcs7PaddingKey(key)
    //加密
    cr ,err :=keystore.AESCBCPKCS7Encrypt(key,data)
    if err !=nil{
        t.Fatal(err)
    }

    //转hex输出
    fmt.Println("加密后:",hex.EncodeToString(cr))

    //解密
    data,err = keystore.AESCBCPKCS7Decrypt(key,cr)
    if err !=nil{
        t.Fatal(err)
    }

    fmt.Println("解密后:",string(data))

非对称加密SM2,具体如下,在该方法中同时实现了SM2的签名和验签

非对称加密中由公钥加密,私钥进行解密

    puk := ``//公钥
    prik := ``//私钥
    sm, err := sm2.NewSM2Handle(puk, prik)
    if err != nil {
        t.Fatal(err)
    }
    data :=[]byte("abc")
    cr ,err :=sm.Encrypt(data)
    if err != nil {
        t.Fatal(err)
    }
    fmt.Println("加密后:",hex.EncodeToString(cr))
    data,err = sm.Decrypt(cr)
    if err != nil {
        t.Fatal(err)
    }
    fmt.Println("解密后:",string(data))

关于秘钥生成

在BSN中,fabric框架的密钥格式为ECDSAsecp256r1曲线,而fisco-bcos框架的密钥格式为SM2 在用户参与非托管应用时需要生成对应格式的密钥并上传。 下面介绍这两种密钥的生成,秘钥的生成是使用openssl生成的,其中SM2秘钥的生成需要openssl1.1.1及以上版本

注:以下命令是在linux环境下执行的

1. ECDSA(secp256r1)的密钥生成
  • 生成私钥
openssl ecparam -name prime256v1 -genkey -out key.pem
  • 导出公钥
openssl ec -in key.pem -pubout -out pub.pem
  • 导出pkcs8格式私钥

    由于部分语言中使用pkcs8格式的密钥比较方便,可以使用下面的命令导出pkcs8格式私钥 在本sdk中使用的私钥即为pkcs8格式

openssl pkcs8 -topk8 -inform PEM -in key.pem -outform PEM -nocrypt -out key_pkcs8.pem

通过以上命令可以生成三个文件 key.pem :私钥 pub.pem :公钥 key_pkcs8.pem :pkcs8格式私钥

2. ECDSA(secp256k1)的密钥生成
  • 生成私钥
openssl ecparam -name secp256k1 -genkey -out key.pem
  • 导出公钥
openssl ec -in key.pem -pubout -out pub.pem
  • 导出pkcs8格式私钥

    由于部分语言中使用pkcs8格式的密钥比较方便,可以使用下面的命令导出pkcs8格式私钥 在本sdk中使用的私钥即为pkcs8格式

openssl pkcs8 -topk8 -inform PEM -in key.pem -outform PEM -nocrypt -out key_pkcs8.pem

通过以上命令可以生成三个文件 key.pem :私钥 pub.pem :公钥 key_pkcs8.pem :pkcs8格式私钥

3.SM2格式秘钥生成

首先需要检查openssl的版本是否支持SM2格式秘钥生成,可以使用下面的命令

openssl ecparam -list_curves | grep SM2

如果输出以下内容,则表示支持,

SM2       : SM2 curve over a 256 bit prime field

否则需要去官网下载1.1.1或者以上版本, 这是使用的为1.1.1d版本, 官网下载地址:https://www.openssl.org/source/openssl-1.1.1d.tar.gz

  • 生成私钥
openssl ecparam -genkey -name SM2 -out sm2PriKey.pem
  • 导出公钥
openssl ec -in sm2PriKey.pem -pubout -out sm2PubKey.pem
  • 导出pkcs8格式私钥

    由于部分语言中使用pkcs8格式的密钥比较方便,可以使用下面的命令导出pkcs8格式私钥 在本sdk中使用的私钥即为pkcs8格式

openssl pkcs8 -topk8 -inform PEM -in sm2PriKey.pem -outform pem -nocrypt -out sm2PriKeyPkcs8.pem

通过以上命令可以生成三个文件 sm2PriKey.pem :私钥 sm2PubKey.pem :公钥 sm2PriKeyPkcs8.pem :pkcs8格式私钥

Extension points exported contracts — how you extend this code

TransactionHeader (Interface)
TransactionHeader provides a handle to transaction metadata. [1 implementers]
pkg/core/trans/fabric/fab/proposer.go
KeyOpts (FuncType)
saveKey delegate method for saving private key
pkg/client/fabric/fabricClient.go
UserCertStore (Interface)
(no doc) [1 implementers]
pkg/util/keystore/userstore.go
Crypto (Interface)
(no doc) [3 implementers]
pkg/core/sign/bsnCrypto.go
ClientOpts (FuncType)
(no doc)
pkg/client/fabric/fabricClient.go
KeyStore (Interface)
(no doc) [1 implementers]
pkg/util/keystore/keystore.go
ProposalProcessor (Interface)
ProposalProcessor simulates transaction proposal, so that a client can submit the result for ordering.
pkg/core/trans/fabric/fab/proposer.go
TxnHeaderOpt (FuncType)
TxnHeaderOpt is a Transaction Header option
pkg/core/trans/fabric/fab/proposer.go

Core symbols most depended-on inside this repo

GetBaseEncryptionValue
called by 87
pkg/core/entity/base/req.go
Error
called by 82
pkg/common/errors/error.go
GetHeader
called by 43
pkg/client/fabric/fabricClient.go
Sign
called by 36
pkg/core/sign/bsnCrypto.go
SendPost
called by 32
pkg/common/http/http.go
New
called by 31
pkg/common/errors/error.go
GetURL
called by 30
pkg/client/client.go
GetEncryptionValue
called by 25
pkg/core/entity/base/reqInterface.go

Shape

Method 1,814
Struct 305
Function 265
TypeAlias 12
Interface 10
FuncType 3

Languages

Go100%

Modules by API surface

pkg/core/trans/xuperchain/pb/xchain.pb.go1,454 symbols
pkg/core/trans/cita/pb/blockchain.pb.go220 symbols
pkg/core/trans/xuperchain/pb/chainedbft.pb.go71 symbols
pkg/common/cache/proc/proc.go21 symbols
pkg/core/trans/fabric/utils/proputils.go19 symbols
pkg/core/trans/fabric/fab/proposer.go19 symbols
pkg/client/fisco-bcos/fiscobcosClient_node_test.go17 symbols
pkg/core/trans/fabric/trans.go16 symbols
pkg/core/config/config.go14 symbols
pkg/client/xuperchain/xuperchain_node_test.go13 symbols
pkg/client/cita/citaClient_node_test.go13 symbols
pkg/client/fabric/fabricClient.go11 symbols

For agents

$ claude mcp add PCNGateway-Go-SDK \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page