@moltium/world-core 0.1.2 → 0.1.4

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 (947) hide show
  1. package/lib/forge-std/.gitattributes +1 -0
  2. package/lib/forge-std/.github/CODEOWNERS +1 -0
  3. package/lib/forge-std/.github/dependabot.yml +6 -0
  4. package/lib/forge-std/.github/workflows/ci.yml +125 -0
  5. package/lib/forge-std/.github/workflows/sync.yml +36 -0
  6. package/lib/forge-std/CONTRIBUTING.md +193 -0
  7. package/lib/forge-std/LICENSE-APACHE +203 -0
  8. package/lib/forge-std/LICENSE-MIT +25 -0
  9. package/lib/forge-std/README.md +268 -0
  10. package/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
  11. package/lib/forge-std/foundry.toml +18 -0
  12. package/lib/forge-std/package.json +16 -0
  13. package/lib/forge-std/scripts/vm.py +636 -0
  14. package/lib/forge-std/src/Base.sol +48 -0
  15. package/lib/forge-std/src/Config.sol +60 -0
  16. package/lib/forge-std/src/LibVariable.sol +477 -0
  17. package/lib/forge-std/src/Script.sol +28 -0
  18. package/lib/forge-std/src/StdAssertions.sol +779 -0
  19. package/lib/forge-std/src/StdChains.sol +295 -0
  20. package/lib/forge-std/src/StdCheats.sol +825 -0
  21. package/lib/forge-std/src/StdConfig.sol +632 -0
  22. package/lib/forge-std/src/StdConstants.sol +30 -0
  23. package/lib/forge-std/src/StdError.sol +15 -0
  24. package/lib/forge-std/src/StdInvariant.sol +120 -0
  25. package/lib/forge-std/src/StdJson.sol +275 -0
  26. package/lib/forge-std/src/StdMath.sol +47 -0
  27. package/lib/forge-std/src/StdStorage.sol +475 -0
  28. package/lib/forge-std/src/StdStyle.sol +333 -0
  29. package/lib/forge-std/src/StdToml.sol +275 -0
  30. package/lib/forge-std/src/StdUtils.sol +200 -0
  31. package/lib/forge-std/src/Test.sol +32 -0
  32. package/lib/forge-std/src/Vm.sol +2500 -0
  33. package/lib/forge-std/src/console.sol +1551 -0
  34. package/lib/forge-std/src/console2.sol +4 -0
  35. package/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  36. package/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  37. package/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  38. package/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  39. package/lib/forge-std/src/interfaces/IERC6909.sol +72 -0
  40. package/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  41. package/lib/forge-std/src/interfaces/IERC7540.sol +144 -0
  42. package/lib/forge-std/src/interfaces/IERC7575.sol +241 -0
  43. package/lib/forge-std/src/interfaces/IMulticall3.sol +68 -0
  44. package/lib/forge-std/src/safeconsole.sol +13248 -0
  45. package/lib/forge-std/test/CommonBase.t.sol +44 -0
  46. package/lib/forge-std/test/Config.t.sol +381 -0
  47. package/lib/forge-std/test/LibVariable.t.sol +452 -0
  48. package/lib/forge-std/test/StdAssertions.t.sol +141 -0
  49. package/lib/forge-std/test/StdChains.t.sol +227 -0
  50. package/lib/forge-std/test/StdCheats.t.sol +638 -0
  51. package/lib/forge-std/test/StdConstants.t.sol +38 -0
  52. package/lib/forge-std/test/StdError.t.sol +119 -0
  53. package/lib/forge-std/test/StdJson.t.sol +49 -0
  54. package/lib/forge-std/test/StdMath.t.sol +202 -0
  55. package/lib/forge-std/test/StdStorage.t.sol +485 -0
  56. package/lib/forge-std/test/StdStyle.t.sol +110 -0
  57. package/lib/forge-std/test/StdToml.t.sol +49 -0
  58. package/lib/forge-std/test/StdUtils.t.sol +342 -0
  59. package/lib/forge-std/test/Vm.t.sol +18 -0
  60. package/lib/forge-std/test/compilation/CompilationScript.sol +8 -0
  61. package/lib/forge-std/test/compilation/CompilationScriptBase.sol +8 -0
  62. package/lib/forge-std/test/compilation/CompilationTest.sol +8 -0
  63. package/lib/forge-std/test/compilation/CompilationTestBase.sol +8 -0
  64. package/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  65. package/lib/forge-std/test/fixtures/config.toml +81 -0
  66. package/lib/forge-std/test/fixtures/test.json +8 -0
  67. package/lib/forge-std/test/fixtures/test.toml +6 -0
  68. package/lib/openzeppelin-contracts/.changeset/config.json +12 -0
  69. package/lib/openzeppelin-contracts/.codecov.yml +16 -0
  70. package/lib/openzeppelin-contracts/.editorconfig +21 -0
  71. package/lib/openzeppelin-contracts/.gitattributes +3 -0
  72. package/lib/openzeppelin-contracts/.github/CODEOWNERS +10 -0
  73. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
  74. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml +4 -0
  75. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
  76. package/lib/openzeppelin-contracts/.github/PULL_REQUEST_TEMPLATE.md +20 -0
  77. package/lib/openzeppelin-contracts/.github/actions/gas-compare/action.yml +51 -0
  78. package/lib/openzeppelin-contracts/.github/actions/setup/action.yml +22 -0
  79. package/lib/openzeppelin-contracts/.github/actions/storage-layout/action.yml +57 -0
  80. package/lib/openzeppelin-contracts/.github/workflows/actionlint.yml +18 -0
  81. package/lib/openzeppelin-contracts/.github/workflows/changeset.yml +28 -0
  82. package/lib/openzeppelin-contracts/.github/workflows/checks.yml +132 -0
  83. package/lib/openzeppelin-contracts/.github/workflows/docs.yml +19 -0
  84. package/lib/openzeppelin-contracts/.github/workflows/formal-verification.yml +88 -0
  85. package/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +214 -0
  86. package/lib/openzeppelin-contracts/.github/workflows/upgradeable.yml +34 -0
  87. package/lib/openzeppelin-contracts/.gitmodules +10 -0
  88. package/lib/openzeppelin-contracts/.husky/pre-commit +2 -0
  89. package/lib/openzeppelin-contracts/.mocharc.js +4 -0
  90. package/lib/openzeppelin-contracts/.prettierrc +15 -0
  91. package/lib/openzeppelin-contracts/.solcover.js +21 -0
  92. package/lib/openzeppelin-contracts/CHANGELOG.md +1355 -0
  93. package/lib/openzeppelin-contracts/CODE_OF_CONDUCT.md +73 -0
  94. package/lib/openzeppelin-contracts/CONTRIBUTING.md +36 -0
  95. package/lib/openzeppelin-contracts/FUNDING.json +10 -0
  96. package/lib/openzeppelin-contracts/GUIDELINES.md +170 -0
  97. package/lib/openzeppelin-contracts/LICENSE +22 -0
  98. package/lib/openzeppelin-contracts/README.md +106 -0
  99. package/lib/openzeppelin-contracts/RELEASING.md +45 -0
  100. package/lib/openzeppelin-contracts/SECURITY.md +43 -0
  101. package/lib/openzeppelin-contracts/audits/2017-03.md +292 -0
  102. package/lib/openzeppelin-contracts/audits/2018-10.pdf +0 -0
  103. package/lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf +0 -0
  104. package/lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf +0 -0
  105. package/lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf +0 -0
  106. package/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf +0 -0
  107. package/lib/openzeppelin-contracts/audits/2024-10-v5.1.pdf +0 -0
  108. package/lib/openzeppelin-contracts/audits/2024-12-v5.2.pdf +0 -0
  109. package/lib/openzeppelin-contracts/audits/2025-04-v5.3.pdf +0 -0
  110. package/lib/openzeppelin-contracts/audits/2025-07-v5.4.pdf +0 -0
  111. package/lib/openzeppelin-contracts/audits/README.md +21 -0
  112. package/lib/openzeppelin-contracts/certora/Makefile +54 -0
  113. package/lib/openzeppelin-contracts/certora/README.md +60 -0
  114. package/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch +97 -0
  115. package/lib/openzeppelin-contracts/certora/diff/account_extensions_draft-AccountERC7579.sol.patch +25 -0
  116. package/lib/openzeppelin-contracts/certora/diff/token_ERC721_ERC721.sol.patch +11 -0
  117. package/lib/openzeppelin-contracts/certora/harnesses/AccessControlDefaultAdminRulesHarness.sol +46 -0
  118. package/lib/openzeppelin-contracts/certora/harnesses/AccessControlHarness.sol +6 -0
  119. package/lib/openzeppelin-contracts/certora/harnesses/AccessManagedHarness.sol +36 -0
  120. package/lib/openzeppelin-contracts/certora/harnesses/AccessManagerHarness.sol +116 -0
  121. package/lib/openzeppelin-contracts/certora/harnesses/AccountHarness.sol +60 -0
  122. package/lib/openzeppelin-contracts/certora/harnesses/DoubleEndedQueueHarness.sol +58 -0
  123. package/lib/openzeppelin-contracts/certora/harnesses/ERC20FlashMintHarness.sol +36 -0
  124. package/lib/openzeppelin-contracts/certora/harnesses/ERC20PermitHarness.sol +16 -0
  125. package/lib/openzeppelin-contracts/certora/harnesses/ERC20WrapperHarness.sol +22 -0
  126. package/lib/openzeppelin-contracts/certora/harnesses/ERC3156FlashBorrowerHarness.sol +13 -0
  127. package/lib/openzeppelin-contracts/certora/harnesses/ERC721Harness.sol +37 -0
  128. package/lib/openzeppelin-contracts/certora/harnesses/ERC721ReceiverHarness.sol +11 -0
  129. package/lib/openzeppelin-contracts/certora/harnesses/EnumerableMapHarness.sol +55 -0
  130. package/lib/openzeppelin-contracts/certora/harnesses/EnumerableSetHarness.sol +35 -0
  131. package/lib/openzeppelin-contracts/certora/harnesses/InitializableHarness.sol +23 -0
  132. package/lib/openzeppelin-contracts/certora/harnesses/NoncesHarness.sol +14 -0
  133. package/lib/openzeppelin-contracts/certora/harnesses/Ownable2StepHarness.sol +10 -0
  134. package/lib/openzeppelin-contracts/certora/harnesses/OwnableHarness.sol +10 -0
  135. package/lib/openzeppelin-contracts/certora/harnesses/PausableHarness.sol +18 -0
  136. package/lib/openzeppelin-contracts/certora/harnesses/TimelockControllerHarness.sol +13 -0
  137. package/lib/openzeppelin-contracts/certora/reports/2021-10.pdf +0 -0
  138. package/lib/openzeppelin-contracts/certora/reports/2022-03.pdf +0 -0
  139. package/lib/openzeppelin-contracts/certora/reports/2022-05.pdf +0 -0
  140. package/lib/openzeppelin-contracts/certora/run.js +68 -0
  141. package/lib/openzeppelin-contracts/certora/specs/AccessControl.conf +8 -0
  142. package/lib/openzeppelin-contracts/certora/specs/AccessControl.spec +119 -0
  143. package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.conf +8 -0
  144. package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.spec +467 -0
  145. package/lib/openzeppelin-contracts/certora/specs/AccessManaged.conf +14 -0
  146. package/lib/openzeppelin-contracts/certora/specs/AccessManaged.spec +49 -0
  147. package/lib/openzeppelin-contracts/certora/specs/AccessManager.conf +10 -0
  148. package/lib/openzeppelin-contracts/certora/specs/AccessManager.spec +837 -0
  149. package/lib/openzeppelin-contracts/certora/specs/Account.conf +9 -0
  150. package/lib/openzeppelin-contracts/certora/specs/Account.spec +490 -0
  151. package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.conf +8 -0
  152. package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.spec +300 -0
  153. package/lib/openzeppelin-contracts/certora/specs/ERC20.conf +9 -0
  154. package/lib/openzeppelin-contracts/certora/specs/ERC20.spec +352 -0
  155. package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.conf +10 -0
  156. package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.spec +55 -0
  157. package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.conf +13 -0
  158. package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.spec +226 -0
  159. package/lib/openzeppelin-contracts/certora/specs/ERC721.conf +10 -0
  160. package/lib/openzeppelin-contracts/certora/specs/ERC721.spec +695 -0
  161. package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.conf +8 -0
  162. package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.spec +364 -0
  163. package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.conf +8 -0
  164. package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.spec +272 -0
  165. package/lib/openzeppelin-contracts/certora/specs/Initializable.conf +8 -0
  166. package/lib/openzeppelin-contracts/certora/specs/Initializable.spec +176 -0
  167. package/lib/openzeppelin-contracts/certora/specs/Nonces.conf +8 -0
  168. package/lib/openzeppelin-contracts/certora/specs/Nonces.spec +92 -0
  169. package/lib/openzeppelin-contracts/certora/specs/Ownable.conf +8 -0
  170. package/lib/openzeppelin-contracts/certora/specs/Ownable.spec +77 -0
  171. package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.conf +8 -0
  172. package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.spec +108 -0
  173. package/lib/openzeppelin-contracts/certora/specs/Pausable.conf +8 -0
  174. package/lib/openzeppelin-contracts/certora/specs/Pausable.spec +96 -0
  175. package/lib/openzeppelin-contracts/certora/specs/TimelockController.conf +10 -0
  176. package/lib/openzeppelin-contracts/certora/specs/TimelockController.spec +299 -0
  177. package/lib/openzeppelin-contracts/certora/specs/helpers/helpers.spec +13 -0
  178. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControl.spec +8 -0
  179. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControlDefaultAdminRules.spec +36 -0
  180. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessManaged.spec +5 -0
  181. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessManager.spec +33 -0
  182. package/lib/openzeppelin-contracts/certora/specs/methods/IAccount.spec +34 -0
  183. package/lib/openzeppelin-contracts/certora/specs/methods/IERC20.spec +11 -0
  184. package/lib/openzeppelin-contracts/certora/specs/methods/IERC2612.spec +5 -0
  185. package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashBorrower.spec +3 -0
  186. package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashLender.spec +5 -0
  187. package/lib/openzeppelin-contracts/certora/specs/methods/IERC5313.spec +3 -0
  188. package/lib/openzeppelin-contracts/certora/specs/methods/IERC721.spec +17 -0
  189. package/lib/openzeppelin-contracts/certora/specs/methods/IERC721Receiver.spec +3 -0
  190. package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable.spec +5 -0
  191. package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable2Step.spec +7 -0
  192. package/lib/openzeppelin-contracts/contracts/access/AccessControl.sol +207 -0
  193. package/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol +98 -0
  194. package/lib/openzeppelin-contracts/contracts/access/Ownable.sol +100 -0
  195. package/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol +67 -0
  196. package/lib/openzeppelin-contracts/contracts/access/README.adoc +45 -0
  197. package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol +372 -0
  198. package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol +81 -0
  199. package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol +192 -0
  200. package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol +31 -0
  201. package/lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol +112 -0
  202. package/lib/openzeppelin-contracts/contracts/access/manager/AccessManager.sol +741 -0
  203. package/lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol +36 -0
  204. package/lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol +32 -0
  205. package/lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol +399 -0
  206. package/lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol +14 -0
  207. package/lib/openzeppelin-contracts/contracts/account/Account.sol +151 -0
  208. package/lib/openzeppelin-contracts/contracts/account/README.adoc +30 -0
  209. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-AccountERC7579.sol +419 -0
  210. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-AccountERC7579Hooked.sol +107 -0
  211. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-ERC7821.sol +70 -0
  212. package/lib/openzeppelin-contracts/contracts/account/utils/EIP7702Utils.sol +21 -0
  213. package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC4337Utils.sol +159 -0
  214. package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC7579Utils.sol +280 -0
  215. package/lib/openzeppelin-contracts/contracts/crosschain/ERC7786Recipient.sol +70 -0
  216. package/lib/openzeppelin-contracts/contracts/crosschain/README.adoc +12 -0
  217. package/lib/openzeppelin-contracts/contracts/finance/README.adoc +14 -0
  218. package/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol +159 -0
  219. package/lib/openzeppelin-contracts/contracts/finance/VestingWalletCliff.sol +54 -0
  220. package/lib/openzeppelin-contracts/contracts/governance/Governor.sol +818 -0
  221. package/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol +454 -0
  222. package/lib/openzeppelin-contracts/contracts/governance/README.adoc +197 -0
  223. package/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol +471 -0
  224. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingFractional.sol +190 -0
  225. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingOverridable.sol +222 -0
  226. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol +96 -0
  227. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorNoncesKeyed.sol +91 -0
  228. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol +92 -0
  229. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorProposalGuardian.sol +59 -0
  230. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSequentialProposalId.sol +75 -0
  231. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol +106 -0
  232. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorStorage.sol +125 -0
  233. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSuperQuorum.sol +59 -0
  234. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockAccess.sol +346 -0
  235. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol +165 -0
  236. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol +167 -0
  237. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol +63 -0
  238. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol +113 -0
  239. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol +135 -0
  240. package/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol +60 -0
  241. package/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol +252 -0
  242. package/lib/openzeppelin-contracts/contracts/governance/utils/VotesExtended.sol +84 -0
  243. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol +6 -0
  244. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol +6 -0
  245. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol +6 -0
  246. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol +17 -0
  247. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol +86 -0
  248. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol +32 -0
  249. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol +26 -0
  250. package/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol +6 -0
  251. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol +20 -0
  252. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol +112 -0
  253. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol +24 -0
  254. package/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol +6 -0
  255. package/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol +6 -0
  256. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol +19 -0
  257. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol +8 -0
  258. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol +26 -0
  259. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol +7 -0
  260. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol +27 -0
  261. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol +41 -0
  262. package/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol +230 -0
  263. package/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol +20 -0
  264. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol +28 -0
  265. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol +16 -0
  266. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol +9 -0
  267. package/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol +17 -0
  268. package/lib/openzeppelin-contracts/contracts/interfaces/IERC6909.sol +125 -0
  269. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol +6 -0
  270. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol +6 -0
  271. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol +6 -0
  272. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol +6 -0
  273. package/lib/openzeppelin-contracts/contracts/interfaces/IERC7751.sol +12 -0
  274. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol +200 -0
  275. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol +35 -0
  276. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol +35 -0
  277. package/lib/openzeppelin-contracts/contracts/interfaces/IERC7913.sol +18 -0
  278. package/lib/openzeppelin-contracts/contracts/interfaces/README.adoc +111 -0
  279. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol +20 -0
  280. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC4337.sol +253 -0
  281. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol +162 -0
  282. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7579.sol +227 -0
  283. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7674.sol +17 -0
  284. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7786.sol +64 -0
  285. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7802.sol +32 -0
  286. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7821.sol +44 -0
  287. package/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol +90 -0
  288. package/lib/openzeppelin-contracts/contracts/metatx/ERC2771Forwarder.sol +372 -0
  289. package/lib/openzeppelin-contracts/contracts/metatx/README.adoc +17 -0
  290. package/lib/openzeppelin-contracts/contracts/mocks/AccessManagedTarget.sol +34 -0
  291. package/lib/openzeppelin-contracts/contracts/mocks/AccessManagerMock.sol +20 -0
  292. package/lib/openzeppelin-contracts/contracts/mocks/ArraysMock.sol +171 -0
  293. package/lib/openzeppelin-contracts/contracts/mocks/AuthorityMock.sol +69 -0
  294. package/lib/openzeppelin-contracts/contracts/mocks/Base64Dirty.sol +19 -0
  295. package/lib/openzeppelin-contracts/contracts/mocks/BatchCaller.sol +20 -0
  296. package/lib/openzeppelin-contracts/contracts/mocks/CallReceiverMock.sol +106 -0
  297. package/lib/openzeppelin-contracts/contracts/mocks/ConstructorMock.sol +34 -0
  298. package/lib/openzeppelin-contracts/contracts/mocks/ContextMock.sol +35 -0
  299. package/lib/openzeppelin-contracts/contracts/mocks/DummyImplementation.sol +65 -0
  300. package/lib/openzeppelin-contracts/contracts/mocks/EIP712Verifier.sol +16 -0
  301. package/lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol +24 -0
  302. package/lib/openzeppelin-contracts/contracts/mocks/ERC165Mock.sol +100 -0
  303. package/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol +28 -0
  304. package/lib/openzeppelin-contracts/contracts/mocks/ERC3156FlashBorrowerMock.sol +53 -0
  305. package/lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol +17 -0
  306. package/lib/openzeppelin-contracts/contracts/mocks/InitializableMock.sol +130 -0
  307. package/lib/openzeppelin-contracts/contracts/mocks/MerkleProofCustomHashMock.sol +62 -0
  308. package/lib/openzeppelin-contracts/contracts/mocks/MerkleTreeMock.sol +52 -0
  309. package/lib/openzeppelin-contracts/contracts/mocks/MulticallHelper.sol +23 -0
  310. package/lib/openzeppelin-contracts/contracts/mocks/MultipleInheritanceInitializableMocks.sol +131 -0
  311. package/lib/openzeppelin-contracts/contracts/mocks/PausableMock.sol +31 -0
  312. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol +17 -0
  313. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyMock.sol +59 -0
  314. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyTransientMock.sol +59 -0
  315. package/lib/openzeppelin-contracts/contracts/mocks/RegressionImplementation.sol +61 -0
  316. package/lib/openzeppelin-contracts/contracts/mocks/SingleInheritanceInitializableMocks.sol +49 -0
  317. package/lib/openzeppelin-contracts/contracts/mocks/Stateless.sol +61 -0
  318. package/lib/openzeppelin-contracts/contracts/mocks/StorageSlotMock.sol +87 -0
  319. package/lib/openzeppelin-contracts/contracts/mocks/TimelockReentrant.sol +26 -0
  320. package/lib/openzeppelin-contracts/contracts/mocks/TransientSlotMock.sol +61 -0
  321. package/lib/openzeppelin-contracts/contracts/mocks/UpgradeableBeaconMock.sol +27 -0
  322. package/lib/openzeppelin-contracts/contracts/mocks/VotesExtendedMock.sol +42 -0
  323. package/lib/openzeppelin-contracts/contracts/mocks/VotesMock.sol +42 -0
  324. package/lib/openzeppelin-contracts/contracts/mocks/account/AccountMock.sol +181 -0
  325. package/lib/openzeppelin-contracts/contracts/mocks/account/modules/ERC7579Mock.sol +122 -0
  326. package/lib/openzeppelin-contracts/contracts/mocks/account/utils/ERC7579UtilsMock.sol +23 -0
  327. package/lib/openzeppelin-contracts/contracts/mocks/compound/CompTimelock.sol +174 -0
  328. package/lib/openzeppelin-contracts/contracts/mocks/crosschain/ERC7786GatewayMock.sol +56 -0
  329. package/lib/openzeppelin-contracts/contracts/mocks/crosschain/ERC7786RecipientMock.sol +31 -0
  330. package/lib/openzeppelin-contracts/contracts/mocks/docs/ERC20WithAutoMinerReward.sol +22 -0
  331. package/lib/openzeppelin-contracts/contracts/mocks/docs/ERC4626Fees.sol +109 -0
  332. package/lib/openzeppelin-contracts/contracts/mocks/docs/MyNFT.sol +9 -0
  333. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintBase.sol +25 -0
  334. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintMissing.sol +24 -0
  335. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintOnlyRole.sol +23 -0
  336. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlModified.sol +14 -0
  337. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessManagedERC20MintBase.sol +16 -0
  338. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/MyContractOwnable.sol +17 -0
  339. package/lib/openzeppelin-contracts/contracts/mocks/docs/account/MyAccountERC7702.sol +20 -0
  340. package/lib/openzeppelin-contracts/contracts/mocks/docs/account/MyFactoryAccount.sol +37 -0
  341. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyGovernor.sol +80 -0
  342. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyToken.sol +21 -0
  343. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenTimestampBased.sol +32 -0
  344. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenWrapped.sol +28 -0
  345. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC1155/GameItems.sol +21 -0
  346. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC1155/MyERC115HolderContract.sol +7 -0
  347. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC20/GLDToken.sol +11 -0
  348. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC6909/ERC6909GameItems.sol +26 -0
  349. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC721/GameItem.sol +19 -0
  350. package/lib/openzeppelin-contracts/contracts/mocks/docs/utilities/Base64NFT.sol +27 -0
  351. package/lib/openzeppelin-contracts/contracts/mocks/docs/utilities/Multicall.sol +15 -0
  352. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorCountingOverridableMock.sol +18 -0
  353. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorFractionalMock.sol +14 -0
  354. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorMock.sol +14 -0
  355. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorNoncesKeyedMock.sol +44 -0
  356. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorPreventLateQuorumMock.sol +40 -0
  357. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorProposalGuardianMock.sol +27 -0
  358. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorSequentialProposalIdMock.sol +39 -0
  359. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorStorageMock.sol +79 -0
  360. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorSuperQuorumMock.sol +95 -0
  361. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockAccessMock.sol +70 -0
  362. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockCompoundMock.sol +69 -0
  363. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockControlMock.sol +69 -0
  364. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVoteMock.sol +20 -0
  365. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVotesSuperQuorumFractionMock.sol +37 -0
  366. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorWithParamsMock.sol +51 -0
  367. package/lib/openzeppelin-contracts/contracts/mocks/proxy/BadBeacon.sol +11 -0
  368. package/lib/openzeppelin-contracts/contracts/mocks/proxy/ClashingImplementation.sol +19 -0
  369. package/lib/openzeppelin-contracts/contracts/mocks/proxy/UUPSUpgradeableMock.sol +35 -0
  370. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1155ReceiverMock.sol +74 -0
  371. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ForceApproveMock.sol +13 -0
  372. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363NoReturnMock.sol +33 -0
  373. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ReceiverMock.sol +52 -0
  374. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ReturnFalseMock.sol +34 -0
  375. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363SpenderMock.sol +47 -0
  376. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ApprovalMock.sol +10 -0
  377. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20BridgeableMock.sol +26 -0
  378. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20DecimalsMock.sol +17 -0
  379. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ExcessDecimalsMock.sol +9 -0
  380. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20FlashMintMock.sol +26 -0
  381. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol +13 -0
  382. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20GetterHelper.sol +38 -0
  383. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20Mock.sol +16 -0
  384. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20MulticallMock.sol +8 -0
  385. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20NoReturnMock.sol +30 -0
  386. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20Reentrant.sol +39 -0
  387. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ReturnFalseMock.sol +19 -0
  388. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesAdditionalCheckpointsMock.sol +31 -0
  389. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesLegacyMock.sol +253 -0
  390. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesTimestampMock.sol +29 -0
  391. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626LimitsMock.sol +23 -0
  392. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626Mock.sol +17 -0
  393. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626OffsetMock.sol +17 -0
  394. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4646FeesMock.sol +40 -0
  395. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveEnumerableMock.sol +42 -0
  396. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveMock.sol +61 -0
  397. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ReceiverMock.sol +47 -0
  398. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721URIStorageMock.sol +17 -0
  399. package/lib/openzeppelin-contracts/contracts/mocks/utils/cryptography/ERC7739Mock.sol +12 -0
  400. package/lib/openzeppelin-contracts/contracts/package.json +32 -0
  401. package/lib/openzeppelin-contracts/contracts/proxy/Clones.sol +294 -0
  402. package/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol +40 -0
  403. package/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol +177 -0
  404. package/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol +69 -0
  405. package/lib/openzeppelin-contracts/contracts/proxy/README.adoc +87 -0
  406. package/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol +57 -0
  407. package/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol +16 -0
  408. package/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol +70 -0
  409. package/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol +45 -0
  410. package/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol +118 -0
  411. package/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol +238 -0
  412. package/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol +148 -0
  413. package/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol +389 -0
  414. package/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol +123 -0
  415. package/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol +59 -0
  416. package/lib/openzeppelin-contracts/contracts/token/ERC1155/README.adoc +43 -0
  417. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol +28 -0
  418. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol +38 -0
  419. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol +88 -0
  420. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol +61 -0
  421. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol +20 -0
  422. package/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol +42 -0
  423. package/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Utils.sol +88 -0
  424. package/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol +305 -0
  425. package/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol +79 -0
  426. package/lib/openzeppelin-contracts/contracts/token/ERC20/README.adoc +78 -0
  427. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC1363.sol +135 -0
  428. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol +39 -0
  429. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol +54 -0
  430. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol +134 -0
  431. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol +33 -0
  432. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol +77 -0
  433. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol +83 -0
  434. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol +89 -0
  435. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol +305 -0
  436. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol +26 -0
  437. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol +90 -0
  438. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20Bridgeable.sol +51 -0
  439. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20TemporaryApproval.sol +119 -0
  440. package/lib/openzeppelin-contracts/contracts/token/ERC20/utils/ERC1363Utils.sol +95 -0
  441. package/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol +280 -0
  442. package/lib/openzeppelin-contracts/contracts/token/ERC6909/ERC6909.sol +224 -0
  443. package/lib/openzeppelin-contracts/contracts/token/ERC6909/README.adoc +27 -0
  444. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909ContentURI.sol +53 -0
  445. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909Metadata.sol +77 -0
  446. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909TokenSupply.sol +35 -0
  447. package/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol +430 -0
  448. package/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol +135 -0
  449. package/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol +28 -0
  450. package/lib/openzeppelin-contracts/contracts/token/ERC721/README.adoc +69 -0
  451. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol +26 -0
  452. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol +176 -0
  453. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol +164 -0
  454. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol +37 -0
  455. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol +26 -0
  456. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol +58 -0
  457. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol +47 -0
  458. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol +102 -0
  459. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol +29 -0
  460. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol +27 -0
  461. package/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol +26 -0
  462. package/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol +50 -0
  463. package/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol +139 -0
  464. package/lib/openzeppelin-contracts/contracts/token/common/README.adoc +10 -0
  465. package/lib/openzeppelin-contracts/contracts/utils/Address.sol +167 -0
  466. package/lib/openzeppelin-contracts/contracts/utils/Arrays.sol +735 -0
  467. package/lib/openzeppelin-contracts/contracts/utils/Base58.sol +240 -0
  468. package/lib/openzeppelin-contracts/contracts/utils/Base64.sol +234 -0
  469. package/lib/openzeppelin-contracts/contracts/utils/Blockhash.sol +54 -0
  470. package/lib/openzeppelin-contracts/contracts/utils/Bytes.sol +247 -0
  471. package/lib/openzeppelin-contracts/contracts/utils/CAIP10.sol +54 -0
  472. package/lib/openzeppelin-contracts/contracts/utils/CAIP2.sol +51 -0
  473. package/lib/openzeppelin-contracts/contracts/utils/Calldata.sol +25 -0
  474. package/lib/openzeppelin-contracts/contracts/utils/Comparators.sol +19 -0
  475. package/lib/openzeppelin-contracts/contracts/utils/Context.sol +28 -0
  476. package/lib/openzeppelin-contracts/contracts/utils/Create2.sol +91 -0
  477. package/lib/openzeppelin-contracts/contracts/utils/Errors.sol +34 -0
  478. package/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol +127 -0
  479. package/lib/openzeppelin-contracts/contracts/utils/Memory.sol +135 -0
  480. package/lib/openzeppelin-contracts/contracts/utils/Multicall.sol +37 -0
  481. package/lib/openzeppelin-contracts/contracts/utils/Nonces.sol +46 -0
  482. package/lib/openzeppelin-contracts/contracts/utils/NoncesKeyed.sol +74 -0
  483. package/lib/openzeppelin-contracts/contracts/utils/Packing.sol +1656 -0
  484. package/lib/openzeppelin-contracts/contracts/utils/Panic.sol +57 -0
  485. package/lib/openzeppelin-contracts/contracts/utils/Pausable.sol +112 -0
  486. package/lib/openzeppelin-contracts/contracts/utils/README.adoc +160 -0
  487. package/lib/openzeppelin-contracts/contracts/utils/RLP.sol +382 -0
  488. package/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol +119 -0
  489. package/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol +84 -0
  490. package/lib/openzeppelin-contracts/contracts/utils/RelayedCall.sol +133 -0
  491. package/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol +122 -0
  492. package/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol +155 -0
  493. package/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol +143 -0
  494. package/lib/openzeppelin-contracts/contracts/utils/Strings.sol +508 -0
  495. package/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol +183 -0
  496. package/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol +284 -0
  497. package/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol +160 -0
  498. package/lib/openzeppelin-contracts/contracts/utils/cryptography/Hashes.sol +31 -0
  499. package/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol +514 -0
  500. package/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol +99 -0
  501. package/lib/openzeppelin-contracts/contracts/utils/cryptography/P256.sol +408 -0
  502. package/lib/openzeppelin-contracts/contracts/utils/cryptography/README.adoc +73 -0
  503. package/lib/openzeppelin-contracts/contracts/utils/cryptography/RSA.sol +154 -0
  504. package/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol +164 -0
  505. package/lib/openzeppelin-contracts/contracts/utils/cryptography/WebAuthn.sol +261 -0
  506. package/lib/openzeppelin-contracts/contracts/utils/cryptography/draft-ERC7739Utils.sol +208 -0
  507. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/AbstractSigner.sol +23 -0
  508. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913.sol +252 -0
  509. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol +208 -0
  510. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerECDSA.sol +56 -0
  511. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerEIP7702.sol +25 -0
  512. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerERC7913.sol +63 -0
  513. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerP256.sol +64 -0
  514. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerRSA.sol +65 -0
  515. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerWebAuthn.sol +51 -0
  516. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/draft-ERC7739.sol +98 -0
  517. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913P256Verifier.sol +29 -0
  518. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913RSAVerifier.sol +23 -0
  519. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913WebAuthnVerifier.sol +35 -0
  520. package/lib/openzeppelin-contracts/contracts/utils/draft-InteroperableAddress.sol +235 -0
  521. package/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol +25 -0
  522. package/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol +142 -0
  523. package/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol +25 -0
  524. package/lib/openzeppelin-contracts/contracts/utils/math/Math.sol +756 -0
  525. package/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol +1162 -0
  526. package/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol +68 -0
  527. package/lib/openzeppelin-contracts/contracts/utils/structs/Accumulators.sol +130 -0
  528. package/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol +60 -0
  529. package/lib/openzeppelin-contracts/contracts/utils/structs/Checkpoints.sol +833 -0
  530. package/lib/openzeppelin-contracts/contracts/utils/structs/CircularBuffer.sol +141 -0
  531. package/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol +156 -0
  532. package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol +1319 -0
  533. package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol +792 -0
  534. package/lib/openzeppelin-contracts/contracts/utils/structs/Heap.sol +256 -0
  535. package/lib/openzeppelin-contracts/contracts/utils/structs/MerkleTree.sol +267 -0
  536. package/lib/openzeppelin-contracts/contracts/utils/types/Time.sol +133 -0
  537. package/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol +86 -0
  538. package/lib/openzeppelin-contracts/contracts/vendor/compound/LICENSE +11 -0
  539. package/lib/openzeppelin-contracts/docs/README.md +16 -0
  540. package/lib/openzeppelin-contracts/docs/antora.yml +7 -0
  541. package/lib/openzeppelin-contracts/docs/config.js +21 -0
  542. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-control-multiple.svg +97 -0
  543. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-manager-functions.svg +47 -0
  544. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-manager.svg +99 -0
  545. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3a.png +0 -0
  546. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3b.png +0 -0
  547. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-6.png +0 -0
  548. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack.png +0 -0
  549. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-deposit.png +0 -0
  550. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-mint.png +0 -0
  551. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-linear.png +0 -0
  552. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglog.png +0 -0
  553. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglogext.png +0 -0
  554. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png +0 -0
  555. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png +0 -0
  556. package/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc +29 -0
  557. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/access-control.adoc +295 -0
  558. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/account-abstraction.adoc +100 -0
  559. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/accounts.adoc +354 -0
  560. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/backwards-compatibility.adoc +50 -0
  561. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/eoa-delegation.adoc +143 -0
  562. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc1155.adoc +118 -0
  563. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20-supply.adoc +71 -0
  564. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20.adoc +67 -0
  565. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc4626.adoc +214 -0
  566. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc6909.adoc +47 -0
  567. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc721.adoc +58 -0
  568. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/extending-contracts.adoc +51 -0
  569. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/faq.adoc +13 -0
  570. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/governance.adoc +239 -0
  571. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/index.adoc +70 -0
  572. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/multisig.adoc +306 -0
  573. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/tokens.adoc +31 -0
  574. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/upgradeable.adoc +77 -0
  575. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/utilities.adoc +634 -0
  576. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/wizard.adoc +15 -0
  577. package/lib/openzeppelin-contracts/docs/templates/contract.hbs +141 -0
  578. package/lib/openzeppelin-contracts/docs/templates/helpers.js +46 -0
  579. package/lib/openzeppelin-contracts/docs/templates/page.hbs +4 -0
  580. package/lib/openzeppelin-contracts/docs/templates/properties.js +88 -0
  581. package/lib/openzeppelin-contracts/eslint.config.mjs +26 -0
  582. package/lib/openzeppelin-contracts/foundry.toml +20 -0
  583. package/lib/openzeppelin-contracts/fv-requirements.txt +4 -0
  584. package/lib/openzeppelin-contracts/hardhat/async-test-sanity.js +10 -0
  585. package/lib/openzeppelin-contracts/hardhat/env-artifacts.js +29 -0
  586. package/lib/openzeppelin-contracts/hardhat/ignore-unreachable-warnings.js +45 -0
  587. package/lib/openzeppelin-contracts/hardhat/remappings.js +18 -0
  588. package/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js +6 -0
  589. package/lib/openzeppelin-contracts/hardhat/task-test-get-files.js +25 -0
  590. package/lib/openzeppelin-contracts/hardhat.config.js +125 -0
  591. package/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.prop.sol +404 -0
  592. package/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.test.sol +356 -0
  593. package/lib/openzeppelin-contracts/lib/erc4626-tests/LICENSE +661 -0
  594. package/lib/openzeppelin-contracts/lib/erc4626-tests/README.md +116 -0
  595. package/lib/openzeppelin-contracts/lib/forge-std/.gitattributes +1 -0
  596. package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/ci.yml +128 -0
  597. package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/sync.yml +31 -0
  598. package/lib/openzeppelin-contracts/lib/forge-std/CONTRIBUTING.md +193 -0
  599. package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-APACHE +203 -0
  600. package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-MIT +25 -0
  601. package/lib/openzeppelin-contracts/lib/forge-std/README.md +266 -0
  602. package/lib/openzeppelin-contracts/lib/forge-std/foundry.toml +23 -0
  603. package/lib/openzeppelin-contracts/lib/forge-std/package.json +16 -0
  604. package/lib/openzeppelin-contracts/lib/forge-std/scripts/vm.py +646 -0
  605. package/lib/openzeppelin-contracts/lib/forge-std/src/Base.sol +35 -0
  606. package/lib/openzeppelin-contracts/lib/forge-std/src/Script.sol +27 -0
  607. package/lib/openzeppelin-contracts/lib/forge-std/src/StdAssertions.sol +669 -0
  608. package/lib/openzeppelin-contracts/lib/forge-std/src/StdChains.sol +287 -0
  609. package/lib/openzeppelin-contracts/lib/forge-std/src/StdCheats.sol +829 -0
  610. package/lib/openzeppelin-contracts/lib/forge-std/src/StdError.sol +15 -0
  611. package/lib/openzeppelin-contracts/lib/forge-std/src/StdInvariant.sol +122 -0
  612. package/lib/openzeppelin-contracts/lib/forge-std/src/StdJson.sol +283 -0
  613. package/lib/openzeppelin-contracts/lib/forge-std/src/StdMath.sol +43 -0
  614. package/lib/openzeppelin-contracts/lib/forge-std/src/StdStorage.sol +473 -0
  615. package/lib/openzeppelin-contracts/lib/forge-std/src/StdStyle.sol +333 -0
  616. package/lib/openzeppelin-contracts/lib/forge-std/src/StdToml.sol +283 -0
  617. package/lib/openzeppelin-contracts/lib/forge-std/src/StdUtils.sol +209 -0
  618. package/lib/openzeppelin-contracts/lib/forge-std/src/Test.sol +33 -0
  619. package/lib/openzeppelin-contracts/lib/forge-std/src/Vm.sol +2263 -0
  620. package/lib/openzeppelin-contracts/lib/forge-std/src/console.sol +1560 -0
  621. package/lib/openzeppelin-contracts/lib/forge-std/src/console2.sol +4 -0
  622. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  623. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  624. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  625. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  626. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  627. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IMulticall3.sol +73 -0
  628. package/lib/openzeppelin-contracts/lib/forge-std/src/safeconsole.sol +13937 -0
  629. package/lib/openzeppelin-contracts/lib/forge-std/test/StdAssertions.t.sol +141 -0
  630. package/lib/openzeppelin-contracts/lib/forge-std/test/StdChains.t.sol +227 -0
  631. package/lib/openzeppelin-contracts/lib/forge-std/test/StdCheats.t.sol +618 -0
  632. package/lib/openzeppelin-contracts/lib/forge-std/test/StdError.t.sol +120 -0
  633. package/lib/openzeppelin-contracts/lib/forge-std/test/StdJson.t.sol +49 -0
  634. package/lib/openzeppelin-contracts/lib/forge-std/test/StdMath.t.sol +202 -0
  635. package/lib/openzeppelin-contracts/lib/forge-std/test/StdStorage.t.sol +488 -0
  636. package/lib/openzeppelin-contracts/lib/forge-std/test/StdStyle.t.sol +110 -0
  637. package/lib/openzeppelin-contracts/lib/forge-std/test/StdToml.t.sol +49 -0
  638. package/lib/openzeppelin-contracts/lib/forge-std/test/StdUtils.t.sol +342 -0
  639. package/lib/openzeppelin-contracts/lib/forge-std/test/Vm.t.sol +18 -0
  640. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScript.sol +10 -0
  641. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScriptBase.sol +10 -0
  642. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTest.sol +10 -0
  643. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTestBase.sol +10 -0
  644. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  645. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/test.json +8 -0
  646. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/test.toml +6 -0
  647. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/LICENSE +661 -0
  648. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/README.md +97 -0
  649. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/SVM.sol +49 -0
  650. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/SymTest.sol +11 -0
  651. package/lib/openzeppelin-contracts/logo.svg +15 -0
  652. package/lib/openzeppelin-contracts/netlify.toml +3 -0
  653. package/lib/openzeppelin-contracts/package-lock.json +11090 -0
  654. package/lib/openzeppelin-contracts/package.json +107 -0
  655. package/lib/openzeppelin-contracts/remappings.txt +1 -0
  656. package/lib/openzeppelin-contracts/renovate.json +4 -0
  657. package/lib/openzeppelin-contracts/scripts/checks/compare-layout.js +28 -0
  658. package/lib/openzeppelin-contracts/scripts/checks/compareGasReports.js +249 -0
  659. package/lib/openzeppelin-contracts/scripts/checks/coverage.sh +24 -0
  660. package/lib/openzeppelin-contracts/scripts/checks/extract-layout.js +39 -0
  661. package/lib/openzeppelin-contracts/scripts/checks/generation.sh +6 -0
  662. package/lib/openzeppelin-contracts/scripts/checks/inheritance-ordering.js +55 -0
  663. package/lib/openzeppelin-contracts/scripts/checks/pragma-validity.js +45 -0
  664. package/lib/openzeppelin-contracts/scripts/fetch-common-contracts.js +50 -0
  665. package/lib/openzeppelin-contracts/scripts/gen-nav.js +81 -0
  666. package/lib/openzeppelin-contracts/scripts/generate/format-lines.js +16 -0
  667. package/lib/openzeppelin-contracts/scripts/generate/helpers/sanitize.js +5 -0
  668. package/lib/openzeppelin-contracts/scripts/generate/run.js +61 -0
  669. package/lib/openzeppelin-contracts/scripts/generate/templates/Arrays.js +454 -0
  670. package/lib/openzeppelin-contracts/scripts/generate/templates/Arrays.opts.js +9 -0
  671. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.js +242 -0
  672. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.opts.js +18 -0
  673. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.t.js +141 -0
  674. package/lib/openzeppelin-contracts/scripts/generate/templates/Enumerable.opts.js +53 -0
  675. package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableMap.js +463 -0
  676. package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableSet.js +469 -0
  677. package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.js +187 -0
  678. package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.opts.js +11 -0
  679. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.js +92 -0
  680. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.opts.js +3 -0
  681. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.t.js +48 -0
  682. package/lib/openzeppelin-contracts/scripts/generate/templates/SafeCast.js +136 -0
  683. package/lib/openzeppelin-contracts/scripts/generate/templates/Slot.opts.js +15 -0
  684. package/lib/openzeppelin-contracts/scripts/generate/templates/SlotDerivation.js +119 -0
  685. package/lib/openzeppelin-contracts/scripts/generate/templates/SlotDerivation.t.js +127 -0
  686. package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlot.js +77 -0
  687. package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlotMock.js +57 -0
  688. package/lib/openzeppelin-contracts/scripts/generate/templates/TransientSlot.js +80 -0
  689. package/lib/openzeppelin-contracts/scripts/generate/templates/TransientSlotMock.js +35 -0
  690. package/lib/openzeppelin-contracts/scripts/generate/templates/conversion.js +30 -0
  691. package/lib/openzeppelin-contracts/scripts/get-contracts-metadata.js +55 -0
  692. package/lib/openzeppelin-contracts/scripts/git-user-config.sh +6 -0
  693. package/lib/openzeppelin-contracts/scripts/helpers.js +7 -0
  694. package/lib/openzeppelin-contracts/scripts/minimize-pragma.js +138 -0
  695. package/lib/openzeppelin-contracts/scripts/prepack.sh +23 -0
  696. package/lib/openzeppelin-contracts/scripts/prepare-docs.sh +26 -0
  697. package/lib/openzeppelin-contracts/scripts/release/format-changelog.js +33 -0
  698. package/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js +15 -0
  699. package/lib/openzeppelin-contracts/scripts/release/update-comment.js +34 -0
  700. package/lib/openzeppelin-contracts/scripts/release/version.sh +11 -0
  701. package/lib/openzeppelin-contracts/scripts/release/workflow/exit-prerelease.sh +8 -0
  702. package/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js +48 -0
  703. package/lib/openzeppelin-contracts/scripts/release/workflow/integrity-check.sh +20 -0
  704. package/lib/openzeppelin-contracts/scripts/release/workflow/pack.sh +26 -0
  705. package/lib/openzeppelin-contracts/scripts/release/workflow/publish.sh +26 -0
  706. package/lib/openzeppelin-contracts/scripts/release/workflow/rerun.js +7 -0
  707. package/lib/openzeppelin-contracts/scripts/release/workflow/set-changesets-pr-title.js +17 -0
  708. package/lib/openzeppelin-contracts/scripts/release/workflow/start.sh +35 -0
  709. package/lib/openzeppelin-contracts/scripts/release/workflow/state.js +112 -0
  710. package/lib/openzeppelin-contracts/scripts/remove-ignored-artifacts.js +45 -0
  711. package/lib/openzeppelin-contracts/scripts/set-max-old-space-size.sh +10 -0
  712. package/lib/openzeppelin-contracts/scripts/solc-versions.js +15 -0
  713. package/lib/openzeppelin-contracts/scripts/solhint-custom/index.js +118 -0
  714. package/lib/openzeppelin-contracts/scripts/solhint-custom/package.json +8 -0
  715. package/lib/openzeppelin-contracts/scripts/update-docs-branch.js +65 -0
  716. package/lib/openzeppelin-contracts/scripts/upgradeable/README.md +21 -0
  717. package/lib/openzeppelin-contracts/scripts/upgradeable/alias/Initializable.sol +5 -0
  718. package/lib/openzeppelin-contracts/scripts/upgradeable/alias/UUPSUpgradeable.sol +5 -0
  719. package/lib/openzeppelin-contracts/scripts/upgradeable/patch-apply.sh +19 -0
  720. package/lib/openzeppelin-contracts/scripts/upgradeable/patch-save.sh +18 -0
  721. package/lib/openzeppelin-contracts/scripts/upgradeable/transpile-onto.sh +54 -0
  722. package/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh +49 -0
  723. package/lib/openzeppelin-contracts/scripts/upgradeable/upgradeable.patch +425 -0
  724. package/lib/openzeppelin-contracts/slither.config.json +4 -0
  725. package/lib/openzeppelin-contracts/solhint.config.js +29 -0
  726. package/lib/openzeppelin-contracts/test/TESTING.md +3 -0
  727. package/lib/openzeppelin-contracts/test/access/AccessControl.behavior.js +874 -0
  728. package/lib/openzeppelin-contracts/test/access/AccessControl.test.js +19 -0
  729. package/lib/openzeppelin-contracts/test/access/Ownable.test.js +79 -0
  730. package/lib/openzeppelin-contracts/test/access/Ownable2Step.test.js +102 -0
  731. package/lib/openzeppelin-contracts/test/access/extensions/AccessControlDefaultAdminRules.test.js +32 -0
  732. package/lib/openzeppelin-contracts/test/access/extensions/AccessControlEnumerable.test.js +24 -0
  733. package/lib/openzeppelin-contracts/test/access/manager/AccessManaged.test.js +146 -0
  734. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.behavior.js +257 -0
  735. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.predicate.js +456 -0
  736. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.test.js +2489 -0
  737. package/lib/openzeppelin-contracts/test/access/manager/AuthorityUtils.test.js +112 -0
  738. package/lib/openzeppelin-contracts/test/account/Account.behavior.js +144 -0
  739. package/lib/openzeppelin-contracts/test/account/Account.test.js +48 -0
  740. package/lib/openzeppelin-contracts/test/account/AccountECDSA.test.js +52 -0
  741. package/lib/openzeppelin-contracts/test/account/AccountERC7702.t.sol +113 -0
  742. package/lib/openzeppelin-contracts/test/account/AccountERC7702.test.js +52 -0
  743. package/lib/openzeppelin-contracts/test/account/AccountERC7913.test.js +138 -0
  744. package/lib/openzeppelin-contracts/test/account/AccountMultiSigner.test.js +326 -0
  745. package/lib/openzeppelin-contracts/test/account/AccountMultiSignerWeighted.test.js +312 -0
  746. package/lib/openzeppelin-contracts/test/account/AccountP256.test.js +58 -0
  747. package/lib/openzeppelin-contracts/test/account/AccountRSA.test.js +58 -0
  748. package/lib/openzeppelin-contracts/test/account/AccountWebAuthn.test.js +88 -0
  749. package/lib/openzeppelin-contracts/test/account/examples/AccountERC7702WithModulesMock.test.js +99 -0
  750. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.behavior.js +601 -0
  751. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.test.js +60 -0
  752. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579Hooked.test.js +60 -0
  753. package/lib/openzeppelin-contracts/test/account/extensions/ERC7821.behavior.js +145 -0
  754. package/lib/openzeppelin-contracts/test/account/utils/EIP7702Utils.test.js +53 -0
  755. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC4337Utils.test.js +289 -0
  756. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC7579Utils.t.sol +434 -0
  757. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC7579Utils.test.js +399 -0
  758. package/lib/openzeppelin-contracts/test/crosschain/ERC7786Recipient.test.js +73 -0
  759. package/lib/openzeppelin-contracts/test/finance/VestingWallet.behavior.js +87 -0
  760. package/lib/openzeppelin-contracts/test/finance/VestingWallet.test.js +65 -0
  761. package/lib/openzeppelin-contracts/test/finance/VestingWalletCliff.test.js +70 -0
  762. package/lib/openzeppelin-contracts/test/governance/Governor.t.sol +59 -0
  763. package/lib/openzeppelin-contracts/test/governance/Governor.test.js +980 -0
  764. package/lib/openzeppelin-contracts/test/governance/TimelockController.test.js +1279 -0
  765. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorCountingFractional.test.js +248 -0
  766. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorCountingOverridable.test.js +346 -0
  767. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorERC721.test.js +131 -0
  768. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorNoncesKeyed.test.js +244 -0
  769. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorPreventLateQuorum.test.js +185 -0
  770. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorProposalGuardian.test.js +132 -0
  771. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSequentialProposalId.test.js +202 -0
  772. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorStorage.test.js +155 -0
  773. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSuperQuorum.test.js +168 -0
  774. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSuperQuorumGreaterThanQuorum.t.sol +83 -0
  775. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockAccess.test.js +864 -0
  776. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockCompound.test.js +448 -0
  777. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockControl.test.js +504 -0
  778. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesQuorumFraction.test.js +165 -0
  779. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesSuperQuorumFraction.test.js +160 -0
  780. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorWithParams.test.js +245 -0
  781. package/lib/openzeppelin-contracts/test/governance/utils/ERC6372.behavior.js +28 -0
  782. package/lib/openzeppelin-contracts/test/governance/utils/Votes.behavior.js +325 -0
  783. package/lib/openzeppelin-contracts/test/governance/utils/Votes.test.js +102 -0
  784. package/lib/openzeppelin-contracts/test/governance/utils/VotesExtended.test.js +152 -0
  785. package/lib/openzeppelin-contracts/test/helpers/access-manager.js +85 -0
  786. package/lib/openzeppelin-contracts/test/helpers/account.js +14 -0
  787. package/lib/openzeppelin-contracts/test/helpers/chains.js +56 -0
  788. package/lib/openzeppelin-contracts/test/helpers/constants.js +7 -0
  789. package/lib/openzeppelin-contracts/test/helpers/deploy.js +14 -0
  790. package/lib/openzeppelin-contracts/test/helpers/eip712-types.js +61 -0
  791. package/lib/openzeppelin-contracts/test/helpers/eip712.js +45 -0
  792. package/lib/openzeppelin-contracts/test/helpers/enums.js +14 -0
  793. package/lib/openzeppelin-contracts/test/helpers/erc4337.js +217 -0
  794. package/lib/openzeppelin-contracts/test/helpers/erc7579.js +58 -0
  795. package/lib/openzeppelin-contracts/test/helpers/erc7739.js +118 -0
  796. package/lib/openzeppelin-contracts/test/helpers/governance.js +217 -0
  797. package/lib/openzeppelin-contracts/test/helpers/iterate.js +41 -0
  798. package/lib/openzeppelin-contracts/test/helpers/math.js +33 -0
  799. package/lib/openzeppelin-contracts/test/helpers/methods.js +14 -0
  800. package/lib/openzeppelin-contracts/test/helpers/precompiles.js +12 -0
  801. package/lib/openzeppelin-contracts/test/helpers/random.js +24 -0
  802. package/lib/openzeppelin-contracts/test/helpers/signers.js +222 -0
  803. package/lib/openzeppelin-contracts/test/helpers/storage.js +48 -0
  804. package/lib/openzeppelin-contracts/test/helpers/strings.js +5 -0
  805. package/lib/openzeppelin-contracts/test/helpers/time.js +33 -0
  806. package/lib/openzeppelin-contracts/test/helpers/txpool.js +29 -0
  807. package/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js +109 -0
  808. package/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.t.sol +279 -0
  809. package/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.test.js +384 -0
  810. package/lib/openzeppelin-contracts/test/proxy/Clones.behaviour.js +160 -0
  811. package/lib/openzeppelin-contracts/test/proxy/Clones.t.sol +91 -0
  812. package/lib/openzeppelin-contracts/test/proxy/Clones.test.js +177 -0
  813. package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js +23 -0
  814. package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Utils.test.js +162 -0
  815. package/lib/openzeppelin-contracts/test/proxy/Proxy.behaviour.js +185 -0
  816. package/lib/openzeppelin-contracts/test/proxy/beacon/BeaconProxy.test.js +141 -0
  817. package/lib/openzeppelin-contracts/test/proxy/beacon/UpgradeableBeacon.test.js +55 -0
  818. package/lib/openzeppelin-contracts/test/proxy/transparent/ProxyAdmin.test.js +82 -0
  819. package/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.behaviour.js +357 -0
  820. package/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.test.js +28 -0
  821. package/lib/openzeppelin-contracts/test/proxy/utils/Initializable.test.js +216 -0
  822. package/lib/openzeppelin-contracts/test/proxy/utils/UUPSUpgradeable.test.js +120 -0
  823. package/lib/openzeppelin-contracts/test/sanity.test.js +27 -0
  824. package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.behavior.js +763 -0
  825. package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.test.js +213 -0
  826. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Burnable.test.js +66 -0
  827. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Pausable.test.js +105 -0
  828. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Supply.test.js +119 -0
  829. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155URIStorage.test.js +70 -0
  830. package/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Holder.test.js +56 -0
  831. package/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Utils.test.js +299 -0
  832. package/lib/openzeppelin-contracts/test/token/ERC20/ERC20.behavior.js +269 -0
  833. package/lib/openzeppelin-contracts/test/token/ERC20/ERC20.test.js +199 -0
  834. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC1363.test.js +370 -0
  835. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Burnable.test.js +105 -0
  836. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Capped.test.js +55 -0
  837. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20FlashMint.test.js +164 -0
  838. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Pausable.test.js +129 -0
  839. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Permit.test.js +109 -0
  840. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Votes.test.js +546 -0
  841. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Wrapper.test.js +203 -0
  842. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.t.sol +41 -0
  843. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js +888 -0
  844. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20Bridgeable.test.js +89 -0
  845. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20TemporaryApproval.test.js +142 -0
  846. package/lib/openzeppelin-contracts/test/token/ERC20/utils/SafeERC20.test.js +463 -0
  847. package/lib/openzeppelin-contracts/test/token/ERC6909/ERC6909.behavior.js +216 -0
  848. package/lib/openzeppelin-contracts/test/token/ERC6909/ERC6909.test.js +104 -0
  849. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909ContentURI.test.js +49 -0
  850. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909Metadata.test.js +58 -0
  851. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909TokenSupply.test.js +53 -0
  852. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.behavior.js +946 -0
  853. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.test.js +23 -0
  854. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721Enumerable.test.js +28 -0
  855. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Burnable.test.js +77 -0
  856. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.t.sol +187 -0
  857. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.test.js +228 -0
  858. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Pausable.test.js +81 -0
  859. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Royalty.test.js +57 -0
  860. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721URIStorage.test.js +121 -0
  861. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Votes.test.js +194 -0
  862. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Wrapper.test.js +201 -0
  863. package/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Holder.test.js +20 -0
  864. package/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Utils.test.js +94 -0
  865. package/lib/openzeppelin-contracts/test/token/common/ERC2981.behavior.js +152 -0
  866. package/lib/openzeppelin-contracts/test/utils/Address.test.js +332 -0
  867. package/lib/openzeppelin-contracts/test/utils/Arrays.t.sol +248 -0
  868. package/lib/openzeppelin-contracts/test/utils/Arrays.test.js +284 -0
  869. package/lib/openzeppelin-contracts/test/utils/Base58.t.sol +24 -0
  870. package/lib/openzeppelin-contracts/test/utils/Base58.test.js +65 -0
  871. package/lib/openzeppelin-contracts/test/utils/Base64.t.sol +36 -0
  872. package/lib/openzeppelin-contracts/test/utils/Base64.test.js +79 -0
  873. package/lib/openzeppelin-contracts/test/utils/Blockhash.t.sol +101 -0
  874. package/lib/openzeppelin-contracts/test/utils/Blockhash.test.js +59 -0
  875. package/lib/openzeppelin-contracts/test/utils/Bytes.t.sol +251 -0
  876. package/lib/openzeppelin-contracts/test/utils/Bytes.test.js +359 -0
  877. package/lib/openzeppelin-contracts/test/utils/CAIP.test.js +56 -0
  878. package/lib/openzeppelin-contracts/test/utils/Calldata.test.js +22 -0
  879. package/lib/openzeppelin-contracts/test/utils/Context.behavior.js +48 -0
  880. package/lib/openzeppelin-contracts/test/utils/Context.test.js +18 -0
  881. package/lib/openzeppelin-contracts/test/utils/Create2.t.sol +17 -0
  882. package/lib/openzeppelin-contracts/test/utils/Create2.test.js +190 -0
  883. package/lib/openzeppelin-contracts/test/utils/LowLevelCall.test.js +257 -0
  884. package/lib/openzeppelin-contracts/test/utils/Memory.t.sol +38 -0
  885. package/lib/openzeppelin-contracts/test/utils/Memory.test.js +106 -0
  886. package/lib/openzeppelin-contracts/test/utils/Multicall.test.js +72 -0
  887. package/lib/openzeppelin-contracts/test/utils/Nonces.behavior.js +189 -0
  888. package/lib/openzeppelin-contracts/test/utils/Nonces.test.js +16 -0
  889. package/lib/openzeppelin-contracts/test/utils/NoncesKeyed.t.sol +51 -0
  890. package/lib/openzeppelin-contracts/test/utils/NoncesKeyed.test.js +17 -0
  891. package/lib/openzeppelin-contracts/test/utils/Packing.t.sol +993 -0
  892. package/lib/openzeppelin-contracts/test/utils/Packing.test.js +70 -0
  893. package/lib/openzeppelin-contracts/test/utils/Panic.test.js +37 -0
  894. package/lib/openzeppelin-contracts/test/utils/Pausable.test.js +90 -0
  895. package/lib/openzeppelin-contracts/test/utils/RLP.t.sol +135 -0
  896. package/lib/openzeppelin-contracts/test/utils/RLP.test.js +149 -0
  897. package/lib/openzeppelin-contracts/test/utils/ReentrancyGuard.test.js +58 -0
  898. package/lib/openzeppelin-contracts/test/utils/RelayedCall.test.js +217 -0
  899. package/lib/openzeppelin-contracts/test/utils/ShortStrings.t.sol +109 -0
  900. package/lib/openzeppelin-contracts/test/utils/ShortStrings.test.js +64 -0
  901. package/lib/openzeppelin-contracts/test/utils/SlotDerivation.t.sol +248 -0
  902. package/lib/openzeppelin-contracts/test/utils/SlotDerivation.test.js +58 -0
  903. package/lib/openzeppelin-contracts/test/utils/StorageSlot.test.js +73 -0
  904. package/lib/openzeppelin-contracts/test/utils/Strings.t.sol +50 -0
  905. package/lib/openzeppelin-contracts/test/utils/Strings.test.js +360 -0
  906. package/lib/openzeppelin-contracts/test/utils/TransientSlot.test.js +59 -0
  907. package/lib/openzeppelin-contracts/test/utils/cryptography/ECDSA.test.js +318 -0
  908. package/lib/openzeppelin-contracts/test/utils/cryptography/EIP712.test.js +105 -0
  909. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC1271.behavior.js +111 -0
  910. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC7739.test.js +42 -0
  911. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC7739Utils.test.js +203 -0
  912. package/lib/openzeppelin-contracts/test/utils/cryptography/MerkleProof.test.js +213 -0
  913. package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.t.sol +33 -0
  914. package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.test.js +97 -0
  915. package/lib/openzeppelin-contracts/test/utils/cryptography/P256.t.sol +65 -0
  916. package/lib/openzeppelin-contracts/test/utils/cryptography/P256.test.js +182 -0
  917. package/lib/openzeppelin-contracts/test/utils/cryptography/RSA.helper.js +17 -0
  918. package/lib/openzeppelin-contracts/test/utils/cryptography/RSA.test.js +102 -0
  919. package/lib/openzeppelin-contracts/test/utils/cryptography/SigVer15_186-3.rsp +3850 -0
  920. package/lib/openzeppelin-contracts/test/utils/cryptography/SignatureChecker.test.js +422 -0
  921. package/lib/openzeppelin-contracts/test/utils/cryptography/WebAuthn.t.sol +297 -0
  922. package/lib/openzeppelin-contracts/test/utils/cryptography/ecdsa_secp256r1_sha256_p1363_test.json +3719 -0
  923. package/lib/openzeppelin-contracts/test/utils/draft-InteroperableAddress.t.sol +99 -0
  924. package/lib/openzeppelin-contracts/test/utils/draft-InteroperableAddress.test.js +170 -0
  925. package/lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js +18 -0
  926. package/lib/openzeppelin-contracts/test/utils/introspection/ERC165Checker.test.js +272 -0
  927. package/lib/openzeppelin-contracts/test/utils/introspection/SupportsInterface.behavior.js +166 -0
  928. package/lib/openzeppelin-contracts/test/utils/math/Math.t.sol +370 -0
  929. package/lib/openzeppelin-contracts/test/utils/math/Math.test.js +746 -0
  930. package/lib/openzeppelin-contracts/test/utils/math/SafeCast.test.js +159 -0
  931. package/lib/openzeppelin-contracts/test/utils/math/SignedMath.t.sol +81 -0
  932. package/lib/openzeppelin-contracts/test/utils/math/SignedMath.test.js +53 -0
  933. package/lib/openzeppelin-contracts/test/utils/structs/Accumulators.t.sol +35 -0
  934. package/lib/openzeppelin-contracts/test/utils/structs/BitMap.test.js +149 -0
  935. package/lib/openzeppelin-contracts/test/utils/structs/Checkpoints.t.sol +440 -0
  936. package/lib/openzeppelin-contracts/test/utils/structs/Checkpoints.test.js +147 -0
  937. package/lib/openzeppelin-contracts/test/utils/structs/CircularBuffer.test.js +83 -0
  938. package/lib/openzeppelin-contracts/test/utils/structs/DoubleEndedQueue.test.js +102 -0
  939. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.behavior.js +214 -0
  940. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.test.js +83 -0
  941. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.behavior.js +175 -0
  942. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.test.js +66 -0
  943. package/lib/openzeppelin-contracts/test/utils/structs/Heap.t.sol +74 -0
  944. package/lib/openzeppelin-contracts/test/utils/structs/Heap.test.js +113 -0
  945. package/lib/openzeppelin-contracts/test/utils/structs/MerkleTree.test.js +180 -0
  946. package/lib/openzeppelin-contracts/test/utils/types/Time.test.js +135 -0
  947. package/package.json +3 -3
