@lidofinance/lsv-cli 1.7.0 → 1.9.0

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 (202) hide show
  1. package/README.md +9 -1
  2. package/dist/abi/defi-wrapper/GenericStrategy.d.ts +308 -0
  3. package/dist/abi/defi-wrapper/GenericStrategy.js +409 -0
  4. package/dist/abi/defi-wrapper/GenericStrategy.js.map +1 -0
  5. package/dist/abi/defi-wrapper/MellowStrategy.d.ts +429 -0
  6. package/dist/abi/defi-wrapper/MellowStrategy.js +892 -0
  7. package/dist/abi/defi-wrapper/MellowStrategy.js.map +1 -0
  8. package/dist/abi/defi-wrapper/index.d.ts +2 -0
  9. package/dist/abi/defi-wrapper/index.js +2 -0
  10. package/dist/abi/defi-wrapper/index.js.map +1 -1
  11. package/dist/abi/defi-wrapper/sources.d.ts +103 -0
  12. package/dist/abi/defi-wrapper/sources.js +104 -0
  13. package/dist/abi/defi-wrapper/sources.js.map +1 -0
  14. package/dist/configs/constants.d.ts +7 -1
  15. package/dist/configs/deployed.d.ts +5 -0
  16. package/dist/configs/deployed.js +20 -2
  17. package/dist/configs/deployed.js.map +1 -1
  18. package/dist/configs/envs.js +2 -0
  19. package/dist/configs/envs.js.map +1 -1
  20. package/dist/contracts/defi-wrapper/generic-strategy.d.ts +5 -0
  21. package/dist/contracts/defi-wrapper/generic-strategy.js +12 -0
  22. package/dist/contracts/defi-wrapper/generic-strategy.js.map +1 -0
  23. package/dist/contracts/defi-wrapper/index.d.ts +1 -0
  24. package/dist/contracts/defi-wrapper/index.js +1 -0
  25. package/dist/contracts/defi-wrapper/index.js.map +1 -1
  26. package/dist/features/defi-wrapper/defi-wrapper-factory.d.ts +3 -0
  27. package/dist/features/defi-wrapper/defi-wrapper-factory.js +4 -1
  28. package/dist/features/defi-wrapper/defi-wrapper-factory.js.map +1 -1
  29. package/dist/features/defi-wrapper/index.d.ts +1 -0
  30. package/dist/features/defi-wrapper/index.js +1 -0
  31. package/dist/features/defi-wrapper/index.js.map +1 -1
  32. package/dist/features/defi-wrapper/pool-info.d.ts +18 -1
  33. package/dist/features/defi-wrapper/pool-info.js +47 -3
  34. package/dist/features/defi-wrapper/pool-info.js.map +1 -1
  35. package/dist/features/defi-wrapper/timelock-roles.d.ts +5 -0
  36. package/dist/features/defi-wrapper/timelock-roles.js +43 -0
  37. package/dist/features/defi-wrapper/timelock-roles.js.map +1 -0
  38. package/dist/features/defi-wrapper/timelock.d.ts +8929 -8
  39. package/dist/features/defi-wrapper/timelock.js +83 -52
  40. package/dist/features/defi-wrapper/timelock.js.map +1 -1
  41. package/dist/features/defi-wrapper/verify-contracts.d.ts +20 -0
  42. package/dist/features/defi-wrapper/verify-contracts.js +145 -0
  43. package/dist/features/defi-wrapper/verify-contracts.js.map +1 -0
  44. package/dist/features/utils/try-fetch.js +2 -0
  45. package/dist/features/utils/try-fetch.js.map +1 -1
  46. package/dist/programs/account/write.js +2 -1
  47. package/dist/programs/account/write.js.map +1 -1
  48. package/dist/programs/defi-wrapper/contracts/factory/write.js +77 -6
  49. package/dist/programs/defi-wrapper/contracts/factory/write.js.map +1 -1
  50. package/dist/programs/defi-wrapper/contracts/index.d.ts +1 -0
  51. package/dist/programs/defi-wrapper/contracts/index.js +1 -0
  52. package/dist/programs/defi-wrapper/contracts/index.js.map +1 -1
  53. package/dist/programs/defi-wrapper/contracts/strategy/config.d.ts +3 -0
  54. package/dist/programs/defi-wrapper/contracts/strategy/config.js +40 -0
  55. package/dist/programs/defi-wrapper/contracts/strategy/config.js.map +1 -0
  56. package/dist/programs/defi-wrapper/contracts/strategy/index.d.ts +3 -0
  57. package/dist/programs/defi-wrapper/contracts/strategy/index.js +4 -0
  58. package/dist/programs/defi-wrapper/contracts/strategy/index.js.map +1 -0
  59. package/dist/programs/defi-wrapper/contracts/strategy/main.d.ts +1 -0
  60. package/dist/programs/defi-wrapper/contracts/strategy/main.js +6 -0
  61. package/dist/programs/defi-wrapper/contracts/strategy/main.js.map +1 -0
  62. package/dist/programs/defi-wrapper/contracts/strategy/read.d.ts +1 -0
  63. package/dist/programs/defi-wrapper/contracts/strategy/read.js +30 -0
  64. package/dist/programs/defi-wrapper/contracts/strategy/read.js.map +1 -0
  65. package/dist/programs/defi-wrapper/contracts/strategy/write.d.ts +1 -0
  66. package/dist/programs/defi-wrapper/contracts/strategy/write.js +34 -0
  67. package/dist/programs/defi-wrapper/contracts/strategy/write.js.map +1 -0
  68. package/dist/programs/defi-wrapper/contracts/stv-steth-pool/write.js +25 -21
  69. package/dist/programs/defi-wrapper/contracts/stv-steth-pool/write.js.map +1 -1
  70. package/dist/programs/defi-wrapper/contracts/withdrawal-queue/write.js +3 -4
  71. package/dist/programs/defi-wrapper/contracts/withdrawal-queue/write.js.map +1 -1
  72. package/dist/programs/defi-wrapper/use-cases/distributor/write.js +1 -0
  73. package/dist/programs/defi-wrapper/use-cases/distributor/write.js.map +1 -1
  74. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/read.js +25 -7
  75. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/read.js.map +1 -1
  76. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/write.js +195 -17
  77. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/write.js.map +1 -1
  78. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/write.js +3 -3
  79. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/write.js.map +1 -1
  80. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.d.ts +1 -0
  81. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.js +1 -0
  82. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.js.map +1 -1
  83. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/write.js +4 -4
  84. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/write.js.map +1 -1
  85. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/write.js +3 -3
  86. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/write.js.map +1 -1
  87. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/index.d.ts +2 -0
  88. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/index.js +3 -0
  89. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/index.js.map +1 -0
  90. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/main.d.ts +1 -0
  91. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/main.js +6 -0
  92. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/main.js.map +1 -0
  93. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/write.d.ts +1 -0
  94. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/write.js +57 -0
  95. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/write.js.map +1 -0
  96. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/write.js +4 -4
  97. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/write.js.map +1 -1
  98. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/read.js +32 -11
  99. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/read.js.map +1 -1
  100. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/write.js +14 -12
  101. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/write.js.map +1 -1
  102. package/dist/programs/use-cases/consolidation/write.js +2 -0
  103. package/dist/programs/use-cases/consolidation/write.js.map +1 -1
  104. package/dist/providers/wallet.d.ts +2936 -8456
  105. package/dist/providers/wallet.js +74 -2
  106. package/dist/providers/wallet.js.map +1 -1
  107. package/dist/tests/integration/gas-estimation.test.d.ts +1 -0
  108. package/dist/tests/integration/gas-estimation.test.js +76 -0
  109. package/dist/tests/integration/gas-estimation.test.js.map +1 -0
  110. package/dist/tests/integration/helpers/test-client.d.ts +2071 -5761
  111. package/dist/tests/utils/arguments-security.test.d.ts +1 -0
  112. package/dist/tests/utils/arguments-security.test.js +34 -0
  113. package/dist/tests/utils/arguments-security.test.js.map +1 -0
  114. package/dist/tests/utils/arguments.test.js +2 -20
  115. package/dist/tests/utils/arguments.test.js.map +1 -1
  116. package/dist/tests/utils/cache-security.test.d.ts +1 -0
  117. package/dist/tests/utils/cache-security.test.js +62 -0
  118. package/dist/tests/utils/cache-security.test.js.map +1 -0
  119. package/dist/tests/utils/contract-write-stateoverride.test.d.ts +1 -0
  120. package/dist/tests/utils/contract-write-stateoverride.test.js +135 -0
  121. package/dist/tests/utils/contract-write-stateoverride.test.js.map +1 -0
  122. package/dist/tests/utils/data-validators.test.js +21 -5
  123. package/dist/tests/utils/data-validators.test.js.map +1 -1
  124. package/dist/tests/utils/deployed-security.test.d.ts +1 -0
  125. package/dist/tests/utils/deployed-security.test.js +51 -0
  126. package/dist/tests/utils/deployed-security.test.js.map +1 -0
  127. package/dist/tests/utils/get-confirmations.test.d.ts +1 -0
  128. package/dist/tests/utils/get-confirmations.test.js +40 -0
  129. package/dist/tests/utils/get-confirmations.test.js.map +1 -0
  130. package/dist/tests/utils/ipfs-security.test.d.ts +1 -0
  131. package/dist/tests/utils/ipfs-security.test.js +232 -0
  132. package/dist/tests/utils/ipfs-security.test.js.map +1 -0
  133. package/dist/tests/utils/ipfs.test.js +8 -8
  134. package/dist/tests/utils/ipfs.test.js.map +1 -1
  135. package/dist/tests/utils/parse-abi-arguments.test.d.ts +1 -0
  136. package/dist/tests/utils/parse-abi-arguments.test.js +399 -0
  137. package/dist/tests/utils/parse-abi-arguments.test.js.map +1 -0
  138. package/dist/tests/utils/public-client-gas-estimation.test.d.ts +1 -0
  139. package/dist/tests/utils/public-client-gas-estimation.test.js +231 -0
  140. package/dist/tests/utils/public-client-gas-estimation.test.js.map +1 -0
  141. package/dist/tests/utils/rate-limit-security.test.d.ts +1 -0
  142. package/dist/tests/utils/rate-limit-security.test.js +82 -0
  143. package/dist/tests/utils/rate-limit-security.test.js.map +1 -0
  144. package/dist/tests/utils/salt.test.d.ts +1 -0
  145. package/dist/tests/utils/salt.test.js +20 -0
  146. package/dist/tests/utils/salt.test.js.map +1 -0
  147. package/dist/tests/utils/stream-helpers.d.ts +1 -0
  148. package/dist/tests/utils/stream-helpers.js +11 -0
  149. package/dist/tests/utils/stream-helpers.js.map +1 -0
  150. package/dist/utils/arguments.d.ts +2 -7
  151. package/dist/utils/arguments.js +21 -17
  152. package/dist/utils/arguments.js.map +1 -1
  153. package/dist/utils/cache.js +15 -13
  154. package/dist/utils/cache.js.map +1 -1
  155. package/dist/utils/data-validators.d.ts +3 -2
  156. package/dist/utils/data-validators.js +8 -11
  157. package/dist/utils/data-validators.js.map +1 -1
  158. package/dist/utils/env.d.ts +1 -0
  159. package/dist/utils/env.js +8 -0
  160. package/dist/utils/env.js.map +1 -0
  161. package/dist/utils/fetch-cl.js +2 -1
  162. package/dist/utils/fetch-cl.js.map +1 -1
  163. package/dist/utils/index.d.ts +6 -5
  164. package/dist/utils/index.js +6 -5
  165. package/dist/utils/index.js.map +1 -1
  166. package/dist/utils/ipfs.d.ts +4 -2
  167. package/dist/utils/ipfs.js +93 -11
  168. package/dist/utils/ipfs.js.map +1 -1
  169. package/dist/utils/logging/console.d.ts +1 -0
  170. package/dist/utils/logging/console.js +23 -2
  171. package/dist/utils/logging/console.js.map +1 -1
  172. package/dist/utils/parse-abi-arguments.d.ts +24 -0
  173. package/dist/utils/parse-abi-arguments.js +159 -0
  174. package/dist/utils/parse-abi-arguments.js.map +1 -0
  175. package/dist/utils/prompts/account.d.ts +1 -0
  176. package/dist/utils/prompts/account.js +13 -0
  177. package/dist/utils/prompts/account.js.map +1 -0
  178. package/dist/utils/prompts/index.d.ts +3 -0
  179. package/dist/utils/prompts/index.js +3 -0
  180. package/dist/utils/prompts/index.js.map +1 -1
  181. package/dist/utils/prompts/strategy.d.ts +15398 -0
  182. package/dist/utils/prompts/strategy.js +10 -0
  183. package/dist/utils/prompts/strategy.js.map +1 -0
  184. package/dist/utils/prompts/timelock-roles.d.ts +1 -0
  185. package/dist/utils/prompts/timelock-roles.js +13 -0
  186. package/dist/utils/prompts/timelock-roles.js.map +1 -0
  187. package/dist/utils/rate-limit.d.ts +6 -0
  188. package/dist/utils/rate-limit.js +22 -5
  189. package/dist/utils/rate-limit.js.map +1 -1
  190. package/dist/utils/salt.d.ts +3 -0
  191. package/dist/utils/salt.js +8 -0
  192. package/dist/utils/salt.js.map +1 -0
  193. package/dist/utils/transactions/tx-private-key.d.ts +2 -1
  194. package/dist/utils/transactions/tx-private-key.js +5 -8
  195. package/dist/utils/transactions/tx-private-key.js.map +1 -1
  196. package/dist/utils/transactions/tx-wc.js +3 -7
  197. package/dist/utils/transactions/tx-wc.js.map +1 -1
  198. package/dist/utils/transactions/utils.d.ts +1 -0
  199. package/dist/utils/transactions/utils.js +12 -0
  200. package/dist/utils/transactions/utils.js.map +1 -1
  201. package/dist/version/index.js +1 -1
  202. package/package.json +10 -9
