@lidofinance/lsv-cli 1.0.0-alpha.23 → 1.0.0-alpha.24

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 (220) hide show
  1. package/README.md +15 -44
  2. package/dist/abi/BlsHarness.js +232 -0
  3. package/dist/abi/BlsHarness.js.map +1 -0
  4. package/dist/abi/CLProofVerifier.js +47 -79
  5. package/dist/abi/CLProofVerifier.js.map +1 -1
  6. package/dist/abi/Dashboard.js +618 -196
  7. package/dist/abi/Dashboard.js.map +1 -1
  8. package/dist/abi/LidoLocator.js +7 -7
  9. package/dist/abi/LidoLocator.js.map +1 -1
  10. package/dist/abi/{Delegation.js → OperatorGrid.js} +466 -1067
  11. package/dist/abi/OperatorGrid.js.map +1 -0
  12. package/dist/abi/PredepositGuarantee.js +69 -13
  13. package/dist/abi/PredepositGuarantee.js.map +1 -1
  14. package/dist/abi/StEth.js +341 -341
  15. package/dist/abi/StEth.js.map +1 -1
  16. package/dist/abi/StakingVault.js +207 -73
  17. package/dist/abi/StakingVault.js.map +1 -1
  18. package/dist/abi/VaultFactory.js +67 -104
  19. package/dist/abi/VaultFactory.js.map +1 -1
  20. package/dist/abi/VaultHub.js +347 -237
  21. package/dist/abi/VaultHub.js.map +1 -1
  22. package/dist/abi/WstEth.js +478 -0
  23. package/dist/abi/WstEth.js.map +1 -0
  24. package/dist/abi/index.js +5 -2
  25. package/dist/abi/index.js.map +1 -1
  26. package/dist/configs/constants.js +2 -2
  27. package/dist/configs/constants.js.map +1 -1
  28. package/dist/configs/deployed.js +21 -47
  29. package/dist/configs/deployed.js.map +1 -1
  30. package/dist/configs/envs.js +5 -6
  31. package/dist/configs/envs.js.map +1 -1
  32. package/dist/configs/utils.js +4 -8
  33. package/dist/configs/utils.js.map +1 -1
  34. package/dist/contracts/blsHarness.js +24 -0
  35. package/dist/contracts/blsHarness.js.map +1 -0
  36. package/dist/contracts/clProofVerifier.js +4 -10
  37. package/dist/contracts/clProofVerifier.js.map +1 -1
  38. package/dist/contracts/index.js +3 -1
  39. package/dist/contracts/index.js.map +1 -1
  40. package/dist/contracts/locator.js +3 -3
  41. package/dist/contracts/locator.js.map +1 -1
  42. package/dist/contracts/operator-grid.js +17 -0
  43. package/dist/contracts/operator-grid.js.map +1 -0
  44. package/dist/contracts/pdg.js +2 -2
  45. package/dist/contracts/pdg.js.map +1 -1
  46. package/dist/contracts/reportChecker.js +4 -5
  47. package/dist/contracts/reportChecker.js.map +1 -1
  48. package/dist/contracts/steth.js +3 -3
  49. package/dist/contracts/steth.js.map +1 -1
  50. package/dist/contracts/token-manager.js +3 -3
  51. package/dist/contracts/token-manager.js.map +1 -1
  52. package/dist/contracts/vault-factory.js +2 -2
  53. package/dist/contracts/vault-factory.js.map +1 -1
  54. package/dist/contracts/vault-hub.js +3 -3
  55. package/dist/contracts/vault-hub.js.map +1 -1
  56. package/dist/contracts/vault-viewer.js +4 -6
  57. package/dist/contracts/vault-viewer.js.map +1 -1
  58. package/dist/contracts/vault.js +2 -2
  59. package/dist/contracts/vault.js.map +1 -1
  60. package/dist/contracts/voting.js +3 -3
  61. package/dist/contracts/voting.js.map +1 -1
  62. package/dist/contracts/wsteth.js +18 -0
  63. package/dist/contracts/wsteth.js.map +1 -0
  64. package/dist/features/advanced-config.js +3 -2
  65. package/dist/features/advanced-config.js.map +1 -1
  66. package/dist/features/dashboard.js +131 -0
  67. package/dist/features/dashboard.js.map +1 -0
  68. package/dist/features/index.js +8 -4
  69. package/dist/features/index.js.map +1 -1
  70. package/dist/features/operator-grid.js +57 -0
  71. package/dist/features/operator-grid.js.map +1 -0
  72. package/dist/features/pdg.js +79 -0
  73. package/dist/features/pdg.js.map +1 -0
  74. package/dist/features/vault-factory.js +33 -6
  75. package/dist/features/vault-factory.js.map +1 -1
  76. package/dist/features/vault-hub.js +81 -0
  77. package/dist/features/vault-hub.js.map +1 -0
  78. package/dist/features/vault.js +54 -0
  79. package/dist/features/vault.js.map +1 -0
  80. package/dist/features/voting.js +5 -9
  81. package/dist/features/voting.js.map +1 -1
  82. package/dist/index.js +2 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/programs/account.js +107 -5
  85. package/dist/programs/account.js.map +1 -1
  86. package/dist/programs/config.js +2 -2
  87. package/dist/programs/config.js.map +1 -1
  88. package/dist/programs/dashboard/config.js +63 -17
  89. package/dist/programs/dashboard/config.js.map +1 -1
  90. package/dist/programs/dashboard/main.js +0 -7
  91. package/dist/programs/dashboard/main.js.map +1 -1
  92. package/dist/programs/dashboard/read.js +64 -42
  93. package/dist/programs/dashboard/read.js.map +1 -1
  94. package/dist/programs/dashboard/write.js +259 -155
  95. package/dist/programs/dashboard/write.js.map +1 -1
  96. package/dist/programs/hub/config.js +28 -32
  97. package/dist/programs/hub/config.js.map +1 -1
  98. package/dist/programs/hub/main.js +0 -7
  99. package/dist/programs/hub/main.js.map +1 -1
  100. package/dist/programs/hub/read.js +30 -35
  101. package/dist/programs/hub/read.js.map +1 -1
  102. package/dist/programs/hub/write.js +148 -40
  103. package/dist/programs/hub/write.js.map +1 -1
  104. package/dist/programs/index.js +1 -1
  105. package/dist/programs/index.js.map +1 -1
  106. package/dist/programs/operator-grid/config.js +81 -0
  107. package/dist/programs/operator-grid/config.js.map +1 -0
  108. package/dist/programs/operator-grid/index.js.map +1 -0
  109. package/dist/programs/operator-grid/main.js +5 -0
  110. package/dist/programs/operator-grid/main.js.map +1 -0
  111. package/dist/programs/operator-grid/read.js +24 -0
  112. package/dist/programs/operator-grid/read.js.map +1 -0
  113. package/dist/programs/operator-grid/write.js +109 -0
  114. package/dist/programs/operator-grid/write.js.map +1 -0
  115. package/dist/programs/pdg/config.js +49 -13
  116. package/dist/programs/pdg/config.js.map +1 -1
  117. package/dist/programs/pdg/main.js +0 -7
  118. package/dist/programs/pdg/main.js.map +1 -1
  119. package/dist/programs/pdg/read.js +20 -3
  120. package/dist/programs/pdg/read.js.map +1 -1
  121. package/dist/programs/pdg/write.js +147 -82
  122. package/dist/programs/pdg/write.js.map +1 -1
  123. package/dist/programs/pdg-helpers.js +155 -38
  124. package/dist/programs/pdg-helpers.js.map +1 -1
  125. package/dist/programs/report.js +66 -78
  126. package/dist/programs/report.js.map +1 -1
  127. package/dist/programs/vault/config.js +6 -2
  128. package/dist/programs/vault/config.js.map +1 -1
  129. package/dist/programs/vault/main.js +0 -7
  130. package/dist/programs/vault/main.js.map +1 -1
  131. package/dist/programs/vault/read.js +16 -44
  132. package/dist/programs/vault/read.js.map +1 -1
  133. package/dist/programs/vault/write.js +117 -33
  134. package/dist/programs/vault/write.js.map +1 -1
  135. package/dist/programs/vault-factory/main.js +0 -7
  136. package/dist/programs/vault-factory/main.js.map +1 -1
  137. package/dist/programs/vault-factory/read.js +17 -19
  138. package/dist/programs/vault-factory/read.js.map +1 -1
  139. package/dist/programs/vault-factory/write.js +30 -52
  140. package/dist/programs/vault-factory/write.js.map +1 -1
  141. package/dist/programs/vault-viewer/main.js +2 -2
  142. package/dist/programs/vault-viewer/main.js.map +1 -1
  143. package/dist/programs/voting.js +8 -23
  144. package/dist/programs/voting.js.map +1 -1
  145. package/dist/providers/wallet.js +4 -4
  146. package/dist/providers/wallet.js.map +1 -1
  147. package/dist/utils/arguments.js +44 -1
  148. package/dist/utils/arguments.js.map +1 -1
  149. package/dist/utils/bls.js +101 -0
  150. package/dist/utils/bls.js.map +1 -0
  151. package/dist/utils/commands/dashboard.js +103 -0
  152. package/dist/utils/commands/dashboard.js.map +1 -0
  153. package/dist/utils/commands/index.js +2 -0
  154. package/dist/utils/commands/index.js.map +1 -0
  155. package/dist/utils/contract.js +54 -15
  156. package/dist/utils/contract.js.map +1 -1
  157. package/dist/utils/data-validators.js +7 -22
  158. package/dist/utils/data-validators.js.map +1 -1
  159. package/dist/utils/error-handler.js +5 -2
  160. package/dist/utils/error-handler.js.map +1 -1
  161. package/dist/utils/fetchCL.js +57 -0
  162. package/dist/utils/fetchCL.js.map +1 -0
  163. package/dist/utils/get-deposit-data-root.js +3 -3
  164. package/dist/utils/health.js +69 -7
  165. package/dist/utils/health.js.map +1 -1
  166. package/dist/utils/index.js +6 -1
  167. package/dist/utils/index.js.map +1 -1
  168. package/dist/utils/ipfs.js +54 -0
  169. package/dist/utils/ipfs.js.map +1 -0
  170. package/dist/utils/logging/console.js +23 -0
  171. package/dist/utils/logging/console.js.map +1 -0
  172. package/dist/utils/logging/constants.js +12 -0
  173. package/dist/utils/logging/constants.js.map +1 -0
  174. package/dist/utils/logging/index.js +2 -0
  175. package/dist/utils/logging/index.js.map +1 -0
  176. package/dist/utils/prompts/dashboard.js +63 -0
  177. package/dist/utils/prompts/dashboard.js.map +1 -0
  178. package/dist/utils/prompts/index.js +2 -1
  179. package/dist/utils/prompts/index.js.map +1 -1
  180. package/dist/utils/prompts/operations.js +41 -0
  181. package/dist/utils/prompts/operations.js.map +1 -0
  182. package/dist/utils/prompts/predeposit-guarantee.js +10 -13
  183. package/dist/utils/prompts/predeposit-guarantee.js.map +1 -1
  184. package/dist/utils/prompts/vault.js +4 -1
  185. package/dist/utils/prompts/vault.js.map +1 -1
  186. package/dist/utils/proof/create-proof.js +5 -29
  187. package/dist/utils/proof/create-proof.js.map +1 -1
  188. package/dist/utils/proof/first-validator-gindex.js +2 -1
  189. package/dist/utils/proof/first-validator-gindex.js.map +1 -1
  190. package/dist/utils/proof/merkle-utils.js +15 -3
  191. package/dist/utils/proof/merkle-utils.js.map +1 -1
  192. package/dist/utils/proof/report-proof.js +11 -6
  193. package/dist/utils/proof/report-proof.js.map +1 -1
  194. package/dist/utils/read-programs-by-abi.js +2 -2
  195. package/dist/utils/read-programs-by-abi.js.map +1 -1
  196. package/dist/utils/report.js +17 -17
  197. package/dist/utils/report.js.map +1 -1
  198. package/dist/utils/required-lock.js +21 -0
  199. package/dist/utils/required-lock.js.map +1 -0
  200. package/dist/version/index.js +1 -1
  201. package/package.json +10 -4
  202. package/dist/abi/Delegation.js.map +0 -1
  203. package/dist/contracts/delegation.js +0 -11
  204. package/dist/contracts/delegation.js.map +0 -1
  205. package/dist/features/dashboard-delegation.js +0 -25
  206. package/dist/features/dashboard-delegation.js.map +0 -1
  207. package/dist/programs/delegation/config.js +0 -33
  208. package/dist/programs/delegation/config.js.map +0 -1
  209. package/dist/programs/delegation/index.js.map +0 -1
  210. package/dist/programs/delegation/main.js +0 -12
  211. package/dist/programs/delegation/main.js.map +0 -1
  212. package/dist/programs/delegation/read.js +0 -104
  213. package/dist/programs/delegation/read.js.map +0 -1
  214. package/dist/programs/delegation/write.js +0 -323
  215. package/dist/programs/delegation/write.js.map +0 -1
  216. package/dist/utils/parse-string.js +0 -20
  217. package/dist/utils/parse-string.js.map +0 -1
  218. package/dist/utils/prompts/delegation-dashboard.js +0 -29
  219. package/dist/utils/prompts/delegation-dashboard.js.map +0 -1
  220. /package/dist/programs/{delegation → operator-grid}/index.js +0 -0
