Skip to content

Commit

Permalink
Extracted default PP fetcher to injectable dependency
Browse files Browse the repository at this point in the history
Signed-off-by: Alexandros Filios <alexandros.filios@ibm.com>
  • Loading branch information
alexandrosfilios committed Oct 3, 2024
1 parent a130f1f commit 9c05d0c
Show file tree
Hide file tree
Showing 8 changed files with 149 additions and 58 deletions.
8 changes: 8 additions & 0 deletions token/driver/publicparams.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ SPDX-License-Identifier: Apache-2.0

package driver

import "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"

// SerializedPublicParameters is the serialized form of PublicParameters.
type SerializedPublicParameters struct {
// Identifier is the unique identifier of this public parameters.
Expand All @@ -22,6 +24,12 @@ func (pp *SerializedPublicParameters) Deserialize(raw []byte) error {
return nil
}

// DefaultPublicParamsFetcher models a public parameters fetcher per namespace.
type DefaultPublicParamsFetcher interface {
// Fetch fetches the public parameters from a repository for a given namespace.
Fetch(network driver.Network, channel driver.Channel, namespace driver.Namespace) ([]byte, error)
}

// PublicParamsFetcher models a public parameters fetcher.
type PublicParamsFetcher interface {
// Fetch fetches the public parameters from a repository.
Expand Down
4 changes: 4 additions & 0 deletions token/sdk/dig/sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ import (
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common"
driver3 "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/driver"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/fabric"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/orion"
sdriver "github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/driver"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/sherdlock"
selector "github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/simple"
Expand Down Expand Up @@ -141,6 +143,8 @@ func (p *SDK) Install() error {
p.Container().Provide(func(dbManager *tokendb.Manager, notifierManager *tokendb.NotifierManager, metricsProvider metrics.Provider) sherdlock.FetcherProvider {
return sherdlock.NewFetcherProvider(dbManager, notifierManager, metricsProvider, sherdlock.Mixed)
}),
p.Container().Provide(fabric.NewChaincodePublicParamsFetcher, dig.As(new(fabric.DefaultPublicParamsFetcher))),
p.Container().Provide(orion.NewCustodianPublicParamsFetcher, dig.As(new(orion.DefaultPublicParamsFetcher))),
)
if err != nil {
return errors.WithMessagef(err, "failed setting up dig container")
Expand Down
47 changes: 27 additions & 20 deletions token/services/network/fabric/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/hyperledger-labs/fabric-smart-client/platform/view"
driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
"github.com/hyperledger-labs/fabric-token-sdk/token"
driver3 "github.com/hyperledger-labs/fabric-token-sdk/token/driver"
vault2 "github.com/hyperledger-labs/fabric-token-sdk/token/sdk/vault"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/config"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common"
Expand All @@ -22,17 +23,20 @@ import (
"go.opentelemetry.io/otel/trace"
)

type DefaultPublicParamsFetcher driver3.DefaultPublicParamsFetcher

type Driver struct {
fnsProvider *fabric.NetworkServiceProvider
vaultProvider vault.Provider
tokensManager *tokens.Manager
configService *config.Service
viewManager *view.Manager
viewRegistry driver2.Registry
filterProvider *common.AcceptTxInDBFilterProvider
tmsProvider *token.ManagementServiceProvider
identityProvider driver2.IdentityProvider
tracerProvider trace.TracerProvider
fnsProvider *fabric.NetworkServiceProvider
vaultProvider vault.Provider
tokensManager *tokens.Manager
configService *config.Service
viewManager *view.Manager
viewRegistry driver2.Registry
filterProvider *common.AcceptTxInDBFilterProvider
tmsProvider *token.ManagementServiceProvider
identityProvider driver2.IdentityProvider
tracerProvider trace.TracerProvider
defaultPublicParamsFetcher driver3.DefaultPublicParamsFetcher
}

func NewDriver(
Expand All @@ -46,20 +50,22 @@ func NewDriver(
tmsProvider *token.ManagementServiceProvider,
tracerProvider trace.TracerProvider,
identityProvider driver2.IdentityProvider,
defaultPublicParamsFetcher DefaultPublicParamsFetcher,
) driver.NamedDriver {
return driver.NamedDriver{
Name: "fabric",
Driver: &Driver{
fnsProvider: fnsProvider,
vaultProvider: vaultProvider,
tokensManager: tokensManager,
configService: configService,
viewManager: viewManager,
viewRegistry: viewRegistry,
filterProvider: filterProvider,
tmsProvider: tmsProvider,
identityProvider: identityProvider,
tracerProvider: tracerProvider,
fnsProvider: fnsProvider,
vaultProvider: vaultProvider,
tokensManager: tokensManager,
configService: configService,
viewManager: viewManager,
viewRegistry: viewRegistry,
filterProvider: filterProvider,
tmsProvider: tmsProvider,
identityProvider: identityProvider,
tracerProvider: tracerProvider,
defaultPublicParamsFetcher: defaultPublicParamsFetcher,
},
}
}
Expand Down Expand Up @@ -92,5 +98,6 @@ func (d *Driver) New(network, channel string) (driver.Network, error) {
d.tmsProvider,
),
d.tracerProvider,
d.defaultPublicParamsFetcher,
), nil
}
22 changes: 8 additions & 14 deletions token/services/network/fabric/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/tracing"
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
token2 "github.com/hyperledger-labs/fabric-token-sdk/token"
driver3 "github.com/hyperledger-labs/fabric-token-sdk/token/driver"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
common2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common/rws/keys"
Expand Down Expand Up @@ -158,9 +159,10 @@ type Network struct {
tokensProvider *tokens2.Manager
finalityTracer trace.Tracer

vaultLazyCache lazy.Provider[string, driver.Vault]
tokenVaultLazyCache lazy.Provider[string, driver.TokenVault]
subscribers *events.Subscribers
vaultLazyCache lazy.Provider[string, driver.Vault]
tokenVaultLazyCache lazy.Provider[string, driver.TokenVault]
subscribers *events.Subscribers
defaultPublicParamsFetcher driver3.DefaultPublicParamsFetcher

endorsementServiceProvider *endorsement.ServiceProvider
}
Expand All @@ -176,6 +178,7 @@ func NewNetwork(
tmsProvider *token2.ManagementServiceProvider,
endorsementServiceProvider *endorsement.ServiceProvider,
tracerProvider trace.TracerProvider,
defaultPublicParamsFetcher driver3.DefaultPublicParamsFetcher,
) *Network {
loader := &loader{
newVault: newVault,
Expand All @@ -195,6 +198,7 @@ func NewNetwork(
vaultLazyCache: lazy.NewProvider(loader.loadVault),
tokenVaultLazyCache: lazy.NewProvider(loader.loadTokenVault),
subscribers: events.NewSubscribers(),
defaultPublicParamsFetcher: defaultPublicParamsFetcher,
endorsementServiceProvider: endorsementServiceProvider,
finalityTracer: tracerProvider.Tracer("finality_listener", tracing.WithMetricsOpts(tracing.MetricsOpts{
Namespace: "tokensdk_fabric",
Expand Down Expand Up @@ -359,17 +363,7 @@ func (n *Network) ComputeTxID(id *driver.TxID) string {
}

func (n *Network) FetchPublicParameters(namespace string) ([]byte, error) {
ppBoxed, err := n.viewManager.InitiateView(
chaincode.NewQueryView(
namespace,
QueryPublicParamsFunction,
).WithNetwork(n.Name()).WithChannel(n.Channel()),
context.TODO(),
)
if err != nil {
return nil, err
}
return ppBoxed.([]byte), nil
return n.defaultPublicParamsFetcher.Fetch(n.Name(), n.Channel(), namespace)
}

func (n *Network) QueryTokens(context view.Context, namespace string, IDs []*token.ID) ([][]byte, error) {
Expand Down
37 changes: 37 additions & 0 deletions token/services/network/fabric/ppfetcher.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package fabric

import (
"context"

driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/chaincode"
"github.com/hyperledger-labs/fabric-smart-client/platform/view"
)

func NewChaincodePublicParamsFetcher(viewManager *view.Manager) *chaincodePublicParamsFetcher {
return &chaincodePublicParamsFetcher{viewManager: viewManager}
}

type chaincodePublicParamsFetcher struct {
viewManager ViewManager
}

func (f *chaincodePublicParamsFetcher) Fetch(network driver2.Network, channel driver2.Channel, namespace driver2.Namespace) ([]byte, error) {
ppBoxed, err := f.viewManager.InitiateView(
chaincode.NewQueryView(
namespace,
QueryPublicParamsFunction,
).WithNetwork(network).WithChannel(channel),
context.TODO(),
)
if err != nil {
return nil, err
}
return ppBoxed.([]byte), nil
}
47 changes: 27 additions & 20 deletions token/services/network/orion/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/cache/secondcache"
view2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/server/view"
"github.com/hyperledger-labs/fabric-token-sdk/token"
driver3 "github.com/hyperledger-labs/fabric-token-sdk/token/driver"
vault2 "github.com/hyperledger-labs/fabric-token-sdk/token/sdk/vault"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/config"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common"
Expand All @@ -22,6 +23,8 @@ import (
"go.opentelemetry.io/otel/trace"
)

type DefaultPublicParamsFetcher driver3.DefaultPublicParamsFetcher

func NewDriver(
onsProvider *orion.NetworkServiceProvider,
viewRegistry driver2.Registry,
Expand All @@ -32,36 +35,39 @@ func NewDriver(
identityProvider view2.IdentityProvider,
filterProvider *common.AcceptTxInDBFilterProvider,
tmsProvider *token.ManagementServiceProvider,
defaultPublicParamsFetcher DefaultPublicParamsFetcher,
tracerProvider trace.TracerProvider,
) driver.NamedDriver {
return driver.NamedDriver{
Name: "orion",
Driver: &Driver{
onsProvider: onsProvider,
viewRegistry: viewRegistry,
viewManager: viewManager,
vaultProvider: vaultProvider,
configProvider: configProvider,
configService: configService,
identityProvider: identityProvider,
filterProvider: filterProvider,
tmsProvider: tmsProvider,
tracerProvider: tracerProvider,
onsProvider: onsProvider,
viewRegistry: viewRegistry,
viewManager: viewManager,
vaultProvider: vaultProvider,
configProvider: configProvider,
configService: configService,
identityProvider: identityProvider,
filterProvider: filterProvider,
tmsProvider: tmsProvider,
defaultPublicParamsFetcher: defaultPublicParamsFetcher,
tracerProvider: tracerProvider,
},
}
}

type Driver struct {
onsProvider *orion.NetworkServiceProvider
viewRegistry driver2.Registry
viewManager *view.Manager
vaultProvider vault.Provider
configProvider configProvider
configService *config.Service
identityProvider view2.IdentityProvider
filterProvider *common.AcceptTxInDBFilterProvider
tmsProvider *token.ManagementServiceProvider
tracerProvider trace.TracerProvider
onsProvider *orion.NetworkServiceProvider
viewRegistry driver2.Registry
viewManager *view.Manager
vaultProvider vault.Provider
configProvider configProvider
configService *config.Service
identityProvider view2.IdentityProvider
filterProvider *common.AcceptTxInDBFilterProvider
tmsProvider *token.ManagementServiceProvider
defaultPublicParamsFetcher driver3.DefaultPublicParamsFetcher
tracerProvider trace.TracerProvider
}

func (d *Driver) New(network, _ string) (driver.Network, error) {
Expand Down Expand Up @@ -92,6 +98,7 @@ func (d *Driver) New(network, _ string) (driver.Network, error) {
d.configService,
d.filterProvider,
dbManager,
d.defaultPublicParamsFetcher,
d.tracerProvider,
), nil
}
12 changes: 8 additions & 4 deletions token/services/network/orion/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/tracing"
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
token2 "github.com/hyperledger-labs/fabric-token-sdk/token"
driver2 "github.com/hyperledger-labs/fabric-token-sdk/token/driver"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db"
common2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common/rws/keys"
Expand Down Expand Up @@ -44,10 +45,11 @@ type Network struct {
filterProvider common2.TransactionFilterProvider[*common2.AcceptTxInDBsFilter]
finalityTracer trace.Tracer

vaultLazyCache lazy.Provider[string, driver.Vault]
tokenVaultLazyCache lazy.Provider[string, driver.TokenVault]
subscribers *events.Subscribers
dbManager *DBManager
vaultLazyCache lazy.Provider[string, driver.Vault]
tokenVaultLazyCache lazy.Provider[string, driver.TokenVault]
subscribers *events.Subscribers
dbManager *DBManager
defaultPublicParamsFetcher driver2.DefaultPublicParamsFetcher
}

func NewNetwork(
Expand All @@ -59,6 +61,7 @@ func NewNetwork(
nsFinder common2.Configuration,
filterProvider common2.TransactionFilterProvider[*common2.AcceptTxInDBsFilter],
dbManager *DBManager,
defaultPublicParamsFetcher driver2.DefaultPublicParamsFetcher,
tracerProvider trace.TracerProvider,
) *Network {
loader := &loader{
Expand All @@ -77,6 +80,7 @@ func NewNetwork(
vaultLazyCache: lazy.NewProvider(loader.loadVault),
tokenVaultLazyCache: lazy.NewProvider(loader.loadTokenVault),
subscribers: events.NewSubscribers(), ledger: &ledger{network: n.Name(), viewManager: viewManager, dbManager: dbManager},
defaultPublicParamsFetcher: defaultPublicParamsFetcher,
finalityTracer: tracerProvider.Tracer("finality_listener", tracing.WithMetricsOpts(tracing.MetricsOpts{
Namespace: "tokensdk_orion",
LabelNames: []tracing.LabelName{},
Expand Down
30 changes: 30 additions & 0 deletions token/services/network/orion/ppfetcher.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package orion

import (
"context"

driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
view2 "github.com/hyperledger-labs/fabric-smart-client/platform/view"
)

func NewCustodianPublicParamsFetcher(viewManager *view2.Manager) *custodianPublicParamsFetcher {
return &custodianPublicParamsFetcher{viewManager: viewManager}
}

type custodianPublicParamsFetcher struct {
viewManager *view2.Manager
}

func (f *custodianPublicParamsFetcher) Fetch(network driver2.Network, _ driver2.Channel, namespace driver2.Namespace) ([]byte, error) {
pp, err := f.viewManager.InitiateView(NewPublicParamsRequestView(network, namespace), context.TODO())
if err != nil {
return nil, err
}
return pp.([]byte), nil
}

0 comments on commit 9c05d0c

Please sign in to comment.