frostfs-node/pkg/innerring/invoke/enhanced.go
Alex Vanin 91a1896b8b [#486] innerring: Use fee provider interface in invoke package
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
2021-05-05 12:45:16 +03:00

89 lines
3.5 KiB
Go

package invoke
import (
"fmt"
"github.com/nspcc-dev/neo-go/pkg/util"
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
"github.com/nspcc-dev/neofs-node/pkg/morph/client/audit"
auditWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/audit/wrapper"
"github.com/nspcc-dev/neofs-node/pkg/morph/client/balance"
balanceWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/balance/wrapper"
morphContainer "github.com/nspcc-dev/neofs-node/pkg/morph/client/container"
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"
)
// NewContainerClient creates wrapper to access data from container contract.
func NewContainerClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*wrapContainer.Wrapper, error) {
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
if err != nil {
return nil, fmt.Errorf("can't create container static client: %w", err)
}
enhancedContainerClient, err := morphContainer.New(staticClient)
if err != nil {
return nil, fmt.Errorf("can't create container morph client: %w", err)
}
return wrapContainer.New(enhancedContainerClient)
}
// NewNetmapClient creates wrapper to access data from netmap contract.
func NewNetmapClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*wrapNetmap.Wrapper, error) {
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
if err != nil {
return nil, fmt.Errorf("can't create netmap static client: %w", err)
}
enhancedNetmapClient, err := morphNetmap.New(staticClient)
if err != nil {
return nil, fmt.Errorf("can't create netmap morph client: %w", err)
}
return wrapNetmap.New(enhancedNetmapClient)
}
// NewAuditClient creates wrapper to work with Audit contract.
func NewAuditClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*auditWrapper.ClientWrapper, error) {
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
if err != nil {
return nil, err
}
return auditWrapper.WrapClient(audit.New(staticClient)), nil
}
// NewBalanceClient creates wrapper to work with Balance contract.
func NewBalanceClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*balanceWrapper.Wrapper, error) {
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
if err != nil {
return nil, errors.Wrap(err, "could not create static client of Balance contract")
}
enhancedBalanceClient, err := balance.New(staticClient)
if err != nil {
return nil, errors.Wrap(err, "could not create Balance contract client")
}
return balanceWrapper.New(enhancedBalanceClient)
}
// NewReputationClient creates wrapper to work with reputation contract.
func NewReputationClient(cli *client.Client, contract util.Uint160, fee SideFeeProvider) (*reputationWrapper.ClientWrapper, error) {
staticClient, err := client.NewStatic(cli, contract, fee.SideChainFee())
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
}