@@ -1,8 +1,13 @@
1
1
  import { program } from 'commander';
2
- import { parseEther } from 'viem';
2
+ import { isAddress, parseEther } from 'viem';
3
+ import { toHex } from './proof/merkle-utils.js';
4
+ const toCamelCase = (str) => str.replace(/_([a-z])/g, (_, char) => char.toUpperCase());
3
5
  export const stringToBigIntArray = (value) => {
4
6
  return value.split(',').map(BigInt);
5
7
  };
8
+ export const stringToBigIntArrayWei = (value) => {
9
+ return value.split(',').map(etherToWei);
10
+ };
6
11
  export const jsonToPermit = (value) => {
7
12
  return JSON.parse(value);
8
13
  };
@@ -21,4 +26,42 @@ export const stringToNumber = (value) => {
21
26
  }
22
27
  return parseInt(value);
23
28
  };
29
+ export const parseTiers = (value) => {
30
+ return JSON.parse(value);
31
+ };
32
+ export const parseTier = (value) => {
33
+ return JSON.parse(value);
34
+ };
35
+ export const parseDepositArray = (str) => {
36
+ const trimmed = str.trim();
37
+ if (!trimmed) {
38
+ return [];
39
+ }
40
+ const parsed = JSON.parse('[' + trimmed + ']', (key, value) => {
41
+ if (key === '')
42
+ return value; // root array
43
+ if (key === 'amount')
44
+ return BigInt(value) * BigInt(10 ** 9); // to wei
45
+ if (typeof value === 'string') {
46
+ return toHex(value);
47
+ }
48
+ return value;
49
+ });
50
+ // Convert keys to camelCase
51
+ const camelCased = parsed.map((obj) => {
52
+ const newObj = {};
53
+ for (const key in obj) {
54
+ const camelKey = toCamelCase(key);
55
+ newObj[camelKey] = obj[key];
56
+ }
57
+ return newObj;
58
+ });
59
+ return camelCased;
60
+ };
61
+ export const stringToAddress = (value) => {
62
+ if (!isAddress(value)) {
63
+ program.error('Address value must be a valid address', { exitCode: 1 });
64
+ }
65
+ return value;
66
+ };
24
67
  //# sourceMappingURL=arguments.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../utils/arguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,EAAE;IACnD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAW,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,EAAE;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAqB,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;IAC9C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;IAC1C,OAAO,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;IAC9C,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC"}
