create-microact-app 1.0.1 → 1.0.2

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 (264) hide show
  1. package/package.json +1 -1
  2. package/templates/vanilla/package.json +1 -1
  3. package/templates/vanilla/src/components/App.js +22 -35
  4. package/templates/vanilla/src/components/Card.js +5 -12
  5. package/templates/vanilla/src/components/Hero.js +6 -8
  6. package/templates/vanilla/src/components/InteractiveDemo.js +34 -32
  7. package/templates/vanilla/src/main.js +2 -6
  8. package/templates/web3/contracts/.gitmodules +3 -0
  9. package/templates/web3/contracts/foundry.lock +8 -0
  10. package/templates/web3/contracts/lib/forge-std/.gitattributes +1 -0
  11. package/templates/web3/contracts/lib/forge-std/.github/CODEOWNERS +1 -0
  12. package/templates/web3/contracts/lib/forge-std/.github/dependabot.yml +6 -0
  13. package/templates/web3/contracts/lib/forge-std/.github/workflows/ci.yml +125 -0
  14. package/templates/web3/contracts/lib/forge-std/.github/workflows/sync.yml +36 -0
  15. package/templates/web3/contracts/lib/forge-std/CONTRIBUTING.md +193 -0
  16. package/templates/web3/contracts/lib/forge-std/LICENSE-APACHE +203 -0
  17. package/templates/web3/contracts/lib/forge-std/LICENSE-MIT +25 -0
  18. package/templates/web3/contracts/lib/forge-std/README.md +268 -0
  19. package/templates/web3/contracts/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
  20. package/templates/web3/contracts/lib/forge-std/foundry.toml +18 -0
  21. package/templates/web3/contracts/lib/forge-std/package.json +16 -0
  22. package/templates/web3/contracts/lib/forge-std/scripts/vm.py +636 -0
  23. package/templates/web3/contracts/lib/forge-std/src/Base.sol +48 -0
  24. package/templates/web3/contracts/lib/forge-std/src/Config.sol +60 -0
  25. package/templates/web3/contracts/lib/forge-std/src/LibVariable.sol +477 -0
  26. package/templates/web3/contracts/lib/forge-std/src/Script.sol +28 -0
  27. package/templates/web3/contracts/lib/forge-std/src/StdAssertions.sol +779 -0
  28. package/templates/web3/contracts/lib/forge-std/src/StdChains.sol +295 -0
  29. package/templates/web3/contracts/lib/forge-std/src/StdCheats.sol +825 -0
  30. package/templates/web3/contracts/lib/forge-std/src/StdConfig.sol +632 -0
  31. package/templates/web3/contracts/lib/forge-std/src/StdConstants.sol +30 -0
  32. package/templates/web3/contracts/lib/forge-std/src/StdError.sol +15 -0
  33. package/templates/web3/contracts/lib/forge-std/src/StdInvariant.sol +120 -0
  34. package/templates/web3/contracts/lib/forge-std/src/StdJson.sol +275 -0
  35. package/templates/web3/contracts/lib/forge-std/src/StdMath.sol +47 -0
  36. package/templates/web3/contracts/lib/forge-std/src/StdStorage.sol +475 -0
  37. package/templates/web3/contracts/lib/forge-std/src/StdStyle.sol +333 -0
  38. package/templates/web3/contracts/lib/forge-std/src/StdToml.sol +275 -0
  39. package/templates/web3/contracts/lib/forge-std/src/StdUtils.sol +200 -0
  40. package/templates/web3/contracts/lib/forge-std/src/Test.sol +32 -0
  41. package/templates/web3/contracts/lib/forge-std/src/Vm.sol +2500 -0
  42. package/templates/web3/contracts/lib/forge-std/src/console.sol +1551 -0
  43. package/templates/web3/contracts/lib/forge-std/src/console2.sol +4 -0
  44. package/templates/web3/contracts/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  45. package/templates/web3/contracts/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  46. package/templates/web3/contracts/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  47. package/templates/web3/contracts/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  48. package/templates/web3/contracts/lib/forge-std/src/interfaces/IERC6909.sol +72 -0
  49. package/templates/web3/contracts/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  50. package/templates/web3/contracts/lib/forge-std/src/interfaces/IERC7540.sol +144 -0
  51. package/templates/web3/contracts/lib/forge-std/src/interfaces/IERC7575.sol +241 -0
  52. package/templates/web3/contracts/lib/forge-std/src/interfaces/IMulticall3.sol +68 -0
  53. package/templates/web3/contracts/lib/forge-std/src/safeconsole.sol +13248 -0
  54. package/templates/web3/contracts/lib/forge-std/test/CommonBase.t.sol +44 -0
  55. package/templates/web3/contracts/lib/forge-std/test/Config.t.sol +381 -0
  56. package/templates/web3/contracts/lib/forge-std/test/LibVariable.t.sol +452 -0
  57. package/templates/web3/contracts/lib/forge-std/test/StdAssertions.t.sol +141 -0
  58. package/templates/web3/contracts/lib/forge-std/test/StdChains.t.sol +227 -0
  59. package/templates/web3/contracts/lib/forge-std/test/StdCheats.t.sol +638 -0
  60. package/templates/web3/contracts/lib/forge-std/test/StdConstants.t.sol +38 -0
  61. package/templates/web3/contracts/lib/forge-std/test/StdError.t.sol +119 -0
  62. package/templates/web3/contracts/lib/forge-std/test/StdJson.t.sol +49 -0
  63. package/templates/web3/contracts/lib/forge-std/test/StdMath.t.sol +202 -0
  64. package/templates/web3/contracts/lib/forge-std/test/StdStorage.t.sol +485 -0
  65. package/templates/web3/contracts/lib/forge-std/test/StdStyle.t.sol +110 -0
  66. package/templates/web3/contracts/lib/forge-std/test/StdToml.t.sol +49 -0
  67. package/templates/web3/contracts/lib/forge-std/test/StdUtils.t.sol +342 -0
  68. package/templates/web3/contracts/lib/forge-std/test/Vm.t.sol +18 -0
  69. package/templates/web3/contracts/lib/forge-std/test/compilation/CompilationScript.sol +8 -0
  70. package/templates/web3/contracts/lib/forge-std/test/compilation/CompilationScriptBase.sol +8 -0
  71. package/templates/web3/contracts/lib/forge-std/test/compilation/CompilationTest.sol +8 -0
  72. package/templates/web3/contracts/lib/forge-std/test/compilation/CompilationTestBase.sol +8 -0
  73. package/templates/web3/contracts/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  74. package/templates/web3/contracts/lib/forge-std/test/fixtures/config.toml +81 -0
  75. package/templates/web3/contracts/lib/forge-std/test/fixtures/test.json +8 -0
  76. package/templates/web3/contracts/lib/forge-std/test/fixtures/test.toml +6 -0
  77. package/templates/web3/package.json +1 -1
  78. package/templates/web3/src/components/App.js +23 -36
  79. package/templates/web3/src/components/CounterCard.js +45 -45
  80. package/templates/web3/src/main.js +5 -7
  81. package/templates/vanilla/node_modules/.package-lock.json +0 -207
  82. package/templates/vanilla/node_modules/@esbuild/darwin-x64/README.md +0 -3
  83. package/templates/vanilla/node_modules/@esbuild/darwin-x64/bin/esbuild +0 -0
  84. package/templates/vanilla/node_modules/@esbuild/darwin-x64/package.json +0 -17
  85. package/templates/vanilla/node_modules/@monygroupcorp/microact/README.md +0 -154
  86. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.cjs.js +0 -1749
  87. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.cjs.js.map +0 -1
  88. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.esm.js +0 -1743
  89. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.esm.js.map +0 -1
  90. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.umd.js +0 -2
  91. package/templates/vanilla/node_modules/@monygroupcorp/microact/dist/microact.umd.js.map +0 -1
  92. package/templates/vanilla/node_modules/@monygroupcorp/microact/example/index.html +0 -13
  93. package/templates/vanilla/node_modules/@monygroupcorp/microact/example/index.js +0 -63
  94. package/templates/vanilla/node_modules/@monygroupcorp/microact/package.json +0 -38
  95. package/templates/vanilla/node_modules/@monygroupcorp/microact/rollup.config.cjs +0 -30
  96. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/Component.js +0 -831
  97. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/DOMUpdater.js +0 -320
  98. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/EventBus.js +0 -123
  99. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/Router.js +0 -253
  100. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/UpdateScheduler.js +0 -218
  101. package/templates/vanilla/node_modules/@monygroupcorp/microact/src/index.js +0 -6
  102. package/templates/vanilla/node_modules/esbuild/LICENSE.md +0 -21
  103. package/templates/vanilla/node_modules/esbuild/README.md +0 -3
  104. package/templates/vanilla/node_modules/esbuild/bin/esbuild +0 -0
  105. package/templates/vanilla/node_modules/esbuild/install.js +0 -287
  106. package/templates/vanilla/node_modules/esbuild/lib/main.d.ts +0 -660
  107. package/templates/vanilla/node_modules/esbuild/lib/main.js +0 -2393
  108. package/templates/vanilla/node_modules/esbuild/package.json +0 -42
  109. package/templates/vanilla/node_modules/nanoid/LICENSE +0 -20
  110. package/templates/vanilla/node_modules/nanoid/README.md +0 -39
  111. package/templates/vanilla/node_modules/nanoid/async/index.browser.cjs +0 -69
  112. package/templates/vanilla/node_modules/nanoid/async/index.browser.js +0 -34
  113. package/templates/vanilla/node_modules/nanoid/async/index.cjs +0 -71
  114. package/templates/vanilla/node_modules/nanoid/async/index.d.ts +0 -56
  115. package/templates/vanilla/node_modules/nanoid/async/index.js +0 -35
  116. package/templates/vanilla/node_modules/nanoid/async/index.native.js +0 -26
  117. package/templates/vanilla/node_modules/nanoid/async/package.json +0 -12
  118. package/templates/vanilla/node_modules/nanoid/bin/nanoid.cjs +0 -55
  119. package/templates/vanilla/node_modules/nanoid/index.browser.cjs +0 -72
  120. package/templates/vanilla/node_modules/nanoid/index.browser.js +0 -34
  121. package/templates/vanilla/node_modules/nanoid/index.cjs +0 -85
  122. package/templates/vanilla/node_modules/nanoid/index.d.cts +0 -91
  123. package/templates/vanilla/node_modules/nanoid/index.d.ts +0 -91
  124. package/templates/vanilla/node_modules/nanoid/index.js +0 -45
  125. package/templates/vanilla/node_modules/nanoid/nanoid.js +0 -1
  126. package/templates/vanilla/node_modules/nanoid/non-secure/index.cjs +0 -34
  127. package/templates/vanilla/node_modules/nanoid/non-secure/index.d.ts +0 -33
  128. package/templates/vanilla/node_modules/nanoid/non-secure/index.js +0 -21
  129. package/templates/vanilla/node_modules/nanoid/non-secure/package.json +0 -6
  130. package/templates/vanilla/node_modules/nanoid/package.json +0 -89
  131. package/templates/vanilla/node_modules/nanoid/url-alphabet/index.cjs +0 -7
  132. package/templates/vanilla/node_modules/nanoid/url-alphabet/index.js +0 -3
  133. package/templates/vanilla/node_modules/nanoid/url-alphabet/package.json +0 -6
  134. package/templates/vanilla/node_modules/picocolors/LICENSE +0 -15
  135. package/templates/vanilla/node_modules/picocolors/README.md +0 -21
  136. package/templates/vanilla/node_modules/picocolors/package.json +0 -25
  137. package/templates/vanilla/node_modules/picocolors/picocolors.browser.js +0 -4
  138. package/templates/vanilla/node_modules/picocolors/picocolors.d.ts +0 -5
  139. package/templates/vanilla/node_modules/picocolors/picocolors.js +0 -75
  140. package/templates/vanilla/node_modules/picocolors/types.d.ts +0 -51
  141. package/templates/vanilla/node_modules/postcss/LICENSE +0 -20
  142. package/templates/vanilla/node_modules/postcss/README.md +0 -29
  143. package/templates/vanilla/node_modules/postcss/lib/at-rule.d.ts +0 -140
  144. package/templates/vanilla/node_modules/postcss/lib/at-rule.js +0 -25
  145. package/templates/vanilla/node_modules/postcss/lib/comment.d.ts +0 -68
  146. package/templates/vanilla/node_modules/postcss/lib/comment.js +0 -13
  147. package/templates/vanilla/node_modules/postcss/lib/container.d.ts +0 -483
  148. package/templates/vanilla/node_modules/postcss/lib/container.js +0 -447
  149. package/templates/vanilla/node_modules/postcss/lib/css-syntax-error.d.ts +0 -248
  150. package/templates/vanilla/node_modules/postcss/lib/css-syntax-error.js +0 -133
  151. package/templates/vanilla/node_modules/postcss/lib/declaration.d.ts +0 -151
  152. package/templates/vanilla/node_modules/postcss/lib/declaration.js +0 -24
  153. package/templates/vanilla/node_modules/postcss/lib/document.d.ts +0 -69
  154. package/templates/vanilla/node_modules/postcss/lib/document.js +0 -33
  155. package/templates/vanilla/node_modules/postcss/lib/fromJSON.d.ts +0 -9
  156. package/templates/vanilla/node_modules/postcss/lib/fromJSON.js +0 -54
  157. package/templates/vanilla/node_modules/postcss/lib/input.d.ts +0 -227
  158. package/templates/vanilla/node_modules/postcss/lib/input.js +0 -265
  159. package/templates/vanilla/node_modules/postcss/lib/lazy-result.d.ts +0 -190
  160. package/templates/vanilla/node_modules/postcss/lib/lazy-result.js +0 -550
  161. package/templates/vanilla/node_modules/postcss/lib/list.d.ts +0 -60
  162. package/templates/vanilla/node_modules/postcss/lib/list.js +0 -58
  163. package/templates/vanilla/node_modules/postcss/lib/map-generator.js +0 -368
  164. package/templates/vanilla/node_modules/postcss/lib/no-work-result.d.ts +0 -46
  165. package/templates/vanilla/node_modules/postcss/lib/no-work-result.js +0 -138
  166. package/templates/vanilla/node_modules/postcss/lib/node.d.ts +0 -556
  167. package/templates/vanilla/node_modules/postcss/lib/node.js +0 -449
  168. package/templates/vanilla/node_modules/postcss/lib/parse.d.ts +0 -9
  169. package/templates/vanilla/node_modules/postcss/lib/parse.js +0 -42
  170. package/templates/vanilla/node_modules/postcss/lib/parser.js +0 -611
  171. package/templates/vanilla/node_modules/postcss/lib/postcss.d.mts +0 -69
  172. package/templates/vanilla/node_modules/postcss/lib/postcss.d.ts +0 -458
  173. package/templates/vanilla/node_modules/postcss/lib/postcss.js +0 -101
  174. package/templates/vanilla/node_modules/postcss/lib/postcss.mjs +0 -30
  175. package/templates/vanilla/node_modules/postcss/lib/previous-map.d.ts +0 -81
  176. package/templates/vanilla/node_modules/postcss/lib/previous-map.js +0 -144
  177. package/templates/vanilla/node_modules/postcss/lib/processor.d.ts +0 -115
  178. package/templates/vanilla/node_modules/postcss/lib/processor.js +0 -67
  179. package/templates/vanilla/node_modules/postcss/lib/result.d.ts +0 -205
  180. package/templates/vanilla/node_modules/postcss/lib/result.js +0 -42
  181. package/templates/vanilla/node_modules/postcss/lib/root.d.ts +0 -87
  182. package/templates/vanilla/node_modules/postcss/lib/root.js +0 -61
  183. package/templates/vanilla/node_modules/postcss/lib/rule.d.ts +0 -126
  184. package/templates/vanilla/node_modules/postcss/lib/rule.js +0 -27
  185. package/templates/vanilla/node_modules/postcss/lib/stringifier.d.ts +0 -46
  186. package/templates/vanilla/node_modules/postcss/lib/stringifier.js +0 -353
  187. package/templates/vanilla/node_modules/postcss/lib/stringify.d.ts +0 -9
  188. package/templates/vanilla/node_modules/postcss/lib/stringify.js +0 -11
  189. package/templates/vanilla/node_modules/postcss/lib/symbols.js +0 -5
  190. package/templates/vanilla/node_modules/postcss/lib/terminal-highlight.js +0 -70
  191. package/templates/vanilla/node_modules/postcss/lib/tokenize.js +0 -266
  192. package/templates/vanilla/node_modules/postcss/lib/warn-once.js +0 -13
  193. package/templates/vanilla/node_modules/postcss/lib/warning.d.ts +0 -147
  194. package/templates/vanilla/node_modules/postcss/lib/warning.js +0 -37
  195. package/templates/vanilla/node_modules/postcss/package.json +0 -88
  196. package/templates/vanilla/node_modules/rollup/LICENSE.md +0 -695
  197. package/templates/vanilla/node_modules/rollup/README.md +0 -125
  198. package/templates/vanilla/node_modules/rollup/dist/bin/rollup +0 -1715
  199. package/templates/vanilla/node_modules/rollup/dist/es/getLogFilter.js +0 -64
  200. package/templates/vanilla/node_modules/rollup/dist/es/package.json +0 -1
  201. package/templates/vanilla/node_modules/rollup/dist/es/rollup.js +0 -17
  202. package/templates/vanilla/node_modules/rollup/dist/es/shared/node-entry.js +0 -27273
  203. package/templates/vanilla/node_modules/rollup/dist/es/shared/watch.js +0 -4857
  204. package/templates/vanilla/node_modules/rollup/dist/getLogFilter.d.ts +0 -5
  205. package/templates/vanilla/node_modules/rollup/dist/getLogFilter.js +0 -69
  206. package/templates/vanilla/node_modules/rollup/dist/loadConfigFile.d.ts +0 -20
  207. package/templates/vanilla/node_modules/rollup/dist/loadConfigFile.js +0 -29
  208. package/templates/vanilla/node_modules/rollup/dist/rollup.d.ts +0 -1012
  209. package/templates/vanilla/node_modules/rollup/dist/rollup.js +0 -31
  210. package/templates/vanilla/node_modules/rollup/dist/shared/fsevents-importer.js +0 -37
  211. package/templates/vanilla/node_modules/rollup/dist/shared/index.js +0 -4571
  212. package/templates/vanilla/node_modules/rollup/dist/shared/loadConfigFile.js +0 -546
  213. package/templates/vanilla/node_modules/rollup/dist/shared/rollup.js +0 -27351
  214. package/templates/vanilla/node_modules/rollup/dist/shared/watch-cli.js +0 -561
  215. package/templates/vanilla/node_modules/rollup/dist/shared/watch-proxy.js +0 -87
  216. package/templates/vanilla/node_modules/rollup/dist/shared/watch.js +0 -316
  217. package/templates/vanilla/node_modules/rollup/package.json +0 -181
  218. package/templates/vanilla/node_modules/source-map-js/LICENSE +0 -28
  219. package/templates/vanilla/node_modules/source-map-js/README.md +0 -765
  220. package/templates/vanilla/node_modules/source-map-js/lib/array-set.js +0 -121
  221. package/templates/vanilla/node_modules/source-map-js/lib/base64-vlq.js +0 -140
  222. package/templates/vanilla/node_modules/source-map-js/lib/base64.js +0 -67
  223. package/templates/vanilla/node_modules/source-map-js/lib/binary-search.js +0 -111
  224. package/templates/vanilla/node_modules/source-map-js/lib/mapping-list.js +0 -79
  225. package/templates/vanilla/node_modules/source-map-js/lib/quick-sort.js +0 -132
  226. package/templates/vanilla/node_modules/source-map-js/lib/source-map-consumer.d.ts +0 -1
  227. package/templates/vanilla/node_modules/source-map-js/lib/source-map-consumer.js +0 -1188
  228. package/templates/vanilla/node_modules/source-map-js/lib/source-map-generator.d.ts +0 -1
  229. package/templates/vanilla/node_modules/source-map-js/lib/source-map-generator.js +0 -444
  230. package/templates/vanilla/node_modules/source-map-js/lib/source-node.d.ts +0 -1
  231. package/templates/vanilla/node_modules/source-map-js/lib/source-node.js +0 -413
  232. package/templates/vanilla/node_modules/source-map-js/lib/util.js +0 -594
  233. package/templates/vanilla/node_modules/source-map-js/package.json +0 -71
  234. package/templates/vanilla/node_modules/source-map-js/source-map.d.ts +0 -104
  235. package/templates/vanilla/node_modules/source-map-js/source-map.js +0 -8
  236. package/templates/vanilla/node_modules/vite/LICENSE.md +0 -3396
  237. package/templates/vanilla/node_modules/vite/README.md +0 -20
  238. package/templates/vanilla/node_modules/vite/bin/openChrome.applescript +0 -95
  239. package/templates/vanilla/node_modules/vite/bin/vite.js +0 -61
  240. package/templates/vanilla/node_modules/vite/client.d.ts +0 -281
  241. package/templates/vanilla/node_modules/vite/dist/client/client.mjs +0 -725
  242. package/templates/vanilla/node_modules/vite/dist/client/client.mjs.map +0 -1
  243. package/templates/vanilla/node_modules/vite/dist/client/env.mjs +0 -30
  244. package/templates/vanilla/node_modules/vite/dist/client/env.mjs.map +0 -1
  245. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-7ec6f216.js +0 -914
  246. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-827b23df.js +0 -66713
  247. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-c423598f.js +0 -561
  248. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-f0c7dae0.js +0 -7930
  249. package/templates/vanilla/node_modules/vite/dist/node/chunks/dep-f1e8587f.js +0 -7646
  250. package/templates/vanilla/node_modules/vite/dist/node/cli.js +0 -929
  251. package/templates/vanilla/node_modules/vite/dist/node/constants.js +0 -130
  252. package/templates/vanilla/node_modules/vite/dist/node/index.d.ts +0 -3548
  253. package/templates/vanilla/node_modules/vite/dist/node/index.js +0 -158
  254. package/templates/vanilla/node_modules/vite/dist/node-cjs/publicUtils.cjs +0 -4555
  255. package/templates/vanilla/node_modules/vite/index.cjs +0 -34
  256. package/templates/vanilla/node_modules/vite/package.json +0 -173
  257. package/templates/vanilla/node_modules/vite/types/customEvent.d.ts +0 -35
  258. package/templates/vanilla/node_modules/vite/types/hmrPayload.d.ts +0 -61
  259. package/templates/vanilla/node_modules/vite/types/hot.d.ts +0 -32
  260. package/templates/vanilla/node_modules/vite/types/importGlob.d.ts +0 -97
  261. package/templates/vanilla/node_modules/vite/types/importMeta.d.ts +0 -26
  262. package/templates/vanilla/node_modules/vite/types/metadata.d.ts +0 -10
  263. package/templates/vanilla/node_modules/vite/types/package.json +0 -4
  264. package/templates/vanilla/package-lock.json +0 -589
