Skip to content

Commit

Permalink
Adding print code paths for appointee set and remove. (#259)
Browse files Browse the repository at this point in the history
Co-authored-by: Brandon Chatham <[email protected]>
  • Loading branch information
bdchatham and bdchatham authored Dec 14, 2024
1 parent dea2dee commit e121c1e
Show file tree
Hide file tree
Showing 12 changed files with 222 additions and 102 deletions.
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.20241212003044-37139a7d8ea8
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241213014620-7831a35a43a7
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 @@ -24,6 +24,8 @@ github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241211204646-f49e96f7ee7a h1:U1pibF
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241211204646-f49e96f7ee7a/go.mod h1:aYdNURUhaqeYOS+Cq12TfSdPbjFfiLaHkxPdR4Exq/s=
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241212003044-37139a7d8ea8 h1:flOwiF9Z9xburwDodNbd6VBi8rzzNSbRy2KG5kqoAak=
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241212003044-37139a7d8ea8/go.mod h1:aYdNURUhaqeYOS+Cq12TfSdPbjFfiLaHkxPdR4Exq/s=
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241213014620-7831a35a43a7 h1:58JjbKZs0oaGRQv/AU+XtqWvD3+dyKM4NIbqjACANN0=
github.com/Layr-Labs/eigensdk-go v0.1.14-0.20241213014620-7831a35a43a7/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
1 change: 0 additions & 1 deletion pkg/user/appointee/appointee.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ func AppointeeCmd(prompter utils.Prompter) *cli.Command {
&flags.VerboseFlag,
},
Subcommands: []*cli.Command{
BatchSetCmd(),
canCallCmd(generateCanCallReader),
ListCmd(generateListAppointeesReader),
ListPermissionsCmd(generateListAppointeePermissionsReader),
Expand Down
40 changes: 0 additions & 40 deletions pkg/user/appointee/batch_set.go

This file was deleted.

4 changes: 2 additions & 2 deletions pkg/user/appointee/can_call.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ func canCall(cliCtx *cli.Context, generator func(logging.Logger, *canCallConfig)
return err
}

result, err := elReader.CanCall(ctx, config.AppointeeAddress, config.AccountAddress, config.Target, config.Selector)
result, err := elReader.CanCall(ctx, config.AccountAddress, config.AppointeeAddress, config.Target, config.Selector)
fmt.Printf("CanCall Result: %v\n", result)
fmt.Printf(
"Selector, Target and Appointee: %s, %x, %s\n",
"Target, Selector and Appointee: %s, %x, %s\n",
config.Target,
string(config.Selector[:]),
config.AppointeeAddress,
Expand Down
3 changes: 2 additions & 1 deletion pkg/user/appointee/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,11 @@ func printResults(config *listAppointeesConfig, appointees []gethcommon.Address)
string(config.Selector[:]),
config.AccountAddress,
)
fmt.Println()
fmt.Println(strings.Repeat("=", 60))

for _, appointee := range appointees {
fmt.Printf("Appointee address: %s\n", appointee)
fmt.Printf("%s\n", appointee)
}
}

Expand Down
10 changes: 4 additions & 6 deletions pkg/user/appointee/list_permissions.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"sort"
"strings"

"github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common"
"github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common/flags"
Expand Down Expand Up @@ -118,13 +119,10 @@ func readAndValidateListAppointeePermissionsConfig(
func printPermissions(config *listAppointeePermissionsConfig, targets []gethcommon.Address, selectors [][4]byte) {
fmt.Printf("Appointee address: %s\n", config.AppointeeAddress)
fmt.Printf("Appointed by: %s\n", config.AccountAddress)
fmt.Println("====================================================================================")

for _, target := range targets {
for _, selector := range selectors {
fmt.Printf("Target: %s, Selector: %x\n", target, selector)
}
fmt.Println(strings.Repeat("=", 60))

for index := range targets {
fmt.Printf("Target: %s, Selector: %x\n", targets[index], selectors[index])
}
}

Expand Down
90 changes: 83 additions & 7 deletions pkg/user/appointee/remove.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package appointee

import (
"context"
"fmt"
"sort"

"github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common"
Expand All @@ -23,6 +24,9 @@ type RemoveAppointeePermissionWriter interface {
ctx context.Context,
request elcontracts.RemovePermissionRequest,
) (*gethtypes.Receipt, error)
NewRemovePermissionTx(
request elcontracts.RemovePermissionRequest,
) (*gethtypes.Transaction, error)
}

func RemoveCmd(generator func(logging.Logger, *removeConfig) (RemoveAppointeePermissionWriter, error)) *cli.Command {
Expand Down Expand Up @@ -59,15 +63,79 @@ func removeAppointeePermission(
if err != nil {
return err
}
removePermissionRequest := elcontracts.RemovePermissionRequest{
AccountAddress: config.AccountAddress,
AppointeeAddress: config.AppointeeAddress,
Target: config.Target,
Selector: config.Selector,
WaitForReceipt: true,
}
if config.Broadcast {
return broadcastRemoveAppointeeTx(ctx, permissionWriter, config, removePermissionRequest)
}
return printRemoveAppointeeResult(logger, permissionWriter, config, removePermissionRequest)
}

func printRemoveAppointeeResult(
logger logging.Logger,
permissionWriter RemoveAppointeePermissionWriter,
config *removeConfig,
request elcontracts.RemovePermissionRequest,
) error {
ethClient, err := ethclient.Dial(config.RPCUrl)
if err != nil {
return err
}
noSendTxOpts := common.GetNoSendTxOpts(config.AccountAddress)
if common.IsSmartContractAddress(config.AccountAddress, ethClient) {
// address is a smart contract
noSendTxOpts.GasLimit = 150_000
}
unsignedTx, err := permissionWriter.NewRemovePermissionTx(request)
if err != nil {
return eigenSdkUtils.WrapError("failed to create unsigned tx", err)
}

if config.OutputType == string(common.OutputType_Calldata) {
calldataHex := gethcommon.Bytes2Hex(unsignedTx.Data())
if !common.IsEmptyString(config.OutputFile) {
err = common.WriteToFile([]byte(calldataHex), config.OutputFile)
if err != nil {
return err
}
logger.Infof("Call data written to file: %s", config.OutputFile)
} else {
fmt.Println(calldataHex)
}
} else {
if !common.IsEmptyString(config.OutputType) {
fmt.Println("output file not supported for pretty output type")
fmt.Println()
}
fmt.Printf(
"Appointee %s will be lose permission to target %s selector %s by account %s\n",
config.AppointeeAddress,
config.Target,
config.Selector,
config.AccountAddress,
)
}
txFeeDetails := common.GetTxFeeDetails(unsignedTx)
fmt.Println()
txFeeDetails.Print()
fmt.Println("To broadcast the transaction, use the --broadcast flag")
return nil
}

func broadcastRemoveAppointeeTx(
ctx context.Context,
permissionWriter RemoveAppointeePermissionWriter,
config *removeConfig,
request elcontracts.RemovePermissionRequest,
) error {
receipt, err := permissionWriter.RemovePermission(
ctx,
elcontracts.RemovePermissionRequest{
AccountAddress: config.AccountAddress,
AppointeeAddress: config.AppointeeAddress,
Target: config.Target,
Selector: config.Selector,
WaitForReceipt: true,
},
request,
)
if err != nil {
return err
Expand Down Expand Up @@ -108,6 +176,9 @@ func readAndValidateRemoveConfig(cliContext *cli.Context, logger logging.Logger)
ethRpcUrl := cliContext.String(flags.ETHRpcUrlFlag.Name)
network := cliContext.String(flags.NetworkFlag.Name)
environment := cliContext.String(flags.EnvironmentFlag.Name)
outputFile := cliContext.String(flags.OutputFileFlag.Name)
outputType := cliContext.String(flags.OutputTypeFlag.Name)
broadcast := cliContext.Bool(flags.BroadcastFlag.Name)
target := gethcommon.HexToAddress(cliContext.String(TargetAddressFlag.Name))
selector := cliContext.String(SelectorFlag.Name)
selectorBytes, err := common.ValidateAndConvertSelectorString(selector)
Expand Down Expand Up @@ -155,6 +226,9 @@ func readAndValidateRemoveConfig(cliContext *cli.Context, logger logging.Logger)
PermissionManagerAddress: gethcommon.HexToAddress(permissionManagerAddress),
ChainID: chainID,
Environment: environment,
Broadcast: broadcast,
OutputType: outputType,
OutputFile: outputFile,
}, nil
}

Expand All @@ -170,6 +244,8 @@ func removeCommandFlags() []cli.Flag {
&flags.EnvironmentFlag,
&flags.ETHRpcUrlFlag,
&flags.BroadcastFlag,
&flags.OutputFileFlag,
&flags.OutputTypeFlag,
}
cmdFlags = append(cmdFlags, flags.GetSignerFlags()...)
sort.Sort(cli.FlagsByName(cmdFlags))
Expand Down
39 changes: 13 additions & 26 deletions pkg/user/appointee/remove_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import (
)

type mockRemoveAppointeePermissionWriter struct {
removePermissionFunc func(ctx context.Context, request elcontracts.RemovePermissionRequest) (*gethtypes.Receipt, error)
removePermissionFunc func(ctx context.Context, request elcontracts.RemovePermissionRequest) (*gethtypes.Receipt, error)
newRemovePermissionTxFunc func(request elcontracts.RemovePermissionRequest) (*gethtypes.Transaction, error)
}

func (m *mockRemoveAppointeePermissionWriter) RemovePermission(
Expand All @@ -25,12 +26,21 @@ func (m *mockRemoveAppointeePermissionWriter) RemovePermission(
return m.removePermissionFunc(ctx, request)
}

func (m *mockRemoveAppointeePermissionWriter) NewRemovePermissionTx(
request elcontracts.RemovePermissionRequest,
) (*gethtypes.Transaction, error) {
return m.newRemovePermissionTxFunc(request)
}

func generateMockRemoveWriter(err error) func(logging.Logger, *removeConfig) (RemoveAppointeePermissionWriter, error) {
return func(logger logging.Logger, config *removeConfig) (RemoveAppointeePermissionWriter, error) {
return &mockRemoveAppointeePermissionWriter{
removePermissionFunc: func(ctx context.Context, request elcontracts.RemovePermissionRequest) (*gethtypes.Receipt, error) {
return &gethtypes.Receipt{}, err
},
newRemovePermissionTxFunc: func(request elcontracts.RemovePermissionRequest) (*gethtypes.Transaction, error) {
return &gethtypes.Transaction{}, err
},
}, nil
}
}
Expand All @@ -51,6 +61,7 @@ func TestRemoveCmd_Success(t *testing.T) {
"--network", "holesky",
"--eth-rpc-url", "https://ethereum-holesky.publicnode.com/",
"--ecdsa-private-key", "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd",
"--broadcast",
}

err := app.Run(args)
Expand All @@ -76,31 +87,7 @@ func TestRemoveCmd_GeneratorError(t *testing.T) {
"--network", "holesky",
"--eth-rpc-url", "https://ethereum-holesky.publicnode.com/",
"--ecdsa-private-key", "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd",
}

err := app.Run(args)
assert.Error(t, err)
assert.Contains(t, err.Error(), expectedError)
}

func TestRemoveCmd_RemovePermissionError(t *testing.T) {
expectedError := "error removing permission"
app := cli.NewApp()
app.Commands = []*cli.Command{
RemoveCmd(generateMockRemoveWriter(errors.New(expectedError))),
}

args := []string{
"TestRemoveCmd_RemovePermissionError",
"remove",
"--account-address", "0x1234567890abcdef1234567890abcdef12345678",
"--appointee-address", "0xabcdef1234567890abcdef1234567890abcdef12",
"--target-address", "0x9876543210fedcba9876543210fedcba98765432",
"--selector", "0x1A2B3C4D",
"--network", "holesky",
"--eth-rpc-url", "https://ethereum-holesky.publicnode.com/",
"--ecdsa-private-key", "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd",
"--path-to-key-store", "/path/to/keystore.json",
"--broadcast",
}

err := app.Run(args)
Expand Down
Loading

0 comments on commit e121c1e

Please sign in to comment.