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,190 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (account/paymaster/extensions/PaymasterERC20Guarantor.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {IERC20, SafeERC20} from "../../../token/ERC20/utils/SafeERC20.sol";
7
+ import {Math} from "../../../utils/math/Math.sol";
8
+ import {ERC4337Utils, PackedUserOperation} from "../../utils/ERC4337Utils.sol";
9
+ import {PaymasterERC20} from "./PaymasterERC20.sol";
10
+
11
+ /**
12
+ * @dev Extension of {PaymasterERC20} that enables third parties to guarantee user operations.
13
+ *
14
+ * This contract allows a guarantor to pre-fund user operations on behalf of users. The guarantor
15
+ * pays the maximum possible gas cost upfront, and after execution:
16
+ * 1. If the user repays the guarantor, the guarantor gets their funds back
17
+ * 2. If the user fails to repay, the guarantor absorbs the cost
18
+ *
19
+ * A common use case is for guarantors to pay for the operations of users claiming airdrops. In this scenario:
20
+ *
21
+ * * The guarantor pays the gas fees upfront
22
+ * * The user claims their airdrop tokens
23
+ * * The user repays the guarantor from the claimed tokens
24
+ * * If the user fails to repay, the guarantor absorbs the cost
25
+ *
26
+ * The guarantor is identified through the {_fetchGuarantor} function, which must be implemented
27
+ * by developers to determine who can guarantee operations. This allows for flexible guarantor selection
28
+ * logic based on the specific requirements of the application.
29
+ */
30
+ abstract contract PaymasterERC20Guarantor is PaymasterERC20 {
31
+ using ERC4337Utils for *;
32
+ using Math for *;
33
+ using SafeERC20 for IERC20;
34
+
35
+ /// @dev Emitted when a user operation identified by `userOpHash` is guaranteed by a `guarantor` for `prefundAmount`.
36
+ event UserOperationGuaranteed(bytes32 indexed userOpHash, address indexed guarantor, uint256 prefundAmount);
37
+
38
+ /**
39
+ * @dev Prefunds the user operation using either the guarantor or the default prefunder, and
40
+ * appends `userOp.sender` to the tail of `prefundContext` so the refund process can identify
41
+ * the user operation sender.
42
+ *
43
+ * For guaranteed ops, `prefundAmount` is inflated by {_guaranteedPostOpCost} worth of tokens
44
+ * so the prefund pulled from the guarantor covers the extra postOp work done in {_refund}
45
+ * ({SafeERC20-trySafeTransferFrom} from the user + {SafeERC20-trySafeTransfer} to the guarantor).
46
+ *
47
+ * Guaranteed ops whose `paymasterPostOpGasLimit` cannot cover the guaranteed {_refund}
48
+ * ({PaymasterERC20-_postOpCost} + {_guaranteedPostOpCost}) are rejected with `SIG_VALIDATION_FAILED`.
49
+ * The floor uses the value returned by those virtuals, so an integrator override that under-estimates
50
+ * the actual token-specific cost reintroduces the strand-the-prefund failure mode described in
51
+ * {PaymasterERC20-_postOp}. Size {PaymasterERC20-_postOpCost} and {_guaranteedPostOpCost} for the
52
+ * specific ERC-20 accepted by the paymaster.
53
+ *
54
+ * Provisioning exactly the floor carries no unused-gas penalty: {_postOpGasBudget} covers it, so
55
+ * {PaymasterERC20-_postOpGasPenalty} only prices the limit provisioned on top of it.
56
+ */
57
+ function _prefund(
58
+ PackedUserOperation calldata userOp,
59
+ bytes32 userOpHash,
60
+ IERC20 token,
61
+ uint256 tokenPrice,
62
+ address prefunder_,
63
+ uint256 prefundAmount_
64
+ )
65
+ internal
66
+ virtual
67
+ override
68
+ returns (bool success, address prefunder, uint256 prefundAmount, bytes memory prefundContext)
69
+ {
70
+ address guarantor = _fetchGuarantor(userOp);
71
+ bool isGuaranteed = guarantor != address(0);
72
+
73
+ // If there is a guarantor, add more funds to cover the extra postOp cost
74
+ // and set the guarantor as the prefunder.
75
+ if (isGuaranteed) {
76
+ // Reject before pulling funds if the postOp gas budget can't cover the guaranteed {_refund};
77
+ // otherwise postOp reverts and strands the guarantor's prefund (see {PaymasterERC20-_postOp}).
78
+ if (userOp.paymasterPostOpGasLimit() < _postOpCost() + _guaranteedPostOpCost())
79
+ return (false, prefunder_, prefundAmount_, "");
80
+
81
+ // `_erc20Cost` may return `type(uint256).max` as an overflow sentinel. `saturatingAdd` preserves it
82
+ // so the bad value reaches `trySafeTransferFrom` and fails there, instead of reverting here.
83
+ uint256 guaranteedPostOpCost = _erc20Cost(_guaranteedPostOpCost() * userOp.maxFeePerGas(), tokenPrice);
84
+ prefundAmount_ = prefundAmount_.saturatingAdd(guaranteedPostOpCost);
85
+ prefunder_ = guarantor;
86
+ }
87
+ (success, prefunder, prefundAmount, prefundContext) = super._prefund(
88
+ userOp,
89
+ userOpHash,
90
+ token,
91
+ tokenPrice,
92
+ prefunder_,
93
+ prefundAmount_
94
+ );
95
+ if (prefunder == guarantor) {
96
+ emit UserOperationGuaranteed(userOpHash, prefunder, prefundAmount);
97
+ }
98
+ return (success, prefunder, prefundAmount, abi.encodePacked(prefundContext, userOp.sender));
99
+ }
100
+
101
+ /**
102
+ * @dev Handles the refund process for guaranteed operations.
103
+ *
104
+ * * **Non-guaranteed** (`prefunder == userOp.sender`): forward to {PaymasterERC20-_refund} and
105
+ * propagate the effective amount returned by `super._refund` so downstream extensions can
106
+ * report their actual charge (e.g. a fixed-credit policy that reduces the settlement).
107
+ * * **Guaranteed**: augment `actualAmount` by {_guaranteedPostOpCost} * `actualUserOpFeePerGas`
108
+ * (priced in tokens), pull it from `userOp.sender`, and call {PaymasterERC20-_refund} with
109
+ * `actualAmount = 0` so the guarantor gets the full `prefundAmount` back. If the user fails to pay,
110
+ * the guarantor absorbs the GUARANTEED cost (not the base cost).
111
+ *
112
+ * NOTE: For guaranteed ops, the returned `effectiveAmount` mirrors the value emitted in
113
+ * {UserOperationGuaranteed}: the guarantor's inflated `actualAmount`, not necessarily the
114
+ * amount that `super._refund` settled. Only the non-guaranteed branch propagates what a
115
+ * downstream extension actually charged.
116
+ */
117
+ function _refund(
118
+ IERC20 token,
119
+ uint256 tokenPrice,
120
+ uint256 actualAmount,
121
+ uint256 actualUserOpFeePerGas,
122
+ address prefunder,
123
+ uint256 prefundAmount,
124
+ bytes calldata prefundContext
125
+ ) internal virtual override returns (bool refunded, uint256 effectiveAmount) {
126
+ address userOpSender = address(bytes20(prefundContext[prefundContext.length - 20:]));
127
+
128
+ // If the prefunder is not the userOp sender, it means the operation is guaranteed
129
+ // In that case we:
130
+ // 1. update the actualAmount to include the extra postOp cost.
131
+ // 2. register that updated amount as the effective cost of the operation (for event logs).
132
+ // 3. try to pull the actualAmount from the userOp sender.
133
+ // 4. on success, zero out the actualAmount so super refunds the guarantor in full;
134
+ // on failure, leave it so super deducts it and the guarantor absorbs the cost.
135
+ if (prefunder != userOpSender) {
136
+ // If the values used here are able to cause that _erc20Cost math to fail (and return type(uint256).max),
137
+ // then the same failure must have already happened in the _prefund phase, causing the whole userOp to
138
+ // fail before even reaching this point.
139
+ uint256 guaranteedPostOpAmount = _erc20Cost(_guaranteedPostOpCost() * actualUserOpFeePerGas, tokenPrice);
140
+ actualAmount += guaranteedPostOpAmount;
141
+ effectiveAmount = actualAmount;
142
+
143
+ // The paymaster gets the funds first, so in case of a failure, the guarantor absorbs the cost.
144
+ if (token.trySafeTransferFrom(userOpSender, address(this), actualAmount)) {
145
+ actualAmount = 0;
146
+ }
147
+ }
148
+
149
+ uint256 returnedEffectiveAmount;
150
+ bytes calldata forwardedContext = prefundContext[:prefundContext.length - 20];
151
+ (refunded, returnedEffectiveAmount) = super._refund(
152
+ token,
153
+ tokenPrice,
154
+ actualAmount,
155
+ actualUserOpFeePerGas,
156
+ prefunder,
157
+ prefundAmount,
158
+ forwardedContext
159
+ );
160
+ return (refunded, Math.ternary(prefunder != userOpSender, effectiveAmount, returnedEffectiveAmount));
161
+ }
162
+
163
+ /**
164
+ * @dev See {PaymasterERC20-_postOpGasBudget}. Widened by {_guaranteedPostOpCost} for guaranteed operations:
165
+ * that is the extra postOp gas they are billed, and which {_prefund} requires them to provision.
166
+ */
167
+ function _postOpGasBudget(PackedUserOperation calldata userOp) internal view virtual override returns (uint256) {
168
+ return
169
+ super._postOpGasBudget(userOp) +
170
+ Math.ternary(_fetchGuarantor(userOp) == address(0), 0, _guaranteedPostOpCost());
171
+ }
172
+
173
+ /**
174
+ * @dev Fetches the guarantor address and validation data from the user operation.
175
+ *
176
+ * NOTE: Return `address(0)` to disable the guarantor feature. If supported, ensure
177
+ * explicit consent (e.g., signature verification) to prevent unauthorized use.
178
+ */
179
+ function _fetchGuarantor(PackedUserOperation calldata userOp) internal view virtual returns (address guarantor);
180
+
181
+ /**
182
+ * @dev Over-estimates the cost of the post-operation logic. Added on top of {PaymasterERC20-_postOpCost} for
183
+ * guaranteed userOps.
184
+ *
185
+ * NOTE: Like {PaymasterERC20-_postOpCost}, override with a higher value for gas-heavier tokens.
186
+ */
187
+ function _guaranteedPostOpCost() internal view virtual returns (uint256) {
188
+ return 15_000;
189
+ }
190
+ }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.7.0) (account/paymaster/extensions/PaymasterERC721Owner.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {IERC721} from "../../../interfaces/IERC721.sol";
7
+ import {ERC4337Utils, PackedUserOperation} from "../../utils/ERC4337Utils.sol";
8
+ import {Paymaster} from "../Paymaster.sol";
9
+
10
+ /**
11
+ * @dev Extension of {Paymaster} that supports account based on ownership of an ERC-721 token.
12
+ *
13
+ * This paymaster will sponsor user operations if the user has at least 1 token of the token specified
14
+ * during construction.
15
+ *
16
+ * NOTE: {_validatePaymasterUserOp} reads `token.balanceOf` during the validation phase, accessing storage in
17
+ * an external contract. ERC-7562 restricts unstaked paymasters from such accesses, and public mempool bundlers
18
+ * will reject these operations when the token contract is proxied or upgradeable. Stake the paymaster
19
+ * (see {Paymaster-_addStake}) when deploying against a public mempool.
20
+ */
21
+ abstract contract PaymasterERC721Owner is Paymaster {
22
+ IERC721 private immutable _token;
23
+
24
+ constructor(IERC721 token_) {
25
+ _token = token_;
26
+ }
27
+
28
+ /// @dev ERC-721 token used to validate the user operation.
29
+ function token() public virtual returns (IERC721) {
30
+ return _token;
31
+ }
32
+
33
+ /**
34
+ * @dev Internal validation of whether the paymaster is willing to pay for the user operation.
35
+ * Returns the context to be passed to postOp and the validation data.
36
+ *
37
+ * NOTE: The default `context` is `bytes(0)`. Developers that add a context when overriding this function MUST
38
+ * also override {_postOp} to process the context passed along.
39
+ */
40
+ function _validatePaymasterUserOp(
41
+ PackedUserOperation calldata userOp,
42
+ bytes32 /* userOpHash */,
43
+ uint256 /* maxCost */
44
+ ) internal virtual override returns (bytes memory context, uint256 validationData) {
45
+ return (
46
+ bytes(""),
47
+ // balanceOf reverts if the `userOp.sender` is the address(0), so this becomes unreachable with address(0)
48
+ // assuming a compliant entrypoint (`_validatePaymasterUserOp` is called after `validateUserOp`),
49
+ token().balanceOf(userOp.sender) == 0
50
+ ? ERC4337Utils.SIG_VALIDATION_FAILED
51
+ : ERC4337Utils.SIG_VALIDATION_SUCCESS
52
+ );
53
+ }
54
+ }
@@ -0,0 +1,125 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (account/paymaster/extensions/PaymasterSigner.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ import {Bytes} from "../../../utils/Bytes.sol";
7
+ import {Calldata} from "../../../utils/Calldata.sol";
8
+ import {EIP712} from "../../../utils/cryptography/EIP712.sol";
9
+ import {AbstractSigner} from "../../../utils/cryptography/signers/AbstractSigner.sol";
10
+ import {Memory} from "../../../utils/Memory.sol";
11
+ import {EIP7702Utils} from "../../utils/EIP7702Utils.sol";
12
+ import {ERC4337Utils, PackedUserOperation} from "../../utils/ERC4337Utils.sol";
13
+ import {Paymaster} from "../Paymaster.sol";
14
+
15
+ /**
16
+ * @dev Extension of {Paymaster} that adds signature validation. See {SignerECDSA}, {SignerP256} or {SignerRSA}.
17
+ *
18
+ * Example of usage:
19
+ *
20
+ * ```solidity
21
+ * contract MyPaymasterECDSASigner is PaymasterSigner, SignerECDSA {
22
+ * constructor(address signerAddr) EIP712("MyPaymasterECDSASigner", "1") SignerECDSA(signerAddr) {}
23
+ * }
24
+ * ```
25
+ */
26
+ abstract contract PaymasterSigner is AbstractSigner, EIP712, Paymaster {
27
+ using ERC4337Utils for *;
28
+
29
+ bytes32 private constant USER_OPERATION_REQUEST_TYPEHASH =
30
+ keccak256(
31
+ "UserOperationRequest(address sender,uint256 nonce,bytes initCode,bytes callData,bytes32 accountGasLimits,uint256 preVerificationGas,bytes32 gasFees,uint256 paymasterVerificationGasLimit,uint256 paymasterPostOpGasLimit,uint48 validAfter,uint48 validUntil)"
32
+ );
33
+
34
+ /**
35
+ * @dev Virtual function that returns the signable hash for a user operations. Given the `userOpHash`
36
+ * contains the `paymasterAndData` itself, it's not possible to sign that value directly. Instead,
37
+ * this function must be used to provide a custom mechanism to authorize an user operation.
38
+ *
39
+ * For EIP-7702 senders (i.e. `userOp.initCode` starting with the 20-byte `0x7702` marker), the
40
+ * `initCode` component of the digest substitutes the effective delegate read from `userOp.sender`'s
41
+ * code, mirroring the {IEntryPoint}'s `userOpHash` computation. For all other senders, the raw
42
+ * `initCode` is hashed directly.
43
+ */
44
+ function _signableUserOpHash(
45
+ PackedUserOperation calldata userOp,
46
+ uint48 validAfter,
47
+ uint48 validUntil
48
+ ) internal view virtual returns (bytes32) {
49
+ return
50
+ _hashTypedDataV4(
51
+ keccak256(
52
+ abi.encode(
53
+ USER_OPERATION_REQUEST_TYPEHASH,
54
+ userOp.sender,
55
+ userOp.nonce,
56
+ _effectiveInitCodeHash(userOp),
57
+ keccak256(userOp.callData),
58
+ userOp.accountGasLimits,
59
+ userOp.preVerificationGas,
60
+ userOp.gasFees,
61
+ userOp.paymasterVerificationGasLimit(),
62
+ userOp.paymasterPostOpGasLimit(),
63
+ validAfter,
64
+ validUntil
65
+ )
66
+ )
67
+ );
68
+ }
69
+
70
+ /// @dev `initCode` hash for {_signableUserOpHash}, substituting the effective delegate for EIP-7702 senders.
71
+ function _effectiveInitCodeHash(PackedUserOperation calldata userOp) private view returns (bytes32) {
72
+ // Cache the free memory pointer so the allocations below (initCode copy, and the delegate
73
+ // buffer on the EIP-7702 branch) do not persist past this function.
74
+ Memory.Pointer fmp = Memory.getFreeMemoryPointer();
75
+
76
+ // Matches Eip7702Support._isEip7702InitCode: the marker is compared over the full 20 bytes, so
77
+ // the 18 bytes following it must be zero. Shorter initCode is zero-padded by the cast.
78
+ bytes memory initCode = userOp.initCode;
79
+ if (bytes20(initCode) == bytes20(bytes2(0x7702))) {
80
+ bytes memory delegate = abi.encodePacked(EIP7702Utils.fetchDelegate(userOp.sender));
81
+ initCode = initCode.length > 20 ? Bytes.replace(initCode, 0, delegate) : delegate;
82
+ }
83
+ bytes32 initCodeHash = keccak256(initCode);
84
+
85
+ Memory.unsafeSetFreeMemoryPointer(fmp);
86
+ return initCodeHash;
87
+ }
88
+
89
+ /**
90
+ * @dev Internal validation of whether the paymaster is willing to pay for the user operation.
91
+ * Returns the context to be passed to postOp and the validation data.
92
+ *
93
+ * NOTE: The `context` returned is `bytes(0)`. Developers overriding this function MUST
94
+ * override {_postOp} to process the context passed along.
95
+ */
96
+ function _validatePaymasterUserOp(
97
+ PackedUserOperation calldata userOp,
98
+ bytes32 /* userOpHash */,
99
+ uint256 /* maxCost */
100
+ ) internal virtual override returns (bytes memory context, uint256 validationData) {
101
+ (uint48 validAfter, uint48 validUntil, bytes calldata signature) = _decodePaymasterUserOp(userOp);
102
+
103
+ // If validUntil is non-zero, mixed `BLOCK_RANGE_FLAG` bits between `validAfter` and `validUntil` are rejected
104
+ bool rangeFlagsCompatible = validUntil == 0 || ((validAfter ^ validUntil) & ERC4337Utils.BLOCK_RANGE_FLAG == 0);
105
+
106
+ return (
107
+ bytes(""),
108
+ rangeFlagsCompatible
109
+ ? _rawSignatureValidation(_signableUserOpHash(userOp, validAfter, validUntil), signature)
110
+ .packValidationData(validAfter, validUntil)
111
+ : ERC4337Utils.SIG_VALIDATION_FAILED
112
+ );
113
+ }
114
+
115
+ /// @dev Decodes the user operation's data from `paymasterAndData`.
116
+ function _decodePaymasterUserOp(
117
+ PackedUserOperation calldata userOp
118
+ ) internal pure virtual returns (uint48 validAfter, uint48 validUntil, bytes calldata signature) {
119
+ bytes calldata paymasterData = userOp.paymasterData();
120
+ return
121
+ paymasterData.length < 12
122
+ ? (uint48(0), uint48(0), Calldata.emptyBytes())
123
+ : (uint48(bytes6(paymasterData[0:6])), uint48(bytes6(paymasterData[6:12])), paymasterData[12:]);
124
+ }
125
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (account/utils/EIP7702Utils.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ /**
7
+ * @dev Library with common EIP-7702 utility functions.
8
+ *
9
+ * See https://eips.ethereum.org/EIPS/eip-7702[EIP-7702].
10
+ */
11
+ library EIP7702Utils {
12
+ bytes3 internal constant EIP7702_PREFIX = 0xef0100;
13
+
14
+ /**
15
+ * @dev Returns the address of the delegate if `account` has an EIP-7702 delegation setup, or address(0) otherwise.
16
+ */
17
+ function fetchDelegate(address account) internal view returns (address) {
18
+ bytes32 delegation;
19
+ assembly ("memory-safe") {
20
+ extcodecopy(account, 0x00, 0x00, 0x20)
21
+ delegation := mload(0x00)
22
+ }
23
+ return bytes3(delegation) == EIP7702_PREFIX ? address(bytes20(delegation << 24)) : address(0);
24
+ }
25
+ }