Hyperledger fabric sdk go 国密改造

2020-08-12
Hyperledger
fabric
go
国密

最近在做 Hyperledger fabric 国密改造,网上很多关于国密改造的,但是大多数都是对 fabric 进行改造,sdk 改造的很少。

测试很多人改的,都没能测通,最后找到了 bolenzhang 改的 go sdk 国密zhangqcfabric 国密 才测通了,他们基于同济的国密算法 https://github.com/tjfoc/gmsm

其中 sdk 中有一点小问题,有个包引用但是没有找到包文件,于是注掉了
文件 internal/github.com/hyperledger/fabric/core/ledger 中一个引用包

1"github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/core/ledger/util/couchdb"

改包没有找打,代码中也没有,索性就注掉了该包以及调用,大概 52 行左右的 StateDBConfig 结构体里

1type StateDBConfig struct {
2	// StateDatabase is the database to use for storing last known state.  The
3	// two supported options are "goleveldb" and "CouchDB".
4	StateDatabase string
5	// CouchDB is the configuration for CouchDB.  It is used when StateDatabase
6	// is set to "CouchDB".
7	//CouchDB *couchdb.Config 
8}

还有另一个包兼容问题,我用的 beego,有个包 github.com/go-kit/kit ,fabric 中用的版本是 v0.8.0,而 beego 依赖包中使用的是 v0.9.0,而这两个版本中 github.com/go-kit/kit/metrics/statsd 的 SendLoop 方法 v0.8.0 版本是 3 个参数

1(c <-chan time.Time, network, address string)

而 v0.9.0 及以后版本是四个参数

1(ctx context.Context, c <-chan time.Time, network, address string)

怕更新包版本又影响别的地方,直接修改 sdk 源码,将包文件
internal/github.com/hyperledger/fabric/core/operations/system.go 大概 227 行左右,原方法为:

1go s.statsd.SendLoop(s.sendTicker.C, network, address)

增加一个参数

1go s.statsd.SendLoop(nil,s.sendTicker.C, network, address)

大功告成,该 go sdk 是基于 v1.0.0-beta1 版本改的,目前官方已经发布了 v1.0.0-beta2,于是按着他这个改了一个基于 v1.0.0-beta2 的 fabric sdk go 国密版,fabric 也参考 gwanted 的基于 1.4.7 改了。

阅读 0