日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fabric 1.0源代码分析(39) policy(背书策略)

發布時間:2023/12/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fabric 1.0源代码分析(39) policy(背书策略) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# Fabric 1.0源代碼筆記 之 policy(背書策略)
## 1、policy概述
policy代碼分布在core/policy、core/policyprovider、common/policies目錄下。目錄結構如下:
* core/policy/policy.go,PolicyChecker接口定義及實現、PolicyCheckerFactory接口定義。* core/policyprovider/provider.go,PolicyChecker工廠默認實現。* common/policies目錄* policy.go,ChannelPolicyManagerGetter接口及實現。* implicitmeta_util.go,通道策略工具函數。
## 2、PolicyChecker工廠
### 2.1、PolicyCheckerFactory接口定義
```gotype PolicyCheckerFactory interface {NewPolicyChecker() PolicyChecker //構造PolicyChecker實例}
var pcFactory PolicyCheckerFactory //全局變量定義及賦值函數func RegisterPolicyCheckerFactory(f PolicyCheckerFactory) {pcFactory = f}//代碼在core/policy/policy.go```
### 2.2、PolicyCheckerFactory接口默認實現
```gotype defaultFactory struct{}
//構造policy.PolicyCheckerfunc (f *defaultFactory) NewPolicyChecker() policy.PolicyChecker {return policy.NewPolicyChecker(peer.NewChannelPolicyManagerGetter(), //&channelPolicyManagerGetter{}mgmt.GetLocalMSP(),mgmt.NewLocalMSPPrincipalGetter(),)}
//獲取policy.PolicyChecker,即調用policy.GetPolicyChecker()func GetPolicyChecker() policy.PolicyChecker
func init() { //初始化全局變量pcFactorypolicy.RegisterPolicyCheckerFactory(&defaultFactory{})}```
## 3、PolicyChecker接口定義及實現
### 3.1、PolicyChecker接口定義
```gotype PolicyChecker interface {CheckPolicy(channelID, policyName string, signedProp *pb.SignedProposal) errorCheckPolicyBySignedData(channelID, policyName string, sd []*common.SignedData) errorCheckPolicyNoChannel(policyName string, signedProp *pb.SignedProposal) error}//代碼在core/policy/policy.go```
### 3.2、PolicyChecker接口實現
PolicyChecker接口實現,即policyChecker結構體及方法。
```gotype policyChecker struct {channelPolicyManagerGetter policies.ChannelPolicyManagerGetter //通道策略管理器localMSP msp.IdentityDeserializer //身份principalGetter mgmt.MSPPrincipalGetter //委托人}
//構造policyCheckerfunc NewPolicyChecker(channelPolicyManagerGetter policies.ChannelPolicyManagerGetter, localMSP msp.IdentityDeserializer, principalGetter mgmt.MSPPrincipalGetter) PolicyChecker//檢查簽名提案是否符合通道策略func (p *policyChecker) CheckPolicy(channelID, policyName string, signedProp *pb.SignedProposal) errorfunc (p *policyChecker) CheckPolicyNoChannel(policyName string, signedProp *pb.SignedProposal) error//檢查簽名數據是否符合通道策略,獲取策略并調取policy.Evaluate(sd)func (p *policyChecker) CheckPolicyBySignedData(channelID, policyName string, sd []*common.SignedData) errorfunc GetPolicyChecker() PolicyChecker //pcFactory.NewPolicyChecker()//代碼在core/policy/policy.go```
func (p *policyChecker) CheckPolicy(channelID, policyName string, signedProp *pb.SignedProposal) error代碼如下:
```gofunc (p *policyChecker) CheckPolicy(channelID, policyName string, signedProp *pb.SignedProposal) error {if channelID == "" { //channelID為空,調取CheckPolicyNoChannel()return p.CheckPolicyNoChannel(policyName, signedProp)}policyManager, _ := p.channelPolicyManagerGetter.Manager(channelID)proposal, err := utils.GetProposal(signedProp.ProposalBytes) //獲取proposalheader, err := utils.GetHeader(proposal.Header)shdr, err := utils.GetSignatureHeader(header.SignatureHeader) //SignatureHeadersd := []*common.SignedData{&common.SignedData{Data: signedProp.ProposalBytes,Identity: shdr.Creator,Signature: signedProp.Signature,}}return p.CheckPolicyBySignedData(channelID, policyName, sd)}//代碼在core/policy/policy.go```
## 4、ChannelPolicyManagerGetter接口及實現
### 4.1、ChannelPolicyManagerGetter接口定義
```gotype ChannelPolicyManagerGetter interface {Manager(channelID string) (Manager, bool)}//代碼在common/policies/policy.go```
### 4.2、ChannelPolicyManagerGetter接口實現
ChannelPolicyManagerGetter接口實現,即ManagerImpl結構體及方法。
```gotype ManagerImpl struct {parent *ManagerImplbasePath stringfqPrefix stringproviders map[int32]Provider //type Provider interfaceconfig *policyConfig //type policyConfig structpendingConfig map[interface{}]*policyConfig //type policyConfig structpendingLock sync.RWMutexSuppressSanityLogMessages bool}
type Provider interface {NewPolicy(data []byte) (Policy, proto.Message, error)}
type policyConfig struct {policies map[string]Policy //type Policy interfacemanagers map[string]*ManagerImplimps []*implicitMetaPolicy}
type Policy interface {//對給定的簽名數據,按規則檢驗確認是否符合約定的條件Evaluate(signatureSet []*cb.SignedData) error}
//構造ManagerImplfunc NewManagerImpl(basePath string, providers map[int32]Provider) *ManagerImpl//獲取pm.basePathfunc (pm *ManagerImpl) BasePath() string//獲取pm.config.policies,即map[string]Policy中Key列表func (pm *ManagerImpl) PolicyNames() []string//獲取指定路徑的子管理器func (pm *ManagerImpl) Manager(path []string) (Manager, bool)//獲取pm.config.policies[relpath]//獲取Policyfunc (pm *ManagerImpl) GetPolicy(id string) (Policy, bool)func (pm *ManagerImpl) BeginPolicyProposals(tx interface{}, groups []string) ([]Proposer, error)func (pm *ManagerImpl) RollbackProposals(tx interface{})func (pm *ManagerImpl) PreCommit(tx interface{}) errorfunc (pm *ManagerImpl) CommitProposals(tx interface{})func (pm *ManagerImpl) ProposePolicy(tx interface{}, key string, configPolicy *cb.ConfigPolicy) (proto.Message, error)//代碼在common/policies/policy.go```
```gotype implicitMetaPolicy struct {conf *cb.ImplicitMetaPolicythreshold intsubPolicies []Policy}//代碼在common/policies/implicitmeta.go```
## 5、通道策略工具函數
```gotype ImplicitMetaPolicy_Rule int32const (ImplicitMetaPolicy_ANY ImplicitMetaPolicy_Rule = 0 //任意ImplicitMetaPolicy_ALL ImplicitMetaPolicy_Rule = 1 //所有ImplicitMetaPolicy_MAJORITY ImplicitMetaPolicy_Rule = 2 //大多數)//代碼在protos/common/policies.pb.go```
```go//構造cb.Policyfunc ImplicitMetaPolicyWithSubPolicy(subPolicyName string, rule cb.ImplicitMetaPolicy_Rule) *cb.ConfigPolicyfunc TemplateImplicitMetaPolicyWithSubPolicy(path []string, policyName string, subPolicyName string, rule cb.ImplicitMetaPolicy_Rule) *cb.ConfigGroup
//調取TemplateImplicitMetaPolicyWithSubPolicy(path, policyName, policyName, rule)func TemplateImplicitMetaPolicy(path []string, policyName string, rule cb.ImplicitMetaPolicy_Rule) *cb.ConfigGroup
//任意,TemplateImplicitMetaPolicy(path, policyName, cb.ImplicitMetaPolicy_ANY)func TemplateImplicitMetaAnyPolicy(path []string, policyName string) *cb.ConfigGroup
//所有,TemplateImplicitMetaPolicy(path, policyName, cb.ImplicitMetaPolicy_ALL)func TemplateImplicitMetaAllPolicy(path []string, policyName string) *cb.ConfigGroup
//大多數,TemplateImplicitMetaPolicy(path, policyName, cb.ImplicitMetaPolicy_MAJORITY)func TemplateImplicitMetaMajorityPolicy(path []string, policyName string) *cb.ConfigGroup//代碼在common/policies/implicitmeta_util.go```




