forked from TrueCloudLab/frostfs-node
[#2091] morph/client: Do not use deprecated methods
Signed-off-by: Evgenii Stratonikov <evgeniy@morphbits.ru>
This commit is contained in:
parent
51e886dd67
commit
6af52c46d8
5 changed files with 33 additions and 65 deletions
|
@ -116,10 +116,7 @@ func New(p *Params) (*Processor, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// result is cached by neo-go, so we can pre-calc it
|
// result is cached by neo-go, so we can pre-calc it
|
||||||
designate, err := p.MainnetClient.GetDesignateHash()
|
designate := p.MainnetClient.GetDesignateHash()
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("could not get designate hash: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &Processor{
|
return &Processor{
|
||||||
log: p.Log,
|
log: p.Log,
|
||||||
|
|
|
@ -9,14 +9,15 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
lru "github.com/hashicorp/golang-lru"
|
lru "github.com/hashicorp/golang-lru"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/native/nativenames"
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/native/noderoles"
|
"github.com/nspcc-dev/neo-go/pkg/core/native/noderoles"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
|
"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/rpcclient"
|
"github.com/nspcc-dev/neo-go/pkg/rpcclient"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/rpcclient/actor"
|
"github.com/nspcc-dev/neo-go/pkg/rpcclient/actor"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpcclient/gas"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/rpcclient/nep17"
|
"github.com/nspcc-dev/neo-go/pkg/rpcclient/nep17"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpcclient/rolemgmt"
|
||||||
sc "github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
sc "github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger"
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
|
@ -50,13 +51,14 @@ type Client struct {
|
||||||
client *rpcclient.WSClient // neo-go websocket client
|
client *rpcclient.WSClient // neo-go websocket client
|
||||||
rpcActor *actor.Actor // neo-go RPC actor
|
rpcActor *actor.Actor // neo-go RPC actor
|
||||||
gasToken *nep17.Token // neo-go GAS token wrapper
|
gasToken *nep17.Token // neo-go GAS token wrapper
|
||||||
|
rolemgmt *rolemgmt.Contract // neo-go Designation contract wrapper
|
||||||
|
|
||||||
acc *wallet.Account // neo account
|
acc *wallet.Account // neo account
|
||||||
accAddr util.Uint160 // account's address
|
accAddr util.Uint160 // account's address
|
||||||
|
|
||||||
signer *transaction.Signer
|
signer *transaction.Signer
|
||||||
|
|
||||||
notary *notary
|
notary *notaryInfo
|
||||||
|
|
||||||
cfg cfg
|
cfg cfg
|
||||||
|
|
||||||
|
@ -366,15 +368,8 @@ func (c *Client) NeoFSAlphabetList() (res keys.PublicKeys, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDesignateHash returns hash of the native `RoleManagement` contract.
|
// GetDesignateHash returns hash of the native `RoleManagement` contract.
|
||||||
func (c *Client) GetDesignateHash() (res util.Uint160, err error) {
|
func (c *Client) GetDesignateHash() util.Uint160 {
|
||||||
c.switchLock.RLock()
|
return rolemgmt.Hash
|
||||||
defer c.switchLock.RUnlock()
|
|
||||||
|
|
||||||
if c.inactive {
|
|
||||||
return util.Uint160{}, ErrConnectionLost
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.client.GetNativeContractHash(nativenames.Designation)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) roleList(r noderoles.Role) (keys.PublicKeys, error) {
|
func (c *Client) roleList(r noderoles.Role) (keys.PublicKeys, error) {
|
||||||
|
@ -383,7 +378,7 @@ func (c *Client) roleList(r noderoles.Role) (keys.PublicKeys, error) {
|
||||||
return nil, fmt.Errorf("can't get chain height: %w", err)
|
return nil, fmt.Errorf("can't get chain height: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.client.GetDesignatedByRole(r, height)
|
return c.rolemgmt.GetDesignatedByRole(r, height)
|
||||||
}
|
}
|
||||||
|
|
||||||
// tries to resolve sc.Parameter from the arg.
|
// tries to resolve sc.Parameter from the arg.
|
||||||
|
@ -524,3 +519,9 @@ func (c *Client) inactiveMode() {
|
||||||
c.cfg.inactiveModeCb()
|
c.cfg.inactiveModeCb()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) setActor(act *actor.Actor) {
|
||||||
|
c.rpcActor = act
|
||||||
|
c.gasToken = nep17.New(act, gas.Hash)
|
||||||
|
c.rolemgmt = rolemgmt.New(act)
|
||||||
|
}
|
||||||
|
|
|
@ -8,12 +8,10 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
lru "github.com/hashicorp/golang-lru"
|
lru "github.com/hashicorp/golang-lru"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/native/nativenames"
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/rpcclient"
|
"github.com/nspcc-dev/neo-go/pkg/rpcclient"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/rpcclient/actor"
|
"github.com/nspcc-dev/neo-go/pkg/rpcclient/actor"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/rpcclient/nep17"
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/wallet"
|
"github.com/nspcc-dev/neo-go/pkg/wallet"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/util/logger"
|
"github.com/nspcc-dev/neofs-node/pkg/util/logger"
|
||||||
|
@ -119,6 +117,7 @@ func New(key *keys.PrivateKey, opts ...Option) (*Client, error) {
|
||||||
cli.endpoints.init(cfg.endpoints)
|
cli.endpoints.init(cfg.endpoints)
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
var act *actor.Actor
|
||||||
if cfg.singleCli != nil {
|
if cfg.singleCli != nil {
|
||||||
// return client in single RPC node mode that uses
|
// return client in single RPC node mode that uses
|
||||||
// predefined WS client
|
// predefined WS client
|
||||||
|
@ -129,51 +128,42 @@ func New(key *keys.PrivateKey, opts ...Option) (*Client, error) {
|
||||||
// inactive mode will be enabled
|
// inactive mode will be enabled
|
||||||
cli.client = cfg.singleCli
|
cli.client = cfg.singleCli
|
||||||
|
|
||||||
cli.rpcActor, err = newActor(cfg.singleCli, acc, *cfg)
|
act, err = newActor(cfg.singleCli, acc, *cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not create RPC actor: %w", err)
|
return nil, fmt.Errorf("could not create RPC actor: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cli.gasToken, err = newGasToken(cli.client, cli.rpcActor)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("could not create gas token actor: %w", err)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
cli.client, cli.rpcActor, cli.gasToken, err = cli.newCli(cli.endpoints.list[0].Address)
|
cli.client, act, err = cli.newCli(cli.endpoints.list[0].Address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not create RPC client: %w", err)
|
return nil, fmt.Errorf("could not create RPC client: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cli.setActor(act)
|
||||||
|
|
||||||
go cli.notificationLoop()
|
go cli.notificationLoop()
|
||||||
|
|
||||||
return cli, nil
|
return cli, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) newCli(endpoint string) (*rpcclient.WSClient, *actor.Actor, *nep17.Token, error) {
|
func (c *Client) newCli(endpoint string) (*rpcclient.WSClient, *actor.Actor, error) {
|
||||||
cli, err := rpcclient.NewWS(c.cfg.ctx, endpoint, rpcclient.Options{
|
cli, err := rpcclient.NewWS(c.cfg.ctx, endpoint, rpcclient.Options{
|
||||||
DialTimeout: c.cfg.dialTimeout,
|
DialTimeout: c.cfg.dialTimeout,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, fmt.Errorf("WS client creation: %w", err)
|
return nil, nil, fmt.Errorf("WS client creation: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = cli.Init()
|
err = cli.Init()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, fmt.Errorf("WS client initialization: %w", err)
|
return nil, nil, fmt.Errorf("WS client initialization: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
act, err := newActor(cli, c.acc, c.cfg)
|
act, err := newActor(cli, c.acc, c.cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, fmt.Errorf("RPC actor creation: %w", err)
|
return nil, nil, fmt.Errorf("RPC actor creation: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
gas, err := newGasToken(cli, act)
|
return cli, act, nil
|
||||||
if err != nil {
|
|
||||||
return nil, nil, nil, fmt.Errorf("gas token actor: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return cli, act, gas, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newActor(ws *rpcclient.WSClient, acc *wallet.Account, cfg cfg) (*actor.Actor, error) {
|
func newActor(ws *rpcclient.WSClient, acc *wallet.Account, cfg cfg) (*actor.Actor, error) {
|
||||||
|
@ -188,15 +178,6 @@ func newActor(ws *rpcclient.WSClient, acc *wallet.Account, cfg cfg) (*actor.Acto
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
|
||||||
func newGasToken(cli *rpcclient.WSClient, a *actor.Actor) (*nep17.Token, error) {
|
|
||||||
gasHash, err := cli.GetNativeContractHash(nativenames.Gas)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("gas contract hash: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nep17.New(a, gasHash), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func newClientCache() cache {
|
func newClientCache() cache {
|
||||||
c, _ := lru.New(100) // returns error only if size is negative
|
c, _ := lru.New(100) // returns error only if size is negative
|
||||||
return cache{
|
return cache{
|
||||||
|
|
|
@ -36,7 +36,7 @@ func (c *Client) switchRPC() bool {
|
||||||
// Iterate endpoints in the order of decreasing priority.
|
// Iterate endpoints in the order of decreasing priority.
|
||||||
for c.endpoints.curr = range c.endpoints.list {
|
for c.endpoints.curr = range c.endpoints.list {
|
||||||
newEndpoint := c.endpoints.list[c.endpoints.curr].Address
|
newEndpoint := c.endpoints.list[c.endpoints.curr].Address
|
||||||
cli, act, gas, err := c.newCli(newEndpoint)
|
cli, act, err := c.newCli(newEndpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.logger.Warn("could not establish connection to the switched RPC node",
|
c.logger.Warn("could not establish connection to the switched RPC node",
|
||||||
zap.String("endpoint", newEndpoint),
|
zap.String("endpoint", newEndpoint),
|
||||||
|
@ -62,8 +62,7 @@ func (c *Client) switchRPC() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
c.client = cli
|
c.client = cli
|
||||||
c.rpcActor = act
|
c.setActor(act)
|
||||||
c.gasToken = gas
|
|
||||||
|
|
||||||
if c.cfg.switchInterval != 0 && !c.switchIsActive.Load() &&
|
if c.cfg.switchInterval != 0 && !c.switchIsActive.Load() &&
|
||||||
c.endpoints.list[c.endpoints.curr].Priority != c.endpoints.list[0].Priority {
|
c.endpoints.list[c.endpoints.curr].Priority != c.endpoints.list[0].Priority {
|
||||||
|
@ -165,7 +164,7 @@ mainLoop:
|
||||||
|
|
||||||
tryE := e.Address
|
tryE := e.Address
|
||||||
|
|
||||||
cli, act, gas, err := c.newCli(tryE)
|
cli, act, err := c.newCli(tryE)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.logger.Warn("could not create client to the higher priority node",
|
c.logger.Warn("could not create client to the higher priority node",
|
||||||
zap.String("endpoint", tryE),
|
zap.String("endpoint", tryE),
|
||||||
|
@ -188,8 +187,7 @@ mainLoop:
|
||||||
c.client.Close()
|
c.client.Close()
|
||||||
c.cache.invalidate()
|
c.cache.invalidate()
|
||||||
c.client = cli
|
c.client = cli
|
||||||
c.rpcActor = act
|
c.setActor(act)
|
||||||
c.gasToken = gas
|
|
||||||
c.endpoints.curr = i
|
c.endpoints.curr = i
|
||||||
|
|
||||||
c.switchLock.Unlock()
|
c.switchLock.Unlock()
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
|
"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/neorpc"
|
"github.com/nspcc-dev/neo-go/pkg/neorpc"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpcclient/notary"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
||||||
sc "github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
sc "github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
|
@ -24,7 +25,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
notary struct {
|
notaryInfo struct {
|
||||||
txValidTime uint32 // minimum amount of blocks when mainTx will be valid
|
txValidTime uint32 // minimum amount of blocks when mainTx will be valid
|
||||||
roundTime uint32 // extra amount of blocks to synchronize sidechain height diff of inner ring nodes
|
roundTime uint32 // extra amount of blocks to synchronize sidechain height diff of inner ring nodes
|
||||||
fallbackTime uint32 // mainTx's ValidUntilBlock - fallbackTime + 1 is when fallbackTx is sent
|
fallbackTime uint32 // mainTx's ValidUntilBlock - fallbackTime + 1 is when fallbackTx is sent
|
||||||
|
@ -97,19 +98,13 @@ func (c *Client) EnableNotarySupport(opts ...NotaryOption) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
notaryCfg := ¬ary{
|
notaryCfg := ¬aryInfo{
|
||||||
proxy: cfg.proxy,
|
proxy: cfg.proxy,
|
||||||
txValidTime: cfg.txValidTime,
|
txValidTime: cfg.txValidTime,
|
||||||
roundTime: cfg.roundTime,
|
roundTime: cfg.roundTime,
|
||||||
fallbackTime: cfg.fallbackTime,
|
fallbackTime: cfg.fallbackTime,
|
||||||
alphabetSource: cfg.alphabetSource,
|
alphabetSource: cfg.alphabetSource,
|
||||||
}
|
notary: notary.Hash,
|
||||||
|
|
||||||
var err error
|
|
||||||
|
|
||||||
notaryCfg.notary, err = c.client.GetNativeContractHash(nativenames.Notary)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("can't get notary contract script hash: %w", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.notary = notaryCfg
|
c.notary = notaryCfg
|
||||||
|
@ -132,7 +127,7 @@ func (c *Client) ProbeNotary() (res bool) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := c.client.GetNativeContractHash(nativenames.Notary)
|
_, err := c.client.GetContractStateByAddressOrName(nativenames.Notary)
|
||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -421,11 +416,7 @@ func (c *Client) NotarySignAndInvokeTX(mainTx *transaction.Transaction) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) notaryInvokeAsCommittee(method string, nonce, vub uint32, args ...interface{}) error {
|
func (c *Client) notaryInvokeAsCommittee(method string, nonce, vub uint32, args ...interface{}) error {
|
||||||
designate, err := c.GetDesignateHash()
|
designate := c.GetDesignateHash()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.notaryInvoke(true, true, designate, nonce, &vub, method, args...)
|
return c.notaryInvoke(true, true, designate, nonce, &vub, method, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue