国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

區(qū)塊鏈教程Fabric1.0源代碼分析Peer peer根命令入口及加載子命令二

tuantuan / 2992人閱讀

摘要:兄弟連區(qū)塊鏈教程源代碼分析根命令入口及加載子命令二。此處傳入為,將模塊日志級別設(shè)置為,并會將初始化為。代碼在目錄下包括。核心代碼為,目的是在或?yàn)榭諘r設(shè)置默認(rèn)值。感謝關(guān)注兄弟連區(qū)塊鏈教程分享

  兄弟連區(qū)塊鏈教程Fabric1.0源代碼分析Peer peer根命令入口及加載子命令二。
flogging,即:fabric logging,為Fabric基于第三方包go-logging封裝的日志包,go-logging使用方法參考:github.com/op/go-logging
如下代碼為flogging包的初始化函數(shù):

func init() {
????logger = logging.MustGetLogger(pkgLogID) //創(chuàng)建僅在flogging包內(nèi)代碼使用的logging.Logger對象
????Reset() //全局變量初始化為默認(rèn)值
????initgrpclogger() //初始化gRPC Logger,即創(chuàng)建logging.Logger對象,并用這個對象設(shè)置grpclog
}
//代碼在common/flogging/logging.go

init()執(zhí)行結(jié)束后,peer/main.go中調(diào)用flogging.InitFromSpec(loggingSpec),將再次初始化全局日志級別為loggingSpec,之前默認(rèn)為logging.INFO。

func InitFromSpec(spec string) string代碼如下。
其中spec格式為:[[,...]=][:[[,...]=]...]。
此處傳入spec為"",將""模塊日志級別設(shè)置為defaultLevel,并會將modules初始化為defaultLevel。

levelAll := defaultLevel //defaultLevel為logging.INFO
var err error

if spec != "" { //如果spec不為空,則按既定格式讀取
????fields := strings.Split(spec, ":") //按:分割
????for _, field := range fields {
????????split := strings.Split(field, "=") //按=分割
????????switch len(split) {
????????case 1: //只有l(wèi)evel
????????????if levelAll, err = logging.LogLevel(field); err != nil { //levelAll賦值為logging.LogLevel枚舉中定義的Level級別
????????????????levelAll = defaultLevel // 如果沒有定義,則使用默認(rèn)日志級別
????????????}
????????case 2: //針對module,module...=level,split[0]為模塊集,split[1]為要設(shè)置的日志級別
????????????levelSingle, err := logging.LogLevel(split[1]) //levelSingle賦值為logging.LogLevel枚舉中定義的Level級別
????????????modules := strings.Split(split[0], ",") //按,分割獲取模塊名
????????????for _, module := range modules {
????????????????logging.SetLevel(levelSingle, module) //本條規(guī)則中所有模塊日志級別均設(shè)置為levelSingle
????????????}
????????default:
????????????//...
????????}
????}
}
//代碼在common/flogging/logging.go

flogging(Fabric日志系統(tǒng))更詳細(xì)信息參考:Fabric 1.0源代碼筆記 之 flogging(Fabric日志系統(tǒng))

4、初始化 MSP (Membership Service Provider會員服務(wù)提供者)

如下代碼為初始化MSP,獲取peer.mspConfigPath路徑和peer.localMspId,分別表示MSP的本地路徑(/etc/hyperledger/fabric/msp/)和Peer所關(guān)聯(lián)的MSP ID,并初始化組織和身份信息。

var mspMgrConfigDir = config.GetPath("peer.mspConfigPath")
var mspID = viper.GetString("peer.localMspId")
err = common.InitCrypto(mspMgrConfigDir, mspID)
//代碼在peer/main.go

/etc/hyperledger/fabric/msp/目錄下包括:admincerts、cacerts、keystore、signcerts、tlscacerts。其中:

admincerts:為管理員證書的PEM文件,如Admin@org1.example.com-cert.pem。

cacerts:為根CA證書的PEM文件,如ca.org1.example.com-cert.pem。

keystore:為具有節(jié)點(diǎn)的簽名密鑰的PEM文件,如91e54fccbb82b29d07657f6df9587c966edee6366786d234bbb8c96707ec7c16_sk。

signcerts:為節(jié)點(diǎn)X.509證書的PEM文件,如peer1.org1.example.com-cert.pem。

tlscacerts:為TLS根CA證書的PEM文件,如tlsca.org1.example.com-cert.pem。

如下代碼為common.InitCrypto(mspMgrConfigDir, mspID)的具體實(shí)現(xiàn),peer.BCCSP為密碼庫相關(guān)配置,包括算法和文件路徑等,格式如下:

BCCSP:
????Default: SW
????SW:
????????Hash: SHA2
????????Security: 256
????????FileKeyStore:
????????????KeyStore:
????????????
var bccspConfig *factory.FactoryOpts
err = viperutil.EnhancedExactUnmarshalKey("peer.BCCSP", &bccspConfig) //將peer.BCCSP配置信息加載至bccspConfig中
err = mspmgmt.LoadLocalMsp(mspMgrConfigDir, bccspConfig, localMSPID) //從指定目錄中加載本地MSP
//代碼在peer/common/common.go

