@lidofinance/lsv-cli 1.0.0-alpha.1 → 1.0.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +372 -1
  2. package/dist/abi/Dashboard.js +1383 -0
  3. package/dist/abi/Dashboard.js.map +1 -0
  4. package/dist/abi/Delegation.js +1658 -0
  5. package/dist/abi/Delegation.js.map +1 -0
  6. package/dist/abi/LidoLocator.js +388 -0
  7. package/dist/abi/LidoLocator.js.map +1 -0
  8. package/dist/abi/StEth.js +496 -0
  9. package/dist/abi/StEth.js.map +1 -0
  10. package/dist/abi/StakingVault.js +786 -0
  11. package/dist/abi/StakingVault.js.map +1 -0
  12. package/dist/abi/TokenManager.js +759 -0
  13. package/dist/abi/TokenManager.js.map +1 -0
  14. package/dist/abi/VaultFactory.js +229 -0
  15. package/dist/abi/VaultFactory.js.map +1 -0
  16. package/dist/abi/VaultHub.js +923 -586
  17. package/dist/abi/VaultHub.js.map +1 -1
  18. package/dist/abi/Voting.js +887 -0
  19. package/dist/abi/Voting.js.map +1 -0
  20. package/dist/abi/index.js +26 -0
  21. package/dist/abi/index.js.map +1 -0
  22. package/dist/command/index.js +16 -0
  23. package/dist/command/index.js.map +1 -1
  24. package/dist/configs/constants.js +6 -0
  25. package/dist/configs/constants.js.map +1 -0
  26. package/dist/configs/deployed.js +118 -24
  27. package/dist/configs/deployed.js.map +1 -1
  28. package/dist/configs/envs.js +26 -8
  29. package/dist/configs/envs.js.map +1 -1
  30. package/dist/configs/index.js +1 -0
  31. package/dist/configs/index.js.map +1 -1
  32. package/dist/configs/utils.js +32 -0
  33. package/dist/configs/utils.js.map +1 -0
  34. package/dist/contracts/dashboard.js +15 -0
  35. package/dist/contracts/dashboard.js.map +1 -0
  36. package/dist/contracts/delegation.js +15 -0
  37. package/dist/contracts/delegation.js.map +1 -0
  38. package/dist/contracts/index.js +8 -0
  39. package/dist/contracts/index.js.map +1 -1
  40. package/dist/contracts/locator.js +20 -0
  41. package/dist/contracts/locator.js.map +1 -0
  42. package/dist/contracts/steth.js +19 -0
  43. package/dist/contracts/steth.js.map +1 -0
  44. package/dist/contracts/token-manager.js +20 -0
  45. package/dist/contracts/token-manager.js.map +1 -0
  46. package/dist/contracts/vault-factory.js +22 -0
  47. package/dist/contracts/vault-factory.js.map +1 -0
  48. package/dist/contracts/vault-hub.js +10 -9
  49. package/dist/contracts/vault-hub.js.map +1 -1
  50. package/dist/contracts/vault.js +18 -0
  51. package/dist/contracts/vault.js.map +1 -0
  52. package/dist/contracts/voting.js +22 -0
  53. package/dist/contracts/voting.js.map +1 -0
  54. package/dist/features/advanced-config.js +21 -0
  55. package/dist/features/advanced-config.js.map +1 -0
  56. package/dist/features/dashboard-delegation.js +26 -0
  57. package/dist/features/dashboard-delegation.js.map +1 -0
  58. package/dist/features/index.js +21 -0
  59. package/dist/features/index.js.map +1 -0
  60. package/dist/features/token-manager.js +6 -0
  61. package/dist/features/token-manager.js.map +1 -0
  62. package/dist/features/vault-factory.js +36 -0
  63. package/dist/features/vault-factory.js.map +1 -0
  64. package/dist/features/voting.js +136 -0
  65. package/dist/features/voting.js.map +1 -0
  66. package/dist/programs/config.js +33 -0
  67. package/dist/programs/config.js.map +1 -0
  68. package/dist/programs/dashboard.js +362 -0
  69. package/dist/programs/dashboard.js.map +1 -0
  70. package/dist/programs/delegation.js +605 -0
  71. package/dist/programs/delegation.js.map +1 -0
  72. package/dist/programs/index.js +5 -0
  73. package/dist/programs/index.js.map +1 -1
  74. package/dist/programs/vault-factory.js +84 -0
  75. package/dist/programs/vault-factory.js.map +1 -0
  76. package/dist/programs/vault-hub.js +331 -116
  77. package/dist/programs/vault-hub.js.map +1 -1
  78. package/dist/programs/vault.js +378 -0
  79. package/dist/programs/vault.js.map +1 -0
  80. package/dist/programs/voting.js +53 -0
  81. package/dist/programs/voting.js.map +1 -0
  82. package/dist/providers/wallet.js +21 -25
  83. package/dist/providers/wallet.js.map +1 -1
  84. package/dist/types/common.js +3 -0
  85. package/dist/types/common.js.map +1 -0
  86. package/dist/types/config.js +3 -0
  87. package/dist/types/config.js.map +1 -0
  88. package/dist/types/index.js +19 -0
  89. package/dist/types/index.js.map +1 -0
  90. package/dist/utils/call-contract.js +35 -0
  91. package/dist/utils/call-contract.js.map +1 -0
  92. package/dist/utils/data-validators.js +51 -0
  93. package/dist/utils/data-validators.js.map +1 -0
  94. package/dist/utils/error-handler.js +11 -0
  95. package/dist/utils/error-handler.js.map +1 -0
  96. package/dist/utils/index.js +5 -0
  97. package/dist/utils/index.js.map +1 -1
  98. package/dist/utils/resolve-path.js +13 -0
  99. package/dist/utils/resolve-path.js.map +1 -0
  100. package/dist/utils/sleep.js +8 -0
  101. package/dist/utils/sleep.js.map +1 -0
  102. package/package.json +7 -3
