@lidofinance/lsv-cli 1.0.0-alpha.2 → 1.0.0-alpha.20
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.
- package/README.md +542 -1
- package/dist/abi/CLProofVerifier.js +279 -0
- package/dist/abi/CLProofVerifier.js.map +1 -0
- package/dist/abi/Dashboard.js +1498 -0
- package/dist/abi/Dashboard.js.map +1 -0
- package/dist/abi/Delegation.js +1786 -0
- package/dist/abi/Delegation.js.map +1 -0
- package/dist/abi/LidoLocator.js +426 -0
- package/dist/abi/LidoLocator.js.map +1 -0
- package/dist/abi/PredepositGuarantee.js +1733 -0
- package/dist/abi/PredepositGuarantee.js.map +1 -0
- package/dist/abi/StEth.js +493 -0
- package/dist/abi/StEth.js.map +1 -0
- package/dist/abi/StakingVault.js +978 -0
- package/dist/abi/StakingVault.js.map +1 -0
- package/dist/abi/TokenManager.js +756 -0
- package/dist/abi/TokenManager.js.map +1 -0
- package/dist/abi/VaultFactory.js +246 -0
- package/dist/abi/VaultFactory.js.map +1 -0
- package/dist/abi/VaultHub.js +1138 -439
- package/dist/abi/VaultHub.js.map +1 -1
- package/dist/abi/VaultHubViewer.js +297 -0
- package/dist/abi/VaultHubViewer.js.map +1 -0
- package/dist/abi/Voting.js +884 -0
- package/dist/abi/Voting.js.map +1 -0
- package/dist/abi/index.js +13 -0
- package/dist/abi/index.js.map +1 -0
- package/dist/command/index.js +4 -5
- package/dist/command/index.js.map +1 -1
- package/dist/configs/constants.js +3 -0
- package/dist/configs/constants.js.map +1 -0
- package/dist/configs/deployed.js +114 -53
- package/dist/configs/deployed.js.map +1 -1
- package/dist/configs/envs.js +10 -28
- package/dist/configs/envs.js.map +1 -1
- package/dist/configs/index.js +3 -18
- package/dist/configs/index.js.map +1 -1
- package/dist/configs/utils.js +26 -0
- package/dist/configs/utils.js.map +1 -0
- package/dist/contracts/clProofVerifier.js +29 -0
- package/dist/contracts/clProofVerifier.js.map +1 -0
- package/dist/contracts/dashboard.js +11 -0
- package/dist/contracts/dashboard.js.map +1 -0
- package/dist/contracts/delegation.js +11 -0
- package/dist/contracts/delegation.js.map +1 -0
- package/dist/contracts/index.js +12 -17
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/locator.js +16 -0
- package/dist/contracts/locator.js.map +1 -0
- package/dist/contracts/pdg.js +17 -0
- package/dist/contracts/pdg.js.map +1 -0
- package/dist/contracts/steth.js +15 -0
- package/dist/contracts/steth.js.map +1 -0
- package/dist/contracts/token-manager.js +16 -0
- package/dist/contracts/token-manager.js.map +1 -0
- package/dist/contracts/vault-factory.js +14 -0
- package/dist/contracts/vault-factory.js.map +1 -0
- package/dist/contracts/vault-hub-viewer.js +14 -0
- package/dist/contracts/vault-hub-viewer.js.map +1 -0
- package/dist/contracts/vault-hub.js +14 -17
- package/dist/contracts/vault-hub.js.map +1 -1
- package/dist/contracts/vault.js +14 -0
- package/dist/contracts/vault.js.map +1 -0
- package/dist/contracts/voting.js +18 -0
- package/dist/contracts/voting.js.map +1 -0
- package/dist/features/advanced-config.js +16 -0
- package/dist/features/advanced-config.js.map +1 -0
- package/dist/features/dashboard-delegation.js +25 -0
- package/dist/features/dashboard-delegation.js.map +1 -0
- package/dist/features/index.js +5 -0
- package/dist/features/index.js.map +1 -0
- package/dist/features/token-manager.js +7 -0
- package/dist/features/token-manager.js.map +1 -0
- package/dist/features/vault-factory.js +25 -0
- package/dist/features/vault-factory.js.map +1 -0
- package/dist/features/voting.js +125 -0
- package/dist/features/voting.js.map +1 -0
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/programs/account.js +29 -0
- package/dist/programs/account.js.map +1 -0
- package/dist/programs/config.js +31 -0
- package/dist/programs/config.js.map +1 -0
- package/dist/programs/dashboard/config.js +65 -0
- package/dist/programs/dashboard/config.js.map +1 -0
- package/dist/programs/dashboard/index.js +4 -0
- package/dist/programs/dashboard/index.js.map +1 -0
- package/dist/programs/dashboard/main.js +12 -0
- package/dist/programs/dashboard/main.js.map +1 -0
- package/dist/programs/dashboard/read.js +25 -0
- package/dist/programs/dashboard/read.js.map +1 -0
- package/dist/programs/dashboard/write.js +302 -0
- package/dist/programs/dashboard/write.js.map +1 -0
- package/dist/programs/delegation/config.js +33 -0
- package/dist/programs/delegation/config.js.map +1 -0
- package/dist/programs/delegation/index.js +4 -0
- package/dist/programs/delegation/index.js.map +1 -0
- package/dist/programs/delegation/main.js +12 -0
- package/dist/programs/delegation/main.js.map +1 -0
- package/dist/programs/delegation/read.js +98 -0
- package/dist/programs/delegation/read.js.map +1 -0
- package/dist/programs/delegation/write.js +327 -0
- package/dist/programs/delegation/write.js.map +1 -0
- package/dist/programs/hub/config.js +127 -0
- package/dist/programs/hub/config.js.map +1 -0
- package/dist/programs/hub/index.js +4 -0
- package/dist/programs/hub/index.js.map +1 -0
- package/dist/programs/hub/main.js +12 -0
- package/dist/programs/hub/main.js.map +1 -0
- package/dist/programs/hub/read.js +62 -0
- package/dist/programs/hub/read.js.map +1 -0
- package/dist/programs/hub/write.js +109 -0
- package/dist/programs/hub/write.js.map +1 -0
- package/dist/programs/index.js +10 -17
- package/dist/programs/index.js.map +1 -1
- package/dist/programs/pdg/config.js +97 -0
- package/dist/programs/pdg/config.js.map +1 -0
- package/dist/programs/pdg/index.js +4 -0
- package/dist/programs/pdg/index.js.map +1 -0
- package/dist/programs/pdg/main.js +12 -0
- package/dist/programs/pdg/main.js.map +1 -0
- package/dist/programs/pdg/read.js +7 -0
- package/dist/programs/pdg/read.js.map +1 -0
- package/dist/programs/pdg/write.js +114 -0
- package/dist/programs/pdg/write.js.map +1 -0
- package/dist/programs/pdg-helpers.js +73 -0
- package/dist/programs/pdg-helpers.js.map +1 -0
- package/dist/programs/vault/config.js +66 -0
- package/dist/programs/vault/config.js.map +1 -0
- package/dist/programs/vault/index.js +4 -0
- package/dist/programs/vault/index.js.map +1 -0
- package/dist/programs/vault/main.js +10 -0
- package/dist/programs/vault/main.js.map +1 -0
- package/dist/programs/vault/read.js +53 -0
- package/dist/programs/vault/read.js.map +1 -0
- package/dist/programs/vault/write.js +123 -0
- package/dist/programs/vault/write.js.map +1 -0
- package/dist/programs/vault-factory/config.js +2 -0
- package/dist/programs/vault-factory/config.js.map +1 -0
- package/dist/programs/vault-factory/index.js +4 -0
- package/dist/programs/vault-factory/index.js.map +1 -0
- package/dist/programs/vault-factory/main.js +12 -0
- package/dist/programs/vault-factory/main.js.map +1 -0
- package/dist/programs/vault-factory/read.js +26 -0
- package/dist/programs/vault-factory/read.js.map +1 -0
- package/dist/programs/vault-factory/write.js +110 -0
- package/dist/programs/vault-factory/write.js.map +1 -0
- package/dist/programs/vault-hub-viewer.js +52 -0
- package/dist/programs/vault-hub-viewer.js.map +1 -0
- package/dist/programs/voting.js +33 -0
- package/dist/programs/voting.js.map +1 -0
- package/dist/providers/index.js +1 -17
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/wallet.js +20 -32
- package/dist/providers/wallet.js.map +1 -1
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/contract.js +98 -0
- package/dist/utils/contract.js.map +1 -0
- package/dist/utils/data-validators.js +69 -0
- package/dist/utils/data-validators.js.map +1 -0
- package/dist/utils/error-handler.js +7 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/get-commands.js +11 -0
- package/dist/utils/get-commands.js.map +1 -0
- package/dist/utils/get-value.js +5 -11
- package/dist/utils/get-value.js.map +1 -1
- package/dist/utils/index.js +12 -17
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/parse-string.js +20 -0
- package/dist/utils/parse-string.js.map +1 -0
- package/dist/utils/prompts/default.js +17 -0
- package/dist/utils/prompts/default.js.map +1 -0
- package/dist/utils/prompts/delegation-dashboard.js +29 -0
- package/dist/utils/prompts/delegation-dashboard.js.map +1 -0
- package/dist/utils/prompts/index.js +5 -0
- package/dist/utils/prompts/index.js.map +1 -0
- package/dist/utils/prompts/predeposit-guarantee.js +25 -0
- package/dist/utils/prompts/predeposit-guarantee.js.map +1 -0
- package/dist/utils/prompts/vault.js +11 -0
- package/dist/utils/prompts/vault.js.map +1 -0
- package/dist/utils/proof/create-proof.js +62 -0
- package/dist/utils/proof/create-proof.js.map +1 -0
- package/dist/utils/proof/first-validator-gindex.js +26 -0
- package/dist/utils/proof/first-validator-gindex.js.map +1 -0
- package/dist/utils/proof/index.js +4 -0
- package/dist/utils/proof/index.js.map +1 -0
- package/dist/utils/proof/merkle-utils.js +131 -0
- package/dist/utils/proof/merkle-utils.js.map +1 -0
- package/dist/utils/proof/proofs.js +52 -0
- package/dist/utils/proof/proofs.js.map +1 -0
- package/dist/utils/read-programs-by-abi.js +87 -0
- package/dist/utils/read-programs-by-abi.js.map +1 -0
- package/dist/utils/resolve-path.js +10 -0
- package/dist/utils/resolve-path.js.map +1 -0
- package/dist/utils/sleep.js +4 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/spinner/index.js +2 -0
- package/dist/utils/spinner/index.js.map +1 -0
- package/dist/utils/spinner/spinners.js +16 -0
- package/dist/utils/spinner/spinners.js.map +1 -0
- package/dist/utils/spinner/spinners.json +119 -0
- package/dist/version/index.js +1 -0
- package/dist/version/index.js.map +1 -0
- package/package.json +52 -7
- package/dist/programs/vault-hub.js +0 -137
- package/dist/programs/vault-hub.js.map +0 -1
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { getDashboardContract } from '../../contracts/index.js';
|
|
2
|
+
import { callWriteMethodWithReceipt, confirmFund } from '../../utils/index.js';
|
|
3
|
+
import { dashboard } from './main.js';
|
|
4
|
+
// TODO: test without voting
|
|
5
|
+
dashboard
|
|
6
|
+
.command('ownership')
|
|
7
|
+
.description('transfers ownership of the staking vault to a new owner')
|
|
8
|
+
.argument('<address>', 'dashboard address')
|
|
9
|
+
.argument('<newOwner>', 'address of the new owner')
|
|
10
|
+
.action(async (address, newOwner) => {
|
|
11
|
+
const contract = getDashboardContract(address);
|
|
12
|
+
await callWriteMethodWithReceipt(contract, 'transferStakingVaultOwnership', [newOwner]);
|
|
13
|
+
});
|
|
14
|
+
dashboard
|
|
15
|
+
.command('disconnect')
|
|
16
|
+
.description('disconnects the staking vault from the vault hub')
|
|
17
|
+
.argument('<address>', 'dashboard address')
|
|
18
|
+
.action(async (address) => {
|
|
19
|
+
const contract = getDashboardContract(address);
|
|
20
|
+
await callWriteMethodWithReceipt(contract, 'voluntaryDisconnect', []);
|
|
21
|
+
});
|
|
22
|
+
dashboard
|
|
23
|
+
.command('fund')
|
|
24
|
+
.description('funds the staking vault with ether')
|
|
25
|
+
.option('-a, --address <address>', 'dashboard address')
|
|
26
|
+
.option('-e, --ether <ether>', 'amount of ether to be funded (in WEI)')
|
|
27
|
+
.action(async ({ address, ether }) => {
|
|
28
|
+
const { address: dashboard, amount } = await confirmFund(address, ether);
|
|
29
|
+
if (!dashboard || !amount)
|
|
30
|
+
return;
|
|
31
|
+
const contract = getDashboardContract(dashboard);
|
|
32
|
+
await callWriteMethodWithReceipt(contract, 'fund', [], BigInt(amount));
|
|
33
|
+
});
|
|
34
|
+
dashboard
|
|
35
|
+
.command('fund-weth')
|
|
36
|
+
.description('funds the staking vault with wrapped ether')
|
|
37
|
+
.argument('<address>', 'dashboard address')
|
|
38
|
+
.argument('<wethAmount>', 'amount of weth to be funded')
|
|
39
|
+
.action(async (address, wethAmount) => {
|
|
40
|
+
const contract = getDashboardContract(address);
|
|
41
|
+
await callWriteMethodWithReceipt(contract, 'fundWeth', [
|
|
42
|
+
BigInt(wethAmount),
|
|
43
|
+
]);
|
|
44
|
+
});
|
|
45
|
+
dashboard
|
|
46
|
+
.command('withdraw')
|
|
47
|
+
.description('withdraws ether from the staking vault to a recipient')
|
|
48
|
+
.argument('<address>', 'dashboard address')
|
|
49
|
+
.argument('<recipient>', 'address of the recipient')
|
|
50
|
+
.argument('<wei>', 'amount of ether to withdraw (in WEI)')
|
|
51
|
+
.action(async (address, recipient, ether) => {
|
|
52
|
+
const contract = getDashboardContract(address);
|
|
53
|
+
await callWriteMethodWithReceipt(contract, 'withdraw', [
|
|
54
|
+
recipient,
|
|
55
|
+
BigInt(ether),
|
|
56
|
+
]);
|
|
57
|
+
});
|
|
58
|
+
dashboard
|
|
59
|
+
.command('withdraw-weth')
|
|
60
|
+
.description('withdraws stETH tokens from the staking vault to wrapped ether')
|
|
61
|
+
.argument('<address>', 'dashboard address')
|
|
62
|
+
.argument('<recipient>', 'address of the recipient')
|
|
63
|
+
.argument('<ether>', 'amount of ether to withdraw')
|
|
64
|
+
.action(async (address, recipient, ether) => {
|
|
65
|
+
const contract = getDashboardContract(address);
|
|
66
|
+
await callWriteMethodWithReceipt(contract, 'withdrawWETH', [
|
|
67
|
+
recipient,
|
|
68
|
+
BigInt(ether),
|
|
69
|
+
]);
|
|
70
|
+
});
|
|
71
|
+
dashboard
|
|
72
|
+
.command('exit')
|
|
73
|
+
.description('requests the exit of a validator from the staking vault')
|
|
74
|
+
.argument('<address>', 'dashboard address')
|
|
75
|
+
.argument('<validatorPubKey>', 'public key of the validator to exit')
|
|
76
|
+
.action(async (address, validatorPubKey) => {
|
|
77
|
+
const contract = getDashboardContract(address);
|
|
78
|
+
await callWriteMethodWithReceipt(contract, 'requestValidatorExit', [
|
|
79
|
+
validatorPubKey,
|
|
80
|
+
]);
|
|
81
|
+
});
|
|
82
|
+
dashboard
|
|
83
|
+
.command('trigger-validator-withdrawal')
|
|
84
|
+
.description('triggers the withdrawal of a validator from the staking vault')
|
|
85
|
+
.argument('<address>', 'dashboard address')
|
|
86
|
+
.argument('<pubkeys>', 'pubkeys of the validators to withdraw')
|
|
87
|
+
.argument('<amounts>', 'amounts of ether to withdraw')
|
|
88
|
+
.argument('<recipient>', 'address of the recipient')
|
|
89
|
+
.action(async (address, pubkeys, amounts, recipient) => {
|
|
90
|
+
const contract = getDashboardContract(address);
|
|
91
|
+
await callWriteMethodWithReceipt(contract, 'triggerValidatorWithdrawal', [
|
|
92
|
+
pubkeys,
|
|
93
|
+
amounts.map(BigInt),
|
|
94
|
+
recipient,
|
|
95
|
+
]);
|
|
96
|
+
});
|
|
97
|
+
dashboard
|
|
98
|
+
.command('mint-shares')
|
|
99
|
+
.description('mints stETH tokens backed by the vault to a recipient')
|
|
100
|
+
.argument('<address>', 'dashboard address')
|
|
101
|
+
.argument('<recipient>', 'address of the recipient')
|
|
102
|
+
.argument('<amountOfShares>', 'amount of shares to mint')
|
|
103
|
+
.action(async (address, recipient, amountOfShares) => {
|
|
104
|
+
const contract = getDashboardContract(address);
|
|
105
|
+
await callWriteMethodWithReceipt(contract, 'mintShares', [
|
|
106
|
+
recipient,
|
|
107
|
+
BigInt(amountOfShares),
|
|
108
|
+
]);
|
|
109
|
+
});
|
|
110
|
+
dashboard
|
|
111
|
+
.command('mint-steth')
|
|
112
|
+
.description('mints stETH tokens backed by the vault to a recipient')
|
|
113
|
+
.argument('<address>', 'dashboard address')
|
|
114
|
+
.argument('<recipient>', 'address of the recipient')
|
|
115
|
+
.argument('<amountOfShares>', 'amount of shares to mint')
|
|
116
|
+
.action(async (address, recipient, amountOfShares) => {
|
|
117
|
+
const contract = getDashboardContract(address);
|
|
118
|
+
await callWriteMethodWithReceipt(contract, 'mintStETH', [
|
|
119
|
+
recipient,
|
|
120
|
+
BigInt(amountOfShares),
|
|
121
|
+
]);
|
|
122
|
+
});
|
|
123
|
+
dashboard
|
|
124
|
+
.command('mint-wsteth')
|
|
125
|
+
.description('mints wstETH tokens backed by the vault to a recipient')
|
|
126
|
+
.argument('<address>', 'dashboard address')
|
|
127
|
+
.argument('<recipient>', 'address of the recipient')
|
|
128
|
+
.argument('<tokens>', 'amount of tokens to mint')
|
|
129
|
+
.action(async (address, recipient, tokens) => {
|
|
130
|
+
const contract = getDashboardContract(address);
|
|
131
|
+
await callWriteMethodWithReceipt(contract, 'mintWstETH', [
|
|
132
|
+
recipient,
|
|
133
|
+
BigInt(tokens),
|
|
134
|
+
]);
|
|
135
|
+
});
|
|
136
|
+
dashboard
|
|
137
|
+
.command('burn-shares')
|
|
138
|
+
.description('Burns stETH shares from the sender backed by the vault. Expects corresponding amount of stETH approved to this contract')
|
|
139
|
+
.argument('<address>', 'dashboard address')
|
|
140
|
+
.argument('<amountOfShares>', 'amount of shares to burn')
|
|
141
|
+
.action(async (address, amountOfShares) => {
|
|
142
|
+
const contract = getDashboardContract(address);
|
|
143
|
+
await callWriteMethodWithReceipt(contract, 'burnShares', [
|
|
144
|
+
BigInt(amountOfShares),
|
|
145
|
+
]);
|
|
146
|
+
});
|
|
147
|
+
dashboard
|
|
148
|
+
.command('burn-steth')
|
|
149
|
+
.description('Burns stETH shares from the sender backed by the vault. Expects stETH amount approved to this contract.')
|
|
150
|
+
.argument('<address>', 'dashboard address')
|
|
151
|
+
.argument('<amountOfShares>', 'amount of shares to burn')
|
|
152
|
+
.action(async (address, amountOfShares) => {
|
|
153
|
+
const contract = getDashboardContract(address);
|
|
154
|
+
await callWriteMethodWithReceipt(contract, 'burnStETH', [
|
|
155
|
+
BigInt(amountOfShares),
|
|
156
|
+
]);
|
|
157
|
+
});
|
|
158
|
+
dashboard
|
|
159
|
+
.command('burn-wsteth')
|
|
160
|
+
.description('burn wstETH tokens from the sender backed by the vault')
|
|
161
|
+
.argument('<address>', 'dashboard address')
|
|
162
|
+
.argument('<tokens>', 'amount of wstETH tokens to burn')
|
|
163
|
+
.action(async (address, tokens) => {
|
|
164
|
+
const contract = getDashboardContract(address);
|
|
165
|
+
await callWriteMethodWithReceipt(contract, 'burnWstETH', [BigInt(tokens)]);
|
|
166
|
+
});
|
|
167
|
+
dashboard
|
|
168
|
+
.command('burn-shares-permit')
|
|
169
|
+
.description('Burns stETH tokens (in shares) backed by the vault from the sender using permit (with value in stETH).')
|
|
170
|
+
.argument('<address>', 'dashboard address')
|
|
171
|
+
.argument('<tokens>', 'amount of stETH tokens to burn')
|
|
172
|
+
.argument('<permitJSON>', 'JSON data required for the stETH.permit() method to set the allowance')
|
|
173
|
+
.action(async (address, tokens, permitJSON) => {
|
|
174
|
+
const permit = JSON.parse(permitJSON);
|
|
175
|
+
const contract = getDashboardContract(address);
|
|
176
|
+
await callWriteMethodWithReceipt(contract, 'burnSharesWithPermit', [
|
|
177
|
+
BigInt(tokens),
|
|
178
|
+
permit,
|
|
179
|
+
]);
|
|
180
|
+
});
|
|
181
|
+
dashboard
|
|
182
|
+
.command('burn-steth-permit')
|
|
183
|
+
.description('Burns stETH tokens backed by the vault from the sender using permit.')
|
|
184
|
+
.argument('<address>', 'dashboard address')
|
|
185
|
+
.argument('<tokens>', 'amount of stETH tokens to burn')
|
|
186
|
+
.argument('<permitJSON>', 'JSON data required for the stETH.permit() method to set the allowance')
|
|
187
|
+
.action(async (address, tokens, permitJSON) => {
|
|
188
|
+
const permit = JSON.parse(permitJSON);
|
|
189
|
+
const contract = getDashboardContract(address);
|
|
190
|
+
await callWriteMethodWithReceipt(contract, 'burnStETHWithPermit', [
|
|
191
|
+
BigInt(tokens),
|
|
192
|
+
permit,
|
|
193
|
+
]);
|
|
194
|
+
});
|
|
195
|
+
dashboard
|
|
196
|
+
.command('burn-wsteth-permit')
|
|
197
|
+
.description('burn wstETH tokens from the sender backed by the vault using EIP-2612 Permit')
|
|
198
|
+
.argument('<address>', 'dashboard address')
|
|
199
|
+
.argument('<tokens>', 'amount of wstETH tokens to burn')
|
|
200
|
+
.argument('<permitJSON>', 'JSON data required for the wstETH.permit() method to set the allowance')
|
|
201
|
+
.action(async (address, tokens, permitJSON) => {
|
|
202
|
+
const permit = JSON.parse(permitJSON);
|
|
203
|
+
const contract = getDashboardContract(address);
|
|
204
|
+
await callWriteMethodWithReceipt(contract, 'burnWstETHWithPermit', [
|
|
205
|
+
BigInt(tokens),
|
|
206
|
+
permit,
|
|
207
|
+
]);
|
|
208
|
+
});
|
|
209
|
+
dashboard
|
|
210
|
+
.command('rebalance')
|
|
211
|
+
.description('rebalance the vault by transferring ether')
|
|
212
|
+
.argument('<address>', 'dashboard address')
|
|
213
|
+
.argument('<ether>', 'amount of ether to rebalance')
|
|
214
|
+
.action(async (address, ether) => {
|
|
215
|
+
const contract = getDashboardContract(address);
|
|
216
|
+
await callWriteMethodWithReceipt(contract, 'rebalanceVault', [
|
|
217
|
+
BigInt(ether),
|
|
218
|
+
]);
|
|
219
|
+
});
|
|
220
|
+
dashboard
|
|
221
|
+
.command('recover-erc20')
|
|
222
|
+
.description('recovers ERC20 tokens or ether from the dashboard contract to sender')
|
|
223
|
+
.argument('<address>', 'dashboard address')
|
|
224
|
+
.argument('<token>', 'Address of the token to recover or 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee for ether')
|
|
225
|
+
.argument('<recipient>', 'Address of the recovery recipient')
|
|
226
|
+
.argument('<amount>', 'amount of ether to recover')
|
|
227
|
+
.action(async (address, token, recipient, amount) => {
|
|
228
|
+
const contract = getDashboardContract(address);
|
|
229
|
+
await callWriteMethodWithReceipt(contract, 'recoverERC20', [
|
|
230
|
+
token,
|
|
231
|
+
recipient,
|
|
232
|
+
BigInt(amount),
|
|
233
|
+
]);
|
|
234
|
+
});
|
|
235
|
+
dashboard
|
|
236
|
+
.command('recover-erc721')
|
|
237
|
+
.description('Transfers a given token_id of an ERC721-compatible NFT (defined by the token contract address)')
|
|
238
|
+
.argument('<address>', 'dashboard address')
|
|
239
|
+
.argument('<token>', 'an ERC721-compatible token')
|
|
240
|
+
.argument('<tokenId>', 'token id to recover')
|
|
241
|
+
.argument('<recipient>', 'Address of the recovery recipient')
|
|
242
|
+
.action(async (address, token, tokenId, recipient) => {
|
|
243
|
+
const contract = getDashboardContract(address);
|
|
244
|
+
await callWriteMethodWithReceipt(contract, 'recoverERC721', [
|
|
245
|
+
token,
|
|
246
|
+
BigInt(tokenId),
|
|
247
|
+
recipient,
|
|
248
|
+
]);
|
|
249
|
+
});
|
|
250
|
+
dashboard
|
|
251
|
+
.command('deposit-pause')
|
|
252
|
+
.description('Pauses beacon chain deposits on the staking vault.')
|
|
253
|
+
.argument('<address>', 'dashboard address')
|
|
254
|
+
.action(async (address) => {
|
|
255
|
+
const contract = getDashboardContract(address);
|
|
256
|
+
await callWriteMethodWithReceipt(contract, 'pauseBeaconChainDeposits', []);
|
|
257
|
+
});
|
|
258
|
+
dashboard
|
|
259
|
+
.command('deposit-resume')
|
|
260
|
+
.description('Mass-grants multiple roles to multiple accounts.')
|
|
261
|
+
.argument('<address>', 'dashboard address')
|
|
262
|
+
.action(async (address) => {
|
|
263
|
+
const contract = getDashboardContract(address);
|
|
264
|
+
await callWriteMethodWithReceipt(contract, 'resumeBeaconChainDeposits', []);
|
|
265
|
+
});
|
|
266
|
+
dashboard
|
|
267
|
+
.command('role-grant')
|
|
268
|
+
.description('Mass-revokes multiple roles from multiple accounts.')
|
|
269
|
+
.argument('<address>', 'dashboard address')
|
|
270
|
+
.argument('<roleAssignmentJSON>', 'JSON array of role assignments')
|
|
271
|
+
.action(async (address, roleAssignmentJSON) => {
|
|
272
|
+
const contract = getDashboardContract(address);
|
|
273
|
+
const payload = JSON.parse(roleAssignmentJSON);
|
|
274
|
+
if (!Array.isArray(payload)) {
|
|
275
|
+
throw new Error('the 2nd argument should be an array of role assignments');
|
|
276
|
+
}
|
|
277
|
+
await callWriteMethodWithReceipt(contract, 'grantRoles', [payload]);
|
|
278
|
+
});
|
|
279
|
+
dashboard
|
|
280
|
+
.command('role-revoke')
|
|
281
|
+
.description('Resumes beacon chain deposits on the staking vault.')
|
|
282
|
+
.argument('<address>', 'dashboard address')
|
|
283
|
+
.argument('<roleAssignmentJSON>', 'JSON array of role assignments')
|
|
284
|
+
.action(async (address, roleAssignmentJSON) => {
|
|
285
|
+
const contract = getDashboardContract(address);
|
|
286
|
+
const payload = JSON.parse(roleAssignmentJSON);
|
|
287
|
+
if (!Array.isArray(payload)) {
|
|
288
|
+
throw new Error('the 2nd argument should be an array of role assignments');
|
|
289
|
+
}
|
|
290
|
+
await callWriteMethodWithReceipt(contract, 'revokeRoles', [payload]);
|
|
291
|
+
});
|
|
292
|
+
dashboard
|
|
293
|
+
.command('compensate-disproven-predeposit')
|
|
294
|
+
.description('Compensates a disproven predeposit from the Predeposit Guarantee contract.')
|
|
295
|
+
.argument('<address>', 'dashboard address')
|
|
296
|
+
.argument('<pubkey>', 'validator public key')
|
|
297
|
+
.argument('<recipient>', 'address of the recipient')
|
|
298
|
+
.action(async (address, pubkey, recipient) => {
|
|
299
|
+
const contract = getDashboardContract(address);
|
|
300
|
+
await callWriteMethodWithReceipt(contract, 'compensateDisprovenPredepositFromPDG', [pubkey, recipient]);
|
|
301
|
+
});
|
|
302
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../programs/dashboard/write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { readCommandConfig as dashboardReadCommandConfig } from '../../programs/dashboard/config.js';
|
|
2
|
+
export const readCommandConfig = {
|
|
3
|
+
...dashboardReadCommandConfig,
|
|
4
|
+
nodeOperatorFeeBP: {
|
|
5
|
+
name: 'no-fee',
|
|
6
|
+
description: 'get node operator fee in basis points',
|
|
7
|
+
},
|
|
8
|
+
nodeOperatorFeeClaimedReport: {
|
|
9
|
+
name: 'no-fee-report',
|
|
10
|
+
description: 'get node operator fee claimed report',
|
|
11
|
+
},
|
|
12
|
+
nodeOperatorUnclaimedFee: {
|
|
13
|
+
name: 'no-unclaimed-fee',
|
|
14
|
+
description: `Returns the accumulated unclaimed node operator fee in ether,
|
|
15
|
+
calculated as: U = (R * F) / T
|
|
16
|
+
where:
|
|
17
|
+
- U is the node operator unclaimed fee;
|
|
18
|
+
- R is the StakingVault rewards accrued since the last node operator fee claim;
|
|
19
|
+
- F is nodeOperatorFeeBP
|
|
20
|
+
- T is the total basis points, 10,000.`,
|
|
21
|
+
},
|
|
22
|
+
curatorUnclaimedFee: {
|
|
23
|
+
name: 'cf-unclaimed',
|
|
24
|
+
description: `Returns the accumulated unclaimed curator fee in ether,
|
|
25
|
+
calculated as: U = (R * F) / T
|
|
26
|
+
where:
|
|
27
|
+
- U is the curator unclaimed fee;
|
|
28
|
+
- R is the StakingVault rewards accrued since the last curator fee claim;
|
|
29
|
+
- F is curatorFeeBP
|
|
30
|
+
- T is the total basis points, 10,000.`,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../programs/delegation/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,IAAI,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE/F,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,GAAG,0BAA0B;IAC7B,iBAAiB,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,uCAAuC;KACrD;IACD,4BAA4B,EAAE;QAC5B,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,sCAAsC;KACpD;IACD,wBAAwB,EAAE;QACxB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE;;;;;;uDAMsC;KACpD;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE;;;;;;uDAMsC;KACpD;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../programs/delegation/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { program } from '../../command/index.js';
|
|
2
|
+
import { Option } from 'commander';
|
|
3
|
+
import { getCommandsJson } from '../../utils/index.js';
|
|
4
|
+
export const delegation = program
|
|
5
|
+
.command('delegation')
|
|
6
|
+
.description('delegation contract');
|
|
7
|
+
delegation.addOption(new Option('-cmd2json'));
|
|
8
|
+
delegation.on('option:-cmd2json', function () {
|
|
9
|
+
console.info(getCommandsJson(delegation));
|
|
10
|
+
process.exit();
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../programs/delegation/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO;KAC9B,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEtC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9C,UAAU,CAAC,EAAE,CAAC,kBAAkB,EAAE;IAChC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { DelegationAbi } from '../../abi/index.js';
|
|
2
|
+
import { getDelegationContract, getStakingVaultContract } from '../../contracts/index.js';
|
|
3
|
+
import { generateReadCommands } from '../../utils/index.js';
|
|
4
|
+
import { getBaseInfo } from '../../features/index.js';
|
|
5
|
+
import { delegation } from './main.js';
|
|
6
|
+
import { readCommandConfig } from './config.js';
|
|
7
|
+
generateReadCommands(DelegationAbi, getDelegationContract, delegation, readCommandConfig);
|
|
8
|
+
delegation
|
|
9
|
+
.command('roles')
|
|
10
|
+
.description('get delegation contract roles info')
|
|
11
|
+
.argument('<address>', 'delegation contract address')
|
|
12
|
+
.action(async (address) => {
|
|
13
|
+
const contract = getDelegationContract(address);
|
|
14
|
+
// TODO: check roles
|
|
15
|
+
try {
|
|
16
|
+
const CURATOR_FEE_CLAIM_ROLE = await contract.read.CURATOR_FEE_CLAIM_ROLE();
|
|
17
|
+
const CURATOR_FEE_SET_ROLE = await contract.read.CURATOR_FEE_SET_ROLE();
|
|
18
|
+
const NODE_OPERATOR_MANAGER_ROLE = await contract.read.NODE_OPERATOR_MANAGER_ROLE();
|
|
19
|
+
const NODE_OPERATOR_FEE_CLAIMER_ROLE = await contract.read.NODE_OPERATOR_FEE_CLAIM_ROLE();
|
|
20
|
+
const FUND_ROLE = await contract.read.FUND_ROLE();
|
|
21
|
+
const WITHDRAW_ROLE = await contract.read.WITHDRAW_ROLE();
|
|
22
|
+
const MINT_ROLE = await contract.read.MINT_ROLE();
|
|
23
|
+
const BURN_ROLE = await contract.read.BURN_ROLE();
|
|
24
|
+
const REBALANCE_ROLE = await contract.read.REBALANCE_ROLE();
|
|
25
|
+
const PAUSE_BEACON_CHAIN_DEPOSITS_ROLE = await contract.read.PAUSE_BEACON_CHAIN_DEPOSITS_ROLE();
|
|
26
|
+
const RESUME_BEACON_CHAIN_DEPOSITS_ROLE = await contract.read.RESUME_BEACON_CHAIN_DEPOSITS_ROLE();
|
|
27
|
+
const REQUEST_VALIDATOR_EXIT_ROLE = await contract.read.REQUEST_VALIDATOR_EXIT_ROLE();
|
|
28
|
+
const VOLUNTARY_DISCONNECT_ROLE = await contract.read.VOLUNTARY_DISCONNECT_ROLE();
|
|
29
|
+
const TRIGGER_VALIDATOR_WITHDRAWAL_ROLE = await contract.read.TRIGGER_VALIDATOR_WITHDRAWAL_ROLE();
|
|
30
|
+
const PDG_WITHDRAWAL_ROLE = await contract.read.PDG_WITHDRAWAL_ROLE();
|
|
31
|
+
const ASSET_RECOVERY_ROLE = await contract.read.ASSET_RECOVERY_ROLE();
|
|
32
|
+
const payload = {
|
|
33
|
+
CURATOR_FEE_CLAIM_ROLE,
|
|
34
|
+
CURATOR_FEE_SET_ROLE,
|
|
35
|
+
NODE_OPERATOR_MANAGER_ROLE,
|
|
36
|
+
NODE_OPERATOR_FEE_CLAIMER_ROLE,
|
|
37
|
+
FUND_ROLE,
|
|
38
|
+
WITHDRAW_ROLE,
|
|
39
|
+
MINT_ROLE,
|
|
40
|
+
BURN_ROLE,
|
|
41
|
+
REBALANCE_ROLE,
|
|
42
|
+
PAUSE_BEACON_CHAIN_DEPOSITS_ROLE,
|
|
43
|
+
RESUME_BEACON_CHAIN_DEPOSITS_ROLE,
|
|
44
|
+
REQUEST_VALIDATOR_EXIT_ROLE,
|
|
45
|
+
VOLUNTARY_DISCONNECT_ROLE,
|
|
46
|
+
TRIGGER_VALIDATOR_WITHDRAWAL_ROLE,
|
|
47
|
+
PDG_WITHDRAWAL_ROLE,
|
|
48
|
+
ASSET_RECOVERY_ROLE,
|
|
49
|
+
};
|
|
50
|
+
console.table(Object.entries(payload));
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
if (err instanceof Error) {
|
|
54
|
+
console.info('Error when getting roles:\n', err.message);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
delegation
|
|
59
|
+
.command('base-info')
|
|
60
|
+
.description('get delegation base info')
|
|
61
|
+
.argument('<address>', 'delegation address')
|
|
62
|
+
.action(async (address) => {
|
|
63
|
+
const contract = getDelegationContract(address);
|
|
64
|
+
await getBaseInfo(contract);
|
|
65
|
+
});
|
|
66
|
+
delegation
|
|
67
|
+
.command('is-healthy')
|
|
68
|
+
.description('get vault healthy info')
|
|
69
|
+
.argument('<address>', 'vault address')
|
|
70
|
+
.action(async (address) => {
|
|
71
|
+
const contract = getDelegationContract(address);
|
|
72
|
+
try {
|
|
73
|
+
const valuation = await contract.read.valuation();
|
|
74
|
+
const curatorUnclaimedFee = await contract.read.curatorUnclaimedFee();
|
|
75
|
+
const nodeOperatorUnclaimedFee = await contract.read.nodeOperatorUnclaimedFee();
|
|
76
|
+
const minted = await contract.read.sharesMinted();
|
|
77
|
+
const { vault } = await contract.read.vaultSocket();
|
|
78
|
+
const vaultContract = getStakingVaultContract(vault);
|
|
79
|
+
const locked = await vaultContract.read.locked();
|
|
80
|
+
const reserved = locked + curatorUnclaimedFee + nodeOperatorUnclaimedFee;
|
|
81
|
+
const valuationPerc = (valuation / (reserved + minted)) * 100n;
|
|
82
|
+
const isHealthy = valuationPerc >= 100n;
|
|
83
|
+
console.table({
|
|
84
|
+
'Vault Healthy': isHealthy,
|
|
85
|
+
Valuation: valuation,
|
|
86
|
+
'Curator Unclaimed Fee': curatorUnclaimedFee,
|
|
87
|
+
'Node Operator Unclaimed Fee': nodeOperatorUnclaimedFee,
|
|
88
|
+
Minted: minted,
|
|
89
|
+
Reserved: reserved,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
if (err instanceof Error) {
|
|
94
|
+
console.info('Error when getting info:\n', err.message);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../programs/delegation/read.ts"],"names":[],"mappings":"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"}
|