@@ -0,0 +1,164 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.5.0) (utils/cryptography/SignatureChecker.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ import {ECDSA} from "./ECDSA.sol";
7
+ import {IERC1271} from "../../interfaces/IERC1271.sol";
8
+ import {IERC7913SignatureVerifier} from "../../interfaces/IERC7913.sol";
9
+ import {Bytes} from "../Bytes.sol";
10
+
11
+ /**
12
+ * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support:
13
+ *
14
+ * * ECDSA signatures from externally owned accounts (EOAs)
15
+ * * ERC-1271 signatures from smart contract wallets like Argent and Safe Wallet (previously Gnosis Safe)
16
+ * * ERC-7913 signatures from keys that do not have an Ethereum address of their own
17
+ *
18
+ * See https://eips.ethereum.org/EIPS/eip-1271[ERC-1271] and https://eips.ethereum.org/EIPS/eip-7913[ERC-7913].
19
+ */
20
+ library SignatureChecker {
21
+ using Bytes for bytes;
22
+
23
+ /**
24
+ * @dev Checks if a signature is valid for a given signer and data hash. If the signer has code, the
25
+ * signature is validated against it using ERC-1271, otherwise it's validated using `ECDSA.recover`.
26
+ *
27
+ * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
28
+ * change through time. It could return true at block N and false at block N+1 (or the opposite).
29
+ *
30
+ * NOTE: For an extended version of this function that supports ERC-7913 signatures, see {isValidSignatureNow-bytes-bytes32-bytes-}.
31
+ */
32
+ function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {
33
+ if (signer.code.length == 0) {
34
+ (address recovered, ECDSA.RecoverError err, ) = ECDSA.tryRecover(hash, signature);
35
+ return err == ECDSA.RecoverError.NoError && recovered == signer;
36
+ } else {
37
+ return isValidERC1271SignatureNow(signer, hash, signature);
38
+ }
39
+ }
40
+
41
+ /**
42
+ * @dev Variant of {isValidSignatureNow} that takes a signature in calldata
43
+ */
44
+ function isValidSignatureNowCalldata(
45
+ address signer,
46
+ bytes32 hash,
47
+ bytes calldata signature
48
+ ) internal view returns (bool) {
49
+ if (signer.code.length == 0) {
50
+ (address recovered, ECDSA.RecoverError err, ) = ECDSA.tryRecoverCalldata(hash, signature);
51
+ return err == ECDSA.RecoverError.NoError && recovered == signer;
52
+ } else {
53
+ return isValidERC1271SignatureNow(signer, hash, signature);
54
+ }
55
+ }
56
+
57
+ /**
58
+ * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated
59
+ * against the signer smart contract using ERC-1271.
60
+ *
61
+ * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
62
+ * change through time. It could return true at block N and false at block N+1 (or the opposite).
63
+ */
64
+ function isValidERC1271SignatureNow(
65
+ address signer,
66
+ bytes32 hash,
67
+ bytes memory signature
68
+ ) internal view returns (bool result) {
69
+ bytes4 selector = IERC1271.isValidSignature.selector;
70
+ uint256 length = signature.length;
71
+
72
+ assembly ("memory-safe") {
73
+ // Encoded calldata is :
74
+ // [ 0x00 - 0x03 ] <selector>
75
+ // [ 0x04 - 0x23 ] <hash>
76
+ // [ 0x24 - 0x44 ] <signature offset> (0x40)
77
+ // [ 0x44 - 0x64 ] <signature length>
78
+ // [ 0x64 - ... ] <signature data>
79
+ let ptr := mload(0x40)
80
+ mstore(ptr, selector)
81
+ mstore(add(ptr, 0x04), hash)
82
+ mstore(add(ptr, 0x24), 0x40)
83
+ mcopy(add(ptr, 0x44), signature, add(length, 0x20))
84
+
85
+ let success := staticcall(gas(), signer, ptr, add(length, 0x64), 0x00, 0x20)
86
+ result := and(success, and(gt(returndatasize(), 0x1f), eq(mload(0x00), selector)))
87
+ }
88
+ }
89
+
90
+ /**
91
+ * @dev Verifies a signature for a given ERC-7913 signer and hash.
92
+ *
93
+ * The signer is a `bytes` object that is the concatenation of an address and optionally a key:
94
+ * `verifier || key`. A signer must be at least 20 bytes long.
95
+ *
96
+ * Verification is done as follows:
97
+ *
98
+ * * If `signer.length < 20`: verification fails
99
+ * * If `signer.length == 20`: verification is done using {isValidSignatureNow}
100
+ * * Otherwise: verification is done using {IERC7913SignatureVerifier}
101
+ *
102
+ * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
103
+ * change through time. It could return true at block N and false at block N+1 (or the opposite).
104
+ */
105
+ function isValidSignatureNow(
106
+ bytes memory signer,
107
+ bytes32 hash,
108
+ bytes memory signature
109
+ ) internal view returns (bool) {
110
+ if (signer.length < 20) {
111
+ return false;
112
+ } else if (signer.length == 20) {
113
+ return isValidSignatureNow(address(bytes20(signer)), hash, signature);
114
+ } else {
115
+ (bool success, bytes memory result) = address(bytes20(signer)).staticcall(
116
+ abi.encodeCall(IERC7913SignatureVerifier.verify, (signer.slice(20), hash, signature))
117
+ );
118
+ return (success &&
119
+ result.length >= 32 &&
120
+ abi.decode(result, (bytes32)) == bytes32(IERC7913SignatureVerifier.verify.selector));
121
+ }
122
+ }
123
+
124
+ /**
125
+ * @dev Verifies multiple ERC-7913 `signatures` for a given `hash` using a set of `signers`.
126
+ * Returns `false` if the number of signers and signatures is not the same.
127
+ *
128
+ * The signers should be ordered by their `keccak256` hash to ensure efficient duplication check. Unordered
129
+ * signers are supported, but the uniqueness check will be more expensive.
130
+ *
131
+ * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
132
+ * change through time. It could return true at block N and false at block N+1 (or the opposite).
133
+ */
134
+ function areValidSignaturesNow(
135
+ bytes32 hash,
136
+ bytes[] memory signers,
137
+ bytes[] memory signatures
138
+ ) internal view returns (bool) {
139
+ if (signers.length != signatures.length) return false;
140
+
141
+ bytes32 lastId = bytes32(0);
142
+
143
+ for (uint256 i = 0; i < signers.length; ++i) {
144
+ bytes memory signer = signers[i];
145
+
146
+ // If one of the signatures is invalid, reject the batch
147
+ if (!isValidSignatureNow(signer, hash, signatures[i])) return false;
148
+
149
+ bytes32 id = keccak256(signer);
150
+ // If the current signer ID is greater than all previous IDs, then this is a new signer.
151
+ if (lastId < id) {
152
+ lastId = id;
153
+ } else {
154
+ // If this signer id is not greater than all the previous ones, verify that it is not a duplicate of a previous one
155
+ // This loop is never executed if the signers are ordered by id.
156
+ for (uint256 j = 0; j < i; ++j) {
157
+ if (id == keccak256(signers[j])) return false;
158
+ }
159
+ }
160
+ }
161
+
162
+ return true;
163
+ }
164
+ }
@@ -0,0 +1,261 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.5.0) (utils/cryptography/WebAuthn.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ import {P256} from "./P256.sol";
7
+ import {Base64} from "../Base64.sol";
8
+ import {Bytes} from "../Bytes.sol";
9
+ import {Strings} from "../Strings.sol";
10
+
11
+ /**
12
+ * @dev Library for verifying WebAuthn Authentication Assertions.
13
+ *
14
+ * WebAuthn enables strong authentication for smart contracts using
15
+ * https://docs.openzeppelin.com/contracts/5.x/api/utils#P256[P256]
16
+ * as an alternative to traditional secp256k1 ECDSA signatures. This library verifies
17
+ * signatures generated during WebAuthn authentication ceremonies as specified in the
18
+ * https://www.w3.org/TR/webauthn-2/[WebAuthn Level 2 standard].
19
+ *
20
+ * For blockchain use cases, the following WebAuthn validations are intentionally omitted:
21
+ *
22
+ * * Origin validation: Origin verification in `clientDataJSON` is omitted as blockchain
23
+ * contexts rely on authenticator and dapp frontend enforcement. Standard authenticators
24
+ * implement proper origin validation.
25
+ * * RP ID hash validation: Verification of `rpIdHash` in authenticatorData against expected
26
+ * RP ID hash is omitted. This is typically handled by platform-level security measures.
27
+ * Including an expiry timestamp in signed data is recommended for enhanced security.
28
+ * * Signature counter: Verification of signature counter increments is omitted. While
29
+ * useful for detecting credential cloning, on-chain operations typically include nonce
30
+ * protection, making this check redundant.
31
+ * * Extension outputs: Extension output value verification is omitted as these are not
32
+ * essential for core authentication security in blockchain applications.
33
+ * * Attestation: Attestation object verification is omitted as this implementation
34
+ * focuses on authentication (`webauthn.get`) rather than registration ceremonies.
35
+ *
36
+ * Inspired by:
37
+ *
38
+ * * https://github.com/daimo-eth/p256-verifier/blob/master/src/WebAuthn.sol[daimo-eth implementation]
39
+ * * https://github.com/base/webauthn-sol/blob/main/src/WebAuthn.sol[base implementation]
40
+ */
41
+ library WebAuthn {
42
+ struct WebAuthnAuth {
43
+ bytes32 r; /// The r value of secp256r1 signature
44
+ bytes32 s; /// The s value of secp256r1 signature
45
+ uint256 challengeIndex; /// The index at which "challenge":"..." occurs in `clientDataJSON`.
46
+ uint256 typeIndex; /// The index at which "type":"..." occurs in `clientDataJSON`.
47
+ /// The WebAuthn authenticator data.
48
+ /// https://www.w3.org/TR/webauthn-2/#dom-authenticatorassertionresponse-authenticatordata
49
+ bytes authenticatorData;
50
+ /// The WebAuthn client data JSON.
51
+ /// https://www.w3.org/TR/webauthn-2/#dom-authenticatorresponse-clientdatajson
52
+ string clientDataJSON;
53
+ }
54
+
55
+ /// @dev Bit 0 of the authenticator data flags: "User Present" bit.
56
+ bytes1 internal constant AUTH_DATA_FLAGS_UP = 0x01;
57
+ /// @dev Bit 2 of the authenticator data flags: "User Verified" bit.
58
+ bytes1 internal constant AUTH_DATA_FLAGS_UV = 0x04;
59
+ /// @dev Bit 3 of the authenticator data flags: "Backup Eligibility" bit.
60
+ bytes1 internal constant AUTH_DATA_FLAGS_BE = 0x08;
61
+ /// @dev Bit 4 of the authenticator data flags: "Backup State" bit.
62
+ bytes1 internal constant AUTH_DATA_FLAGS_BS = 0x10;
63
+
64
+ /**
65
+ * @dev Performs standard verification of a WebAuthn Authentication Assertion.
66
+ */
67
+ function verify(
68
+ bytes memory challenge,
69
+ WebAuthnAuth memory auth,
70
+ bytes32 qx,
71
+ bytes32 qy
72
+ ) internal view returns (bool) {
73
+ return verify(challenge, auth, qx, qy, true);
74
+ }
75
+
76
+ /**
77
+ * @dev Performs verification of a WebAuthn Authentication Assertion. This variants allow the caller to select
78
+ * whether of not to require the UV flag (step 17).
79
+ *
80
+ * Verifies:
81
+ *
82
+ * 1. Type is "webauthn.get" (see {_validateExpectedTypeHash})
83
+ * 2. Challenge matches the expected value (see {_validateChallenge})
84
+ * 3. Cryptographic signature is valid for the given public key
85
+ * 4. confirming physical user presence during authentication
86
+ * 5. (if `requireUV` is true) confirming stronger user authentication (biometrics/PIN)
87
+ * 6. Backup Eligibility (`BE`) and Backup State (BS) bits relationship is valid
88
+ */
89
+ function verify(
90
+ bytes memory challenge,
91
+ WebAuthnAuth memory auth,
92
+ bytes32 qx,
93
+ bytes32 qy,
94
+ bool requireUV
95
+ ) internal view returns (bool) {
96
+ // Verify authenticator data has sufficient length (37 bytes minimum):
97
+ // - 32 bytes for rpIdHash
98
+ // - 1 byte for flags
99
+ // - 4 bytes for signature counter
100
+ return
101
+ auth.authenticatorData.length > 36 &&
102
+ _validateExpectedTypeHash(auth.clientDataJSON, auth.typeIndex) && // 11
103
+ _validateChallenge(auth.clientDataJSON, auth.challengeIndex, challenge) && // 12
104
+ _validateUserPresentBitSet(auth.authenticatorData[32]) && // 16
105
+ (!requireUV || _validateUserVerifiedBitSet(auth.authenticatorData[32])) && // 17
106
+ _validateBackupEligibilityAndState(auth.authenticatorData[32]) && // Consistency check
107
+ // P256.verify handles signature malleability internally
108
+ P256.verify(
109
+ sha256(
110
+ abi.encodePacked(
111
+ auth.authenticatorData,
112
+ sha256(bytes(auth.clientDataJSON)) // 19
113
+ )
114
+ ),
115
+ auth.r,
116
+ auth.s,
117
+ qx,
118
+ qy
119
+ ); // 20
120
+ }
121
+
122
+ /**
123
+ * @dev Validates that the https://www.w3.org/TR/webauthn-2/#type[Type] field in the client data JSON is set to
124
+ * "webauthn.get".
125
+ *
126
+ * Step 11 in https://www.w3.org/TR/webauthn-2/#sctn-verifying-assertion[verifying an assertion].
127
+ */
128
+ function _validateExpectedTypeHash(
129
+ string memory clientDataJSON,
130
+ uint256 typeIndex
131
+ ) private pure returns (bool success) {
132
+ assembly ("memory-safe") {
133
+ success := and(
134
+ // clientDataJson.length >= typeIndex + 21
135
+ gt(mload(clientDataJSON), add(typeIndex, 20)),
136
+ eq(
137
+ // get 32 bytes starting at index typexIndex in clientDataJSON, and keep the leftmost 21 bytes
138
+ and(mload(add(add(clientDataJSON, 0x20), typeIndex)), shl(88, not(0))),
139
+ // solhint-disable-next-line quotes
140
+ '"type":"webauthn.get"'
141
+ )
142
+ )
143
+ }
144
+ }
145
+
146
+ /**
147
+ * @dev Validates that the challenge in the client data JSON matches the `expectedChallenge`.
148
+ *
149
+ * Step 12 in https://www.w3.org/TR/webauthn-2/#sctn-verifying-assertion[verifying an assertion].
150
+ */
151
+ function _validateChallenge(
152
+ string memory clientDataJSON,
153
+ uint256 challengeIndex,
154
+ bytes memory challenge
155
+ ) private pure returns (bool) {
156
+ // solhint-disable-next-line quotes
157
+ string memory expectedChallenge = string.concat('"challenge":"', Base64.encodeURL(challenge), '"');
158
+ string memory actualChallenge = string(
159
+ Bytes.slice(bytes(clientDataJSON), challengeIndex, challengeIndex + bytes(expectedChallenge).length)
160
+ );
161
+
162
+ return Strings.equal(actualChallenge, expectedChallenge);
163
+ }
164
+
165
+ /**
166
+ * @dev Validates that the https://www.w3.org/TR/webauthn-2/#up[User Present (UP)] bit is set.
167
+ *
168
+ * Step 16 in https://www.w3.org/TR/webauthn-2/#sctn-verifying-assertion[verifying an assertion].
169
+ *
170
+ * NOTE: Required by WebAuthn spec but may be skipped for platform authenticators
171
+ * (Touch ID, Windows Hello) in controlled environments. Enforce for public-facing apps.
172
+ */
173
+ function _validateUserPresentBitSet(bytes1 flags) private pure returns (bool) {
174
+ return (flags & AUTH_DATA_FLAGS_UP) == AUTH_DATA_FLAGS_UP;
175
+ }
176
+
177
+ /**
178
+ * @dev Validates that the https://www.w3.org/TR/webauthn-2/#uv[User Verified (UV)] bit is set.
179
+ *
180
+ * Step 17 in https://www.w3.org/TR/webauthn-2/#sctn-verifying-assertion[verifying an assertion].
181
+ *
182
+ * The UV bit indicates whether the user was verified using a stronger identification method
183
+ * (biometrics, PIN, password). While optional, requiring UV=1 is recommended for:
184
+ *
185
+ * * High-value transactions and sensitive operations
186
+ * * Account recovery and critical settings changes
187
+ * * Privileged operations
188
+ *
189
+ * NOTE: For routine operations or when using hardware authenticators without verification capabilities,
190
+ * `UV=0` may be acceptable. The choice of whether to require UV represents a security vs. usability
191
+ * tradeoff - for blockchain applications handling valuable assets, requiring UV is generally safer.
192
+ */
193
+ function _validateUserVerifiedBitSet(bytes1 flags) private pure returns (bool) {
194
+ return (flags & AUTH_DATA_FLAGS_UV) == AUTH_DATA_FLAGS_UV;
195
+ }
196
+
197
+ /**
198
+ * @dev Validates the relationship between Backup Eligibility (`BE`) and Backup State (`BS`) bits
199
+ * according to the WebAuthn specification.
200
+ *
201
+ * The function enforces that if a credential is backed up (`BS=1`), it must also be eligible
202
+ * for backup (`BE=1`). This prevents unauthorized credential backup and ensures compliance
203
+ * with the WebAuthn spec.
204
+ *
205
+ * Returns true in these valid states:
206
+ *
207
+ * * `BE=1`, `BS=0`: Credential is eligible but not backed up
208
+ * * `BE=1`, `BS=1`: Credential is eligible and backed up
209
+ * * `BE=0`, `BS=0`: Credential is not eligible and not backed up
210
+ *
211
+ * Returns false only when `BE=0` and `BS=1`, which is an invalid state indicating
212
+ * a credential that's backed up but not eligible for backup.
213
+ *
214
+ * NOTE: While the WebAuthn spec defines this relationship between `BE` and `BS` bits,
215
+ * validating it is not explicitly required as part of the core verification procedure.
216
+ * Some implementations may choose to skip this check for broader authenticator
217
+ * compatibility or when the application's threat model doesn't consider credential
218
+ * syncing a major risk.
219
+ */
220
+ function _validateBackupEligibilityAndState(bytes1 flags) private pure returns (bool) {
221
+ return (flags & AUTH_DATA_FLAGS_BE) == AUTH_DATA_FLAGS_BE || (flags & AUTH_DATA_FLAGS_BS) == 0;
222
+ }
223
+
224
+ /**
225
+ * @dev Verifies that calldata bytes (`input`) represents a valid `WebAuthnAuth` object. If encoding is valid,
226
+ * returns true and the calldata view at the object. Otherwise, returns false and an invalid calldata object.
227
+ *
228
+ * NOTE: The returned `auth` object should not be accessed if `success` is false. Trying to access the data may
229
+ * cause revert/panic.
230
+ */
231
+ function tryDecodeAuth(bytes calldata input) internal pure returns (bool success, WebAuthnAuth calldata auth) {
232
+ assembly ("memory-safe") {
233
+ auth := input.offset
234
+ }
235
+
236
+ // Minimum length to hold 6 objects (32 bytes each)
237
+ if (input.length < 0xC0) return (false, auth);
238
+
239
+ // Get offset of non-value-type elements relative to the input buffer
240
+ uint256 authenticatorDataOffset = uint256(bytes32(input[0x80:]));
241
+ uint256 clientDataJSONOffset = uint256(bytes32(input[0xa0:]));
242
+
243
+ // The elements length (at the offset) should be 32 bytes long. We check that this is within the
244
+ // buffer bounds. Since we know input.length is at least 32, we can subtract with no overflow risk.
245
+ if (input.length - 0x20 < authenticatorDataOffset || input.length - 0x20 < clientDataJSONOffset)
246
+ return (false, auth);
247
+
248
+ // Get the lengths. offset + 32 is bounded by input.length so it does not overflow.
249
+ uint256 authenticatorDataLength = uint256(bytes32(input[authenticatorDataOffset:]));
250
+ uint256 clientDataJSONLength = uint256(bytes32(input[clientDataJSONOffset:]));
251
+
252
+ // Check that the input buffer is long enough to store the non-value-type elements
253
+ // Since we know input.length is at least xxxOffset + 32, we can subtract with no overflow risk.
254
+ if (
255
+ input.length - authenticatorDataOffset - 0x20 < authenticatorDataLength ||
256
+ input.length - clientDataJSONOffset - 0x20 < clientDataJSONLength
257
+ ) return (false, auth);
258
+
259
+ return (true, auth);
260
+ }
261
+ }
@@ -0,0 +1,208 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.5.0) (utils/cryptography/draft-ERC7739Utils.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {Calldata} from "../Calldata.sol";
7
+ import {Hashes} from "./Hashes.sol";
8
+
9
+ /**
10
+ * @dev Utilities to process https://ercs.ethereum.org/ERCS/erc-7739[ERC-7739] typed data signatures
11
+ * that are specific to an EIP-712 domain.
12
+ *
13
+ * This library provides methods to wrap, unwrap and operate over typed data signatures with a defensive
14
+ * rehashing mechanism that includes the app's xref:api:utils/cryptography#EIP712-_domainSeparatorV4[EIP-712]
15
+ * and preserves readability of the signed content using an EIP-712 nested approach.
16
+ *
17
+ * A smart contract domain can validate a signature for a typed data structure in two ways:
18
+ *
19
+ * - As an application validating a typed data signature. See {typedDataSignStructHash}.
20
+ * - As a smart contract validating a raw message signature. See {personalSignStructHash}.
21
+ *
22
+ * NOTE: A provider for a smart contract wallet would need to return this signature as the
23
+ * result of a call to `personal_sign` or `eth_signTypedData`, and this may be unsupported by
24
+ * API clients that expect a return value of 129 bytes, or specifically the `r,s,v` parameters
25
+ * of an xref:api:utils/cryptography#ECDSA[ECDSA] signature, as is for example specified for
26
+ * xref:api:utils/cryptography#EIP712[EIP-712].
27
+ */
28
+ library ERC7739Utils {
29
+ /**
30
+ * @dev An EIP-712 type to represent "personal" signatures
31
+ * (i.e. mimic of `personal_sign` for smart contracts).
32
+ */
33
+ bytes32 private constant PERSONAL_SIGN_TYPEHASH = keccak256("PersonalSign(bytes prefixed)");
34
+
35
+ /**
36
+ * @dev Nest a signature for a given EIP-712 type into a nested signature for the domain of the app.
37
+ *
38
+ * Counterpart of {decodeTypedDataSig} to extract the original signature and the nested components.
39
+ */
40
+ function encodeTypedDataSig(
41
+ bytes memory signature,
42
+ bytes32 appSeparator,
43
+ bytes32 contentsHash,
44
+ string memory contentsDescr
45
+ ) internal pure returns (bytes memory) {
46
+ return
47
+ abi.encodePacked(signature, appSeparator, contentsHash, contentsDescr, uint16(bytes(contentsDescr).length));
48
+ }
49
+
50
+ /**
51
+ * @dev Parses a nested signature into its components.
52
+ *
53
+ * Constructed as follows:
54
+ *
55
+ * `signature ‖ APP_DOMAIN_SEPARATOR ‖ contentsHash ‖ contentsDescr ‖ uint16(contentsDescr.length)`
56
+ *
57
+ * - `signature` is the signature for the (ERC-7739) nested struct hash. This signature indirectly signs over the
58
+ * original "contents" hash (from the app) and the account's domain separator.
59
+ * - `APP_DOMAIN_SEPARATOR` is the EIP-712 {EIP712-_domainSeparatorV4} of the application smart contract that is
60
+ * requesting the signature verification (through ERC-1271).
61
+ * - `contentsHash` is the hash of the underlying data structure or message.
62
+ * - `contentsDescr` is a descriptor of the "contents" part of the EIP-712 type of the nested signature.
63
+ *
64
+ * NOTE: This function returns empty if the input format is invalid instead of reverting.
65
+ * data instead.
66
+ */
67
+ function decodeTypedDataSig(
68
+ bytes calldata encodedSignature
69
+ )
70
+ internal
71
+ pure
72
+ returns (bytes calldata signature, bytes32 appSeparator, bytes32 contentsHash, string calldata contentsDescr)
73
+ {
74
+ unchecked {
75
+ uint256 sigLength = encodedSignature.length;
76
+
77
+ // 66 bytes = contentsDescrLength (2 bytes) + contentsHash (32 bytes) + APP_DOMAIN_SEPARATOR (32 bytes).
78
+ if (sigLength < 66) return (Calldata.emptyBytes(), 0, 0, Calldata.emptyString());
79
+
80
+ uint256 contentsDescrEnd = sigLength - 2; // Last 2 bytes
81
+ uint256 contentsDescrLength = uint16(bytes2(encodedSignature[contentsDescrEnd:]));
82
+
83
+ // Check for space for `contentsDescr` in addition to the 66 bytes documented above
84
+ if (sigLength < 66 + contentsDescrLength) return (Calldata.emptyBytes(), 0, 0, Calldata.emptyString());
85
+
86
+ uint256 contentsHashEnd = contentsDescrEnd - contentsDescrLength;
87
+ uint256 separatorEnd = contentsHashEnd - 32;
88
+ uint256 signatureEnd = separatorEnd - 32;
89
+
90
+ signature = encodedSignature[:signatureEnd];
91
+ appSeparator = bytes32(encodedSignature[signatureEnd:separatorEnd]);
92
+ contentsHash = bytes32(encodedSignature[separatorEnd:contentsHashEnd]);
93
+ contentsDescr = string(encodedSignature[contentsHashEnd:contentsDescrEnd]);
94
+ }
95
+ }
96
+
97
+ /**
98
+ * @dev Nests an `ERC-191` digest into a `PersonalSign` EIP-712 struct, and returns the corresponding struct hash.
99
+ * This struct hash must be combined with a domain separator, using {MessageHashUtils-toTypedDataHash} before
100
+ * being verified/recovered.
101
+ *
102
+ * This is used to simulates the `personal_sign` RPC method in the context of smart contracts.
103
+ */
104
+ function personalSignStructHash(bytes32 contents) internal pure returns (bytes32) {
105
+ return Hashes.efficientKeccak256(PERSONAL_SIGN_TYPEHASH, contents);
106
+ }
107
+
108
+ /**
109
+ * @dev Nests an `EIP-712` hash (`contents`) into a `TypedDataSign` EIP-712 struct, and returns the corresponding
110
+ * struct hash. This struct hash must be combined with a domain separator, using {MessageHashUtils-toTypedDataHash}
111
+ * before being verified/recovered.
112
+ */
113
+ function typedDataSignStructHash(
114
+ string calldata contentsName,
115
+ string calldata contentsType,
116
+ bytes32 contentsHash,
117
+ bytes memory domainBytes
118
+ ) internal pure returns (bytes32 result) {
119
+ return
120
+ bytes(contentsName).length == 0
121
+ ? bytes32(0)
122
+ : keccak256(
123
+ abi.encodePacked(typedDataSignTypehash(contentsName, contentsType), contentsHash, domainBytes)
124
+ );
125
+ }
126
+
127
+ /**
128
+ * @dev Variant of {typedDataSignStructHash-string-string-bytes32-bytes} that takes a content descriptor
129
+ * and decodes the `contentsName` and `contentsType` out of it.
130
+ */
131
+ function typedDataSignStructHash(
132
+ string calldata contentsDescr,
133
+ bytes32 contentsHash,
134
+ bytes memory domainBytes
135
+ ) internal pure returns (bytes32 result) {
136
+ (string calldata contentsName, string calldata contentsType) = decodeContentsDescr(contentsDescr);
137
+
138
+ return typedDataSignStructHash(contentsName, contentsType, contentsHash, domainBytes);
139
+ }
140
+
141
+ /**
142
+ * @dev Compute the EIP-712 typehash of the `TypedDataSign` structure for a given type (and typename).
143
+ */
144
+ function typedDataSignTypehash(
145
+ string calldata contentsName,
146
+ string calldata contentsType
147
+ ) internal pure returns (bytes32) {
148
+ return
149
+ keccak256(
150
+ abi.encodePacked(
151
+ "TypedDataSign(",
152
+ contentsName,
153
+ " contents,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)",
154
+ contentsType
155
+ )
156
+ );
157
+ }
158
+
159
+ /**
160
+ * @dev Parse the type name out of the ERC-7739 contents type description. Supports both the implicit and explicit
161
+ * modes.
162
+ *
163
+ * Following ERC-7739 specifications, a `contentsName` is considered invalid if it's empty or it contains
164
+ * any of the following bytes , )\x00
165
+ *
166
+ * If the `contentsType` is invalid, this returns an empty string. Otherwise, the return string has non-zero
167
+ * length.
168
+ */
169
+ function decodeContentsDescr(
170
+ string calldata contentsDescr
171
+ ) internal pure returns (string calldata contentsName, string calldata contentsType) {
172
+ bytes calldata buffer = bytes(contentsDescr);
173
+ if (buffer.length == 0) {
174
+ // pass through (fail)
175
+ } else if (buffer[buffer.length - 1] == bytes1(")")) {
176
+ // Implicit mode: read contentsName from the beginning, and keep the complete descr
177
+ for (uint256 i = 0; i < buffer.length; ++i) {
178
+ bytes1 current = buffer[i];
179
+ if (current == bytes1("(")) {
180
+ // if name is empty - passthrough (fail)
181
+ if (i == 0) break;
182
+ // we found the end of the contentsName
183
+ return (string(buffer[:i]), contentsDescr);
184
+ } else if (_isForbiddenChar(current)) {
185
+ // we found an invalid character (forbidden) - passthrough (fail)
186
+ break;
187
+ }
188
+ }
189
+ } else {
190
+ // Explicit mode: read contentsName from the end, and remove it from the descr
191
+ for (uint256 i = buffer.length; i > 0; --i) {
192
+ bytes1 current = buffer[i - 1];
193
+ if (current == bytes1(")")) {
194
+ // we found the end of the contentsName
195
+ return (string(buffer[i:]), string(buffer[:i]));
196
+ } else if (_isForbiddenChar(current)) {
197
+ // we found an invalid character (forbidden) - passthrough (fail)
198
+ break;
199
+ }
200
+ }
201
+ }
202
+ return (Calldata.emptyString(), Calldata.emptyString());
203
+ }
204
+
205
+ function _isForbiddenChar(bytes1 char) private pure returns (bool) {
206
+ return char == 0x00 || char == bytes1(" ") || char == bytes1(",") || char == bytes1("(") || char == bytes1(")");
207
+ }
208
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.4.0) (utils/cryptography/signers/AbstractSigner.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ /**
7
+ * @dev Abstract contract for signature validation.
8
+ *
9
+ * Developers must implement {_rawSignatureValidation} and use it as the lowest-level signature validation mechanism.
10
+ *
11
+ * @custom:stateless
12
+ */
13
+ abstract contract AbstractSigner {
14
+ /**
15
+ * @dev Signature validation algorithm.
16
+ *
17
+ * WARNING: Implementing a signature validation algorithm is a security-sensitive operation as it involves
18
+ * cryptographic verification. It is important to review and test thoroughly before deployment. Consider
19
+ * using one of the signature verification libraries (xref:api:utils/cryptography#ECDSA[ECDSA],
20
+ * xref:api:utils/cryptography#P256[P256] or xref:api:utils/cryptography#RSA[RSA]).
21
+ */
22
+ function _rawSignatureValidation(bytes32 hash, bytes calldata signature) internal view virtual returns (bool);
23
+ }