Skip to content

Commit 1ba5fc1

Browse files
Removed factory registration from topology
Signed-off-by: Alexandros Filios <[email protected]>
1 parent 6b1abc3 commit 1ba5fc1

File tree

56 files changed

+1167
-325
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1167
-325
lines changed

Diff for: integration/fabric/atsa/chaincode/atsa_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/atsa/chaincode"
1414
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/atsa/chaincode/views"
1515
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fsc"
16-
fabricsdk "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/sdk/dig"
1716
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
1817
. "github.com/onsi/ginkgo/v2"
1918
. "github.com/onsi/gomega"
@@ -41,7 +40,7 @@ type TestSuite struct {
4140

4241
func NewTestSuite(commType fsc.P2PCommunicationType, nodeOpts *integration.ReplicationOptions) *TestSuite {
4342
return &TestSuite{integration.NewTestSuite(func() (*integration.Infrastructure, error) {
44-
return integration.Generate(StartPort(), true, chaincode.Topology(&fabricsdk.SDK{}, commType, nodeOpts)...)
43+
return integration.Generate(StartPort(), true, chaincode.Topology(&chaincode.SDK{}, commType, nodeOpts)...)
4544
})}
4645
}
4746

Diff for: integration/fabric/atsa/chaincode/sdk.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package chaincode
8+
9+
import (
10+
"errors"
11+
12+
"github.com/hyperledger-labs/fabric-smart-client/pkg/node"
13+
digutils "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/dig"
14+
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
15+
fabricsdk "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/sdk/dig"
16+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/core/id"
17+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
18+
view3 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/server/view"
19+
"go.opentelemetry.io/otel/trace"
20+
)
21+
22+
type SDK struct {
23+
*fabricsdk.SDK
24+
}
25+
26+
func NewSDK(registry node.Registry) *SDK {
27+
return &SDK{SDK: fabricsdk.NewSDK(registry)}
28+
}
29+
30+
func (p *SDK) Install() error {
31+
if err := p.SDK.Install(); err != nil {
32+
return err
33+
}
34+
35+
return errors.Join(
36+
digutils.Register[trace.TracerProvider](p.Container()),
37+
digutils.Register[driver.EndpointService](p.Container()),
38+
digutils.Register[view3.IdentityProvider](p.Container()),
39+
digutils.Register[node.ViewManager](p.Container()), // Need to add it as a field in the node
40+
digutils.Register[id.SigService](p.Container()),
41+
digutils.Register[*fabric.NetworkServiceProvider](p.Container()), // GetFabricNetworkService is used by many components
42+
)
43+
}

Diff for: integration/fabric/atsa/fsc/sdk.go

+11
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,14 @@ import (
1111

1212
"github.com/hyperledger-labs/fabric-smart-client/pkg/node"
1313
digutils "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/dig"
14+
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
1415
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core"
1516
fabricsdk "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/sdk/dig"
1617
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
18+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/core/id"
19+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
20+
view3 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/server/view"
21+
"go.opentelemetry.io/otel/trace"
1722
)
1823

1924
type SDK struct {
@@ -32,5 +37,11 @@ func (p *SDK) Install() error {
3237
return errors.Join(
3338
digutils.Register[state.VaultService](p.Container()),
3439
digutils.Register[*core.FSNProvider](p.Container()),
40+
digutils.Register[trace.TracerProvider](p.Container()),
41+
digutils.Register[driver.EndpointService](p.Container()),
42+
digutils.Register[view3.IdentityProvider](p.Container()),
43+
digutils.Register[node.ViewManager](p.Container()), // Need to add it as a field in the node
44+
digutils.Register[id.SigService](p.Container()),
45+
digutils.Register[*fabric.NetworkServiceProvider](p.Container()), // GetFabricNetworkService is used by many components
3546
)
3647
}

Diff for: integration/fabric/atsa/fsc/views/agree.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"encoding/json"
1111

1212
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/atsa/fsc/states"
13+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
1314
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
1415
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
1516
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/assert"
@@ -28,7 +29,7 @@ type AgreeToSellView struct {
2829

2930
func (a *AgreeToSellView) Call(context view.Context) (interface{}, error) {
3031
// The asset owner creates a new transaction, and
31-
tx, err := state.NewAnonymousTransaction(context)
32+
tx, err := state.NewAnonymousTransaction(utils.MustGet(fabric.GetNetworkServiceProvider(context)), context)
3233
assert.NoError(err, "failed creating transaction")
3334

3435
// Sets the namespace where the state should appear, and
@@ -94,7 +95,7 @@ type AgreeToBuyView struct {
9495

9596
func (a *AgreeToBuyView) Call(context view.Context) (interface{}, error) {
9697
// Prepare transaction
97-
tx, err := state.NewAnonymousTransaction(context)
98+
tx, err := state.NewAnonymousTransaction(utils.MustGet(fabric.GetNetworkServiceProvider(context)), context)
9899
assert.NoError(err, "failed creating transaction")
99100
tx.SetNamespace("asset_transfer")
100101
fns, err := fabric.GetDefaultFNS(context)

Diff for: integration/fabric/atsa/fsc/views/issue.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"encoding/json"
1111

1212
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/atsa/fsc/states"
13+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
1314
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
1415
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
1516
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/assert"
@@ -36,7 +37,7 @@ func (f *IssueView) Call(context view.Context) (interface{}, error) {
3637
assert.NoError(err, "failed getting recipient identity")
3738

3839
// The issuer creates a new transaction
39-
tx, err := state.NewTransaction(context)
40+
tx, err := state.NewTransaction(utils.MustGet(fabric.GetNetworkServiceProvider(context)), context)
4041
assert.NoError(err, "failed creating transaction")
4142

4243
// Sets the namespace where the state should be stored

Diff for: integration/fabric/atsa/fsc/views/transfer.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package views
99
import (
1010
"encoding/json"
1111

12+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
1213
"github.com/pkg/errors"
1314

1415
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/atsa/fsc/states"
@@ -35,7 +36,7 @@ func (f *TransferView) Call(context view.Context) (interface{}, error) {
3536
assert.NoError(err, "failed getting recipient identity")
3637

3738
// Prepare transaction
38-
tx, err := state.NewAnonymousTransaction(context)
39+
tx, err := state.NewAnonymousTransaction(utils.MustGet(fabric.GetNetworkServiceProvider(context)), context)
3940
assert.NoError(err, "failed creating transaction")
4041
tx.SetNamespace("asset_transfer")
4142

Diff for: integration/fabric/common/views/finality.go

+4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ func (a *FinalityView) Call(context view.Context) (interface{}, error) {
3131
return nil, err
3232
}
3333

34+
func NewFinalityViewFactory() *FinalityViewFactory {
35+
return &FinalityViewFactory{}
36+
}
37+
3438
type FinalityViewFactory struct{}
3539

3640
func (c *FinalityViewFactory) NewView(in []byte) (view.View, error) {

Diff for: integration/fabric/events/chaincode/events_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/events/chaincode/views"
1515
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fabric"
1616
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fsc"
17-
fabricsdk "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/sdk/dig"
1817
. "github.com/onsi/ginkgo/v2"
1918
. "github.com/onsi/gomega"
2019
)
@@ -47,7 +46,7 @@ type TestSuite struct {
4746

4847
func NewTestSuite(commType fsc.P2PCommunicationType, nodeOpts *integration.ReplicationOptions) *TestSuite {
4948
return &TestSuite{integration.NewTestSuite(func() (*integration.Infrastructure, error) {
50-
return integration.Generate(StartPort(), true, chaincode.Topology(&fabricsdk.SDK{}, commType, nodeOpts)...)
49+
return integration.Generate(StartPort(), true, chaincode.Topology(&chaincode.SDK{}, commType, nodeOpts)...)
5150
})}
5251
}
5352

Diff for: integration/fabric/events/chaincode/sdk.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package chaincode
8+
9+
import (
10+
"errors"
11+
12+
"github.com/hyperledger-labs/fabric-smart-client/pkg/node"
13+
digutils "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/dig"
14+
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
15+
fabricsdk "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/sdk/dig"
16+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/core/id"
17+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
18+
view3 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/server/view"
19+
"go.opentelemetry.io/otel/trace"
20+
)
21+
22+
type SDK struct {
23+
*fabricsdk.SDK
24+
}
25+
26+
func NewSDK(registry node.Registry) *SDK {
27+
return &SDK{SDK: fabricsdk.NewSDK(registry)}
28+
}
29+
30+
func (p *SDK) Install() error {
31+
if err := p.SDK.Install(); err != nil {
32+
return err
33+
}
34+
35+
return errors.Join(
36+
digutils.Register[trace.TracerProvider](p.Container()),
37+
digutils.Register[driver.EndpointService](p.Container()),
38+
digutils.Register[view3.IdentityProvider](p.Container()),
39+
digutils.Register[node.ViewManager](p.Container()), // Need to add it as a field in the node
40+
digutils.Register[id.SigService](p.Container()),
41+
digutils.Register[*fabric.NetworkServiceProvider](p.Container()), // GetFabricNetworkService is used by many components
42+
)
43+
}

Diff for: integration/fabric/iou/iou_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ func (s *TestSuite) TestSucceeded() {
8282
iou.CheckState(s.II, "borrower", iouState, 5)
8383
iou.CheckState(s.II, "lender", iouState, 5)
8484

85-
iou.CheckLocalMetrics(s.II, "borrower", "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser/collectEndorsementsView")
86-
iou.CheckPrometheusMetrics(s.II, "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser/collectEndorsementsView")
85+
iou.CheckLocalMetrics(s.II, "borrower", "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser/CollectEndorsementsView")
86+
iou.CheckPrometheusMetrics(s.II, "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser/CollectEndorsementsView")
8787
}
8888

8989
func (s *TestSuite) TestSucceededWithReplicas() {

Diff for: integration/fabric/iou/sdk.go

+76-5
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,98 @@ package iou
99
import (
1010
"errors"
1111

12+
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/iou/views"
1213
"github.com/hyperledger-labs/fabric-smart-client/pkg/node"
1314
dig2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/sdk/dig"
14-
digutils "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/dig"
1515
sdk "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/sdk/dig"
16+
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser"
1617
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state"
18+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/sdk/vfsdk"
1719
)
1820

1921
type SDK struct {
2022
dig2.SDK
2123
}
2224

2325
func NewSDK(registry node.Registry) *SDK {
24-
return &SDK{SDK: sdk.NewSDK(registry)}
26+
return &SDK{SDK: sdk.NewFrom(vfsdk.NewSDK(registry))}
2527
}
2628

2729
func (p *SDK) Install() error {
28-
if err := p.SDK.Install(); err != nil {
30+
err := errors.Join(
31+
p.Container().Provide(endorser.NewEndorseViewFactory),
32+
p.Container().Provide(endorser.NewCollectEndorsementsViewFactory),
33+
p.Container().Provide(state.NewRespondExchangeRecipientIdentitiesViewFactory),
34+
p.Container().Provide(state.NewExchangeRecipientIdentitiesViewFactory),
35+
p.Container().Provide(endorser.NewOrderingAndFinalityViewFactory),
36+
p.Container().Provide(state.NewReceiveTransactionViewFactory),
37+
p.Container().Provide(state.NewViewFactory),
38+
)
39+
if err != nil {
2940
return err
3041
}
3142

32-
return errors.Join(
33-
digutils.Register[state.VaultService](p.Container()),
43+
return p.SDK.Install()
44+
}
45+
46+
func NewApproverSDK(registry node.Registry) *ApproverSDK {
47+
return &ApproverSDK{SDK: NewSDK(registry)}
48+
}
49+
50+
type ApproverSDK struct {
51+
*SDK
52+
}
53+
54+
func (p *ApproverSDK) Install() error {
55+
err := errors.Join(
56+
p.Container().Provide(views.NewApproverViewFactory, vfsdk.WithInitiators(&views.CreateIOUView{}, &views.UpdateIOUView{})),
57+
p.Container().Provide(views.NewApproverInitViewFactory, vfsdk.WithFactoryId("init")),
58+
p.Container().Provide(endorser.NewFinalityViewFactory, vfsdk.WithFactoryId("finality")),
3459
)
60+
if err != nil {
61+
return err
62+
}
63+
return p.SDK.Install()
64+
}
65+
66+
func NewBorrowerSDK(registry node.Registry) *BorrowerSDK {
67+
return &BorrowerSDK{SDK: NewSDK(registry)}
68+
}
69+
70+
type BorrowerSDK struct {
71+
*SDK
72+
}
73+
74+
func (p *BorrowerSDK) Install() error {
75+
err := errors.Join(
76+
p.Container().Provide(views.NewCreateIOUViewFactory, vfsdk.WithFactoryId("create")),
77+
p.Container().Provide(views.NewUpdateIOUViewFactory, vfsdk.WithFactoryId("update")),
78+
p.Container().Provide(views.NewQueryViewFactory, vfsdk.WithFactoryId("query")),
79+
p.Container().Provide(endorser.NewFinalityViewFactory, vfsdk.WithFactoryId("finality")),
80+
)
81+
if err != nil {
82+
return err
83+
}
84+
return p.SDK.Install()
85+
}
86+
87+
func NewLenderSDK(registry node.Registry) *LenderSDK {
88+
return &LenderSDK{SDK: NewSDK(registry)}
89+
}
90+
91+
type LenderSDK struct {
92+
*SDK
93+
}
94+
95+
func (p *LenderSDK) Install() error {
96+
err := errors.Join(
97+
p.Container().Provide(views.NewCreateIOUResponderViewFactory, vfsdk.WithInitiators(&views.CreateIOUView{})),
98+
p.Container().Provide(views.NewUpdateIOUResponderViewFactory, vfsdk.WithInitiators(&views.UpdateIOUView{})),
99+
p.Container().Provide(views.NewQueryViewFactory, vfsdk.WithFactoryId("query")),
100+
p.Container().Provide(endorser.NewFinalityViewFactory, vfsdk.WithFactoryId("finality")),
101+
)
102+
if err != nil {
103+
return err
104+
}
105+
return p.SDK.Install()
35106
}

Diff for: integration/fabric/iou/topology.go

+4-21
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ package iou
88

99
import (
1010
"github.com/hyperledger-labs/fabric-smart-client/integration"
11-
cviews "github.com/hyperledger-labs/fabric-smart-client/integration/fabric/common/views"
12-
"github.com/hyperledger-labs/fabric-smart-client/integration/fabric/iou/views"
1311
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/api"
1412
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fabric"
1513
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fsc"
@@ -50,48 +48,33 @@ func Topology(opts *Opts) []api.Topology {
5048
// Therefore, the approver is an endorser of the Fabric namespace we defined above.
5149
AddOptions(fabric.WithOrganization("Org1")).
5250
AddOptions(opts.ReplicationOpts.For("approver1")...).
53-
RegisterResponder(&views.ApproverView{}, &views.CreateIOUView{}).
54-
RegisterResponder(&views.ApproverView{}, &views.UpdateIOUView{}).
55-
RegisterViewFactory("init", &views.ApproverInitViewFactory{}).
56-
RegisterViewFactory("finality", &cviews.FinalityViewFactory{})
51+
AddSDK(&ApproverSDK{})
5752

5853
// Add another approver as well
5954
fscTopology.AddNodeByName("approver2").
6055
// This option equips the approver's FSC node with an identity belonging to Org1.
6156
// Therefore, the approver is an endorser of the Fabric namespace we defined above.
6257
AddOptions(fabric.WithOrganization("Org1")).
6358
AddOptions(opts.ReplicationOpts.For("approver2")...).
64-
RegisterResponder(&views.ApproverView{}, &views.CreateIOUView{}).
65-
RegisterResponder(&views.ApproverView{}, &views.UpdateIOUView{}).
66-
RegisterViewFactory("init", &views.ApproverInitViewFactory{}).
67-
RegisterViewFactory("finality", &cviews.FinalityViewFactory{})
59+
AddSDK(&ApproverSDK{})
6860

6961
// Add the borrower's FSC node
7062
fscTopology.AddNodeByName("borrower").
7163
AddOptions(fabric.WithOrganization("Org2")).
7264
AddOptions(opts.ReplicationOpts.For("borrower")...).
73-
RegisterViewFactory("create", &views.CreateIOUViewFactory{}).
74-
RegisterViewFactory("update", &views.UpdateIOUViewFactory{}).
75-
RegisterViewFactory("query", &views.QueryViewFactory{}).
76-
RegisterViewFactory("finality", &cviews.FinalityViewFactory{})
65+
AddSDK(&BorrowerSDK{})
7766

7867
// Add the lender's FSC node
7968
fscTopology.AddNodeByName("lender").
8069
AddOptions(fabric.WithOrganization("Org3")).
8170
AddOptions(opts.ReplicationOpts.For("lender")...).
82-
RegisterResponder(&views.CreateIOUResponderView{}, &views.CreateIOUView{}).
83-
RegisterResponder(&views.UpdateIOUResponderView{}, &views.UpdateIOUView{}).
84-
RegisterViewFactory("query", &views.QueryViewFactory{}).
85-
RegisterViewFactory("finality", &cviews.FinalityViewFactory{})
71+
AddSDK(&LenderSDK{})
8672

8773
// Monitoring
8874
monitoringTopology := monitoring.NewTopology()
8975
monitoringTopology.EnablePrometheusGrafana()
9076
monitoringTopology.EnableOPTL()
9177

92-
// Add Fabric SDK to FSC Nodes
93-
fscTopology.AddSDK(opts.SDK)
94-
9578
return []api.Topology{
9679
fabricTopology,
9780
fscTopology,

0 commit comments

Comments
 (0)