@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.
Files changed (211) hide show
  1. package/README.md +542 -1
  2. package/dist/abi/CLProofVerifier.js +279 -0
  3. package/dist/abi/CLProofVerifier.js.map +1 -0
  4. package/dist/abi/Dashboard.js +1498 -0
  5. package/dist/abi/Dashboard.js.map +1 -0
  6. package/dist/abi/Delegation.js +1786 -0
  7. package/dist/abi/Delegation.js.map +1 -0
  8. package/dist/abi/LidoLocator.js +426 -0
  9. package/dist/abi/LidoLocator.js.map +1 -0
  10. package/dist/abi/PredepositGuarantee.js +1733 -0
  11. package/dist/abi/PredepositGuarantee.js.map +1 -0
  12. package/dist/abi/StEth.js +493 -0
  13. package/dist/abi/StEth.js.map +1 -0
  14. package/dist/abi/StakingVault.js +978 -0
  15. package/dist/abi/StakingVault.js.map +1 -0
  16. package/dist/abi/TokenManager.js +756 -0
  17. package/dist/abi/TokenManager.js.map +1 -0
  18. package/dist/abi/VaultFactory.js +246 -0
  19. package/dist/abi/VaultFactory.js.map +1 -0
  20. package/dist/abi/VaultHub.js +1138 -439
  21. package/dist/abi/VaultHub.js.map +1 -1
  22. package/dist/abi/VaultHubViewer.js +297 -0
  23. package/dist/abi/VaultHubViewer.js.map +1 -0
  24. package/dist/abi/Voting.js +884 -0
  25. package/dist/abi/Voting.js.map +1 -0
  26. package/dist/abi/index.js +13 -0
  27. package/dist/abi/index.js.map +1 -0
  28. package/dist/command/index.js +4 -5
  29. package/dist/command/index.js.map +1 -1
  30. package/dist/configs/constants.js +3 -0
  31. package/dist/configs/constants.js.map +1 -0
  32. package/dist/configs/deployed.js +114 -53
  33. package/dist/configs/deployed.js.map +1 -1
  34. package/dist/configs/envs.js +10 -28
  35. package/dist/configs/envs.js.map +1 -1
  36. package/dist/configs/index.js +3 -18
  37. package/dist/configs/index.js.map +1 -1
  38. package/dist/configs/utils.js +26 -0
  39. package/dist/configs/utils.js.map +1 -0
  40. package/dist/contracts/clProofVerifier.js +29 -0
  41. package/dist/contracts/clProofVerifier.js.map +1 -0
  42. package/dist/contracts/dashboard.js +11 -0
  43. package/dist/contracts/dashboard.js.map +1 -0
  44. package/dist/contracts/delegation.js +11 -0
  45. package/dist/contracts/delegation.js.map +1 -0
  46. package/dist/contracts/index.js +12 -17
  47. package/dist/contracts/index.js.map +1 -1
  48. package/dist/contracts/locator.js +16 -0
  49. package/dist/contracts/locator.js.map +1 -0
  50. package/dist/contracts/pdg.js +17 -0
  51. package/dist/contracts/pdg.js.map +1 -0
  52. package/dist/contracts/steth.js +15 -0
  53. package/dist/contracts/steth.js.map +1 -0
  54. package/dist/contracts/token-manager.js +16 -0
  55. package/dist/contracts/token-manager.js.map +1 -0
  56. package/dist/contracts/vault-factory.js +14 -0
  57. package/dist/contracts/vault-factory.js.map +1 -0
  58. package/dist/contracts/vault-hub-viewer.js +14 -0
  59. package/dist/contracts/vault-hub-viewer.js.map +1 -0
  60. package/dist/contracts/vault-hub.js +14 -17
  61. package/dist/contracts/vault-hub.js.map +1 -1
  62. package/dist/contracts/vault.js +14 -0
  63. package/dist/contracts/vault.js.map +1 -0
  64. package/dist/contracts/voting.js +18 -0
  65. package/dist/contracts/voting.js.map +1 -0
  66. package/dist/features/advanced-config.js +16 -0
  67. package/dist/features/advanced-config.js.map +1 -0
  68. package/dist/features/dashboard-delegation.js +25 -0
  69. package/dist/features/dashboard-delegation.js.map +1 -0
  70. package/dist/features/index.js +5 -0
  71. package/dist/features/index.js.map +1 -0
  72. package/dist/features/token-manager.js +7 -0
  73. package/dist/features/token-manager.js.map +1 -0
  74. package/dist/features/vault-factory.js +25 -0
  75. package/dist/features/vault-factory.js.map +1 -0
  76. package/dist/features/voting.js +125 -0
  77. package/dist/features/voting.js.map +1 -0
  78. package/dist/index.js +6 -5
  79. package/dist/index.js.map +1 -1
  80. package/dist/programs/account.js +29 -0
  81. package/dist/programs/account.js.map +1 -0
  82. package/dist/programs/config.js +31 -0
  83. package/dist/programs/config.js.map +1 -0
  84. package/dist/programs/dashboard/config.js +65 -0
  85. package/dist/programs/dashboard/config.js.map +1 -0
  86. package/dist/programs/dashboard/index.js +4 -0
  87. package/dist/programs/dashboard/index.js.map +1 -0
  88. package/dist/programs/dashboard/main.js +12 -0
  89. package/dist/programs/dashboard/main.js.map +1 -0
  90. package/dist/programs/dashboard/read.js +25 -0
  91. package/dist/programs/dashboard/read.js.map +1 -0
  92. package/dist/programs/dashboard/write.js +302 -0
  93. package/dist/programs/dashboard/write.js.map +1 -0
  94. package/dist/programs/delegation/config.js +33 -0
  95. package/dist/programs/delegation/config.js.map +1 -0
  96. package/dist/programs/delegation/index.js +4 -0
  97. package/dist/programs/delegation/index.js.map +1 -0
  98. package/dist/programs/delegation/main.js +12 -0
  99. package/dist/programs/delegation/main.js.map +1 -0
  100. package/dist/programs/delegation/read.js +98 -0
  101. package/dist/programs/delegation/read.js.map +1 -0
  102. package/dist/programs/delegation/write.js +327 -0
  103. package/dist/programs/delegation/write.js.map +1 -0
  104. package/dist/programs/hub/config.js +127 -0
  105. package/dist/programs/hub/config.js.map +1 -0
  106. package/dist/programs/hub/index.js +4 -0
  107. package/dist/programs/hub/index.js.map +1 -0
  108. package/dist/programs/hub/main.js +12 -0
  109. package/dist/programs/hub/main.js.map +1 -0
  110. package/dist/programs/hub/read.js +62 -0
  111. package/dist/programs/hub/read.js.map +1 -0
  112. package/dist/programs/hub/write.js +109 -0
  113. package/dist/programs/hub/write.js.map +1 -0
  114. package/dist/programs/index.js +10 -17
  115. package/dist/programs/index.js.map +1 -1
  116. package/dist/programs/pdg/config.js +97 -0
  117. package/dist/programs/pdg/config.js.map +1 -0
  118. package/dist/programs/pdg/index.js +4 -0
  119. package/dist/programs/pdg/index.js.map +1 -0
  120. package/dist/programs/pdg/main.js +12 -0
  121. package/dist/programs/pdg/main.js.map +1 -0
  122. package/dist/programs/pdg/read.js +7 -0
  123. package/dist/programs/pdg/read.js.map +1 -0
  124. package/dist/programs/pdg/write.js +114 -0
  125. package/dist/programs/pdg/write.js.map +1 -0
  126. package/dist/programs/pdg-helpers.js +73 -0
  127. package/dist/programs/pdg-helpers.js.map +1 -0
  128. package/dist/programs/vault/config.js +66 -0
  129. package/dist/programs/vault/config.js.map +1 -0
  130. package/dist/programs/vault/index.js +4 -0
  131. package/dist/programs/vault/index.js.map +1 -0
  132. package/dist/programs/vault/main.js +10 -0
  133. package/dist/programs/vault/main.js.map +1 -0
  134. package/dist/programs/vault/read.js +53 -0
  135. package/dist/programs/vault/read.js.map +1 -0
  136. package/dist/programs/vault/write.js +123 -0
  137. package/dist/programs/vault/write.js.map +1 -0
  138. package/dist/programs/vault-factory/config.js +2 -0
  139. package/dist/programs/vault-factory/config.js.map +1 -0
  140. package/dist/programs/vault-factory/index.js +4 -0
  141. package/dist/programs/vault-factory/index.js.map +1 -0
  142. package/dist/programs/vault-factory/main.js +12 -0
  143. package/dist/programs/vault-factory/main.js.map +1 -0
  144. package/dist/programs/vault-factory/read.js +26 -0
  145. package/dist/programs/vault-factory/read.js.map +1 -0
  146. package/dist/programs/vault-factory/write.js +110 -0
  147. package/dist/programs/vault-factory/write.js.map +1 -0
  148. package/dist/programs/vault-hub-viewer.js +52 -0
  149. package/dist/programs/vault-hub-viewer.js.map +1 -0
  150. package/dist/programs/voting.js +33 -0
  151. package/dist/programs/voting.js.map +1 -0
  152. package/dist/providers/index.js +1 -17
  153. package/dist/providers/index.js.map +1 -1
  154. package/dist/providers/wallet.js +20 -32
  155. package/dist/providers/wallet.js.map +1 -1
  156. package/dist/types/common.js +2 -0
  157. package/dist/types/common.js.map +1 -0
  158. package/dist/types/config.js +2 -0
  159. package/dist/types/config.js.map +1 -0
  160. package/dist/types/index.js +3 -0
  161. package/dist/types/index.js.map +1 -0
  162. package/dist/utils/contract.js +98 -0
  163. package/dist/utils/contract.js.map +1 -0
  164. package/dist/utils/data-validators.js +69 -0
  165. package/dist/utils/data-validators.js.map +1 -0
  166. package/dist/utils/error-handler.js +7 -0
  167. package/dist/utils/error-handler.js.map +1 -0
  168. package/dist/utils/get-commands.js +11 -0
  169. package/dist/utils/get-commands.js.map +1 -0
  170. package/dist/utils/get-value.js +5 -11
  171. package/dist/utils/get-value.js.map +1 -1
  172. package/dist/utils/index.js +12 -17
  173. package/dist/utils/index.js.map +1 -1
  174. package/dist/utils/parse-string.js +20 -0
  175. package/dist/utils/parse-string.js.map +1 -0
  176. package/dist/utils/prompts/default.js +17 -0
  177. package/dist/utils/prompts/default.js.map +1 -0
  178. package/dist/utils/prompts/delegation-dashboard.js +29 -0
  179. package/dist/utils/prompts/delegation-dashboard.js.map +1 -0
  180. package/dist/utils/prompts/index.js +5 -0
  181. package/dist/utils/prompts/index.js.map +1 -0
  182. package/dist/utils/prompts/predeposit-guarantee.js +25 -0
  183. package/dist/utils/prompts/predeposit-guarantee.js.map +1 -0
  184. package/dist/utils/prompts/vault.js +11 -0
  185. package/dist/utils/prompts/vault.js.map +1 -0
  186. package/dist/utils/proof/create-proof.js +62 -0
  187. package/dist/utils/proof/create-proof.js.map +1 -0
  188. package/dist/utils/proof/first-validator-gindex.js +26 -0
  189. package/dist/utils/proof/first-validator-gindex.js.map +1 -0
  190. package/dist/utils/proof/index.js +4 -0
  191. package/dist/utils/proof/index.js.map +1 -0
  192. package/dist/utils/proof/merkle-utils.js +131 -0
  193. package/dist/utils/proof/merkle-utils.js.map +1 -0
  194. package/dist/utils/proof/proofs.js +52 -0
  195. package/dist/utils/proof/proofs.js.map +1 -0
  196. package/dist/utils/read-programs-by-abi.js +87 -0
  197. package/dist/utils/read-programs-by-abi.js.map +1 -0
  198. package/dist/utils/resolve-path.js +10 -0
  199. package/dist/utils/resolve-path.js.map +1 -0
  200. package/dist/utils/sleep.js +4 -0
  201. package/dist/utils/sleep.js.map +1 -0
  202. package/dist/utils/spinner/index.js +2 -0
  203. package/dist/utils/spinner/index.js.map +1 -0
  204. package/dist/utils/spinner/spinners.js +16 -0
  205. package/dist/utils/spinner/spinners.js.map +1 -0
  206. package/dist/utils/spinner/spinners.json +119 -0
  207. package/dist/version/index.js +1 -0
  208. package/dist/version/index.js.map +1 -0
  209. package/package.json +52 -7
  210. package/dist/programs/vault-hub.js +0 -137
  211. package/dist/programs/vault-hub.js.map +0 -1
