@moltium/world-core 0.1.3 → 0.1.5

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 (953) hide show
  1. package/dist/index.cjs +2195 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +1234 -0
  4. package/dist/index.d.ts +1234 -0
  5. package/dist/index.js +2158 -0
  6. package/dist/index.js.map +1 -0
  7. package/lib/forge-std/.gitattributes +1 -0
  8. package/lib/forge-std/.github/CODEOWNERS +1 -0
  9. package/lib/forge-std/.github/dependabot.yml +6 -0
  10. package/lib/forge-std/.github/workflows/ci.yml +125 -0
  11. package/lib/forge-std/.github/workflows/sync.yml +36 -0
  12. package/lib/forge-std/CONTRIBUTING.md +193 -0
  13. package/lib/forge-std/LICENSE-APACHE +203 -0
  14. package/lib/forge-std/LICENSE-MIT +25 -0
  15. package/lib/forge-std/README.md +268 -0
  16. package/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
  17. package/lib/forge-std/foundry.toml +18 -0
  18. package/lib/forge-std/package.json +16 -0
  19. package/lib/forge-std/scripts/vm.py +636 -0
  20. package/lib/forge-std/src/Base.sol +48 -0
  21. package/lib/forge-std/src/Config.sol +60 -0
  22. package/lib/forge-std/src/LibVariable.sol +477 -0
  23. package/lib/forge-std/src/Script.sol +28 -0
  24. package/lib/forge-std/src/StdAssertions.sol +779 -0
  25. package/lib/forge-std/src/StdChains.sol +295 -0
  26. package/lib/forge-std/src/StdCheats.sol +825 -0
  27. package/lib/forge-std/src/StdConfig.sol +632 -0
  28. package/lib/forge-std/src/StdConstants.sol +30 -0
  29. package/lib/forge-std/src/StdError.sol +15 -0
  30. package/lib/forge-std/src/StdInvariant.sol +120 -0
  31. package/lib/forge-std/src/StdJson.sol +275 -0
  32. package/lib/forge-std/src/StdMath.sol +47 -0
  33. package/lib/forge-std/src/StdStorage.sol +475 -0
  34. package/lib/forge-std/src/StdStyle.sol +333 -0
  35. package/lib/forge-std/src/StdToml.sol +275 -0
  36. package/lib/forge-std/src/StdUtils.sol +200 -0
  37. package/lib/forge-std/src/Test.sol +32 -0
  38. package/lib/forge-std/src/Vm.sol +2500 -0
  39. package/lib/forge-std/src/console.sol +1551 -0
  40. package/lib/forge-std/src/console2.sol +4 -0
  41. package/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  42. package/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  43. package/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  44. package/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  45. package/lib/forge-std/src/interfaces/IERC6909.sol +72 -0
  46. package/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  47. package/lib/forge-std/src/interfaces/IERC7540.sol +144 -0
  48. package/lib/forge-std/src/interfaces/IERC7575.sol +241 -0
  49. package/lib/forge-std/src/interfaces/IMulticall3.sol +68 -0
  50. package/lib/forge-std/src/safeconsole.sol +13248 -0
  51. package/lib/forge-std/test/CommonBase.t.sol +44 -0
  52. package/lib/forge-std/test/Config.t.sol +381 -0
  53. package/lib/forge-std/test/LibVariable.t.sol +452 -0
  54. package/lib/forge-std/test/StdAssertions.t.sol +141 -0
  55. package/lib/forge-std/test/StdChains.t.sol +227 -0
  56. package/lib/forge-std/test/StdCheats.t.sol +638 -0
  57. package/lib/forge-std/test/StdConstants.t.sol +38 -0
  58. package/lib/forge-std/test/StdError.t.sol +119 -0
  59. package/lib/forge-std/test/StdJson.t.sol +49 -0
  60. package/lib/forge-std/test/StdMath.t.sol +202 -0
  61. package/lib/forge-std/test/StdStorage.t.sol +485 -0
  62. package/lib/forge-std/test/StdStyle.t.sol +110 -0
  63. package/lib/forge-std/test/StdToml.t.sol +49 -0
  64. package/lib/forge-std/test/StdUtils.t.sol +342 -0
  65. package/lib/forge-std/test/Vm.t.sol +18 -0
  66. package/lib/forge-std/test/compilation/CompilationScript.sol +8 -0
  67. package/lib/forge-std/test/compilation/CompilationScriptBase.sol +8 -0
  68. package/lib/forge-std/test/compilation/CompilationTest.sol +8 -0
  69. package/lib/forge-std/test/compilation/CompilationTestBase.sol +8 -0
  70. package/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  71. package/lib/forge-std/test/fixtures/config.toml +81 -0
  72. package/lib/forge-std/test/fixtures/test.json +8 -0
  73. package/lib/forge-std/test/fixtures/test.toml +6 -0
  74. package/lib/openzeppelin-contracts/.changeset/config.json +12 -0
  75. package/lib/openzeppelin-contracts/.codecov.yml +16 -0
  76. package/lib/openzeppelin-contracts/.editorconfig +21 -0
  77. package/lib/openzeppelin-contracts/.gitattributes +3 -0
  78. package/lib/openzeppelin-contracts/.github/CODEOWNERS +10 -0
  79. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
  80. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml +4 -0
  81. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
  82. package/lib/openzeppelin-contracts/.github/PULL_REQUEST_TEMPLATE.md +20 -0
  83. package/lib/openzeppelin-contracts/.github/actions/gas-compare/action.yml +51 -0
  84. package/lib/openzeppelin-contracts/.github/actions/setup/action.yml +22 -0
  85. package/lib/openzeppelin-contracts/.github/actions/storage-layout/action.yml +57 -0
  86. package/lib/openzeppelin-contracts/.github/workflows/actionlint.yml +18 -0
  87. package/lib/openzeppelin-contracts/.github/workflows/changeset.yml +28 -0
  88. package/lib/openzeppelin-contracts/.github/workflows/checks.yml +132 -0
  89. package/lib/openzeppelin-contracts/.github/workflows/docs.yml +19 -0
  90. package/lib/openzeppelin-contracts/.github/workflows/formal-verification.yml +88 -0
  91. package/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +214 -0
  92. package/lib/openzeppelin-contracts/.github/workflows/upgradeable.yml +34 -0
  93. package/lib/openzeppelin-contracts/.gitmodules +10 -0
  94. package/lib/openzeppelin-contracts/.husky/pre-commit +2 -0
  95. package/lib/openzeppelin-contracts/.mocharc.js +4 -0
  96. package/lib/openzeppelin-contracts/.prettierrc +15 -0
  97. package/lib/openzeppelin-contracts/.solcover.js +21 -0
  98. package/lib/openzeppelin-contracts/CHANGELOG.md +1355 -0
  99. package/lib/openzeppelin-contracts/CODE_OF_CONDUCT.md +73 -0
  100. package/lib/openzeppelin-contracts/CONTRIBUTING.md +36 -0
  101. package/lib/openzeppelin-contracts/FUNDING.json +10 -0
  102. package/lib/openzeppelin-contracts/GUIDELINES.md +170 -0
  103. package/lib/openzeppelin-contracts/LICENSE +22 -0
  104. package/lib/openzeppelin-contracts/README.md +106 -0
  105. package/lib/openzeppelin-contracts/RELEASING.md +45 -0
  106. package/lib/openzeppelin-contracts/SECURITY.md +43 -0
  107. package/lib/openzeppelin-contracts/audits/2017-03.md +292 -0
  108. package/lib/openzeppelin-contracts/audits/2018-10.pdf +0 -0
  109. package/lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf +0 -0
  110. package/lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf +0 -0
  111. package/lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf +0 -0
  112. package/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf +0 -0
  113. package/lib/openzeppelin-contracts/audits/2024-10-v5.1.pdf +0 -0
  114. package/lib/openzeppelin-contracts/audits/2024-12-v5.2.pdf +0 -0
  115. package/lib/openzeppelin-contracts/audits/2025-04-v5.3.pdf +0 -0
  116. package/lib/openzeppelin-contracts/audits/2025-07-v5.4.pdf +0 -0
  117. package/lib/openzeppelin-contracts/audits/README.md +21 -0
  118. package/lib/openzeppelin-contracts/certora/Makefile +54 -0
  119. package/lib/openzeppelin-contracts/certora/README.md +60 -0
  120. package/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch +97 -0
  121. package/lib/openzeppelin-contracts/certora/diff/account_extensions_draft-AccountERC7579.sol.patch +25 -0
  122. package/lib/openzeppelin-contracts/certora/diff/token_ERC721_ERC721.sol.patch +11 -0
  123. package/lib/openzeppelin-contracts/certora/harnesses/AccessControlDefaultAdminRulesHarness.sol +46 -0
  124. package/lib/openzeppelin-contracts/certora/harnesses/AccessControlHarness.sol +6 -0
  125. package/lib/openzeppelin-contracts/certora/harnesses/AccessManagedHarness.sol +36 -0
  126. package/lib/openzeppelin-contracts/certora/harnesses/AccessManagerHarness.sol +116 -0
  127. package/lib/openzeppelin-contracts/certora/harnesses/AccountHarness.sol +60 -0
  128. package/lib/openzeppelin-contracts/certora/harnesses/DoubleEndedQueueHarness.sol +58 -0
  129. package/lib/openzeppelin-contracts/certora/harnesses/ERC20FlashMintHarness.sol +36 -0
  130. package/lib/openzeppelin-contracts/certora/harnesses/ERC20PermitHarness.sol +16 -0
  131. package/lib/openzeppelin-contracts/certora/harnesses/ERC20WrapperHarness.sol +22 -0
  132. package/lib/openzeppelin-contracts/certora/harnesses/ERC3156FlashBorrowerHarness.sol +13 -0
  133. package/lib/openzeppelin-contracts/certora/harnesses/ERC721Harness.sol +37 -0
  134. package/lib/openzeppelin-contracts/certora/harnesses/ERC721ReceiverHarness.sol +11 -0
  135. package/lib/openzeppelin-contracts/certora/harnesses/EnumerableMapHarness.sol +55 -0
  136. package/lib/openzeppelin-contracts/certora/harnesses/EnumerableSetHarness.sol +35 -0
  137. package/lib/openzeppelin-contracts/certora/harnesses/InitializableHarness.sol +23 -0
  138. package/lib/openzeppelin-contracts/certora/harnesses/NoncesHarness.sol +14 -0
  139. package/lib/openzeppelin-contracts/certora/harnesses/Ownable2StepHarness.sol +10 -0
  140. package/lib/openzeppelin-contracts/certora/harnesses/OwnableHarness.sol +10 -0
  141. package/lib/openzeppelin-contracts/certora/harnesses/PausableHarness.sol +18 -0
  142. package/lib/openzeppelin-contracts/certora/harnesses/TimelockControllerHarness.sol +13 -0
  143. package/lib/openzeppelin-contracts/certora/reports/2021-10.pdf +0 -0
  144. package/lib/openzeppelin-contracts/certora/reports/2022-03.pdf +0 -0
  145. package/lib/openzeppelin-contracts/certora/reports/2022-05.pdf +0 -0
  146. package/lib/openzeppelin-contracts/certora/run.js +68 -0
  147. package/lib/openzeppelin-contracts/certora/specs/AccessControl.conf +8 -0
  148. package/lib/openzeppelin-contracts/certora/specs/AccessControl.spec +119 -0
  149. package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.conf +8 -0
  150. package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.spec +467 -0
  151. package/lib/openzeppelin-contracts/certora/specs/AccessManaged.conf +14 -0
  152. package/lib/openzeppelin-contracts/certora/specs/AccessManaged.spec +49 -0
  153. package/lib/openzeppelin-contracts/certora/specs/AccessManager.conf +10 -0
  154. package/lib/openzeppelin-contracts/certora/specs/AccessManager.spec +837 -0
  155. package/lib/openzeppelin-contracts/certora/specs/Account.conf +9 -0
  156. package/lib/openzeppelin-contracts/certora/specs/Account.spec +490 -0
  157. package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.conf +8 -0
  158. package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.spec +300 -0
  159. package/lib/openzeppelin-contracts/certora/specs/ERC20.conf +9 -0
  160. package/lib/openzeppelin-contracts/certora/specs/ERC20.spec +352 -0
  161. package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.conf +10 -0
  162. package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.spec +55 -0
  163. package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.conf +13 -0
  164. package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.spec +226 -0
  165. package/lib/openzeppelin-contracts/certora/specs/ERC721.conf +10 -0
  166. package/lib/openzeppelin-contracts/certora/specs/ERC721.spec +695 -0
  167. package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.conf +8 -0
  168. package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.spec +364 -0
  169. package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.conf +8 -0
  170. package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.spec +272 -0
  171. package/lib/openzeppelin-contracts/certora/specs/Initializable.conf +8 -0
  172. package/lib/openzeppelin-contracts/certora/specs/Initializable.spec +176 -0
  173. package/lib/openzeppelin-contracts/certora/specs/Nonces.conf +8 -0
  174. package/lib/openzeppelin-contracts/certora/specs/Nonces.spec +92 -0
  175. package/lib/openzeppelin-contracts/certora/specs/Ownable.conf +8 -0
  176. package/lib/openzeppelin-contracts/certora/specs/Ownable.spec +77 -0
  177. package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.conf +8 -0
  178. package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.spec +108 -0
  179. package/lib/openzeppelin-contracts/certora/specs/Pausable.conf +8 -0
  180. package/lib/openzeppelin-contracts/certora/specs/Pausable.spec +96 -0
  181. package/lib/openzeppelin-contracts/certora/specs/TimelockController.conf +10 -0
  182. package/lib/openzeppelin-contracts/certora/specs/TimelockController.spec +299 -0
  183. package/lib/openzeppelin-contracts/certora/specs/helpers/helpers.spec +13 -0
  184. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControl.spec +8 -0
  185. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControlDefaultAdminRules.spec +36 -0
  186. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessManaged.spec +5 -0
  187. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessManager.spec +33 -0
  188. package/lib/openzeppelin-contracts/certora/specs/methods/IAccount.spec +34 -0
  189. package/lib/openzeppelin-contracts/certora/specs/methods/IERC20.spec +11 -0
  190. package/lib/openzeppelin-contracts/certora/specs/methods/IERC2612.spec +5 -0
  191. package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashBorrower.spec +3 -0
  192. package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashLender.spec +5 -0
  193. package/lib/openzeppelin-contracts/certora/specs/methods/IERC5313.spec +3 -0
  194. package/lib/openzeppelin-contracts/certora/specs/methods/IERC721.spec +17 -0
  195. package/lib/openzeppelin-contracts/certora/specs/methods/IERC721Receiver.spec +3 -0
  196. package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable.spec +5 -0
  197. package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable2Step.spec +7 -0
  198. package/lib/openzeppelin-contracts/contracts/access/AccessControl.sol +207 -0
  199. package/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol +98 -0
  200. package/lib/openzeppelin-contracts/contracts/access/Ownable.sol +100 -0
  201. package/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol +67 -0
  202. package/lib/openzeppelin-contracts/contracts/access/README.adoc +45 -0
  203. package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol +372 -0
  204. package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol +81 -0
  205. package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol +192 -0
  206. package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol +31 -0
  207. package/lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol +112 -0
  208. package/lib/openzeppelin-contracts/contracts/access/manager/AccessManager.sol +741 -0
  209. package/lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol +36 -0
  210. package/lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol +32 -0
  211. package/lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol +399 -0
  212. package/lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol +14 -0
  213. package/lib/openzeppelin-contracts/contracts/account/Account.sol +151 -0
  214. package/lib/openzeppelin-contracts/contracts/account/README.adoc +30 -0
  215. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-AccountERC7579.sol +419 -0
  216. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-AccountERC7579Hooked.sol +107 -0
  217. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-ERC7821.sol +70 -0
  218. package/lib/openzeppelin-contracts/contracts/account/utils/EIP7702Utils.sol +21 -0
  219. package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC4337Utils.sol +159 -0
  220. package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC7579Utils.sol +280 -0
  221. package/lib/openzeppelin-contracts/contracts/crosschain/ERC7786Recipient.sol +70 -0
  222. package/lib/openzeppelin-contracts/contracts/crosschain/README.adoc +12 -0
  223. package/lib/openzeppelin-contracts/contracts/finance/README.adoc +14 -0
  224. package/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol +159 -0
  225. package/lib/openzeppelin-contracts/contracts/finance/VestingWalletCliff.sol +54 -0
  226. package/lib/openzeppelin-contracts/contracts/governance/Governor.sol +818 -0
  227. package/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol +454 -0
  228. package/lib/openzeppelin-contracts/contracts/governance/README.adoc +197 -0
  229. package/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol +471 -0
  230. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingFractional.sol +190 -0
  231. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingOverridable.sol +222 -0
  232. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol +96 -0
  233. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorNoncesKeyed.sol +91 -0
  234. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol +92 -0
  235. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorProposalGuardian.sol +59 -0
  236. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSequentialProposalId.sol +75 -0
  237. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol +106 -0
  238. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorStorage.sol +125 -0
  239. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSuperQuorum.sol +59 -0
  240. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockAccess.sol +346 -0
  241. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol +165 -0
  242. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol +167 -0
  243. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol +63 -0
  244. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol +113 -0
  245. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol +135 -0
  246. package/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol +60 -0
  247. package/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol +252 -0
  248. package/lib/openzeppelin-contracts/contracts/governance/utils/VotesExtended.sol +84 -0
  249. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol +6 -0
  250. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol +6 -0
  251. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol +6 -0
  252. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol +17 -0
  253. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol +86 -0
  254. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol +32 -0
  255. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol +26 -0
  256. package/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol +6 -0
  257. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol +20 -0
  258. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol +112 -0
  259. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol +24 -0
  260. package/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol +6 -0
  261. package/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol +6 -0
  262. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol +19 -0
  263. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol +8 -0
  264. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol +26 -0
  265. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol +7 -0
  266. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol +27 -0
  267. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol +41 -0
  268. package/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol +230 -0
  269. package/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol +20 -0
  270. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol +28 -0
  271. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol +16 -0
  272. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol +9 -0
  273. package/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol +17 -0
  274. package/lib/openzeppelin-contracts/contracts/interfaces/IERC6909.sol +125 -0
  275. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol +6 -0
  276. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol +6 -0
  277. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol +6 -0
  278. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol +6 -0
  279. package/lib/openzeppelin-contracts/contracts/interfaces/IERC7751.sol +12 -0
  280. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol +200 -0
  281. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol +35 -0
  282. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol +35 -0
  283. package/lib/openzeppelin-contracts/contracts/interfaces/IERC7913.sol +18 -0
  284. package/lib/openzeppelin-contracts/contracts/interfaces/README.adoc +111 -0
  285. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol +20 -0
  286. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC4337.sol +253 -0
  287. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol +162 -0
  288. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7579.sol +227 -0
  289. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7674.sol +17 -0
  290. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7786.sol +64 -0
  291. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7802.sol +32 -0
  292. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7821.sol +44 -0
  293. package/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol +90 -0
  294. package/lib/openzeppelin-contracts/contracts/metatx/ERC2771Forwarder.sol +372 -0
  295. package/lib/openzeppelin-contracts/contracts/metatx/README.adoc +17 -0
  296. package/lib/openzeppelin-contracts/contracts/mocks/AccessManagedTarget.sol +34 -0
  297. package/lib/openzeppelin-contracts/contracts/mocks/AccessManagerMock.sol +20 -0
  298. package/lib/openzeppelin-contracts/contracts/mocks/ArraysMock.sol +171 -0
  299. package/lib/openzeppelin-contracts/contracts/mocks/AuthorityMock.sol +69 -0
  300. package/lib/openzeppelin-contracts/contracts/mocks/Base64Dirty.sol +19 -0
  301. package/lib/openzeppelin-contracts/contracts/mocks/BatchCaller.sol +20 -0
  302. package/lib/openzeppelin-contracts/contracts/mocks/CallReceiverMock.sol +106 -0
  303. package/lib/openzeppelin-contracts/contracts/mocks/ConstructorMock.sol +34 -0
  304. package/lib/openzeppelin-contracts/contracts/mocks/ContextMock.sol +35 -0
  305. package/lib/openzeppelin-contracts/contracts/mocks/DummyImplementation.sol +65 -0
  306. package/lib/openzeppelin-contracts/contracts/mocks/EIP712Verifier.sol +16 -0
  307. package/lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol +24 -0
  308. package/lib/openzeppelin-contracts/contracts/mocks/ERC165Mock.sol +100 -0
  309. package/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol +28 -0
  310. package/lib/openzeppelin-contracts/contracts/mocks/ERC3156FlashBorrowerMock.sol +53 -0
  311. package/lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol +17 -0
  312. package/lib/openzeppelin-contracts/contracts/mocks/InitializableMock.sol +130 -0
  313. package/lib/openzeppelin-contracts/contracts/mocks/MerkleProofCustomHashMock.sol +62 -0
  314. package/lib/openzeppelin-contracts/contracts/mocks/MerkleTreeMock.sol +52 -0
  315. package/lib/openzeppelin-contracts/contracts/mocks/MulticallHelper.sol +23 -0
  316. package/lib/openzeppelin-contracts/contracts/mocks/MultipleInheritanceInitializableMocks.sol +131 -0
  317. package/lib/openzeppelin-contracts/contracts/mocks/PausableMock.sol +31 -0
  318. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol +17 -0
  319. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyMock.sol +59 -0
  320. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyTransientMock.sol +59 -0
  321. package/lib/openzeppelin-contracts/contracts/mocks/RegressionImplementation.sol +61 -0
  322. package/lib/openzeppelin-contracts/contracts/mocks/SingleInheritanceInitializableMocks.sol +49 -0
  323. package/lib/openzeppelin-contracts/contracts/mocks/Stateless.sol +61 -0
  324. package/lib/openzeppelin-contracts/contracts/mocks/StorageSlotMock.sol +87 -0
  325. package/lib/openzeppelin-contracts/contracts/mocks/TimelockReentrant.sol +26 -0
  326. package/lib/openzeppelin-contracts/contracts/mocks/TransientSlotMock.sol +61 -0
  327. package/lib/openzeppelin-contracts/contracts/mocks/UpgradeableBeaconMock.sol +27 -0
  328. package/lib/openzeppelin-contracts/contracts/mocks/VotesExtendedMock.sol +42 -0
  329. package/lib/openzeppelin-contracts/contracts/mocks/VotesMock.sol +42 -0
  330. package/lib/openzeppelin-contracts/contracts/mocks/account/AccountMock.sol +181 -0
  331. package/lib/openzeppelin-contracts/contracts/mocks/account/modules/ERC7579Mock.sol +122 -0
  332. package/lib/openzeppelin-contracts/contracts/mocks/account/utils/ERC7579UtilsMock.sol +23 -0
  333. package/lib/openzeppelin-contracts/contracts/mocks/compound/CompTimelock.sol +174 -0
  334. package/lib/openzeppelin-contracts/contracts/mocks/crosschain/ERC7786GatewayMock.sol +56 -0
  335. package/lib/openzeppelin-contracts/contracts/mocks/crosschain/ERC7786RecipientMock.sol +31 -0
  336. package/lib/openzeppelin-contracts/contracts/mocks/docs/ERC20WithAutoMinerReward.sol +22 -0
  337. package/lib/openzeppelin-contracts/contracts/mocks/docs/ERC4626Fees.sol +109 -0
  338. package/lib/openzeppelin-contracts/contracts/mocks/docs/MyNFT.sol +9 -0
  339. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintBase.sol +25 -0
  340. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintMissing.sol +24 -0
  341. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintOnlyRole.sol +23 -0
  342. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlModified.sol +14 -0
  343. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessManagedERC20MintBase.sol +16 -0
  344. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/MyContractOwnable.sol +17 -0
  345. package/lib/openzeppelin-contracts/contracts/mocks/docs/account/MyAccountERC7702.sol +20 -0
  346. package/lib/openzeppelin-contracts/contracts/mocks/docs/account/MyFactoryAccount.sol +37 -0
  347. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyGovernor.sol +80 -0
  348. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyToken.sol +21 -0
  349. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenTimestampBased.sol +32 -0
  350. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenWrapped.sol +28 -0
  351. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC1155/GameItems.sol +21 -0
  352. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC1155/MyERC115HolderContract.sol +7 -0
  353. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC20/GLDToken.sol +11 -0
  354. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC6909/ERC6909GameItems.sol +26 -0
  355. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC721/GameItem.sol +19 -0
  356. package/lib/openzeppelin-contracts/contracts/mocks/docs/utilities/Base64NFT.sol +27 -0
  357. package/lib/openzeppelin-contracts/contracts/mocks/docs/utilities/Multicall.sol +15 -0
  358. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorCountingOverridableMock.sol +18 -0
  359. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorFractionalMock.sol +14 -0
  360. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorMock.sol +14 -0
  361. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorNoncesKeyedMock.sol +44 -0
  362. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorPreventLateQuorumMock.sol +40 -0
  363. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorProposalGuardianMock.sol +27 -0
  364. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorSequentialProposalIdMock.sol +39 -0
  365. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorStorageMock.sol +79 -0
  366. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorSuperQuorumMock.sol +95 -0
  367. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockAccessMock.sol +70 -0
  368. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockCompoundMock.sol +69 -0
  369. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockControlMock.sol +69 -0
  370. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVoteMock.sol +20 -0
  371. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVotesSuperQuorumFractionMock.sol +37 -0
  372. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorWithParamsMock.sol +51 -0
  373. package/lib/openzeppelin-contracts/contracts/mocks/proxy/BadBeacon.sol +11 -0
  374. package/lib/openzeppelin-contracts/contracts/mocks/proxy/ClashingImplementation.sol +19 -0
  375. package/lib/openzeppelin-contracts/contracts/mocks/proxy/UUPSUpgradeableMock.sol +35 -0
  376. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1155ReceiverMock.sol +74 -0
  377. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ForceApproveMock.sol +13 -0
  378. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363NoReturnMock.sol +33 -0
  379. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ReceiverMock.sol +52 -0
  380. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ReturnFalseMock.sol +34 -0
  381. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363SpenderMock.sol +47 -0
  382. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ApprovalMock.sol +10 -0
  383. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20BridgeableMock.sol +26 -0
  384. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20DecimalsMock.sol +17 -0
  385. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ExcessDecimalsMock.sol +9 -0
  386. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20FlashMintMock.sol +26 -0
  387. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol +13 -0
  388. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20GetterHelper.sol +38 -0
  389. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20Mock.sol +16 -0
  390. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20MulticallMock.sol +8 -0
  391. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20NoReturnMock.sol +30 -0
  392. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20Reentrant.sol +39 -0
  393. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ReturnFalseMock.sol +19 -0
  394. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesAdditionalCheckpointsMock.sol +31 -0
  395. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesLegacyMock.sol +253 -0
  396. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesTimestampMock.sol +29 -0
  397. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626LimitsMock.sol +23 -0
  398. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626Mock.sol +17 -0
  399. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626OffsetMock.sol +17 -0
  400. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4646FeesMock.sol +40 -0
  401. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveEnumerableMock.sol +42 -0
  402. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveMock.sol +61 -0
  403. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ReceiverMock.sol +47 -0
  404. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721URIStorageMock.sol +17 -0
  405. package/lib/openzeppelin-contracts/contracts/mocks/utils/cryptography/ERC7739Mock.sol +12 -0
  406. package/lib/openzeppelin-contracts/contracts/package.json +32 -0
  407. package/lib/openzeppelin-contracts/contracts/proxy/Clones.sol +294 -0
  408. package/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol +40 -0
  409. package/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol +177 -0
  410. package/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol +69 -0
  411. package/lib/openzeppelin-contracts/contracts/proxy/README.adoc +87 -0
  412. package/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol +57 -0
  413. package/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol +16 -0
  414. package/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol +70 -0
  415. package/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol +45 -0
  416. package/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol +118 -0
  417. package/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol +238 -0
  418. package/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol +148 -0
  419. package/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol +389 -0
  420. package/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol +123 -0
  421. package/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol +59 -0
  422. package/lib/openzeppelin-contracts/contracts/token/ERC1155/README.adoc +43 -0
  423. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol +28 -0
  424. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol +38 -0
  425. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol +88 -0
  426. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol +61 -0
  427. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol +20 -0
  428. package/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol +42 -0
  429. package/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Utils.sol +88 -0
  430. package/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol +305 -0
  431. package/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol +79 -0
  432. package/lib/openzeppelin-contracts/contracts/token/ERC20/README.adoc +78 -0
  433. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC1363.sol +135 -0
  434. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol +39 -0
  435. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol +54 -0
  436. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol +134 -0
  437. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol +33 -0
  438. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol +77 -0
  439. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol +83 -0
  440. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol +89 -0
  441. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol +305 -0
  442. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol +26 -0
  443. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol +90 -0
  444. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20Bridgeable.sol +51 -0
  445. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20TemporaryApproval.sol +119 -0
  446. package/lib/openzeppelin-contracts/contracts/token/ERC20/utils/ERC1363Utils.sol +95 -0
  447. package/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol +280 -0
  448. package/lib/openzeppelin-contracts/contracts/token/ERC6909/ERC6909.sol +224 -0
  449. package/lib/openzeppelin-contracts/contracts/token/ERC6909/README.adoc +27 -0
  450. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909ContentURI.sol +53 -0
  451. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909Metadata.sol +77 -0
  452. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909TokenSupply.sol +35 -0
  453. package/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol +430 -0
  454. package/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol +135 -0
  455. package/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol +28 -0
  456. package/lib/openzeppelin-contracts/contracts/token/ERC721/README.adoc +69 -0
  457. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol +26 -0
  458. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol +176 -0
  459. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol +164 -0
  460. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol +37 -0
  461. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol +26 -0
  462. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol +58 -0
  463. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol +47 -0
  464. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol +102 -0
  465. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol +29 -0
  466. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol +27 -0
  467. package/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol +26 -0
  468. package/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol +50 -0
  469. package/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol +139 -0
  470. package/lib/openzeppelin-contracts/contracts/token/common/README.adoc +10 -0
  471. package/lib/openzeppelin-contracts/contracts/utils/Address.sol +167 -0
  472. package/lib/openzeppelin-contracts/contracts/utils/Arrays.sol +735 -0
  473. package/lib/openzeppelin-contracts/contracts/utils/Base58.sol +240 -0
  474. package/lib/openzeppelin-contracts/contracts/utils/Base64.sol +234 -0
  475. package/lib/openzeppelin-contracts/contracts/utils/Blockhash.sol +54 -0
  476. package/lib/openzeppelin-contracts/contracts/utils/Bytes.sol +247 -0
  477. package/lib/openzeppelin-contracts/contracts/utils/CAIP10.sol +54 -0
  478. package/lib/openzeppelin-contracts/contracts/utils/CAIP2.sol +51 -0
  479. package/lib/openzeppelin-contracts/contracts/utils/Calldata.sol +25 -0
  480. package/lib/openzeppelin-contracts/contracts/utils/Comparators.sol +19 -0
  481. package/lib/openzeppelin-contracts/contracts/utils/Context.sol +28 -0
  482. package/lib/openzeppelin-contracts/contracts/utils/Create2.sol +91 -0
  483. package/lib/openzeppelin-contracts/contracts/utils/Errors.sol +34 -0
  484. package/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol +127 -0
  485. package/lib/openzeppelin-contracts/contracts/utils/Memory.sol +135 -0
  486. package/lib/openzeppelin-contracts/contracts/utils/Multicall.sol +37 -0
  487. package/lib/openzeppelin-contracts/contracts/utils/Nonces.sol +46 -0
  488. package/lib/openzeppelin-contracts/contracts/utils/NoncesKeyed.sol +74 -0
  489. package/lib/openzeppelin-contracts/contracts/utils/Packing.sol +1656 -0
  490. package/lib/openzeppelin-contracts/contracts/utils/Panic.sol +57 -0
  491. package/lib/openzeppelin-contracts/contracts/utils/Pausable.sol +112 -0
  492. package/lib/openzeppelin-contracts/contracts/utils/README.adoc +160 -0
  493. package/lib/openzeppelin-contracts/contracts/utils/RLP.sol +382 -0
  494. package/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol +119 -0
  495. package/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol +84 -0
  496. package/lib/openzeppelin-contracts/contracts/utils/RelayedCall.sol +133 -0
  497. package/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol +122 -0
  498. package/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol +155 -0
  499. package/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol +143 -0
  500. package/lib/openzeppelin-contracts/contracts/utils/Strings.sol +508 -0
  501. package/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol +183 -0
  502. package/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol +284 -0
  503. package/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol +160 -0
  504. package/lib/openzeppelin-contracts/contracts/utils/cryptography/Hashes.sol +31 -0
  505. package/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol +514 -0
  506. package/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol +99 -0
  507. package/lib/openzeppelin-contracts/contracts/utils/cryptography/P256.sol +408 -0
  508. package/lib/openzeppelin-contracts/contracts/utils/cryptography/README.adoc +73 -0
  509. package/lib/openzeppelin-contracts/contracts/utils/cryptography/RSA.sol +154 -0
  510. package/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol +164 -0
  511. package/lib/openzeppelin-contracts/contracts/utils/cryptography/WebAuthn.sol +261 -0
  512. package/lib/openzeppelin-contracts/contracts/utils/cryptography/draft-ERC7739Utils.sol +208 -0
  513. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/AbstractSigner.sol +23 -0
  514. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913.sol +252 -0
  515. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol +208 -0
  516. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerECDSA.sol +56 -0
  517. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerEIP7702.sol +25 -0
  518. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerERC7913.sol +63 -0
  519. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerP256.sol +64 -0
  520. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerRSA.sol +65 -0
  521. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerWebAuthn.sol +51 -0
  522. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/draft-ERC7739.sol +98 -0
  523. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913P256Verifier.sol +29 -0
  524. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913RSAVerifier.sol +23 -0
  525. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913WebAuthnVerifier.sol +35 -0
  526. package/lib/openzeppelin-contracts/contracts/utils/draft-InteroperableAddress.sol +235 -0
  527. package/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol +25 -0
  528. package/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol +142 -0
  529. package/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol +25 -0
  530. package/lib/openzeppelin-contracts/contracts/utils/math/Math.sol +756 -0
  531. package/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol +1162 -0
  532. package/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol +68 -0
  533. package/lib/openzeppelin-contracts/contracts/utils/structs/Accumulators.sol +130 -0
  534. package/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol +60 -0
  535. package/lib/openzeppelin-contracts/contracts/utils/structs/Checkpoints.sol +833 -0
  536. package/lib/openzeppelin-contracts/contracts/utils/structs/CircularBuffer.sol +141 -0
  537. package/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol +156 -0
  538. package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol +1319 -0
  539. package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol +792 -0
  540. package/lib/openzeppelin-contracts/contracts/utils/structs/Heap.sol +256 -0
  541. package/lib/openzeppelin-contracts/contracts/utils/structs/MerkleTree.sol +267 -0
  542. package/lib/openzeppelin-contracts/contracts/utils/types/Time.sol +133 -0
  543. package/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol +86 -0
  544. package/lib/openzeppelin-contracts/contracts/vendor/compound/LICENSE +11 -0
  545. package/lib/openzeppelin-contracts/docs/README.md +16 -0
  546. package/lib/openzeppelin-contracts/docs/antora.yml +7 -0
  547. package/lib/openzeppelin-contracts/docs/config.js +21 -0
  548. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-control-multiple.svg +97 -0
  549. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-manager-functions.svg +47 -0
  550. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-manager.svg +99 -0
  551. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3a.png +0 -0
  552. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3b.png +0 -0
  553. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-6.png +0 -0
  554. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack.png +0 -0
  555. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-deposit.png +0 -0
  556. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-mint.png +0 -0
  557. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-linear.png +0 -0
  558. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglog.png +0 -0
  559. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglogext.png +0 -0
  560. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png +0 -0
  561. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png +0 -0
  562. package/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc +29 -0
  563. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/access-control.adoc +295 -0
  564. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/account-abstraction.adoc +100 -0
  565. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/accounts.adoc +354 -0
  566. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/backwards-compatibility.adoc +50 -0
  567. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/eoa-delegation.adoc +143 -0
  568. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc1155.adoc +118 -0
  569. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20-supply.adoc +71 -0
  570. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20.adoc +67 -0
  571. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc4626.adoc +214 -0
  572. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc6909.adoc +47 -0
  573. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc721.adoc +58 -0
  574. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/extending-contracts.adoc +51 -0
  575. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/faq.adoc +13 -0
  576. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/governance.adoc +239 -0
  577. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/index.adoc +70 -0
  578. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/multisig.adoc +306 -0
  579. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/tokens.adoc +31 -0
  580. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/upgradeable.adoc +77 -0
  581. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/utilities.adoc +634 -0
  582. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/wizard.adoc +15 -0
  583. package/lib/openzeppelin-contracts/docs/templates/contract.hbs +141 -0
  584. package/lib/openzeppelin-contracts/docs/templates/helpers.js +46 -0
  585. package/lib/openzeppelin-contracts/docs/templates/page.hbs +4 -0
  586. package/lib/openzeppelin-contracts/docs/templates/properties.js +88 -0
  587. package/lib/openzeppelin-contracts/eslint.config.mjs +26 -0
  588. package/lib/openzeppelin-contracts/foundry.toml +20 -0
  589. package/lib/openzeppelin-contracts/fv-requirements.txt +4 -0
  590. package/lib/openzeppelin-contracts/hardhat/async-test-sanity.js +10 -0
  591. package/lib/openzeppelin-contracts/hardhat/env-artifacts.js +29 -0
  592. package/lib/openzeppelin-contracts/hardhat/ignore-unreachable-warnings.js +45 -0
  593. package/lib/openzeppelin-contracts/hardhat/remappings.js +18 -0
  594. package/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js +6 -0
  595. package/lib/openzeppelin-contracts/hardhat/task-test-get-files.js +25 -0
  596. package/lib/openzeppelin-contracts/hardhat.config.js +125 -0
  597. package/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.prop.sol +404 -0
  598. package/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.test.sol +356 -0
  599. package/lib/openzeppelin-contracts/lib/erc4626-tests/LICENSE +661 -0
  600. package/lib/openzeppelin-contracts/lib/erc4626-tests/README.md +116 -0
  601. package/lib/openzeppelin-contracts/lib/forge-std/.gitattributes +1 -0
  602. package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/ci.yml +128 -0
  603. package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/sync.yml +31 -0
  604. package/lib/openzeppelin-contracts/lib/forge-std/CONTRIBUTING.md +193 -0
  605. package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-APACHE +203 -0
  606. package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-MIT +25 -0
  607. package/lib/openzeppelin-contracts/lib/forge-std/README.md +266 -0
  608. package/lib/openzeppelin-contracts/lib/forge-std/foundry.toml +23 -0
  609. package/lib/openzeppelin-contracts/lib/forge-std/package.json +16 -0
  610. package/lib/openzeppelin-contracts/lib/forge-std/scripts/vm.py +646 -0
  611. package/lib/openzeppelin-contracts/lib/forge-std/src/Base.sol +35 -0
  612. package/lib/openzeppelin-contracts/lib/forge-std/src/Script.sol +27 -0
  613. package/lib/openzeppelin-contracts/lib/forge-std/src/StdAssertions.sol +669 -0
  614. package/lib/openzeppelin-contracts/lib/forge-std/src/StdChains.sol +287 -0
  615. package/lib/openzeppelin-contracts/lib/forge-std/src/StdCheats.sol +829 -0
  616. package/lib/openzeppelin-contracts/lib/forge-std/src/StdError.sol +15 -0
  617. package/lib/openzeppelin-contracts/lib/forge-std/src/StdInvariant.sol +122 -0
  618. package/lib/openzeppelin-contracts/lib/forge-std/src/StdJson.sol +283 -0
  619. package/lib/openzeppelin-contracts/lib/forge-std/src/StdMath.sol +43 -0
  620. package/lib/openzeppelin-contracts/lib/forge-std/src/StdStorage.sol +473 -0
  621. package/lib/openzeppelin-contracts/lib/forge-std/src/StdStyle.sol +333 -0
  622. package/lib/openzeppelin-contracts/lib/forge-std/src/StdToml.sol +283 -0
  623. package/lib/openzeppelin-contracts/lib/forge-std/src/StdUtils.sol +209 -0
  624. package/lib/openzeppelin-contracts/lib/forge-std/src/Test.sol +33 -0
  625. package/lib/openzeppelin-contracts/lib/forge-std/src/Vm.sol +2263 -0
  626. package/lib/openzeppelin-contracts/lib/forge-std/src/console.sol +1560 -0
  627. package/lib/openzeppelin-contracts/lib/forge-std/src/console2.sol +4 -0
  628. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  629. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  630. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  631. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  632. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  633. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IMulticall3.sol +73 -0
  634. package/lib/openzeppelin-contracts/lib/forge-std/src/safeconsole.sol +13937 -0
  635. package/lib/openzeppelin-contracts/lib/forge-std/test/StdAssertions.t.sol +141 -0
  636. package/lib/openzeppelin-contracts/lib/forge-std/test/StdChains.t.sol +227 -0
  637. package/lib/openzeppelin-contracts/lib/forge-std/test/StdCheats.t.sol +618 -0
  638. package/lib/openzeppelin-contracts/lib/forge-std/test/StdError.t.sol +120 -0
  639. package/lib/openzeppelin-contracts/lib/forge-std/test/StdJson.t.sol +49 -0
  640. package/lib/openzeppelin-contracts/lib/forge-std/test/StdMath.t.sol +202 -0
  641. package/lib/openzeppelin-contracts/lib/forge-std/test/StdStorage.t.sol +488 -0
  642. package/lib/openzeppelin-contracts/lib/forge-std/test/StdStyle.t.sol +110 -0
  643. package/lib/openzeppelin-contracts/lib/forge-std/test/StdToml.t.sol +49 -0
  644. package/lib/openzeppelin-contracts/lib/forge-std/test/StdUtils.t.sol +342 -0
  645. package/lib/openzeppelin-contracts/lib/forge-std/test/Vm.t.sol +18 -0
  646. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScript.sol +10 -0
  647. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScriptBase.sol +10 -0
  648. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTest.sol +10 -0
  649. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTestBase.sol +10 -0
  650. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  651. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/test.json +8 -0
  652. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/test.toml +6 -0
  653. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/LICENSE +661 -0
  654. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/README.md +97 -0
  655. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/SVM.sol +49 -0
  656. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/SymTest.sol +11 -0
  657. package/lib/openzeppelin-contracts/logo.svg +15 -0
  658. package/lib/openzeppelin-contracts/netlify.toml +3 -0
  659. package/lib/openzeppelin-contracts/package-lock.json +11090 -0
  660. package/lib/openzeppelin-contracts/package.json +107 -0
  661. package/lib/openzeppelin-contracts/remappings.txt +1 -0
  662. package/lib/openzeppelin-contracts/renovate.json +4 -0
  663. package/lib/openzeppelin-contracts/scripts/checks/compare-layout.js +28 -0
  664. package/lib/openzeppelin-contracts/scripts/checks/compareGasReports.js +249 -0
  665. package/lib/openzeppelin-contracts/scripts/checks/coverage.sh +24 -0
  666. package/lib/openzeppelin-contracts/scripts/checks/extract-layout.js +39 -0
  667. package/lib/openzeppelin-contracts/scripts/checks/generation.sh +6 -0
  668. package/lib/openzeppelin-contracts/scripts/checks/inheritance-ordering.js +55 -0
  669. package/lib/openzeppelin-contracts/scripts/checks/pragma-validity.js +45 -0
  670. package/lib/openzeppelin-contracts/scripts/fetch-common-contracts.js +50 -0
  671. package/lib/openzeppelin-contracts/scripts/gen-nav.js +81 -0
  672. package/lib/openzeppelin-contracts/scripts/generate/format-lines.js +16 -0
  673. package/lib/openzeppelin-contracts/scripts/generate/helpers/sanitize.js +5 -0
  674. package/lib/openzeppelin-contracts/scripts/generate/run.js +61 -0
  675. package/lib/openzeppelin-contracts/scripts/generate/templates/Arrays.js +454 -0
  676. package/lib/openzeppelin-contracts/scripts/generate/templates/Arrays.opts.js +9 -0
  677. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.js +242 -0
  678. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.opts.js +18 -0
  679. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.t.js +141 -0
  680. package/lib/openzeppelin-contracts/scripts/generate/templates/Enumerable.opts.js +53 -0
  681. package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableMap.js +463 -0
  682. package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableSet.js +469 -0
  683. package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.js +187 -0
  684. package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.opts.js +11 -0
  685. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.js +92 -0
  686. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.opts.js +3 -0
  687. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.t.js +48 -0
  688. package/lib/openzeppelin-contracts/scripts/generate/templates/SafeCast.js +136 -0
  689. package/lib/openzeppelin-contracts/scripts/generate/templates/Slot.opts.js +15 -0
  690. package/lib/openzeppelin-contracts/scripts/generate/templates/SlotDerivation.js +119 -0
  691. package/lib/openzeppelin-contracts/scripts/generate/templates/SlotDerivation.t.js +127 -0
  692. package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlot.js +77 -0
  693. package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlotMock.js +57 -0
  694. package/lib/openzeppelin-contracts/scripts/generate/templates/TransientSlot.js +80 -0
  695. package/lib/openzeppelin-contracts/scripts/generate/templates/TransientSlotMock.js +35 -0
  696. package/lib/openzeppelin-contracts/scripts/generate/templates/conversion.js +30 -0
  697. package/lib/openzeppelin-contracts/scripts/get-contracts-metadata.js +55 -0
  698. package/lib/openzeppelin-contracts/scripts/git-user-config.sh +6 -0
  699. package/lib/openzeppelin-contracts/scripts/helpers.js +7 -0
  700. package/lib/openzeppelin-contracts/scripts/minimize-pragma.js +138 -0
  701. package/lib/openzeppelin-contracts/scripts/prepack.sh +23 -0
  702. package/lib/openzeppelin-contracts/scripts/prepare-docs.sh +26 -0
  703. package/lib/openzeppelin-contracts/scripts/release/format-changelog.js +33 -0
  704. package/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js +15 -0
  705. package/lib/openzeppelin-contracts/scripts/release/update-comment.js +34 -0
  706. package/lib/openzeppelin-contracts/scripts/release/version.sh +11 -0
  707. package/lib/openzeppelin-contracts/scripts/release/workflow/exit-prerelease.sh +8 -0
  708. package/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js +48 -0
  709. package/lib/openzeppelin-contracts/scripts/release/workflow/integrity-check.sh +20 -0
  710. package/lib/openzeppelin-contracts/scripts/release/workflow/pack.sh +26 -0
  711. package/lib/openzeppelin-contracts/scripts/release/workflow/publish.sh +26 -0
  712. package/lib/openzeppelin-contracts/scripts/release/workflow/rerun.js +7 -0
  713. package/lib/openzeppelin-contracts/scripts/release/workflow/set-changesets-pr-title.js +17 -0
  714. package/lib/openzeppelin-contracts/scripts/release/workflow/start.sh +35 -0
  715. package/lib/openzeppelin-contracts/scripts/release/workflow/state.js +112 -0
  716. package/lib/openzeppelin-contracts/scripts/remove-ignored-artifacts.js +45 -0
  717. package/lib/openzeppelin-contracts/scripts/set-max-old-space-size.sh +10 -0
  718. package/lib/openzeppelin-contracts/scripts/solc-versions.js +15 -0
  719. package/lib/openzeppelin-contracts/scripts/solhint-custom/index.js +118 -0
  720. package/lib/openzeppelin-contracts/scripts/solhint-custom/package.json +8 -0
  721. package/lib/openzeppelin-contracts/scripts/update-docs-branch.js +65 -0
  722. package/lib/openzeppelin-contracts/scripts/upgradeable/README.md +21 -0
  723. package/lib/openzeppelin-contracts/scripts/upgradeable/alias/Initializable.sol +5 -0
  724. package/lib/openzeppelin-contracts/scripts/upgradeable/alias/UUPSUpgradeable.sol +5 -0
  725. package/lib/openzeppelin-contracts/scripts/upgradeable/patch-apply.sh +19 -0
  726. package/lib/openzeppelin-contracts/scripts/upgradeable/patch-save.sh +18 -0
  727. package/lib/openzeppelin-contracts/scripts/upgradeable/transpile-onto.sh +54 -0
  728. package/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh +49 -0
  729. package/lib/openzeppelin-contracts/scripts/upgradeable/upgradeable.patch +425 -0
  730. package/lib/openzeppelin-contracts/slither.config.json +4 -0
  731. package/lib/openzeppelin-contracts/solhint.config.js +29 -0
  732. package/lib/openzeppelin-contracts/test/TESTING.md +3 -0
  733. package/lib/openzeppelin-contracts/test/access/AccessControl.behavior.js +874 -0
  734. package/lib/openzeppelin-contracts/test/access/AccessControl.test.js +19 -0
  735. package/lib/openzeppelin-contracts/test/access/Ownable.test.js +79 -0
  736. package/lib/openzeppelin-contracts/test/access/Ownable2Step.test.js +102 -0
  737. package/lib/openzeppelin-contracts/test/access/extensions/AccessControlDefaultAdminRules.test.js +32 -0
  738. package/lib/openzeppelin-contracts/test/access/extensions/AccessControlEnumerable.test.js +24 -0
  739. package/lib/openzeppelin-contracts/test/access/manager/AccessManaged.test.js +146 -0
  740. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.behavior.js +257 -0
  741. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.predicate.js +456 -0
  742. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.test.js +2489 -0
  743. package/lib/openzeppelin-contracts/test/access/manager/AuthorityUtils.test.js +112 -0
  744. package/lib/openzeppelin-contracts/test/account/Account.behavior.js +144 -0
  745. package/lib/openzeppelin-contracts/test/account/Account.test.js +48 -0
  746. package/lib/openzeppelin-contracts/test/account/AccountECDSA.test.js +52 -0
  747. package/lib/openzeppelin-contracts/test/account/AccountERC7702.t.sol +113 -0
  748. package/lib/openzeppelin-contracts/test/account/AccountERC7702.test.js +52 -0
  749. package/lib/openzeppelin-contracts/test/account/AccountERC7913.test.js +138 -0
  750. package/lib/openzeppelin-contracts/test/account/AccountMultiSigner.test.js +326 -0
  751. package/lib/openzeppelin-contracts/test/account/AccountMultiSignerWeighted.test.js +312 -0
  752. package/lib/openzeppelin-contracts/test/account/AccountP256.test.js +58 -0
  753. package/lib/openzeppelin-contracts/test/account/AccountRSA.test.js +58 -0
  754. package/lib/openzeppelin-contracts/test/account/AccountWebAuthn.test.js +88 -0
  755. package/lib/openzeppelin-contracts/test/account/examples/AccountERC7702WithModulesMock.test.js +99 -0
  756. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.behavior.js +601 -0
  757. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.test.js +60 -0
  758. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579Hooked.test.js +60 -0
  759. package/lib/openzeppelin-contracts/test/account/extensions/ERC7821.behavior.js +145 -0
  760. package/lib/openzeppelin-contracts/test/account/utils/EIP7702Utils.test.js +53 -0
  761. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC4337Utils.test.js +289 -0
  762. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC7579Utils.t.sol +434 -0
  763. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC7579Utils.test.js +399 -0
  764. package/lib/openzeppelin-contracts/test/crosschain/ERC7786Recipient.test.js +73 -0
  765. package/lib/openzeppelin-contracts/test/finance/VestingWallet.behavior.js +87 -0
  766. package/lib/openzeppelin-contracts/test/finance/VestingWallet.test.js +65 -0
  767. package/lib/openzeppelin-contracts/test/finance/VestingWalletCliff.test.js +70 -0
  768. package/lib/openzeppelin-contracts/test/governance/Governor.t.sol +59 -0
  769. package/lib/openzeppelin-contracts/test/governance/Governor.test.js +980 -0
  770. package/lib/openzeppelin-contracts/test/governance/TimelockController.test.js +1279 -0
  771. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorCountingFractional.test.js +248 -0
  772. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorCountingOverridable.test.js +346 -0
  773. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorERC721.test.js +131 -0
  774. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorNoncesKeyed.test.js +244 -0
  775. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorPreventLateQuorum.test.js +185 -0
  776. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorProposalGuardian.test.js +132 -0
  777. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSequentialProposalId.test.js +202 -0
  778. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorStorage.test.js +155 -0
  779. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSuperQuorum.test.js +168 -0
  780. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSuperQuorumGreaterThanQuorum.t.sol +83 -0
  781. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockAccess.test.js +864 -0
  782. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockCompound.test.js +448 -0
  783. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockControl.test.js +504 -0
  784. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesQuorumFraction.test.js +165 -0
  785. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesSuperQuorumFraction.test.js +160 -0
  786. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorWithParams.test.js +245 -0
  787. package/lib/openzeppelin-contracts/test/governance/utils/ERC6372.behavior.js +28 -0
  788. package/lib/openzeppelin-contracts/test/governance/utils/Votes.behavior.js +325 -0
  789. package/lib/openzeppelin-contracts/test/governance/utils/Votes.test.js +102 -0
  790. package/lib/openzeppelin-contracts/test/governance/utils/VotesExtended.test.js +152 -0
  791. package/lib/openzeppelin-contracts/test/helpers/access-manager.js +85 -0
  792. package/lib/openzeppelin-contracts/test/helpers/account.js +14 -0
  793. package/lib/openzeppelin-contracts/test/helpers/chains.js +56 -0
  794. package/lib/openzeppelin-contracts/test/helpers/constants.js +7 -0
  795. package/lib/openzeppelin-contracts/test/helpers/deploy.js +14 -0
  796. package/lib/openzeppelin-contracts/test/helpers/eip712-types.js +61 -0
  797. package/lib/openzeppelin-contracts/test/helpers/eip712.js +45 -0
  798. package/lib/openzeppelin-contracts/test/helpers/enums.js +14 -0
  799. package/lib/openzeppelin-contracts/test/helpers/erc4337.js +217 -0
  800. package/lib/openzeppelin-contracts/test/helpers/erc7579.js +58 -0
  801. package/lib/openzeppelin-contracts/test/helpers/erc7739.js +118 -0
  802. package/lib/openzeppelin-contracts/test/helpers/governance.js +217 -0
  803. package/lib/openzeppelin-contracts/test/helpers/iterate.js +41 -0
  804. package/lib/openzeppelin-contracts/test/helpers/math.js +33 -0
  805. package/lib/openzeppelin-contracts/test/helpers/methods.js +14 -0
  806. package/lib/openzeppelin-contracts/test/helpers/precompiles.js +12 -0
  807. package/lib/openzeppelin-contracts/test/helpers/random.js +24 -0
  808. package/lib/openzeppelin-contracts/test/helpers/signers.js +222 -0
  809. package/lib/openzeppelin-contracts/test/helpers/storage.js +48 -0
  810. package/lib/openzeppelin-contracts/test/helpers/strings.js +5 -0
  811. package/lib/openzeppelin-contracts/test/helpers/time.js +33 -0
  812. package/lib/openzeppelin-contracts/test/helpers/txpool.js +29 -0
  813. package/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js +109 -0
  814. package/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.t.sol +279 -0
  815. package/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.test.js +384 -0
  816. package/lib/openzeppelin-contracts/test/proxy/Clones.behaviour.js +160 -0
  817. package/lib/openzeppelin-contracts/test/proxy/Clones.t.sol +91 -0
  818. package/lib/openzeppelin-contracts/test/proxy/Clones.test.js +177 -0
  819. package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js +23 -0
  820. package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Utils.test.js +162 -0
  821. package/lib/openzeppelin-contracts/test/proxy/Proxy.behaviour.js +185 -0
  822. package/lib/openzeppelin-contracts/test/proxy/beacon/BeaconProxy.test.js +141 -0
  823. package/lib/openzeppelin-contracts/test/proxy/beacon/UpgradeableBeacon.test.js +55 -0
  824. package/lib/openzeppelin-contracts/test/proxy/transparent/ProxyAdmin.test.js +82 -0
  825. package/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.behaviour.js +357 -0
  826. package/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.test.js +28 -0
  827. package/lib/openzeppelin-contracts/test/proxy/utils/Initializable.test.js +216 -0
  828. package/lib/openzeppelin-contracts/test/proxy/utils/UUPSUpgradeable.test.js +120 -0
  829. package/lib/openzeppelin-contracts/test/sanity.test.js +27 -0
  830. package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.behavior.js +763 -0
  831. package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.test.js +213 -0
  832. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Burnable.test.js +66 -0
  833. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Pausable.test.js +105 -0
  834. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Supply.test.js +119 -0
  835. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155URIStorage.test.js +70 -0
  836. package/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Holder.test.js +56 -0
  837. package/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Utils.test.js +299 -0
  838. package/lib/openzeppelin-contracts/test/token/ERC20/ERC20.behavior.js +269 -0
  839. package/lib/openzeppelin-contracts/test/token/ERC20/ERC20.test.js +199 -0
  840. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC1363.test.js +370 -0
  841. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Burnable.test.js +105 -0
  842. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Capped.test.js +55 -0
  843. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20FlashMint.test.js +164 -0
  844. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Pausable.test.js +129 -0
  845. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Permit.test.js +109 -0
  846. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Votes.test.js +546 -0
  847. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Wrapper.test.js +203 -0
  848. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.t.sol +41 -0
  849. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js +888 -0
  850. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20Bridgeable.test.js +89 -0
  851. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20TemporaryApproval.test.js +142 -0
  852. package/lib/openzeppelin-contracts/test/token/ERC20/utils/SafeERC20.test.js +463 -0
  853. package/lib/openzeppelin-contracts/test/token/ERC6909/ERC6909.behavior.js +216 -0
  854. package/lib/openzeppelin-contracts/test/token/ERC6909/ERC6909.test.js +104 -0
  855. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909ContentURI.test.js +49 -0
  856. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909Metadata.test.js +58 -0
  857. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909TokenSupply.test.js +53 -0
  858. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.behavior.js +946 -0
  859. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.test.js +23 -0
  860. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721Enumerable.test.js +28 -0
  861. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Burnable.test.js +77 -0
  862. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.t.sol +187 -0
  863. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.test.js +228 -0
  864. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Pausable.test.js +81 -0
  865. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Royalty.test.js +57 -0
  866. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721URIStorage.test.js +121 -0
  867. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Votes.test.js +194 -0
  868. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Wrapper.test.js +201 -0
  869. package/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Holder.test.js +20 -0
  870. package/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Utils.test.js +94 -0
  871. package/lib/openzeppelin-contracts/test/token/common/ERC2981.behavior.js +152 -0
  872. package/lib/openzeppelin-contracts/test/utils/Address.test.js +332 -0
  873. package/lib/openzeppelin-contracts/test/utils/Arrays.t.sol +248 -0
  874. package/lib/openzeppelin-contracts/test/utils/Arrays.test.js +284 -0
  875. package/lib/openzeppelin-contracts/test/utils/Base58.t.sol +24 -0
  876. package/lib/openzeppelin-contracts/test/utils/Base58.test.js +65 -0
  877. package/lib/openzeppelin-contracts/test/utils/Base64.t.sol +36 -0
  878. package/lib/openzeppelin-contracts/test/utils/Base64.test.js +79 -0
  879. package/lib/openzeppelin-contracts/test/utils/Blockhash.t.sol +101 -0
  880. package/lib/openzeppelin-contracts/test/utils/Blockhash.test.js +59 -0
  881. package/lib/openzeppelin-contracts/test/utils/Bytes.t.sol +251 -0
  882. package/lib/openzeppelin-contracts/test/utils/Bytes.test.js +359 -0
  883. package/lib/openzeppelin-contracts/test/utils/CAIP.test.js +56 -0
  884. package/lib/openzeppelin-contracts/test/utils/Calldata.test.js +22 -0
  885. package/lib/openzeppelin-contracts/test/utils/Context.behavior.js +48 -0
  886. package/lib/openzeppelin-contracts/test/utils/Context.test.js +18 -0
  887. package/lib/openzeppelin-contracts/test/utils/Create2.t.sol +17 -0
  888. package/lib/openzeppelin-contracts/test/utils/Create2.test.js +190 -0
  889. package/lib/openzeppelin-contracts/test/utils/LowLevelCall.test.js +257 -0
  890. package/lib/openzeppelin-contracts/test/utils/Memory.t.sol +38 -0
  891. package/lib/openzeppelin-contracts/test/utils/Memory.test.js +106 -0
  892. package/lib/openzeppelin-contracts/test/utils/Multicall.test.js +72 -0
  893. package/lib/openzeppelin-contracts/test/utils/Nonces.behavior.js +189 -0
  894. package/lib/openzeppelin-contracts/test/utils/Nonces.test.js +16 -0
  895. package/lib/openzeppelin-contracts/test/utils/NoncesKeyed.t.sol +51 -0
  896. package/lib/openzeppelin-contracts/test/utils/NoncesKeyed.test.js +17 -0
  897. package/lib/openzeppelin-contracts/test/utils/Packing.t.sol +993 -0
  898. package/lib/openzeppelin-contracts/test/utils/Packing.test.js +70 -0
  899. package/lib/openzeppelin-contracts/test/utils/Panic.test.js +37 -0
  900. package/lib/openzeppelin-contracts/test/utils/Pausable.test.js +90 -0
  901. package/lib/openzeppelin-contracts/test/utils/RLP.t.sol +135 -0
  902. package/lib/openzeppelin-contracts/test/utils/RLP.test.js +149 -0
  903. package/lib/openzeppelin-contracts/test/utils/ReentrancyGuard.test.js +58 -0
  904. package/lib/openzeppelin-contracts/test/utils/RelayedCall.test.js +217 -0
  905. package/lib/openzeppelin-contracts/test/utils/ShortStrings.t.sol +109 -0
  906. package/lib/openzeppelin-contracts/test/utils/ShortStrings.test.js +64 -0
  907. package/lib/openzeppelin-contracts/test/utils/SlotDerivation.t.sol +248 -0
  908. package/lib/openzeppelin-contracts/test/utils/SlotDerivation.test.js +58 -0
  909. package/lib/openzeppelin-contracts/test/utils/StorageSlot.test.js +73 -0
  910. package/lib/openzeppelin-contracts/test/utils/Strings.t.sol +50 -0
  911. package/lib/openzeppelin-contracts/test/utils/Strings.test.js +360 -0
  912. package/lib/openzeppelin-contracts/test/utils/TransientSlot.test.js +59 -0
  913. package/lib/openzeppelin-contracts/test/utils/cryptography/ECDSA.test.js +318 -0
  914. package/lib/openzeppelin-contracts/test/utils/cryptography/EIP712.test.js +105 -0
  915. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC1271.behavior.js +111 -0
  916. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC7739.test.js +42 -0
  917. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC7739Utils.test.js +203 -0
  918. package/lib/openzeppelin-contracts/test/utils/cryptography/MerkleProof.test.js +213 -0
  919. package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.t.sol +33 -0
  920. package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.test.js +97 -0
  921. package/lib/openzeppelin-contracts/test/utils/cryptography/P256.t.sol +65 -0
  922. package/lib/openzeppelin-contracts/test/utils/cryptography/P256.test.js +182 -0
  923. package/lib/openzeppelin-contracts/test/utils/cryptography/RSA.helper.js +17 -0
  924. package/lib/openzeppelin-contracts/test/utils/cryptography/RSA.test.js +102 -0
  925. package/lib/openzeppelin-contracts/test/utils/cryptography/SigVer15_186-3.rsp +3850 -0
  926. package/lib/openzeppelin-contracts/test/utils/cryptography/SignatureChecker.test.js +422 -0
  927. package/lib/openzeppelin-contracts/test/utils/cryptography/WebAuthn.t.sol +297 -0
  928. package/lib/openzeppelin-contracts/test/utils/cryptography/ecdsa_secp256r1_sha256_p1363_test.json +3719 -0
  929. package/lib/openzeppelin-contracts/test/utils/draft-InteroperableAddress.t.sol +99 -0
  930. package/lib/openzeppelin-contracts/test/utils/draft-InteroperableAddress.test.js +170 -0
  931. package/lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js +18 -0
  932. package/lib/openzeppelin-contracts/test/utils/introspection/ERC165Checker.test.js +272 -0
  933. package/lib/openzeppelin-contracts/test/utils/introspection/SupportsInterface.behavior.js +166 -0
  934. package/lib/openzeppelin-contracts/test/utils/math/Math.t.sol +370 -0
  935. package/lib/openzeppelin-contracts/test/utils/math/Math.test.js +746 -0
  936. package/lib/openzeppelin-contracts/test/utils/math/SafeCast.test.js +159 -0
  937. package/lib/openzeppelin-contracts/test/utils/math/SignedMath.t.sol +81 -0
  938. package/lib/openzeppelin-contracts/test/utils/math/SignedMath.test.js +53 -0
  939. package/lib/openzeppelin-contracts/test/utils/structs/Accumulators.t.sol +35 -0
  940. package/lib/openzeppelin-contracts/test/utils/structs/BitMap.test.js +149 -0
  941. package/lib/openzeppelin-contracts/test/utils/structs/Checkpoints.t.sol +440 -0
  942. package/lib/openzeppelin-contracts/test/utils/structs/Checkpoints.test.js +147 -0
  943. package/lib/openzeppelin-contracts/test/utils/structs/CircularBuffer.test.js +83 -0
  944. package/lib/openzeppelin-contracts/test/utils/structs/DoubleEndedQueue.test.js +102 -0
  945. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.behavior.js +214 -0
  946. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.test.js +83 -0
  947. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.behavior.js +175 -0
  948. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.test.js +66 -0
  949. package/lib/openzeppelin-contracts/test/utils/structs/Heap.t.sol +74 -0
  950. package/lib/openzeppelin-contracts/test/utils/structs/Heap.test.js +113 -0
  951. package/lib/openzeppelin-contracts/test/utils/structs/MerkleTree.test.js +180 -0
  952. package/lib/openzeppelin-contracts/test/utils/types/Time.test.js +135 -0
  953. package/package.json +3 -3