factory.FactoryOpts定義為:

type FactoryOpts struct {
????ProviderName string  `mapstructure:"default" json:"default" yaml:"Default"`
????SwOpts       *SwOpts `mapstructure:"SW,omitempty" json:"SW,omitempty" yaml:"SwOpts"`
}
//FactoryOpts代碼在bccsp/factory/nopkcs11.go,本目錄下另有代碼文件pkcs11.go,在-tags "nopkcs11"條件下二選一編譯。
type SwOpts struct {
????// Default algorithms when not specified (Deprecated?)
????SecLevel   int    `mapstructure:"security" json:"security" yaml:"Security"`
????HashFamily string `mapstructure:"hash" json:"hash" yaml:"Hash"`

????// Keystore Options
????Ephemeral     bool               `mapstructure:"tempkeys,omitempty" json:"tempkeys,omitempty"`
????FileKeystore  *FileKeystoreOpts  `mapstructure:"filekeystore,omitempty" json:"filekeystore,omitempty" yaml:"FileKeyStore"`
????DummyKeystore *DummyKeystoreOpts `mapstructure:"dummykeystore,omitempty" json:"dummykeystore,omitempty"`
}
type FileKeystoreOpts struct {
????KeyStorePath string `mapstructure:"keystore" yaml:"KeyStore"`
}
//SwOpts和FileKeystoreOpts代碼均在bccsp/factory/swfactory.go

如下代碼為viperutil.EnhancedExactUnmarshalKey("peer.BCCSP", &bccspConfig)的具體實(shí)現(xiàn),getKeysRecursively為遞歸讀取peer.BCCSP配置信息。
mapstructure為第三方包:github.com/mitchellh/mapstructure,用于將map[string]interface{}轉(zhuǎn)換為struct。
示例代碼:https://godoc.org/github.com/...

func EnhancedExactUnmarshalKey(baseKey string, output interface{}) error {
????m := make(map[string]interface{})
????m[baseKey] = nil
????leafKeys := getKeysRecursively("", viper.Get, m)

????config := &mapstructure.DecoderConfig{
????????Metadata:         nil,
????????Result:           output,
????????WeaklyTypedInput: true,
????}
????decoder, err := mapstructure.NewDecoder(config)
????return decoder.Decode(leafKeys[baseKey])
}
//代碼在common/viperutil/config_util.go

如下代碼為mspmgmt.LoadLocalMsp(mspMgrConfigDir, bccspConfig, localMSPID)的具體實(shí)現(xiàn),從指定目錄中加載本地MSP。

conf, err := msp.GetLocalMspConfig(dir, bccspConfig, mspID) //獲取本地MSP配置,序列化后寫入msp.MSPConfig,即conf
return GetLocalMSP().Setup(conf) //調(diào)取msp.NewBccspMsp()創(chuàng)建bccspmsp實(shí)例,調(diào)取bccspmsp.Setup(conf)解碼conf.Config并設(shè)置bccspmsp
//代碼在msp/mgmt/mgmt.go

如下代碼為msp.GetLocalMspConfig(dir, bccspConfig, mspID)的具體實(shí)現(xiàn)。
SetupBCCSPKeystoreConfig()核心代碼為bccspConfig.SwOpts.FileKeystore = &factory.FileKeystoreOpts{KeyStorePath: keystoreDir},目的是在FileKeystore或KeyStorePath為空時設(shè)置默認(rèn)值。

signcertDir := filepath.Join(dir, signcerts) //signcerts為"signcerts",signcertDir即/etc/hyperledger/fabric/msp/signcerts/
keystoreDir := filepath.Join(dir, keystore) //keystore為"keystore",keystoreDir即/etc/hyperledger/fabric/msp/keystore/
bccspConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir) //設(shè)置bccspConfig.SwOpts.Ephemeral = false和bccspConfig.SwOpts.FileKeystore = &factory.FileKeystoreOpts{KeyStorePath: keystoreDir}
????//bccspConfig.SwOpts.Ephemeral是否短暫的
err := factory.InitFactories(bccspConfig) //初始化bccsp factory,并創(chuàng)建bccsp實(shí)例
signcert, err := getPemMaterialFromDir(signcertDir) //讀取X.509證書的PEM文件
sigid := &msp.SigningIdentityInfo{PublicSigner: signcert[0], PrivateSigner: nil} //構(gòu)造SigningIdentityInfo
return getMspConfig(dir, ID, sigid) //分別讀取cacerts、admincerts、tlscacerts文件,以及config.yaml中組織信息,構(gòu)造msp.FabricMSPConfig,序列化后用于構(gòu)造msp.MSPConfig
//代碼在msp/configbuilder.go