@@ -1,8 +1,21 @@
1
- import { logInfo, callWriteMethodWithReceipt, confirmOperation, callReadMethodSilent, stringToAddress, addressPrompt, stringToHash, textPrompt, stringToHex, } from '../../utils/index.js';
2
- import { zeroHash, isHash, formatEther, } from 'viem';
1
+ import { logInfo, callWriteMethodWithReceipt, confirmOperation, callReadMethodSilent, stringToAddress, addressPrompt, stringToHash, textPrompt, DEFAULT_SALT, } from '../../utils/index.js';
2
+ import { zeroHash, isHash, formatEther, parseEventLogs, } from 'viem';
3
3
  import { getTimeLockContract, } from '../../contracts/defi-wrapper/index.js';
4
+ import { DashboardAbi } from '../../abi/Dashboard.js';
5
+ import { TimeLockAbi, DistributorAbi, WithdrawalQueueAbi, StvStETHPoolAbi, StvPoolAbi, OssifiableProxyAbi, GenericStrategyAbi, MellowStrategyAbi, } from '../../abi/defi-wrapper/index.js';
6
+ import { getPublicClient } from '../../providers/wallet.js';
7
+ export const targetContractTypeToAbi = {
8
+ proxy: OssifiableProxyAbi,
9
+ dashboard: DashboardAbi,
10
+ withdrawalQueue: WithdrawalQueueAbi,
11
+ distributor: DistributorAbi,
12
+ timelock: TimeLockAbi,
13
+ stvPool: StvPoolAbi,
14
+ stvStethPool: StvStETHPoolAbi,
15
+ genericStrategy: GenericStrategyAbi,
16
+ mellowStrategy: MellowStrategyAbi,
17
+ };
4
18
  // Common constants