1
+ {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../utils/arguments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { pad, bytesToHex } from 'viem';
2
+ import { mainnet, sepolia, hoodi } from 'viem/chains';
3
+ import { fromHexString, ByteVectorType, ContainerType, UintNumberType, } from '@chainsafe/ssz';
4
+ import { PublicKey, Signature, verify } from '@chainsafe/blst';
5
+ import { toHex } from './proof/merkle-utils.js';
6
+ import { getChain } from '../configs/index.js';
7
+ const FORK_VERSION_BY_CHAIN = {
8
+ [sepolia.id]: '0x90000069', // https://github.com/eth-clients/sepolia
9
+ [hoodi.id]: '0x10000910', // https://github.com/eth-clients/hoodi
10
+ [mainnet.id]: '0x00000000', // https://github.com/eth-clients/mainnet
11
+ };
12
+ export const computeDepositDomainByForkVersion = (forkVersion) => {
13
+ const ZERO_HASH = Buffer.alloc(32, 0);
14
+ const DOMAIN_DEPOSIT = Uint8Array.from([3, 0, 0, 0]);
15
+ const forkVersionUint8Array = fromHexString(forkVersion);
16
+ const Root = new ByteVectorType(32);
17
+ const Bytes4 = new ByteVectorType(4);
18
+ const Version = Bytes4;
19
+ const ForkData = new ContainerType({
20
+ currentVersion: Version,
21
+ genesisValidatorsRoot: Root,
22
+ }, { typeName: 'ForkData', jsonCase: 'eth2' });
23
+ const computeDomain = (domainType, forkVersion, genesisValidatorRoot) => {
24
+ const forkDataRoot = computeForkDataRoot(forkVersion, genesisValidatorRoot);
25
+ const domain = new Uint8Array(32);
26
+ domain.set(domainType, 0);
27
+ domain.set(forkDataRoot.slice(0, 28), 4);
28
+ return domain;
29
+ };
30
+ const computeForkDataRoot = (currentVersion, genesisValidatorsRoot) => {
31
+ return ForkData.hashTreeRoot({ currentVersion, genesisValidatorsRoot });
32
+ };
33
+ return computeDomain(DOMAIN_DEPOSIT, forkVersionUint8Array, ZERO_HASH);
34
+ };
35
+ export const computeDepositDomain = () => {
36
+ const forkByChain = FORK_VERSION_BY_CHAIN[getChain().id];
37
+ if (!forkByChain) {
38
+ throw new Error(`Fork version not found for chain ${getChain().id}`);
39
+ }
40
+ return computeDepositDomainByForkVersion(forkByChain);
41
+ };
42
+ const computeDepositMessageRoot = (pubkey, withdrawalCredentials, amount) => {
43
+ const Bytes48 = new ByteVectorType(48);
44
+ const Bytes32 = new ByteVectorType(32);
45
+ const UintNum64 = new UintNumberType(8);
46
+ const Root = new ByteVectorType(32);
47
+ const Domain = Bytes32;
48
+ const BLSPubkey = Bytes48;
49
+ const DepositMessage = new ContainerType({ pubkey: BLSPubkey, withdrawalCredentials: Bytes32, amount: UintNum64 }, { typeName: 'DepositMessage', jsonCase: 'eth2' });
50
+ const SigningData = new ContainerType({
51
+ objectRoot: Root,
52
+ domain: Domain,
53
+ }, { typeName: 'SigningData', jsonCase: 'eth2' });
54
+ const depositMessage = {
55
+ pubkey: BLSPubkey.fromJson(toHex(pubkey)),
56
+ withdrawalCredentials: Bytes32.fromJson(toHex(withdrawalCredentials)),
57
+ amount: UintNum64.fromJson(amount / 1000000000n),
58
+ };
59
+ const domain = computeDepositDomain();
60
+ return SigningData.hashTreeRoot({
61
+ objectRoot: DepositMessage.hashTreeRoot(depositMessage),
62
+ domain,
63
+ });
64
+ };
65
+ export const isValidBLSDeposit = (deposit, withdrawalCredentials) => {
66
+ const signningRoot = computeDepositMessageRoot(deposit.pubkey, withdrawalCredentials, deposit.amount);
67
+ const isBLSValid = verify(signningRoot, PublicKey.fromHex(deposit.pubkey), Signature.fromHex(deposit.signature), true, true);
68
+ return isBLSValid;
69
+ };
70
+ export const expandBLSSignature = (signature, pubkey) => {
71
+ const pubkeyY = PublicKey.fromHex(pubkey).toBytes(false).slice(48);
72
+ // pad Y.a to 32 bytes to match Fp struct
73
+ const pubkeyY_a = bytesToHex(pad(pubkeyY.slice(0, 16), { dir: 'left', size: 32 }));
74
+ const pubkeyY_b = bytesToHex(pad(pubkeyY.slice(16), { dir: 'left', size: 32 }));
75
+ const signatureY = Signature.fromHex(signature).toBytes(false).slice(96);
76
+ // first Fp of Y coordinate is last 48 bytes of signature
77
+ const sigY_c0 = signatureY.slice(48);
78
+ const sigY_c0_a = bytesToHex(pad(sigY_c0.slice(0, 16), {
79
+ dir: 'left',
80
+ size: 32,
81
+ }));
82
+ const sigY_c0_b = bytesToHex(pad(sigY_c0.slice(16), { dir: 'left', size: 32 }));
83
+ // second Fp is 48 bytes before first one
84
+ const sigY_c1 = signatureY.slice(0, 48);
85
+ const sigY_c1_a = bytesToHex(pad(sigY_c1.slice(0, 16), {
86
+ dir: 'left',
87
+ size: 32,
88
+ }));
89
+ const sigY_c1_b = bytesToHex(pad(sigY_c1.slice(16), { dir: 'left', size: 32 }));
90
+ return {
91
+ pubkey,
92
+ pubkeyY_a,
93
+ pubkeyY_b,
94
+ signature,
95
+ sigY_c0_a,
96
+ sigY_c0_b,
97
+ sigY_c1_a,
98
+ sigY_c1_b,
99
+ };
100
+ };
101
+ //# sourceMappingURL=bls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bls.js","sourceRoot":"","sources":["../../utils/bls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { callWriteMethodWithReceipt, confirmBurn, confirmOperation, getRequiredLockByShares, } from '../index.js';
2
+ import { formatEther } from 'viem';
3
+ import { getDashboardContract, getStethContract, } from '../../contracts/index.js';
4
+ import { callReadMethodSilent, fetchAndCalculateVaultHealthWithNewValue, logError, showSpinner, confirmMint, logInfo, } from '../index.js';
5
+ import { getAccount } from '../../providers/index.js';
6
+ const confirmLock = async (amountOfSharesWei, dashboardAddress) => {
7
+ const contract = getDashboardContract(dashboardAddress);
8
+ const { requiredLock, currentLock } = await getRequiredLockByShares(dashboardAddress, formatEther(amountOfSharesWei));
9
+ const currentWallet = getAccount();
10
+ const LOCK_ROLE = await callReadMethodSilent(contract, 'LOCK_ROLE');
11
+ const currentLockRoles = await callReadMethodSilent(contract, 'getRoleMembers', [LOCK_ROLE]);
12
+ const isLockRole = currentLockRoles.includes(currentWallet.address);
13
+ if (requiredLock > currentLock) {
14
+ logInfo(`Required lock: ${formatEther(requiredLock)} shares, current lock: ${formatEther(currentLock)} shares.
15
+ Auto-lock will be applied to enable minting the required number of shares. LOCK_ROLE is required.`);
16
+ if (!isLockRole) {
17
+ logError("You don't have a LOCK_ROLE. Please add yourself to the LOCK_ROLE.");
18
+ return false;
19
+ }
20
+ const confirm = await confirmOperation('Do you want to continue?');
21
+ if (!confirm)
22
+ return confirm;
23
+ }
24
+ return true;
25
+ };
26
+ export const mintSteth = async (contract, recipient, amountOfSteth) => {
27
+ const stethContract = await getStethContract();
28
+ const amountOfShares = await callReadMethodSilent(stethContract, 'getSharesByPooledEth', [amountOfSteth]);
29
+ await mintShares(contract, recipient, amountOfShares, 'mintStETH');
30
+ };
31
+ export const mintShares = async (contract, recipient, amountOfShares, method) => {
32
+ const type = method === 'mintShares'
33
+ ? 'shares'
34
+ : method === 'mintStETH'
35
+ ? 'stETH'
36
+ : 'wstETH';
37
+ const remainingMintingCapacity = await callReadMethodSilent(contract, 'remainingMintingCapacity', [0n]);
38
+ if (remainingMintingCapacity < amountOfShares) {
39
+ logError(`Cannot mint more shares than the vault can mint. Mintable: ${remainingMintingCapacity}`);
40
+ return;
41
+ }
42
+ const isConfirmedLock = await confirmLock(amountOfShares, contract.address);
43
+ if (!isConfirmedLock)
44
+ return;
45
+ const hideSpinner = showSpinner();
46
+ const { currentVaultHealth, newVaultHealth, newLiabilityShares, liabilityShares, valueInStethWei, } = await fetchAndCalculateVaultHealthWithNewValue(contract, amountOfShares, 'mint');
47
+ const vault = await callReadMethodSilent(contract, 'stakingVault');
48
+ hideSpinner();
49
+ const confirm = await confirmMint({
50
+ vaultAddress: vault,
51
+ recipient,
52
+ amountOfMint: amountOfShares,
53
+ amountOfMintInStethWei: valueInStethWei,
54
+ newLiabilityShares: newLiabilityShares,
55
+ currentLiabilityShares: liabilityShares,
56
+ newHealthRatio: newVaultHealth.healthRatio,
57
+ currentHealthRatio: currentVaultHealth.healthRatio,
58
+ newIsHealthy: newVaultHealth.isHealthy,
59
+ currentIsHealthy: currentVaultHealth.isHealthy,
60
+ type,
61
+ });
62
+ if (!confirm)
63
+ return;
64
+ await callWriteMethodWithReceipt(contract, method, [
65
+ recipient,
66
+ amountOfShares,
67
+ ]);
68
+ };
69
+ export const burnSteth = async (contract, amountOfSteth) => {
70
+ const stethContract = await getStethContract();
71
+ const amountOfShares = await callReadMethodSilent(stethContract, 'getSharesByPooledEth', [amountOfSteth]);
72
+ await burnShares(contract, amountOfShares, 'burnStETH');
73
+ };
74
+ export const burnShares = async (contract, amountOfShares, method) => {
75
+ const type = method === 'burnShares'
76
+ ? 'shares'
77
+ : method === 'burnStETH'
78
+ ? 'stETH'
79
+ : 'wstETH';
80
+ const liabilityShares = await callReadMethodSilent(contract, 'liabilityShares');
81
+ if (amountOfShares > liabilityShares) {
82
+ logError('Cannot burn more shares than the vault has');
83
+ return;
84
+ }
85
+ const { currentVaultHealth, newVaultHealth, newLiabilityShares, valueInStethWei, } = await fetchAndCalculateVaultHealthWithNewValue(contract, amountOfShares, 'burn');
86
+ const vault = await callReadMethodSilent(contract, 'stakingVault');
87
+ const confirm = await confirmBurn({
88
+ vaultAddress: vault,
89
+ amountOfBurn: amountOfShares,
90
+ amountOfBurnInStethWei: valueInStethWei,
91
+ newLiabilityShares: newLiabilityShares,
92
+ currentLiabilityShares: liabilityShares,
93
+ newHealthRatio: newVaultHealth.healthRatio,
94
+ currentHealthRatio: currentVaultHealth.healthRatio,
95
+ newIsHealthy: newVaultHealth.isHealthy,
96
+ currentIsHealthy: currentVaultHealth.isHealthy,
97
+ type,
98
+ });
99
+ if (!confirm)
100
+ return;
101
+ await callWriteMethodWithReceipt(contract, method, [amountOfShares]);
102
+ };
103
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../utils/commands/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './dashboard.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../utils/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
@@ -1,8 +1,7 @@
1
- import { printError } from './index.js';
1
+ import { waitForTransactionReceipt } from 'viem/actions';
2
2
  import { getAccount, getPublicClient } from '../providers/index.js';
3
3
  import { getChain } from '../configs/index.js';
4
- import { showSpinner } from '../utils/index.js';
5
- import { waitForTransactionReceipt } from 'viem/actions';
4
+ import { showSpinner, printError, logResult } from './index.js';
6
5
  export const callSimulateWriteMethod = async (contract, methodName, payload, value) => {
7
6
  const hideSpinner = showSpinner({
8
7
  type: 'bouncingBall',
@@ -21,14 +20,14 @@ export const callSimulateWriteMethod = async (contract, methodName, payload, val
21
20
  catch (err) {
22
21
  hideSpinner();
23
22
  printError(err, `Error when simulating write method "${methodName}"`);
24
- return null;
23
+ throw err;
25
24
  }
26
25
  };
27
26
  export const callWriteMethod = async (contract, methodName, payload, value) => {
28
27
  const simulateResult = await callSimulateWriteMethod(contract, methodName, payload, value);
29
28
  if (!simulateResult) {
30
29
  printError(new Error('Simulation failed'), `Error when simulating write method "${methodName}"`);
31
- return;
30
+ throw new Error('Simulation failed');
32
31
  }
33
32
  const hideSpinner = showSpinner();
34
33
  try {
@@ -39,31 +38,71 @@ export const callWriteMethod = async (contract, methodName, payload, value) => {
39
38
  value,
40
39
  });
41
40
  hideSpinner();
42
- console.table({ Transaction: tx });
41
+ logResult({
42
+ 'Method name': methodName,
43
+ Contract: contract.address,
44
+ Transaction: tx,
45
+ });
43
46
  return tx;
44
47
  }
45
48
  catch (err) {
46
49
  hideSpinner();
47
50
  printError(err, `Error when calling write method "${methodName}"`);
48
- return;
51
+ throw err;
49
52
  }
50
53
  };
51
54
  export const callReadMethod = async (contract, methodName, ...payload) => {
52
55
  const hideSpinner = showSpinner();
56
+ const isSilent = payload[payload.length - 1]?.silent ?? false;
53
57
  try {
54
58
  const method = contract.read[methodName];
55
- const result = await method?.(payload[0]);
59
+ const result = await method?.(...payload);
56
60
  hideSpinner();
61
+ if (isSilent)
62
+ return result;
63
+ const base = {
64
+ 'Method name': methodName,
65
+ Contract: contract.address,
66
+ };
57
67
  // TODO: do message better or show in called place
58
- console.table({ Result: result });
68
+ if (Array.isArray(result)) {
69
+ logResult({
70
+ ...base,
71
+ Result: result
72
+ .map((r) => (typeof r === 'bigint' ? r.toString() : String(r)))
73
+ .join(', '),
74
+ });
75
+ }
76
+ else if (typeof result === 'object' && result !== null) {
77
+ // Expand result object into multiple rows
78
+ const expandedResult = {};
79
+ for (const [k, v] of Object.entries(result)) {
80
+ expandedResult[k] = typeof v === 'bigint' ? v.toString() : String(v);
81
+ }
82
+ logResult({
83
+ ...base,
84
+ ...expandedResult,
85
+ });
86
+ }
87
+ else {
88
+ logResult({
89
+ ...base,
90
+ Result: typeof result === 'bigint' ? result.toString() : result,
91
+ });
92
+ }
59
93
  return result;
60
94
  }
61
95
  catch (err) {
62
96
  hideSpinner();
63
- printError(err, `Error when calling read method "${methodName}"`);
64
- return;
97
+ printError(err, `Error when calling read method ${methodName}@${contract.address}`);
98
+ throw err;
65
99
  }
66
100
  };
101
+ export const callReadMethodSilent = async (contract, methodName, ...payload) => {
102
+ return callReadMethod(contract, methodName, ...payload, {
103
+ silent: true,
104
+ });
105
+ };
67
106
  export const isContractAddress = async (address) => {
68
107
  const publicClient = getPublicClient();
69
108
  const bytecode = await publicClient.getCode({
@@ -74,8 +113,6 @@ export const isContractAddress = async (address) => {
74
113
  export const callWriteMethodWithReceipt = async (contract, methodName, payload, value) => {
75
114
  const publicClient = getPublicClient();
76
115
  const tx = await callWriteMethod(contract, methodName, payload, value);
77
- if (!tx)
78
- return;
79
116
  const hideSpinner = showSpinner({
80
117
  type: 'bouncingBar',
81
118
  message: 'Waiting for transaction receipt...',
@@ -83,7 +120,9 @@ export const callWriteMethodWithReceipt = async (contract, methodName, payload,
83
120
  try {
84
121
  const receipt = await waitForTransactionReceipt(publicClient, { hash: tx });
85
122
  hideSpinner();
86
- console.table({
123
+ logResult({
124
+ 'Method name': methodName,
125
+ Contract: contract.address,
87
126
  'Transaction status': receipt.status,
88
127
  'Transaction block number': Number(receipt.blockNumber),
89
128
  'Transaction gas used': Number(receipt.gasUsed),
@@ -93,7 +132,7 @@ export const callWriteMethodWithReceipt = async (contract, methodName, payload,
93
132
  catch (err) {
94
133
  hideSpinner();
95
134
  printError(err, 'Error when waiting for transaction receipt');
96
- return;
135
+ throw err;
97
136
  }
98
137
  };
99
138
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../utils/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../utils/contract.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,8 @@
1
1
  import { isAddress } from 'viem';
2
2
  export const validateConfig = (config) => {
3
3
  const errors = {};
4
- if (!isValidUrl(config.rpcLink)) {
5
- errors.rpcLink = 'Invalid rpcLink: must be a valid URL.';
6
- }
7
- if (typeof config.privateKey !== 'string' || !config.privateKey) {
8
- errors.privateKey = 'Invalid privateKey: must be a non-empty string.';
9
- }
10
- if (typeof config.chainId !== 'number' || isNaN(config.chainId)) {
11
- errors.chainId = 'Invalid chainId: must be a string representing a number.';
12
- }
13
- if (typeof config.lidoLocator !== 'string' ||
14
- !isAddress(config.lidoLocator)) {
15
- errors.lidoLocator =
16
- 'Invalid lidoLocator: must be a valid Ethereum address.';
17
- }
18
- if (typeof config.accounting !== 'string' || !isAddress(config.accounting)) {
19
- errors.accounting = 'Invalid accounting: must be a valid Ethereum address.';
4
+ if (isNaN(config.CHAIN_ID)) {
5
+ errors.CHAIN_ID = 'Invalid chainId: must be in config.';
20
6
  }
21
7
  return errors;
22
8
  };
@@ -36,14 +22,13 @@ export const isValidUrl = (value) => {
36
22
  return false;
37
23
  }
38
24
  };
39
- export const transformAddressesToArray = (payload, extraKeys = []) => {
40
- return [...Object.keys(payload), ...extraKeys].reduce((acc, key) => {
41
- if (!payload[key]) {
42
- acc[key] = [];
25
+ export const transformAddressesToArray = (payload) => {
26
+ return payload.reduce((acc, role) => {
27
+ if (!acc[role.role]) {
28
+ acc[role.role] = [role.account];
43
29
  return acc;
44
30
  }
45
- const value = payload[key].split(',');
46
- acc[key] = value.map((item) => item.trim());
31
+ acc[role.role]?.push(role.account);
47
32
  return acc;
48
33
  }, {});
49
34
  };
@@ -1 +1 @@
1
- {"version":3,"file":"data-validators.js","sourceRoot":"","sources":["../../utils/data-validators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-validators.js","sourceRoot":"","sources":["../../utils/data-validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,EAAE;IAC/C,MAAM,MAAM,GAAG,EAAkC,CAAC;IAElD,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,GAAG,qCAAqC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAW,EAAE;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC;QACH,uCAAuC;QACvC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAAyB,EAAE,EAAE;IACrE,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC;QACb,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAA8B,CAC/B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAyB,EAAE,EAAE;IAChE,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9C,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;YACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,IAAI,yBAAyB,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAc,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAyB,EAAE,EAAE;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9C,oEAAoE;QACpE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAE,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,yBAAyB,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAc,CAAC,CAAC;AACrB,CAAC,CAAC"}
@@ -1,10 +1,13 @@
1
1
  import { program } from '../command/index.js';
2
+ import { logError } from './index.js';
2
3
  export const printError = (err, message) => {
3
4
  if (err instanceof Error) {
4
- program.error(`${message}:\n ${err.message}`, { exitCode: 1 });
5
+ logError(message);
6
+ program.error(`${err.message}`, { exitCode: 1 });
5
7
  }
6
8
  else {
7
- program.error(`${message}`, { exitCode: 1 });
9
+ logError(message);
10
+ program.error(`${err}`, { exitCode: 1 });
8
11
  }
9
12
  };
10
13
  //# sourceMappingURL=error-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../utils/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,OAAe,EAAE,EAAE;IAC1D,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../utils/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,OAAe,EAAE,EAAE;IAC1D,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { getConfig } from '../configs/index.js';
2
+ import { printError } from './index.js';
3
+ const endpoints = {
4
+ genesis: 'eth/v1/beacon/genesis',
5
+ beaconHeader: (blockId) => `eth/v1/beacon/headers/${blockId}`,
6
+ beaconHeadersByParentRoot: (parentRoot) => `eth/v1/beacon/headers?parent_root=${parentRoot}`,
7
+ state: (stateId) => `eth/v2/debug/beacon/states/${stateId}`,
8
+ };
9
+ export const SupportedFork = {
10
+ capella: 'capella',
11
+ deneb: 'deneb',
12
+ electra: 'electra',
13
+ };
14
+ export const fetchBeaconHeader = async (stateId) => {
15
+ const { CL_URL } = getConfig();
16
+ try {
17
+ const beaconHeaderResp = await fetch(`${CL_URL}${endpoints.beaconHeader(stateId)}`);
18
+ return beaconHeaderResp.json();
19
+ }
20
+ catch (error) {
21
+ printError(error, 'Error fetching beacon header');
22
+ throw error;
23
+ }
24
+ };
25
+ export const fetchBeaconState = async (stateId) => {
26
+ const { CL_URL } = getConfig();
27
+ try {
28
+ const beaconStateResp = await fetch(`${CL_URL}${endpoints.state(stateId)}`, {
29
+ headers: { accept: 'application/octet-stream' },
30
+ });
31
+ const { headers } = beaconStateResp;
32
+ const forkName = headers.get('eth-consensus-version');
33
+ // Checks
34
+ if (!(forkName in SupportedFork))
35
+ throw new Error(`Fork name [${forkName}] is not supported`);
36
+ const stateBodyBytes = await beaconStateResp.arrayBuffer();
37
+ if (!stateBodyBytes)
38
+ throw new Error('Beacon state body bytes are not found');
39
+ return { stateBodyBytes, forkName };
40
+ }
41
+ catch (error) {
42
+ printError(error, 'Error fetching beacon state');
43
+ throw error;
44
+ }
45
+ };
46
+ export const fetchBeaconHeaderByParentRoot = async (parentRoot) => {
47
+ const { CL_URL } = getConfig();
48
+ try {
49
+ const beaconHeaderResp = await fetch(`${CL_URL}${endpoints.beaconHeadersByParentRoot(parentRoot)}`);
50
+ return beaconHeaderResp.json();
51
+ }
52
+ catch (error) {
53
+ printError(error, 'Error fetching beacon header by parent root');
54
+ throw error;
55
+ }
56
+ };
57
+ //# sourceMappingURL=fetchCL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchCL.js","sourceRoot":"","sources":["../../utils/fetchCL.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAWnC,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,uBAAuB;IAChC,YAAY,EAAE,CAAC,OAAgB,EAAU,EAAE,CACzC,yBAAyB,OAAO,EAAE;IACpC,yBAAyB,EAAE,CAAC,UAAmB,EAAU,EAAE,CACzD,qCAAqC,UAAU,EAAE;IACnD,KAAK,EAAE,CAAC,OAAgB,EAAU,EAAE,CAAC,8BAA8B,OAAO,EAAE;CAC7E,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAgB,EAAE,EAAE;IAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAClC,GAAG,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAC9C,CAAC;QAEF,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;QAClD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,OAAgB,EAIf,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,KAAK,CACjC,GAAG,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EACtC;YACE,OAAO,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE;SAChD,CACF,CAAC;QAEF,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;QACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAC1B,uBAAuB,CACM,CAAC;QAEhC,SAAS;QACT,IAAI,CAAC,CAAC,QAAQ,IAAI,aAAa,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,oBAAoB,CAAC,CAAC;QAE9D,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,CAAC;QAC3D,IAAI,CAAC,cAAc;YACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAE3D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAK,EAAE,UAAmB,EAAE,EAAE;IACzE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAClC,GAAG,MAAM,GAAG,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,CAC9D,CAAC;QAEF,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC;QAEjE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
@@ -3,14 +3,14 @@ import { fromHex, sha256Concat, encodeGweiAsLittleEndian8, } from './proof/index
3
3
  * - pubkey: bytes
4
4
  * - withdrawalCredentials: bytes
5
5
  * - signature: bytes
6
- * - amountWei: bigint или string (в wei)
6
+ * - amountETH: bigint or string (in ETH)
7
7
  */
8
8
  export const computeDepositDataRoot = (pubkey, withdrawalCredentials, signature, amountWei) => {
9
9
  const pubkeyBytes = fromHex(pubkey);
10
10
  const withdrawalCredentialsBytes = fromHex(withdrawalCredentials);
11
11
  const signatureBytes = fromHex(signature);
12
- // 1) Convert amount from wei to gwei
13
- const amountWeiBN = typeof amountWei === 'string' ? BigInt(amountWei) : amountWei;
12
+ // 1) Convert amount from ETH to gwei
13
+ const amountWeiBN = typeof amountWei !== 'bigint' ? BigInt(amountWei) : amountWei;
14
14
  const amountGwei = amountWeiBN / 1000000000n;
15
15
  // 2) Get 8 bytes little-endian
16
16
  const amountLE64 = encodeGweiAsLittleEndian8(amountGwei);