factory.InitFactories(bccspConfig)及BCCSP(區(qū)塊鏈加密服務(wù)提供者)更詳細(xì)內(nèi)容,參考:Fabric 1.0源代碼筆記 之 BCCSP(區(qū)塊鏈加密服務(wù)提供者)

至此,peer/main.go結(jié)束,接下來將進(jìn)入peer/node/start.go中serve(args)函數(shù)。
感謝關(guān)注兄弟連區(qū)塊鏈教程分享!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/24369.html

相關(guān)文章

  • 兄弟連區(qū)塊教程Fabric1.0代碼分析Peer peer命令入口及加載子命令

    摘要:區(qū)塊鏈教程源代碼分析根命令入口及加載子命令,年下半年,區(qū)塊鏈行業(yè)正逐漸褪去發(fā)展之初的浮躁回歸理性,表面上看相關(guān)人才需求與身價似乎正在回落。代碼在為命令啟動。   區(qū)塊鏈教程Fabric1.0源代碼分析Peer peer根命令入口及加載子命令,2018年下半年,區(qū)塊鏈行業(yè)正逐漸褪去發(fā)展之初的浮躁、回歸理性,表面上看相關(guān)人才需求與身價似乎正在回落。但事實(shí)上,正是初期泡沫的漸退,讓人們更多的...

    sean 評論0 收藏0
  • 區(qū)塊教程Fabric1.0代碼分析Peer peer chaincode命令及子命令實(shí)現(xiàn)

    摘要:兄弟連區(qū)塊鏈教程源代碼分析命令及子命令實(shí)現(xiàn),年下半年,區(qū)塊鏈行業(yè)正逐漸褪去發(fā)展之初的浮躁回歸理性,表面上看相關(guān)人才需求與身價似乎正在回落。   兄弟連區(qū)塊鏈教程Fabric1.0源代碼分析Peer peer chaincode命令及子命令實(shí)現(xiàn),2018年下半年,區(qū)塊鏈行業(yè)正逐漸褪去發(fā)展之初的浮躁、回歸理性,表面上看相關(guān)人才需求與身價似乎正在回落。但事實(shí)上,正是初期泡沫的漸退,讓人們更多...

    gghyoo 評論0 收藏0
  • 區(qū)塊教程Fabric1.0代碼分析Peer EndorserClient(Endorser客戶端

    摘要:兄弟連區(qū)塊鏈教程源代碼分析客戶端,年下半年,區(qū)塊鏈行業(yè)正逐漸褪去發(fā)展之初的浮躁回歸理性,表面上看相關(guān)人才需求與身價似乎正在回落。源代碼筆記之客戶端概述相關(guān)代碼分布如下,接口及實(shí)現(xiàn)。代碼在工具函數(shù)獲取客戶端代碼在   兄弟連區(qū)塊鏈教程Fabric1.0源代碼分析Peer EndorserClient(Endorser客戶端),2018年下半年,區(qū)塊鏈行業(yè)正逐漸褪去發(fā)展之初的浮躁、回歸理性...

    lufficc 評論0 收藏0
  • 區(qū)塊教程Fabric1.0代碼分析Peer(Endorser服務(wù)端)

    摘要:兄弟連區(qū)塊鏈教程源代碼分析服務(wù)端,年下半年,區(qū)塊鏈行業(yè)正逐漸褪去發(fā)展之初的浮躁回歸理性,表面上看相關(guān)人才需求與身價似乎正在回落。源代碼筆記之服務(wù)端概述相關(guān)代碼在目錄下。,接口實(shí)現(xiàn),即結(jié)構(gòu)體及方法,以及服務(wù)端處理流程。   兄弟連區(qū)塊鏈教程Fabric1.0源代碼分析Peer(Endorser服務(wù)端),2018年下半年,區(qū)塊鏈行業(yè)正逐漸褪去發(fā)展之初的浮躁、回歸理性,表面上看相關(guān)人才需求與...

    leone 評論0 收藏0
  • Hyperledger Fabric(目錄)

    摘要:企業(yè)區(qū)塊鏈平臺企業(yè)級許可的分布式分類賬平臺,為廣泛的行業(yè)用例提供模塊化和多功能性。這些節(jié)點(diǎn)通過應(yīng)用已經(jīng)由共識協(xié)議驗(yàn)證的交易來維護(hù)分類帳的副本,該交易被分組為包括將每個塊綁定到前一個塊的散列的塊中。 企業(yè)區(qū)塊鏈平臺 企業(yè)級許可的分布式分類賬平臺,為廣泛的行業(yè)用例提供模塊化和多功能性。 介紹 一般而言,區(qū)塊鏈?zhǔn)且粋€不可變的交易分類賬,維護(hù)在一個分布式對等節(jié)點(diǎn)網(wǎng)絡(luò)中。這些節(jié)點(diǎn)通過應(yīng)用已經(jīng)由共...

    trigkit4 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<