1
1
package appointee
2
2
3
3
import (
4
+ "context"
4
5
"sort"
5
6
7
+ "github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common"
6
8
"github.com/Layr-Labs/eigenlayer-cli/pkg/internal/common/flags"
7
9
"github.com/Layr-Labs/eigenlayer-cli/pkg/telemetry"
10
+ "github.com/Layr-Labs/eigenlayer-cli/pkg/utils"
11
+ "github.com/Layr-Labs/eigensdk-go/chainio/clients/elcontracts"
12
+ "github.com/Layr-Labs/eigensdk-go/logging"
13
+ eigenSdkUtils "github.com/Layr-Labs/eigensdk-go/utils"
14
+ gethcommon "github.com/ethereum/go-ethereum/common"
15
+ gethtypes "github.com/ethereum/go-ethereum/core/types"
16
+ "github.com/ethereum/go-ethereum/ethclient"
17
+
8
18
"github.com/urfave/cli/v2"
9
19
)
10
20
11
- func RemoveCmd () * cli.Command {
21
+ type RemoveUserPermissionWriter interface {
22
+ RemovePermission (
23
+ ctx context.Context ,
24
+ request elcontracts.RemovePermissionRequest ,
25
+ ) (* gethtypes.Receipt , error )
26
+ }
27
+
28
+ func RemoveCmd (readerGenerator func (logging.Logger , * removeConfig ) (RemoveUserPermissionWriter , error )) * cli.Command {
12
29
removeCmd := & cli.Command {
13
30
Name : "remove" ,
14
31
Usage : "user appointee remove --account-address <AccountAddress> --appointee-address <AppointeeAddress> --target-address <TargetAddress> --selector <Selector>" ,
@@ -17,19 +34,140 @@ func RemoveCmd() *cli.Command {
17
34
Remove a user's permission'.
18
35
` ,
19
36
After : telemetry .AfterRunAction (),
37
+ Action : func (c * cli.Context ) error {
38
+ return removeUserPermission (c , readerGenerator )
39
+ },
20
40
Flags : removeCommandFlags (),
21
41
}
22
42
23
43
return removeCmd
24
44
}
25
45
46
+ func removeUserPermission (
47
+ cliCtx * cli.Context ,
48
+ generator func (logging.Logger , * removeConfig ) (RemoveUserPermissionWriter , error ),
49
+ ) error {
50
+ ctx := cliCtx .Context
51
+ logger := common .GetLogger (cliCtx )
52
+
53
+ config , err := readAndValidateRemoveConfig (cliCtx , logger )
54
+ if err != nil {
55
+ return eigenSdkUtils .WrapError ("failed to read and validate user can call config" , err )
56
+ }
57
+ cliCtx .App .Metadata ["network" ] = config .ChainID .String ()
58
+ permissionWriter , err := generator (logger , config )
59
+ if err != nil {
60
+ return err
61
+ }
62
+ receipt , err := permissionWriter .RemovePermission (
63
+ ctx ,
64
+ elcontracts.RemovePermissionRequest {
65
+ Account : config .AccountAddress ,
66
+ UserAddress : config .UserAddress ,
67
+ Target : config .Target ,
68
+ Selector : config .Selector ,
69
+ WaitForReceipt : true ,
70
+ },
71
+ )
72
+ if err != nil {
73
+ return err
74
+ }
75
+ common .PrintTransactionInfo (receipt .TxHash .String (), config .ChainID )
76
+ return nil
77
+ }
78
+
79
+ func generateRemoveUserPermissionWriter (
80
+ prompter utils.Prompter ,
81
+ ) func (
82
+ logger logging.Logger ,
83
+ config * removeConfig ,
84
+ ) (RemoveUserPermissionWriter , error ) {
85
+ return func (logger logging.Logger , config * removeConfig ) (RemoveUserPermissionWriter , error ) {
86
+ ethClient , err := ethclient .Dial (config .RPCUrl )
87
+ if err != nil {
88
+ return nil , eigenSdkUtils .WrapError ("failed to create new eth client" , err )
89
+ }
90
+ elWriter , err := common .GetELWriter (
91
+ config .AccountAddress ,
92
+ & config .SignerConfig ,
93
+ ethClient ,
94
+ elcontracts.Config {
95
+ PermissionsControllerAddress : config .PermissionManagerAddress ,
96
+ },
97
+ prompter ,
98
+ config .ChainID ,
99
+ logger ,
100
+ )
101
+ return elWriter , err
102
+ }
103
+ }
104
+
105
+ func readAndValidateRemoveConfig (cliContext * cli.Context , logger logging.Logger ) (* removeConfig , error ) {
106
+ accountAddress := gethcommon .HexToAddress (cliContext .String (AccountAddressFlag .Name ))
107
+ userAddress := gethcommon .HexToAddress (cliContext .String (AppointeeAddressFlag .Name ))
108
+ ethRpcUrl := cliContext .String (flags .ETHRpcUrlFlag .Name )
109
+ network := cliContext .String (flags .NetworkFlag .Name )
110
+ environment := cliContext .String (flags .EnvironmentFlag .Name )
111
+ target := gethcommon .HexToAddress (cliContext .String (TargetAddressFlag .Name ))
112
+ selector := cliContext .String (SelectorFlag .Name )
113
+ selectorBytes , err := common .ValidateAndConvertSelectorString (selector )
114
+ if err != nil {
115
+ return nil , err
116
+ }
117
+ signerConfig , err := common .GetSignerConfig (cliContext , logger )
118
+ if err != nil {
119
+ // We don't want to throw error since people can still use it to generate the claim
120
+ // without broadcasting it
121
+ logger .Debugf ("Failed to get signer config: %s" , err )
122
+ }
123
+
124
+ if environment == "" {
125
+ environment = common .GetEnvFromNetwork (network )
126
+ }
127
+
128
+ chainID := utils .NetworkNameToChainId (network )
129
+ cliContext .App .Metadata ["network" ] = chainID .String ()
130
+ permissionManagerAddress := cliContext .String (PermissionControllerAddressFlag .Name )
131
+
132
+ if common .IsEmptyString (permissionManagerAddress ) {
133
+ permissionManagerAddress , err = common .GetPermissionManagerAddress (utils .NetworkNameToChainId (network ))
134
+ if err != nil {
135
+ return nil , err
136
+ }
137
+ }
138
+
139
+ logger .Debugf (
140
+ "Env: %s, network: %s, chain ID: %s, PermissionManager address: %s" ,
141
+ environment ,
142
+ network ,
143
+ chainID ,
144
+ permissionManagerAddress ,
145
+ )
146
+
147
+ return & removeConfig {
148
+ Network : network ,
149
+ RPCUrl : ethRpcUrl ,
150
+ AccountAddress : accountAddress ,
151
+ UserAddress : userAddress ,
152
+ Target : target ,
153
+ Selector : selectorBytes ,
154
+ SignerConfig : * signerConfig ,
155
+ PermissionManagerAddress : gethcommon .HexToAddress (permissionManagerAddress ),
156
+ ChainID : chainID ,
157
+ Environment : environment ,
158
+ }, nil
159
+ }
160
+
26
161
func removeCommandFlags () []cli.Flag {
27
162
cmdFlags := []cli.Flag {
28
163
& flags .VerboseFlag ,
29
164
& AccountAddressFlag ,
30
165
& AppointeeAddressFlag ,
31
166
& TargetAddressFlag ,
32
167
& SelectorFlag ,
168
+ & flags .NetworkFlag ,
169
+ & flags .EnvironmentFlag ,
170
+ & flags .ETHRpcUrlFlag ,
33
171
}
34
172
sort .Sort (cli .FlagsByName (cmdFlags ))
35
173
return append (cmdFlags , flags .GetSignerFlags ()... )
0 commit comments