@@ -46,6 +46,7 @@ type FabricSDK struct {
4646 stateStore apifabclient.KeyValueStore
4747 cryptoSuite bccsp.BCCSP // TODO - maybe copy this interface into the API package
4848 discoveryProvider apifabclient.DiscoveryProvider
49+ selectionProvider apifabclient.SelectionProvider
4950 signingManager apifabclient.SigningManager
5051}
5152
@@ -55,6 +56,11 @@ type ChannelClientOpts struct {
5556 ConfigProvider apiconfig.Config
5657}
5758
59+ // ProviderInit interface allows for initializing providers
60+ type ProviderInit interface {
61+ Initialize (sdk * FabricSDK ) error
62+ }
63+
5864// NewSDK initializes default clients
5965func NewSDK (options Options ) (* FabricSDK , error ) {
6066 // Construct SDK opts from the quick access options in setup
@@ -98,19 +104,32 @@ func NewSDK(options Options) (*FabricSDK, error) {
98104 }
99105 sdk .stateStore = store
100106
107+ // Initialize Signing Manager
108+ signingMgr , err := sdk .ProviderFactory .NewSigningManager (sdk .CryptoSuiteProvider (), sdk .configProvider )
109+ if err != nil {
110+ return nil , errors .WithMessage (err , "failed to initialize signing manager" )
111+ }
112+ sdk .signingManager = signingMgr
113+
101114 // Initialize discovery provider
102115 discoveryProvider , err := sdk .ProviderFactory .NewDiscoveryProvider (sdk .configProvider )
103116 if err != nil {
104117 return nil , errors .WithMessage (err , "failed to initialize discovery provider" )
105118 }
119+ if pi , ok := discoveryProvider .(ProviderInit ); ok {
120+ pi .Initialize (& sdk )
121+ }
106122 sdk .discoveryProvider = discoveryProvider
107123
108- // Initialize Signing Manager
109- signingMgr , err := sdk .ProviderFactory .NewSigningManager ( sdk . CryptoSuiteProvider (), sdk .configProvider )
124+ // Initialize selection provider (for selecting endorsing peers)
125+ selectionProvider , err := sdk .ProviderFactory .NewSelectionProvider ( sdk .configProvider )
110126 if err != nil {
111- return nil , errors .WithMessage (err , "failed to initialize signing manager " )
127+ return nil , errors .WithMessage (err , "failed to initialize selection provider " )
112128 }
113- sdk .signingManager = signingMgr
129+ if pi , ok := selectionProvider .(ProviderInit ); ok {
130+ pi .Initialize (& sdk )
131+ }
132+ sdk .selectionProvider = selectionProvider
114133
115134 return & sdk , nil
116135}
@@ -135,6 +154,11 @@ func (sdk *FabricSDK) DiscoveryProvider() apifabclient.DiscoveryProvider {
135154 return sdk .discoveryProvider
136155}
137156
157+ // SelectionProvider returns selection provider
158+ func (sdk * FabricSDK ) SelectionProvider () apifabclient.SelectionProvider {
159+ return sdk .selectionProvider
160+ }
161+
138162// SigningManager returns signing manager
139163func (sdk * FabricSDK ) SigningManager () apifabclient.SigningManager {
140164 return sdk .signingManager
@@ -165,7 +189,7 @@ func (sdk *FabricSDK) NewSystemClient(s context.Session) (apifabclient.FabricCli
165189}
166190
167191// NewChannelClient returns a new client for a channel
168- func (sdk * FabricSDK ) NewChannelClient (channelName string , userName string ) (apitxn.ChannelClient , error ) {
192+ func (sdk * FabricSDK ) NewChannelClient (channelID string , userName string ) (apitxn.ChannelClient , error ) {
169193
170194 // Read default org name from configuration
171195 client , err := sdk .configProvider .Client ()
@@ -179,11 +203,11 @@ func (sdk *FabricSDK) NewChannelClient(channelName string, userName string) (api
179203
180204 opt := & ChannelClientOpts {OrgName : client .Organization , ConfigProvider : sdk .configProvider }
181205
182- return sdk .NewChannelClientWithOpts (channelName , userName , opt )
206+ return sdk .NewChannelClientWithOpts (channelID , userName , opt )
183207}
184208
185209// NewChannelClientWithOpts returns a new client for a channel (user has to be pre-enrolled)
186- func (sdk * FabricSDK ) NewChannelClientWithOpts (channelName string , userName string , opt * ChannelClientOpts ) (apitxn.ChannelClient , error ) {
210+ func (sdk * FabricSDK ) NewChannelClientWithOpts (channelID string , userName string , opt * ChannelClientOpts ) (apitxn.ChannelClient , error ) {
187211
188212 if opt == nil || opt .OrgName == "" {
189213 return nil , errors .New ("organization name must be provided" )
@@ -199,7 +223,7 @@ func (sdk *FabricSDK) NewChannelClientWithOpts(channelName string, userName stri
199223 configProvider = opt .ConfigProvider
200224 }
201225
202- client , err := sdk .SessionFactory .NewChannelClient (sdk , session , configProvider , channelName )
226+ client , err := sdk .SessionFactory .NewChannelClient (sdk , session , configProvider , channelID )
203227 if err != nil {
204228 return nil , errors .WithMessage (err , "failed to created new channel client" )
205229 }
0 commit comments