From 74d1c080146a8c969b6591fa54e496d29eacdd25 Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Mon, 1 Jul 2024 18:29:32 -0700 Subject: [PATCH 1/7] move builders to it's own package --- chainio/clients/elcontracts/builder.go | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 chainio/clients/elcontracts/builder.go diff --git a/chainio/clients/elcontracts/builder.go b/chainio/clients/elcontracts/builder.go new file mode 100644 index 00000000..970de2dc --- /dev/null +++ b/chainio/clients/elcontracts/builder.go @@ -0,0 +1,49 @@ +package elcontracts + +import ( + "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" + "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" + "github.com/Layr-Labs/eigensdk-go/logging" + "github.com/Layr-Labs/eigensdk-go/metrics" +) + +func BuildClients( + config Config, + ethHttpClient eth.Client, + txMgr txmgr.TxManager, + logger logging.Logger, + eigenMetrics *metrics.EigenMetrics, +) (*ELChainReader, *ELChainWriter, *ContractBindings, error) { + elContractBindings, err := NewBindingsFromConfig( + config, + ethHttpClient, + logger, + ) + if err != nil { + return nil, nil, nil, err + } + + elChainReader := NewELChainReader( + elContractBindings.Slasher, + elContractBindings.DelegationManager, + elContractBindings.StrategyManager, + elContractBindings.AvsDirectory, + logger, + ethHttpClient, + ) + + elChainWriter := NewELChainWriter( + elContractBindings.Slasher, + elContractBindings.DelegationManager, + elContractBindings.StrategyManager, + elContractBindings.RewardsCoordinator, + elContractBindings.StrategyManagerAddr, + elChainReader, + ethHttpClient, + logger, + eigenMetrics, + txMgr, + ) + + return elChainReader, elChainWriter, elContractBindings, nil +} From d66792009d3bf215c61647234a885021f1f527d3 Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Mon, 1 Jul 2024 20:35:11 -0700 Subject: [PATCH 2/7] refactor builder --- chainio/clients/avsregistry/builder.go | 68 ++++++++ chainio/clients/avsregistry/subscriber.go | 12 +- chainio/clients/avsregistry/writer.go | 12 +- chainio/clients/builder.go | 179 +++------------------- chainio/clients/elcontracts/builder.go | 14 +- chainio/clients/elcontracts/reader.go | 68 ++++---- chainio/clients/elcontracts/writer.go | 40 ++--- metrics/collectors/economic/economic.go | 4 +- 8 files changed, 161 insertions(+), 236 deletions(-) create mode 100644 chainio/clients/avsregistry/builder.go diff --git a/chainio/clients/avsregistry/builder.go b/chainio/clients/avsregistry/builder.go new file mode 100644 index 00000000..6faf9589 --- /dev/null +++ b/chainio/clients/avsregistry/builder.go @@ -0,0 +1,68 @@ +package avsregistry + +import ( + "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" + "github.com/Layr-Labs/eigensdk-go/chainio/clients/eth" + "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" + "github.com/Layr-Labs/eigensdk-go/logging" +) + +func BuildClients( + config Config, + client eth.Client, + txMgr txmgr.TxManager, + logger logging.Logger, +) (*ChainReader, *ChainSubscriber, *ChainWriter, *ContractBindings, error) { + avsBindings, err := NewBindingsFromConfig( + config, + client, + logger, + ) + + if err != nil { + return nil, nil, nil, nil, err + } + + chainReader := NewChainReader( + avsBindings.RegistryCoordinatorAddr, + avsBindings.BlsApkRegistryAddr, + avsBindings.RegistryCoordinator, + avsBindings.OperatorStateRetriever, + avsBindings.StakeRegistry, + logger, + client, + ) + + chainSubscriber := NewChainSubscriber( + avsBindings.RegistryCoordinator, + avsBindings.BlsApkRegistry, + logger, + ) + + // This is ugly but we need elReader to be able to create the AVS writer + elChainReader, err := elcontracts.NewReaderFromConfig( + elcontracts.Config{ + DelegationManagerAddress: avsBindings.DelegationManagerAddr, + AvsDirectoryAddress: avsBindings.AvsDirectoryAddr, + }, + client, + logger, + ) + if err != nil { + return nil, nil, nil, nil, err + } + + chainWriter := NewChainWriter( + avsBindings.ServiceManagerAddr, + avsBindings.RegistryCoordinator, + avsBindings.OperatorStateRetriever, + avsBindings.StakeRegistry, + avsBindings.BlsApkRegistry, + elChainReader, + logger, + client, + txMgr, + ) + + return chainReader, chainSubscriber, chainWriter, avsBindings, nil +} diff --git a/chainio/clients/avsregistry/subscriber.go b/chainio/clients/avsregistry/subscriber.go index 1aeb6bf8..24ffb73e 100644 --- a/chainio/clients/avsregistry/subscriber.go +++ b/chainio/clients/avsregistry/subscriber.go @@ -27,17 +27,17 @@ type ChainSubscriber struct { var _ Subscriber = (*ChainSubscriber)(nil) func NewChainSubscriber( - logger logging.Logger, regCoord regcoord.ContractRegistryCoordinatorFilters, blsApkRegistry blsapkreg.ContractBLSApkRegistryFilters, -) (*ChainSubscriber, error) { + logger logging.Logger, +) *ChainSubscriber { logger = logger.With(logging.ComponentKey, "avsregistry/ChainSubscriber") return &ChainSubscriber{ - logger: logger, regCoord: regCoord, blsApkRegistry: blsApkRegistry, - }, nil + logger: logger, + } } func BuildAvsRegistryChainSubscriber( @@ -57,7 +57,7 @@ func BuildAvsRegistryChainSubscriber( if err != nil { return nil, utils.WrapError("Failed to create BLSApkRegistry contract", err) } - return NewChainSubscriber(logger, regCoord, blsApkReg) + return NewChainSubscriber(regCoord, blsApkReg, logger), nil } func NewSubscriberFromConfig( @@ -70,7 +70,7 @@ func NewSubscriberFromConfig( return nil, err } - return NewChainSubscriber(logger, bindings.RegistryCoordinator, bindings.BlsApkRegistry) + return NewChainSubscriber(bindings.RegistryCoordinator, bindings.BlsApkRegistry, logger), nil } func (s *ChainSubscriber) SubscribeToNewPubkeyRegistrations() (chan *blsapkreg.ContractBLSApkRegistryNewPubkeyRegistration, event.Subscription, error) { diff --git a/chainio/clients/avsregistry/writer.go b/chainio/clients/avsregistry/writer.go index 98cd540d..1747faf0 100644 --- a/chainio/clients/avsregistry/writer.go +++ b/chainio/clients/avsregistry/writer.go @@ -94,7 +94,7 @@ type ChainWriter struct { operatorStateRetriever *opstateretriever.ContractOperatorStateRetriever stakeRegistry *stakeregistry.ContractStakeRegistry blsApkRegistry *blsapkregistry.ContractBLSApkRegistry - elReader elcontracts.ELReader + elReader elcontracts.Reader logger logging.Logger ethClient eth.Client txMgr txmgr.TxManager @@ -108,11 +108,11 @@ func NewChainWriter( operatorStateRetriever *opstateretriever.ContractOperatorStateRetriever, stakeRegistry *stakeregistry.ContractStakeRegistry, blsApkRegistry *blsapkregistry.ContractBLSApkRegistry, - elReader elcontracts.ELReader, + elReader elcontracts.Reader, logger logging.Logger, ethClient eth.Client, txMgr txmgr.TxManager, -) (*ChainWriter, error) { +) *ChainWriter { logger = logger.With(logging.ComponentKey, "avsregistry/ChainWriter") return &ChainWriter{ @@ -125,7 +125,7 @@ func NewChainWriter( logger: logger, ethClient: ethClient, txMgr: txMgr, - }, nil + } } // BuildAvsRegistryChainWriter creates a new ChainWriter instance from the provided contract addresses @@ -194,7 +194,7 @@ func BuildAvsRegistryChainWriter( logger, ethClient, txMgr, - ) + ), nil } // NewWriterFromConfig creates a new ChainWriter from the provided config @@ -226,7 +226,7 @@ func NewWriterFromConfig( logger, client, txMgr, - ) + ), nil } func (w *ChainWriter) RegisterOperatorInQuorumWithAVSRegistryCoordinator( diff --git a/chainio/clients/builder.go b/chainio/clients/builder.go index 17b31281..c5836f7a 100644 --- a/chainio/clients/builder.go +++ b/chainio/clients/builder.go @@ -14,7 +14,6 @@ import ( "github.com/Layr-Labs/eigensdk-go/metrics" "github.com/Layr-Labs/eigensdk-go/signerv2" "github.com/Layr-Labs/eigensdk-go/utils" - "github.com/ethereum/go-ethereum/accounts/abi/bind" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/prometheus/client_golang/prometheus" ) @@ -28,6 +27,7 @@ type BuildAllConfig struct { PromMetricsIpPortAddress string } +// Clients is a struct that holds all the clients that are needed to interact with the AVS and EL contracts. // TODO: this is confusing right now because clients are not instrumented clients, but // we return metrics and prometheus reg, so user has to build instrumented clients at the call // site if they need them. We should probably separate into two separate constructors, one @@ -37,8 +37,8 @@ type Clients struct { AvsRegistryChainReader *avsregistry.ChainReader AvsRegistryChainSubscriber *avsregistry.ChainSubscriber AvsRegistryChainWriter *avsregistry.ChainWriter - ElChainReader *elcontracts.ELChainReader - ElChainWriter *elcontracts.ELChainWriter + ElChainReader *elcontracts.ChainReader + ElChainWriter *elcontracts.ChainWriter EthHttpClient eth.Client EthWsClient eth.Client Wallet wallet.Wallet @@ -87,27 +87,34 @@ func BuildAll( return nil, utils.WrapError("Failed to create transaction sender", err) } txMgr := txmgr.NewSimpleTxManager(pkWallet, ethHttpClient, logger, addr) - // creating EL clients: Reader, Writer and EigenLayer Contract Bindings - elChainReader, elChainWriter, elContractBindings, err := config.BuildELClients( + + // creating AVS clients: Reader and Writer + avsRegistryChainReader, avsRegistryChainSubscriber, avsRegistryChainWriter, avsRegistryContractBindings, err := avsregistry.BuildClients( + avsregistry.Config{ + RegistryCoordinatorAddress: gethcommon.HexToAddress(config.RegistryCoordinatorAddr), + OperatorStateRetrieverAddress: gethcommon.HexToAddress(config.OperatorStateRetrieverAddr), + }, ethHttpClient, txMgr, logger, - eigenMetrics, ) if err != nil { - return nil, utils.WrapError("Failed to create EL Reader, Writer and Subscriber", err) + return nil, utils.WrapError("Failed to create AVS Registry Reader and Writer", err) } - // creating AVS clients: Reader and Writer - avsRegistryChainReader, avsRegistryChainSubscriber, avsRegistryChainWriter, avsRegistryContractBindings, err := config.BuildAVSRegistryClients( - elChainReader, + // creating EL clients: Reader, Writer and EigenLayer Contract Bindings + elChainReader, elChainWriter, elContractBindings, err := elcontracts.BuildClients( + elcontracts.Config{ + DelegationManagerAddress: avsRegistryContractBindings.DelegationManagerAddr, + AvsDirectoryAddress: avsRegistryContractBindings.AvsDirectoryAddr, + }, ethHttpClient, - ethWsClient, txMgr, logger, + eigenMetrics, ) if err != nil { - return nil, utils.WrapError("Failed to create AVS Registry Reader and Writer", err) + return nil, utils.WrapError("Failed to create EL Reader and Writer", err) } return &Clients{ @@ -128,154 +135,6 @@ func BuildAll( } -func (config *BuildAllConfig) buildAVSRegistryContractBindings( - ethHttpClient eth.Client, - logger logging.Logger, -) (*avsregistry.ContractBindings, error) { - avsRegistryContractBindings, err := avsregistry.NewAVSRegistryContractBindings( - gethcommon.HexToAddress(config.RegistryCoordinatorAddr), - gethcommon.HexToAddress(config.OperatorStateRetrieverAddr), - ethHttpClient, - logger, - ) - if err != nil { - return nil, utils.WrapError("Failed to create AVSRegistryContractBindings", err) - } - return avsRegistryContractBindings, nil -} - -func (config *BuildAllConfig) buildEigenLayerContractBindings( - delegationManagerAddr, avsDirectoryAddr gethcommon.Address, - ethHttpClient eth.Client, - logger logging.Logger, -) (*elcontracts.ContractBindings, error) { - - elContractBindings, err := elcontracts.NewEigenlayerContractBindings( - delegationManagerAddr, - avsDirectoryAddr, - ethHttpClient, - logger, - ) - if err != nil { - return nil, utils.WrapError("Failed to create ContractBindings", err) - } - return elContractBindings, nil -} - -func (config *BuildAllConfig) BuildELClients( - ethHttpClient eth.Client, - txMgr txmgr.TxManager, - logger logging.Logger, - eigenMetrics *metrics.EigenMetrics, -) (*elcontracts.ELChainReader, *elcontracts.ELChainWriter, *elcontracts.ContractBindings, error) { - avsRegistryContractBindings, err := config.buildAVSRegistryContractBindings(ethHttpClient, logger) - if err != nil { - return nil, nil, nil, err - } - - delegationManagerAddr, err := avsRegistryContractBindings.StakeRegistry.Delegation(&bind.CallOpts{}) - if err != nil { - logger.Fatal("Failed to fetch DelegationManager contract", "err", err) - } - avsDirectoryAddr, err := avsRegistryContractBindings.ServiceManager.AvsDirectory(&bind.CallOpts{}) - if err != nil { - logger.Fatal("Failed to fetch AVSDirectory contract", "err", err) - } - - elContractBindings, err := config.buildEigenLayerContractBindings( - delegationManagerAddr, - avsDirectoryAddr, - ethHttpClient, - logger, - ) - if err != nil { - return nil, nil, nil, utils.WrapError("Failed to create ContractBindings", err) - } - - // get the Reader for the EL contracts - elChainReader := elcontracts.NewELChainReader( - elContractBindings.Slasher, - elContractBindings.DelegationManager, - elContractBindings.StrategyManager, - elContractBindings.AvsDirectory, - elContractBindings.RewardsCoordinator, - logger, - ethHttpClient, - ) - - elChainWriter := elcontracts.NewELChainWriter( - elContractBindings.Slasher, - elContractBindings.DelegationManager, - elContractBindings.StrategyManager, - nil, // this is nil because we don't have access to the rewards coordinator contract right now. we are going to refactor this method later - elContractBindings.StrategyManagerAddr, - elChainReader, - ethHttpClient, - logger, - eigenMetrics, - txMgr, - ) - - return elChainReader, elChainWriter, elContractBindings, nil -} - -func (config *BuildAllConfig) BuildAVSRegistryClients( - elReader elcontracts.ELReader, - ethHttpClient eth.Client, - ethWsClient eth.Client, - txMgr txmgr.TxManager, - logger logging.Logger, -) (*avsregistry.ChainReader, *avsregistry.ChainSubscriber, *avsregistry.ChainWriter, *avsregistry.ContractBindings, error) { - - avsRegistryContractBindings, err := avsregistry.NewAVSRegistryContractBindings( - gethcommon.HexToAddress(config.RegistryCoordinatorAddr), - gethcommon.HexToAddress(config.OperatorStateRetrieverAddr), - ethHttpClient, - logger, - ) - if err != nil { - return nil, nil, nil, nil, utils.WrapError("Failed to create AVSRegistryContractBindings", err) - } - - avsRegistryChainReader := avsregistry.NewChainReader( - avsRegistryContractBindings.RegistryCoordinatorAddr, - avsRegistryContractBindings.BlsApkRegistryAddr, - avsRegistryContractBindings.RegistryCoordinator, - avsRegistryContractBindings.OperatorStateRetriever, - avsRegistryContractBindings.StakeRegistry, - logger, - ethHttpClient, - ) - - avsRegistryChainWriter, err := avsregistry.NewChainWriter( - avsRegistryContractBindings.ServiceManagerAddr, - avsRegistryContractBindings.RegistryCoordinator, - avsRegistryContractBindings.OperatorStateRetriever, - avsRegistryContractBindings.StakeRegistry, - avsRegistryContractBindings.BlsApkRegistry, - elReader, - logger, - ethHttpClient, - txMgr, - ) - if err != nil { - return nil, nil, nil, nil, utils.WrapError("Failed to create AVSRegistryChainWriter", err) - } - - // get the Subscriber for Avs Registry contracts - // note that the subscriber needs a ws connection instead of http - avsRegistrySubscriber, err := avsregistry.BuildAvsRegistryChainSubscriber( - avsRegistryContractBindings.RegistryCoordinatorAddr, - ethWsClient, - logger, - ) - if err != nil { - return nil, nil, nil, nil, utils.WrapError("Failed to create ELChainSubscriber", err) - } - - return avsRegistryChainReader, avsRegistrySubscriber, avsRegistryChainWriter, avsRegistryContractBindings, nil -} - // Very basic validation that makes sure all fields are nonempty // we might eventually want more sophisticated validation, based on regexp, // or use something like https://json-schema.org/ (?) diff --git a/chainio/clients/elcontracts/builder.go b/chainio/clients/elcontracts/builder.go index 970de2dc..d8f7265e 100644 --- a/chainio/clients/elcontracts/builder.go +++ b/chainio/clients/elcontracts/builder.go @@ -9,37 +9,37 @@ import ( func BuildClients( config Config, - ethHttpClient eth.Client, + client eth.Client, txMgr txmgr.TxManager, logger logging.Logger, eigenMetrics *metrics.EigenMetrics, -) (*ELChainReader, *ELChainWriter, *ContractBindings, error) { +) (*ChainReader, *ChainWriter, *ContractBindings, error) { elContractBindings, err := NewBindingsFromConfig( config, - ethHttpClient, + client, logger, ) if err != nil { return nil, nil, nil, err } - elChainReader := NewELChainReader( + elChainReader := NewChainReader( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, elContractBindings.AvsDirectory, logger, - ethHttpClient, + client, ) - elChainWriter := NewELChainWriter( + elChainWriter := NewChainWriter( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, elContractBindings.RewardsCoordinator, elContractBindings.StrategyManagerAddr, elChainReader, - ethHttpClient, + client, logger, eigenMetrics, txMgr, diff --git a/chainio/clients/elcontracts/reader.go b/chainio/clients/elcontracts/reader.go index d0c0c210..0a8cd752 100644 --- a/chainio/clients/elcontracts/reader.go +++ b/chainio/clients/elcontracts/reader.go @@ -22,7 +22,7 @@ import ( "github.com/Layr-Labs/eigensdk-go/utils" ) -type ELReader interface { +type Reader interface { IsOperatorRegistered(opts *bind.CallOpts, operator types.Operator) (bool, error) GetOperatorDetails(opts *bind.CallOpts, operator types.Operator) (types.Operator, error) @@ -72,20 +72,19 @@ type Config struct { RewardsCoordinatorAddress common.Address } -type ELChainReader struct { - logger logging.Logger - slasher slasher.ContractISlasherCalls - delegationManager *delegationmanager.ContractDelegationManager - strategyManager *strategymanager.ContractStrategyManager - avsDirectory *avsdirectory.ContractAVSDirectory - rewardsCoordinator *rewardscoordinator.ContractIRewardsCoordinator - ethClient eth.Client +type ChainReader struct { + logger logging.Logger + slasher slasher.ContractISlasherCalls + delegationManager *delegationmanager.ContractDelegationManager + strategyManager *strategymanager.ContractStrategyManager + avsDirectory *avsdirectory.ContractAVSDirectory + ethClient eth.Client } // forces EthReader to implement the chainio.Reader interface -var _ ELReader = (*ELChainReader)(nil) +var _ Reader = (*ChainReader)(nil) -func NewELChainReader( +func NewChainReader( slasher slasher.ContractISlasherCalls, delegationManager *delegationmanager.ContractDelegationManager, strategyManager *strategymanager.ContractStrategyManager, @@ -93,17 +92,16 @@ func NewELChainReader( rewardsCoordinator *rewardscoordinator.ContractIRewardsCoordinator, logger logging.Logger, ethClient eth.Client, -) *ELChainReader { +) *ChainReader { logger = logger.With(logging.ComponentKey, "elcontracts/reader") - return &ELChainReader{ - slasher: slasher, - delegationManager: delegationManager, - strategyManager: strategyManager, - avsDirectory: avsDirectory, - rewardsCoordinator: rewardsCoordinator, - logger: logger, - ethClient: ethClient, + return &ChainReader{ + slasher: slasher, + delegationManager: delegationManager, + strategyManager: strategyManager, + avsDirectory: avsDirectory, + logger: logger, + ethClient: ethClient, } } @@ -114,7 +112,7 @@ func BuildELChainReader( avsDirectoryAddr gethcommon.Address, ethClient eth.Client, logger logging.Logger, -) (*ELChainReader, error) { +) (*ChainReader, error) { elContractBindings, err := NewEigenlayerContractBindings( delegationManagerAddr, avsDirectoryAddr, @@ -124,7 +122,7 @@ func BuildELChainReader( if err != nil { return nil, err } - return NewELChainReader( + return NewChainReader( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, @@ -139,7 +137,7 @@ func NewReaderFromConfig( cfg Config, ethClient eth.Client, logger logging.Logger, -) (*ELChainReader, error) { +) (*ChainReader, error) { elContractBindings, err := NewBindingsFromConfig( cfg, ethClient, @@ -148,7 +146,7 @@ func NewReaderFromConfig( if err != nil { return nil, err } - return NewELChainReader( + return NewChainReader( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, @@ -159,7 +157,7 @@ func NewReaderFromConfig( ), nil } -func (r *ELChainReader) IsOperatorRegistered(opts *bind.CallOpts, operator types.Operator) (bool, error) { +func (r *ChainReader) IsOperatorRegistered(opts *bind.CallOpts, operator types.Operator) (bool, error) { if r.delegationManager == nil { return false, errors.New("DelegationManager contract not provided") } @@ -175,7 +173,7 @@ func (r *ELChainReader) IsOperatorRegistered(opts *bind.CallOpts, operator types return isOperator, nil } -func (r *ELChainReader) GetOperatorDetails(opts *bind.CallOpts, operator types.Operator) (types.Operator, error) { +func (r *ChainReader) GetOperatorDetails(opts *bind.CallOpts, operator types.Operator) (types.Operator, error) { if r.delegationManager == nil { return types.Operator{}, errors.New("DelegationManager contract not provided") } @@ -197,7 +195,7 @@ func (r *ELChainReader) GetOperatorDetails(opts *bind.CallOpts, operator types.O } // GetStrategyAndUnderlyingToken returns the strategy contract and the underlying token address -func (r *ELChainReader) GetStrategyAndUnderlyingToken( +func (r *ChainReader) GetStrategyAndUnderlyingToken( opts *bind.CallOpts, strategyAddr gethcommon.Address, ) (*strategy.ContractIStrategy, gethcommon.Address, error) { contractStrategy, err := strategy.NewContractIStrategy(strategyAddr, r.ethClient) @@ -213,7 +211,7 @@ func (r *ELChainReader) GetStrategyAndUnderlyingToken( // GetStrategyAndUnderlyingERC20Token returns the strategy contract, the erc20 bindings for the underlying token // and the underlying token address -func (r *ELChainReader) GetStrategyAndUnderlyingERC20Token( +func (r *ChainReader) GetStrategyAndUnderlyingERC20Token( opts *bind.CallOpts, strategyAddr gethcommon.Address, ) (*strategy.ContractIStrategy, erc20.ContractIERC20Methods, gethcommon.Address, error) { contractStrategy, err := strategy.NewContractIStrategy(strategyAddr, r.ethClient) @@ -231,7 +229,7 @@ func (r *ELChainReader) GetStrategyAndUnderlyingERC20Token( return contractStrategy, contractUnderlyingToken, underlyingTokenAddr, nil } -func (r *ELChainReader) ServiceManagerCanSlashOperatorUntilBlock( +func (r *ChainReader) ServiceManagerCanSlashOperatorUntilBlock( opts *bind.CallOpts, operatorAddr gethcommon.Address, serviceManagerAddr gethcommon.Address, @@ -245,7 +243,7 @@ func (r *ELChainReader) ServiceManagerCanSlashOperatorUntilBlock( ) } -func (r *ELChainReader) OperatorIsFrozen(opts *bind.CallOpts, operatorAddr gethcommon.Address) (bool, error) { +func (r *ChainReader) OperatorIsFrozen(opts *bind.CallOpts, operatorAddr gethcommon.Address) (bool, error) { if r.slasher == nil { return false, errors.New("slasher contract not provided") } @@ -253,7 +251,7 @@ func (r *ELChainReader) OperatorIsFrozen(opts *bind.CallOpts, operatorAddr gethc return r.slasher.IsFrozen(opts, operatorAddr) } -func (r *ELChainReader) GetOperatorSharesInStrategy( +func (r *ChainReader) GetOperatorSharesInStrategy( opts *bind.CallOpts, operatorAddr gethcommon.Address, strategyAddr gethcommon.Address, @@ -269,7 +267,7 @@ func (r *ELChainReader) GetOperatorSharesInStrategy( ) } -func (r *ELChainReader) CalculateDelegationApprovalDigestHash( +func (r *ChainReader) CalculateDelegationApprovalDigestHash( opts *bind.CallOpts, staker gethcommon.Address, operator gethcommon.Address, delegationApprover gethcommon.Address, approverSalt [32]byte, expiry *big.Int, ) ([32]byte, error) { @@ -282,7 +280,7 @@ func (r *ELChainReader) CalculateDelegationApprovalDigestHash( ) } -func (r *ELChainReader) CalculateOperatorAVSRegistrationDigestHash( +func (r *ChainReader) CalculateOperatorAVSRegistrationDigestHash( opts *bind.CallOpts, operator gethcommon.Address, avs gethcommon.Address, salt [32]byte, expiry *big.Int, ) ([32]byte, error) { if r.avsDirectory == nil { @@ -294,7 +292,7 @@ func (r *ELChainReader) CalculateOperatorAVSRegistrationDigestHash( ) } -func (r *ELChainReader) GetDistributionRootsLength(opts *bind.CallOpts) (*big.Int, error) { +func (r *ChainReader) GetDistributionRootsLength(opts *bind.CallOpts) (*big.Int, error) { if r.rewardsCoordinator == nil { return nil, errors.New("RewardsCoordinator contract not provided") } @@ -302,7 +300,7 @@ func (r *ELChainReader) GetDistributionRootsLength(opts *bind.CallOpts) (*big.In return r.rewardsCoordinator.GetDistributionRootsLength(opts) } -func (r *ELChainReader) CurrRewardsCalculationEndTimestamp(opts *bind.CallOpts) (uint32, error) { +func (r *ChainReader) CurrRewardsCalculationEndTimestamp(opts *bind.CallOpts) (uint32, error) { if r.rewardsCoordinator == nil { return 0, errors.New("RewardsCoordinator contract not provided") } diff --git a/chainio/clients/elcontracts/writer.go b/chainio/clients/elcontracts/writer.go index 71286ddc..4db2024f 100644 --- a/chainio/clients/elcontracts/writer.go +++ b/chainio/clients/elcontracts/writer.go @@ -23,7 +23,7 @@ import ( "github.com/Layr-Labs/eigensdk-go/types" ) -type ELWriter interface { +type Writer interface { // RegisterAsOperator registers an operator onchain. RegisterAsOperator(ctx context.Context, operator types.Operator) (*gethtypes.Receipt, error) @@ -53,35 +53,35 @@ type ELWriter interface { ) (*gethtypes.Receipt, error) } -type ELChainWriter struct { +type ChainWriter struct { slasher *slasher.ContractISlasher delegationManager *delegationmanager.ContractDelegationManager strategyManager *strategymanager.ContractStrategyManager rewardsCoordinator *rewardscoordinator.ContractIRewardsCoordinator strategyManagerAddr gethcommon.Address - elChainReader ELReader + elChainReader Reader ethClient eth.Client logger logging.Logger txMgr txmgr.TxManager } -var _ ELWriter = (*ELChainWriter)(nil) +var _ Writer = (*ChainWriter)(nil) -func NewELChainWriter( +func NewChainWriter( slasher *slasher.ContractISlasher, delegationManager *delegationmanager.ContractDelegationManager, strategyManager *strategymanager.ContractStrategyManager, rewardsCoordinator *rewardscoordinator.ContractIRewardsCoordinator, strategyManagerAddr gethcommon.Address, - elChainReader ELReader, + elChainReader Reader, ethClient eth.Client, logger logging.Logger, eigenMetrics metrics.Metrics, txMgr txmgr.TxManager, -) *ELChainWriter { +) *ChainWriter { logger = logger.With(logging.ComponentKey, "elcontracts/writer") - return &ELChainWriter{ + return &ChainWriter{ slasher: slasher, delegationManager: delegationManager, strategyManager: strategyManager, @@ -94,7 +94,7 @@ func NewELChainWriter( } } -// BuildELChainWriter builds an ELChainWriter instance. +// BuildELChainWriter builds an ChainWriter instance. // Deprecated: Use NewWriterFromConfig instead. func BuildELChainWriter( delegationManagerAddr gethcommon.Address, @@ -103,7 +103,7 @@ func BuildELChainWriter( logger logging.Logger, eigenMetrics metrics.Metrics, txMgr txmgr.TxManager, -) (*ELChainWriter, error) { +) (*ChainWriter, error) { elContractBindings, err := NewEigenlayerContractBindings( delegationManagerAddr, avsDirectoryAddr, @@ -113,7 +113,7 @@ func BuildELChainWriter( if err != nil { return nil, err } - elChainReader := NewELChainReader( + elChainReader := NewChainReader( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, @@ -122,7 +122,7 @@ func BuildELChainWriter( logger, ethClient, ) - return NewELChainWriter( + return NewChainWriter( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, @@ -142,7 +142,7 @@ func NewWriterFromConfig( logger logging.Logger, eigenMetrics metrics.Metrics, txMgr txmgr.TxManager, -) (*ELChainWriter, error) { +) (*ChainWriter, error) { elContractBindings, err := NewBindingsFromConfig( cfg, ethClient, @@ -151,7 +151,7 @@ func NewWriterFromConfig( if err != nil { return nil, err } - elChainReader := NewELChainReader( + elChainReader := NewChainReader( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, @@ -160,7 +160,7 @@ func NewWriterFromConfig( logger, ethClient, ) - return NewELChainWriter( + return NewChainWriter( elContractBindings.Slasher, elContractBindings.DelegationManager, elContractBindings.StrategyManager, @@ -174,7 +174,7 @@ func NewWriterFromConfig( ), nil } -func (w *ELChainWriter) RegisterAsOperator(ctx context.Context, operator types.Operator) (*gethtypes.Receipt, error) { +func (w *ChainWriter) RegisterAsOperator(ctx context.Context, operator types.Operator) (*gethtypes.Receipt, error) { if w.delegationManager == nil { return nil, errors.New("DelegationManager contract not provided") } @@ -203,7 +203,7 @@ func (w *ELChainWriter) RegisterAsOperator(ctx context.Context, operator types.O return receipt, nil } -func (w *ELChainWriter) UpdateOperatorDetails( +func (w *ChainWriter) UpdateOperatorDetails( ctx context.Context, operator types.Operator, ) (*gethtypes.Receipt, error) { @@ -242,7 +242,7 @@ func (w *ELChainWriter) UpdateOperatorDetails( return receipt, nil } -func (w *ELChainWriter) UpdateMetadataURI(ctx context.Context, uri string) (*gethtypes.Receipt, error) { +func (w *ChainWriter) UpdateMetadataURI(ctx context.Context, uri string) (*gethtypes.Receipt, error) { if w.delegationManager == nil { return nil, errors.New("DelegationManager contract not provided") } @@ -269,7 +269,7 @@ func (w *ELChainWriter) UpdateMetadataURI(ctx context.Context, uri string) (*get return receipt, nil } -func (w *ELChainWriter) DepositERC20IntoStrategy( +func (w *ChainWriter) DepositERC20IntoStrategy( ctx context.Context, strategyAddr gethcommon.Address, amount *big.Int, @@ -313,7 +313,7 @@ func (w *ELChainWriter) DepositERC20IntoStrategy( return receipt, nil } -func (w *ELChainWriter) SetClaimerFor( +func (w *ChainWriter) SetClaimerFor( ctx context.Context, claimer gethcommon.Address, ) (*gethtypes.Receipt, error) { diff --git a/metrics/collectors/economic/economic.go b/metrics/collectors/economic/economic.go index 89fd7cdc..533e4d37 100644 --- a/metrics/collectors/economic/economic.go +++ b/metrics/collectors/economic/economic.go @@ -25,7 +25,7 @@ import ( // so that they are exported on the same port type Collector struct { // TODO(samlaf): we use a chain as the backend for now, but should eventually move to a subgraph - elReader elcontracts.ELReader + elReader elcontracts.Reader avsRegistryReader avsregistry.Reader logger logging.Logger // params to query the metrics for @@ -62,7 +62,7 @@ type Collector struct { var _ prometheus.Collector = (*Collector)(nil) func NewCollector( - elReader elcontracts.ELReader, avsRegistryReader avsregistry.Reader, + elReader elcontracts.Reader, avsRegistryReader avsregistry.Reader, avsName string, logger logging.Logger, operatorAddr common.Address, quorumNames map[types.QuorumNum]string, ) *Collector { From d89633a393348a3d5b92d20627c88b180d62c294 Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Mon, 1 Jul 2024 20:57:18 -0700 Subject: [PATCH 3/7] fix mocks and subscribers --- chainio/clients/avsregistry/builder.go | 12 ++++++++---- chainio/clients/avsregistry/subscriber.go | 9 +++++++-- chainio/clients/builder.go | 1 + chainio/gen.go | 4 ++-- chainio/mocks/elContractsReader.go | 6 +++--- chainio/mocks/elContractsWriter.go | 6 +++--- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/chainio/clients/avsregistry/builder.go b/chainio/clients/avsregistry/builder.go index 6faf9589..81787f1f 100644 --- a/chainio/clients/avsregistry/builder.go +++ b/chainio/clients/avsregistry/builder.go @@ -10,6 +10,7 @@ import ( func BuildClients( config Config, client eth.Client, + wsClient eth.Client, txMgr txmgr.TxManager, logger logging.Logger, ) (*ChainReader, *ChainSubscriber, *ChainWriter, *ContractBindings, error) { @@ -33,13 +34,16 @@ func BuildClients( client, ) - chainSubscriber := NewChainSubscriber( - avsBindings.RegistryCoordinator, - avsBindings.BlsApkRegistry, + chainSubscriber, err := NewSubscriberFromConfig( + config, + wsClient, logger, ) + if err != nil { + return nil, nil, nil, nil, err + } - // This is ugly but we need elReader to be able to create the AVS writer + // This is ugly, but we need elReader to be able to create the AVS writer elChainReader, err := elcontracts.NewReaderFromConfig( elcontracts.Config{ DelegationManagerAddress: avsBindings.DelegationManagerAddr, diff --git a/chainio/clients/avsregistry/subscriber.go b/chainio/clients/avsregistry/subscriber.go index 24ffb73e..3d86924b 100644 --- a/chainio/clients/avsregistry/subscriber.go +++ b/chainio/clients/avsregistry/subscriber.go @@ -26,6 +26,8 @@ type ChainSubscriber struct { // forces EthSubscriber to implement the chainio.Subscriber interface var _ Subscriber = (*ChainSubscriber)(nil) +// NewChainSubscriber creates a new instance of ChainSubscriber +// The bindings must be created using websocket ETH Client func NewChainSubscriber( regCoord regcoord.ContractRegistryCoordinatorFilters, blsApkRegistry blsapkreg.ContractBLSApkRegistryFilters, @@ -40,6 +42,8 @@ func NewChainSubscriber( } } +// BuildAvsRegistryChainSubscriber creates a new instance of ChainSubscriber +// Deprecated: Use NewSubscriberFromConfig instead func BuildAvsRegistryChainSubscriber( regCoordAddr common.Address, ethWsClient eth.Client, @@ -60,12 +64,13 @@ func BuildAvsRegistryChainSubscriber( return NewChainSubscriber(regCoord, blsApkReg, logger), nil } +// NewSubscriberFromConfig creates a new instance of ChainSubscriber func NewSubscriberFromConfig( cfg Config, - ethClient eth.Client, + wsClient eth.Client, logger logging.Logger, ) (*ChainSubscriber, error) { - bindings, err := NewBindingsFromConfig(cfg, ethClient, logger) + bindings, err := NewBindingsFromConfig(cfg, wsClient, logger) if err != nil { return nil, err } diff --git a/chainio/clients/builder.go b/chainio/clients/builder.go index c5836f7a..c3f4b320 100644 --- a/chainio/clients/builder.go +++ b/chainio/clients/builder.go @@ -95,6 +95,7 @@ func BuildAll( OperatorStateRetrieverAddress: gethcommon.HexToAddress(config.OperatorStateRetrieverAddr), }, ethHttpClient, + ethWsClient, txMgr, logger, ) diff --git a/chainio/gen.go b/chainio/gen.go index a34ae1e6..e80ef40b 100644 --- a/chainio/gen.go +++ b/chainio/gen.go @@ -3,8 +3,8 @@ package chainio //go:generate mockgen -destination=./mocks/avsRegistryContractsReader.go -package=mocks -mock_names=Reader=MockAVSReader github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry Reader //go:generate mockgen -destination=./mocks/avsRegistryContractsSubscriber.go -package=mocks -mock_names=Subscriber=MockAVSSubscriber github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry Subscriber //go:generate mockgen -destination=./mocks/avsRegistryContractsWriter.go -package=mocks -mock_names=Writer=MockAVSWriter github.com/Layr-Labs/eigensdk-go/chainio/clients/avsregistry Writer -//go:generate mockgen -destination=./mocks/elContractsReader.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts ELReader -//go:generate mockgen -destination=./mocks/elContractsWriter.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts ELWriter +//go:generate mockgen -destination=./mocks/elContractsReader.go -package=mocks -mock_names=Reader=MockELReader github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts Reader +//go:generate mockgen -destination=./mocks/elContractsWriter.go -package=mocks -mock_names=Writer=MockELWriter github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts Writer //go:generate mockgen -destination=./mocks/ethclient.go -package=mocks -mock_names=Client=MockEthClient github.com/Layr-Labs/eigensdk-go/chainio/clients/eth Client //go:generate mockgen -destination=./mocks/eventSubscription.go -package=mocks github.com/ethereum/go-ethereum/event Subscription //go:generate mockgen -destination=./clients/mocks/fireblocks.go -package=mocks -mock_names=Client=MockFireblocksClient github.com/Layr-Labs/eigensdk-go/chainio/clients/fireblocks Client diff --git a/chainio/mocks/elContractsReader.go b/chainio/mocks/elContractsReader.go index d8078172..80752896 100644 --- a/chainio/mocks/elContractsReader.go +++ b/chainio/mocks/elContractsReader.go @@ -1,9 +1,9 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts (interfaces: ELReader) +// Source: github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts (interfaces: Reader) // // Generated by this command: // -// mockgen -destination=./mocks/elContractsReader.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts ELReader +// mockgen -destination=./mocks/elContractsReader.go -package=mocks -mock_names=Reader=MockELReader github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts Reader // // Package mocks is a generated GoMock package. @@ -21,7 +21,7 @@ import ( gomock "go.uber.org/mock/gomock" ) -// MockELReader is a mock of ELReader interface. +// MockELReader is a mock of Reader interface. type MockELReader struct { ctrl *gomock.Controller recorder *MockELReaderMockRecorder diff --git a/chainio/mocks/elContractsWriter.go b/chainio/mocks/elContractsWriter.go index b4c1c982..c4e65b3d 100644 --- a/chainio/mocks/elContractsWriter.go +++ b/chainio/mocks/elContractsWriter.go @@ -1,9 +1,9 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts (interfaces: ELWriter) +// Source: github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts (interfaces: Writer) // // Generated by this command: // -// mockgen -destination=./mocks/elContractsWriter.go -package=mocks github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts ELWriter +// mockgen -destination=./mocks/elContractsWriter.go -package=mocks -mock_names=Writer=MockELWriter github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts Writer // // Package mocks is a generated GoMock package. @@ -21,7 +21,7 @@ import ( gomock "go.uber.org/mock/gomock" ) -// MockELWriter is a mock of ELWriter interface. +// MockELWriter is a mock of Writer interface. type MockELWriter struct { ctrl *gomock.Controller recorder *MockELWriterMockRecorder From 8e276d3f709d496ec77fd917c8e8b9a02990f5bf Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Mon, 1 Jul 2024 21:32:01 -0700 Subject: [PATCH 4/7] add comment --- chainio/clients/avsregistry/subscriber.go | 1 + 1 file changed, 1 insertion(+) diff --git a/chainio/clients/avsregistry/subscriber.go b/chainio/clients/avsregistry/subscriber.go index 3d86924b..26f3dde2 100644 --- a/chainio/clients/avsregistry/subscriber.go +++ b/chainio/clients/avsregistry/subscriber.go @@ -65,6 +65,7 @@ func BuildAvsRegistryChainSubscriber( } // NewSubscriberFromConfig creates a new instance of ChainSubscriber +// A websocket ETH Client must be provided func NewSubscriberFromConfig( cfg Config, wsClient eth.Client, From 8bcfb024712ec8b186263d8bb7c18911069350d7 Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Tue, 2 Jul 2024 09:43:47 -0700 Subject: [PATCH 5/7] fix the test because I screwed up --- chainio/clients/avsregistry/bindings.go | 18 ++++++++---------- services/bls_aggregation/blsagg.go | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/chainio/clients/avsregistry/bindings.go b/chainio/clients/avsregistry/bindings.go index dedc3d1a..043f6f02 100644 --- a/chainio/clients/avsregistry/bindings.go +++ b/chainio/clients/avsregistry/bindings.go @@ -130,14 +130,12 @@ func NewBindingsFromConfig( var ( err error - serviceManagerAddr gethcommon.Address - registryCoordinatorAddr gethcommon.Address - stakeRegistryAddr gethcommon.Address - blsApkRegistryAddr gethcommon.Address - indexRegistryAddr gethcommon.Address - operatorStateRetrieverAddr gethcommon.Address - delegationManagerAddr gethcommon.Address - avsDirectoryAddr gethcommon.Address + serviceManagerAddr gethcommon.Address + stakeRegistryAddr gethcommon.Address + blsApkRegistryAddr gethcommon.Address + indexRegistryAddr gethcommon.Address + delegationManagerAddr gethcommon.Address + avsDirectoryAddr gethcommon.Address contractBlsRegistryCoordinator *regcoordinator.ContractRegistryCoordinator contractServiceManager *servicemanager.ContractServiceManagerBase @@ -228,11 +226,11 @@ func NewBindingsFromConfig( return &ContractBindings{ ServiceManagerAddr: serviceManagerAddr, - RegistryCoordinatorAddr: registryCoordinatorAddr, + RegistryCoordinatorAddr: cfg.RegistryCoordinatorAddress, StakeRegistryAddr: stakeRegistryAddr, BlsApkRegistryAddr: blsApkRegistryAddr, IndexRegistryAddr: indexRegistryAddr, - OperatorStateRetrieverAddr: operatorStateRetrieverAddr, + OperatorStateRetrieverAddr: cfg.OperatorStateRetrieverAddress, DelegationManagerAddr: delegationManagerAddr, AvsDirectoryAddr: avsDirectoryAddr, ServiceManager: contractServiceManager, diff --git a/services/bls_aggregation/blsagg.go b/services/bls_aggregation/blsagg.go index 57abe8bc..83525be5 100644 --- a/services/bls_aggregation/blsagg.go +++ b/services/bls_aggregation/blsagg.go @@ -229,13 +229,13 @@ func (a *BlsAggregatorService) singleTaskAggregatorGoroutineFunc( signedTaskRespsC <-chan types.SignedTaskResponseDigest, ) { defer a.closeTaskGoroutine(taskIndex) - quorumThresholdPercentagesMap := make(map[types.QuorumNum]types.QuorumThresholdPercentage) for i, quorumNumber := range quorumNumbers { quorumThresholdPercentagesMap[quorumNumber] = quorumThresholdPercentages[i] } operatorsAvsStateDict, err := a.avsRegistryService.GetOperatorsAvsStateAtBlock(context.Background(), quorumNumbers, taskCreatedBlock) if err != nil { + a.logger.Debug("Task goroutine failed to get operators state from avs registry", "taskIndex", taskIndex, "err", err) a.aggregatedResponsesC <- BlsAggregationServiceResponse{ Err: TaskInitializationErrorFn(fmt.Errorf("AggregatorService failed to get operators state from avs registry at blockNum %d: %w", taskCreatedBlock, err), taskIndex), TaskIndex: taskIndex, From a44a63250fb0a060f703335fb2f6ec34a8e201ed Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Tue, 2 Jul 2024 10:11:22 -0700 Subject: [PATCH 6/7] add error logs --- services/bls_aggregation/blsagg.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/bls_aggregation/blsagg.go b/services/bls_aggregation/blsagg.go index 83525be5..bdab6691 100644 --- a/services/bls_aggregation/blsagg.go +++ b/services/bls_aggregation/blsagg.go @@ -235,7 +235,7 @@ func (a *BlsAggregatorService) singleTaskAggregatorGoroutineFunc( } operatorsAvsStateDict, err := a.avsRegistryService.GetOperatorsAvsStateAtBlock(context.Background(), quorumNumbers, taskCreatedBlock) if err != nil { - a.logger.Debug("Task goroutine failed to get operators state from avs registry", "taskIndex", taskIndex, "err", err) + a.logger.Error("Task goroutine failed to get operators state from avs registry", "taskIndex", taskIndex, "err", err) a.aggregatedResponsesC <- BlsAggregationServiceResponse{ Err: TaskInitializationErrorFn(fmt.Errorf("AggregatorService failed to get operators state from avs registry at blockNum %d: %w", taskCreatedBlock, err), taskIndex), TaskIndex: taskIndex, @@ -244,6 +244,7 @@ func (a *BlsAggregatorService) singleTaskAggregatorGoroutineFunc( } quorumsAvsStakeDict, err := a.avsRegistryService.GetQuorumsAvsStateAtBlock(context.Background(), quorumNumbers, taskCreatedBlock) if err != nil { + a.logger.Error("Task goroutine failed to get quorums state from avs registry", "taskIndex", taskIndex, "err", err) a.aggregatedResponsesC <- BlsAggregationServiceResponse{ Err: TaskInitializationErrorFn(fmt.Errorf("Aggregator failed to get quorums state from avs registry: %w", err), taskIndex), TaskIndex: taskIndex, From 47bcb7c75cd1004017bbd35b3121dbad121863eb Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Tue, 2 Jul 2024 22:04:24 -0700 Subject: [PATCH 7/7] conflicts --- chainio/clients/elcontracts/builder.go | 1 + chainio/clients/elcontracts/reader.go | 26 ++++++++++++++------------ chainio/clients/elcontracts/writer.go | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/chainio/clients/elcontracts/builder.go b/chainio/clients/elcontracts/builder.go index d8f7265e..ba966d6c 100644 --- a/chainio/clients/elcontracts/builder.go +++ b/chainio/clients/elcontracts/builder.go @@ -28,6 +28,7 @@ func BuildClients( elContractBindings.DelegationManager, elContractBindings.StrategyManager, elContractBindings.AvsDirectory, + elContractBindings.RewardsCoordinator, logger, client, ) diff --git a/chainio/clients/elcontracts/reader.go b/chainio/clients/elcontracts/reader.go index 0a8cd752..05db2c30 100644 --- a/chainio/clients/elcontracts/reader.go +++ b/chainio/clients/elcontracts/reader.go @@ -73,12 +73,13 @@ type Config struct { } type ChainReader struct { - logger logging.Logger - slasher slasher.ContractISlasherCalls - delegationManager *delegationmanager.ContractDelegationManager - strategyManager *strategymanager.ContractStrategyManager - avsDirectory *avsdirectory.ContractAVSDirectory - ethClient eth.Client + logger logging.Logger + slasher slasher.ContractISlasherCalls + delegationManager *delegationmanager.ContractDelegationManager + strategyManager *strategymanager.ContractStrategyManager + avsDirectory *avsdirectory.ContractAVSDirectory + rewardsCoordinator *rewardscoordinator.ContractIRewardsCoordinator + ethClient eth.Client } // forces EthReader to implement the chainio.Reader interface @@ -96,12 +97,13 @@ func NewChainReader( logger = logger.With(logging.ComponentKey, "elcontracts/reader") return &ChainReader{ - slasher: slasher, - delegationManager: delegationManager, - strategyManager: strategyManager, - avsDirectory: avsDirectory, - logger: logger, - ethClient: ethClient, + slasher: slasher, + delegationManager: delegationManager, + strategyManager: strategyManager, + avsDirectory: avsDirectory, + rewardsCoordinator: rewardsCoordinator, + logger: logger, + ethClient: ethClient, } } diff --git a/chainio/clients/elcontracts/writer.go b/chainio/clients/elcontracts/writer.go index 4db2024f..c426c258 100644 --- a/chainio/clients/elcontracts/writer.go +++ b/chainio/clients/elcontracts/writer.go @@ -338,7 +338,7 @@ func (w *ChainWriter) SetClaimerFor( return receipt, nil } -func (w *ELChainWriter) ProcessClaim( +func (w *ChainWriter) ProcessClaim( ctx context.Context, claim rewardscoordinator.IRewardsCoordinatorRewardsMerkleClaim, earnerAddress gethcommon.Address,