package/README.md CHANGED
@@ -1 +1,372 @@
1
- # liquid-staking-vault-cli
1
+ # Liquid Staking Vault CLI
2
+
3
+ A command-line interface (CLI) tool for managing liquid staking vaults. Simplify your staking operations with intuitive commands and streamlined workflows.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Features](#features)
8
+ - [Prerequisites](#prerequisites)
9
+ - [Installation](#installation)
10
+ - [Configuration](#configuration)
11
+ - [Usage](#usage)
12
+ - [Examples](#examples)
13
+ - [Contracts](#contracts)
14
+ - [License](#license)
15
+
16
+ ## Features
17
+
18
+ - **Easy Setup**: Quick installation and configuration to get you started.
19
+ - **Vault Management**: Create, update, and delete staking vaults with simple commands.
20
+ - **Monitoring**: Track vault metrics.
21
+
22
+ ## Prerequisites
23
+
24
+ - **Node.js**: Ensure you have Node.js (v20 or later) installed.
25
+ - **npm**: Node Package Manager is required to install dependencies.
26
+
27
+ ## Installation
28
+
29
+ Install the Liquid Staking Vault CLI globally using npm:
30
+
31
+ ```bash
32
+ npm install -g @lidofinance/lsv-cli
33
+ ```
34
+
35
+ Alternatively, you can install it locally in your project:
36
+
37
+ ```bash
38
+ npm install @lidofinance/lsv-cli
39
+ ```
40
+
41
+ ## Configuration
42
+
43
+ Before using the CLI, configure your environment variables. You can set them in a `.env` file in your project root.
44
+
45
+ ```.env
46
+ RPC_URL_17000=
47
+ RPC_URL_1=
48
+
49
+ # Contract addresses
50
+ DEPLOYED=deployed-holesky-vaults-devnet-0.json
51
+ CONFIG=./config.json
52
+
53
+ # Wallet
54
+ PRIVATE_KEY_1=0x...
55
+ PRIVATE_KEY_17000=0x...
56
+
57
+ ```
58
+ Application supported a few ways to adding or combine different settings
59
+
60
+ - #### 1st step
61
+ You can pass link to json file with address of deployed contacts into **DEPLOYED** variable. If you want use
62
+ devnet the all needed addresses of the contracts like VaultHub, VaultFactory etc already passed as example in configs/deployed-holesky-vaults-devnet-1.json.
63
+ Also at near future this feature will be changed to resolving contracts addresses by LIDO locator and link to json
64
+ file will no longer be necessary
65
+ - #### 2nd step
66
+ You need to pass link to json config file into **CONFIG** variable. The structure of a config file has to be like
67
+ ```javascript
68
+ {
69
+ "rpcLink": "https://link_to_rpc",
70
+ "privateKey": "some_key",
71
+ "chainId": 1, // or another number of chain id
72
+ "lidoLocator": "LIDO locator address", // take LIDO locator address in paticular chainId
73
+ "accounting": "LIDO accountind address" // take LIDO accounting address in paticular chainId
74
+ }
75
+ ```
76
+ If you plan to manage contracts the **privateKey** is required property for this type of operations.
77
+ For using rpcLink in a right way be attentive to match rpc resolver link and its chain ID.
78
+ Also, You can pass rpc link as env variable into RPC_URL_(chainID)
79
+ where chainID is current chain ID, chainId basically takes from config file, but also you can
80
+ pass it to deployed file and process env CHAIN_ID variable.
81
+
82
+ ## Usage
83
+
84
+ After installation and configuration, you can start using the CLI to manage your staking vaults.
85
+
86
+ ```bash
87
+ lsv-cli [command] [options]
88
+ ```
89
+
90
+ ```bash
91
+ lsv-cli -h
92
+ ```
93
+
94
+ ### Examples
95
+
96
+ **VaultHub constants**
97
+
98
+ ```bash
99
+ lsv-cli vh constants
100
+ ```
101
+
102
+ **Count of all vaults**
103
+
104
+ ```bash
105
+ lsv-cli vh v-count
106
+ ```
107
+
108
+ ## Contracts
109
+ - [VaultHub](#vaulthub)
110
+ - [VaultFactory](#vaultfactory)
111
+ - [Vault](#vault)
112
+ - [Dashboard](#dashboard)
113
+ - [Delegation](#delegation)
114
+
115
+ ### VaultHub
116
+ #### Command
117
+
118
+ ```bash
119
+ lsv-cli hub [arguments] [-options]
120
+ ```
121
+
122
+ #### VaultHub commands list
123
+
124
+ ```bash
125
+ lsv-cli hub -h
126
+ ```
127
+
128
+ #### API
129
+ | Command | Description |
130
+ |----------------------------------------------------------------------------------------------|-------------|
131
+ | constants | get vault hub constants |
132
+ | add-codehash \<codehash> | add vault proxy codehash to allowed list |
133
+ | v-count | get connected vaults number |
134
+ | vi \<index> | get vault and vault socket by index |
135
+ | va \<address> | get vault socket by address |
136
+ | v-connect \<address> \<shareLimit> \<reserveRatio> \<reserveRatioThreshold> \<treasuryFeeBP> | connects a vault to the hub (vault master role needed) |
137
+ | v-force-rebalance \<address> | force rebalance of the vault to have sufficient reserve ratio |
138
+ | v-role-admin \<role> | returns the admin role that controls role |
139
+ | v-role-member \<role> \<index> | returns one of the accounts that have role |
140
+ | v-role-member-count \<role> | returns the number of accounts that have role |
141
+ | v-role-has \<role> \<account> | returns true if account has been granted role |
142
+ | v-update-share-limit \<address> \<shareLimit> | updates share limit for the vault |
143
+ | v-disconnect \<address> | force disconnects a vault from the hub |
144
+ | v-owner-disconnect \<address> | disconnects a vault from the hub, msg.sender should be vault's owner |
145
+ | v-bbv-mint \<address> \<recipient> \<amountOfShares> | mint StETH shares backed by vault external balance to the receiver address |
146
+ | v-bbv-burn \<address> \<amountOfShares> | burn steth shares from the balance of the VaultHub contract |
147
+ | v-bbv-transfer \<address> \<amountOfShares> | separate burn function for EOA vault owners; requires vaultHub to be approved to transfer stETH |
148
+
149
+ ### VaultFactory
150
+
151
+ #### Command
152
+
153
+ ```bash
154
+ lsv-cli factory [arguments] [-options]
155
+ ```
156
+
157
+ #### VaultFactory commands list
158
+
159
+ ```bash
160
+ lsv-cli factory -h
161
+ ```
162
+
163
+ #### API
164
+
165
+ | Command | Description |
166
+ |----------------------------------------------------------------------|-----------------------------|
167
+ | create-vault \[-options] \<managerFee> \<performanceFee> \[quantity] | create vault contract |
168
+ Note: \[quantity] is optional argument, default 1
169
+ **[options]**
170
+
171
+ | Option | Description |
172
+ |--------------------------------------------------------|--------------------------------------|
173
+ | -a, --defaultAdmin \<defaultAdmin> | default admin address |
174
+ | -f, --funder \<funder> | funder role address |
175
+ | -w, --withdrawer \<withdrawer> | withdrawer role address |
176
+ | -m, --minter \<minter> | minter role address |
177
+ | -b, --burner \<burner> | burner role address |
178
+ | -r, --rebalancer \<rebalancer> | rebalancer role address |
179
+ | -p, --depositPauser \<depositPauser> | depositPauser role address |
180
+ | -d, --depositResumer \<depositResumer> | depositResumer role address |
181
+ | -e, --exitRequester \<exitRequester> | exitRequester role address |
182
+ | -u, --disconnecter \<disconnecter> | disconnecter role address |
183
+ | -c, --curator \<curator> | curator address |
184
+ | -n, --nodeOperatorManager \<nodeOperatorManager> | node operator manager address |
185
+ | -o, --nodeOperatorFeeClaimer \<nodeOperatorFeeClaimer> | node operator fee claimer address |
186
+
187
+ ### Vault
188
+ #### Command
189
+
190
+ ```bash
191
+ lsv-cli vault [arguments] [-options]
192
+ ```
193
+
194
+ #### Vault commands list
195
+
196
+ ```bash
197
+ lsv-cli vault -h
198
+ ```
199
+
200
+ #### API
201
+ | Command | Description |
202
+ |--------------------------------------------------------------------------------------|-------------|
203
+ | info \<address> | get vault base info |
204
+ | l-report \<address> | get latest vault report |
205
+ | is-balanced \<address> | returns whether vault is balanced, i.e. its valuation is greater than the locked amount |
206
+ | node-operator \<address> | returns the address of the node operator |
207
+ | valuation \<address> | get vault valuation |
208
+ | unlocked \<address> | get vault unlocked |
209
+ | locked \<address> | get vault locked |
210
+ | withdrawal-c \<address> | get vault withdrawal credentials |
211
+ | fund \<address> \<amount> | fund vault |
212
+ | withdraw \<address> \<recipient> \<amount> | withdraw from vault |
213
+ | rebalance \<address> \<amount> | rebalance vault |
214
+ | no-deposit-beacon \<address> \<numberOfDeposits> \<pubkeys> \<signatures> | deposit to beacon chain |
215
+ | no-val-exit \<address> \<validatorPublicKey> | request to exit validator |
216
+ | delta \<address> | the net difference between deposits and withdrawals |
217
+ | is-paused \<address> | Returns whether deposits are paused by the vault owner |
218
+ | bc-resume \<address> | Resumes deposits to beacon chain |
219
+ | bc-pause \<address> | Pauses deposits to beacon chain |
220
+ | report \<address> \<valuation> \<inOutDelta> \<locked> | Submits a report containing valuation, inOutDelta, and locked amount |
221
+ | compute-deposit \<address> \<pubkey> \<withdrawalCredentials> \<signature> \<amount> | Computes the deposit data root for a validator deposit |
222
+
223
+ ### Dashboard
224
+ #### Command
225
+
226
+ ```bash
227
+ lsv-cli dashboard [arguments] [-options]
228
+ ```
229
+
230
+ #### Dashboard commands list
231
+
232
+ ```bash
233
+ lsv-cli dashboard -h
234
+ ```
235
+
236
+ #### API
237
+
238
+ | Command | Description |
239
+ |----------------------------------------------------|------------------------------------------------------------------------------|
240
+ | info \<address> | Get dashboard base info |
241
+ | committee \<address> | Voting committee info |
242
+ | vault \<address> | Vault info |
243
+ | s-limit \<address> | Shares limit |
244
+ | s-minted \<address> | Shares minted |
245
+ | reserve-ratio \<address> | Vault reserve ratio of the vault |
246
+ | t-reserve-ratio \<address> | Threshold reserve ratio of the vault |
247
+ | t-fee \<address> | Treasury fee basis points |
248
+ | valuation \<address> | Valuation of the vault in ether |
249
+ | t-shares \<address> | Total of shares that can be minted on the vault |
250
+ | get-shares \<address> \<ether> | Maximum number of shares that can be minted with deposited ether |
251
+ | withdrawable-eth \<address> | Amount of ether that can be withdrawn from the staking vault |
252
+ | ownership \<address> \<newOwner> | Transfers ownership of the staking vault to a new owner |
253
+ | disconnect \<address> | Disconnects the staking vault from the vault hub |
254
+ | fund \<address> \<ether> | Funds the staking vault with ether |
255
+ | fund-weth \<address> \<wethAmount> | Funds the staking vault with wrapped ether |
256
+ | withdraw \<address> \<recipient> \<ether> | Withdraws ether from the staking vault to a recipient |
257
+ | withdraw-weth \<address> \<recipient> \<ether> | Withdraws stETH tokens from the staking vault to wrapped ether |
258
+ | exit \<address> \<validatorPubKey> | Requests the exit of a validator from the staking vault |
259
+ | mint-shares \<address> \<recipient> \<amountOfShares> | Mints stETH tokens backed by the vault to a recipient |
260
+ | mint-steth \<address> \<recipient> \<amountOfShares> | Mints stETH tokens backed by the vault to a recipient |
261
+ | mint-wsteth \<address> \<recipient> \<tokens> | Mints wstETH tokens backed by the vault to a recipient |
262
+ | burn-shares \<address> \<amountOfShares> | Burns stETH shares from sender (requires approved stETH) |
263
+ | burn-steth \<address> \<amountOfShares> | Burns stETH shares from sender (requires approved stETH) |
264
+ | burn-wsteth \<address> \<tokens> | Burn wstETH tokens from sender backed by vault |
265
+ | burn-shares-permit \<address> \<tokens> \<permitJSON> | Burns stETH tokens using permit (value in stETH) |
266
+ | burn-steth-permit \<address> \<tokens> \<permitJSON> | Burns stETH tokens using permit |
267
+ | burn-wsteth-permit \<address> \<tokens> \<permitJSON> | Burn wstETH tokens using EIP-2612 Permit |
268
+ | rebalance \<address> \<ether> | Rebalance the vault by transferring ether |
269
+ | recover-erc20 \<address> \<token> \<recipient> \<amount> | Recovers ERC20 tokens or ether from dashboard contract |
270
+ | recover-erc721 \<address> \<token> \<tokenId> \<recipient> | Transfers ERC721 NFT by token ID |
271
+ | deposit-pause \<address> | Pauses beacon chain deposits on staking vault |
272
+ | deposit-resume \<address> | Mass-grants multiple roles to multiple accounts |
273
+ | role-grant \<address> \<roleAssignmentJSON> | Mass-revokes multiple roles from multiple accounts |
274
+ | role-revoke \<address> \<roleAssignmentJSON> | Resumes beacon chain deposits on staking vault |
275
+
276
+ **\<permitJSON>**
277
+
278
+ ```json
279
+ {
280
+ "value": number as bigint;
281
+ "deadline": number as bigint;
282
+ "v": number;
283
+ "r": string as Address;
284
+ "s": string as Address;
285
+ }
286
+ ```
287
+
288
+ **\<roleAssignmentJSON>**
289
+
290
+ ```json
291
+ [{
292
+ "account": string as Address;
293
+ "role": string as `0x${string}`;
294
+ }]
295
+ ```
296
+
297
+ ### Delegation
298
+
299
+ #### Command
300
+
301
+ ```bash
302
+ lsv-cli delegation [arguments] [-options]
303
+ ```
304
+
305
+ #### Delegation commands list
306
+
307
+ ```bash
308
+ lsv-cli delegation -h
309
+ ```
310
+
311
+ #### API
312
+
313
+ | Command | Description |
314
+ |------------------------------------------------------------|-----------------------------------------------------------------------------|
315
+ | roles \<address> | Get delegation contract roles info |
316
+ | base-info \<address> | Get delegation base info |
317
+ | voting-lifetime \<address> | Get committee's voting lifetime period |
318
+ | is-healthy \<address> | Get vault healthy info |
319
+ | voting-info \<address> \<callId> \<role> | Get committee votes |
320
+ | cf \<address> | Curator fee in basis points |
321
+ | cf-report \<address> | The last report for which curator fee was claimed. Updated on each claim |
322
+ | cf-unclaimed \<address> | Returns accumulated unclaimed curator fee in ether (U = (R * F) / T) |
323
+ | cf-set \<address> \<newCuratorFee> | Sets the curator fee |
324
+ | cf-claim \<address> \<recipient> | Claims the curator fee |
325
+ | nof \<address> | Node operator fee in basis points |
326
+ | nof-report \<address> | The last report for which node operator fee was claimed. Updated on claim |
327
+ | nof-unclaimed \<address> | Returns accumulated unclaimed node operator fee in ether (U = (R * F) / T) |
328
+ | nof-set \<address> \<newNodeOperatorFeeBP> | Sets the node operator fee |
329
+ | nof-claim \<address> \<recipient> | Claims the node operator fee |
330
+ | unreserved \<address> | Returns the unreserved amount of ether |
331
+ | vc \<address> | Returns the voting committee |
332
+ | fund \<address> \<ether> | Funds the StakingVault with ether |
333
+ | withdraw \<address> \<recipient> \<ether> | Withdraws ether from the StakingVault |
334
+ | mint \<address> \<recipient> \<amountOfShares> | Mints shares for a given recipient |
335
+ | burn \<address> \<amountOfShares> | Burns shares for a given recipient |
336
+ | rebalance \<address> \<ether> | Rebalances the StakingVault with a given amount of ether |
337
+ | set-vote-lt \<address> \<newVoteLifetime> | Sets the vote lifetime |
338
+ | t-ownership \<address> \<newOwner> | Transfers the ownership of the StakingVault |
339
+ | disconnect \<address> | Voluntarily disconnects a StakingVault from VaultHub |
340
+ | deposit-pause \<address> | Pauses deposits to beacon chain from the StakingVault |
341
+ | deposit-resume \<address> | Resumes deposits to beacon chain from the StakingVault |
342
+ | vault \<address> | Vault info |
343
+ | s-limit \<address> | Shares limit |
344
+ | s-minted \<address> | Shares minted |
345
+ | reserve-ratio \<address> | Vault reserve ratio of the vault |
346
+ | t-reserve-ratio \<address> | Threshold reserve ratio of the vault |
347
+ | t-fee \<address> | Treasury fee basis points |
348
+ | valuation \<address> | Valuation of the vault in ether |
349
+ | t-shares \<address> | Total of shares that can be minted on the vault |
350
+ | get-shares \<address> \<ether> | Maximum number of shares that can be minted with deposited ether |
351
+ | withdrawable-eth \<address> | Amount of ether that can be withdrawn from the staking vault |
352
+ | ownership \<address> \<newOwner> | Transfers ownership of the staking vault to a new owner |
353
+ | fund-weth \<address> \<wethAmount> | Funds the staking vault with wrapped ether |
354
+ | withdraw-weth \<address> \<recipient> \<ether> | Withdraws stETH tokens from the staking vault to wrapped ether |
355
+ | exit \<address> \<validatorPubKey> | Requests the exit of a validator from the staking vault |
356
+ | mint-shares \<address> \<recipient> \<amountOfShares> | Mints stETH tokens backed by the vault to a recipient |
357
+ | mint-steth \<address> \<recipient> \<amountOfShares> | Mints stETH tokens backed by the vault to a recipient |
358
+ | mint-wsteth \<address> \<recipient> \<tokens> | Mints wstETH tokens backed by the vault to a recipient |
359
+ | burn-shares \<address> \<amountOfShares> | Burns stETH shares (requires approved stETH amount) |
360
+ | burn-steth \<address> \<amountOfShares> | Burns stETH shares (requires approved stETH amount) |
361
+ | burn-wsteth \<address> \<tokens> | Burn wstETH tokens backed by the vault |
362
+ | burn-shares-permit \<address> \<tokens> \<permitJSON> | Burns stETH tokens using permit (value in stETH) |
363
+ | burn-steth-permit \<address> \<tokens> \<permitJSON> | Burns stETH tokens using permit |
364
+ | burn-wsteth-permit \<address> \<tokens> \<permitJSON> | Burn wstETH tokens using EIP-2612 Permit |
365
+ | recover-erc20 \<address> \<token> \<recipient> \<amount> | Recovers ERC20 tokens or ether from the delegation contract |
366
+ | recover-erc721 \<address> \<token> \<tokenId> \<recipient> | Transfers ERC721 NFT by token ID |
367
+ | role-grant \<address> \<roleAssignmentJSON> | Mass-revokes multiple roles from multiple accounts |
368
+ | role-revoke \<address> \<roleAssignmentJSON> | Resumes beacon chain deposits on the staking vault |
369
+
370
+ ## License
371
+
372
+ This project is licensed under the [MIT License](LICENSE).