arr00-testing-oz-contracts 0.0.0 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/README.md +121 -0
  2. package/access/AccessControl.sol +206 -0
  3. package/access/IAccessControl.sol +98 -0
  4. package/access/Ownable.sol +100 -0
  5. package/access/Ownable2Step.sol +67 -0
  6. package/access/extensions/AccessControlDefaultAdminRules.sol +372 -0
  7. package/access/extensions/AccessControlEnumerable.sol +81 -0
  8. package/access/extensions/IAccessControlDefaultAdminRules.sol +192 -0
  9. package/access/extensions/IAccessControlEnumerable.sol +31 -0
  10. package/access/manager/AccessManaged.sol +118 -0
  11. package/access/manager/AccessManager.sol +781 -0
  12. package/access/manager/AuthorityUtils.sol +36 -0
  13. package/access/manager/IAccessManaged.sol +32 -0
  14. package/access/manager/IAccessManager.sol +410 -0
  15. package/access/manager/IAuthority.sol +14 -0
  16. package/account/Account.sol +151 -0
  17. package/account/extensions/draft-AccountERC7579.sol +430 -0
  18. package/account/extensions/draft-AccountERC7579Hooked.sol +113 -0
  19. package/account/extensions/draft-ERC7821.sol +70 -0
  20. package/account/paymaster/Paymaster.sol +170 -0
  21. package/account/paymaster/extensions/PaymasterERC20.sol +394 -0
  22. package/account/paymaster/extensions/PaymasterERC20Guarantor.sol +190 -0
  23. package/account/paymaster/extensions/PaymasterERC721Owner.sol +54 -0
  24. package/account/paymaster/extensions/PaymasterSigner.sol +125 -0
  25. package/account/utils/EIP7702Utils.sol +25 -0
  26. package/account/utils/ERC4337Utils.sol +317 -0
  27. package/account/utils/draft-ERC7579Utils.sol +314 -0
  28. package/build/contracts/AbstractSigner.json +13 -0
  29. package/build/contracts/AccessControl.json +239 -0
  30. package/build/contracts/AccessControlDefaultAdminRules.json +467 -0
  31. package/build/contracts/AccessControlEnumerable.json +301 -0
  32. package/build/contracts/AccessManaged.json +104 -0
  33. package/build/contracts/AccessManager.json +1189 -0
  34. package/build/contracts/Account.json +150 -0
  35. package/build/contracts/AccountERC7579.json +515 -0
  36. package/build/contracts/AccountERC7579Hooked.json +539 -0
  37. package/build/contracts/Accumulators.json +13 -0
  38. package/build/contracts/Address.json +25 -0
  39. package/build/contracts/Arrays.json +13 -0
  40. package/build/contracts/AuthorityUtils.json +13 -0
  41. package/build/contracts/Base58.json +25 -0
  42. package/build/contracts/Base64.json +25 -0
  43. package/build/contracts/BeaconProxy.json +97 -0
  44. package/build/contracts/BitMaps.json +13 -0
  45. package/build/contracts/BlockHeader.json +25 -0
  46. package/build/contracts/Blockhash.json +13 -0
  47. package/build/contracts/BridgeERC1155.json +508 -0
  48. package/build/contracts/BridgeERC20.json +260 -0
  49. package/build/contracts/BridgeERC721.json +270 -0
  50. package/build/contracts/BridgeERC7802.json +249 -0
  51. package/build/contracts/BridgeFungible.json +236 -0
  52. package/build/contracts/BridgeMultiToken.json +236 -0
  53. package/build/contracts/BridgeNonFungible.json +212 -0
  54. package/build/contracts/Bytes.json +13 -0
  55. package/build/contracts/CAIP10.json +13 -0
  56. package/build/contracts/CAIP2.json +13 -0
  57. package/build/contracts/Calldata.json +13 -0
  58. package/build/contracts/Checkpoints.json +19 -0
  59. package/build/contracts/CircularBuffer.json +19 -0
  60. package/build/contracts/Clones.json +19 -0
  61. package/build/contracts/Comparators.json +13 -0
  62. package/build/contracts/Context.json +13 -0
  63. package/build/contracts/Create2.json +19 -0
  64. package/build/contracts/Create3.json +19 -0
  65. package/build/contracts/CrosschainLinked.json +145 -0
  66. package/build/contracts/CrosschainRemoteExecutor.json +199 -0
  67. package/build/contracts/DoubleEndedQueue.json +13 -0
  68. package/build/contracts/ECDSA.json +41 -0
  69. package/build/contracts/EIP712.json +79 -0
  70. package/build/contracts/EIP7702Utils.json +13 -0
  71. package/build/contracts/ERC1155.json +428 -0
  72. package/build/contracts/ERC1155Burnable.json +474 -0
  73. package/build/contracts/ERC1155Crosschain.json +796 -0
  74. package/build/contracts/ERC1155Holder.json +111 -0
  75. package/build/contracts/ERC1155Pausable.json +477 -0
  76. package/build/contracts/ERC1155Supply.json +479 -0
  77. package/build/contracts/ERC1155URIStorage.json +428 -0
  78. package/build/contracts/ERC1155Utils.json +13 -0
  79. package/build/contracts/ERC1363.json +585 -0
  80. package/build/contracts/ERC1363Utils.json +36 -0
  81. package/build/contracts/ERC165.json +33 -0
  82. package/build/contracts/ERC165Checker.json +13 -0
  83. package/build/contracts/ERC1967Clones.json +13 -0
  84. package/build/contracts/ERC1967Proxy.json +84 -0
  85. package/build/contracts/ERC1967Utils.json +52 -0
  86. package/build/contracts/ERC20.json +322 -0
  87. package/build/contracts/ERC20Bridgeable.json +427 -0
  88. package/build/contracts/ERC20Burnable.json +353 -0
  89. package/build/contracts/ERC20Capped.json +362 -0
  90. package/build/contracts/ERC20Crosschain.json +573 -0
  91. package/build/contracts/ERC20FlashMint.json +432 -0
  92. package/build/contracts/ERC20Pausable.json +371 -0
  93. package/build/contracts/ERC20Permit.json +532 -0
  94. package/build/contracts/ERC20TemporaryApproval.json +346 -0
  95. package/build/contracts/ERC20TransferAuthorization.json +836 -0
  96. package/build/contracts/ERC20Votes.json +781 -0
  97. package/build/contracts/ERC20Wrapper.json +405 -0
  98. package/build/contracts/ERC2771Context.json +46 -0
  99. package/build/contracts/ERC2771Forwarder.json +439 -0
  100. package/build/contracts/ERC2981.json +126 -0
  101. package/build/contracts/ERC3009.json +668 -0
  102. package/build/contracts/ERC4337Utils.json +13 -0
  103. package/build/contracts/ERC4626.json +807 -0
  104. package/build/contracts/ERC6372Utils.json +19 -0
  105. package/build/contracts/ERC6909.json +415 -0
  106. package/build/contracts/ERC6909ContentURI.json +472 -0
  107. package/build/contracts/ERC6909Metadata.json +529 -0
  108. package/build/contracts/ERC6909TokenSupply.json +434 -0
  109. package/build/contracts/ERC721.json +447 -0
  110. package/build/contracts/ERC721Burnable.json +460 -0
  111. package/build/contracts/ERC721Consecutive.json +509 -0
  112. package/build/contracts/ERC721Crosschain.json +674 -0
  113. package/build/contracts/ERC721Enumerable.json +524 -0
  114. package/build/contracts/ERC721Holder.json +48 -0
  115. package/build/contracts/ERC721Pausable.json +496 -0
  116. package/build/contracts/ERC721Royalty.json +540 -0
  117. package/build/contracts/ERC721URIStorage.json +479 -0
  118. package/build/contracts/ERC721Utils.json +13 -0
  119. package/build/contracts/ERC721Votes.json +835 -0
  120. package/build/contracts/ERC721Wrapper.json +553 -0
  121. package/build/contracts/ERC7579Utils.json +119 -0
  122. package/build/contracts/ERC7739.json +103 -0
  123. package/build/contracts/ERC7739Utils.json +13 -0
  124. package/build/contracts/ERC7786Recipient.json +59 -0
  125. package/build/contracts/ERC7821.json +112 -0
  126. package/build/contracts/ERC7913P256Verifier.json +43 -0
  127. package/build/contracts/ERC7913RSAVerifier.json +43 -0
  128. package/build/contracts/ERC7913WebAuthnVerifier.json +43 -0
  129. package/build/contracts/EnumerableMap.json +36 -0
  130. package/build/contracts/EnumerableSet.json +13 -0
  131. package/build/contracts/Errors.json +51 -0
  132. package/build/contracts/Governor.json +1381 -0
  133. package/build/contracts/GovernorCountingFractional.json +1455 -0
  134. package/build/contracts/GovernorCountingOverridable.json +1612 -0
  135. package/build/contracts/GovernorCountingSimple.json +1410 -0
  136. package/build/contracts/GovernorCrosschain.json +1409 -0
  137. package/build/contracts/GovernorNoncesKeyed.json +1405 -0
  138. package/build/contracts/GovernorPreventLateQuorum.json +1461 -0
  139. package/build/contracts/GovernorProposalGuardian.json +1426 -0
  140. package/build/contracts/GovernorSequentialProposalId.json +1399 -0
  141. package/build/contracts/GovernorSettings.json +1477 -0
  142. package/build/contracts/GovernorStorage.json +1506 -0
  143. package/build/contracts/GovernorSuperQuorum.json +1429 -0
  144. package/build/contracts/GovernorTimelockAccess.json +1582 -0
  145. package/build/contracts/GovernorTimelockCompound.json +1449 -0
  146. package/build/contracts/GovernorTimelockControl.json +1426 -0
  147. package/build/contracts/GovernorVotes.json +1399 -0
  148. package/build/contracts/GovernorVotesQuorumFraction.json +1497 -0
  149. package/build/contracts/GovernorVotesSuperQuorumFraction.json +1657 -0
  150. package/build/contracts/Hashes.json +13 -0
  151. package/build/contracts/Heap.json +13 -0
  152. package/build/contracts/IAccessControl.json +207 -0
  153. package/build/contracts/IAccessControlDefaultAdminRules.json +406 -0
  154. package/build/contracts/IAccessControlEnumerable.json +250 -0
  155. package/build/contracts/IAccessManaged.json +104 -0
  156. package/build/contracts/IAccessManager.json +1085 -0
  157. package/build/contracts/IAccount.json +90 -0
  158. package/build/contracts/IAccountExecute.json +79 -0
  159. package/build/contracts/IAggregator.json +211 -0
  160. package/build/contracts/IAuthority.json +43 -0
  161. package/build/contracts/IBeacon.json +27 -0
  162. package/build/contracts/ICompoundTimelock.json +427 -0
  163. package/build/contracts/IERC1155.json +307 -0
  164. package/build/contracts/IERC1155Errors.json +116 -0
  165. package/build/contracts/IERC1155MetadataURI.json +326 -0
  166. package/build/contracts/IERC1155Receiver.json +111 -0
  167. package/build/contracts/IERC1271.json +38 -0
  168. package/build/contracts/IERC1363.json +385 -0
  169. package/build/contracts/IERC1363Receiver.json +48 -0
  170. package/build/contracts/IERC1363Spender.json +43 -0
  171. package/build/contracts/IERC165.json +33 -0
  172. package/build/contracts/IERC1820Implementer.json +38 -0
  173. package/build/contracts/IERC1820Registry.json +227 -0
  174. package/build/contracts/IERC1822Proxiable.json +27 -0
  175. package/build/contracts/IERC1967.json +59 -0
  176. package/build/contracts/IERC20.json +197 -0
  177. package/build/contracts/IERC20Errors.json +100 -0
  178. package/build/contracts/IERC20Metadata.json +236 -0
  179. package/build/contracts/IERC20Permit.json +89 -0
  180. package/build/contracts/IERC2309.json +45 -0
  181. package/build/contracts/IERC2612.json +89 -0
  182. package/build/contracts/IERC2981.json +62 -0
  183. package/build/contracts/IERC3009.json +163 -0
  184. package/build/contracts/IERC3009Cancel.json +66 -0
  185. package/build/contracts/IERC3156FlashBorrower.json +53 -0
  186. package/build/contracts/IERC3156FlashLender.json +91 -0
  187. package/build/contracts/IERC4626.json +626 -0
  188. package/build/contracts/IERC4906.json +331 -0
  189. package/build/contracts/IERC5267.json +63 -0
  190. package/build/contracts/IERC5313.json +27 -0
  191. package/build/contracts/IERC5805.json +233 -0
  192. package/build/contracts/IERC6372.json +40 -0
  193. package/build/contracts/IERC6909.json +319 -0
  194. package/build/contracts/IERC6909ContentURI.json +351 -0
  195. package/build/contracts/IERC6909Metadata.json +376 -0
  196. package/build/contracts/IERC6909TokenSupply.json +338 -0
  197. package/build/contracts/IERC721.json +299 -0
  198. package/build/contracts/IERC721Enumerable.json +355 -0
  199. package/build/contracts/IERC721Errors.json +117 -0
  200. package/build/contracts/IERC721Metadata.json +344 -0
  201. package/build/contracts/IERC721Receiver.json +48 -0
  202. package/build/contracts/IERC7579AccountConfig.json +65 -0
  203. package/build/contracts/IERC7579Execution.json +56 -0
  204. package/build/contracts/IERC7579Hook.json +101 -0
  205. package/build/contracts/IERC7579Module.json +59 -0
  206. package/build/contracts/IERC7579ModuleConfig.json +127 -0
  207. package/build/contracts/IERC7579Validator.json +159 -0
  208. package/build/contracts/IERC7674.json +221 -0
  209. package/build/contracts/IERC7751.json +40 -0
  210. package/build/contracts/IERC777.json +405 -0
  211. package/build/contracts/IERC777Recipient.json +52 -0
  212. package/build/contracts/IERC777Sender.json +52 -0
  213. package/build/contracts/IERC7786GatewaySource.json +116 -0
  214. package/build/contracts/IERC7786Recipient.json +43 -0
  215. package/build/contracts/IERC7802.json +119 -0
  216. package/build/contracts/IERC7821.json +51 -0
  217. package/build/contracts/IERC7913SignatureVerifier.json +43 -0
  218. package/build/contracts/IEntryPoint.json +305 -0
  219. package/build/contracts/IEntryPointExtra.json +80 -0
  220. package/build/contracts/IEntryPointNonces.json +38 -0
  221. package/build/contracts/IEntryPointStake.json +97 -0
  222. package/build/contracts/IGovernor.json +1095 -0
  223. package/build/contracts/IPaymaster.json +123 -0
  224. package/build/contracts/ITransparentUpgradeableProxy.json +77 -0
  225. package/build/contracts/IVotes.json +207 -0
  226. package/build/contracts/Initializable.json +37 -0
  227. package/build/contracts/InteroperableAddress.json +30 -0
  228. package/build/contracts/LowLevelCall.json +13 -0
  229. package/build/contracts/Math.json +13 -0
  230. package/build/contracts/Memory.json +13 -0
  231. package/build/contracts/MerkleProof.json +19 -0
  232. package/build/contracts/MerkleTree.json +35 -0
  233. package/build/contracts/MessageHashUtils.json +19 -0
  234. package/build/contracts/MultiSignerERC7913.json +176 -0
  235. package/build/contracts/MultiSignerERC7913Weighted.json +264 -0
  236. package/build/contracts/Multicall.json +49 -0
  237. package/build/contracts/Nonces.json +49 -0
  238. package/build/contracts/NoncesKeyed.json +73 -0
  239. package/build/contracts/Ownable.json +88 -0
  240. package/build/contracts/Ownable2Step.json +127 -0
  241. package/build/contracts/P256.json +13 -0
  242. package/build/contracts/Packing.json +19 -0
  243. package/build/contracts/Panic.json +13 -0
  244. package/build/contracts/Pausable.json +63 -0
  245. package/build/contracts/Paymaster.json +147 -0
  246. package/build/contracts/PaymasterERC20.json +209 -0
  247. package/build/contracts/PaymasterERC20Guarantor.json +234 -0
  248. package/build/contracts/PaymasterERC721Owner.json +160 -0
  249. package/build/contracts/PaymasterSigner.json +212 -0
  250. package/build/contracts/Proxy.json +18 -0
  251. package/build/contracts/ProxyAdmin.json +135 -0
  252. package/build/contracts/RLP.json +19 -0
  253. package/build/contracts/RSA.json +13 -0
  254. package/build/contracts/RateLimiter.json +19 -0
  255. package/build/contracts/ReentrancyGuard.json +19 -0
  256. package/build/contracts/ReentrancyGuardTransient.json +19 -0
  257. package/build/contracts/RelayedCall.json +13 -0
  258. package/build/contracts/SafeCast.json +68 -0
  259. package/build/contracts/SafeERC20.json +46 -0
  260. package/build/contracts/ShortStrings.json +30 -0
  261. package/build/contracts/SignatureChecker.json +13 -0
  262. package/build/contracts/SignedMath.json +13 -0
  263. package/build/contracts/SignerECDSA.json +27 -0
  264. package/build/contracts/SignerEIP7702.json +13 -0
  265. package/build/contracts/SignerERC7913.json +27 -0
  266. package/build/contracts/SignerP256.json +48 -0
  267. package/build/contracts/SignerRSA.json +32 -0
  268. package/build/contracts/SignerWebAuthn.json +48 -0
  269. package/build/contracts/SimulateCall.json +13 -0
  270. package/build/contracts/SlotDerivation.json +13 -0
  271. package/build/contracts/StorageSlot.json +13 -0
  272. package/build/contracts/Strings.json +40 -0
  273. package/build/contracts/Time.json +13 -0
  274. package/build/contracts/TimelockController.json +1010 -0
  275. package/build/contracts/TransientSlot.json +13 -0
  276. package/build/contracts/TransparentUpgradeableProxy.json +131 -0
  277. package/build/contracts/TrieProof.json +25 -0
  278. package/build/contracts/UUPSUpgradeable.json +119 -0
  279. package/build/contracts/UpgradeableBeacon.json +154 -0
  280. package/build/contracts/VestingWallet.json +364 -0
  281. package/build/contracts/VestingWalletCliff.json +367 -0
  282. package/build/contracts/Votes.json +402 -0
  283. package/build/contracts/VotesExtended.json +450 -0
  284. package/build/contracts/WebAuthn.json +13 -0
  285. package/crosschain/CrosschainLinked.sol +114 -0
  286. package/crosschain/CrosschainRemoteExecutor.sol +99 -0
  287. package/crosschain/ERC7786Recipient.sol +66 -0
  288. package/crosschain/bridges/BridgeERC1155.sol +131 -0
  289. package/crosschain/bridges/BridgeERC20.sol +42 -0
  290. package/crosschain/bridges/BridgeERC721.sol +62 -0
  291. package/crosschain/bridges/BridgeERC7802.sol +34 -0
  292. package/crosschain/bridges/abstract/BridgeFungible.sol +86 -0
  293. package/crosschain/bridges/abstract/BridgeMultiToken.sol +99 -0
  294. package/crosschain/bridges/abstract/BridgeNonFungible.sol +79 -0
  295. package/finance/VestingWallet.sol +160 -0
  296. package/finance/VestingWalletCliff.sol +55 -0
  297. package/governance/Governor.sol +825 -0
  298. package/governance/IGovernor.sol +454 -0
  299. package/governance/TimelockController.sol +470 -0
  300. package/governance/extensions/GovernorCountingFractional.sol +190 -0
  301. package/governance/extensions/GovernorCountingOverridable.sol +226 -0
  302. package/governance/extensions/GovernorCountingSimple.sol +96 -0
  303. package/governance/extensions/GovernorCrosschain.sol +31 -0
  304. package/governance/extensions/GovernorNoncesKeyed.sol +91 -0
  305. package/governance/extensions/GovernorPreventLateQuorum.sol +119 -0
  306. package/governance/extensions/GovernorProposalGuardian.sol +59 -0
  307. package/governance/extensions/GovernorSequentialProposalId.sol +75 -0
  308. package/governance/extensions/GovernorSettings.sol +106 -0
  309. package/governance/extensions/GovernorStorage.sol +134 -0
  310. package/governance/extensions/GovernorSuperQuorum.sol +59 -0
  311. package/governance/extensions/GovernorTimelockAccess.sol +346 -0
  312. package/governance/extensions/GovernorTimelockCompound.sol +162 -0
  313. package/governance/extensions/GovernorTimelockControl.sol +167 -0
  314. package/governance/extensions/GovernorVotes.sol +64 -0
  315. package/governance/extensions/GovernorVotesQuorumFraction.sol +113 -0
  316. package/governance/extensions/GovernorVotesSuperQuorumFraction.sol +135 -0
  317. package/governance/utils/IVotes.sol +60 -0
  318. package/governance/utils/Votes.sol +245 -0
  319. package/governance/utils/VotesExtended.sol +85 -0
  320. package/interfaces/IERC1155.sol +6 -0
  321. package/interfaces/IERC1155MetadataURI.sol +6 -0
  322. package/interfaces/IERC1155Receiver.sol +6 -0
  323. package/interfaces/IERC1271.sol +17 -0
  324. package/interfaces/IERC1363.sol +86 -0
  325. package/interfaces/IERC1363Receiver.sol +32 -0
  326. package/interfaces/IERC1363Spender.sol +26 -0
  327. package/interfaces/IERC165.sol +6 -0
  328. package/interfaces/IERC1820Implementer.sol +20 -0
  329. package/interfaces/IERC1820Registry.sol +112 -0
  330. package/interfaces/IERC1967.sol +24 -0
  331. package/interfaces/IERC20.sol +6 -0
  332. package/interfaces/IERC20Metadata.sol +6 -0
  333. package/interfaces/IERC2309.sol +19 -0
  334. package/interfaces/IERC2612.sol +8 -0
  335. package/interfaces/IERC2981.sol +26 -0
  336. package/interfaces/IERC3156.sol +7 -0
  337. package/interfaces/IERC3156FlashBorrower.sol +27 -0
  338. package/interfaces/IERC3156FlashLender.sol +41 -0
  339. package/interfaces/IERC4337.sol +255 -0
  340. package/interfaces/IERC4626.sol +230 -0
  341. package/interfaces/IERC4906.sol +20 -0
  342. package/interfaces/IERC5267.sol +28 -0
  343. package/interfaces/IERC5313.sol +16 -0
  344. package/interfaces/IERC5805.sol +9 -0
  345. package/interfaces/IERC6093.sol +162 -0
  346. package/interfaces/IERC6372.sol +19 -0
  347. package/interfaces/IERC6909.sol +131 -0
  348. package/interfaces/IERC721.sol +6 -0
  349. package/interfaces/IERC721Enumerable.sol +6 -0
  350. package/interfaces/IERC721Metadata.sol +6 -0
  351. package/interfaces/IERC721Receiver.sol +6 -0
  352. package/interfaces/IERC7751.sol +12 -0
  353. package/interfaces/IERC777.sol +200 -0
  354. package/interfaces/IERC777Recipient.sol +35 -0
  355. package/interfaces/IERC777Sender.sol +35 -0
  356. package/interfaces/IERC7786.sol +64 -0
  357. package/interfaces/IERC7913.sol +18 -0
  358. package/interfaces/draft-IERC1822.sol +20 -0
  359. package/interfaces/draft-IERC3009.sol +87 -0
  360. package/interfaces/draft-IERC7579.sol +227 -0
  361. package/interfaces/draft-IERC7674.sol +17 -0
  362. package/interfaces/draft-IERC7802.sol +32 -0
  363. package/interfaces/draft-IERC7821.sol +44 -0
  364. package/metatx/ERC2771Context.sol +90 -0
  365. package/metatx/ERC2771Forwarder.sol +376 -0
  366. package/package.json +29 -1
  367. package/proxy/Clones.sol +294 -0
  368. package/proxy/ERC1967/ERC1967Clones.sol +219 -0
  369. package/proxy/ERC1967/ERC1967Proxy.sol +62 -0
  370. package/proxy/ERC1967/ERC1967Utils.sol +177 -0
  371. package/proxy/Proxy.sol +69 -0
  372. package/proxy/beacon/BeaconProxy.sol +57 -0
  373. package/proxy/beacon/IBeacon.sol +16 -0
  374. package/proxy/beacon/UpgradeableBeacon.sol +70 -0
  375. package/proxy/transparent/ProxyAdmin.sol +45 -0
  376. package/proxy/transparent/TransparentUpgradeableProxy.sol +118 -0
  377. package/proxy/utils/Initializable.sol +238 -0
  378. package/proxy/utils/UUPSUpgradeable.sol +148 -0
  379. package/token/ERC1155/ERC1155.sol +417 -0
  380. package/token/ERC1155/IERC1155.sol +123 -0
  381. package/token/ERC1155/IERC1155Receiver.sol +59 -0
  382. package/token/ERC1155/extensions/ERC1155Burnable.sol +22 -0
  383. package/token/ERC1155/extensions/ERC1155Crosschain.sol +87 -0
  384. package/token/ERC1155/extensions/ERC1155Pausable.sol +38 -0
  385. package/token/ERC1155/extensions/ERC1155Supply.sol +88 -0
  386. package/token/ERC1155/extensions/ERC1155URIStorage.sol +58 -0
  387. package/token/ERC1155/extensions/IERC1155MetadataURI.sol +20 -0
  388. package/token/ERC1155/utils/ERC1155Holder.sol +42 -0
  389. package/token/ERC1155/utils/ERC1155Utils.sol +88 -0
  390. package/token/ERC20/ERC20.sol +305 -0
  391. package/token/ERC20/IERC20.sol +79 -0
  392. package/token/ERC20/extensions/ERC1363.sol +135 -0
  393. package/token/ERC20/extensions/ERC20Burnable.sol +38 -0
  394. package/token/ERC20/extensions/ERC20Capped.sol +54 -0
  395. package/token/ERC20/extensions/ERC20Crosschain.sol +39 -0
  396. package/token/ERC20/extensions/ERC20FlashMint.sol +130 -0
  397. package/token/ERC20/extensions/ERC20Pausable.sol +33 -0
  398. package/token/ERC20/extensions/ERC20Permit.sol +77 -0
  399. package/token/ERC20/extensions/ERC20TransferAuthorization.sol +91 -0
  400. package/token/ERC20/extensions/ERC20Votes.sol +83 -0
  401. package/token/ERC20/extensions/ERC20Wrapper.sol +93 -0
  402. package/token/ERC20/extensions/ERC4626.sol +304 -0
  403. package/token/ERC20/extensions/IERC20Metadata.sol +26 -0
  404. package/token/ERC20/extensions/IERC20Permit.sol +90 -0
  405. package/token/ERC20/extensions/draft-ERC20Bridgeable.sol +51 -0
  406. package/token/ERC20/extensions/draft-ERC20TemporaryApproval.sol +119 -0
  407. package/token/ERC20/extensions/draft-ERC3009.sol +152 -0
  408. package/token/ERC20/utils/ERC1363Utils.sol +95 -0
  409. package/token/ERC20/utils/SafeERC20.sol +292 -0
  410. package/token/ERC6909/ERC6909.sol +224 -0
  411. package/token/ERC6909/extensions/ERC6909ContentURI.sol +59 -0
  412. package/token/ERC6909/extensions/ERC6909Metadata.sol +83 -0
  413. package/token/ERC6909/extensions/ERC6909TokenSupply.sol +41 -0
  414. package/token/ERC721/ERC721.sol +433 -0
  415. package/token/ERC721/IERC721.sol +135 -0
  416. package/token/ERC721/IERC721Receiver.sol +28 -0
  417. package/token/ERC721/extensions/ERC721Burnable.sol +26 -0
  418. package/token/ERC721/extensions/ERC721Consecutive.sol +176 -0
  419. package/token/ERC721/extensions/ERC721Crosschain.sol +38 -0
  420. package/token/ERC721/extensions/ERC721Enumerable.sol +165 -0
  421. package/token/ERC721/extensions/ERC721Pausable.sol +37 -0
  422. package/token/ERC721/extensions/ERC721Royalty.sol +26 -0
  423. package/token/ERC721/extensions/ERC721URIStorage.sol +62 -0
  424. package/token/ERC721/extensions/ERC721Votes.sol +47 -0
  425. package/token/ERC721/extensions/ERC721Wrapper.sol +102 -0
  426. package/token/ERC721/extensions/IERC721Enumerable.sol +29 -0
  427. package/token/ERC721/extensions/IERC721Metadata.sol +27 -0
  428. package/token/ERC721/utils/ERC721Holder.sol +26 -0
  429. package/token/ERC721/utils/ERC721Utils.sol +50 -0
  430. package/token/common/ERC2981.sol +140 -0
  431. package/utils/Address.sol +167 -0
  432. package/utils/Arrays.sol +905 -0
  433. package/utils/Base58.sol +240 -0
  434. package/utils/Base64.sol +234 -0
  435. package/utils/BlockHeader.sol +312 -0
  436. package/utils/Blockhash.sol +54 -0
  437. package/utils/Bytes.sol +329 -0
  438. package/utils/CAIP10.sol +54 -0
  439. package/utils/CAIP2.sol +51 -0
  440. package/utils/Calldata.sol +25 -0
  441. package/utils/Comparators.sol +19 -0
  442. package/utils/Context.sol +28 -0
  443. package/utils/Create2.sol +91 -0
  444. package/utils/Create3.sol +133 -0
  445. package/utils/ERC6372Utils.sol +53 -0
  446. package/utils/Errors.sol +34 -0
  447. package/utils/LowLevelCall.sol +127 -0
  448. package/utils/Memory.sol +151 -0
  449. package/utils/Multicall.sol +37 -0
  450. package/utils/Nonces.sol +47 -0
  451. package/utils/NoncesKeyed.sol +75 -0
  452. package/utils/Packing.sol +1656 -0
  453. package/utils/Panic.sol +57 -0
  454. package/utils/Pausable.sol +112 -0
  455. package/utils/RLP.sol +487 -0
  456. package/utils/RateLimiter.sol +310 -0
  457. package/utils/ReentrancyGuard.sol +119 -0
  458. package/utils/ReentrancyGuardTransient.sol +84 -0
  459. package/utils/RelayedCall.sol +145 -0
  460. package/utils/ShortStrings.sol +122 -0
  461. package/utils/SimulateCall.sol +114 -0
  462. package/utils/SlotDerivation.sol +155 -0
  463. package/utils/StorageSlot.sol +143 -0
  464. package/utils/Strings.sol +532 -0
  465. package/utils/TransientSlot.sol +183 -0
  466. package/utils/cryptography/ECDSA.sol +284 -0
  467. package/utils/cryptography/EIP712.sol +168 -0
  468. package/utils/cryptography/Hashes.sol +31 -0
  469. package/utils/cryptography/MerkleProof.sol +510 -0
  470. package/utils/cryptography/MessageHashUtils.sol +228 -0
  471. package/utils/cryptography/P256.sol +409 -0
  472. package/utils/cryptography/RSA.sol +159 -0
  473. package/utils/cryptography/SignatureChecker.sol +199 -0
  474. package/utils/cryptography/TrieProof.sol +256 -0
  475. package/utils/cryptography/WebAuthn.sol +269 -0
  476. package/utils/cryptography/draft-ERC7739Utils.sol +215 -0
  477. package/utils/cryptography/signers/AbstractSigner.sol +23 -0
  478. package/utils/cryptography/signers/MultiSignerERC7913.sol +336 -0
  479. package/utils/cryptography/signers/MultiSignerERC7913Weighted.sol +208 -0
  480. package/utils/cryptography/signers/SignerECDSA.sol +56 -0
  481. package/utils/cryptography/signers/SignerEIP7702.sol +25 -0
  482. package/utils/cryptography/signers/SignerERC7913.sol +63 -0
  483. package/utils/cryptography/signers/SignerP256.sol +64 -0
  484. package/utils/cryptography/signers/SignerRSA.sol +65 -0
  485. package/utils/cryptography/signers/SignerWebAuthn.sol +45 -0
  486. package/utils/cryptography/signers/draft-ERC7739.sol +99 -0
  487. package/utils/cryptography/verifiers/ERC7913P256Verifier.sol +29 -0
  488. package/utils/cryptography/verifiers/ERC7913RSAVerifier.sol +23 -0
  489. package/utils/cryptography/verifiers/ERC7913WebAuthnVerifier.sol +45 -0
  490. package/utils/draft-InteroperableAddress.sol +245 -0
  491. package/utils/introspection/ERC165.sol +25 -0
  492. package/utils/introspection/ERC165Checker.sol +142 -0
  493. package/utils/introspection/IERC165.sol +25 -0
  494. package/utils/math/Math.sol +763 -0
  495. package/utils/math/SafeCast.sol +1162 -0
  496. package/utils/math/SignedMath.sol +68 -0
  497. package/utils/structs/Accumulators.sol +135 -0
  498. package/utils/structs/BitMaps.sol +61 -0
  499. package/utils/structs/Checkpoints.sol +881 -0
  500. package/utils/structs/CircularBuffer.sol +152 -0
  501. package/utils/structs/DoubleEndedQueue.sol +280 -0
  502. package/utils/structs/EnumerableMap.sol +1870 -0
  503. package/utils/structs/EnumerableSet.sol +1177 -0
  504. package/utils/structs/Heap.sol +259 -0
  505. package/utils/structs/MerkleTree.sol +267 -0
  506. package/utils/types/Time.sol +133 -0
  507. package/vendor/compound/ICompoundTimelock.sol +86 -0
