Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: get/set operator PI split commands #256

Merged
merged 2 commits into from
Dec 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ require (
github.com/Layr-Labs/eigenlayer-contracts v0.3.2-mainnet-rewards
github.com/Layr-Labs/eigenlayer-rewards-proofs v0.2.12
github.com/Layr-Labs/eigenpod-proofs-generation v0.0.14-stable.0.20240730152248-5c11a259293e
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241211225219-79336bf6e886
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241212190947-9985122d81fe
github.com/blang/semver/v4 v4.0.0
github.com/consensys/gnark-crypto v0.12.1
github.com/ethereum/go-ethereum v1.14.5
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ github.com/Layr-Labs/eigenpod-proofs-generation v0.0.14-stable.0.20240730152248-
github.com/Layr-Labs/eigenpod-proofs-generation v0.0.14-stable.0.20240730152248-5c11a259293e/go.mod h1:T7tYN8bTdca2pkMnz9G2+ZwXYWw5gWqQUIu4KLgC/vM=
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241211225219-79336bf6e886 h1:+7AijqdfRXdDc3zvj02Alqsk6Qd3owvlqPYQN1Hc1ME=
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241211225219-79336bf6e886/go.mod h1:aYdNURUhaqeYOS+Cq12TfSdPbjFfiLaHkxPdR4Exq/s=
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241212190947-9985122d81fe h1:FeXxapvtEbbTbEWsrcBTTzQ2u2quGJ9HNYQVSk5JZ8g=
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241212190947-9985122d81fe/go.mod h1:aYdNURUhaqeYOS+Cq12TfSdPbjFfiLaHkxPdR4Exq/s=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
Expand Down
2 changes: 2 additions & 0 deletions pkg/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ func OperatorCmd(p utils.Prompter) *cli.Command {
operator.GetApprovalCmd(p),
operator.SetOperatorSplitCmd(p),
operator.GetOperatorSplitCmd(p),
operator.GetOperatorPISplitCmd(p),
operator.SetOperatorPISplitCmd(p),
},
}

Expand Down
39 changes: 39 additions & 0 deletions pkg/operator/get_operator_pi_split.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package operator

import (
"sort"

"github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common/flags"
"github.com/Layr-Labs/eigenlayer-cli/pkg/operator/split"
"github.com/Layr-Labs/eigenlayer-cli/pkg/rewards"
"github.com/Layr-Labs/eigenlayer-cli/pkg/telemetry"
"github.com/Layr-Labs/eigenlayer-cli/pkg/utils"
"github.com/urfave/cli/v2"
)

func GetOperatorPISplitCmd(p utils.Prompter) *cli.Command {
var operatorSplitCmd = &cli.Command{
Name: "get-pi-split",
Usage: "Get programmatic incentives rewards split",
Action: func(cCtx *cli.Context) error {
return GetOperatorSplit(cCtx, true)
},
After: telemetry.AfterRunAction(),
Flags: getGetOperatorPISplitFlags(),
}

return operatorSplitCmd
}

