[#452] innerring: Use reputation processor

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2021-03-31 18:41:47 +03:00 committed by Alex Vanin
parent 09e4479d44
commit b18da34b55
3 changed files with 56 additions and 6 deletions

View file

@ -67,6 +67,7 @@ func defaultConfiguration(cfg *viper.Viper) {
cfg.SetDefault("contracts.container", "")
cfg.SetDefault("contracts.audit", "")
cfg.SetDefault("contracts.proxy", "")
cfg.SetDefault("contracts.reputation", "")
// alphabet contracts
cfg.SetDefault("contracts.alphabet.amount", 7)
@ -87,6 +88,7 @@ func defaultConfiguration(cfg *viper.Viper) {
cfg.SetDefault("workers.neofs", "10")
cfg.SetDefault("workers.container", "10")
cfg.SetDefault("workers.alphabet", "10")
cfg.SetDefault("workers.reputation", "10")
cfg.SetDefault("netmap_cleaner.enabled", false)
cfg.SetDefault("netmap_cleaner.threshold", 3)

View file

@ -19,6 +19,7 @@ import (
"github.com/nspcc-dev/neofs-node/pkg/innerring/processors/governance"
"github.com/nspcc-dev/neofs-node/pkg/innerring/processors/neofs"
"github.com/nspcc-dev/neofs-node/pkg/innerring/processors/netmap"
"github.com/nspcc-dev/neofs-node/pkg/innerring/processors/reputation"
"github.com/nspcc-dev/neofs-node/pkg/innerring/processors/settlement"
auditSettlement "github.com/nspcc-dev/neofs-node/pkg/innerring/processors/settlement/audit"
"github.com/nspcc-dev/neofs-node/pkg/innerring/timers"
@ -86,12 +87,13 @@ type (
}
contracts struct {
neofs util.Uint160 // in mainnet
netmap util.Uint160 // in morph
balance util.Uint160 // in morph
container util.Uint160 // in morph
audit util.Uint160 // in morph
proxy util.Uint160 // in morph
neofs util.Uint160 // in mainnet
netmap util.Uint160 // in morph
balance util.Uint160 // in morph
container util.Uint160 // in morph
audit util.Uint160 // in morph
proxy util.Uint160 // in morph
reputation util.Uint160 // in morph
alphabet alphabetContracts // in morph
}
@ -329,6 +331,11 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper) (*Server, error
return nil, err
}
repClient, err := invoke.NewReputationClient(server.morphClient, server.contracts.reputation)
if err != nil {
return nil, err
}
// create global runtime config reader
globalConfig := config.NewGlobalConfigReader(cfg, nmClient)
@ -551,6 +558,24 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper) (*Server, error
return nil, err
}
// create reputation processor
reputationProcessor, err := reputation.New(&reputation.Params{
Log: log,
PoolSize: cfg.GetInt("workers.reputation"),
ReputationContract: server.contracts.reputation,
EpochState: server,
AlphabetState: server,
ReputationWrapper: repClient,
})
if err != nil {
return nil, err
}
err = bindMorphProcessor(reputationProcessor, server)
if err != nil {
return nil, err
}
// todo: create vivid id component
// initialize epoch timers
@ -642,6 +667,7 @@ func parseContracts(cfg *viper.Viper) (*contracts, error) {
containerContractStr := cfg.GetString("contracts.container")
auditContractStr := cfg.GetString("contracts.audit")
proxyContractStr := cfg.GetString("contracts.proxy")
reputationContractStr := cfg.GetString("contracts.reputation")
result.netmap, err = util.Uint160DecodeStringLE(netmapContractStr)
if err != nil {
@ -673,6 +699,11 @@ func parseContracts(cfg *viper.Viper) (*contracts, error) {
return nil, errors.Wrap(err, "ir: can't read proxy script-hash")
}
result.reputation, err = util.Uint160DecodeStringLE(reputationContractStr)
if err != nil {
return nil, errors.Wrap(err, "ir: can't read reputation script-hash")
}
result.alphabet, err = parseAlphabetContracts(cfg)
if err != nil {
return nil, err

View file

@ -13,6 +13,8 @@ import (
wrapContainer "github.com/nspcc-dev/neofs-node/pkg/morph/client/container/wrapper"
morphNetmap "github.com/nspcc-dev/neofs-node/pkg/morph/client/netmap"
wrapNetmap "github.com/nspcc-dev/neofs-node/pkg/morph/client/netmap/wrapper"
"github.com/nspcc-dev/neofs-node/pkg/morph/client/reputation"
reputationWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/reputation/wrapper"
"github.com/pkg/errors"
)
@ -70,3 +72,18 @@ func NewBalanceClient(cli *client.Client, contract util.Uint160) (*balanceWrappe
return balanceWrapper.New(enhancedBalanceClient)
}
// NewReputationClient creates wrapper to work with reputation contract.
func NewReputationClient(cli *client.Client, contract util.Uint160) (*reputationWrapper.ClientWrapper, error) {
staticClient, err := client.NewStatic(cli, contract, 0)
if err != nil {
return nil, errors.Wrap(err, "could not create static client of reputation contract")
}
enhancedRepurationClient, err := reputation.New(staticClient)
if err != nil {
return nil, errors.Wrap(err, "could not create reputation contract client")
}
return reputationWrapper.WrapClient(enhancedRepurationClient), nil
}