@@ -0,0 +1,98 @@
1
+ import { printError } from './index.js';
2
+ import { getAccount, getPublicClient } from '../providers/index.js';
3
+ import { getChain } from '../configs/index.js';
4
+ import { showSpinner } from '../utils/index.js';
5
+ import { waitForTransactionReceipt } from 'viem/actions';
6
+ export const callSimulateWriteMethod = async (contract, methodName, payload, value) => {
7
+ const hideSpinner = showSpinner({
8
+ type: 'bouncingBall',
9
+ message: 'Simulating...',
10
+ });
11
+ try {
12
+ const method = contract.simulate[methodName];
13
+ const result = await method?.(payload, {
14
+ account: getAccount(),
15
+ chain: getChain(),
16
+ value,
17
+ });
18
+ hideSpinner();
19
+ return result;
20
+ }
21
+ catch (err) {
22
+ hideSpinner();
23
+ printError(err, `Error when simulating write method "${methodName}"`);
24
+ return null;
25
+ }
26
+ };
27
+ export const callWriteMethod = async (contract, methodName, payload, value) => {
28
+ const simulateResult = await callSimulateWriteMethod(contract, methodName, payload, value);
29
+ if (!simulateResult) {
30
+ printError(new Error('Simulation failed'), `Error when simulating write method "${methodName}"`);
31
+ return;
32
+ }
33
+ const hideSpinner = showSpinner();
34
+ try {
35
+ const method = contract.write[methodName];
36
+ const tx = await method?.(payload, {
37
+ account: getAccount(),
38
+ chain: getChain(),
39
+ value,
40
+ });
41
+ hideSpinner();
42
+ console.table({ Transaction: tx });
43
+ return tx;
44
+ }
45
+ catch (err) {
46
+ hideSpinner();
47
+ printError(err, `Error when calling write method "${methodName}"`);
48
+ return;
49
+ }
50
+ };
51
+ export const callReadMethod = async (contract, methodName, ...payload) => {
52
+ const hideSpinner = showSpinner();
53
+ try {
54
+ const method = contract.read[methodName];
55
+ const result = await method?.(payload[0]);
56
+ hideSpinner();
57
+ // TODO: do message better or show in called place
58
+ console.table({ Result: result });
59
+ return result;
60
+ }
61
+ catch (err) {
62
+ hideSpinner();
63
+ printError(err, `Error when calling read method "${methodName}"`);
64
+ }
65
+ };
66
+ export const isContractAddress = async (address) => {
67
+ const publicClient = getPublicClient();
68
+ const bytecode = await publicClient.getCode({
69
+ address: address,
70
+ });
71
+ return bytecode !== undefined;
72
+ };
73
+ export const callWriteMethodWithReceipt = async (contract, methodName, payload, value) => {
74
+ const publicClient = getPublicClient();
75
+ const tx = await callWriteMethod(contract, methodName, payload, value);
76
+ if (!tx)
77
+ return;
78
+ const hideSpinner = showSpinner({
79
+ type: 'bouncingBar',
80
+ message: 'Waiting for transaction receipt...',
81
+ });
82
+ try {
83
+ const receipt = await waitForTransactionReceipt(publicClient, { hash: tx });
84
+ hideSpinner();
85
+ console.table({
86
+ 'Transaction status': receipt.status,
87
+ 'Transaction block number': Number(receipt.blockNumber),
88
+ 'Transaction gas used': Number(receipt.gasUsed),
89
+ });
90
+ return { receipt, tx };
91
+ }
92
+ catch (err) {
93
+ hideSpinner();
94
+ printError(err, 'Error when waiting for transaction receipt');
95
+ return;
96
+ }
97
+ };
98
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../utils/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { isAddress } from 'viem';
2
+ export const validateConfig = (config) => {
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.';
20
+ }
21
+ return errors;
22
+ };
23
+ export const isValidUrl = (value) => {
24
+ if (!value) {
25
+ return false;
26
+ }
27
+ if ('canParse' in URL) {
28
+ return URL.canParse(value);
29
+ }
30
+ try {
31
+ // used global here to avid types issue
32
+ new global.URL(value);
33
+ return true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ };
39
+ export const transformAddressesToArray = (payload, extraKeys = []) => {
40
+ return [...Object.keys(payload), ...extraKeys].reduce((acc, key) => {
41
+ if (!payload[key]) {
42
+ acc[key] = [];
43
+ return acc;
44
+ }
45
+ const value = payload[key].split(',');
46
+ acc[key] = value.map((item) => item.trim());
47
+ return acc;
48
+ }, {});
49
+ };
50
+ export const validateAddressesMap = (payload) => {
51
+ return Object.keys(payload).reduce((acc, key) => {
52
+ payload[key].forEach((item) => {
53
+ if (!isAddress(item)) {
54
+ acc.push(`${key}: ${item} is not a valid address`);
55
+ }
56
+ });
57
+ return acc;
58
+ }, []);
59
+ };
60
+ export const validateAddressMap = (payload) => {
61
+ return Object.keys(payload).reduce((acc, key) => {
62
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
63
+ if (!isAddress(payload[key])) {
64
+ acc.push(`${key} is not a valid address`);
65
+ }
66
+ return acc;
67
+ }, []);
68
+ };
69
+ //# sourceMappingURL=data-validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-validators.js","sourceRoot":"","sources":["../../utils/data-validators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { program } from '../command/index.js';
2
+ export const printError = (err, message) => {
3
+ if (err instanceof Error) {
4
+ program.error(`${message}:\n ${err.message}`, { exitCode: 1 });
5
+ }
6
+ };
7
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +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;AACH,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const getCommandsJson = (program) => {
2
+ return JSON.stringify(program.commands.map((x) => {
3
+ const command = `${x.name()} ${x.alias() !== undefined ? x.alias() : ''}${x.registeredArguments?.map((y) => `\\<${y.name()}>`).join(' ') ||
4
+ ''}`;
5
+ return {
6
+ Command: command,
7
+ Description: x.description(),
8
+ };
9
+ }));
10
+ };
11
+ //# sourceMappingURL=get-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-commands.js","sourceRoot":"","sources":["../../utils/get-commands.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAE,EAAE;IAClD,OAAO,IAAI,CAAC,SAAS,CACnB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GACrE,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACnE,EACF,EAAE,CAAC;QACH,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE;SAC7B,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC"}
@@ -1,14 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getValueByPath = void 0;
4
- const getValueByPath = (obj, path) => {
5
- const segments = path.split(".");
1
+ export const getValueByPath = (obj, path) => {
2
+ const segments = path.split('.');
6
3
  let current = obj;
7
- for (let i = 0; i < segments.length; i++) {
8
- if (typeof current === "object" &&
9
- current !== null &&
10
- segments[i] in current) {
11
- current = current[segments[i]];
4
+ for (const segment of segments) {
5
+ if (typeof current === 'object' && current !== null && segment in current) {
6
+ current = current[segment];
12
7
  }
13
8
  else {
14
9
  return undefined;
@@ -16,5 +11,4 @@ const getValueByPath = (obj, path) => {
16
11
  }
17
12
  return current;
18
13
  };
19
- exports.getValueByPath = getValueByPath;
20
14
  //# sourceMappingURL=get-value.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-value.js","sourceRoot":"","sources":["../../utils/get-value.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAC5B,GAAM,EACN,IAAY,EACZ,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,KAAK,IAAI;YACf,QAAQ,CAAC,CAAC,CAAY,IAAI,OAAO,EAClC,CAAC;YACD,OAAO,GAAI,OAAa,CAAC,QAAQ,CAAC,CAAC,CAAW,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AApBW,QAAA,cAAc,kBAoBzB"}
1
+ {"version":3,"file":"get-value.js","sourceRoot":"","sources":["../../utils/get-value.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,GAAM,EACN,IAAY,EACZ,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YAC1E,OAAO,GAAI,OAAa,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -1,18 +1,13 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./get-value"), exports);
1
+ export * from './get-value.js';
2
+ export * from './data-validators.js';
3
+ export * from './resolve-path.js';
4
+ export * from './sleep.js';
5
+ export * from './error-handler.js';
6
+ export * from './contract.js';
7
+ export * from './proof/index.js';
8
+ export * from './prompts/index.js';
9
+ export * from './spinner/index.js';
10
+ export * from './read-programs-by-abi.js';
11
+ export * from './get-commands.js';
12
+ export * from './parse-string.js';
18
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export const parseObjectsArray = (str) => {
2
+ const trimmed = str.trim();
3
+ if (!trimmed) {
4
+ return [];
5
+ }
6
+ const parts = trimmed.split('},').map((part) => part.trim());
7
+ const normalizedParts = parts.map((part) => {
8
+ return part.endsWith('}') ? part : part + '}';
9
+ });
10
+ const jsonStrings = normalizedParts.map((chunk) => {
11
+ const withQuotedKeys = chunk.replace(/(\w+)\s*:/g, '"$1":');
12
+ const replacedQuotes = withQuotedKeys.replace(/'/g, '"');
13
+ return replacedQuotes;
14
+ });
15
+ const result = jsonStrings.map((jsonStr) => {
16
+ return JSON.parse(jsonStr);
17
+ });
18
+ return result;
19
+ };
20
+ //# sourceMappingURL=parse-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-string.js","sourceRoot":"","sources":["../../utils/parse-string.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAyB,EAAE;IACtE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE7D,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEzD,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import prompts from 'prompts';
2
+ export const textPrompt = (message, name) => {
3
+ return prompts({
4
+ type: 'text',
5
+ name,
6
+ message,
7
+ });
8
+ };
9
+ export const confirmPrompt = (message, name) => {
10
+ return prompts({
11
+ type: 'confirm',
12
+ name,
13
+ message,
14
+ initial: false,
15
+ });
16
+ };
17
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../utils/prompts/default.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,OAAe,EACf,IAAO,EACsB,EAAE;IAC/B,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,MAAM;QACZ,IAAI;QACJ,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAe,EACf,IAAO,EACsB,EAAE;IAC/B,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,SAAS;QACf,IAAI;QACJ,OAAO;QACP,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { confirmPrompt, textPrompt } from './default.js';
2
+ export const dashboardAddressPrompt = async () => {
3
+ return await textPrompt('Enter dashboard address', 'address');
4
+ };
5
+ export const amountWeiPrompt = async () => {
6
+ return await textPrompt('Enter amount in wei', 'amountWei');
7
+ };
8
+ export const confirmContractAndAmount = async (dashboard, amountWei) => {
9
+ return await confirmPrompt(`Do you want to fund the dashboard ${dashboard} with ${amountWei} wei?`, 'confirm');
10
+ };
11
+ export const confirmFund = async (address, amountWei) => {
12
+ let contractAddress = address;
13
+ let amount = amountWei;
14
+ if (!contractAddress) {
15
+ const answerDashboardAddress = await dashboardAddressPrompt();
16
+ contractAddress = answerDashboardAddress.address;
17
+ }
18
+ if (!amount) {
19
+ const answerAmount = await amountWeiPrompt();
20
+ amount = answerAmount.amountWei;
21
+ }
22
+ const { confirm } = await confirmContractAndAmount(contractAddress, amount);
23
+ if (!confirm) {
24
+ console.info('Command cancelled');
25
+ return { address: null, amount: null };
26
+ }
27
+ return { address: contractAddress, amount: amount };
28
+ };
29
+ //# sourceMappingURL=delegation-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-dashboard.js","sourceRoot":"","sources":["../../../utils/prompts/delegation-dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,IAAI,EAAE;IAC/C,OAAO,MAAM,UAAU,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;IACxC,OAAO,MAAM,UAAU,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,SAAkB,EAClB,SAAiB,EACjB,EAAE;IACF,OAAO,MAAM,aAAa,CACxB,qCAAqC,SAAS,SAAS,SAAS,OAAO,EACvE,SAAS,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,OAAgB,EAAE,SAAiB,EAAE,EAAE;IACvE,IAAI,eAAe,GAAmB,OAAO,CAAC;IAC9C,IAAI,MAAM,GAAkB,SAAS,CAAC;IAEtC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,sBAAsB,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAC9D,eAAe,GAAG,sBAAsB,CAAC,OAAkB,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;QAC7C,MAAM,GAAG,YAAY,CAAC,SAAmB,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,wBAAwB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAE5E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACtD,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './default.js';
2
+ export * from './predeposit-guarantee.js';
3
+ export * from './delegation-dashboard.js';
4
+ export * from './vault.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../utils/prompts/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { textPrompt, confirmPrompt } from './default.js';
2
+ export const validatorIndexPrompt = async () => {
3
+ return await textPrompt('Enter validator index', 'validatorIndex');
4
+ };
5
+ export const confirmValidatorIndex = async (validatorIndex) => {
6
+ return await confirmPrompt(`Do you want to create proof for validator ${validatorIndex}?`, 'confirm');
7
+ };
8
+ export const confirmCreateProof = async (index) => {
9
+ let validatorIndex = index;
10
+ if (!validatorIndex) {
11
+ const answerValidatorIndex = await validatorIndexPrompt();
12
+ validatorIndex = answerValidatorIndex.validatorIndex;
13
+ if (!validatorIndex) {
14
+ console.info('Command cancelled');
15
+ return null;
16
+ }
17
+ }
18
+ const { confirm } = await confirmValidatorIndex(validatorIndex);
19
+ if (!confirm) {
20
+ console.info('Command cancelled');
21
+ return null;
22
+ }
23
+ return validatorIndex;
24
+ };
25
+ //# sourceMappingURL=predeposit-guarantee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predeposit-guarantee.js","sourceRoot":"","sources":["../../../utils/prompts/predeposit-guarantee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAI,EAAE;IAC7C,OAAO,MAAM,UAAU,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,cAAsB,EAAE,EAAE;IACpE,OAAO,MAAM,aAAa,CACxB,6CAA6C,cAAc,GAAG,EAC9D,SAAS,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;IACxD,IAAI,cAAc,GAAW,KAAK,CAAC;IAEnC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,oBAAoB,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAC1D,cAAc,GAAG,oBAAoB,CAAC,cAAc,CAAC;QAErD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAEhE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { confirmPrompt } from './default.js';
2
+ export const confirmCreateVaultParams = async (payload) => {
3
+ return await confirmPrompt(`Do you want to create a vault with the following parameters?
4
+ ${JSON.stringify(payload, (_key, value) => {
5
+ if (typeof value === 'bigint') {
6
+ return value.toString();
7
+ }
8
+ return value;
9
+ }, 2)}`, 'confirm');
10
+ };
11
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../utils/prompts/vault.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,OAA2B,EAAE,EAAE;IAC5E,OAAO,MAAM,aAAa,CACxB;MACE,IAAI,CAAC,SAAS,CACd,OAAO,EACP,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EACD,CAAC,CACF,EAAE,EACH,SAAS,CACV,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { toHex } from 'viem';
2
+ import { getConfig } from '../../configs/index.js';
3
+ import { createStateProof, createPubkeyWCProof, createBeaconHeaderProof, } from './proofs.js';
4
+ const SECONDS_PER_SLOT = 12;
5
+ const endpoints = {
6
+ genesis: 'eth/v1/beacon/genesis',
7
+ beaconHeader: (blockId) => `eth/v1/beacon/headers/${blockId}`,
8
+ beaconHeadersByParentRoot: (parentRoot) => `eth/v1/beacon/headers?parent_root=${parentRoot}`,
9
+ state: (stateId) => `eth/v2/debug/beacon/states/${stateId}`,
10
+ };
11
+ const SupportedFork = {
12
+ capella: 'capella',
13
+ deneb: 'deneb',
14
+ electra: 'electra',
15
+ };
16
+ const slotToTimestamp = (slot, genesisTimestamp) => {
17
+ return genesisTimestamp + slot * Number(SECONDS_PER_SLOT);
18
+ };
19
+ export const createPDGProof = async (validatorIndex) => {
20
+ const { clLink } = getConfig();
21
+ const beaconHeaderResp = await fetch(`${clLink}${endpoints.beaconHeader('finalized')}`);
22
+ const beaconHeaderJson = await beaconHeaderResp.json();
23
+ const beaconHeader = beaconHeaderJson.data.header.message;
24
+ const stateResp = await fetch(`${clLink}${endpoints.state('finalized')}`, {
25
+ headers: { accept: 'application/octet-stream' },
26
+ });
27
+ const { headers } = stateResp;
28
+ const forkName = headers.get('eth-consensus-version');
29
+ // Checks
30
+ if (!(forkName in SupportedFork))
31
+ throw new Error(`Fork name [${forkName}] is not supported`);
32
+ const bodyBytes = await stateResp.arrayBuffer();
33
+ if (!bodyBytes)
34
+ throw new Error('Body bytes are not found');
35
+ // Proofs
36
+ // Beacon Header Proof
37
+ const { proof: beaconHeaderProof, root: beaconHeaderRoot } = await createBeaconHeaderProof(beaconHeader);
38
+ // Validator State Proof
39
+ const { proof: validatorStateProof, validator, view: validatorStateView, } = await createStateProof(validatorIndex, bodyBytes, forkName);
40
+ // Pubkey WC Proof
41
+ const { proof: pubkeyWCProof } = await createPubkeyWCProof(validator.node);
42
+ // Concatenate proofs
43
+ const proofConcat = [
44
+ ...pubkeyWCProof.witnesses,
45
+ ...validatorStateProof.witnesses,
46
+ ...beaconHeaderProof.witnesses,
47
+ ];
48
+ const proofHex = proofConcat.map((w) => toHex(w));
49
+ const headerByParentResp = await fetch(`${clLink}${endpoints.beaconHeadersByParentRoot(beaconHeaderRoot)}`);
50
+ const headerByParentJson = await headerByParentResp.json();
51
+ const headerByParentSlot = headerByParentJson.data[0].header.message.slot;
52
+ const headerByParentTimestamp = slotToTimestamp(headerByParentSlot, validatorStateView.genesisTime);
53
+ const result = {
54
+ proof: proofHex,
55
+ pubkey: toHex(validator.pubkey),
56
+ withdrawalCredentials: toHex(validator.withdrawalCredentials),
57
+ validatorIndex: BigInt(validatorIndex),
58
+ childBlockTimestamp: BigInt(headerByParentTimestamp),
59
+ };
60
+ return result;
61
+ };
62
+ //# sourceMappingURL=create-proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-proof.js","sourceRoot":"","sources":["../../../utils/proof/create-proof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { ssz } from '@lodestar/types';
2
+ const SupportedFork = {
3
+ deneb: 'deneb',
4
+ electra: 'electra',
5
+ };
6
+ export const getFirstValidatorGIndex = (forks) => {
7
+ const gIndexes = {};
8
+ for (const fork of forks) {
9
+ const Fork = ssz[fork];
10
+ const Validators = Fork.BeaconState.getPathInfo(['validators']).type;
11
+ const gI = pack(Fork.BeaconState.getPathInfo(['validators', 0]).gindex,
12
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
13
+ // @ts-ignore
14
+ Validators.limit);
15
+ gIndexes[fork] = toBytes32String(gI);
16
+ }
17
+ console.table(gIndexes);
18
+ };
19
+ const pack = (gI, limit) => {
20
+ const width = limit ? BigInt(Math.log2(limit)) : 0n;
21
+ return (gI << 8n) | width;
22
+ };
23
+ const toBytes32String = (gI) => {
24
+ return `0x${gI.toString(16).padStart(64, '0')}`;
25
+ };
26
+ //# sourceMappingURL=first-validator-gindex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-validator-gindex.js","sourceRoot":"","sources":["../../../utils/proof/first-validator-gindex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAe,EAAE,EAAE;IACzD,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAkC,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAErE,MAAM,EAAE,GAAG,IAAI,CACb,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;QACtD,6DAA6D;QAC7D,aAAa;QACb,UAAU,CAAC,KAAK,CACjB,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,EAAE;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,EAAU,EAAE,EAAE;IACrC,OAAO,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;AAClD,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './merkle-utils.js';
2
+ export * from './create-proof.js';
3
+ export * from './first-validator-gindex.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../utils/proof/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC"}