diff --git a/pkg/internal/common/contracts.go b/pkg/internal/common/contracts.go new file mode 100644 index 0000000..b6adf13 --- /dev/null +++ b/pkg/internal/common/contracts.go @@ -0,0 +1,59 @@ +package common + +import ( + "errors" + "math/big" + + "github.com/Layr-Labs/eigenlayer-cli/pkg/types" + "github.com/Layr-Labs/eigenlayer-cli/pkg/utils" + + "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" + "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" + eigensdkLogger "github.com/Layr-Labs/eigensdk-go/logging" + eigenMetrics "github.com/Layr-Labs/eigensdk-go/metrics" + eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils" + + gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethclient" +) + +func GetELWriter( + signerAddress gethcommon.Address, + signerConfig *types.SignerConfig, + ethClient *ethclient.Client, + contractConfig elcontracts.Config, + prompter utils.Prompter, + chainId *big.Int, + logger eigensdkLogger.Logger, +) (*elcontracts.ChainWriter, error) { + if signerConfig == nil { + return nil, errors.New("signer is required for broadcasting") + } + logger.Debug("Getting Writer from config") + keyWallet, sender, err := getWallet( + *signerConfig, + signerAddress.String(), + ethClient, + prompter, + *chainId, + logger, + ) + if err != nil { + return nil, eigenSdkUtils.WrapError("failed to get wallet", err) + } + + txMgr := txmgr.NewSimpleTxManager(keyWallet, ethClient, logger, sender) + noopMetrics := eigenMetrics.NewNoopMetrics() + eLWriter, err := elcontracts.NewWriterFromConfig( + contractConfig, + ethClient, + logger, + noopMetrics, + txMgr, + ) + if err != nil { + return nil, eigenSdkUtils.WrapError("failed to create new writer from config", err) + } + + return eLWriter, nil +} diff --git a/pkg/internal/common/helper.go b/pkg/internal/common/helper.go index 9c87058..374c29b 100644 --- a/pkg/internal/common/helper.go +++ b/pkg/internal/common/helper.go @@ -51,7 +51,7 @@ func PrintTransactionInfo(txHash string, chainId *big.Int) { } } -func GetWallet( +func getWallet( cfg types.SignerConfig, signerAddress string, ethClient *ethclient.Client, diff --git a/pkg/operator/register.go b/pkg/operator/register.go index f62a10f..964649a 100644 --- a/pkg/operator/register.go +++ b/pkg/operator/register.go @@ -11,8 +11,7 @@ import ( "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" elContracts "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" - "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" - eigenMetrics "github.com/Layr-Labs/eigensdk-go/metrics" + eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils" "github.com/ethereum/go-ethereum/accounts/abi/bind" gethcommon "github.com/ethereum/go-ethereum/common" @@ -64,27 +63,23 @@ func RegisterCmd(p utils.Prompter) *cli.Command { return err } - keyWallet, sender, err := common.GetWallet( - operatorCfg.SignerConfig, - operatorCfg.Operator.Address, + contractCfg := elcontracts.Config{ + DelegationManagerAddress: gethcommon.HexToAddress(operatorCfg.ELDelegationManagerAddress), + AvsDirectoryAddress: gethcommon.HexToAddress(operatorCfg.ELAVSDirectoryAddress), + } + + elWriter, err := common.GetELWriter( + gethcommon.HexToAddress(operatorCfg.Operator.Address), + &operatorCfg.SignerConfig, ethClient, + contractCfg, p, - operatorCfg.ChainId, + &operatorCfg.ChainId, logger, ) - if err != nil { - return err - } - txMgr := txmgr.NewSimpleTxManager(keyWallet, ethClient, logger, sender) - noopMetrics := eigenMetrics.NewNoopMetrics() - contractCfg := elcontracts.Config{ - DelegationManagerAddress: gethcommon.HexToAddress(operatorCfg.ELDelegationManagerAddress), - AvsDirectoryAddress: gethcommon.HexToAddress(operatorCfg.ELAVSDirectoryAddress), - } - elWriter, err := elcontracts.NewWriterFromConfig(contractCfg, ethClient, logger, noopMetrics, txMgr) if err != nil { - return err + return eigenSdkUtils.WrapError("failed to get EL writer", err) } elReader, err := elContracts.NewReaderFromConfig( diff --git a/pkg/operator/update.go b/pkg/operator/update.go index 2325e8f..50528cc 100644 --- a/pkg/operator/update.go +++ b/pkg/operator/update.go @@ -10,8 +10,7 @@ import ( "github.com/Layr-Labs/eigenlayer-cli/pkg/utils" "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" - "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" - eigenMetrics "github.com/Layr-Labs/eigensdk-go/metrics" + eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" @@ -63,27 +62,23 @@ This command only updates above details. To update metadata URI, use eigenlayer return err } - keyWallet, sender, err := common.GetWallet( - operatorCfg.SignerConfig, - operatorCfg.Operator.Address, + contractCfg := elcontracts.Config{ + DelegationManagerAddress: gethcommon.HexToAddress(operatorCfg.ELDelegationManagerAddress), + AvsDirectoryAddress: gethcommon.HexToAddress(operatorCfg.ELAVSDirectoryAddress), + } + + elWriter, err := common.GetELWriter( + gethcommon.HexToAddress(operatorCfg.Operator.Address), + &operatorCfg.SignerConfig, ethClient, + contractCfg, p, - operatorCfg.ChainId, + &operatorCfg.ChainId, logger, ) - if err != nil { - return err - } - txMgr := txmgr.NewSimpleTxManager(keyWallet, ethClient, logger, sender) - noopMetrics := eigenMetrics.NewNoopMetrics() - contractCfg := elcontracts.Config{ - DelegationManagerAddress: gethcommon.HexToAddress(operatorCfg.ELDelegationManagerAddress), - AvsDirectoryAddress: gethcommon.HexToAddress(operatorCfg.ELAVSDirectoryAddress), - } - elWriter, err := elcontracts.NewWriterFromConfig(contractCfg, ethClient, logger, noopMetrics, txMgr) if err != nil { - return err + return eigenSdkUtils.WrapError("failed to get EL writer", err) } receipt, err := elWriter.UpdateOperatorDetails(context.Background(), operatorCfg.Operator, true) diff --git a/pkg/operator/update_metadata_uri.go b/pkg/operator/update_metadata_uri.go index fea1c09..b858801 100644 --- a/pkg/operator/update_metadata_uri.go +++ b/pkg/operator/update_metadata_uri.go @@ -10,8 +10,7 @@ import ( "github.com/Layr-Labs/eigenlayer-cli/pkg/utils" "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" - "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" - eigenMetrics "github.com/Layr-Labs/eigensdk-go/metrics" + eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" @@ -59,31 +58,23 @@ Requires the same file used for registration as argument return err } - keyWallet, sender, err := common.GetWallet( - operatorCfg.SignerConfig, - operatorCfg.Operator.Address, - ethClient, - p, - operatorCfg.ChainId, - logger, - ) - if err != nil { - return err - } - - txMgr := txmgr.NewSimpleTxManager(keyWallet, ethClient, logger, sender) - noopMetrics := eigenMetrics.NewNoopMetrics() contractCfg := elcontracts.Config{ DelegationManagerAddress: gethcommon.HexToAddress(operatorCfg.ELDelegationManagerAddress), AvsDirectoryAddress: gethcommon.HexToAddress(operatorCfg.ELAVSDirectoryAddress), } - elWriter, err := elcontracts.NewWriterFromConfig(contractCfg, ethClient, logger, noopMetrics, txMgr) - if err != nil { - return err - } + + elWriter, err := common.GetELWriter( + gethcommon.HexToAddress(operatorCfg.Operator.Address), + &operatorCfg.SignerConfig, + ethClient, + contractCfg, + p, + &operatorCfg.ChainId, + logger, + ) if err != nil { - return err + return eigenSdkUtils.WrapError("failed to get EL writer", err) } receipt, err := elWriter.UpdateMetadataURI(context.Background(), operatorCfg.Operator.MetadataUrl, true) diff --git a/pkg/rewards/claim.go b/pkg/rewards/claim.go index 7d8748b..4c3e541 100644 --- a/pkg/rewards/claim.go +++ b/pkg/rewards/claim.go @@ -22,10 +22,8 @@ import ( "github.com/Layr-Labs/eigenlayer-rewards-proofs/pkg/proofDataFetcher/httpProofDataFetcher" "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" - "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" rewardscoordinator "github.com/Layr-Labs/eigensdk-go/contracts/bindings/IRewardsCoordinator" "github.com/Layr-Labs/eigensdk-go/logging" - eigenMetrics "github.com/Layr-Labs/eigensdk-go/metrics" eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -147,37 +145,23 @@ func Claim(cCtx *cli.Context, p utils.Prompter) error { } if config.Broadcast { - if config.SignerConfig == nil { - return errors.New("signer is required for broadcasting") - } - logger.Info("Broadcasting claim...") - keyWallet, sender, err := common.GetWallet( - *config.SignerConfig, - config.ClaimerAddress.String(), + eLWriter, err := common.GetELWriter( + config.ClaimerAddress, + config.SignerConfig, ethClient, - p, - *config.ChainID, - logger, - ) - if err != nil { - return eigenSdkUtils.WrapError("failed to get wallet", err) - } - - txMgr := txmgr.NewSimpleTxManager(keyWallet, ethClient, logger, sender) - noopMetrics := eigenMetrics.NewNoopMetrics() - eLWriter, err := elcontracts.NewWriterFromConfig( elcontracts.Config{ RewardsCoordinatorAddress: config.RewardsCoordinatorAddress, }, - ethClient, + p, + config.ChainID, logger, - noopMetrics, - txMgr, ) + if err != nil { - return eigenSdkUtils.WrapError("failed to create new writer from config", err) + return eigenSdkUtils.WrapError("failed to get EL writer", err) } + logger.Infof("Broadcasting claim transaction...") receipt, err := eLWriter.ProcessClaim(ctx, elClaim, config.RecipientAddress, true) if err != nil { return eigenSdkUtils.WrapError("failed to process claim", err) diff --git a/pkg/rewards/setclaimer.go b/pkg/rewards/setclaimer.go index 829c5c2..a935b32 100644 --- a/pkg/rewards/setclaimer.go +++ b/pkg/rewards/setclaimer.go @@ -5,16 +5,15 @@ import ( "fmt" "sort" + eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils" + "github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common" "github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common/flags" "github.com/Layr-Labs/eigenlayer-cli/pkg/telemetry" "github.com/Layr-Labs/eigenlayer-cli/pkg/utils" "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts" - "github.com/Layr-Labs/eigensdk-go/chainio/txmgr" "github.com/Layr-Labs/eigensdk-go/logging" - eigenMetrics "github.com/Layr-Labs/eigensdk-go/metrics" - gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" @@ -116,39 +115,20 @@ func SetClaimer(cCtx *cli.Context, p utils.Prompter) error { return nil } - if config.SignerConfig == nil { - return fmt.Errorf("signer config is required to broadcast the transaction") - } - - keyWallet, sender, err := common.GetWallet( - *config.SignerConfig, - config.EarnerAddress.Hex(), + elWriter, err := common.GetELWriter( + config.EarnerAddress, + config.SignerConfig, ethClient, + elcontracts.Config{ + RewardsCoordinatorAddress: config.RewardsCoordinatorAddress, + }, p, - *config.ChainID, + config.ChainID, logger, ) - if err != nil { - return err - } - - if sender != config.EarnerAddress { - return fmt.Errorf( - "signer address(%s) and earner addresses(%s) do not match", - sender.String(), - config.EarnerAddress.String(), - ) - } - txMgr := txmgr.NewSimpleTxManager(keyWallet, ethClient, logger, sender) - noopMetrics := eigenMetrics.NewNoopMetrics() - contractCfg := elcontracts.Config{ - RewardsCoordinatorAddress: config.RewardsCoordinatorAddress, - } - - elWriter, err := elcontracts.NewWriterFromConfig(contractCfg, ethClient, logger, noopMetrics, txMgr) if err != nil { - return err + return eigenSdkUtils.WrapError("failed to get EL writer", err) } receipt, err := elWriter.SetClaimerFor(context.Background(), config.ClaimerAddress, true)