@@ -0,0 +1,514 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/MerkleProof.sol)
3
+ // This file was procedurally generated from scripts/generate/templates/MerkleProof.js.
4
+
5
+ pragma solidity ^0.8.20;
6
+
7
+ import {Hashes} from "./Hashes.sol";
8
+
9
+ /**
10
+ * @dev These functions deal with verification of Merkle Tree proofs.
11
+ *
12
+ * The tree and the proofs can be generated using our
13
+ * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
14
+ * You will find a quickstart guide in the readme.
15
+ *
16
+ * WARNING: You should avoid using leaf values that are 64 bytes long prior to
17
+ * hashing, or use a hash function other than keccak256 for hashing leaves.
18
+ * This is because the concatenation of a sorted pair of internal nodes in
19
+ * the Merkle tree could be reinterpreted as a leaf value.
20
+ * OpenZeppelin's JavaScript library generates Merkle trees that are safe
21
+ * against this attack out of the box.
22
+ *
23
+ * IMPORTANT: Consider memory side-effects when using custom hashing functions
24
+ * that access memory in an unsafe way.
25
+ *
26
+ * NOTE: This library supports proof verification for merkle trees built using
27
+ * custom _commutative_ hashing functions (i.e. `H(a, b) == H(b, a)`). Proving
28
+ * leaf inclusion in trees built using non-commutative hashing functions requires
29
+ * additional logic that is not supported by this library.
30
+ */
31
+ library MerkleProof {
32
+ /**
33
+ *@dev The multiproof provided is not valid.
34
+ */
35
+ error MerkleProofInvalidMultiproof();
36
+
37
+ /**
38
+ * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
39
+ * defined by `root`. For this, a `proof` must be provided, containing
40
+ * sibling hashes on the branch from the leaf to the root of the tree. Each
41
+ * pair of leaves and each pair of pre-images are assumed to be sorted.
42
+ *
43
+ * This version handles proofs in memory with the default hashing function.
44
+ */
45
+ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
46
+ return processProof(proof, leaf) == root;
47
+ }
48
+
49
+ /**
50
+ * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
51
+ * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
52
+ * hash matches the root of the tree. When processing the proof, the pairs
53
+ * of leaves & pre-images are assumed to be sorted.
54
+ *
55
+ * This version handles proofs in memory with the default hashing function.
56
+ */
57
+ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
58
+ bytes32 computedHash = leaf;
59
+ for (uint256 i = 0; i < proof.length; i++) {
60
+ computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]);
61
+ }
62
+ return computedHash;
63
+ }
64
+
65
+ /**
66
+ * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
67
+ * defined by `root`. For this, a `proof` must be provided, containing
68
+ * sibling hashes on the branch from the leaf to the root of the tree. Each
69
+ * pair of leaves and each pair of pre-images are assumed to be sorted.
70
+ *
71
+ * This version handles proofs in memory with a custom hashing function.
72
+ */
73
+ function verify(
74
+ bytes32[] memory proof,
75
+ bytes32 root,
76
+ bytes32 leaf,
77
+ function(bytes32, bytes32) view returns (bytes32) hasher
78
+ ) internal view returns (bool) {
79
+ return processProof(proof, leaf, hasher) == root;
80
+ }
81
+
82
+ /**
83
+ * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
84
+ * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
85
+ * hash matches the root of the tree. When processing the proof, the pairs
86
+ * of leaves & pre-images are assumed to be sorted.
87
+ *
88
+ * This version handles proofs in memory with a custom hashing function.
89
+ */
90
+ function processProof(
91
+ bytes32[] memory proof,
92
+ bytes32 leaf,
93
+ function(bytes32, bytes32) view returns (bytes32) hasher
94
+ ) internal view returns (bytes32) {
95
+ bytes32 computedHash = leaf;
96
+ for (uint256 i = 0; i < proof.length; i++) {
97
+ computedHash = hasher(computedHash, proof[i]);
98
+ }
99
+ return computedHash;
100
+ }
101
+
102
+ /**
103
+ * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
104
+ * defined by `root`. For this, a `proof` must be provided, containing
105
+ * sibling hashes on the branch from the leaf to the root of the tree. Each
106
+ * pair of leaves and each pair of pre-images are assumed to be sorted.
107
+ *
108
+ * This version handles proofs in calldata with the default hashing function.
109
+ */
110
+ function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
111
+ return processProofCalldata(proof, leaf) == root;
112
+ }
113
+
114
+ /**
115
+ * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
116
+ * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
117
+ * hash matches the root of the tree. When processing the proof, the pairs
118
+ * of leaves & pre-images are assumed to be sorted.
119
+ *
120
+ * This version handles proofs in calldata with the default hashing function.
121
+ */
122
+ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
123
+ bytes32 computedHash = leaf;
124
+ for (uint256 i = 0; i < proof.length; i++) {
125
+ computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]);
126
+ }
127
+ return computedHash;
128
+ }
129
+
130
+ /**
131
+ * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
132
+ * defined by `root`. For this, a `proof` must be provided, containing
133
+ * sibling hashes on the branch from the leaf to the root of the tree. Each
134
+ * pair of leaves and each pair of pre-images are assumed to be sorted.
135
+ *
136
+ * This version handles proofs in calldata with a custom hashing function.
137
+ */
138
+ function verifyCalldata(
139
+ bytes32[] calldata proof,
140
+ bytes32 root,
141
+ bytes32 leaf,
142
+ function(bytes32, bytes32) view returns (bytes32) hasher
143
+ ) internal view returns (bool) {
144
+ return processProofCalldata(proof, leaf, hasher) == root;
145
+ }
146
+
147
+ /**
148
+ * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
149
+ * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
150
+ * hash matches the root of the tree. When processing the proof, the pairs
151
+ * of leaves & pre-images are assumed to be sorted.
152
+ *
153
+ * This version handles proofs in calldata with a custom hashing function.
154
+ */
155
+ function processProofCalldata(
156
+ bytes32[] calldata proof,
157
+ bytes32 leaf,
158
+ function(bytes32, bytes32) view returns (bytes32) hasher
159
+ ) internal view returns (bytes32) {
160
+ bytes32 computedHash = leaf;
161
+ for (uint256 i = 0; i < proof.length; i++) {
162
+ computedHash = hasher(computedHash, proof[i]);
163
+ }
164
+ return computedHash;
165
+ }
166
+
167
+ /**
168
+ * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
169
+ * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
170
+ *
171
+ * This version handles multiproofs in memory with the default hashing function.
172
+ *
173
+ * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
174
+ *
175
+ * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
176
+ * The `leaves` must be validated independently. See {processMultiProof}.
177
+ */
178
+ function multiProofVerify(
179
+ bytes32[] memory proof,
180
+ bool[] memory proofFlags,
181
+ bytes32 root,
182
+ bytes32[] memory leaves
183
+ ) internal pure returns (bool) {
184
+ return processMultiProof(proof, proofFlags, leaves) == root;
185
+ }
186
+
187
+ /**
188
+ * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
189
+ * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
190
+ * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
191
+ * respectively.
192
+ *
193
+ * This version handles multiproofs in memory with the default hashing function.
194
+ *
195
+ * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
196
+ * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
197
+ * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
198
+ *
199
+ * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
200
+ * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
201
+ * validating the leaves elsewhere.
202
+ */
203
+ function processMultiProof(
204
+ bytes32[] memory proof,
205
+ bool[] memory proofFlags,
206
+ bytes32[] memory leaves
207
+ ) internal pure returns (bytes32 merkleRoot) {
208
+ // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
209
+ // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
210
+ // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
211
+ // the Merkle tree.
212
+ uint256 leavesLen = leaves.length;
213
+ uint256 proofFlagsLen = proofFlags.length;
214
+
215
+ // Check proof validity.
216
+ if (leavesLen + proof.length != proofFlagsLen + 1) {
217
+ revert MerkleProofInvalidMultiproof();
218
+ }
219
+
220
+ // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
221
+ // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
222
+ bytes32[] memory hashes = new bytes32[](proofFlagsLen);
223
+ uint256 leafPos = 0;
224
+ uint256 hashPos = 0;
225
+ uint256 proofPos = 0;
226
+ // At each step, we compute the next hash using two values:
227
+ // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
228
+ // get the next hash.
229
+ // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
230
+ // `proof` array.
231
+ for (uint256 i = 0; i < proofFlagsLen; i++) {
232
+ bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
233
+ bytes32 b = proofFlags[i]
234
+ ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
235
+ : proof[proofPos++];
236
+ hashes[i] = Hashes.commutativeKeccak256(a, b);
237
+ }
238
+
239
+ if (proofFlagsLen > 0) {
240
+ if (proofPos != proof.length) {
241
+ revert MerkleProofInvalidMultiproof();
242
+ }
243
+ unchecked {
244
+ return hashes[proofFlagsLen - 1];
245
+ }
246
+ } else if (leavesLen > 0) {
247
+ return leaves[0];
248
+ } else {
249
+ return proof[0];
250
+ }
251
+ }
252
+
253
+ /**
254
+ * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
255
+ * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
256
+ *
257
+ * This version handles multiproofs in memory with a custom hashing function.
258
+ *
259
+ * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
260
+ *
261
+ * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
262
+ * The `leaves` must be validated independently. See {processMultiProof}.
263
+ */
264
+ function multiProofVerify(
265
+ bytes32[] memory proof,
266
+ bool[] memory proofFlags,
267
+ bytes32 root,
268
+ bytes32[] memory leaves,
269
+ function(bytes32, bytes32) view returns (bytes32) hasher
270
+ ) internal view returns (bool) {
271
+ return processMultiProof(proof, proofFlags, leaves, hasher) == root;
272
+ }
273
+
274
+ /**
275
+ * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
276
+ * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
277
+ * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
278
+ * respectively.
279
+ *
280
+ * This version handles multiproofs in memory with a custom hashing function.
281
+ *
282
+ * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
283
+ * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
284
+ * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
285
+ *
286
+ * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
287
+ * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
288
+ * validating the leaves elsewhere.
289
+ */
290
+ function processMultiProof(
291
+ bytes32[] memory proof,
292
+ bool[] memory proofFlags,
293
+ bytes32[] memory leaves,
294
+ function(bytes32, bytes32) view returns (bytes32) hasher
295
+ ) internal view returns (bytes32 merkleRoot) {
296
+ // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
297
+ // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
298
+ // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
299
+ // the Merkle tree.
300
+ uint256 leavesLen = leaves.length;
301
+ uint256 proofFlagsLen = proofFlags.length;
302
+
303
+ // Check proof validity.
304
+ if (leavesLen + proof.length != proofFlagsLen + 1) {
305
+ revert MerkleProofInvalidMultiproof();
306
+ }
307
+
308
+ // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
309
+ // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
310
+ bytes32[] memory hashes = new bytes32[](proofFlagsLen);
311
+ uint256 leafPos = 0;
312
+ uint256 hashPos = 0;
313
+ uint256 proofPos = 0;
314
+ // At each step, we compute the next hash using two values:
315
+ // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
316
+ // get the next hash.
317
+ // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
318
+ // `proof` array.
319
+ for (uint256 i = 0; i < proofFlagsLen; i++) {
320
+ bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
321
+ bytes32 b = proofFlags[i]
322
+ ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
323
+ : proof[proofPos++];
324
+ hashes[i] = hasher(a, b);
325
+ }
326
+
327
+ if (proofFlagsLen > 0) {
328
+ if (proofPos != proof.length) {
329
+ revert MerkleProofInvalidMultiproof();
330
+ }
331
+ unchecked {
332
+ return hashes[proofFlagsLen - 1];
333
+ }
334
+ } else if (leavesLen > 0) {
335
+ return leaves[0];
336
+ } else {
337
+ return proof[0];
338
+ }
339
+ }
340
+
341
+ /**
342
+ * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
343
+ * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
344
+ *
345
+ * This version handles multiproofs in calldata with the default hashing function.
346
+ *
347
+ * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
348
+ *
349
+ * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
350
+ * The `leaves` must be validated independently. See {processMultiProofCalldata}.
351
+ */
352
+ function multiProofVerifyCalldata(
353
+ bytes32[] calldata proof,
354
+ bool[] calldata proofFlags,
355
+ bytes32 root,
356
+ bytes32[] memory leaves
357
+ ) internal pure returns (bool) {
358
+ return processMultiProofCalldata(proof, proofFlags, leaves) == root;
359
+ }
360
+
361
+ /**
362
+ * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
363
+ * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
364
+ * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
365
+ * respectively.
366
+ *
367
+ * This version handles multiproofs in calldata with the default hashing function.
368
+ *
369
+ * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
370
+ * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
371
+ * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
372
+ *
373
+ * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
374
+ * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
375
+ * validating the leaves elsewhere.
376
+ */
377
+ function processMultiProofCalldata(
378
+ bytes32[] calldata proof,
379
+ bool[] calldata proofFlags,
380
+ bytes32[] memory leaves
381
+ ) internal pure returns (bytes32 merkleRoot) {
382
+ // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
383
+ // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
384
+ // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
385
+ // the Merkle tree.
386
+ uint256 leavesLen = leaves.length;
387
+ uint256 proofFlagsLen = proofFlags.length;
388
+
389
+ // Check proof validity.
390
+ if (leavesLen + proof.length != proofFlagsLen + 1) {
391
+ revert MerkleProofInvalidMultiproof();
392
+ }
393
+
394
+ // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
395
+ // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
396
+ bytes32[] memory hashes = new bytes32[](proofFlagsLen);
397
+ uint256 leafPos = 0;
398
+ uint256 hashPos = 0;
399
+ uint256 proofPos = 0;
400
+ // At each step, we compute the next hash using two values:
401
+ // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
402
+ // get the next hash.
403
+ // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
404
+ // `proof` array.
405
+ for (uint256 i = 0; i < proofFlagsLen; i++) {
406
+ bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
407
+ bytes32 b = proofFlags[i]
408
+ ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
409
+ : proof[proofPos++];
410
+ hashes[i] = Hashes.commutativeKeccak256(a, b);
411
+ }
412
+
413
+ if (proofFlagsLen > 0) {
414
+ if (proofPos != proof.length) {
415
+ revert MerkleProofInvalidMultiproof();
416
+ }
417
+ unchecked {
418
+ return hashes[proofFlagsLen - 1];
419
+ }
420
+ } else if (leavesLen > 0) {
421
+ return leaves[0];
422
+ } else {
423
+ return proof[0];
424
+ }
425
+ }
426
+
427
+ /**
428
+ * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
429
+ * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
430
+ *
431
+ * This version handles multiproofs in calldata with a custom hashing function.
432
+ *
433
+ * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
434
+ *
435
+ * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
436
+ * The `leaves` must be validated independently. See {processMultiProofCalldata}.
437
+ */
438
+ function multiProofVerifyCalldata(
439
+ bytes32[] calldata proof,
440
+ bool[] calldata proofFlags,
441
+ bytes32 root,
442
+ bytes32[] memory leaves,
443
+ function(bytes32, bytes32) view returns (bytes32) hasher
444
+ ) internal view returns (bool) {
445
+ return processMultiProofCalldata(proof, proofFlags, leaves, hasher) == root;
446
+ }
447
+
448
+ /**
449
+ * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
450
+ * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
451
+ * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
452
+ * respectively.
453
+ *
454
+ * This version handles multiproofs in calldata with a custom hashing function.
455
+ *
456
+ * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
457
+ * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
458
+ * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
459
+ *
460
+ * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
461
+ * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
462
+ * validating the leaves elsewhere.
463
+ */
464
+ function processMultiProofCalldata(
465
+ bytes32[] calldata proof,
466
+ bool[] calldata proofFlags,
467
+ bytes32[] memory leaves,
468
+ function(bytes32, bytes32) view returns (bytes32) hasher
469
+ ) internal view returns (bytes32 merkleRoot) {
470
+ // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
471
+ // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
472
+ // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
473
+ // the Merkle tree.
474
+ uint256 leavesLen = leaves.length;
475
+ uint256 proofFlagsLen = proofFlags.length;
476
+
477
+ // Check proof validity.
478
+ if (leavesLen + proof.length != proofFlagsLen + 1) {
479
+ revert MerkleProofInvalidMultiproof();
480
+ }
481
+
482
+ // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
483
+ // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
484
+ bytes32[] memory hashes = new bytes32[](proofFlagsLen);
485
+ uint256 leafPos = 0;
486
+ uint256 hashPos = 0;
487
+ uint256 proofPos = 0;
488
+ // At each step, we compute the next hash using two values:
489
+ // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
490
+ // get the next hash.
491
+ // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
492
+ // `proof` array.
493
+ for (uint256 i = 0; i < proofFlagsLen; i++) {
494
+ bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
495
+ bytes32 b = proofFlags[i]
496
+ ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
497
+ : proof[proofPos++];
498
+ hashes[i] = hasher(a, b);
499
+ }
500
+
501
+ if (proofFlagsLen > 0) {
502
+ if (proofPos != proof.length) {
503
+ revert MerkleProofInvalidMultiproof();
504
+ }
505
+ unchecked {
506
+ return hashes[proofFlagsLen - 1];
507
+ }
508
+ } else if (leavesLen > 0) {
509
+ return leaves[0];
510
+ } else {
511
+ return proof[0];
512
+ }
513
+ }
514
+ }
@@ -0,0 +1,99 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.5.0) (utils/cryptography/MessageHashUtils.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ import {Strings} from "../Strings.sol";
7
+
8
+ /**
9
+ * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.
10
+ *
11
+ * The library provides methods for generating a hash of a message that conforms to the
12
+ * https://eips.ethereum.org/EIPS/eip-191[ERC-191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]
13
+ * specifications.
14
+ */
15
+ library MessageHashUtils {
16
+ /**
17
+ * @dev Returns the keccak256 digest of an ERC-191 signed data with version
18
+ * `0x45` (`personal_sign` messages).
19
+ *
20
+ * The digest is calculated by prefixing a bytes32 `messageHash` with
21
+ * `"\x19Ethereum Signed Message:\n32"` and hashing the result. It corresponds with the
22
+ * hash signed when using the https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sign[`eth_sign`] JSON-RPC method.
23
+ *
24
+ * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with
25
+ * keccak256, although any bytes32 value can be safely used because the final digest will
26
+ * be re-hashed.
27
+ *
28
+ * See {ECDSA-recover}.
29
+ */
30
+ function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {
31
+ assembly ("memory-safe") {
32
+ mstore(0x00, "\x19Ethereum Signed Message:\n32") // 32 is the bytes-length of messageHash
33
+ mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix
34
+ digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)
35
+ }
36
+ }
37
+
38
+ /**
39
+ * @dev Returns the keccak256 digest of an ERC-191 signed data with version
40
+ * `0x45` (`personal_sign` messages).
41
+ *
42
+ * The digest is calculated by prefixing an arbitrary `message` with
43
+ * `"\x19Ethereum Signed Message:\n" + len(message)` and hashing the result. It corresponds with the
44
+ * hash signed when using the https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sign[`eth_sign`] JSON-RPC method.
45
+ *
46
+ * See {ECDSA-recover}.
47
+ */
48
+ function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {
49
+ return
50
+ keccak256(bytes.concat("\x19Ethereum Signed Message:\n", bytes(Strings.toString(message.length)), message));
51
+ }
52
+
53
+ /**
54
+ * @dev Returns the keccak256 digest of an ERC-191 signed data with version
55
+ * `0x00` (data with intended validator).
56
+ *
57
+ * The digest is calculated by prefixing an arbitrary `data` with `"\x19\x00"` and the intended
58
+ * `validator` address. Then hashing the result.
59
+ *
60
+ * See {ECDSA-recover}.
61
+ */
62
+ function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {
63
+ return keccak256(abi.encodePacked(hex"19_00", validator, data));
64
+ }
65
+
66
+ /**
67
+ * @dev Variant of {toDataWithIntendedValidatorHash-address-bytes} optimized for cases where `data` is a bytes32.
68
+ */
69
+ function toDataWithIntendedValidatorHash(
70
+ address validator,
71
+ bytes32 messageHash
72
+ ) internal pure returns (bytes32 digest) {
73
+ assembly ("memory-safe") {
74
+ mstore(0x00, hex"19_00")
75
+ mstore(0x02, shl(96, validator))
76
+ mstore(0x16, messageHash)
77
+ digest := keccak256(0x00, 0x36)
78
+ }
79
+ }
80
+
81
+ /**
82
+ * @dev Returns the keccak256 digest of an EIP-712 typed data (ERC-191 version `0x01`).
83
+ *
84
+ * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with
85
+ * `\x19\x01` and hashing the result. It corresponds to the hash signed by the
86
+ * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.
87
+ *
88
+ * See {ECDSA-recover}.
89
+ */
90
+ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {
91
+ assembly ("memory-safe") {
92
+ let ptr := mload(0x40)
93
+ mstore(ptr, hex"19_01")
94
+ mstore(add(ptr, 0x02), domainSeparator)
95
+ mstore(add(ptr, 0x22), structHash)
96
+ digest := keccak256(ptr, 0x42)
97
+ }
98
+ }
99
+ }