func getGetOperatorPISplitFlags() []cli.Flag {
baseFlags := []cli.Flag{
&flags.NetworkFlag,
&flags.ETHRpcUrlFlag,
&flags.OperatorAddressFlag,
&split.OperatorSplitFlag,
&rewards.RewardsCoordinatorAddressFlag,
}

sort.Sort(cli.FlagsByName(baseFlags))
return baseFlags
}
19 changes: 13 additions & 6 deletions pkg/operator/get_operator_split.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func GetOperatorSplitCmd(p utils.Prompter) *cli.Command {
Name: "get-rewards-split",
Usage: "Get operator rewards split",
Action: func(cCtx *cli.Context) error {
return GetOperatorSplit(cCtx)
return GetOperatorSplit(cCtx, false)
},
After: telemetry.AfterRunAction(),
Flags: getGetOperatorSplitFlags(),
Expand All @@ -45,11 +45,11 @@ func getGetOperatorSplitFlags() []cli.Flag {
return baseFlags
}

func GetOperatorSplit(cCtx *cli.Context) error {
func GetOperatorSplit(cCtx *cli.Context, isProgrammaticIncentive bool) error {
ctx := cCtx.Context
logger := common.GetLogger(cCtx)

config, err := readAndValidateGetOperatorSplitConfig(cCtx, logger)
config, err := readAndValidateGetOperatorSplitConfig(cCtx, logger, isProgrammaticIncentive)
if err != nil {
return eigenSdkUtils.WrapError("failed to read and validate operator split config", err)
}
Expand All @@ -75,8 +75,12 @@ func GetOperatorSplit(cCtx *cli.Context) error {

logger.Infof("Getting operator split...")

split, err := elReader.GetOperatorAVSSplit(ctx, config.OperatorAddress, config.AVSAddress)

var split uint16
if isProgrammaticIncentive {
split, err = elReader.GetOperatorPISplit(ctx, config.OperatorAddress)
} else {
split, err = elReader.GetOperatorAVSSplit(ctx, config.OperatorAddress, config.AVSAddress)
}
if err != nil {
return eigenSdkUtils.WrapError("failed to get operator split", err)
}
Expand All @@ -89,6 +93,7 @@ func GetOperatorSplit(cCtx *cli.Context) error {
func readAndValidateGetOperatorSplitConfig(
cCtx *cli.Context,
logger logging.Logger,
isProgrammaticIncentive bool,
) (*split.GetOperatorAVSSplitConfig, error) {
network := cCtx.String(flags.NetworkFlag.Name)
rpcUrl := cCtx.String(flags.ETHRpcUrlFlag.Name)
Expand All @@ -108,7 +113,9 @@ func readAndValidateGetOperatorSplitConfig(
logger.Infof("Using operator address: %s", operatorAddress.String())

avsAddress := gethcommon.HexToAddress(cCtx.String(split.AVSAddressFlag.Name))
logger.Infof("Using AVS address: %s", avsAddress.String())
if !isProgrammaticIncentive {
logger.Infof("Using AVS address: %s", avsAddress.String())
}

chainID := utils.NetworkNameToChainId(network)
logger.Debugf("Using chain ID: %s", chainID.String())
Expand Down
44 changes: 44 additions & 0 deletions pkg/operator/set_operator_pi_split.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package operator

import (
"sort"

"github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common/flags"
"github.com/Layr-Labs/eigenlayer-cli/pkg/operator/split"
"github.com/Layr-Labs/eigenlayer-cli/pkg/rewards"
"github.com/Layr-Labs/eigenlayer-cli/pkg/telemetry"
"github.com/Layr-Labs/eigenlayer-cli/pkg/utils"
"github.com/urfave/cli/v2"
)

func SetOperatorPISplitCmd(p utils.Prompter) *cli.Command {
var operatorSplitCmd = &cli.Command{
Name: "set-pi-split",
Usage: "Set operator programmatic incentives split",
Action: func(cCtx *cli.Context) error {
return SetOperatorSplit(cCtx, p, true)
},
After: telemetry.AfterRunAction(),
Flags: getSetOperatorPISplitFlags(),
}

return operatorSplitCmd
}

func getSetOperatorPISplitFlags() []cli.Flag {
baseFlags := []cli.Flag{
&flags.NetworkFlag,
&flags.ETHRpcUrlFlag,
&flags.OperatorAddressFlag,
&split.OperatorSplitFlag,
&rewards.RewardsCoordinatorAddressFlag,
&flags.BroadcastFlag,
&flags.OutputTypeFlag,
&flags.OutputFileFlag,
&flags.SilentFlag,
}

allFlags := append(baseFlags, flags.GetSignerFlags()...)
sort.Sort(cli.FlagsByName(allFlags))
return allFlags
}
27 changes: 21 additions & 6 deletions pkg/operator/set_operator_split.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/Layr-Labs/eigensdk-go/logging"
eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils"
gethcommon "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/urfave/cli/v2"
)
Expand All @@ -23,7 +24,7 @@ func SetOperatorSplitCmd(p utils.Prompter) *cli.Command {
Name: "set-rewards-split",
Usage: "Set operator rewards split",
Action: func(cCtx *cli.Context) error {
return SetOperatorSplit(cCtx, p)
return SetOperatorSplit(cCtx, p, false)
},
After: telemetry.AfterRunAction(),
Flags: getSetOperatorSplitFlags(),
Expand All @@ -32,11 +33,11 @@ func SetOperatorSplitCmd(p utils.Prompter) *cli.Command {
return operatorSplitCmd
}

func SetOperatorSplit(cCtx *cli.Context, p utils.Prompter) error {
func SetOperatorSplit(cCtx *cli.Context, p utils.Prompter, isProgrammaticIncentive bool) error {
ctx := cCtx.Context
logger := common.GetLogger(cCtx)

config, err := readAndValidateSetOperatorSplitConfig(cCtx, logger)
config, err := readAndValidateSetOperatorSplitConfig(cCtx, logger, isProgrammaticIncentive)
if err != nil {
return eigenSdkUtils.WrapError("failed to read and validate operator split config", err)
}
Expand Down Expand Up @@ -68,8 +69,13 @@ func SetOperatorSplit(cCtx *cli.Context, p utils.Prompter) error {

logger.Infof("Broadcasting set operator transaction...")

receipt, err := eLWriter.SetOperatorAVSSplit(ctx, config.OperatorAddress, config.AVSAddress, config.Split, true)
var receipt *types.Receipt
if isProgrammaticIncentive {
receipt, err = eLWriter.SetOperatorPISplit(ctx, config.OperatorAddress, config.Split, true)

} else {
receipt, err = eLWriter.SetOperatorAVSSplit(ctx, config.OperatorAddress, config.AVSAddress, config.Split, true)
}
if err != nil {
return eigenSdkUtils.WrapError("failed to process claim", err)
}
Expand All @@ -94,7 +100,12 @@ func SetOperatorSplit(cCtx *cli.Context, p utils.Prompter) error {
noSendTxOpts.GasLimit = 150_000
}

unsignedTx, err := contractBindings.RewardsCoordinator.SetOperatorAVSSplit(noSendTxOpts, config.OperatorAddress, config.AVSAddress, config.Split)
var unsignedTx *types.Transaction
if isProgrammaticIncentive {
unsignedTx, err = contractBindings.RewardsCoordinator.SetOperatorPISplit(noSendTxOpts, config.OperatorAddress, config.Split)
} else {
unsignedTx, err = contractBindings.RewardsCoordinator.SetOperatorAVSSplit(noSendTxOpts, config.OperatorAddress, config.AVSAddress, config.Split)
}

if err != nil {
return eigenSdkUtils.WrapError("failed to create unsigned tx", err)
Expand Down Expand Up @@ -148,6 +159,7 @@ func getSetOperatorSplitFlags() []cli.Flag {
func readAndValidateSetOperatorSplitConfig(
cCtx *cli.Context,
logger logging.Logger,
isProgrammaticIncentive bool,
) (*split.SetOperatorAVSSplitConfig, error) {
network := cCtx.String(flags.NetworkFlag.Name)
rpcUrl := cCtx.String(flags.ETHRpcUrlFlag.Name)
Expand All @@ -172,7 +184,10 @@ func readAndValidateSetOperatorSplitConfig(
logger.Infof("Using operator address: %s", operatorAddress.String())

avsAddress := gethcommon.HexToAddress(cCtx.String(split.AVSAddressFlag.Name))
logger.Infof("Using AVS address: %s", avsAddress.String())

if !isProgrammaticIncentive {
logger.Infof("Using AVS address: %s", avsAddress.String())
}

chainID := utils.NetworkNameToChainId(network)
logger.Debugf("Using chain ID: %s", chainID.String())
Expand Down
Loading