5
- export const DEFAULT_SALT = zeroHash;
6
19
  export const DEFAULT_PREDECESSOR = zeroHash;
7
20
  // Common argument and option definitions
8
21
  export const TIMELOCK_ARGUMENT = [
@@ -35,6 +48,26 @@ export const SALT_OPTION = [
35
48
  stringToHash,
36
49
  DEFAULT_SALT,
37
50
  ];
51
+ export const PREDECESSOR_OPTION = [
52
+ '-p, --predecessor <predecessor>',
53
+ 'predecessor operation ID (bytes32 hex, default: 0x0)',
54
+ stringToHash,
55
+ DEFAULT_PREDECESSOR,
56
+ ];
57
+ export const SKIP_SIMULATION_OPTION = [
58
+ '--skip-simulation',
59
+ 'skip simulation of operations before proposing/executing (not recommended)',
60
+ ];
61
+ export const TARGET_CONTRACT_TYPE_ARGUMENT = [
62
+ '[targetContractType]',
63
+ 'target contract type for predefined operations (proxy, dashboard, withdrawalQueue, distributor, timelock, stvPool, stvStethPool, genericStrategy, mellowStrategy)',
64
+ (input) => {
65
+ if (targetContractTypeToAbi.hasOwnProperty(input)) {
66
+ return input;
67
+ }
68
+ throw new Error(`Invalid target contract type: ${input}. Valid types are: ${Object.keys(targetContractTypeToAbi).join(', ')}`);
69
+ },
70
+ ];
38
71
  // Helper function to get timelock from argument or prompt user
39
72
  export const getPromptTimelock = async (argAddress) => {
40
73
  if (argAddress)
@@ -42,27 +75,6 @@ export const getPromptTimelock = async (argAddress) => {
42
75
  const timelockPrompt = await addressPrompt('Enter timelock contract address', 'timelock');
43
76
  return getTimeLockContract(timelockPrompt.timelock);
44
77
  };
45
- export const promptRole = async (roleInput,
46
- // hard to match correct type here
47
- contract) => {
48
- if (!roleInput) {
49
- const rolePrompt = await textPrompt('Enter role (bytes32 hex or role name like DEFAULT_ADMIN_ROLE)', 'role');
50
- roleInput = rolePrompt.role;
51
- }
52
- const role = await resolveRole(roleInput, contract);
53
- return role;
54
- };
55
- export const promptAccount = async (accountInput, message) => {
56
- let account;
57
- if (!accountInput) {
58
- const accountPrompt = await addressPrompt(message, 'account');
59
- account = accountPrompt.account;
60
- }
61
- else {
62
- account = stringToAddress(accountInput);
63
- }
64
- return account;
65
- };
66
78
  export const promptOperationId = async (operationIdInput) => {
67
79
  if (!operationIdInput) {
68
80
  const operationIdPrompt = await textPrompt('Enter operation ID (bytes32 hash)', 'operationId');
@@ -74,70 +86,89 @@ export const promptOperationId = async (operationIdInput) => {
74
86
  : stringToHash(operationIdInput);
75
87
  return operationId;
76
88
  };
77
- // Helper function to process salt option
78
- export const processSalt = (saltOption) => {
79
- return saltOption ? stringToHex(saltOption) : DEFAULT_SALT;
80
- };
81
- // Helper function to resolve role
82
- export const resolveRole = async (roleInput, contract) => {
83
- if (isHash(roleInput))
84
- return roleInput;
85
- try {
86
- const role = (await callReadMethodSilent({
87
- contract,
88
- methodName: roleInput,
89
- payload: [],
90
- }));
91
- logInfo(`Resolved role "${roleInput}" to ${role}`);
92
- return role;
93
- }
94
- catch {
95
- throw new Error(`Failed to resolve role "${roleInput}". Please provide a valid role name (e.g., DEFAULT_ADMIN_ROLE) or bytes32 hex.`);
96
- }
97
- };
98
89
  export const waitTimeTo = (timestamp) => {
99
90
  const now = BigInt(Math.floor(Date.now() / 1000));
100
91
  return timestamp > now ? timestamp - now : 0n;
101
92
  };
102
93
  // Helper function for propose operations
103
- export const proposeOperation = async (timelock, target, data, salt, functionName, confirmationMessage) => {
94
+ export const proposeOperation = async (timelock, target, data, salt, functionName, confirmationMessage, options = {}) => {
95
+ const { predecessor = DEFAULT_PREDECESSOR, value = 0n, skipSimulation = false, } = options;
104
96
  const timelockContract = await getTimeLockContract(timelock);
105
97
  const minDelay = await callReadMethodSilent({
106
98
  contract: timelockContract,
107
99
  methodName: 'getMinDelay',
108
100
  payload: [],
109
101
  });
110
- const predecessor = DEFAULT_PREDECESSOR;
111
102
  const operationId = await callReadMethodSilent({
112
103
  contract: timelockContract,
113
104
  methodName: 'hashOperation',
114
- payload: [[target, 0n, data, predecessor, salt]],
105
+ payload: [[target, value, data, predecessor, salt]],
115
106
  });
116
107
  logInfo('Proposing operation:');
117
108
  logInfo(` Operation ID: ${operationId}`);
118
109
  logInfo(` Target: ${target}`);
119
- logInfo(` Value: 0`);
110
+ logInfo(` Value: ${formatEther(value)} ETH`);
120
111
  logInfo(` Payload: ${data}`);
121
112
  logInfo(` Predecessor: ${predecessor}`);
122
113
  logInfo(` Salt: ${salt}`);
123
114
  logInfo(` Function: ${functionName}`);
124
115
  logInfo(` Min delay: ${minDelay} seconds`);
116
+ if (!skipSimulation) {
117
+ // Simulate the operation to check for errors before proposing
118
+ const client = await getPublicClient();
119
+ const { results } = await client.simulateCalls({
120
+ account: timelock,
121
+ calls: [
122
+ {
123
+ to: target,
124
+ data,
125
+ value,
126
+ },
127
+ ],
128
+ });
129
+ if (results[0].error) {
130
+ logInfo(`❌ Simulation failed for the proposed operation. Error: ${results[0].error.message}`);
131
+ throw new Error('Operation simulation failed. See logs for details.');
132
+ }
133
+ else {
134
+ logInfo(' ✅ Successfully simulated the proposed operation. No errors detected.');
135
+ }
136
+ }
125
137
  const confirm = await confirmOperation(confirmationMessage);
126
138
  if (!confirm) {
127
139
  throw new Error('Operation cancelled by user');
128
140
  }
129
- await callWriteMethodWithReceipt({
141
+ const { receipt } = await callWriteMethodWithReceipt({
130
142
  contract: timelockContract,
131
143
  methodName: 'schedule',
132
- payload: [target, 0n, data, predecessor, salt, minDelay],
144
+ payload: [target, value, data, predecessor, salt, minDelay],
133
145
  });
146
+ if (receipt?.logs) {
147
+ const events = parseEventLogs({
148
+ abi: timelockContract.abi,
149
+ logs: receipt.logs,
150
+ strict: true,
151
+ eventName: 'CallScheduled',
152
+ });
153
+ if (events.length > 1) {
154
+ logInfo(`⚠️ Multiple CallScheduled events found in receipt logs. Check the transaction details for more info.`);
155
+ }
156
+ const event = events[0];
157
+ if (!event) {
158
+ logInfo(`⚠️ No CallScheduled event found in receipt logs. Check the transaction details for more info.`);
159
+ }
160
+ else if (event?.args.id !== operationId) {
161
+ logInfo(`⚠️ Operation ID from event (${event.args.id}) does not match calculated operation ID (${operationId}). Check the transaction details for more info.`);
162
+ }
163
+ }
134
164
  logInfo(`✅ Operation proposed successfully!`);
135
165
  logInfo(` Operation ID: ${operationId}`);
136
166
  logInfo(` Execute after: ${minDelay} seconds`);
137
167
  return operationId;
138
168
  };
139
169
  // Helper function for execute operations
140
- export const executeOperation = async (timelock, target, data, salt, functionName, confirmationMessage, value = 0n, predecessor = DEFAULT_PREDECESSOR) => {
170
+ export const executeOperation = async (timelock, target, data, salt, functionName, confirmationMessage, options = {}) => {
171
+ const { predecessor = DEFAULT_PREDECESSOR, value = 0n } = options;
141
172
  const timelockContract = await getTimeLockContract(timelock);
142
173
  const operationId = await callReadMethodSilent({
143
174
  contract: timelockContract,
@@ -1 +1 @@
1
- {"version":3,"file":"timelock.js","sourceRoot":"","sources":["../../../features/defi-wrapper/timelock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timelock.js","sourceRoot":"","sources":["../../../features/defi-wrapper/timelock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { DefiWrapperSources } from '../../abi/defi-wrapper/sources.js';
2
+ import { Address, Hash } from 'viem';
3
+ type ContractName = keyof typeof DefiWrapperSources;
4
+ export declare const checkExistingVerification: (address: Address, etherscanApiKey: string) => Promise<boolean>;
5
+ export declare const checkVerificationStatus: (guid: string, etherscanApiKey: string) => Promise<any>;
6
+ export declare const verifyContract: (contract: ContractName, address: Address, etherscanApiKey: string) => Promise<void>;
7
+ type VerifyDefiWrapperDeploymentParams = {
8
+ etherscanApiKey: string;
9
+ poolType: Hash;
10
+ strategyType: Hash | null;
11
+ poolProxy: Address;
12
+ poolImpl: Address;
13
+ withdrawalQueue: Address;
14
+ withdrawalQueueImpl: Address;
15
+ strategyProxy: Address | null;
16
+ strategyImpl: Address | null;
17
+ timelock: Address;
18
+ };
19
+ export declare const verifyDefiWrapperDeployment: ({ etherscanApiKey, poolProxy, poolImpl, poolType, withdrawalQueue, withdrawalQueueImpl, timelock, strategyType, strategyImpl, strategyProxy, }: VerifyDefiWrapperDeploymentParams) => Promise<void>;
20
+ export {};
@@ -0,0 +1,145 @@
1
+ import { DefiWrapperSources } from '../../abi/defi-wrapper/sources.js';
2
+ import { logInfo, RateLimitedFetch } from '../../index.js';
3
+ import { getPublicClient } from '../../providers/wallet.js';
4
+ const EtherscanApi = new RateLimitedFetch(500); // at least 500ms delay between requests to avoid hitting rate limits
5
+ export const checkExistingVerification = async (address, etherscanApiKey) => {
6
+ const chainId = (await getPublicClient()).chain.id;
7
+ const params = new URLSearchParams({
8
+ chainid: chainId.toString(),
9
+ module: 'contract',
10
+ action: 'getsourcecode',
11
+ address,
12
+ apikey: etherscanApiKey,
13
+ });
14
+ const url = `https://api.etherscan.io/v2/api?${params}`;
15
+ const response = await EtherscanApi.fetch(url);
16
+ if (!response.ok) {
17
+ throw new Error(`Failed to fetch verification data: ${response.statusText}`);
18
+ }
19
+ const data = await response.json();
20
+ if (data.status !== '1' || !data.result || data.result.length === 0) {
21
+ throw new Error(`No verification data found for address: ${address}`);
22
+ }
23
+ return data.result[0].SourceCode !== ''; // Already verified
24
+ };
25
+ export const checkVerificationStatus = async (guid, etherscanApiKey) => {
26
+ const chainId = (await getPublicClient()).chain.id;
27
+ const params = new URLSearchParams({
28
+ guid,
29
+ action: 'checkverifystatus',
30
+ module: 'contract',
31
+ chainid: chainId.toString(),
32
+ apikey: etherscanApiKey,
33
+ });
34
+ const url = `https://api.etherscan.io/v2/api?${params}`;
35
+ const response = await EtherscanApi.fetch(url);
36
+ if (!response.ok) {
37
+ throw new Error(`Failed to fetch verification status: ${response.statusText}`);
38
+ }
39
+ const data = await response.json();
40
+ if (data.status !== '1' || !data.result || data.result.length === 0) {
41
+ throw new Error(`No verification status found for GUID: ${guid}`);
42
+ }
43
+ return data.result[0].result; // "Pass - Verified" or "Fail - Unable to verify"
44
+ };
45
+ export const verifyContract = async (contract, address, etherscanApiKey) => {
46
+ const chainId = (await getPublicClient()).chain.id;
47
+ const sourceData = DefiWrapperSources[contract];
48
+ if (!sourceData) {
49
+ throw new Error(`No source data found for contract: ${contract}. Available contracts: ${Object.keys(DefiWrapperSources).join(', ')}`);
50
+ }
51
+ const alreadyVerified = await checkExistingVerification(address, etherscanApiKey);
52
+ if (alreadyVerified) {
53
+ logInfo('Contract is already verified.');
54
+ return;
55
+ }
56
+ const body = new URLSearchParams({
57
+ apikey: etherscanApiKey,
58
+ chainid: chainId.toString(),
59
+ module: 'contract',
60
+ action: 'verifysourcecode',
61
+ contractaddress: address,
62
+ sourceCode: JSON.stringify(JSON.parse(sourceData.SourceCode)),
63
+ codeformat: sourceData.codeformat,
64
+ contractname: `${sourceData.ContractFileName}:${sourceData.ContractName}`,
65
+ compilerversion: sourceData.CompilerVersion,
66
+ optimizationUsed: sourceData.OptimizationUsed,
67
+ runs: sourceData.Runs,
68
+ evmVersion: sourceData.EVMVersion,
69
+ });
70
+ const res = await EtherscanApi.fetch(`https://api.etherscan.io/v2/api?chainid=${chainId}`, {
71
+ method: 'POST',
72
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
73
+ body: body.toString(),
74
+ });
75
+ if (!res.ok) {
76
+ throw new Error(`Failed to submit verification: ${res.statusText}`);
77
+ }
78
+ const result = await res.json();
79
+ if (result.status !== '1') {
80
+ throw new Error(`Verification failed: ${result.result}`);
81
+ }
82
+ const guid = result.result;
83
+ logInfo(`Verification submitted. GUID: ${guid}`);
84
+ for (let i = 0; i < 10; i++) {
85
+ logInfo(`Checking verification status (attempt ${i + 1}/10)...`);
86
+ const status = await checkVerificationStatus(guid, etherscanApiKey);
87
+ logInfo(`Current status: ${status}`);
88
+ if (status === 'Pass - Verified') {
89
+ logInfo('Contract verified successfully!');
90
+ return;
91
+ }
92
+ else if (status === 'Fail - Unable to verify') {
93
+ throw new Error('Verification failed after submission.');
94
+ }
95
+ await new Promise((resolve) => setTimeout(resolve, 10000)); // Wait 10 seconds before retrying
96
+ }
97
+ throw new Error('Verification status check timed out.');
98
+ };
99
+ const POOL_TYPE_CONTRACT = {
100
+ '0x537476506f6f6c00000000000000000000000000000000000000000000000007': 'stvPoolImpl',
101
+ // stvStethPool and stvStetStrategy have same implementation
102
+ '0x5374765374455448506f6f6c000000000000000000000000000000000000000c': 'stvStethPoolImpl',
103
+ '0x5374765374726174656779506f6f6c000000000000000000000000000000000f': 'stvStethPoolImpl',
104
+ };
105
+ const STRATEGY_TYPE_CONTRACT = {
106
+ '0x3b0e47226370dd0daa4b28feb910df52f3fa507a32622521ef348962830e24cd': 'mellowStrategyImpl',
107
+ };
108
+ export const verifyDefiWrapperDeployment = async ({ etherscanApiKey, poolProxy, poolImpl, poolType, withdrawalQueue, withdrawalQueueImpl, timelock, strategyType, strategyImpl, strategyProxy, }) => {
109
+ logInfo('Verifying Pool Proxy...');
110
+ await verifyContract('proxy', poolProxy, etherscanApiKey);
111
+ logInfo('Pool Proxy verified successfully!');
112
+ logInfo('Verifying Pool Implementation...');
113
+ const poolContract = POOL_TYPE_CONTRACT[poolType];
114
+ if (!poolContract) {
115
+ throw new Error(`Unknown pool type for proxy: ${poolProxy}`);
116
+ }
117
+ await verifyContract(poolContract, poolImpl, etherscanApiKey);
118
+ logInfo('Pool Implementation verified successfully!');
119
+ logInfo('Verifying Withdrawal Queue Proxy...');
120
+ await verifyContract('proxy', withdrawalQueue, etherscanApiKey);
121
+ logInfo('Withdrawal Queue Proxy verified successfully!');
122
+ logInfo('Verifying Withdrawal Queue Implementation...');
123
+ await verifyContract('wqImpl', withdrawalQueueImpl, etherscanApiKey);
124
+ logInfo('Withdrawal Queue Implementation verified successfully!');
125
+ logInfo('Verifying TimeLock...');
126
+ await verifyContract('timelock', timelock, etherscanApiKey);
127
+ logInfo('TimeLock verified successfully!');
128
+ if (strategyType) {
129
+ if (!strategyImpl || !strategyProxy) {
130
+ throw new Error('Strategy type is set but strategy implementation or proxy address is missing');
131
+ }
132
+ logInfo('Verifying Strategy Proxy...');
133
+ await verifyContract('proxy', strategyProxy, etherscanApiKey);
134
+ logInfo('Strategy Proxy verified successfully!');
135
+ const strategyContract = STRATEGY_TYPE_CONTRACT[strategyType];
136
+ if (!strategyContract) {
137
+ throw new Error(`Unknown strategy type for proxy: ${strategyProxy}`);
138
+ }
139
+ logInfo('Verifying Strategy Implementation...');
140
+ await verifyContract(strategyContract, strategyImpl, etherscanApiKey);
141
+ logInfo('Strategy Implementation verified successfully!');
142
+ }
143
+ logInfo('All contracts verified successfully!');
144
+ };
145
+ //# sourceMappingURL=verify-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-contracts.js","sourceRoot":"","sources":["../../../features/defi-wrapper/verify-contracts.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
+ import { assertSafeUrl } from '../../utils/index.js';
1
2
  export const tryFetchPost = async (url, body) => {
2
3
  let success = false;
3
4
  let result = null;
4
5
  let error = null;
5
6
  try {
7
+ assertSafeUrl(url, 'callback URL');
6
8
  const response = await fetch(url, {
7
9
  method: 'POST',
8
10
  headers: { 'Content-Type': 'application/json' },
@@ -1 +1 @@
1
- {"version":3,"file":"try-fetch.js","sourceRoot":"","sources":["../../../features/utils/try-fetch.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,GAAW,EACX,IAAa,EACb,EAAE;IACF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACtC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CACrD;SACF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,MAAM,iBAAiB,QAAQ,CAAC,UAAU,EAAE,CAC7E,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAY,CAAC;QAC5C,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;IACD,OAAO;QACL,OAAO;QACP,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"try-fetch.js","sourceRoot":"","sources":["../../../features/utils/try-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,GAAW,EACX,IAAa,EACb,EAAE;IACF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC;QACH,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACtC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CACrD;SACF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,MAAM,iBAAiB,QAAQ,CAAC,UAAU,EAAE,CAC7E,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAY,CAAC;QAC5C,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;IACD,OAAO;QACL,OAAO;QACP,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC,CAAC"}
@@ -27,7 +27,8 @@ accountWrite
27
27
  return;
28
28
  }
29
29
  const privateKey = generatePrivateKey();
30
- logInfo(`Private key: ${privateKey}`);
30
+ // Write to stderr so pipes/redirects cannot capture the key
31
+ process.stderr.write(`Private key: ${privateKey}\n`);
31
32
  });
32
33
  accountWrite
33
34
  .command('generate-encrypted-account')
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../programs/account/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../programs/account/write.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
- import { encodeAbiParameters, keccak256, toBytes, zeroAddress, } from 'viem';
1
+ import { encodeAbiParameters, isAddressEqual, zeroAddress, } from 'viem';
2
2
  import { getTransactionReceipt } from 'viem/actions';
3
3
  import { Option } from 'commander';
4
4
  import { logInfo, getCommandsJson, stringToAddress, callWriteMethodWithReceipt, confirmOperation, stringToNumber, stringToBoolean, stringToHash, withError, } from '../../../../utils/index.js';
5
- import { getFactoryContract, getStrategyFactoryContract, } from '../../../../contracts/defi-wrapper/index.js';
6
- import { getCreatePoolEventData, getReserveRatioGapBP, promptBaseVaultConfiguration, logCreatePoolEventData, finalizePoolCreation, prepareCreationConfigrationText, simulatePoolCreation, promptAllowListConfiguration, MELLOW_VAULTS_STRATEGY_ID, } from '../../../../features/index.js';
5
+ import { getFactoryContract, getOssifiableProxyContract, getStrategyFactoryContract, getStvPoolContract, } from '../../../../contracts/defi-wrapper/index.js';
6
+ import { getCreatePoolEventData, getReserveRatioGapBP, promptBaseVaultConfiguration, logCreatePoolEventData, finalizePoolCreation, prepareCreationConfigrationText, simulatePoolCreation, promptAllowListConfiguration, MELLOW_VAULTS_STRATEGY_ID, getFinalizePoolEventData, getBoolean, KNOWN_STRATEGIES, } from '../../../../features/index.js';
7
7
  import { factory } from './main.js';
8
8
  import { getPublicClient } from '../../../../providers/index.js';
9
+ import { verifyContract, verifyDefiWrapperDeployment, } from '../../../../features/defi-wrapper/verify-contracts.js';
10
+ import { envs } from '../../../../configs/index.js';
11
+ import { getGenericStrategyContract } from '../../../../contracts/defi-wrapper/generic-strategy.js';
9
12
  // CONSTANTS & HELPERS
10
13
  const FIRST_STEP_MESSAGE = 'Transaction has been sent. Use "dw contracts factory write create-pool-finalize" command to finalize the pool creation after the transaction is signed and executed';
11
14
  // adds common options for all wrapper creation commands
@@ -200,12 +203,18 @@ applyCommonOptions(factoryWrite
200
203
  throw new Error('StvStrategyPool creation with custom strategy factory does not support setting AllowList Manager. This role will be able to manage list of allowed strategies and should only be set via Timelock Governance after the pool creation.');
201
204
  }
202
205
  }
206
+ if (strategyFactory && mintingEnabled != undefined && !mintingEnabled) {
207
+ throw new Error('Minting must always be enabled for strategy pools');
208
+ }
209
+ const mintingEnabledValue = strategyFactory
210
+ ? true
211
+ : await getBoolean(mintingEnabled, 'mintingEnabled');
203
212
  const reserveRatioGapBPValue = await getReserveRatioGapBP(reserveRatioGapBP);
204
213
  const confirmationMessage = `Are you sure you want to create a new custom pool?\n
205
214
  ${prepareCreationConfigrationText(vaultConfig, timelockConfig, commonPoolConfig)}
206
215
  strategyFactory: ${strategyFactory ?? '<none>'}
207
216
  strategyFactoryDeployBytes: ${strategyFactoryDeployBytes ?? '<none>'}
208
- mintingEnabled: ${mintingEnabled !== undefined ? mintingEnabled : true}
217
+ mintingEnabled: ${mintingEnabledValue}
209
218
  allowListEnabled: ${allowListConfig.allowListEnabled}
210
219
  allowListManager: ${allowListConfig.allowListManager === zeroAddress ? '<none>' : allowListConfig.allowListManager}
211
220
  reserveRatioGapBP: ${reserveRatioGapBPValue}\n`;
@@ -221,7 +230,7 @@ applyCommonOptions(factoryWrite
221
230
  allowListEnabled: allowListConfig.allowListEnabled,
222
231
  allowListManager: allowListConfig.allowListManager,
223
232
  reserveRatioGapBP: BigInt(reserveRatioGapBPValue),
224
- mintingEnabled: true,
233
+ mintingEnabled: mintingEnabledValue,
225
234
  },
226
235
  strategyFactory ?? zeroAddress,
227
236
  strategyFactoryDeployBytes ?? '0x',
@@ -262,7 +271,7 @@ applyCommonOptions(factoryWrite
262
271
  if (error || !STRATEGY_ID) {
263
272
  throw new Error(`Error reading STRATEGY_ID from the strategy factory contract: ${error}. Make sure the provided address is correct and the contract is properly deployed.`);
264
273
  }
265
- if (STRATEGY_ID !== keccak256(toBytes(MELLOW_VAULTS_STRATEGY_ID))) {
274
+ if (KNOWN_STRATEGIES[STRATEGY_ID] !== MELLOW_VAULTS_STRATEGY_ID) {
266
275
  throw new Error(`The provided strategy factory contract has an incompatible STRATEGY_ID. Check that the contract at address ${strategyFactoryAddress} is the correct one.`);
267
276
  }
268
277
  const { vaultConfig, timelockConfig, commonPoolConfig } = await promptBaseVaultConfiguration(baseOptions);
@@ -333,4 +342,66 @@ factoryWrite
333
342
  logCreatePoolEventData(eventData);
334
343
  await finalizePoolCreation(contract, eventData);
335
344
  });
345
+ factoryWrite
346
+ .command('verify-contract')
347
+ .description('verifies single deployed contract of defi-wrapper set on Etherscan')
348
+ .argument('<contractName>', 'contract type, can be one of "wqImpl", "timelock", "proxy", "stvPoolImpl", "stvStethPoolImpl", "dashboardImpl", "mellowStrategyImpl"')
349
+ .argument('<contractAddress>', 'contract address', stringToAddress)
350
+ .option('--etherscanApiKey [etherscanApiKey]', 'Etherscan API Key, can also be set in .env file as ETHERSCAN_API_KEY', envs?.ETHERSCAN_API_KEY)
351
+ .action(async (contractName, contractAddress, options) => {
352
+ const { etherscanApiKey } = options;
353
+ if (!etherscanApiKey) {
354
+ throw new Error('Etherscan API key is required for contract verification. Please provide it in .env or via --etherscanApiKey option.');
355
+ }
356
+ await verifyContract(contractName, contractAddress, etherscanApiKey);
357
+ });
358
+ factoryWrite
359
+ .command('verify-deployment')
360
+ .description('verifies all contracts deployed by the defi wrapper factory on Etherscan')
361
+ .argument('<txHashStart>', 'first transaction hash of the factory deployment', stringToHash)
362
+ .argument('<txHashFinish>', 'final transaction hash of the factory deployment', stringToHash)
363
+ .option('--etherscanApiKey [etherscanApiKey]', 'Etherscan API Key, can also be set in .env file as ETHERSCAN_API_KEY', envs?.ETHERSCAN_API_KEY)
364
+ .action(async (txHashStart, txHashFinish, options) => {
365
+ const { etherscanApiKey } = options;
366
+ if (!etherscanApiKey) {
367
+ throw new Error('Etherscan API key is required for contract verification. Please provide it in .env or via --etherscanApiKey option.');
368
+ }
369
+ const publicClient = await getPublicClient();
370
+ const receiptStart = await publicClient.getTransactionReceipt({
371
+ hash: txHashStart,
372
+ });
373
+ const deployDataStart = await getCreatePoolEventData(receiptStart, txHashStart);
374
+ const receiptFinish = await publicClient.getTransactionReceipt({
375
+ hash: txHashFinish,
376
+ });
377
+ const deployDataFinish = await getFinalizePoolEventData(receiptFinish, txHashFinish);
378
+ if (!deployDataStart.intermediate) {
379
+ throw new Error('Invalid start transaction hash or the transaction does not contain expected events');
380
+ }
381
+ if (!deployDataFinish.vault) {
382
+ throw new Error('Invalid finish transaction hash or the transaction does not contain expected events');
383
+ }
384
+ const strategy = deployDataFinish.strategy &&
385
+ !isAddressEqual(deployDataFinish.strategy, zeroAddress)
386
+ ? await getGenericStrategyContract(deployDataFinish.strategy)
387
+ : null;
388
+ const strategyImpl = strategy
389
+ ? await (await getOssifiableProxyContract(strategy.address)).read.proxy__getImplementation()
390
+ : null;
391
+ const pool = await getStvPoolContract(deployDataStart.intermediate.poolProxy);
392
+ const poolType = await pool.read.poolType();
393
+ const strategyType = strategy ? await strategy.read.STRATEGY_ID() : null;
394
+ await verifyDefiWrapperDeployment({
395
+ etherscanApiKey,
396
+ poolProxy: deployDataStart.intermediate.poolProxy,
397
+ poolImpl: deployDataStart.intermediate.poolImpl,
398
+ poolType,
399
+ withdrawalQueue: deployDataStart.intermediate.withdrawalQueueProxy,
400
+ withdrawalQueueImpl: deployDataStart.intermediate.wqImpl,
401
+ timelock: deployDataStart.intermediate.timelock,
402
+ strategyProxy: strategy ? strategy.address : null,
403
+ strategyImpl: strategyImpl,
404
+ strategyType,
405
+ });
406
+ });
336
407
  //# sourceMappingURL=write.js.map