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  }