網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機資料

區塊鏈技術交流QQ群:756146052??備注:CSDN

尹成學院微信:備注:CSDN






網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機資料

區塊鏈技術交流QQ群:756146052??備注:CSDN

尹成學院微信:備注:CSDN

總結

以上是生活随笔為你收集整理的Fabric 1.0源代码分析(39) policy(背书策略)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线国产一区二区 | 大胸奶汁乳流奶水出来h | 国产人妖av | 亚洲一区二区三区网站 | 涩涩视频在线观看 | 精品人妻一区二区三区免费看 | 精品国产乱码久久久久久郑州公司 | 人人澡人人透人人爽 | 亚洲无码乱码精品国产 | 日日爱夜夜操 | 女女互慰吃奶互揉调教捆绑 | 人妻精品一区二区三区 | 亚洲精品欧洲精品 | 日韩在线观看视频一区 | 一区二区三区毛片 | 老熟妇毛茸茸 | 伊人av影院 | 青青草原成人网 | 人妻毛片 | 三级性视频 | 精品二区视频 | 黄色一级片在线免费观看 | 国产欧美亚洲精品 | 欧美人与禽zoz0性3d | 最新91视频 | 精品午夜久久 | 啊av在线| 五月激情天 | 男人阁久久 | 污片网址| 久久在现| 欧美人日b| 日韩中文在线观看 | 大牛影视剧免费播放在线 | 美女扒开粉嫩的尿囗给男生桶 | 日韩人妻一区二区三区蜜桃视频 | 偷偷操不一样的99 | 西野翔夫の目の前で犯在线 | 国产又粗又深又猛又爽又在线观看 | 女人18毛片一区二区三区 | 国产成人麻豆精品午夜在线 | 亚洲精品福利在线 | 蜜桃99视频一区二区三区 | 男人天堂网站 | 欧美性生活网 | 成年人www | 日韩av一区二区三区在线 | 国产高清av在线 | wwww黄色片| 性欧美成人播放77777 | 精品三区视频 | 国产精品普通话 | 一区二区久久精品66国产精品 | 精品国产三级a∨在线 | 亚洲一区二区高清视频 | 2021国产精品视频 | 中文幕无线码中文字夫妻 | 一区二区三区麻豆 | 都市激情自拍 | 亚洲第一区视频 | 波多野结衣视频在线看 | 岳狂躁岳丰满少妇大叫 | 视频在线播 | 特黄视频免费看 | 一本一道久久a久久精品蜜桃 | 老司机午夜在线 | 欧美高清69hd| 伦av综合一区 | 寡妇一级片 | 看黄色大片 | 国产视频一区在线 | 色婷婷av一区二区三区gif | 色av一区| 久久99久久99 | 亚洲女人的天堂 | 亚洲欧美乱日韩乱国产 | 国产精品成人av性教育 | 蜜臀久久99精品久久久久宅男 | 无码av天堂一区二区三区 | 福利视频免费观看 | 国产一级一级国产 | mm131丰满少妇人体欣赏图 | 69免费视频| 欧美亚洲精品在线观看 | 欧美久草 | 亚洲免费小视频 | 肥婆大荫蒂欧美另类 | 九九热国产在线 | 国产亚洲精品女人久久久久久 | 久久日本精品字幕区二区 | 片集网 | 免费久草视频 | 国产一级在线视频 | 影音先锋中文字幕一区二区 | 国产ts丝袜人妖系列视频 | 欧美人xxxx| 不卡影院一区二区 | 欧美大片在线 | aaaa视频 |