github.com/MetalBlockchain/metalgo@v1.11.9/node/overridden_manager.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package node 5 6 import ( 7 "fmt" 8 9 "github.com/MetalBlockchain/metalgo/ids" 10 "github.com/MetalBlockchain/metalgo/snow/validators" 11 "github.com/MetalBlockchain/metalgo/utils/crypto/bls" 12 "github.com/MetalBlockchain/metalgo/utils/set" 13 ) 14 15 var _ validators.Manager = (*overriddenManager)(nil) 16 17 // newOverriddenManager returns a Manager that overrides of all calls to the 18 // underlying Manager to only operate on the validators in [subnetID]. 19 func newOverriddenManager(subnetID ids.ID, manager validators.Manager) *overriddenManager { 20 return &overriddenManager{ 21 subnetID: subnetID, 22 manager: manager, 23 } 24 } 25 26 // overriddenManager is a wrapper around a Manager that overrides of all calls 27 // to the underlying Manager to only operate on the validators in [subnetID]. 28 // subnetID here is typically the primary network ID, as it has the superset of 29 // all subnet validators. 30 type overriddenManager struct { 31 manager validators.Manager 32 subnetID ids.ID 33 } 34 35 func (o *overriddenManager) AddStaker(_ ids.ID, nodeID ids.NodeID, pk *bls.PublicKey, txID ids.ID, weight uint64) error { 36 return o.manager.AddStaker(o.subnetID, nodeID, pk, txID, weight) 37 } 38 39 func (o *overriddenManager) AddWeight(_ ids.ID, nodeID ids.NodeID, weight uint64) error { 40 return o.manager.AddWeight(o.subnetID, nodeID, weight) 41 } 42 43 func (o *overriddenManager) GetWeight(_ ids.ID, nodeID ids.NodeID) uint64 { 44 return o.manager.GetWeight(o.subnetID, nodeID) 45 } 46 47 func (o *overriddenManager) GetValidator(_ ids.ID, nodeID ids.NodeID) (*validators.Validator, bool) { 48 return o.manager.GetValidator(o.subnetID, nodeID) 49 } 50 51 func (o *overriddenManager) SubsetWeight(_ ids.ID, nodeIDs set.Set[ids.NodeID]) (uint64, error) { 52 return o.manager.SubsetWeight(o.subnetID, nodeIDs) 53 } 54 55 func (o *overriddenManager) RemoveWeight(_ ids.ID, nodeID ids.NodeID, weight uint64) error { 56 return o.manager.RemoveWeight(o.subnetID, nodeID, weight) 57 } 58 59 func (o *overriddenManager) Count(ids.ID) int { 60 return o.manager.Count(o.subnetID) 61 } 62 63 func (o *overriddenManager) TotalWeight(ids.ID) (uint64, error) { 64 return o.manager.TotalWeight(o.subnetID) 65 } 66 67 func (o *overriddenManager) Sample(_ ids.ID, size int) ([]ids.NodeID, error) { 68 return o.manager.Sample(o.subnetID, size) 69 } 70 71 func (o *overriddenManager) GetMap(ids.ID) map[ids.NodeID]*validators.GetValidatorOutput { 72 return o.manager.GetMap(o.subnetID) 73 } 74 75 func (o *overriddenManager) RegisterCallbackListener(listener validators.ManagerCallbackListener) { 76 o.manager.RegisterCallbackListener(listener) 77 } 78 79 func (o *overriddenManager) RegisterSetCallbackListener(_ ids.ID, listener validators.SetCallbackListener) { 80 o.manager.RegisterSetCallbackListener(o.subnetID, listener) 81 } 82 83 func (o *overriddenManager) String() string { 84 return fmt.Sprintf("Overridden Validator Manager (SubnetID = %s): %s", o.subnetID, o.manager) 85 } 86 87 func (o *overriddenManager) GetValidatorIDs(ids.ID) []ids.NodeID { 88 return o.manager.GetValidatorIDs(o.subnetID) 89 }