Skip to content

Commit

Permalink
feat: Show Rewards command (#158)
Browse files Browse the repository at this point in the history
* init rewards show commit

* show rewards cmd

* show command impl

* fix signer bug
  • Loading branch information
shrimalmadhur authored Jul 12, 2024
1 parent 2c23f96 commit f2ec537
Show file tree
Hide file tree
Showing 11 changed files with 405 additions and 23 deletions.
3 changes: 3 additions & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ builds:
- -X 'main.version={{.Version}}'
- -X 'github.com/Layr-Labs/eigenlayer-cli/pkg/telemetry.telemetryToken={{ .Env.TELEMETRY_TOKEN }}'
- -X 'github.com/Layr-Labs/eigenlayer-cli/pkg/telemetry.version={{.Version}}'
- -X 'github.com/Layr-Labs/eigenlayer-cli/pkg/rewards.preprodUrl={{.Env.EIGENLAYER_BACKEND_PREPROD_URL}}'
- -X 'github.com/Layr-Labs/eigenlayer-cli/pkg/rewards.mainnetUrl={{.Env.EIGENLAYER_BACKEND_MAINNET_URL}}'
- -X 'github.com/Layr-Labs/eigenlayer-cli/pkg/rewards.testnetUrl={{.Env.EIGENLAYER_BACKEND_TESTNET_URL}}'
# windows is ignored by default, as the `goos` field by default only
# contains linux and darwin
goos:
Expand Down
7 changes: 7 additions & 0 deletions pkg/common/constants.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package common

const (
// MaxAddressLength Magic number 42 is the max length of an address.
// But it's also answer to the life, universe and everything.
MaxAddressLength = 42
)
8 changes: 0 additions & 8 deletions pkg/common/flags/general.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,6 @@ var (
EnvVars: []string{"NETWORK"},
}

EarnerAddressFlag = cli.StringFlag{
Name: "earner-address",
Aliases: []string{"ea"},
Required: true,
Usage: "Address of the earner (this is your staker/operator address)",
EnvVars: []string{"EARNER_ADDRESS"},
}

ETHRpcUrlFlag = cli.StringFlag{
Name: "eth-rpc-url",
Aliases: []string{"r"},
Expand Down
1 change: 1 addition & 0 deletions pkg/rewards.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ func RewardsCmd(p utils.Prompter) *cli.Command {
Subcommands: []*cli.Command{
rewards.ClaimCmd(p),
rewards.SetClaimerCmd(p),
rewards.ShowCmd(p),
},
}

Expand Down
23 changes: 20 additions & 3 deletions pkg/rewards/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ USAGE:
OPTIONS:
--network value, -n value Network to use. Currently supports 'holesky' and 'mainnet' (default: "holesky") [$NETWORK]
--eth-rpc-url value, -r value URL of the Ethereum RPC [$ETH_RPC_URL]
--earner-address value, --ea value Address of the earner (this is your staker/operator address) [$EARNER_ADDRESS]
--output-file value, -o value Output file to write the data [$OUTPUT_FILE]
--broadcast, -b Use this flag to broadcast the transaction (default: false) [$BROADCAST]
--environment value, --env value Environment to use. Currently supports 'preprod' ,`testnet' and 'prod'. If not provided, it will be inferred based on network [$ENVIRONMENT]
--earner-address value, --ea value Address of the earner [$REWARDS_EARNER_ADDRESS]
--environment value, --env value Environment to use. Currently supports 'preprod' ,'testnet' and 'prod'. If not provided, it will be inferred based on network [$ENVIRONMENT]
--recipient-address value, --ra value Specify the address of the recipient. If this is not provided, the earner address will be used [$RECIPIENT_ADDRESS]
--token-addresses value, -t value Specify the addresses of the tokens to claim. Comma separated list of addresses [$TOKEN_ADDRESSES]
--rewards-coordinator-address value, --rc value Specify the address of the rewards coordinator. If not provided, the address will be used based on provided network [$REWARDS_COORDINATOR_ADDRESS]
Expand Down Expand Up @@ -78,9 +78,9 @@ DESCRIPTION:
OPTIONS:
--network value, -n value Network to use. Currently supports 'holesky' and 'mainnet' (default: "holesky") [$NETWORK]
--eth-rpc-url value, -r value URL of the Ethereum RPC [$ETH_RPC_URL]
--earner-address value, --ea value Address of the earner (this is your staker/operator address) [$EARNER_ADDRESS]
--output-file value, -o value Output file to write the data [$OUTPUT_FILE]
--broadcast, -b Use this flag to broadcast the transaction (default: false) [$BROADCAST]
--earner-address value, --ea value Address of the earner [$REWARDS_EARNER_ADDRESS]
--rewards-coordinator-address value, --rc value Specify the address of the rewards coordinator. If not provided, the address will be used based on provided network [$REWARDS_COORDINATOR_ADDRESS]
--claimer-address value, -a value Address of the claimer [$NODE_OPERATOR_CLAIMER_ADDRESS]
--path-to-key-store value, -k value Path to the key store used to send transactions [$PATH_TO_KEY_STORE]
Expand Down Expand Up @@ -110,3 +110,20 @@ eigenlayer rewards set-claimer \
--broadcast
```
For testnet, remove the `--rewards-coordinator-address` flag and binary will automatically use the testnet rewards coordinator address.
### Show Rewards
### Testnet
Show all Rewards
```bash
./bin/eigenlayer rewards show \
--network holesky \
--earner-address 0x2222AAC0C980Cc029624b7ff55B88Bc6F63C538f \
--claim-type all --verbose
```
Show unclaimed Rewards
```bash
./bin/eigenlayer rewards show \
--network holesky \
--earner-address 0x2222AAC0C980Cc029624b7ff55B88Bc6F63C538f \
--claim-type unclaimed --verbose
```
15 changes: 10 additions & 5 deletions pkg/rewards/claim.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

"github.com/Layr-Labs/eigenlayer-cli/pkg/common"
"github.com/Layr-Labs/eigenlayer-cli/pkg/common/flags"
"github.com/Layr-Labs/eigenlayer-cli/pkg/telemetry"
"github.com/Layr-Labs/eigenlayer-cli/pkg/types"
"github.com/Layr-Labs/eigenlayer-cli/pkg/utils"

Expand Down Expand Up @@ -59,12 +60,13 @@ func ClaimCmd(p utils.Prompter) *cli.Command {
Action: func(cCtx *cli.Context) error {
return Claim(cCtx, p)
},
After: telemetry.AfterRunAction(),
Flags: []cli.Flag{
&flags.NetworkFlag,
&flags.ETHRpcUrlFlag,
&flags.EarnerAddressFlag,
&flags.OutputFileFlag,
&flags.BroadcastFlag,
&EarnerAddressFlag,
&EnvironmentFlag,
&RecipientAddressFlag,
&TokenAddressesFlag,
Expand Down Expand Up @@ -104,7 +106,7 @@ func Claim(cCtx *cli.Context, p utils.Prompter) error {
}
cCtx.App.Metadata["network"] = config.ChainID.String()
if config.ChainID.Int64() == utils.MainnetChainId {
return fmt.Errorf("claim currently unsupported on mainnet")
return fmt.Errorf("rewards currently unsupported on mainnet")
}

ethClient, err := eth.NewClient(config.RPCUrl)
Expand Down Expand Up @@ -160,6 +162,9 @@ 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,
Expand Down Expand Up @@ -235,7 +240,7 @@ func readAndValidateClaimConfig(cCtx *cli.Context, logger logging.Logger) (*Clai
network := cCtx.String(flags.NetworkFlag.Name)
environment := cCtx.String(EnvironmentFlag.Name)
rpcUrl := cCtx.String(flags.ETHRpcUrlFlag.Name)
earnerAddress := gethcommon.HexToAddress(cCtx.String(flags.EarnerAddressFlag.Name))
earnerAddress := gethcommon.HexToAddress(cCtx.String(EarnerAddressFlag.Name))
output := cCtx.String(flags.OutputFileFlag.Name)
broadcast := cCtx.Bool(flags.BroadcastFlag.Name)
tokenAddresses := cCtx.String(TokenAddressesFlag.Name)
Expand Down Expand Up @@ -312,9 +317,9 @@ func readAndValidateClaimConfig(cCtx *cli.Context, logger logging.Logger) (*Clai

func getEnvFromNetwork(network string) string {
switch network {
case "holesky":
case utils.HoleskyNetworkName:
return "testnet"
case "mainnet":
case utils.MainnetNetworkName:
return "prod"
default:
return "local"
Expand Down
33 changes: 32 additions & 1 deletion pkg/rewards/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ var (
EnvironmentFlag = cli.StringFlag{
Name: "environment",
Aliases: []string{"env"},
Usage: "Environment to use. Currently supports 'preprod' ,`testnet' and 'prod'. If not provided, it will be inferred based on network",
Usage: "Environment to use. Currently supports 'preprod' ,'testnet' and 'prod'. If not provided, it will be inferred based on network",
EnvVars: []string{"ENVIRONMENT"},
}

Expand All @@ -54,4 +54,35 @@ var (
Required: true,
EnvVars: []string{"NODE_OPERATOR_CLAIMER_ADDRESS"},
}

EarnerAddressFlag = cli.StringFlag{
Name: "earner-address",
Aliases: []string{"ea"},
Usage: "Address of the earner",
Required: true,
EnvVars: []string{"REWARDS_EARNER_ADDRESS"},
}

NumberOfDaysFlag = cli.IntFlag{
Name: "number-of-days",
Aliases: []string{"nd"},
Usage: "Number of days to show rewards for. Negative means past days, positive means future days (future days is not supported yet). Only used for 'all' claim type",
Value: -21,
EnvVars: []string{"REWARDS_NUMBER_OF_DAYS"},
}

AVSAddressesFlag = cli.StringFlag{
Name: "avs-addresses",
Aliases: []string{"a"},
Usage: "Comma seperated addresses of the AVS",
EnvVars: []string{"AVS_ADDRESSES"},
}

ClaimTypeFlag = cli.StringFlag{
Name: "claim-type",
Aliases: []string{"ct"},
Usage: "Type of claim you want to see. Can be 'all', 'unclaimed', or 'claimed'",
Value: "all",
EnvVars: []string{"REWARDS_CLAIM_TYPE"},
}
)
4 changes: 2 additions & 2 deletions pkg/rewards/setclaimer.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ Set the rewards claimer address for the earner.
Flags: []cli.Flag{
&flags.NetworkFlag,
&flags.ETHRpcUrlFlag,
&flags.EarnerAddressFlag,
&flags.OutputFileFlag,
&flags.BroadcastFlag,
&EarnerAddressFlag,
&RewardsCoordinatorAddressFlag,
&ClaimerAddressFlag,
&flags.PathToKeyStoreFlag,
Expand Down Expand Up @@ -159,7 +159,7 @@ func readAndValidateSetClaimerConfig(cCtx *cli.Context, logger logging.Logger) (
network := cCtx.String(flags.NetworkFlag.Name)
environment := cCtx.String(EnvironmentFlag.Name)
rpcUrl := cCtx.String(flags.ETHRpcUrlFlag.Name)
earnerAddress := gethcommon.HexToAddress(cCtx.String(flags.EarnerAddressFlag.Name))
earnerAddress := gethcommon.HexToAddress(cCtx.String(EarnerAddressFlag.Name))
broadcast := cCtx.Bool(flags.BroadcastFlag.Name)
claimerAddress := cCtx.String(ClaimerAddressFlag.Name)
rewardsCoordinatorAddress := cCtx.String(RewardsCoordinatorAddressFlag.Name)
Expand Down
Loading

0 comments on commit f2ec537

Please sign in to comment.