forked from TrueCloudLab/frostfs-node
d49bd4b94a
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package reputation
|
|
|
|
import (
|
|
"encoding/hex"
|
|
|
|
"github.com/nspcc-dev/neofs-api-go/pkg/reputation"
|
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client/reputation/wrapper"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func (rp *Processor) processPut(epoch uint64, id reputation.PeerID, value reputation.GlobalTrust) {
|
|
if !rp.alphabetState.IsAlphabet() {
|
|
rp.log.Info("non alphabet mode, ignore reputation put notification")
|
|
return
|
|
}
|
|
|
|
// check if epoch is valid
|
|
currentEpoch := rp.epochState.EpochCounter()
|
|
if epoch >= currentEpoch {
|
|
rp.log.Info("ignore reputation value",
|
|
zap.String("reason", "invalid epoch number"),
|
|
zap.Uint64("trust_epoch", epoch),
|
|
zap.Uint64("local_epoch", currentEpoch))
|
|
|
|
return
|
|
}
|
|
|
|
// check signature
|
|
if err := value.VerifySignature(); err != nil {
|
|
rp.log.Info("ignore reputation value",
|
|
zap.String("reason", "invalid signature"),
|
|
zap.String("error", err.Error()))
|
|
|
|
return
|
|
}
|
|
|
|
// todo: do sanity checks of value
|
|
|
|
args := wrapper.PutArgs{}
|
|
args.SetEpoch(epoch)
|
|
args.SetPeerID(id)
|
|
args.SetValue(value)
|
|
|
|
var err error
|
|
|
|
if rp.notaryDisabled {
|
|
err = rp.reputationWrp.Put(args)
|
|
} else {
|
|
err = rp.reputationWrp.PutViaNotary(args)
|
|
}
|
|
|
|
if err != nil {
|
|
rp.log.Warn("can't send approval tx for reputation value",
|
|
zap.String("peer_id", hex.EncodeToString(id.ToV2().GetPublicKey())),
|
|
zap.String("error", err.Error()))
|
|
}
|
|
}
|