@@ -0,0 +1,64 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (utils/cryptography/signers/SignerP256.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {P256} from "../P256.sol";
7
+ import {AbstractSigner} from "./AbstractSigner.sol";
8
+
9
+ /**
10
+ * @dev Implementation of {AbstractSigner} using xref:api:utils/cryptography#P256[P256] signatures.
11
+ *
12
+ * For {Account} usage, a {_setSigner} function is provided to set the {signer} public key.
13
+ * Doing so is easier for a factory, who is likely to use initializable clones of this contract.
14
+ *
15
+ * Example of usage:
16
+ *
17
+ * ```solidity
18
+ * contract MyAccountP256 is Account, SignerP256, Initializable {
19
+ * function initialize(bytes32 qx, bytes32 qy) public initializer {
20
+ * _setSigner(qx, qy);
21
+ * }
22
+ * }
23
+ * ```
24
+ *
25
+ * IMPORTANT: Failing to call {_setSigner} either during construction (if used standalone)
26
+ * or during initialization (if used as a clone) may leave the signer either front-runnable or unusable.
27
+ */
28
+ abstract contract SignerP256 is AbstractSigner {
29
+ bytes32 private _qx;
30
+ bytes32 private _qy;
31
+
32
+ error SignerP256InvalidPublicKey(bytes32 qx, bytes32 qy);
33
+
34
+ constructor(bytes32 qx, bytes32 qy) {
35
+ _setSigner(qx, qy);
36
+ }
37
+
38
+ /**
39
+ * @dev Sets the signer with a P256 public key. This function should be called during construction
40
+ * or through an initializer.
41
+ */
42
+ function _setSigner(bytes32 qx, bytes32 qy) internal {
43
+ if (!P256.isValidPublicKey(qx, qy)) revert SignerP256InvalidPublicKey(qx, qy);
44
+ _qx = qx;
45
+ _qy = qy;
46
+ }
47
+
48
+ /// @dev Return the signer's P256 public key.
49
+ function signer() public view virtual returns (bytes32 qx, bytes32 qy) {
50
+ return (_qx, _qy);
51
+ }
52
+
53
+ /// @inheritdoc AbstractSigner
54
+ function _rawSignatureValidation(
55
+ bytes32 hash,
56
+ bytes calldata signature
57
+ ) internal view virtual override returns (bool) {
58
+ if (signature.length < 0x40) return false;
59
+ bytes32 r = bytes32(signature[0x00:0x20]);
60
+ bytes32 s = bytes32(signature[0x20:0x40]);
61
+ (bytes32 qx, bytes32 qy) = signer();
62
+ return P256.verify(hash, r, s, qx, qy);
63
+ }
64
+ }
@@ -0,0 +1,65 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (utils/cryptography/signers/SignerRSA.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {RSA} from "../RSA.sol";
7
+ import {AbstractSigner} from "./AbstractSigner.sol";
8
+
9
+ /**
10
+ * @dev Implementation of {AbstractSigner} using xref:api:utils/cryptography#RSA[RSA] signatures.
11
+ *
12
+ * For {Account} usage, a {_setSigner} function is provided to set the {signer} public key.
13
+ * Doing so is easier for a factory, who is likely to use initializable clones of this contract.
14
+ *
15
+ * Example of usage:
16
+ *
17
+ * ```solidity
18
+ * contract MyAccountRSA is Account, SignerRSA, Initializable {
19
+ * function initialize(bytes memory e, bytes memory n) public initializer {
20
+ * _setSigner(e, n);
21
+ * }
22
+ * }
23
+ * ```
24
+ *
25
+ * IMPORTANT: Failing to call {_setSigner} either during construction (if used standalone)
26
+ * or during initialization (if used as a clone) may leave the signer either front-runnable or unusable.
27
+ */
28
+ abstract contract SignerRSA is AbstractSigner {
29
+ bytes private _e;
30
+ bytes private _n;
31
+
32
+ constructor(bytes memory e, bytes memory n) {
33
+ _setSigner(e, n);
34
+ }
35
+
36
+ /**
37
+ * @dev Sets the signer with a RSA public key. This function should be called during construction
38
+ * or through an initializer.
39
+ */
40
+ function _setSigner(bytes memory e, bytes memory n) internal {
41
+ _e = e;
42
+ _n = n;
43
+ }
44
+
45
+ /// @dev Return the signer's RSA public key.
46
+ function signer() public view virtual returns (bytes memory e, bytes memory n) {
47
+ return (_e, _n);
48
+ }
49
+
50
+ /**
51
+ * @dev See {AbstractSigner-_rawSignatureValidation}. Verifies a PKCSv1.5 signature by calling
52
+ * xref:api:utils/cryptography.adoc#RSA-pkcs1Sha256-bytes-bytes-bytes-bytes-[RSA.pkcs1Sha256].
53
+ *
54
+ * IMPORTANT: Following the RSASSA-PKCS1-V1_5-VERIFY procedure outlined in RFC8017 (section 8.2.2), the
55
+ * provided `hash` is used as the `M` (message) and rehashed using SHA256 according to EMSA-PKCS1-v1_5
56
+ * encoding as per section 9.2 (step 1) of the RFC.
57
+ */
58
+ function _rawSignatureValidation(
59
+ bytes32 hash,
60
+ bytes calldata signature
61
+ ) internal view virtual override returns (bool) {
62
+ (bytes memory e, bytes memory n) = signer();
63
+ return RSA.pkcs1Sha256(abi.encodePacked(hash), signature, e, n);
64
+ }
65
+ }
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (utils/cryptography/signers/SignerWebAuthn.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ import {WebAuthn} from "../WebAuthn.sol";
7
+ import {SignerP256} from "./SignerP256.sol";
8
+
9
+ /**
10
+ * @dev Implementation of {SignerP256} that supports WebAuthn authentication assertions.
11
+ *
12
+ * This contract enables signature validation using WebAuthn authentication assertions,
13
+ * leveraging the P256 public key stored in the contract.
14
+ *
15
+ * The signature is expected to be an abi-encoded {WebAuthn-WebAuthnAuth} struct.
16
+ *
17
+ * Example usage:
18
+ *
19
+ * ```solidity
20
+ * contract MyAccountWebAuthn is Account, SignerWebAuthn, Initializable {
21
+ * function initialize(bytes32 qx, bytes32 qy) public initializer {
22
+ * _setSigner(qx, qy);
23
+ * }
24
+ * }
25
+ * ```
26
+ *
27
+ * IMPORTANT: Failing to call {_setSigner} either during construction (if used standalone)
28
+ * or during initialization (if used as a clone) may leave the signer either front-runnable or unusable.
29
+ */
30
+ abstract contract SignerWebAuthn is SignerP256 {
31
+ /**
32
+ * @dev Validates a raw signature using the WebAuthn authentication assertion.
33
+ *
34
+ * Returns `false` if the signature is not a valid WebAuthn authentication assertion.
35
+ */
36
+ function _rawSignatureValidation(
37
+ bytes32 hash,
38
+ bytes calldata signature
39
+ ) internal view virtual override returns (bool) {
40
+ (bool decodeSuccess, WebAuthn.WebAuthnAuth calldata auth) = WebAuthn.tryDecodeAuth(signature);
41
+ if (!decodeSuccess) return false;
42
+ (bytes32 qx, bytes32 qy) = signer();
43
+ return WebAuthn.verify(abi.encodePacked(hash), auth, qx, qy);
44
+ }
45
+ }
@@ -0,0 +1,99 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (utils/cryptography/signers/draft-ERC7739.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ import {IERC1271} from "../../../interfaces/IERC1271.sol";
7
+ import {ERC7739Utils} from "../draft-ERC7739Utils.sol";
8
+ import {EIP712} from "../EIP712.sol";
9
+ import {MessageHashUtils} from "../MessageHashUtils.sol";
10
+ import {AbstractSigner} from "./AbstractSigner.sol";
11
+
12
+ /**
13
+ * @dev Validates signatures wrapping the message hash in a nested EIP712 type. See {ERC7739Utils}.
14
+ *
15
+ * Linking the signature to the EIP-712 domain separator is a security measure to prevent signature replay across different
16
+ * EIP-712 domains (e.g. a single offchain owner of multiple contracts).
17
+ *
18
+ * This contract requires implementing the {_rawSignatureValidation} function, which passes the wrapped message hash,
19
+ * which may be either an typed data or a personal sign nested type.
20
+ *
21
+ * NOTE: xref:api:utils/cryptography#EIP712[EIP-712] uses xref:api:utils/cryptography#ShortStrings[ShortStrings] to
22
+ * optimize gas costs for short strings (up to 31 characters). Consider that strings longer than that will use storage,
23
+ * which may limit the ability of the signer to be used within the ERC-4337 validation phase (due to
24
+ * https://eips.ethereum.org/EIPS/eip-7562#storage-rules[ERC-7562 storage access rules]).
25
+ */
26
+ abstract contract ERC7739 is AbstractSigner, EIP712, IERC1271 {
27
+ using ERC7739Utils for *;
28
+ using MessageHashUtils for bytes32;
29
+
30
+ /**
31
+ * @dev Attempts validating the signature in a nested EIP-712 type.
32
+ *
33
+ * A nested EIP-712 type might be presented in 2 different ways:
34
+ *
35
+ * - As a nested EIP-712 typed data
36
+ * - As a _personal_ signature (an EIP-712 mimic of the `eth_personalSign` for a smart contract)
37
+ */
38
+ function isValidSignature(bytes32 hash, bytes calldata signature) public view virtual returns (bytes4 result) {
39
+ // For the hash `0x7739773977397739773977397739773977397739773977397739773977397739` and an empty signature,
40
+ // we return the magic value `0x77390001` as it's assumed impossible to find a preimage for it that can be used
41
+ // maliciously. Useful for simulation purposes and to validate whether the contract supports ERC-7739.
42
+ return
43
+ (_isValidNestedTypedDataSignature(hash, signature) || _isValidNestedPersonalSignSignature(hash, signature))
44
+ ? IERC1271.isValidSignature.selector
45
+ : (hash == 0x7739773977397739773977397739773977397739773977397739773977397739 && signature.length == 0)
46
+ ? bytes4(0x77390001)
47
+ : bytes4(0xffffffff);
48
+ }
49
+
50
+ /**
51
+ * @dev Nested personal signature verification.
52
+ */
53
+ function _isValidNestedPersonalSignSignature(bytes32 hash, bytes calldata signature) private view returns (bool) {
54
+ return _rawSignatureValidation(_domainSeparatorV4().toTypedDataHash(hash.personalSignStructHash()), signature);
55
+ }
56
+
57
+ /**
58
+ * @dev Nested EIP-712 typed data verification.
59
+ */
60
+ function _isValidNestedTypedDataSignature(
61
+ bytes32 hash,
62
+ bytes calldata encodedSignature
63
+ ) private view returns (bool) {
64
+ // decode signature
65
+ (
66
+ bytes calldata signature,
67
+ bytes32 appSeparator,
68
+ bytes32 contentsHash,
69
+ string calldata contentsDescr
70
+ ) = encodedSignature.decodeTypedDataSig();
71
+
72
+ (string calldata contentsName, string calldata contentsType) = contentsDescr.decodeContentsDescr();
73
+
74
+ // Check that contentHash and separator are correct
75
+ // Rebuild nested hash
76
+ return
77
+ hash == appSeparator.toTypedDataHash(contentsHash) &&
78
+ bytes(contentsName).length != 0 &&
79
+ _rawSignatureValidation(
80
+ appSeparator.toTypedDataHash(
81
+ ERC7739Utils.typedDataSignStructHash(contentsName, contentsType, contentsHash, _buildDomainBytes())
82
+ ),
83
+ signature
84
+ );
85
+ }
86
+
87
+ function _buildDomainBytes() private view returns (bytes memory) {
88
+ (
89
+ ,
90
+ string memory name,
91
+ string memory version,
92
+ uint256 chainId,
93
+ address verifyingContract,
94
+ bytes32 salt,
95
+
96
+ ) = eip712Domain();
97
+ return abi.encode(keccak256(bytes(name)), keccak256(bytes(version)), chainId, verifyingContract, salt);
98
+ }
99
+ }
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (utils/cryptography/verifiers/ERC7913P256Verifier.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {IERC7913SignatureVerifier} from "../../../interfaces/IERC7913.sol";
7
+ import {P256} from "../P256.sol";
8
+
9
+ /**
10
+ * @dev ERC-7913 signature verifier that support P256 (secp256r1) keys.
11
+ *
12
+ * @custom:stateless
13
+ */
14
+ contract ERC7913P256Verifier is IERC7913SignatureVerifier {
15
+ /// @inheritdoc IERC7913SignatureVerifier
16
+ function verify(bytes calldata key, bytes32 hash, bytes calldata signature) public view virtual returns (bytes4) {
17
+ // Signature length may be 0x40 or 0x41.
18
+ if (key.length == 0x40 && signature.length >= 0x40) {
19
+ bytes32 qx = bytes32(key[0x00:0x20]);
20
+ bytes32 qy = bytes32(key[0x20:0x40]);
21
+ bytes32 r = bytes32(signature[0x00:0x20]);
22
+ bytes32 s = bytes32(signature[0x20:0x40]);
23
+ if (P256.verify(hash, r, s, qx, qy)) {
24
+ return IERC7913SignatureVerifier.verify.selector;
25
+ }
26
+ }
27
+ return 0xFFFFFFFF;
28
+ }
29
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (utils/cryptography/verifiers/ERC7913RSAVerifier.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {IERC7913SignatureVerifier} from "../../../interfaces/IERC7913.sol";
7
+ import {RSA} from "../RSA.sol";
8
+
9
+ /**
10
+ * @dev ERC-7913 signature verifier that support RSA keys.
11
+ *
12
+ * @custom:stateless
13
+ */
14
+ contract ERC7913RSAVerifier is IERC7913SignatureVerifier {
15
+ /// @inheritdoc IERC7913SignatureVerifier
16
+ function verify(bytes calldata key, bytes32 hash, bytes calldata signature) public view virtual returns (bytes4) {
17
+ (bytes memory e, bytes memory n) = abi.decode(key, (bytes, bytes));
18
+ return
19
+ RSA.pkcs1Sha256(abi.encodePacked(hash), signature, e, n)
20
+ ? IERC7913SignatureVerifier.verify.selector
21
+ : bytes4(0xFFFFFFFF);
22
+ }
23
+ }
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (utils/cryptography/verifiers/ERC7913WebAuthnVerifier.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ import {IERC7913SignatureVerifier} from "../../../interfaces/IERC7913.sol";
7
+ import {WebAuthn} from "../WebAuthn.sol";
8
+
9
+ /**
10
+ * @dev ERC-7913 signature verifier that supports WebAuthn authentication assertions.
11
+ *
12
+ * This verifier enables the validation of WebAuthn signatures using P256 public keys.
13
+ * The key is expected to be a 64-byte concatenation of the P256 public key coordinates (qx || qy).
14
+ * The signature is expected to be an abi-encoded {WebAuthn-WebAuthnAuth} struct.
15
+ *
16
+ * Uses {WebAuthn-verify} for signature verification, which performs the essential
17
+ * WebAuthn checks: type validation, challenge matching, and cryptographic signature verification.
18
+ *
19
+ * NOTE: Wallets that may require default P256 validation may install a P256 verifier separately.
20
+ *
21
+ * @custom:stateless
22
+ */
23
+ contract ERC7913WebAuthnVerifier is IERC7913SignatureVerifier {
24
+ /// @inheritdoc IERC7913SignatureVerifier
25
+ function verify(bytes calldata key, bytes32 hash, bytes calldata signature) public view virtual returns (bytes4) {
26
+ (bool decodeSuccess, WebAuthn.WebAuthnAuth calldata auth) = WebAuthn.tryDecodeAuth(signature);
27
+
28
+ return
29
+ decodeSuccess &&
30
+ key.length == 0x40 &&
31
+ WebAuthn.verify(
32
+ abi.encodePacked(hash),
33
+ auth,
34
+ bytes32(key[0x00:0x20]),
35
+ bytes32(key[0x20:0x40]),
36
+ _requireUV()
37
+ )
38
+ ? IERC7913SignatureVerifier.verify.selector
39
+ : bytes4(0xFFFFFFFF);
40
+ }
41
+
42
+ function _requireUV() internal pure virtual returns (bool) {
43
+ return true;
44
+ }
45
+ }
@@ -0,0 +1,245 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (utils/draft-InteroperableAddress.sol)
3
+
4
+ pragma solidity ^0.8.26;
5
+
6
+ import {Bytes} from "./Bytes.sol";
7
+ import {Calldata} from "./Calldata.sol";
8
+ import {Math} from "./math/Math.sol";
9
+ import {SafeCast} from "./math/SafeCast.sol";
10
+
11
+ /**
12
+ * @dev Helper library to format and parse https://ethereum-magicians.org/t/erc-7930-interoperable-addresses/23365[ERC-7930] interoperable
13
+ * addresses.
14
+ */
15
+ library InteroperableAddress {
16
+ using SafeCast for uint256;
17
+ using Bytes for bytes;
18
+
19
+ error InteroperableAddressParsingError(bytes);
20
+ error InteroperableAddressEmptyReferenceAndAddress();
21
+
22
+ /**
23
+ * @dev Format an ERC-7930 interoperable address (version 1) from its components `chainType`, `chainReference`
24
+ * and `addr`. This is a generic function that supports any chain type, chain reference and address supported by
25
+ * ERC-7930, including interoperable addresses with empty chain reference or empty address.
26
+ */
27
+ function formatV1(
28
+ bytes2 chainType,
29
+ bytes memory chainReference,
30
+ bytes memory addr
31
+ ) internal pure returns (bytes memory) {
32
+ require(chainReference.length > 0 || addr.length > 0, InteroperableAddressEmptyReferenceAndAddress());
33
+ return
34
+ abi.encodePacked(
35
+ bytes2(0x0001),
36
+ chainType,
37
+ chainReference.length.toUint8(),
38
+ chainReference,
39
+ addr.length.toUint8(),
40
+ addr
41
+ );
42
+ }
43
+
44
+ /**
45
+ * @dev Variant of {formatV1-bytes2-bytes-bytes-} specific to EVM chains. Returns the ERC-7930 interoperable
46
+ * address (version 1) for a given chainid and ethereum address.
47
+ */
48
+ function formatEvmV1(uint256 chainid, address addr) internal pure returns (bytes memory) {
49
+ bytes memory chainReference = _toChainReference(chainid);
50
+ return abi.encodePacked(bytes4(0x00010000), uint8(chainReference.length), chainReference, uint8(20), addr);
51
+ }
52
+
53
+ /**
54
+ * @dev Variant of {formatV1-bytes2-bytes-bytes-} that specifies an EVM chain without an address.
55
+ */
56
+ function formatEvmV1(uint256 chainid) internal pure returns (bytes memory) {
57
+ bytes memory chainReference = _toChainReference(chainid);
58
+ return abi.encodePacked(bytes4(0x00010000), uint8(chainReference.length), chainReference, uint8(0));
59
+ }
60
+
61
+ /**
62
+ * @dev Variant of {formatV1-bytes2-bytes-bytes-} that specifies an EVM address without a chain reference.
63
+ */
64
+ function formatEvmV1(address addr) internal pure returns (bytes memory) {
65
+ return abi.encodePacked(bytes6(0x000100000014), addr);
66
+ }
67
+
68
+ /**
69
+ * @dev Parse an ERC-7930 interoperable address (version 1) into its different components. Reverts if the input is
70
+ * not following a version 1 of ERC-7930.
71
+ *
72
+ * NOTE: Trailing bytes after a valid v1 encoding are ignored. The same decoded address may therefore correspond
73
+ * to multiple distinct input byte strings.
74
+ */
75
+ function parseV1(
76
+ bytes memory self
77
+ ) internal pure returns (bytes2 chainType, bytes memory chainReference, bytes memory addr) {
78
+ bool success;
79
+ (success, chainType, chainReference, addr) = tryParseV1(self);
80
+ require(success, InteroperableAddressParsingError(self));
81
+ }
82
+
83
+ /**
84
+ * @dev Variant of {parseV1} that handles calldata slices to reduce memory copy costs.
85
+ */
86
+ function parseV1Calldata(
87
+ bytes calldata self
88
+ ) internal pure returns (bytes2 chainType, bytes calldata chainReference, bytes calldata addr) {
89
+ bool success;
90
+ (success, chainType, chainReference, addr) = tryParseV1Calldata(self);
91
+ require(success, InteroperableAddressParsingError(self));
92
+ }
93
+
94
+ /**
95
+ * @dev Variant of {parseV1} that does not revert on invalid input. Instead, it returns `false` as the first
96
+ * return value to indicate parsing failure when the input does not follow version 1 of ERC-7930.
97
+ */
98
+ function tryParseV1(
99
+ bytes memory self
100
+ ) internal pure returns (bool success, bytes2 chainType, bytes memory chainReference, bytes memory addr) {
101
+ unchecked {
102
+ if (self.length < 0x06) return (false, 0x0000, _emptyBytesMemory(), _emptyBytesMemory());
103
+
104
+ bytes2 version = _readBytes2(self, 0x00);
105
+ if (version != bytes2(0x0001)) return (false, 0x0000, _emptyBytesMemory(), _emptyBytesMemory());
106
+
107
+ uint256 chainReferenceLength = uint8(self[0x04]);
108
+ if (self.length < 0x06 + chainReferenceLength)
109
+ return (false, 0x0000, _emptyBytesMemory(), _emptyBytesMemory());
110
+ chainReference = self.slice(0x05, 0x05 + chainReferenceLength);
111
+
112
+ uint256 addrLength = uint8(self[0x05 + chainReferenceLength]);
113
+ if (self.length < 0x06 + chainReferenceLength + addrLength)
114
+ return (false, 0x0000, _emptyBytesMemory(), _emptyBytesMemory());
115
+ addr = self.slice(0x06 + chainReferenceLength, 0x06 + chainReferenceLength + addrLength);
116
+
117
+ // At least one of chainReference or addr must be non-empty
118
+ success = (chainReferenceLength > 0) || (addrLength > 0);
119
+ chainType = success ? _readBytes2(self, 0x02) : bytes2(0);
120
+ }
121
+ }
122
+
123
+ /**
124
+ * @dev Variant of {tryParseV1} that handles calldata slices to reduce memory copy costs.
125
+ */
126
+ function tryParseV1Calldata(
127
+ bytes calldata self
128
+ ) internal pure returns (bool success, bytes2 chainType, bytes calldata chainReference, bytes calldata addr) {
129
+ unchecked {
130
+ if (self.length < 0x06) return (false, 0x0000, Calldata.emptyBytes(), Calldata.emptyBytes());
131
+
132
+ bytes2 version = _readBytes2Calldata(self, 0x00);
133
+ if (version != bytes2(0x0001)) return (false, 0x0000, Calldata.emptyBytes(), Calldata.emptyBytes());
134
+
135
+ uint256 chainReferenceLength = uint8(self[0x04]);
136
+ if (self.length < 0x06 + chainReferenceLength)
137
+ return (false, 0x0000, Calldata.emptyBytes(), Calldata.emptyBytes());
138
+ chainReference = self[0x05:0x05 + chainReferenceLength];
139
+
140
+ uint256 addrLength = uint8(self[0x05 + chainReferenceLength]);
141
+ if (self.length < 0x06 + chainReferenceLength + addrLength)
142
+ return (false, 0x0000, Calldata.emptyBytes(), Calldata.emptyBytes());
143
+ addr = self[0x06 + chainReferenceLength:0x06 + chainReferenceLength + addrLength];
144
+
145
+ // At least one of chainReference or addr must be non-empty
146
+ success = (chainReferenceLength > 0) || (addrLength > 0);
147
+ chainType = success ? _readBytes2Calldata(self, 0x02) : bytes2(0);
148
+ }
149
+ }
150
+
151
+ /**
152
+ * @dev Parse an ERC-7930 interoperable address (version 1) corresponding to an EIP-155 chain. The `chainId` and
153
+ * `addr` return values will be zero if the input doesn't include a chainReference or an address, respectively.
154
+ *
155
+ * NOTE: Trailing bytes after a valid v1 encoding are ignored. The same decoded (chainId, addr) may therefore
156
+ * correspond to multiple distinct input byte strings.
157
+ *
158
+ * Requirements:
159
+ *
160
+ * * The input must be a valid ERC-7930 interoperable address (version 1)
161
+ * * The underlying chainType must be "eip-155"
162
+ */
163
+ function parseEvmV1(bytes memory self) internal pure returns (uint256 chainId, address addr) {
164
+ bool success;
165
+ (success, chainId, addr) = tryParseEvmV1(self);
166
+ require(success, InteroperableAddressParsingError(self));
167
+ }
168
+
169
+ /**
170
+ * @dev Variant of {parseEvmV1} that handles calldata slices to reduce memory copy costs.
171
+ */
172
+ function parseEvmV1Calldata(bytes calldata self) internal pure returns (uint256 chainId, address addr) {
173
+ bool success;
174
+ (success, chainId, addr) = tryParseEvmV1Calldata(self);
175
+ require(success, InteroperableAddressParsingError(self));
176
+ }
177
+
178
+ /**
179
+ * @dev Variant of {parseEvmV1} that does not revert on invalid input. Instead, it returns `false` as the first
180
+ * return value to indicate parsing failure when the input does not follow version 1 of ERC-7930.
181
+ */
182
+ function tryParseEvmV1(bytes memory self) internal pure returns (bool success, uint256 chainId, address addr) {
183
+ (bool success_, bytes2 chainType_, bytes memory chainReference_, bytes memory addr_) = tryParseV1(self);
184
+ return
185
+ (success_ &&
186
+ chainType_ == 0x0000 &&
187
+ chainReference_.length < 33 &&
188
+ (addr_.length == 0 || addr_.length == 20))
189
+ ? (
190
+ true,
191
+ uint256(bytes32(chainReference_)) >> (256 - 8 * chainReference_.length),
192
+ address(bytes20(addr_))
193
+ )
194
+ : (false, 0, address(0));
195
+ }
196
+
197
+ /**
198
+ * @dev Variant of {tryParseEvmV1} that handles calldata slices to reduce memory copy costs.
199
+ */
200
+ function tryParseEvmV1Calldata(
201
+ bytes calldata self
202
+ ) internal pure returns (bool success, uint256 chainId, address addr) {
203
+ (bool success_, bytes2 chainType_, bytes calldata chainReference_, bytes calldata addr_) = tryParseV1Calldata(
204
+ self
205
+ );
206
+ return
207
+ (success_ &&
208
+ chainType_ == 0x0000 &&
209
+ chainReference_.length < 33 &&
210
+ (addr_.length == 0 || addr_.length == 20))
211
+ ? (
212
+ true,
213
+ uint256(bytes32(chainReference_)) >> (256 - 8 * chainReference_.length),
214
+ address(bytes20(addr_))
215
+ )
216
+ : (false, 0, address(0));
217
+ }
218
+
219
+ function _toChainReference(uint256 chainid) private pure returns (bytes memory) {
220
+ unchecked {
221
+ // length fits in a uint8: log256(type(uint256).max) is 31
222
+ uint256 length = Math.log256(chainid) + 1;
223
+ return abi.encodePacked(chainid).slice(32 - length);
224
+ }
225
+ }
226
+
227
+ function _readBytes2(bytes memory buffer, uint256 offset) private pure returns (bytes2 value) {
228
+ // This is not memory safe in the general case, but all calls to this private function are within bounds.
229
+ assembly ("memory-safe") {
230
+ value := shl(240, shr(240, mload(add(add(buffer, 0x20), offset))))
231
+ }
232
+ }
233
+
234
+ function _readBytes2Calldata(bytes calldata buffer, uint256 offset) private pure returns (bytes2 value) {
235
+ assembly ("memory-safe") {
236
+ value := shl(240, shr(240, calldataload(add(buffer.offset, offset))))
237
+ }
238
+ }
239
+
240
+ function _emptyBytesMemory() private pure returns (bytes memory result) {
241
+ assembly ("memory-safe") {
242
+ result := 0x60 // mload(0x60) is always 0
243
+ }
244
+ }
245
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/ERC165.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {IERC165} from "./IERC165.sol";
7
+
8
+ /**
9
+ * @dev Implementation of the {IERC165} interface.
10
+ *
11
+ * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
12
+ * for the additional interface id that will be supported. For example:
13
+ *
14
+ * ```solidity
15
+ * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
16
+ * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
17
+ * }
18
+ * ```
19
+ */
20
+ abstract contract ERC165 is IERC165 {
21
+ /// @inheritdoc IERC165
22
+ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
23
+ return interfaceId == type(IERC165).interfaceId;
24
+ }
25
+ }