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,317 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (account/utils/ERC4337Utils.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {IEntryPoint, PackedUserOperation} from "../../interfaces/IERC4337.sol";
7
+ import {Calldata} from "../../utils/Calldata.sol";
8
+ import {Math} from "../../utils/math/Math.sol";
9
+ import {SafeCast} from "../../utils/math/SafeCast.sol";
10
+ import {Packing} from "../../utils/Packing.sol";
11
+
12
+ /// @dev This is available on all entrypoint since v0.4.0, but is not formally part of the ERC.
13
+ interface IEntryPointExtra {
14
+ function getUserOpHash(PackedUserOperation calldata userOp) external view returns (bytes32);
15
+ }
16
+
17
+ /**
18
+ * @dev Library with common ERC-4337 utility functions.
19
+ *
20
+ * See https://eips.ethereum.org/EIPS/eip-4337[ERC-4337].
21
+ */
22
+ library ERC4337Utils {
23
+ using Packing for *;
24
+
25
+ /// @dev Address of the entrypoint v0.7.0
26
+ IEntryPoint internal constant ENTRYPOINT_V07 = IEntryPoint(0x0000000071727De22E5E9d8BAf0edAc6f37da032);
27
+
28
+ /// @dev Address of the entrypoint v0.8.0
29
+ IEntryPoint internal constant ENTRYPOINT_V08 = IEntryPoint(0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108);
30
+
31
+ /// @dev Address of the entrypoint v0.9.0
32
+ IEntryPoint internal constant ENTRYPOINT_V09 = IEntryPoint(0x433709009B8330FDa32311DF1C2AFA402eD8D009);
33
+
34
+ /// @dev For simulation purposes, validateUserOp (and validatePaymasterUserOp) return this value on success.
35
+ uint256 internal constant SIG_VALIDATION_SUCCESS = 0;
36
+
37
+ /// @dev For simulation purposes, validateUserOp (and validatePaymasterUserOp) must return this value in case of signature failure, instead of revert.
38
+ uint256 internal constant SIG_VALIDATION_FAILED = 1;
39
+
40
+ /// @dev Magic value used in EntryPoint v0.9+ to detect the presence of a paymaster signature in `paymasterAndData`.
41
+ bytes8 internal constant PAYMASTER_SIG_MAGIC = 0x22e325a297439656; // keccak256("PaymasterSignature")[:8]
42
+
43
+ /// @dev Highest bit set to 1 in a 6-bytes field.
44
+ uint48 internal constant BLOCK_RANGE_FLAG = 0x800000000000;
45
+
46
+ /// @dev Mask for the lower 47 bits of a 6-bytes field (equivalent to uint48(~BLOCK_RANGE_FLAG)).
47
+ uint48 internal constant BLOCK_RANGE_MASK = 0x7fffffffffff;
48
+
49
+ /// @dev Validity range of the validation data.
50
+ enum ValidationRange {
51
+ TIMESTAMP,
52
+ BLOCK
53
+ }
54
+
55
+ /**
56
+ * @dev Parses the validation data into its components and the validity range. See {packValidationData}.
57
+ *
58
+ * This mirrors, step for step, how the EntryPoint reads a validation data word:
59
+ *
60
+ * * a zero `validUntil` means "indefinitely" and is replaced with `type(uint48).max`, *before* the validity
61
+ * range is detected;
62
+ * * the range is a block range if and only if both `validAfter` and `validUntil` carry {BLOCK_RANGE_FLAG};
63
+ * * {BLOCK_RANGE_FLAG} is stripped from both fields for a block range, and left untouched otherwise.
64
+ *
65
+ * NOTE: For a timestamp range, `validAfter` or `validUntil` may still carry {BLOCK_RANGE_FLAG}, in which case
66
+ * the corresponding bound is out of reach of `block.timestamp` (never valid, resp. never expiring). This is
67
+ * deliberate: the EntryPoint compares `block.timestamp` against the raw fields, so stripping the flag here
68
+ * would silently turn such a bound into a plausible timestamp and make {getValidationData} disagree with the
69
+ * EntryPoint. Encoders should not produce such a mismatch in the first place; {packValidationData} never does.
70
+ */
71
+ function parseValidationData(
72
+ uint256 validationData
73
+ ) internal pure returns (address aggregator, uint48 validAfter, uint48 validUntil, ValidationRange range) {
74
+ validAfter = uint48(bytes32(validationData).extract_32_6(0));
75
+ validUntil = uint48(bytes32(validationData).extract_32_6(6));
76
+ aggregator = address(bytes32(validationData).extract_32_20(12));
77
+
78
+ validUntil |= type(uint48).max * uint48(SafeCast.toUint(validUntil == 0));
79
+
80
+ if ((validAfter & validUntil & BLOCK_RANGE_FLAG) == 0) {
81
+ range = ValidationRange.TIMESTAMP;
82
+ } else {
83
+ range = ValidationRange.BLOCK;
84
+ validAfter &= BLOCK_RANGE_MASK;
85
+ validUntil &= BLOCK_RANGE_MASK;
86
+ }
87
+ }
88
+
89
+ /// @dev Packs the validation data into a single uint256. See {parseValidationData}.
90
+ function packValidationData(
91
+ address aggregator,
92
+ uint48 validAfter,
93
+ uint48 validUntil
94
+ ) internal pure returns (uint256) {
95
+ return
96
+ packValidationData(
97
+ aggregator,
98
+ validAfter,
99
+ validUntil,
100
+ (validAfter & BLOCK_RANGE_FLAG != 0) && (validUntil & BLOCK_RANGE_FLAG != 0 || validUntil == 0)
101
+ ? ValidationRange.BLOCK
102
+ : ValidationRange.TIMESTAMP
103
+ );
104
+ }
105
+
106
+ /**
107
+ * @dev Variant of {packValidationData} that forces which validity range to use. This overwrites the presence of
108
+ * flags in `validAfter` and `validUntil`).
109
+ */
110
+ function packValidationData(
111
+ address aggregator,
112
+ uint48 validAfter,
113
+ uint48 validUntil,
114
+ ValidationRange range
115
+ ) internal pure returns (uint256) {
116
+ if (range == ValidationRange.TIMESTAMP) {
117
+ validAfter &= BLOCK_RANGE_MASK;
118
+ validUntil &= BLOCK_RANGE_MASK;
119
+ } else if (range == ValidationRange.BLOCK) {
120
+ validAfter |= BLOCK_RANGE_FLAG;
121
+ validUntil |= BLOCK_RANGE_FLAG * uint48(SafeCast.toUint(validUntil > 0));
122
+ }
123
+ return _packRaw(aggregator, validAfter, validUntil);
124
+ }
125
+
126
+ /// @dev Variant of {packValidationData} that uses a boolean success flag instead of an aggregator address.
127
+ function packValidationData(bool sigSuccess, uint48 validAfter, uint48 validUntil) internal pure returns (uint256) {
128
+ return
129
+ packValidationData(
130
+ address(uint160(Math.ternary(sigSuccess, SIG_VALIDATION_SUCCESS, SIG_VALIDATION_FAILED))),
131
+ validAfter,
132
+ validUntil
133
+ );
134
+ }
135
+
136
+ /**
137
+ * @dev Variant of {packValidationData} that uses a boolean success flag instead of an aggregator address and that
138
+ * forces which validity range to use. This overwrites the presence of flags in `validAfter` and `validUntil`).
139
+ */
140
+ function packValidationData(
141
+ bool sigSuccess,
142
+ uint48 validAfter,
143
+ uint48 validUntil,
144
+ ValidationRange range
145
+ ) internal pure returns (uint256) {
146
+ return
147
+ packValidationData(
148
+ address(uint160(Math.ternary(sigSuccess, SIG_VALIDATION_SUCCESS, SIG_VALIDATION_FAILED))),
149
+ validAfter,
150
+ validUntil,
151
+ range
152
+ );
153
+ }
154
+
155
+ /**
156
+ * @dev Combines two validation data into a single one.
157
+ *
158
+ * The `aggregator` is set to {SIG_VALIDATION_SUCCESS} if both are successful, while
159
+ * the `validAfter` is the maximum and the `validUntil` is the minimum of both.
160
+ *
161
+ * NOTE: Returns `SIG_VALIDATION_FAILED` if the validation ranges differ.
162
+ */
163
+ function combineValidationData(uint256 validationData1, uint256 validationData2) internal pure returns (uint256) {
164
+ (address aggregator1, uint48 validAfter1, uint48 validUntil1, ValidationRange range1) = parseValidationData(
165
+ validationData1
166
+ );
167
+ (address aggregator2, uint48 validAfter2, uint48 validUntil2, ValidationRange range2) = parseValidationData(
168
+ validationData2
169
+ );
170
+
171
+ return
172
+ range1 == range2
173
+ ? _packRaw(
174
+ address(
175
+ uint160(
176
+ Math.ternary(
177
+ aggregator1 == address(uint160(SIG_VALIDATION_SUCCESS)) &&
178
+ aggregator2 == address(uint160(SIG_VALIDATION_SUCCESS)),
179
+ SIG_VALIDATION_SUCCESS,
180
+ SIG_VALIDATION_FAILED
181
+ )
182
+ )
183
+ ),
184
+ uint48(
185
+ Math.max(validAfter1, validAfter2) |
186
+ (BLOCK_RANGE_FLAG * SafeCast.toUint(range1 == ValidationRange.BLOCK))
187
+ ),
188
+ uint48(
189
+ Math.min(validUntil1, validUntil2) |
190
+ (BLOCK_RANGE_FLAG * SafeCast.toUint(range1 == ValidationRange.BLOCK))
191
+ )
192
+ )
193
+ : SIG_VALIDATION_FAILED;
194
+ }
195
+
196
+ /// @dev Encodes the fields of a validation data word verbatim, without normalizing {BLOCK_RANGE_FLAG}.
197
+ function _packRaw(address aggregator, uint48 validAfter, uint48 validUntil) private pure returns (uint256) {
198
+ return uint256(bytes6(validAfter).pack_6_6(bytes6(validUntil)).pack_12_20(bytes20(aggregator)));
199
+ }
200
+
201
+ /// @dev Returns the aggregator of the `validationData` and whether it is out of time range.
202
+ function getValidationData(uint256 validationData) internal view returns (address aggregator, bool outOfTimeRange) {
203
+ (address aggregator_, uint48 validAfter, uint48 validUntil, ValidationRange range) = parseValidationData(
204
+ validationData
205
+ );
206
+ uint256 current = Math.ternary(range == ValidationRange.TIMESTAMP, block.timestamp, block.number);
207
+ return (aggregator_, current <= validAfter || validUntil < current);
208
+ }
209
+
210
+ /// @dev Get the hash of a user operation for a given entrypoint
211
+ function hash(PackedUserOperation calldata self, address entrypoint) internal view returns (bytes32) {
212
+ // NOTE: getUserOpHash is available since v0.4.0
213
+ //
214
+ // Prior to v0.8.0, this was easy to replicate for any entrypoint and chainId. Since v0.8.0 of the
215
+ // entrypoint, this depends on the Entrypoint's domain separator, which cannot be hardcoded and is complex
216
+ // to recompute. Domain separator could be fetched using the `getDomainSeparatorV4` getter, or recomputed from
217
+ // the ERC-5267 getter, but both operation would require doing a view call to the entrypoint. Overall it feels
218
+ // simpler and less error prone to get that functionality from the entrypoint directly.
219
+ return IEntryPointExtra(entrypoint).getUserOpHash(self);
220
+ }
221
+
222
+ /// @dev Returns `factory` from the {PackedUserOperation}, or address(0) if the initCode is empty or not properly formatted.
223
+ function factory(PackedUserOperation calldata self) internal pure returns (address) {
224
+ return self.initCode.length < 20 ? address(0) : address(bytes20(self.initCode[0:20]));
225
+ }
226
+
227
+ /// @dev Returns `factoryData` from the {PackedUserOperation}, or empty bytes if the initCode is empty or not properly formatted.
228
+ function factoryData(PackedUserOperation calldata self) internal pure returns (bytes calldata) {
229
+ return self.initCode.length < 20 ? Calldata.emptyBytes() : self.initCode[20:];
230
+ }
231
+
232
+ /// @dev Returns `verificationGasLimit` from the {PackedUserOperation}.
233
+ function verificationGasLimit(PackedUserOperation calldata self) internal pure returns (uint256) {
234
+ return uint128(self.accountGasLimits.extract_32_16(0));
235
+ }
236
+
237
+ /// @dev Returns `callGasLimit` from the {PackedUserOperation}.
238
+ function callGasLimit(PackedUserOperation calldata self) internal pure returns (uint256) {
239
+ return uint128(self.accountGasLimits.extract_32_16(16));
240
+ }
241
+
242
+ /// @dev Returns the first section of `gasFees` from the {PackedUserOperation}.
243
+ function maxPriorityFeePerGas(PackedUserOperation calldata self) internal pure returns (uint256) {
244
+ return uint128(self.gasFees.extract_32_16(0));
245
+ }
246
+
247
+ /// @dev Returns the second section of `gasFees` from the {PackedUserOperation}.
248
+ function maxFeePerGas(PackedUserOperation calldata self) internal pure returns (uint256) {
249
+ return uint128(self.gasFees.extract_32_16(16));
250
+ }
251
+
252
+ /// @dev Returns the total gas price for the {PackedUserOperation} (ie. `maxFeePerGas` or `maxPriorityFeePerGas + basefee`).
253
+ function gasPrice(PackedUserOperation calldata self) internal view returns (uint256) {
254
+ unchecked {
255
+ // Following values are "per gas"
256
+ uint256 maxPriorityFee = maxPriorityFeePerGas(self);
257
+ uint256 maxFee = maxFeePerGas(self);
258
+ return Math.min(maxFee, maxPriorityFee + block.basefee);
259
+ }
260
+ }
261
+
262
+ /// @dev Returns the first section of `paymasterAndData` from the {PackedUserOperation}.
263
+ function paymaster(PackedUserOperation calldata self) internal pure returns (address) {
264
+ return self.paymasterAndData.length < 52 ? address(0) : address(bytes20(self.paymasterAndData[0:20]));
265
+ }
266
+
267
+ /// @dev Returns the second section of `paymasterAndData` from the {PackedUserOperation}.
268
+ function paymasterVerificationGasLimit(PackedUserOperation calldata self) internal pure returns (uint256) {
269
+ return self.paymasterAndData.length < 52 ? 0 : uint128(bytes16(self.paymasterAndData[20:36]));
270
+ }
271
+
272
+ /// @dev Returns the third section of `paymasterAndData` from the {PackedUserOperation}.
273
+ function paymasterPostOpGasLimit(PackedUserOperation calldata self) internal pure returns (uint256) {
274
+ return self.paymasterAndData.length < 52 ? 0 : uint128(bytes16(self.paymasterAndData[36:52]));
275
+ }
276
+
277
+ /**
278
+ * @dev Returns the fourth section of `paymasterAndData` from the {PackedUserOperation}.
279
+ * If a paymaster signature is present, it is excluded from the returned data.
280
+ */
281
+ function paymasterData(PackedUserOperation calldata self) internal pure returns (bytes calldata) {
282
+ bool hasSignature = self.paymasterAndData.length > 9 &&
283
+ bytes8(self.paymasterAndData[self.paymasterAndData.length - 8:]) == PAYMASTER_SIG_MAGIC;
284
+ uint256 suffixLength = hasSignature ? _paymasterSignatureSize(self) + 10 : 0;
285
+ return
286
+ self.paymasterAndData.length < 52 + suffixLength
287
+ ? Calldata.emptyBytes()
288
+ : self.paymasterAndData[52:self.paymasterAndData.length - suffixLength];
289
+ }
290
+
291
+ /**
292
+ * @dev Returns the paymaster signature from `paymasterAndData` (EntryPoint v0.9+).
293
+ * Returns empty bytes if no paymaster signature is present.
294
+ */
295
+ function paymasterSignature(PackedUserOperation calldata self) internal pure returns (bytes calldata) {
296
+ if (
297
+ self.paymasterAndData.length < 10 ||
298
+ bytes8(self.paymasterAndData[self.paymasterAndData.length - 8:]) != PAYMASTER_SIG_MAGIC
299
+ ) return Calldata.emptyBytes();
300
+
301
+ uint256 sigSize = _paymasterSignatureSize(self);
302
+ uint256 sigEnd = self.paymasterAndData.length - 10;
303
+ return
304
+ self.paymasterAndData.length < 62 + sigSize
305
+ ? Calldata.emptyBytes()
306
+ : self.paymasterAndData[sigEnd - sigSize:sigEnd];
307
+ }
308
+
309
+ /**
310
+ * @dev Returns the size of the paymaster signature in `paymasterAndData` (EntryPoint v0.9+).
311
+ * Does not check minimum length of `paymasterAndData`.
312
+ */
313
+ function _paymasterSignatureSize(PackedUserOperation calldata self) private pure returns (uint256) {
314
+ return
315
+ uint16(bytes2(self.paymasterAndData[self.paymasterAndData.length - 10:self.paymasterAndData.length - 8]));
316
+ }
317
+ }
@@ -0,0 +1,314 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.8.0) (account/utils/draft-ERC7579Utils.sol)
3
+
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {Execution} from "../../interfaces/draft-IERC7579.sol";
7
+ import {Address} from "../../utils/Address.sol";
8
+ import {Packing} from "../../utils/Packing.sol";
9
+
10
+ type Mode is bytes32;
11
+ type CallType is bytes1;
12
+ type ExecType is bytes1;
13
+ type ModeSelector is bytes4;
14
+ type ModePayload is bytes22;
15
+
16
+ /**
17
+ * @dev Library with common ERC-7579 utility functions.
18
+ *
19
+ * See https://eips.ethereum.org/EIPS/eip-7579[ERC-7579].
20
+ */
21
+ // slither-disable-next-line unused-state
22
+ library ERC7579Utils {
23
+ using Packing for *;
24
+
25
+ /// @dev A single `call` execution.
26
+ CallType internal constant CALLTYPE_SINGLE = CallType.wrap(0x00);
27
+
28
+ /// @dev A batch of `call` executions.
29
+ CallType internal constant CALLTYPE_BATCH = CallType.wrap(0x01);
30
+
31
+ /// @dev A `delegatecall` execution.
32
+ CallType internal constant CALLTYPE_DELEGATECALL = CallType.wrap(0xFF);
33
+
34
+ /// @dev Default execution type that reverts on failure.
35
+ ExecType internal constant EXECTYPE_DEFAULT = ExecType.wrap(0x00);
36
+
37
+ /// @dev Execution type that does not revert on failure.
38
+ ExecType internal constant EXECTYPE_TRY = ExecType.wrap(0x01);
39
+
40
+ /**
41
+ * @dev Emits when an {EXECTYPE_TRY} execution fails.
42
+ * @param batchExecutionIndex The index of the failed call in the execution batch.
43
+ * @param returndata The returned data from the failed call.
44
+ */
45
+ event ERC7579TryExecuteFail(uint256 batchExecutionIndex, bytes returndata);
46
+
47
+ /// @dev The provided {CallType} is not supported.
48
+ error ERC7579UnsupportedCallType(CallType callType);
49
+
50
+ /// @dev The provided {ExecType} is not supported.
51
+ error ERC7579UnsupportedExecType(ExecType execType);
52
+
53
+ /// @dev The provided module doesn't match the provided module type.
54
+ error ERC7579MismatchedModuleTypeId(uint256 moduleTypeId, address module);
55
+
56
+ /// @dev The module is not installed.
57
+ error ERC7579UninstalledModule(uint256 moduleTypeId, address module);
58
+
59
+ /// @dev The module is already installed.
60
+ error ERC7579AlreadyInstalledModule(uint256 moduleTypeId, address module);
61
+
62
+ /// @dev The module type is not supported.
63
+ error ERC7579UnsupportedModuleType(uint256 moduleTypeId);
64
+
65
+ /// @dev Input calldata not properly formatted and possibly malicious.
66
+ error ERC7579DecodingError();
67
+
68
+ /// @dev Executes a single call.
69
+ function execSingle(
70
+ bytes calldata executionCalldata,
71
+ ExecType execType
72
+ ) internal returns (bytes[] memory returnData) {
73
+ (address target, uint256 value, bytes calldata callData) = decodeSingle(executionCalldata);
74
+ returnData = new bytes[](1);
75
+ returnData[0] = _call(0, execType, target, value, callData);
76
+ }
77
+
78
+ /// @dev Executes a batch of calls.
79
+ function execBatch(
80
+ bytes calldata executionCalldata,
81
+ ExecType execType
82
+ ) internal returns (bytes[] memory returnData) {
83
+ Execution[] calldata executionBatch = decodeBatch(executionCalldata);
84
+ returnData = new bytes[](executionBatch.length);
85
+ for (uint256 i = 0; i < executionBatch.length; ++i) {
86
+ returnData[i] = _call(
87
+ i,
88
+ execType,
89
+ executionBatch[i].target,
90
+ executionBatch[i].value,
91
+ executionBatch[i].callData
92
+ );
93
+ }
94
+ }
95
+
96
+ /// @dev Executes a delegate call.
97
+ function execDelegateCall(
98
+ bytes calldata executionCalldata,
99
+ ExecType execType
100
+ ) internal returns (bytes[] memory returnData) {
101
+ (address target, bytes calldata callData) = decodeDelegate(executionCalldata);
102
+ returnData = new bytes[](1);
103
+ returnData[0] = _delegatecall(0, execType, target, callData);
104
+ }
105
+
106
+ /// @dev Encodes the mode with the provided parameters. See {decodeMode}.
107
+ function encodeMode(
108
+ CallType callType,
109
+ ExecType execType,
110
+ ModeSelector selector,
111
+ ModePayload payload
112
+ ) internal pure returns (Mode mode) {
113
+ return
114
+ Mode.wrap(
115
+ CallType
116
+ .unwrap(callType)
117
+ .pack_1_1(ExecType.unwrap(execType))
118
+ .pack_2_4(bytes4(0))
119
+ .pack_6_4(ModeSelector.unwrap(selector))
120
+ .pack_10_22(ModePayload.unwrap(payload))
121
+ );
122
+ }
123
+
124
+ /// @dev Decodes the mode into its parameters. See {encodeMode}.
125
+ function decodeMode(
126
+ Mode mode
127
+ ) internal pure returns (CallType callType, ExecType execType, ModeSelector selector, ModePayload payload) {
128
+ return (
129
+ CallType.wrap(Packing.extract_32_1(Mode.unwrap(mode), 0x00)),
130
+ ExecType.wrap(Packing.extract_32_1(Mode.unwrap(mode), 0x01)),
131
+ ModeSelector.wrap(Packing.extract_32_4(Mode.unwrap(mode), 0x06)),
132
+ ModePayload.wrap(Packing.extract_32_22(Mode.unwrap(mode), 0x0a))
133
+ );
134
+ }
135
+
136
+ /// @dev Encodes a single call execution. See {decodeSingle}.
137
+ function encodeSingle(
138
+ address target,
139
+ uint256 value,
140
+ bytes calldata callData
141
+ ) internal pure returns (bytes memory executionCalldata) {
142
+ return abi.encodePacked(target, value, callData);
143
+ }
144
+
145
+ /// @dev Decodes a single call execution. See {encodeSingle}.
146
+ function decodeSingle(
147
+ bytes calldata executionCalldata
148
+ ) internal pure returns (address target, uint256 value, bytes calldata callData) {
149
+ target = address(bytes20(executionCalldata));
150
+ value = uint256(bytes32(executionCalldata[20:52]));
151
+ callData = executionCalldata[52:];
152
+ }
153
+
154
+ /// @dev Encodes a delegate call execution. See {decodeDelegate}.
155
+ function encodeDelegate(
156
+ address target,
157
+ bytes calldata callData
158
+ ) internal pure returns (bytes memory executionCalldata) {
159
+ return abi.encodePacked(target, callData);
160
+ }
161
+
162
+ /// @dev Decodes a delegate call execution. See {encodeDelegate}.
163
+ function decodeDelegate(
164
+ bytes calldata executionCalldata
165
+ ) internal pure returns (address target, bytes calldata callData) {
166
+ target = address(bytes20(executionCalldata));
167
+ callData = executionCalldata[20:];
168
+ }
169
+
170
+ /// @dev Encodes a batch of executions. See {decodeBatch}.
171
+ function encodeBatch(Execution[] memory executionBatch) internal pure returns (bytes memory executionCalldata) {
172
+ return abi.encode(executionBatch);
173
+ }
174
+
175
+ /// @dev Decodes a batch of executions. See {encodeBatch}.
176
+ ///
177
+ /// NOTE: This function runs some checks and will throw a {ERC7579DecodingError} if the input is not properly formatted.
178
+ function decodeBatch(bytes calldata executionCalldata) internal pure returns (Execution[] calldata executionBatch) {
179
+ unchecked {
180
+ uint256 bufferPtr;
181
+ uint256 bufferLength;
182
+ assembly ("memory-safe") {
183
+ bufferPtr := executionCalldata.offset
184
+ bufferLength := executionCalldata.length
185
+ }
186
+
187
+ // Check executionCalldata is not empty.
188
+ if (bufferLength < 0x20) revert ERC7579DecodingError();
189
+
190
+ // Get the offset of the array (pointer to the array length).
191
+ uint256 arrayLengthOffset = uint256(bytes32(executionCalldata[0x00:0x20]));
192
+
193
+ // The array length (at arrayLengthOffset) should be 32 bytes long. We check that this is within the
194
+ // buffer bounds. Since we know bufferLength is at least 32, we can subtract with no overflow risk.
195
+ if (arrayLengthOffset > bufferLength - 0x20) revert ERC7579DecodingError();
196
+
197
+ // Get the array length. arrayLengthOffset + 32 is bounded by bufferLength so it does not overflow.
198
+ uint256 arrayLength = uint256(bytes32(executionCalldata[arrayLengthOffset:arrayLengthOffset + 0x20]));
199
+
200
+ // Check that the buffer is long enough to store the array elements as "offset pointer":
201
+ // - each element of the array is an "offset pointer" to the data.
202
+ // - each "offset pointer" (to an array element) takes 32 bytes.
203
+ // - validity of the calldata at that location is checked when the array element is accessed, so we only
204
+ // need to check that the buffer is large enough to hold the pointers.
205
+ //
206
+ // Since we know bufferLength is at least arrayLengthOffset + 32, we can subtract with no overflow risk.
207
+ // Solidity limits length of such arrays to 2**64-1, this guarantees `arrayLength * 32` does not overflow.
208
+ if (arrayLength > type(uint64).max || bufferLength - arrayLengthOffset - 0x20 < arrayLength * 0x20)
209
+ revert ERC7579DecodingError();
210
+
211
+ assembly ("memory-safe") {
212
+ executionBatch.offset := add(add(bufferPtr, arrayLengthOffset), 0x20)
213
+ executionBatch.length := arrayLength
214
+ }
215
+
216
+ _validateCalldataBound(executionBatch, bufferPtr + bufferLength);
217
+ }
218
+ }
219
+
220
+ /**
221
+ * @dev Calldata sanity check
222
+ *
223
+ * Solidity performs "lazy" verification that all calldata objects are valid, by checking that they are
224
+ * within calldatasize. This check is performed when objects are dereferenced. If the `executionCalldata`
225
+ * is not the last element (buffer) in msg.data, this check will not detect potentially ill-formed objects
226
+ * that point to the memory space between the end of the `executionCalldata` buffer.
227
+ * If we are in a situation where the lazy checks are not sufficient, we do an in-depth traversal of the
228
+ * array, checking that everything is valid.
229
+ */
230
+ function _validateCalldataBound(Execution[] calldata executionBatch, uint256 bound) private pure {
231
+ if (bound < msg.data.length) {
232
+ for (uint256 i = 0; i < executionBatch.length; ++i) {
233
+ Execution calldata item = executionBatch[i];
234
+ bytes calldata itemCalldata = item.callData;
235
+
236
+ uint256 itemEnd;
237
+ uint256 itemCalldataEnd;
238
+ assembly ("memory-safe") {
239
+ itemEnd := add(item, 0x60)
240
+ itemCalldataEnd := add(itemCalldata.offset, itemCalldata.length)
241
+ }
242
+ if (itemEnd > bound || itemCalldataEnd > bound) revert ERC7579DecodingError();
243
+ }
244
+ }
245
+ }
246
+
247
+ /// @dev Executes a `call` to the target with the provided {ExecType}.
248
+ function _call(
249
+ uint256 index,
250
+ ExecType execType,
251
+ address target,
252
+ uint256 value,
253
+ bytes calldata data
254
+ ) private returns (bytes memory) {
255
+ (bool success, bytes memory returndata) = (target == address(0) ? address(this) : target).call{value: value}(
256
+ data
257
+ );
258
+ return _validateExecutionMode(index, execType, success, returndata);
259
+ }
260
+
261
+ /// @dev Executes a `delegatecall` to the target with the provided {ExecType}.
262
+ function _delegatecall(
263
+ uint256 index,
264
+ ExecType execType,
265
+ address target,
266
+ bytes calldata data
267
+ ) private returns (bytes memory) {
268
+ (bool success, bytes memory returndata) = (target == address(0) ? address(this) : target).delegatecall(data);
269
+ return _validateExecutionMode(index, execType, success, returndata);
270
+ }
271
+
272
+ /// @dev Validates the execution mode and returns the returndata.
273
+ function _validateExecutionMode(
274
+ uint256 index,
275
+ ExecType execType,
276
+ bool success,
277
+ bytes memory returndata
278
+ ) private returns (bytes memory) {
279
+ if (execType == ERC7579Utils.EXECTYPE_DEFAULT) {
280
+ Address.verifyCallResult(success, returndata);
281
+ } else if (execType == ERC7579Utils.EXECTYPE_TRY) {
282
+ if (!success) emit ERC7579TryExecuteFail(index, returndata);
283
+ } else {
284
+ revert ERC7579UnsupportedExecType(execType);
285
+ }
286
+ return returndata;
287
+ }
288
+ }
289
+
290
+ // Operators
291
+ using {eqCallType as ==} for CallType global;
292
+ using {eqExecType as ==} for ExecType global;
293
+ using {eqModeSelector as ==} for ModeSelector global;
294
+ using {eqModePayload as ==} for ModePayload global;
295
+
296
+ /// @dev Compares two `CallType` values for equality.
297
+ function eqCallType(CallType a, CallType b) pure returns (bool) {
298
+ return CallType.unwrap(a) == CallType.unwrap(b);
299
+ }
300
+
301
+ /// @dev Compares two `ExecType` values for equality.
302
+ function eqExecType(ExecType a, ExecType b) pure returns (bool) {
303
+ return ExecType.unwrap(a) == ExecType.unwrap(b);
304
+ }
305
+
306
+ /// @dev Compares two `ModeSelector` values for equality.
307
+ function eqModeSelector(ModeSelector a, ModeSelector b) pure returns (bool) {
308
+ return ModeSelector.unwrap(a) == ModeSelector.unwrap(b);
309
+ }
310
+
311
+ /// @dev Compares two `ModePayload` values for equality.
312
+ function eqModePayload(ModePayload a, ModePayload b) pure returns (bool) {
313
+ return ModePayload.unwrap(a) == ModePayload.unwrap(b);
314
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "_format": "hh3-artifact-1",
3
+ "contractName": "AbstractSigner",
4
+ "sourceName": "contracts/utils/cryptography/signers/AbstractSigner.sol",
5
+ "abi": [],
6
+ "bytecode": "0x",
7
+ "deployedBytecode": "0x",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {},
10
+ "immutableReferences": {},
11
+ "inputSourceName": "project/contracts/utils/cryptography/signers/AbstractSigner.sol",
12
+ "buildInfoId": "solc-0_8_35-c2903afec1b369cf73b6885b12c338655542e5ad"
13
+ }