@@ -0,0 +1,342 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ import {Test, StdUtils} from "../src/Test.sol";
5
+
6
+ contract StdUtilsMock is StdUtils {
7
+ // We deploy a mock version so we can properly test expected reverts.
8
+ function exposedGetTokenBalances(address token, address[] memory addresses)
9
+ external
10
+ returns (uint256[] memory balances)
11
+ {
12
+ return getTokenBalances(token, addresses);
13
+ }
14
+
15
+ function exposedBound(int256 num, int256 min, int256 max) external pure returns (int256) {
16
+ return bound(num, min, max);
17
+ }
18
+
19
+ function exposedBound(uint256 num, uint256 min, uint256 max) external pure returns (uint256) {
20
+ return bound(num, min, max);
21
+ }
22
+
23
+ function exposedBytesToUint(bytes memory b) external pure returns (uint256) {
24
+ return bytesToUint(b);
25
+ }
26
+ }
27
+
28
+ contract StdUtilsTest is Test {
29
+ /*//////////////////////////////////////////////////////////////////////////
30
+ BOUND UINT
31
+ //////////////////////////////////////////////////////////////////////////*/
32
+
33
+ function test_Bound() public pure {
34
+ assertEq(bound(uint256(5), 0, 4), 0);
35
+ assertEq(bound(uint256(0), 69, 69), 69);
36
+ assertEq(bound(uint256(0), 68, 69), 68);
37
+ assertEq(bound(uint256(10), 150, 190), 174);
38
+ assertEq(bound(uint256(300), 2800, 3200), 3107);
39
+ assertEq(bound(uint256(9999), 1337, 6666), 4669);
40
+ }
41
+
42
+ function test_Bound_WithinRange() public pure {
43
+ assertEq(bound(uint256(51), 50, 150), 51);
44
+ assertEq(bound(uint256(51), 50, 150), bound(bound(uint256(51), 50, 150), 50, 150));
45
+ assertEq(bound(uint256(149), 50, 150), 149);
46
+ assertEq(bound(uint256(149), 50, 150), bound(bound(uint256(149), 50, 150), 50, 150));
47
+ }
48
+
49
+ function test_Bound_EdgeCoverage() public pure {
50
+ assertEq(bound(uint256(0), 50, 150), 50);
51
+ assertEq(bound(uint256(1), 50, 150), 51);
52
+ assertEq(bound(uint256(2), 50, 150), 52);
53
+ assertEq(bound(uint256(3), 50, 150), 53);
54
+ assertEq(bound(type(uint256).max, 50, 150), 150);
55
+ assertEq(bound(type(uint256).max - 1, 50, 150), 149);
56
+ assertEq(bound(type(uint256).max - 2, 50, 150), 148);
57
+ assertEq(bound(type(uint256).max - 3, 50, 150), 147);
58
+ }
59
+
60
+ function testFuzz_Bound_DistributionIsEven(uint256 min, uint256 size) public pure {
61
+ size = size % 100 + 1;
62
+ min = bound(min, UINT256_MAX / 2, UINT256_MAX / 2 + size);
63
+ uint256 max = min + size - 1;
64
+ uint256 result;
65
+
66
+ for (uint256 i = 1; i <= size * 4; ++i) {
67
+ // x > max
68
+ result = bound(max + i, min, max);
69
+ assertEq(result, min + (i - 1) % size);
70
+ // x < min
71
+ result = bound(min - i, min, max);
72
+ assertEq(result, max - (i - 1) % size);
73
+ }
74
+ }
75
+
76
+ function testFuzz_Bound(uint256 num, uint256 min, uint256 max) public pure {
77
+ if (min > max) (min, max) = (max, min);
78
+
79
+ uint256 result = bound(num, min, max);
80
+
81
+ assertGe(result, min);
82
+ assertLe(result, max);
83
+ assertEq(result, bound(result, min, max));
84
+ if (num >= min && num <= max) assertEq(result, num);
85
+ }
86
+
87
+ function test_BoundUint256Max() public pure {
88
+ assertEq(bound(0, type(uint256).max - 1, type(uint256).max), type(uint256).max - 1);
89
+ assertEq(bound(1, type(uint256).max - 1, type(uint256).max), type(uint256).max);
90
+ }
91
+
92
+ function test_RevertIf_BoundMaxLessThanMin() public {
93
+ // We deploy a mock version so we can properly test the revert.
94
+ StdUtilsMock stdUtils = new StdUtilsMock();
95
+
96
+ vm.expectRevert(bytes("StdUtils bound(uint256,uint256,uint256): Max is less than min."));
97
+ stdUtils.exposedBound(uint256(5), 100, 10);
98
+ }
99
+
100
+ function testFuzz_RevertIf_BoundMaxLessThanMin(uint256 num, uint256 min, uint256 max) public {
101
+ // We deploy a mock version so we can properly test the revert.
102
+ StdUtilsMock stdUtils = new StdUtilsMock();
103
+
104
+ vm.assume(min > max);
105
+ vm.expectRevert(bytes("StdUtils bound(uint256,uint256,uint256): Max is less than min."));
106
+ stdUtils.exposedBound(num, min, max);
107
+ }
108
+
109
+ /*//////////////////////////////////////////////////////////////////////////
110
+ BOUND INT
111
+ //////////////////////////////////////////////////////////////////////////*/
112
+
113
+ function test_BoundInt() public pure {
114
+ assertEq(bound(-3, 0, 4), 2);
115
+ assertEq(bound(0, -69, -69), -69);
116
+ assertEq(bound(0, -69, -68), -68);
117
+ assertEq(bound(-10, 150, 190), 154);
118
+ assertEq(bound(-300, 2800, 3200), 2908);
119
+ assertEq(bound(9999, -1337, 6666), 1995);
120
+ }
121
+
122
+ function test_BoundInt_WithinRange() public pure {
123
+ assertEq(bound(51, -50, 150), 51);
124
+ assertEq(bound(51, -50, 150), bound(bound(51, -50, 150), -50, 150));
125
+ assertEq(bound(149, -50, 150), 149);
126
+ assertEq(bound(149, -50, 150), bound(bound(149, -50, 150), -50, 150));
127
+ }
128
+
129
+ function test_BoundInt_EdgeCoverage() public pure {
130
+ assertEq(bound(type(int256).min, -50, 150), -50);
131
+ assertEq(bound(type(int256).min + 1, -50, 150), -49);
132
+ assertEq(bound(type(int256).min + 2, -50, 150), -48);
133
+ assertEq(bound(type(int256).min + 3, -50, 150), -47);
134
+ assertEq(bound(type(int256).min, 10, 150), 10);
135
+ assertEq(bound(type(int256).min + 1, 10, 150), 11);
136
+ assertEq(bound(type(int256).min + 2, 10, 150), 12);
137
+ assertEq(bound(type(int256).min + 3, 10, 150), 13);
138
+
139
+ assertEq(bound(type(int256).max, -50, 150), 150);
140
+ assertEq(bound(type(int256).max - 1, -50, 150), 149);
141
+ assertEq(bound(type(int256).max - 2, -50, 150), 148);
142
+ assertEq(bound(type(int256).max - 3, -50, 150), 147);
143
+ assertEq(bound(type(int256).max, -50, -10), -10);
144
+ assertEq(bound(type(int256).max - 1, -50, -10), -11);
145
+ assertEq(bound(type(int256).max - 2, -50, -10), -12);
146
+ assertEq(bound(type(int256).max - 3, -50, -10), -13);
147
+ }
148
+
149
+ function testFuzz_BoundInt_DistributionIsEven(int256 min, uint256 size) public pure {
150
+ size = size % 100 + 1;
151
+ min = bound(min, -int256(size / 2), int256(size - size / 2));
152
+ int256 max = min + int256(size) - 1;
153
+ int256 result;
154
+
155
+ for (uint256 i = 1; i <= size * 4; ++i) {
156
+ // x > max
157
+ result = bound(max + int256(i), min, max);
158
+ assertEq(result, min + int256((i - 1) % size));
159
+ // x < min
160
+ result = bound(min - int256(i), min, max);
161
+ assertEq(result, max - int256((i - 1) % size));
162
+ }
163
+ }
164
+
165
+ function testFuzz_BoundInt(int256 num, int256 min, int256 max) public pure {
166
+ if (min > max) (min, max) = (max, min);
167
+
168
+ int256 result = bound(num, min, max);
169
+
170
+ assertGe(result, min);
171
+ assertLe(result, max);
172
+ assertEq(result, bound(result, min, max));
173
+ if (num >= min && num <= max) assertEq(result, num);
174
+ }
175
+
176
+ function test_BoundIntInt256Max() public pure {
177
+ assertEq(bound(0, type(int256).max - 1, type(int256).max), type(int256).max - 1);
178
+ assertEq(bound(1, type(int256).max - 1, type(int256).max), type(int256).max);
179
+ }
180
+
181
+ function test_BoundIntInt256Min() public pure {
182
+ assertEq(bound(0, type(int256).min, type(int256).min + 1), type(int256).min);
183
+ assertEq(bound(1, type(int256).min, type(int256).min + 1), type(int256).min + 1);
184
+ }
185
+
186
+ function test_RevertIf_BoundIntMaxLessThanMin() public {
187
+ // We deploy a mock version so we can properly test the revert.
188
+ StdUtilsMock stdUtils = new StdUtilsMock();
189
+
190
+ vm.expectRevert(bytes("StdUtils bound(int256,int256,int256): Max is less than min."));
191
+ stdUtils.exposedBound(-5, 100, 10);
192
+ }
193
+
194
+ function testFuzz_RevertIf_BoundIntMaxLessThanMin(int256 num, int256 min, int256 max) public {
195
+ // We deploy a mock version so we can properly test the revert.
196
+ StdUtilsMock stdUtils = new StdUtilsMock();
197
+
198
+ vm.assume(min > max);
199
+ vm.expectRevert(bytes("StdUtils bound(int256,int256,int256): Max is less than min."));
200
+ stdUtils.exposedBound(num, min, max);
201
+ }
202
+
203
+ /*//////////////////////////////////////////////////////////////////////////
204
+ BOUND PRIVATE KEY
205
+ //////////////////////////////////////////////////////////////////////////*/
206
+
207
+ function test_BoundPrivateKey() public pure {
208
+ assertEq(boundPrivateKey(0), 1);
209
+ assertEq(boundPrivateKey(1), 1);
210
+ assertEq(boundPrivateKey(300), 300);
211
+ assertEq(boundPrivateKey(9999), 9999);
212
+ assertEq(boundPrivateKey(SECP256K1_ORDER - 1), SECP256K1_ORDER - 1);
213
+ assertEq(boundPrivateKey(SECP256K1_ORDER), 1);
214
+ assertEq(boundPrivateKey(SECP256K1_ORDER + 1), 2);
215
+ assertEq(boundPrivateKey(UINT256_MAX), UINT256_MAX & SECP256K1_ORDER - 1); // x&y is equivalent to x-x%y
216
+ }
217
+
218
+ /*//////////////////////////////////////////////////////////////////////////
219
+ BYTES TO UINT
220
+ //////////////////////////////////////////////////////////////////////////*/
221
+
222
+ function test_BytesToUint() external pure {
223
+ bytes memory maxUint = hex"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
224
+ bytes memory two = hex"02";
225
+ bytes memory millionEther = hex"d3c21bcecceda1000000";
226
+
227
+ assertEq(bytesToUint(maxUint), type(uint256).max);
228
+ assertEq(bytesToUint(two), 2);
229
+ assertEq(bytesToUint(millionEther), 1_000_000 ether);
230
+ }
231
+
232
+ function test_RevertIf_BytesLengthExceeds32() external {
233
+ // We deploy a mock version so we can properly test the revert.
234
+ StdUtilsMock stdUtils = new StdUtilsMock();
235
+
236
+ bytes memory thirty3Bytes = hex"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
237
+ vm.expectRevert("StdUtils bytesToUint(bytes): Bytes length exceeds 32.");
238
+ stdUtils.exposedBytesToUint(thirty3Bytes);
239
+ }
240
+
241
+ /*//////////////////////////////////////////////////////////////////////////
242
+ COMPUTE CREATE ADDRESS
243
+ //////////////////////////////////////////////////////////////////////////*/
244
+
245
+ function test_ComputeCreateAddress() external pure {
246
+ address deployer = 0x6C9FC64A53c1b71FB3f9Af64d1ae3A4931A5f4E9;
247
+ uint256 nonce = 14;
248
+ address createAddress = computeCreateAddress(deployer, nonce);
249
+ assertEq(createAddress, 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);
250
+ }
251
+
252
+ /*//////////////////////////////////////////////////////////////////////////
253
+ COMPUTE CREATE2 ADDRESS
254
+ //////////////////////////////////////////////////////////////////////////*/
255
+
256
+ function test_ComputeCreate2Address() external pure {
257
+ bytes32 salt = bytes32(uint256(31415));
258
+ bytes32 initcodeHash = keccak256(abi.encode(0x6080));
259
+ address deployer = 0x6C9FC64A53c1b71FB3f9Af64d1ae3A4931A5f4E9;
260
+ address create2Address = computeCreate2Address(salt, initcodeHash, deployer);
261
+ assertEq(create2Address, 0xB147a5d25748fda14b463EB04B111027C290f4d3);
262
+ }
263
+
264
+ function test_ComputeCreate2AddressWithDefaultDeployer() external pure {
265
+ bytes32 salt = 0xc290c670fde54e5ef686f9132cbc8711e76a98f0333a438a92daa442c71403c0;
266
+ bytes32 initcodeHash = hashInitCode(hex"6080", "");
267
+ assertEq(initcodeHash, 0x1a578b7a4b0b5755db6d121b4118d4bc68fe170dca840c59bc922f14175a76b0);
268
+ address create2Address = computeCreate2Address(salt, initcodeHash);
269
+ assertEq(create2Address, 0xc0ffEe2198a06235aAbFffe5Db0CacF1717f5Ac6);
270
+ }
271
+ }
272
+
273
+ contract StdUtilsForkTest is Test {
274
+ /*//////////////////////////////////////////////////////////////////////////
275
+ GET TOKEN BALANCES
276
+ //////////////////////////////////////////////////////////////////////////*/
277
+
278
+ address internal SHIB = 0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE;
279
+ address internal SHIB_HOLDER_0 = 0x855F5981e831D83e6A4b4EBFCAdAa68D92333170;
280
+ address internal SHIB_HOLDER_1 = 0x8F509A90c2e47779cA408Fe00d7A72e359229AdA;
281
+ address internal SHIB_HOLDER_2 = 0x0e3bbc0D04fF62211F71f3e4C45d82ad76224385;
282
+
283
+ address internal USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
284
+ address internal USDC_HOLDER_0 = 0xDa9CE944a37d218c3302F6B82a094844C6ECEb17;
285
+ address internal USDC_HOLDER_1 = 0x3e67F4721E6d1c41a015f645eFa37BEd854fcf52;
286
+
287
+ function setUp() public {
288
+ // All tests of the `getTokenBalances` method are fork tests using live contracts.
289
+ vm.createSelectFork({urlOrAlias: "mainnet", blockNumber: 16_428_900});
290
+ }
291
+
292
+ function test_RevertIf_CannotGetTokenBalances_NonTokenContract() external {
293
+ // We deploy a mock version so we can properly test the revert.
294
+ StdUtilsMock stdUtils = new StdUtilsMock();
295
+
296
+ // The UniswapV2Factory contract has neither a `balanceOf` function nor a fallback function,
297
+ // so the `balanceOf` call should revert.
298
+ address token = address(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
299
+ address[] memory addresses = new address[](1);
300
+ addresses[0] = USDC_HOLDER_0;
301
+
302
+ vm.expectRevert("Multicall3: call failed");
303
+ stdUtils.exposedGetTokenBalances(token, addresses);
304
+ }
305
+
306
+ function test_RevertIf_CannotGetTokenBalances_EOA() external {
307
+ // We deploy a mock version so we can properly test the revert.
308
+ StdUtilsMock stdUtils = new StdUtilsMock();
309
+
310
+ address eoa = vm.addr({privateKey: 1});
311
+ address[] memory addresses = new address[](1);
312
+ addresses[0] = USDC_HOLDER_0;
313
+ vm.expectRevert("StdUtils getTokenBalances(address,address[]): Token address is not a contract.");
314
+ stdUtils.exposedGetTokenBalances(eoa, addresses);
315
+ }
316
+
317
+ function test_GetTokenBalances_Empty() external {
318
+ address[] memory addresses = new address[](0);
319
+ uint256[] memory balances = getTokenBalances(USDC, addresses);
320
+ assertEq(balances.length, 0);
321
+ }
322
+
323
+ function test_GetTokenBalances_USDC() external {
324
+ address[] memory addresses = new address[](2);
325
+ addresses[0] = USDC_HOLDER_0;
326
+ addresses[1] = USDC_HOLDER_1;
327
+ uint256[] memory balances = getTokenBalances(USDC, addresses);
328
+ assertEq(balances[0], 159_000_000_000_000);
329
+ assertEq(balances[1], 131_350_000_000_000);
330
+ }
331
+
332
+ function test_GetTokenBalances_SHIB() external {
333
+ address[] memory addresses = new address[](3);
334
+ addresses[0] = SHIB_HOLDER_0;
335
+ addresses[1] = SHIB_HOLDER_1;
336
+ addresses[2] = SHIB_HOLDER_2;
337
+ uint256[] memory balances = getTokenBalances(SHIB, addresses);
338
+ assertEq(balances[0], 3_323_256_285_484.42e18);
339
+ assertEq(balances[1], 1_271_702_771_149.99999928e18);
340
+ assertEq(balances[2], 606_357_106_247e18);
341
+ }
342
+ }
@@ -0,0 +1,18 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ import {Test} from "../src/Test.sol";
5
+ import {Vm, VmSafe} from "../src/Vm.sol";
6
+
7
+ // These tests ensure that functions are never accidentally removed from a Vm interface, or
8
+ // inadvertently moved between Vm and VmSafe. These tests must be updated each time a function is
9
+ // added to or removed from Vm or VmSafe.
10
+ contract VmTest is Test {
11
+ function test_VmInterfaceId() public pure {
12
+ assertEq(type(Vm).interfaceId, bytes4(0xe835828d), "Vm");
13
+ }
14
+
15
+ function test_VmSafeInterfaceId() public pure {
16
+ assertEq(type(VmSafe).interfaceId, bytes4(0x7f58f7be), "VmSafe");
17
+ }
18
+ }
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ import {Script} from "../../src/Script.sol";
5
+
6
+ // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
7
+ // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
8
+ contract CompilationScript is Script {}
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ import {ScriptBase} from "../../src/Script.sol";
5
+
6
+ // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
7
+ // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
8
+ contract CompilationScriptBase is ScriptBase {}
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ import {Test} from "../../src/Test.sol";
5
+
6
+ // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
7
+ // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
8
+ contract CompilationTest is Test {}
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.13 <0.9.0;
3
+
4
+ import {TestBase} from "../../src/Test.sol";
5
+
6
+ // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
7
+ // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
8
+ contract CompilationTestBase is TestBase {}
@@ -0,0 +1,187 @@
1
+ {
2
+ "transactions": [
3
+ {
4
+ "hash": "0xc6006863c267735a11476b7f15b15bc718e117e2da114a2be815dd651e1a509f",
5
+ "type": "CALL",
6
+ "contractName": "Test",
7
+ "contractAddress": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
8
+ "function": "multiple_arguments(uint256,address,uint256[]):(uint256)",
9
+ "arguments": ["1", "0000000000000000000000000000000000001337", "[3,4]"],
10
+ "tx": {
11
+ "type": "0x02",
12
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
13
+ "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
14
+ "gas": "0x73b9",
15
+ "value": "0x0",
16
+ "data": "0x23e99187000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000013370000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004",
17
+ "nonce": "0x3",
18
+ "accessList": []
19
+ }
20
+ },
21
+ {
22
+ "hash": "0xedf2b38d8d896519a947a1acf720f859bb35c0c5ecb8dd7511995b67b9853298",
23
+ "type": "CALL",
24
+ "contractName": "Test",
25
+ "contractAddress": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
26
+ "function": "inc():(uint256)",
27
+ "arguments": [],
28
+ "tx": {
29
+ "type": "0x02",
30
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
31
+ "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
32
+ "gas": "0xdcb2",
33
+ "value": "0x0",
34
+ "data": "0x371303c0",
35
+ "nonce": "0x4",
36
+ "accessList": []
37
+ }
38
+ },
39
+ {
40
+ "hash": "0xa57e8e3981a6c861442e46c9471bd19cb3e21f9a8a6c63a72e7b5c47c6675a7c",
41
+ "type": "CALL",
42
+ "contractName": "Test",
43
+ "contractAddress": "0x7c6b4bbe207d642d98d5c537142d85209e585087",
44
+ "function": "t(uint256):(uint256)",
45
+ "arguments": ["1"],
46
+ "tx": {
47
+ "type": "0x02",
48
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
49
+ "to": "0x7c6b4bbe207d642d98d5c537142d85209e585087",
50
+ "gas": "0x8599",
51
+ "value": "0x0",
52
+ "data": "0xafe29f710000000000000000000000000000000000000000000000000000000000000001",
53
+ "nonce": "0x5",
54
+ "accessList": []
55
+ }
56
+ }
57
+ ],
58
+ "receipts": [
59
+ {
60
+ "transactionHash": "0x481dc86e40bba90403c76f8e144aa9ff04c1da2164299d0298573835f0991181",
61
+ "transactionIndex": "0x0",
62
+ "blockHash": "0xef0730448490304e5403be0fa8f8ce64f118e9adcca60c07a2ae1ab921d748af",
63
+ "blockNumber": "0x1",
64
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
65
+ "to": null,
66
+ "cumulativeGasUsed": "0x13f3a",
67
+ "gasUsed": "0x13f3a",
68
+ "contractAddress": "0x5fbdb2315678afecb367f032d93f642f64180aa3",
69
+ "logs": [],
70
+ "status": "0x1",
71
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
72
+ "effectiveGasPrice": "0xee6b2800"
73
+ },
74
+ {
75
+ "transactionHash": "0x6a187183545b8a9e7f1790e847139379bf5622baff2cb43acf3f5c79470af782",
76
+ "transactionIndex": "0x0",
77
+ "blockHash": "0xf3acb96a90071640c2a8c067ae4e16aad87e634ea8d8bbbb5b352fba86ba0148",
78
+ "blockNumber": "0x2",
79
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
80
+ "to": null,
81
+ "cumulativeGasUsed": "0x45d80",
82
+ "gasUsed": "0x45d80",
83
+ "contractAddress": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
84
+ "logs": [],
85
+ "status": "0x1",
86
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
87
+ "effectiveGasPrice": "0xee6b2800"
88
+ },
89
+ {
90
+ "transactionHash": "0x064ad173b4867bdef2fb60060bbdaf01735fbf10414541ea857772974e74ea9d",
91
+ "transactionIndex": "0x0",
92
+ "blockHash": "0x8373d02109d3ee06a0225f23da4c161c656ccc48fe0fcee931d325508ae73e58",
93
+ "blockNumber": "0x3",
94
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
95
+ "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c",
96
+ "cumulativeGasUsed": "0x45feb",
97
+ "gasUsed": "0x45feb",
98
+ "contractAddress": null,
99
+ "logs": [],
100
+ "status": "0x1",
101
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
102
+ "effectiveGasPrice": "0xee6b2800"
103
+ },
104
+ {
105
+ "transactionHash": "0xc6006863c267735a11476b7f15b15bc718e117e2da114a2be815dd651e1a509f",
106
+ "transactionIndex": "0x0",
107
+ "blockHash": "0x16712fae5c0e18f75045f84363fb6b4d9a9fe25e660c4ce286833a533c97f629",
108
+ "blockNumber": "0x4",
109
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
110
+ "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
111
+ "cumulativeGasUsed": "0x5905",
112
+ "gasUsed": "0x5905",
113
+ "contractAddress": null,
114
+ "logs": [],
115
+ "status": "0x1",
116
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
117
+ "effectiveGasPrice": "0xee6b2800"
118
+ },
119
+ {
120
+ "transactionHash": "0xedf2b38d8d896519a947a1acf720f859bb35c0c5ecb8dd7511995b67b9853298",
121
+ "transactionIndex": "0x0",
122
+ "blockHash": "0x156b88c3eb9a1244ba00a1834f3f70de735b39e3e59006dd03af4fe7d5480c11",
123
+ "blockNumber": "0x5",
124
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
125
+ "to": "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
126
+ "cumulativeGasUsed": "0xa9c4",
127
+ "gasUsed": "0xa9c4",
128
+ "contractAddress": null,
129
+ "logs": [],
130
+ "status": "0x1",
131
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
132
+ "effectiveGasPrice": "0xee6b2800"
133
+ },
134
+ {
135
+ "transactionHash": "0xa57e8e3981a6c861442e46c9471bd19cb3e21f9a8a6c63a72e7b5c47c6675a7c",
136
+ "transactionIndex": "0x0",
137
+ "blockHash": "0xcf61faca67dbb2c28952b0b8a379e53b1505ae0821e84779679390cb8571cadb",
138
+ "blockNumber": "0x6",
139
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
140
+ "to": "0x7c6b4bbe207d642d98d5c537142d85209e585087",
141
+ "cumulativeGasUsed": "0x66c5",
142
+ "gasUsed": "0x66c5",
143
+ "contractAddress": null,
144
+ "logs": [
145
+ {
146
+ "address": "0x7c6b4bbe207d642d98d5c537142d85209e585087",
147
+ "topics": [
148
+ "0x0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b"
149
+ ],
150
+ "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000046865726500000000000000000000000000000000000000000000000000000000",
151
+ "blockHash": "0xcf61faca67dbb2c28952b0b8a379e53b1505ae0821e84779679390cb8571cadb",
152
+ "blockNumber": "0x6",
153
+ "transactionHash": "0xa57e8e3981a6c861442e46c9471bd19cb3e21f9a8a6c63a72e7b5c47c6675a7c",
154
+ "transactionIndex": "0x1",
155
+ "logIndex": "0x0",
156
+ "transactionLogIndex": "0x0",
157
+ "removed": false
158
+ }
159
+ ],
160
+ "status": "0x1",
161
+ "logsBloom": "0x00000000000800000000000000000010000000000000000000000000000180000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100",
162
+ "effectiveGasPrice": "0xee6b2800"
163
+ },
164
+ {
165
+ "transactionHash": "0x11fbb10230c168ca1e36a7e5c69a6dbcd04fd9e64ede39d10a83e36ee8065c16",
166
+ "transactionIndex": "0x0",
167
+ "blockHash": "0xf1e0ed2eda4e923626ec74621006ed50b3fc27580dc7b4cf68a07ca77420e29c",
168
+ "blockNumber": "0x7",
169
+ "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
170
+ "to": "0x0000000000000000000000000000000000001337",
171
+ "cumulativeGasUsed": "0x5208",
172
+ "gasUsed": "0x5208",
173
+ "contractAddress": null,
174
+ "logs": [],
175
+ "status": "0x1",
176
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
177
+ "effectiveGasPrice": "0xee6b2800"
178
+ }
179
+ ],
180
+ "libraries": [
181
+ "src/Broadcast.t.sol:F:0x5fbdb2315678afecb367f032d93f642f64180aa3"
182
+ ],
183
+ "pending": [],
184
+ "path": "broadcast/Broadcast.t.sol/31337/run-latest.json",
185
+ "returns": {},
186
+ "timestamp": 1655140035
187
+ }