diff --git a/pkg/internal/common/helper.go b/pkg/internal/common/helper.go index 12c8293..9c87058 100644 --- a/pkg/internal/common/helper.go +++ b/pkg/internal/common/helper.go @@ -419,11 +419,16 @@ func IsEmptyString(s string) bool { func GetLogger(cCtx *cli.Context) eigensdkLogger.Logger { verbose := cCtx.Bool(flags.VerboseFlag.Name) - logLevel := slog.LevelInfo + loggerOptions := &eigensdkLogger.SLoggerOptions{ + Level: slog.LevelInfo, + } if verbose { - logLevel = slog.LevelDebug + loggerOptions = &eigensdkLogger.SLoggerOptions{ + Level: slog.LevelDebug, + AddSource: true, + } } - logger := eigensdkLogger.NewTextSLogger(os.Stdout, &eigensdkLogger.SLoggerOptions{Level: logLevel}) + logger := eigensdkLogger.NewTextSLogger(os.Stdout, loggerOptions) return logger } diff --git a/pkg/rewards/README.md b/pkg/rewards/README.md index 870a4f5..73f8cda 100644 --- a/pkg/rewards/README.md +++ b/pkg/rewards/README.md @@ -11,7 +11,8 @@ USAGE: OPTIONS: --broadcast, -b Use this flag to broadcast the transaction (default: false) [$BROADCAST] - --claim-timestamp value, -c value Specify the timestamp. Only 'latest' and 'latest_active' are supported (default: "latest") [$CLAIM_TIMESTAMP] + --claim-timestamp value, -c value Specify the timestamp. Only 'latest' and 'latest_active' are supported. 'latest' can be an inactive root which you can't claim yet. (default: "latest_active") [$CLAIM_TIMESTAMP] + --claimer-address value, -a value Address of the claimer [$REWARDS_CLAIMER_ADDRESS] --earner-address value, --ea value Address of the earner [$REWARDS_EARNER_ADDRESS] --ecdsa-private-key value, -e value ECDSA private key hex to send transaction [$ECDSA_PRIVATE_KEY] --environment value, --env value Environment to use. Currently supports 'preprod' ,'testnet' and 'prod'. If not provided, it will be inferred based on network [$ENVIRONMENT] @@ -78,7 +79,7 @@ DESCRIPTION: OPTIONS: --broadcast, -b Use this flag to broadcast the transaction (default: false) [$BROADCAST] - --claimer-address value, -a value Address of the claimer [$NODE_OPERATOR_CLAIMER_ADDRESS] + --claimer-address value, -a value Address of the claimer [$REWARDS_CLAIMER_ADDRESS] --earner-address value, --ea value Address of the earner [$REWARDS_EARNER_ADDRESS] --ecdsa-private-key value, -e value ECDSA private key hex to send transaction [$ECDSA_PRIVATE_KEY] --eth-rpc-url value, -r value URL of the Ethereum RPC [$ETH_RPC_URL] diff --git a/pkg/rewards/claim.go b/pkg/rewards/claim.go index 85603cb..9ac2233 100644 --- a/pkg/rewards/claim.go +++ b/pkg/rewards/claim.go @@ -41,6 +41,7 @@ type ClaimConfig struct { RPCUrl string EarnerAddress gethcommon.Address RecipientAddress gethcommon.Address + ClaimerAddress gethcommon.Address Output string OutputType string Broadcast bool @@ -78,6 +79,7 @@ func getClaimFlags() []cli.Flag { &EnvironmentFlag, &RecipientAddressFlag, &TokenAddressesFlag, + &ClaimerAddressFlag, &RewardsCoordinatorAddressFlag, &ClaimTimestampFlag, &ProofStoreBaseURLFlag, @@ -161,7 +163,7 @@ func Claim(cCtx *cli.Context, p utils.Prompter) error { logger.Info("Broadcasting claim...") keyWallet, sender, err := common.GetWallet( *config.SignerConfig, - config.EarnerAddress.String(), + config.ClaimerAddress.String(), ethClient, p, *config.ChainID, @@ -194,7 +196,7 @@ func Claim(cCtx *cli.Context, p utils.Prompter) error { logger.Infof("Claim transaction submitted successfully") common.PrintTransactionInfo(receipt.TxHash.String(), config.ChainID) } else { - noSendTxOpts := common.GetNoSendTxOpts(config.EarnerAddress) + noSendTxOpts := common.GetNoSendTxOpts(config.ClaimerAddress) _, _, contractBindings, err := elcontracts.BuildClients(elcontracts.Config{ RewardsCoordinatorAddress: config.RewardsCoordinatorAddress, }, ethClient, nil, logger, nil) @@ -204,7 +206,7 @@ func Claim(cCtx *cli.Context, p utils.Prompter) error { unsignedTx, err := contractBindings.RewardsCoordinator.ProcessClaim(noSendTxOpts, elClaim, config.RecipientAddress) if err != nil { - return err + return eigenSdkUtils.WrapError("failed to create unsigned tx", err) } if config.OutputType == string(common.OutputType_Calldata) { calldataHex := gethcommon.Bytes2Hex(unsignedTx.Data()) @@ -345,6 +347,16 @@ func readAndValidateClaimConfig(cCtx *cli.Context, logger logging.Logger) (*Clai } logger.Infof("Using rewards recipient address: %s", recipientAddress.String()) + claimerAddress := gethcommon.HexToAddress(cCtx.String(ClaimerAddressFlag.Name)) + if claimerAddress == utils.ZeroAddress { + logger.Infof( + "Claimer address not provided, using earner address (%s) as claimer address", + earnerAddress.String(), + ) + claimerAddress = earnerAddress + } + logger.Infof("Using rewards claimer address: %s", claimerAddress.String()) + chainID := utils.NetworkNameToChainId(network) logger.Debugf("Using chain ID: %s", chainID.String()) @@ -394,6 +406,7 @@ func readAndValidateClaimConfig(cCtx *cli.Context, logger logging.Logger) (*Clai RecipientAddress: recipientAddress, SignerConfig: signerConfig, ClaimTimestamp: claimTimestamp, + ClaimerAddress: claimerAddress, }, nil } diff --git a/pkg/rewards/flags.go b/pkg/rewards/flags.go index 9f3185a..13e3061 100644 --- a/pkg/rewards/flags.go +++ b/pkg/rewards/flags.go @@ -51,8 +51,8 @@ var ( Name: "claimer-address", Aliases: []string{"a"}, Usage: "Address of the claimer", - Required: true, - EnvVars: []string{"NODE_OPERATOR_CLAIMER_ADDRESS"}, + Required: false, + EnvVars: []string{"REWARDS_CLAIMER_ADDRESS"}, } EarnerAddressFlag = cli.StringFlag{ diff --git a/pkg/rewards/setclaimer.go b/pkg/rewards/setclaimer.go index 8d5b69b..629e42c 100644 --- a/pkg/rewards/setclaimer.go +++ b/pkg/rewards/setclaimer.go @@ -131,6 +131,10 @@ 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(), @@ -191,6 +195,10 @@ func readAndValidateSetClaimerConfig(cCtx *cli.Context, logger logging.Logger) ( earnerAddress := gethcommon.HexToAddress(cCtx.String(EarnerAddressFlag.Name)) broadcast := cCtx.Bool(flags.BroadcastFlag.Name) claimerAddress := cCtx.String(ClaimerAddressFlag.Name) + if common.IsEmptyString(claimerAddress) { + return nil, fmt.Errorf("claimer address is required") + } + rewardsCoordinatorAddress := cCtx.String(RewardsCoordinatorAddressFlag.Name) var err error if common.IsEmptyString(rewardsCoordinatorAddress) {