[#990] nodeValidators: Add subnet entrance validator
Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
b6db699b6e
commit
a079a8f727
2 changed files with 82 additions and 0 deletions
|
@ -0,0 +1,41 @@
|
|||
package subnet
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
morphsubnet "github.com/nspcc-dev/neofs-node/pkg/morph/client/subnet"
|
||||
"github.com/nspcc-dev/neofs-sdk-go/netmap"
|
||||
subnetid "github.com/nspcc-dev/neofs-sdk-go/subnet/id"
|
||||
)
|
||||
|
||||
// VerifyAndUpdate calls subnet contract's `NodeAllowed` method.
|
||||
// Removes subnets that have not been approved by the contract.
|
||||
func (v *Validator) VerifyAndUpdate(n *netmap.NodeInfo) error {
|
||||
prm := morphsubnet.NodeAllowedPrm{}
|
||||
|
||||
err := n.IterateSubnets(func(id subnetid.ID) error {
|
||||
rawSubnetID, err := id.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not marshal subnetwork ID: %w", err)
|
||||
}
|
||||
|
||||
prm.SetID(rawSubnetID)
|
||||
prm.SetNode(n.PublicKey())
|
||||
|
||||
res, err := v.subnetClient.NodeAllowed(prm)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not call `NodeAllowed` contract method: %w", err)
|
||||
}
|
||||
|
||||
if !res.Allowed() {
|
||||
return netmap.ErrRemoveSubnet
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not verify subnet entrance of the node: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue