├── .gitignore ├── .gitmodules ├── .solhint.json ├── .vscode └── settings.json ├── 4naly3er-report.md ├── README.md ├── addressList.ts ├── assets ├── PerpMarket.mermaid.png ├── PredyPool.mermaid.png └── SpotMarket.mermaid.png ├── bot-report.md ├── coverage-table.md ├── deploy ├── 00_deploy_modules.ts ├── 01_deploy_predy.ts ├── 02_deploy_settlements.ts ├── 03_deploy_quoter.ts ├── 04_deploy_perp_market.ts ├── 06_deploy_validators.ts ├── 07_deploy_gamma_market.ts ├── 08_deploy_spot_market.ts └── 09_deploy_price_feed_factory.ts ├── deployments └── arbitrum │ ├── .chainId │ ├── AddPairLogic.json │ ├── DutchOrderValidator.json │ ├── GammaTradeMarketL2.json │ ├── GammaTradeMarketL2_Implementation.json │ ├── GammaTradeMarketL2_Proxy.json │ ├── GammaTradeMarketQuoter.json │ ├── LiquidationLogic.json │ ├── PerpMarket.json │ ├── PerpMarketQuoter.json │ ├── PerpMarket_Implementation.json │ ├── PerpMarket_Proxy.json │ ├── PredyPool.json │ ├── PredyPoolQuoter.json │ ├── PredyPool_Implementation.json │ ├── PredyPool_Proxy.json │ ├── PriceFeedFactory.json │ ├── ReaderLogic.json │ ├── ReallocationLogic.json │ ├── SpotDutchOrderValidator.json │ ├── SpotExclusiveLimitOrderValidator.json │ ├── SpotLimitOrderValidator.json │ ├── SpotMarket.json │ ├── SpotMarketL2.json │ ├── SpotMarketQuoter.json │ ├── SupplyLogic.json │ ├── Trade.json │ ├── TradeLogic.json │ ├── UniswapSettlement.json │ └── solcInputs │ ├── 026b1618c4136e7addcbb7c0ffc98f78.json │ ├── 052e3c25d0af140fef4a499f51ddff3e.json │ ├── 08438cd60975bad6a97522fadafd372d.json │ ├── 09d0e07e3a54508951ebab956f8b8046.json │ ├── 15ffc570c407fc40e640cf84195dd3c7.json │ ├── 1b2b5f4fff0acbc6a835dd022eb6bc72.json │ ├── 1dabe34ee977f4ea198d9a3024f3ef4c.json │ ├── 23e81f84f8ea8636ab30f6b5e8acd4c2.json │ ├── 252f34205228b6ca62d66010b5d43ae9.json │ ├── 3647a9c06dfad4dc2dcda87c7fe8395a.json │ ├── 3a13073fbb817d121530ca3650be9781.json │ ├── 4a46ee6c1a29be400c9fab1ecc28e172.json │ ├── 4b4569b379ee8f293f398bfcc579ba9c.json │ ├── 52e797c79f2134913371bb467b8f9b23.json │ ├── 55b4b23e61d2697239788f9389c6e284.json │ ├── 5bdbb8d21fc18e3c1253724388bc7a46.json │ ├── 66385b4001793b3204c37450d0f24b48.json │ ├── 678523e9be9649df16bc43bcf46c51fa.json │ ├── 7a972507e35886f464e15b4bf83574bf.json │ ├── 7eb5feda6ed919ff02dcf07bb084dd51.json │ ├── 86e4403b125514b2e9749696d4a65ffd.json │ ├── 99b8d104cf34bcda1ea7615ca61ea17c.json │ ├── 9e406030195885d6bc63f86830a0ec42.json │ ├── a20c34eb232794b750d9376218127085.json │ ├── b4cc706a9580c93ac1af453d790a679c.json │ ├── b67ecdf6bd8cf0398885896b56f4cfa5.json │ ├── ba9141f99ccaf433a46b3b84af24875a.json │ ├── bdc5ae25e00ced17753e96c12fc6118e.json │ ├── c3a9be7af391a5dbc9544fdb3df3127d.json │ ├── c3bbccf57093368f39b715e363fe9fc3.json │ ├── c71432ae6caae3d69bc9794a05da2a82.json │ ├── d9ba27b4ed18dc60760b069488338c2d.json │ ├── dac59cdbdb515a72565558e362abdc24.json │ ├── f18b10b86c1de4bb4f4985e44c8f87c5.json │ ├── f73574e1d6ff3d4ffc066ed970fe6bdb.json │ ├── f9a63faa4f5d77ccea4d5eee6d668b45.json │ └── ff89dab060926c64e20f1edd2741d120.json ├── discord-export ├── Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html ├── Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files │ ├── 0-EB806.png │ ├── 073f0c045759497a01cc41aadc93619e-D875F.png │ ├── 0b8eb95ae05f7d8b62136d857c324c66-088A8.png │ ├── 0cf7719f20f0aaed168c3f31a3f0bceb-8014C.png │ ├── 1-B2132.png │ ├── 1083068770823721071-EE4F6.png │ ├── 1162a888c78000773591a5db6de8aa9f-DCF7E.png │ ├── 1233171131012223026-67C35.png │ ├── 1237627076333539328-5DC87.png │ ├── 1628fc11e7961d85181295493426b775-7E20F.png │ ├── 1aea383fe7da3deeefb7a87fc44e7bca-D0D1A.png │ ├── 1eb7f1d8b39c92052acbc65fa18aa056-95A27.png │ ├── 1f2874ce34e1d8171e0dc5d95c212a40-1FE2A.png │ ├── 1f389-5C738.svg │ ├── 1f3c1-445DC.svg │ ├── 1f408-DB1EE.svg │ ├── 1f43a-EB486.svg │ ├── 1f446-9CC34.svg │ ├── 1f44b-8A059.svg │ ├── 1f44d-27259.svg │ ├── 1f44f-3D381.svg │ ├── 1f4aa-2FD27.svg │ ├── 1f4af-4CFF5.svg │ ├── 1f4b8-E3468.svg │ ├── 1f4c6-44E30.svg │ ├── 1f50d-195C0.svg │ ├── 1f525-8FE4F.svg │ ├── 1f601-4E9BD.svg │ ├── 1f602-168C5.svg │ ├── 1f604-BF863.svg │ ├── 1f605-42B43.svg │ ├── 1f60d-BEAFF.svg │ ├── 1f62d-02603.svg │ ├── 1f64c-7C820.svg │ ├── 1f64f-22B8D.svg │ ├── 1f6a8-A8AB3.svg │ ├── 1f911-F346C.svg │ ├── 1f914-15707.svg │ ├── 1f916-AD810.svg │ ├── 1f91b-CD182.svg │ ├── 1f91d-5A0F2.svg │ ├── 1f923-5854E.svg │ ├── 1fae1-B19DE.svg │ ├── 1faf6-009D0.svg │ ├── 2-ADBB4.png │ ├── 2024-05-28_195000-C6BB4.png │ ├── 258a1ffc46d9e9c3872ad643ab9b4bd5-EE2DC.png │ ├── 2705-0589F.svg │ ├── 2764-A3D25.svg │ ├── 288aa0de2d7ec6f3bcca11bc9f778f2f-E6A23.png │ ├── 2a9faff195fe333526cfe6ae6fce1420-49B98.png │ ├── 2afb13731f83ccb20ea25b5bdb1a6c95-35031.png │ ├── 2c1e18acbcb9cdaeabfd7fc6f5090edf-CA387.png │ ├── 3-FB033.png │ ├── 34d2d7de2893f18e31aa4da767ee758f-58D64.png │ ├── 35f6ac12be0ae6f4138cbeb1a28a20d3-DBCEC.png │ ├── 4-4551A.png │ ├── 4300144ca69d0a514c0680d966674c41-CD85B.png │ ├── 4634554b26c5ac710fcace1ce468e6b4-DCDA1.png │ ├── 4de8e7cb6dfbbe8795697f1df8d66439-044AF.png │ ├── 4eaf99d01e4b5042454b4a6a8809687a-F166B.png │ ├── 50dd7f528e6efa2618511364dd0ddce0-1D481.png │ ├── 568d22b97293cdd2d9b7006198d6adbc-F0132.png │ ├── 5871d40d01a047d984fbaf957cc13f86-4D592.png │ ├── 5b71d15a9bcde45fd5520e3fb580eb53-E1A50.png │ ├── 5e3fb61df91ed29c573265a690af4600-E824E.png │ ├── 5fa1462b3cbd6d23b63942466a6d2f06-2F604.png │ ├── 67594ee4b4d1fc03bca468327a0d145b-BD76A.png │ ├── 6cc3a1021947158341eb813f8c41bf1f-C7CFE.png │ ├── 750d791c21ffd3863332eea023124fa5-05646.png │ ├── 7d09c08ff18b852203d15b51bf26bca2-D3DD1.png │ ├── 8043f1de89cc1387981f4990ad574c08-78DE7.png │ ├── 816cfc933746a8ffd61a8a93193028c5-41002.png │ ├── 851893827027075142-F23DF.png │ ├── 851893827089727568-5FD38.png │ ├── 851893828280909886-FBF42.png │ ├── 86f4180c3829539aab0c6210474061a7-4349C.png │ ├── 8f53411d3af94b5a6d0e4f6a2f48a6bb-68553.png │ ├── 930871c4671919ec697c9144a1911535-814BF.png │ ├── 944081698067451954-2550D.png │ ├── 95596e5ab52617d3b75a967597c7c5ce-94B44.png │ ├── 970d2e2f00cd7ef2134a1a3f21326349-404EA.png │ ├── 9743d0d8b5564acfdfeef2c6c63d5410-11A3C.png │ ├── 977133670429261884-CA8EA.png │ ├── OIBc5iSVj0oei6YWkCuN-44C89 │ ├── Qlcl0eqb1Z5UFlKw9Obr-FEF69 │ ├── Untitled-D27AD.png │ ├── a1f41505314077e259d5c3b02ec3570e-5BB24.png │ ├── a752f8fd-ae79-4d48-83da-8a6a213214e9-D71D1 │ ├── adddc7313b30a4e8b5329894bf2034ab-5B4E5.png │ ├── ae55bccd105a97e5e171c290822eab04-394BB.png │ ├── afca0e84e90e7172fdf16a089da1d694-947DB.png │ ├── bafed0770e472da8f19eb96dac5ac510-62868.png │ ├── bd62ce81b7d8b78cae1cff4b51cf6b59-37CFE.png │ ├── bde09905c12e2e8893a97a4b24df78b1-D1D61.png │ ├── c4-og-v2-8584A.png │ ├── c4-og-v2-D055C.png │ ├── ca9e82ca04289e14a609324c61011434-E49F7.png │ ├── ce33938a6121cd196500c7b573fba65a-15E3D.png │ ├── d12592c492cf72b2b5f317f8341c2d38-3CEFE.png │ ├── d2d94d7e11412f6f18f842f82452604d-D4DA0.png │ ├── d482d56e4533980c4a4108a97afecfcb-31323.png │ ├── db37a44fec3e7215df0fd640d3fe1e71-83EA5.png │ ├── dd0b02132544c612d48d10270e412d9b-9486F.png │ ├── dfacc77d68962a991f5a4c3b7859b4c2-BAB3E.png │ ├── e00d2cfe4e679acc9e11182ab19c5db3-F3931.png │ ├── e6f4ca0e498c6a1841fd2181890d7668-D7F35.png │ ├── ef353ac557c47e95ecd46e0afac40642-CEF40.png │ ├── f37097a7d18a772a380665929aaba15b-94EB7.png │ ├── feb79bb6c3285f43d25af82703f76106-392DC.png │ ├── ggsans-italic-400-E988B.woff2 │ ├── ggsans-italic-500-0777F.woff2 │ ├── ggsans-italic-600-CB411.woff2 │ ├── ggsans-italic-700-891AC.woff2 │ ├── ggsans-italic-800-D36B0.woff2 │ ├── ggsans-normal-400-1456D.woff2 │ ├── ggsans-normal-500-89CE5.woff2 │ ├── ggsans-normal-600-C1EA8.woff2 │ ├── ggsans-normal-700-1949A.woff2 │ ├── ggsans-normal-800-58487.woff2 │ ├── highlight.min-D8D27.js │ ├── image-1DCAA.png │ ├── image-3F30C.png │ ├── image-52956.png │ ├── image-6F169.png │ ├── image-85669.png │ ├── image-B5D52.png │ ├── lottie.min-99657.js │ └── solarized-dark.min-BA98F.css ├── Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt └── Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files │ ├── 2024-05-28_195000-C6BB4.png │ ├── OIBc5iSVj0oei6YWkCuN-44C89 │ ├── Qlcl0eqb1Z5UFlKw9Obr-FEF69 │ ├── Untitled-D27AD.png │ ├── a752f8fd-ae79-4d48-83da-8a6a213214e9-D71D1 │ ├── c4-og-v2-8584A.png │ ├── c4-og-v2-D055C.png │ ├── image-1DCAA.png │ ├── image-3F30C.png │ ├── image-52956.png │ ├── image-6F169.png │ ├── image-85669.png │ ├── image-B5D52.png │ ├── maxresdefault-01AD8.jpg │ ├── maxresdefault-BF663.jpg │ ├── maxresdefault-D4441.jpg │ └── maxresdefault-ED879.jpg ├── foundry.toml ├── hardhat.config.ts ├── lib ├── forge-std │ ├── .github │ │ └── workflows │ │ │ ├── ci.yml │ │ │ └── sync.yml │ ├── .gitignore │ ├── .gitmodules │ ├── LICENSE-APACHE │ ├── LICENSE-MIT │ ├── README.md │ ├── foundry.toml │ ├── lib │ │ └── ds-test │ │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── build.yml │ │ │ ├── .gitignore │ │ │ ├── LICENSE │ │ │ ├── Makefile │ │ │ ├── default.nix │ │ │ ├── demo │ │ │ └── demo.sol │ │ │ ├── package.json │ │ │ └── src │ │ │ ├── test.sol │ │ │ └── test.t.sol │ ├── package.json │ ├── src │ │ ├── Base.sol │ │ ├── Script.sol │ │ ├── StdAssertions.sol │ │ ├── StdChains.sol │ │ ├── StdCheats.sol │ │ ├── StdError.sol │ │ ├── StdInvariant.sol │ │ ├── StdJson.sol │ │ ├── StdMath.sol │ │ ├── StdStorage.sol │ │ ├── StdStyle.sol │ │ ├── StdUtils.sol │ │ ├── Test.sol │ │ ├── Vm.sol │ │ ├── console.sol │ │ ├── console2.sol │ │ ├── interfaces │ │ │ ├── IERC1155.sol │ │ │ ├── IERC165.sol │ │ │ ├── IERC20.sol │ │ │ ├── IERC4626.sol │ │ │ ├── IERC721.sol │ │ │ └── IMulticall3.sol │ │ └── safeconsole.sol │ └── test │ │ ├── StdAssertions.t.sol │ │ ├── StdChains.t.sol │ │ ├── StdCheats.t.sol │ │ ├── StdError.t.sol │ │ ├── StdMath.t.sol │ │ ├── StdStorage.t.sol │ │ ├── StdStyle.t.sol │ │ ├── StdUtils.t.sol │ │ ├── compilation │ │ ├── CompilationScript.sol │ │ ├── CompilationScriptBase.sol │ │ ├── CompilationTest.sol │ │ └── CompilationTestBase.sol │ │ └── fixtures │ │ └── broadcast.log.json ├── openzeppelin-contracts │ ├── .changeset │ │ └── config.json │ ├── .codecov.yml │ ├── .editorconfig │ ├── .eslintrc │ ├── .github │ │ ├── ISSUE_TEMPLATE │ │ │ ├── bug_report.md │ │ │ ├── config.yml │ │ │ └── feature_request.md │ │ ├── PULL_REQUEST_TEMPLATE.md │ │ ├── actions │ │ │ ├── gas-compare │ │ │ │ └── action.yml │ │ │ ├── setup │ │ │ │ └── action.yml │ │ │ └── storage-layout │ │ │ │ └── action.yml │ │ └── workflows │ │ │ ├── actionlint.yml │ │ │ ├── changeset.yml │ │ │ ├── checks.yml │ │ │ ├── docs.yml │ │ │ ├── formal-verification.yml │ │ │ ├── release-cycle.yml │ │ │ └── upgradeable.yml │ ├── .gitignore │ ├── .gitmodules │ ├── .mocharc.js │ ├── .prettierrc │ ├── .solcover.js │ ├── .solhint.json │ ├── CHANGELOG.md │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.md │ ├── GUIDELINES.md │ ├── LICENSE │ ├── README.md │ ├── RELEASING.md │ ├── SECURITY.md │ ├── audits │ │ ├── 2017-03.md │ │ ├── 2018-10.pdf │ │ ├── 2022-10-Checkpoints.pdf │ │ ├── 2022-10-ERC4626.pdf │ │ ├── 2023-05-v4.9.pdf │ │ └── README.md │ ├── certora │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── README.md │ │ ├── diff │ │ │ └── token_ERC721_ERC721.sol.patch │ │ ├── harnesses │ │ │ ├── AccessControlDefaultAdminRulesHarness.sol │ │ │ ├── AccessControlHarness.sol │ │ │ ├── DoubleEndedQueueHarness.sol │ │ │ ├── ERC20FlashMintHarness.sol │ │ │ ├── ERC20PermitHarness.sol │ │ │ ├── ERC20WrapperHarness.sol │ │ │ ├── ERC3156FlashBorrowerHarness.sol │ │ │ ├── ERC721Harness.sol │ │ │ ├── ERC721ReceiverHarness.sol │ │ │ ├── EnumerableMapHarness.sol │ │ │ ├── EnumerableSetHarness.sol │ │ │ ├── InitializableHarness.sol │ │ │ ├── Ownable2StepHarness.sol │ │ │ ├── OwnableHarness.sol │ │ │ ├── PausableHarness.sol │ │ │ └── TimelockControllerHarness.sol │ │ ├── reports │ │ │ ├── 2021-10.pdf │ │ │ ├── 2022-03.pdf │ │ │ └── 2022-05.pdf │ │ ├── run.js │ │ ├── specs.json │ │ └── specs │ │ │ ├── AccessControl.spec │ │ │ ├── AccessControlDefaultAdminRules.spec │ │ │ ├── DoubleEndedQueue.spec │ │ │ ├── ERC20.spec │ │ │ ├── ERC20FlashMint.spec │ │ │ ├── ERC20Wrapper.spec │ │ │ ├── ERC721.spec │ │ │ ├── EnumerableMap.spec │ │ │ ├── EnumerableSet.spec │ │ │ ├── Initializable.spec │ │ │ ├── Ownable.spec │ │ │ ├── Ownable2Step.spec │ │ │ ├── Pausable.spec │ │ │ ├── TimelockController.spec │ │ │ ├── helpers │ │ │ └── helpers.spec │ │ │ └── methods │ │ │ ├── IAccessControl.spec │ │ │ ├── IAccessControlDefaultAdminRules.spec │ │ │ ├── IERC20.spec │ │ │ ├── IERC2612.spec │ │ │ ├── IERC3156.spec │ │ │ ├── IERC5313.spec │ │ │ ├── IERC721.spec │ │ │ ├── IOwnable.spec │ │ │ └── IOwnable2Step.spec │ ├── contracts │ │ ├── access │ │ │ ├── AccessControl.sol │ │ │ ├── AccessControlCrossChain.sol │ │ │ ├── AccessControlDefaultAdminRules.sol │ │ │ ├── AccessControlEnumerable.sol │ │ │ ├── IAccessControl.sol │ │ │ ├── IAccessControlDefaultAdminRules.sol │ │ │ ├── IAccessControlEnumerable.sol │ │ │ ├── Ownable.sol │ │ │ ├── Ownable2Step.sol │ │ │ └── README.adoc │ │ ├── crosschain │ │ │ ├── CrossChainEnabled.sol │ │ │ ├── README.adoc │ │ │ ├── amb │ │ │ │ ├── CrossChainEnabledAMB.sol │ │ │ │ └── LibAMB.sol │ │ │ ├── arbitrum │ │ │ │ ├── CrossChainEnabledArbitrumL1.sol │ │ │ │ ├── CrossChainEnabledArbitrumL2.sol │ │ │ │ ├── LibArbitrumL1.sol │ │ │ │ └── LibArbitrumL2.sol │ │ │ ├── errors.sol │ │ │ ├── optimism │ │ │ │ ├── CrossChainEnabledOptimism.sol │ │ │ │ └── LibOptimism.sol │ │ │ └── polygon │ │ │ │ └── CrossChainEnabledPolygonChild.sol │ │ ├── finance │ │ │ ├── PaymentSplitter.sol │ │ │ ├── README.adoc │ │ │ └── VestingWallet.sol │ │ ├── governance │ │ │ ├── Governor.sol │ │ │ ├── IGovernor.sol │ │ │ ├── README.adoc │ │ │ ├── TimelockController.sol │ │ │ ├── compatibility │ │ │ │ ├── GovernorCompatibilityBravo.sol │ │ │ │ └── IGovernorCompatibilityBravo.sol │ │ │ ├── extensions │ │ │ │ ├── GovernorCountingSimple.sol │ │ │ │ ├── GovernorPreventLateQuorum.sol │ │ │ │ ├── GovernorProposalThreshold.sol │ │ │ │ ├── GovernorSettings.sol │ │ │ │ ├── GovernorTimelockCompound.sol │ │ │ │ ├── GovernorTimelockControl.sol │ │ │ │ ├── GovernorVotes.sol │ │ │ │ ├── GovernorVotesComp.sol │ │ │ │ ├── GovernorVotesQuorumFraction.sol │ │ │ │ └── IGovernorTimelock.sol │ │ │ └── utils │ │ │ │ ├── IVotes.sol │ │ │ │ └── Votes.sol │ │ ├── interfaces │ │ │ ├── IERC1155.sol │ │ │ ├── IERC1155MetadataURI.sol │ │ │ ├── IERC1155Receiver.sol │ │ │ ├── IERC1271.sol │ │ │ ├── IERC1363.sol │ │ │ ├── IERC1363Receiver.sol │ │ │ ├── IERC1363Spender.sol │ │ │ ├── IERC165.sol │ │ │ ├── IERC1820Implementer.sol │ │ │ ├── IERC1820Registry.sol │ │ │ ├── IERC1967.sol │ │ │ ├── IERC20.sol │ │ │ ├── IERC20Metadata.sol │ │ │ ├── IERC2309.sol │ │ │ ├── IERC2612.sol │ │ │ ├── IERC2981.sol │ │ │ ├── IERC3156.sol │ │ │ ├── IERC3156FlashBorrower.sol │ │ │ ├── IERC3156FlashLender.sol │ │ │ ├── IERC4626.sol │ │ │ ├── IERC4906.sol │ │ │ ├── IERC5267.sol │ │ │ ├── IERC5313.sol │ │ │ ├── IERC5805.sol │ │ │ ├── IERC6372.sol │ │ │ ├── IERC721.sol │ │ │ ├── IERC721Enumerable.sol │ │ │ ├── IERC721Metadata.sol │ │ │ ├── IERC721Receiver.sol │ │ │ ├── IERC777.sol │ │ │ ├── IERC777Recipient.sol │ │ │ ├── IERC777Sender.sol │ │ │ ├── README.adoc │ │ │ ├── draft-IERC1822.sol │ │ │ └── draft-IERC2612.sol │ │ ├── metatx │ │ │ ├── ERC2771Context.sol │ │ │ ├── MinimalForwarder.sol │ │ │ └── README.adoc │ │ ├── mocks │ │ │ ├── AccessControlCrossChainMock.sol │ │ │ ├── ArraysMock.sol │ │ │ ├── CallReceiverMock.sol │ │ │ ├── ConditionalEscrowMock.sol │ │ │ ├── ContextMock.sol │ │ │ ├── DummyImplementation.sol │ │ │ ├── EIP712Verifier.sol │ │ │ ├── ERC1271WalletMock.sol │ │ │ ├── ERC165 │ │ │ │ ├── ERC165MaliciousData.sol │ │ │ │ ├── ERC165MissingData.sol │ │ │ │ ├── ERC165NotSupported.sol │ │ │ │ └── ERC165ReturnBomb.sol │ │ │ ├── ERC20Mock.sol │ │ │ ├── ERC20Reentrant.sol │ │ │ ├── ERC2771ContextMock.sol │ │ │ ├── ERC3156FlashBorrowerMock.sol │ │ │ ├── ERC4626Mock.sol │ │ │ ├── EtherReceiverMock.sol │ │ │ ├── InitializableMock.sol │ │ │ ├── MulticallTest.sol │ │ │ ├── MultipleInheritanceInitializableMocks.sol │ │ │ ├── PausableMock.sol │ │ │ ├── PullPaymentMock.sol │ │ │ ├── ReentrancyAttack.sol │ │ │ ├── ReentrancyMock.sol │ │ │ ├── RegressionImplementation.sol │ │ │ ├── SafeMathMemoryCheck.sol │ │ │ ├── SingleInheritanceInitializableMocks.sol │ │ │ ├── StorageSlotMock.sol │ │ │ ├── TimelockReentrant.sol │ │ │ ├── TimersBlockNumberImpl.sol │ │ │ ├── TimersTimestampImpl.sol │ │ │ ├── VotesMock.sol │ │ │ ├── compound │ │ │ │ └── CompTimelock.sol │ │ │ ├── crosschain │ │ │ │ ├── bridges.sol │ │ │ │ └── receivers.sol │ │ │ ├── governance │ │ │ │ ├── GovernorCompMock.sol │ │ │ │ ├── GovernorCompatibilityBravoMock.sol │ │ │ │ ├── GovernorMock.sol │ │ │ │ ├── GovernorPreventLateQuorumMock.sol │ │ │ │ ├── GovernorTimelockCompoundMock.sol │ │ │ │ ├── GovernorTimelockControlMock.sol │ │ │ │ ├── GovernorVoteMock.sol │ │ │ │ └── GovernorWithParamsMock.sol │ │ │ ├── proxy │ │ │ │ ├── BadBeacon.sol │ │ │ │ ├── ClashingImplementation.sol │ │ │ │ ├── UUPSLegacy.sol │ │ │ │ └── UUPSUpgradeableMock.sol │ │ │ ├── token │ │ │ │ ├── ERC1155ReceiverMock.sol │ │ │ │ ├── ERC20DecimalsMock.sol │ │ │ │ ├── ERC20ExcessDecimalsMock.sol │ │ │ │ ├── ERC20FlashMintMock.sol │ │ │ │ ├── ERC20ForceApproveMock.sol │ │ │ │ ├── ERC20MulticallMock.sol │ │ │ │ ├── ERC20NoReturnMock.sol │ │ │ │ ├── ERC20PermitNoRevertMock.sol │ │ │ │ ├── ERC20ReturnFalseMock.sol │ │ │ │ ├── ERC20VotesLegacyMock.sol │ │ │ │ ├── ERC4626OffsetMock.sol │ │ │ │ ├── ERC4646FeesMock.sol │ │ │ │ ├── ERC721ConsecutiveEnumerableMock.sol │ │ │ │ ├── ERC721ConsecutiveMock.sol │ │ │ │ ├── ERC721ReceiverMock.sol │ │ │ │ ├── ERC721URIStorageMock.sol │ │ │ │ ├── ERC777Mock.sol │ │ │ │ ├── ERC777SenderRecipientMock.sol │ │ │ │ └── VotesTimestamp.sol │ │ │ └── wizard │ │ │ │ ├── MyGovernor1.sol │ │ │ │ ├── MyGovernor2.sol │ │ │ │ └── MyGovernor3.sol │ │ ├── package.json │ │ ├── proxy │ │ │ ├── Clones.sol │ │ │ ├── ERC1967 │ │ │ │ ├── ERC1967Proxy.sol │ │ │ │ └── ERC1967Upgrade.sol │ │ │ ├── Proxy.sol │ │ │ ├── README.adoc │ │ │ ├── beacon │ │ │ │ ├── BeaconProxy.sol │ │ │ │ ├── IBeacon.sol │ │ │ │ └── UpgradeableBeacon.sol │ │ │ ├── transparent │ │ │ │ ├── ProxyAdmin.sol │ │ │ │ └── TransparentUpgradeableProxy.sol │ │ │ └── utils │ │ │ │ ├── Initializable.sol │ │ │ │ └── UUPSUpgradeable.sol │ │ ├── security │ │ │ ├── Pausable.sol │ │ │ ├── PullPayment.sol │ │ │ ├── README.adoc │ │ │ └── ReentrancyGuard.sol │ │ ├── token │ │ │ ├── ERC1155 │ │ │ │ ├── ERC1155.sol │ │ │ │ ├── IERC1155.sol │ │ │ │ ├── IERC1155Receiver.sol │ │ │ │ ├── README.adoc │ │ │ │ ├── extensions │ │ │ │ │ ├── ERC1155Burnable.sol │ │ │ │ │ ├── ERC1155Pausable.sol │ │ │ │ │ ├── ERC1155Supply.sol │ │ │ │ │ ├── ERC1155URIStorage.sol │ │ │ │ │ └── IERC1155MetadataURI.sol │ │ │ │ ├── presets │ │ │ │ │ ├── ERC1155PresetMinterPauser.sol │ │ │ │ │ └── README.md │ │ │ │ └── utils │ │ │ │ │ ├── ERC1155Holder.sol │ │ │ │ │ └── ERC1155Receiver.sol │ │ │ ├── ERC20 │ │ │ │ ├── ERC20.sol │ │ │ │ ├── IERC20.sol │ │ │ │ ├── README.adoc │ │ │ │ ├── extensions │ │ │ │ │ ├── ERC20Burnable.sol │ │ │ │ │ ├── ERC20Capped.sol │ │ │ │ │ ├── ERC20FlashMint.sol │ │ │ │ │ ├── ERC20Pausable.sol │ │ │ │ │ ├── ERC20Permit.sol │ │ │ │ │ ├── ERC20Snapshot.sol │ │ │ │ │ ├── ERC20Votes.sol │ │ │ │ │ ├── ERC20VotesComp.sol │ │ │ │ │ ├── ERC20Wrapper.sol │ │ │ │ │ ├── ERC4626.sol │ │ │ │ │ ├── IERC20Metadata.sol │ │ │ │ │ ├── IERC20Permit.sol │ │ │ │ │ ├── draft-ERC20Permit.sol │ │ │ │ │ └── draft-IERC20Permit.sol │ │ │ │ ├── presets │ │ │ │ │ ├── ERC20PresetFixedSupply.sol │ │ │ │ │ ├── ERC20PresetMinterPauser.sol │ │ │ │ │ └── README.md │ │ │ │ └── utils │ │ │ │ │ ├── SafeERC20.sol │ │ │ │ │ └── TokenTimelock.sol │ │ │ ├── ERC721 │ │ │ │ ├── ERC721.sol │ │ │ │ ├── IERC721.sol │ │ │ │ ├── IERC721Receiver.sol │ │ │ │ ├── README.adoc │ │ │ │ ├── extensions │ │ │ │ │ ├── ERC721Burnable.sol │ │ │ │ │ ├── ERC721Consecutive.sol │ │ │ │ │ ├── ERC721Enumerable.sol │ │ │ │ │ ├── ERC721Pausable.sol │ │ │ │ │ ├── ERC721Royalty.sol │ │ │ │ │ ├── ERC721URIStorage.sol │ │ │ │ │ ├── ERC721Votes.sol │ │ │ │ │ ├── ERC721Wrapper.sol │ │ │ │ │ ├── IERC721Enumerable.sol │ │ │ │ │ ├── IERC721Metadata.sol │ │ │ │ │ └── draft-ERC721Votes.sol │ │ │ │ ├── presets │ │ │ │ │ ├── ERC721PresetMinterPauserAutoId.sol │ │ │ │ │ └── README.md │ │ │ │ └── utils │ │ │ │ │ └── ERC721Holder.sol │ │ │ ├── ERC777 │ │ │ │ ├── ERC777.sol │ │ │ │ ├── IERC777.sol │ │ │ │ ├── IERC777Recipient.sol │ │ │ │ ├── IERC777Sender.sol │ │ │ │ ├── README.adoc │ │ │ │ └── presets │ │ │ │ │ └── ERC777PresetFixedSupply.sol │ │ │ └── common │ │ │ │ ├── ERC2981.sol │ │ │ │ └── README.adoc │ │ ├── utils │ │ │ ├── Address.sol │ │ │ ├── Arrays.sol │ │ │ ├── Base64.sol │ │ │ ├── Checkpoints.sol │ │ │ ├── Context.sol │ │ │ ├── Counters.sol │ │ │ ├── Create2.sol │ │ │ ├── Multicall.sol │ │ │ ├── README.adoc │ │ │ ├── ShortStrings.sol │ │ │ ├── StorageSlot.sol │ │ │ ├── Strings.sol │ │ │ ├── Timers.sol │ │ │ ├── cryptography │ │ │ │ ├── ECDSA.sol │ │ │ │ ├── EIP712.sol │ │ │ │ ├── MerkleProof.sol │ │ │ │ ├── SignatureChecker.sol │ │ │ │ └── draft-EIP712.sol │ │ │ ├── escrow │ │ │ │ ├── ConditionalEscrow.sol │ │ │ │ ├── Escrow.sol │ │ │ │ └── RefundEscrow.sol │ │ │ ├── introspection │ │ │ │ ├── ERC165.sol │ │ │ │ ├── ERC165Checker.sol │ │ │ │ ├── ERC165Storage.sol │ │ │ │ ├── ERC1820Implementer.sol │ │ │ │ ├── IERC165.sol │ │ │ │ ├── IERC1820Implementer.sol │ │ │ │ └── IERC1820Registry.sol │ │ │ ├── math │ │ │ │ ├── Math.sol │ │ │ │ ├── SafeCast.sol │ │ │ │ ├── SafeMath.sol │ │ │ │ ├── SignedMath.sol │ │ │ │ └── SignedSafeMath.sol │ │ │ └── structs │ │ │ │ ├── BitMaps.sol │ │ │ │ ├── DoubleEndedQueue.sol │ │ │ │ ├── EnumerableMap.sol │ │ │ │ └── EnumerableSet.sol │ │ └── vendor │ │ │ ├── amb │ │ │ └── IAMB.sol │ │ │ ├── arbitrum │ │ │ ├── IArbSys.sol │ │ │ ├── IBridge.sol │ │ │ ├── IDelayedMessageProvider.sol │ │ │ ├── IInbox.sol │ │ │ └── IOutbox.sol │ │ │ ├── compound │ │ │ ├── ICompoundTimelock.sol │ │ │ └── LICENSE │ │ │ ├── optimism │ │ │ ├── ICrossDomainMessenger.sol │ │ │ └── LICENSE │ │ │ └── polygon │ │ │ └── IFxMessageProcessor.sol │ ├── foundry.toml │ ├── hardhat.config.js │ ├── hardhat │ │ ├── env-artifacts.js │ │ ├── env-contract.js │ │ ├── ignore-unreachable-warnings.js │ │ ├── skip-foundry-tests.js │ │ └── task-test-get-files.js │ ├── lib │ │ ├── erc4626-tests │ │ │ ├── ERC4626.prop.sol │ │ │ ├── ERC4626.test.sol │ │ │ ├── LICENSE │ │ │ └── README.md │ │ └── forge-std │ │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── ci.yml │ │ │ ├── .gitignore │ │ │ ├── .gitmodules │ │ │ ├── LICENSE-APACHE │ │ │ ├── LICENSE-MIT │ │ │ ├── README.md │ │ │ ├── foundry.toml │ │ │ ├── lib │ │ │ └── ds-test │ │ │ │ ├── .github │ │ │ │ └── workflows │ │ │ │ │ └── build.yml │ │ │ │ ├── .gitignore │ │ │ │ ├── LICENSE │ │ │ │ ├── Makefile │ │ │ │ ├── default.nix │ │ │ │ ├── demo │ │ │ │ └── demo.sol │ │ │ │ ├── package.json │ │ │ │ └── src │ │ │ │ ├── test.sol │ │ │ │ └── test.t.sol │ │ │ ├── package.json │ │ │ ├── src │ │ │ ├── Base.sol │ │ │ ├── Script.sol │ │ │ ├── StdAssertions.sol │ │ │ ├── StdChains.sol │ │ │ ├── StdCheats.sol │ │ │ ├── StdError.sol │ │ │ ├── StdInvariant.sol │ │ │ ├── StdJson.sol │ │ │ ├── StdMath.sol │ │ │ ├── StdStorage.sol │ │ │ ├── StdStyle.sol │ │ │ ├── StdUtils.sol │ │ │ ├── Test.sol │ │ │ ├── Vm.sol │ │ │ ├── console.sol │ │ │ ├── console2.sol │ │ │ └── interfaces │ │ │ │ ├── IERC1155.sol │ │ │ │ ├── IERC165.sol │ │ │ │ ├── IERC20.sol │ │ │ │ ├── IERC4626.sol │ │ │ │ ├── IERC721.sol │ │ │ │ └── IMulticall3.sol │ │ │ └── test │ │ │ ├── StdAssertions.t.sol │ │ │ ├── StdChains.t.sol │ │ │ ├── StdCheats.t.sol │ │ │ ├── StdError.t.sol │ │ │ ├── StdMath.t.sol │ │ │ ├── StdStorage.t.sol │ │ │ ├── StdStyle.t.sol │ │ │ ├── StdUtils.t.sol │ │ │ ├── compilation │ │ │ ├── CompilationScript.sol │ │ │ ├── CompilationScriptBase.sol │ │ │ ├── CompilationTest.sol │ │ │ └── CompilationTestBase.sol │ │ │ └── fixtures │ │ │ └── broadcast.log.json │ ├── logo.svg │ ├── netlify.toml │ ├── package-lock.json │ ├── package.json │ ├── remappings.txt │ ├── renovate.json │ ├── requirements.txt │ ├── scripts │ │ ├── checks │ │ │ ├── compare-layout.js │ │ │ ├── compareGasReports.js │ │ │ ├── extract-layout.js │ │ │ ├── generation.sh │ │ │ └── inheritance-ordering.js │ │ ├── gen-nav.js │ │ ├── generate │ │ │ ├── format-lines.js │ │ │ ├── run.js │ │ │ └── templates │ │ │ │ ├── Checkpoints.js │ │ │ │ ├── Checkpoints.opts.js │ │ │ │ ├── Checkpoints.t.js │ │ │ │ ├── EnumerableMap.js │ │ │ │ ├── EnumerableSet.js │ │ │ │ ├── SafeCast.js │ │ │ │ ├── StorageSlot.js │ │ │ │ └── conversion.js │ │ ├── git-user-config.sh │ │ ├── helpers.js │ │ ├── migrate-imports.js │ │ ├── prepack.sh │ │ ├── prepare-contracts-package.sh │ │ ├── prepare-docs.sh │ │ ├── prepare.sh │ │ ├── release │ │ │ ├── format-changelog.js │ │ │ ├── synchronize-versions.js │ │ │ ├── update-comment.js │ │ │ ├── version.sh │ │ │ └── workflow │ │ │ │ ├── exit-prerelease.sh │ │ │ │ ├── github-release.js │ │ │ │ ├── integrity-check.sh │ │ │ │ ├── pack.sh │ │ │ │ ├── publish.sh │ │ │ │ ├── rerun.js │ │ │ │ ├── set-changesets-pr-title.js │ │ │ │ ├── start.sh │ │ │ │ └── state.js │ │ ├── remove-ignored-artifacts.js │ │ ├── update-docs-branch.js │ │ └── upgradeable │ │ │ ├── README.md │ │ │ ├── patch-apply.sh │ │ │ ├── patch-save.sh │ │ │ ├── transpile-onto.sh │ │ │ ├── transpile.sh │ │ │ └── upgradeable.patch │ ├── slither.config.json │ └── test │ │ ├── TESTING.md │ │ ├── access │ │ ├── AccessControl.behavior.js │ │ ├── AccessControl.test.js │ │ ├── AccessControlCrossChain.test.js │ │ ├── AccessControlDefaultAdminRules.test.js │ │ ├── AccessControlEnumerable.test.js │ │ ├── Ownable.test.js │ │ └── Ownable2Step.test.js │ │ ├── crosschain │ │ └── CrossChainEnabled.test.js │ │ ├── finance │ │ ├── PaymentSplitter.test.js │ │ ├── VestingWallet.behavior.js │ │ └── VestingWallet.test.js │ │ ├── governance │ │ ├── Governor.t.sol │ │ ├── Governor.test.js │ │ ├── TimelockController.test.js │ │ ├── compatibility │ │ │ └── GovernorCompatibilityBravo.test.js │ │ ├── extensions │ │ │ ├── GovernorComp.test.js │ │ │ ├── GovernorERC721.test.js │ │ │ ├── GovernorPreventLateQuorum.test.js │ │ │ ├── GovernorTimelockCompound.test.js │ │ │ ├── GovernorTimelockControl.test.js │ │ │ ├── GovernorVotesQuorumFraction.test.js │ │ │ └── GovernorWithParams.test.js │ │ └── utils │ │ │ ├── EIP6372.behavior.js │ │ │ ├── Votes.behavior.js │ │ │ └── Votes.test.js │ │ ├── helpers │ │ ├── chainid.js │ │ ├── create2.js │ │ ├── crosschain.js │ │ ├── customError.js │ │ ├── eip712.js │ │ ├── enums.js │ │ ├── erc1967.js │ │ ├── governance.js │ │ ├── map-values.js │ │ ├── sign.js │ │ ├── time.js │ │ └── txpool.js │ │ ├── metatx │ │ ├── ERC2771Context.test.js │ │ └── MinimalForwarder.test.js │ │ ├── migrate-imports.test.js │ │ ├── proxy │ │ ├── Clones.behaviour.js │ │ ├── Clones.test.js │ │ ├── ERC1967 │ │ │ └── ERC1967Proxy.test.js │ │ ├── Proxy.behaviour.js │ │ ├── beacon │ │ │ ├── BeaconProxy.test.js │ │ │ └── UpgradeableBeacon.test.js │ │ ├── transparent │ │ │ ├── ProxyAdmin.test.js │ │ │ ├── TransparentUpgradeableProxy.behaviour.js │ │ │ └── TransparentUpgradeableProxy.test.js │ │ └── utils │ │ │ ├── Initializable.test.js │ │ │ └── UUPSUpgradeable.test.js │ │ ├── security │ │ ├── Pausable.test.js │ │ ├── PullPayment.test.js │ │ └── ReentrancyGuard.test.js │ │ ├── token │ │ ├── ERC1155 │ │ │ ├── ERC1155.behavior.js │ │ │ ├── ERC1155.test.js │ │ │ ├── extensions │ │ │ │ ├── ERC1155Burnable.test.js │ │ │ │ ├── ERC1155Pausable.test.js │ │ │ │ ├── ERC1155Supply.test.js │ │ │ │ └── ERC1155URIStorage.test.js │ │ │ ├── presets │ │ │ │ └── ERC1155PresetMinterPauser.test.js │ │ │ └── utils │ │ │ │ └── ERC1155Holder.test.js │ │ ├── ERC20 │ │ │ ├── ERC20.behavior.js │ │ │ ├── ERC20.test.js │ │ │ ├── extensions │ │ │ │ ├── ERC20Burnable.behavior.js │ │ │ │ ├── ERC20Burnable.test.js │ │ │ │ ├── ERC20Capped.behavior.js │ │ │ │ ├── ERC20Capped.test.js │ │ │ │ ├── ERC20FlashMint.test.js │ │ │ │ ├── ERC20Pausable.test.js │ │ │ │ ├── ERC20Snapshot.test.js │ │ │ │ ├── ERC20Votes.test.js │ │ │ │ ├── ERC20VotesComp.test.js │ │ │ │ ├── ERC20Wrapper.test.js │ │ │ │ ├── ERC4626.t.sol │ │ │ │ ├── ERC4626.test.js │ │ │ │ └── draft-ERC20Permit.test.js │ │ │ ├── presets │ │ │ │ ├── ERC20PresetFixedSupply.test.js │ │ │ │ └── ERC20PresetMinterPauser.test.js │ │ │ └── utils │ │ │ │ ├── SafeERC20.test.js │ │ │ │ └── TokenTimelock.test.js │ │ ├── ERC721 │ │ │ ├── ERC721.behavior.js │ │ │ ├── ERC721.test.js │ │ │ ├── ERC721Enumerable.test.js │ │ │ ├── extensions │ │ │ │ ├── ERC721Burnable.test.js │ │ │ │ ├── ERC721Consecutive.t.sol │ │ │ │ ├── ERC721Consecutive.test.js │ │ │ │ ├── ERC721Pausable.test.js │ │ │ │ ├── ERC721Royalty.test.js │ │ │ │ ├── ERC721URIStorage.test.js │ │ │ │ ├── ERC721Votes.test.js │ │ │ │ └── ERC721Wrapper.test.js │ │ │ ├── presets │ │ │ │ └── ERC721PresetMinterPauserAutoId.test.js │ │ │ └── utils │ │ │ │ └── ERC721Holder.test.js │ │ ├── ERC777 │ │ │ ├── ERC777.behavior.js │ │ │ ├── ERC777.test.js │ │ │ └── presets │ │ │ │ └── ERC777PresetFixedSupply.test.js │ │ └── common │ │ │ └── ERC2981.behavior.js │ │ └── utils │ │ ├── Address.test.js │ │ ├── Arrays.test.js │ │ ├── Base64.test.js │ │ ├── Checkpoints.t.sol │ │ ├── Checkpoints.test.js │ │ ├── Context.behavior.js │ │ ├── Context.test.js │ │ ├── Counters.test.js │ │ ├── Create2.test.js │ │ ├── Multicall.test.js │ │ ├── ShortStrings.t.sol │ │ ├── ShortStrings.test.js │ │ ├── StorageSlot.test.js │ │ ├── Strings.test.js │ │ ├── TimersBlockNumberImpl.test.js │ │ ├── TimersTimestamp.test.js │ │ ├── cryptography │ │ ├── ECDSA.test.js │ │ ├── EIP712.test.js │ │ ├── MerkleProof.test.js │ │ └── SignatureChecker.test.js │ │ ├── escrow │ │ ├── ConditionalEscrow.test.js │ │ ├── Escrow.behavior.js │ │ ├── Escrow.test.js │ │ └── RefundEscrow.test.js │ │ ├── introspection │ │ ├── ERC165.test.js │ │ ├── ERC165Checker.test.js │ │ ├── ERC165Storage.test.js │ │ ├── ERC1820Implementer.test.js │ │ └── SupportsInterface.behavior.js │ │ ├── math │ │ ├── Math.t.sol │ │ ├── Math.test.js │ │ ├── SafeCast.test.js │ │ ├── SafeMath.test.js │ │ ├── SignedMath.test.js │ │ └── SignedSafeMath.test.js │ │ └── structs │ │ ├── BitMap.test.js │ │ ├── DoubleEndedQueue.test.js │ │ ├── EnumerableMap.behavior.js │ │ ├── EnumerableMap.test.js │ │ ├── EnumerableSet.behavior.js │ │ └── EnumerableSet.test.js ├── permit2 │ ├── .env.example │ ├── .forge-snapshots │ │ ├── batchTransferFrom.snap │ │ ├── batchTransferFromMultiToken.snap │ │ ├── lockdown.snap │ │ ├── permit2 + transferFrom2 with WETH9's mainnet address.snap │ │ ├── permit2 + transferFrom2 with a non EIP-2612 native token with fallback.snap │ │ ├── permit2 + transferFrom2 with a non EIP-2612 native token.snap │ │ ├── permit2 + transferFrom2 with an EIP-2612 native token.snap │ │ ├── permitBatchCleanWrite.snap │ │ ├── permitBatchDirtyWrite.snap │ │ ├── permitBatchTransferFromMultipleTokens.snap │ │ ├── permitBatchTransferFromSingleToken.snap │ │ ├── permitCleanWrite.snap │ │ ├── permitCompactSig.snap │ │ ├── permitDirtyNonce.snap │ │ ├── permitDirtyWrite.snap │ │ ├── permitInvalidSigner.snap │ │ ├── permitSetMaxAllowanceCleanWrite.snap │ │ ├── permitSetMaxAllowanceDirtyWrite.snap │ │ ├── permitSignatureExpired.snap │ │ ├── permitTransferFromBatchTypedWitness.snap │ │ ├── permitTransferFromCompactSig.snap │ │ ├── permitTransferFromSingleToken.snap │ │ ├── permitTransferFromTypedWitness.snap │ │ ├── safePermit + safeTransferFrom with an EIP-2612 native token.snap │ │ ├── simplePermit2 + transferFrom2 with a non EIP-2612 native token.snap │ │ ├── single recipient 2 tokens.snap │ │ ├── single recipient many tokens.snap │ │ ├── transferFrom with different owners.snap │ │ └── transferFrom.snap │ ├── .gas-snapshot │ ├── .gitattributes │ ├── .github │ │ └── workflows │ │ │ ├── gas.yml │ │ │ ├── integration-tests.yml │ │ │ ├── lint.yml │ │ │ └── unit-tests.yml │ ├── .gitignore │ ├── .gitmodules │ ├── .vscode │ │ └── settings.json │ ├── LICENSE │ ├── README.md │ ├── audits │ │ ├── ABDKAudit.pdf │ │ └── Chainsecurity Audit.pdf │ ├── foundry.toml │ ├── lib │ │ ├── forge-gas-snapshot │ │ │ ├── .forge-snapshots │ │ │ │ ├── add.snap │ │ │ │ ├── addFirst.snap │ │ │ │ ├── addSecond.snap │ │ │ │ ├── manyAdd.snap │ │ │ │ ├── manySstore.snap │ │ │ │ ├── snapmanyAdd.snap │ │ │ │ └── snapmanySstore.snap │ │ │ ├── .github │ │ │ │ └── workflows │ │ │ │ │ └── test.yml │ │ │ ├── .gitignore │ │ │ ├── .gitmodules │ │ │ ├── README.md │ │ │ ├── foundry.toml │ │ │ ├── src │ │ │ │ ├── GasSnapshot.sol │ │ │ │ ├── test │ │ │ │ │ ├── SimpleOperations.sol │ │ │ │ │ └── SimpleOperationsGas.sol │ │ │ │ └── utils │ │ │ │ │ └── UintString.sol │ │ │ └── test │ │ │ │ └── GasSnapshot.t.sol │ │ ├── forge-std │ │ │ ├── .github │ │ │ │ └── workflows │ │ │ │ │ ├── ci.yml │ │ │ │ │ └── sync.yml │ │ │ ├── .gitignore │ │ │ ├── .gitmodules │ │ │ ├── LICENSE-APACHE │ │ │ ├── LICENSE-MIT │ │ │ ├── README.md │ │ │ ├── foundry.toml │ │ │ ├── lib │ │ │ │ └── ds-test │ │ │ │ │ ├── .github │ │ │ │ │ └── workflows │ │ │ │ │ │ └── build.yml │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── Makefile │ │ │ │ │ ├── default.nix │ │ │ │ │ ├── demo │ │ │ │ │ └── demo.sol │ │ │ │ │ ├── package.json │ │ │ │ │ └── src │ │ │ │ │ ├── test.sol │ │ │ │ │ └── test.t.sol │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── Base.sol │ │ │ │ ├── Script.sol │ │ │ │ ├── StdAssertions.sol │ │ │ │ ├── StdChains.sol │ │ │ │ ├── StdCheats.sol │ │ │ │ ├── StdError.sol │ │ │ │ ├── StdInvariant.sol │ │ │ │ ├── StdJson.sol │ │ │ │ ├── StdMath.sol │ │ │ │ ├── StdStorage.sol │ │ │ │ ├── StdStyle.sol │ │ │ │ ├── StdUtils.sol │ │ │ │ ├── Test.sol │ │ │ │ ├── Vm.sol │ │ │ │ ├── console.sol │ │ │ │ ├── console2.sol │ │ │ │ ├── interfaces │ │ │ │ │ ├── IERC1155.sol │ │ │ │ │ ├── IERC165.sol │ │ │ │ │ ├── IERC20.sol │ │ │ │ │ ├── IERC4626.sol │ │ │ │ │ ├── IERC721.sol │ │ │ │ │ └── IMulticall3.sol │ │ │ │ └── safeconsole.sol │ │ │ └── test │ │ │ │ ├── StdAssertions.t.sol │ │ │ │ ├── StdChains.t.sol │ │ │ │ ├── StdCheats.t.sol │ │ │ │ ├── StdError.t.sol │ │ │ │ ├── StdMath.t.sol │ │ │ │ ├── StdStorage.t.sol │ │ │ │ ├── StdStyle.t.sol │ │ │ │ ├── StdUtils.t.sol │ │ │ │ ├── compilation │ │ │ │ ├── CompilationScript.sol │ │ │ │ ├── CompilationScriptBase.sol │ │ │ │ ├── CompilationTest.sol │ │ │ │ └── CompilationTestBase.sol │ │ │ │ └── fixtures │ │ │ │ └── broadcast.log.json │ │ ├── openzeppelin-contracts │ │ │ ├── .codecov.yml │ │ │ ├── .editorconfig │ │ │ ├── .eslintrc │ │ │ ├── .gitattributes │ │ │ ├── .github │ │ │ │ ├── ISSUE_TEMPLATE │ │ │ │ │ ├── bug_report.md │ │ │ │ │ ├── config.yml │ │ │ │ │ └── feature_request.md │ │ │ │ ├── PULL_REQUEST_TEMPLATE.md │ │ │ │ ├── actions │ │ │ │ │ ├── gas-compare │ │ │ │ │ │ └── action.yml │ │ │ │ │ └── setup │ │ │ │ │ │ └── action.yml │ │ │ │ └── workflows │ │ │ │ │ ├── checks.yml │ │ │ │ │ ├── docs.yml │ │ │ │ │ └── upgradeable.yml │ │ │ ├── .gitignore │ │ │ ├── .mocharc.js │ │ │ ├── .prettierrc │ │ │ ├── .solcover.js │ │ │ ├── .solhint.json │ │ │ ├── CHANGELOG.md │ │ │ ├── CODE_OF_CONDUCT.md │ │ │ ├── CONTRIBUTING.md │ │ │ ├── DOCUMENTATION.md │ │ │ ├── GUIDELINES.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── RELEASING.md │ │ │ ├── SECURITY.md │ │ │ ├── audit │ │ │ │ ├── 2017-03.md │ │ │ │ └── 2018-10.pdf │ │ │ ├── certora │ │ │ │ ├── Makefile │ │ │ │ ├── README.md │ │ │ │ ├── applyHarness.patch │ │ │ │ ├── harnesses │ │ │ │ │ ├── ERC20VotesHarness.sol │ │ │ │ │ ├── WizardControlFirstPriority.sol │ │ │ │ │ └── WizardFirstTry.sol │ │ │ │ ├── munged │ │ │ │ │ └── .gitignore │ │ │ │ ├── scripts │ │ │ │ │ ├── Governor.sh │ │ │ │ │ ├── GovernorCountingSimple-counting.sh │ │ │ │ │ ├── WizardControlFirstPriority.sh │ │ │ │ │ ├── WizardFirstTry.sh │ │ │ │ │ ├── sanity.sh │ │ │ │ │ └── verifyAll.sh │ │ │ │ └── specs │ │ │ │ │ ├── GovernorBase.spec │ │ │ │ │ ├── GovernorCountingSimple.spec │ │ │ │ │ ├── RulesInProgress.spec │ │ │ │ │ └── sanity.spec │ │ │ ├── contracts │ │ │ │ ├── access │ │ │ │ │ ├── AccessControl.sol │ │ │ │ │ ├── AccessControlCrossChain.sol │ │ │ │ │ ├── AccessControlEnumerable.sol │ │ │ │ │ ├── IAccessControl.sol │ │ │ │ │ ├── IAccessControlEnumerable.sol │ │ │ │ │ ├── Ownable.sol │ │ │ │ │ └── README.adoc │ │ │ │ ├── crosschain │ │ │ │ │ ├── CrossChainEnabled.sol │ │ │ │ │ ├── README.adoc │ │ │ │ │ ├── amb │ │ │ │ │ │ ├── CrossChainEnabledAMB.sol │ │ │ │ │ │ └── LibAMB.sol │ │ │ │ │ ├── arbitrum │ │ │ │ │ │ ├── CrossChainEnabledArbitrumL1.sol │ │ │ │ │ │ ├── CrossChainEnabledArbitrumL2.sol │ │ │ │ │ │ ├── LibArbitrumL1.sol │ │ │ │ │ │ └── LibArbitrumL2.sol │ │ │ │ │ ├── errors.sol │ │ │ │ │ ├── optimism │ │ │ │ │ │ ├── CrossChainEnabledOptimism.sol │ │ │ │ │ │ └── LibOptimism.sol │ │ │ │ │ └── polygon │ │ │ │ │ │ └── CrossChainEnabledPolygonChild.sol │ │ │ │ ├── finance │ │ │ │ │ ├── PaymentSplitter.sol │ │ │ │ │ ├── README.adoc │ │ │ │ │ └── VestingWallet.sol │ │ │ │ ├── governance │ │ │ │ │ ├── Governor.sol │ │ │ │ │ ├── IGovernor.sol │ │ │ │ │ ├── README.adoc │ │ │ │ │ ├── TimelockController.sol │ │ │ │ │ ├── compatibility │ │ │ │ │ │ ├── GovernorCompatibilityBravo.sol │ │ │ │ │ │ └── IGovernorCompatibilityBravo.sol │ │ │ │ │ ├── extensions │ │ │ │ │ │ ├── GovernorCountingSimple.sol │ │ │ │ │ │ ├── GovernorPreventLateQuorum.sol │ │ │ │ │ │ ├── GovernorProposalThreshold.sol │ │ │ │ │ │ ├── GovernorSettings.sol │ │ │ │ │ │ ├── GovernorTimelockCompound.sol │ │ │ │ │ │ ├── GovernorTimelockControl.sol │ │ │ │ │ │ ├── GovernorVotes.sol │ │ │ │ │ │ ├── GovernorVotesComp.sol │ │ │ │ │ │ ├── GovernorVotesQuorumFraction.sol │ │ │ │ │ │ └── IGovernorTimelock.sol │ │ │ │ │ └── utils │ │ │ │ │ │ ├── IVotes.sol │ │ │ │ │ │ └── Votes.sol │ │ │ │ ├── interfaces │ │ │ │ │ ├── IERC1155.sol │ │ │ │ │ ├── IERC1155MetadataURI.sol │ │ │ │ │ ├── IERC1155Receiver.sol │ │ │ │ │ ├── IERC1271.sol │ │ │ │ │ ├── IERC1363.sol │ │ │ │ │ ├── IERC1363Receiver.sol │ │ │ │ │ ├── IERC1363Spender.sol │ │ │ │ │ ├── IERC165.sol │ │ │ │ │ ├── IERC1820Implementer.sol │ │ │ │ │ ├── IERC1820Registry.sol │ │ │ │ │ ├── IERC20.sol │ │ │ │ │ ├── IERC20Metadata.sol │ │ │ │ │ ├── IERC2981.sol │ │ │ │ │ ├── IERC3156.sol │ │ │ │ │ ├── IERC3156FlashBorrower.sol │ │ │ │ │ ├── IERC3156FlashLender.sol │ │ │ │ │ ├── IERC4626.sol │ │ │ │ │ ├── IERC721.sol │ │ │ │ │ ├── IERC721Enumerable.sol │ │ │ │ │ ├── IERC721Metadata.sol │ │ │ │ │ ├── IERC721Receiver.sol │ │ │ │ │ ├── IERC777.sol │ │ │ │ │ ├── IERC777Recipient.sol │ │ │ │ │ ├── IERC777Sender.sol │ │ │ │ │ ├── README.adoc │ │ │ │ │ ├── draft-IERC1822.sol │ │ │ │ │ └── draft-IERC2612.sol │ │ │ │ ├── metatx │ │ │ │ │ ├── ERC2771Context.sol │ │ │ │ │ ├── MinimalForwarder.sol │ │ │ │ │ └── README.adoc │ │ │ │ ├── mocks │ │ │ │ │ ├── AccessControlCrossChainMock.sol │ │ │ │ │ ├── AccessControlEnumerableMock.sol │ │ │ │ │ ├── AccessControlMock.sol │ │ │ │ │ ├── AddressImpl.sol │ │ │ │ │ ├── ArraysImpl.sol │ │ │ │ │ ├── BadBeacon.sol │ │ │ │ │ ├── Base64Mock.sol │ │ │ │ │ ├── BitmapMock.sol │ │ │ │ │ ├── CallReceiverMock.sol │ │ │ │ │ ├── CheckpointsImpl.sol │ │ │ │ │ ├── ClashingImplementation.sol │ │ │ │ │ ├── ClonesMock.sol │ │ │ │ │ ├── ConditionalEscrowMock.sol │ │ │ │ │ ├── ContextMock.sol │ │ │ │ │ ├── CountersImpl.sol │ │ │ │ │ ├── Create2Impl.sol │ │ │ │ │ ├── DoubleEndedQueueMock.sol │ │ │ │ │ ├── DummyImplementation.sol │ │ │ │ │ ├── ECDSAMock.sol │ │ │ │ │ ├── EIP712External.sol │ │ │ │ │ ├── ERC1155BurnableMock.sol │ │ │ │ │ ├── ERC1155Mock.sol │ │ │ │ │ ├── ERC1155PausableMock.sol │ │ │ │ │ ├── ERC1155ReceiverMock.sol │ │ │ │ │ ├── ERC1155SupplyMock.sol │ │ │ │ │ ├── ERC1155URIStorageMock.sol │ │ │ │ │ ├── ERC1271WalletMock.sol │ │ │ │ │ ├── ERC165 │ │ │ │ │ │ ├── ERC165InterfacesSupported.sol │ │ │ │ │ │ ├── ERC165MaliciousData.sol │ │ │ │ │ │ ├── ERC165MissingData.sol │ │ │ │ │ │ └── ERC165NotSupported.sol │ │ │ │ │ ├── ERC165CheckerMock.sol │ │ │ │ │ ├── ERC165Mock.sol │ │ │ │ │ ├── ERC165StorageMock.sol │ │ │ │ │ ├── ERC1820ImplementerMock.sol │ │ │ │ │ ├── ERC20BurnableMock.sol │ │ │ │ │ ├── ERC20CappedMock.sol │ │ │ │ │ ├── ERC20DecimalsMock.sol │ │ │ │ │ ├── ERC20FlashMintMock.sol │ │ │ │ │ ├── ERC20Mock.sol │ │ │ │ │ ├── ERC20PausableMock.sol │ │ │ │ │ ├── ERC20PermitMock.sol │ │ │ │ │ ├── ERC20SnapshotMock.sol │ │ │ │ │ ├── ERC20VotesCompMock.sol │ │ │ │ │ ├── ERC20VotesMock.sol │ │ │ │ │ ├── ERC20WrapperMock.sol │ │ │ │ │ ├── ERC2771ContextMock.sol │ │ │ │ │ ├── ERC3156FlashBorrowerMock.sol │ │ │ │ │ ├── ERC4626Mock.sol │ │ │ │ │ ├── ERC721BurnableMock.sol │ │ │ │ │ ├── ERC721EnumerableMock.sol │ │ │ │ │ ├── ERC721Mock.sol │ │ │ │ │ ├── ERC721PausableMock.sol │ │ │ │ │ ├── ERC721ReceiverMock.sol │ │ │ │ │ ├── ERC721RoyaltyMock.sol │ │ │ │ │ ├── ERC721URIStorageMock.sol │ │ │ │ │ ├── ERC721VotesMock.sol │ │ │ │ │ ├── ERC777Mock.sol │ │ │ │ │ ├── ERC777SenderRecipientMock.sol │ │ │ │ │ ├── EnumerableMapMock.sol │ │ │ │ │ ├── EnumerableSetMock.sol │ │ │ │ │ ├── EtherReceiverMock.sol │ │ │ │ │ ├── GovernorCompMock.sol │ │ │ │ │ ├── GovernorCompatibilityBravoMock.sol │ │ │ │ │ ├── GovernorMock.sol │ │ │ │ │ ├── GovernorPreventLateQuorumMock.sol │ │ │ │ │ ├── GovernorTimelockCompoundMock.sol │ │ │ │ │ ├── GovernorTimelockControlMock.sol │ │ │ │ │ ├── GovernorVoteMock.sol │ │ │ │ │ ├── GovernorWithParamsMock.sol │ │ │ │ │ ├── InitializableMock.sol │ │ │ │ │ ├── MathMock.sol │ │ │ │ │ ├── MerkleProofWrapper.sol │ │ │ │ │ ├── MulticallTest.sol │ │ │ │ │ ├── MulticallTokenMock.sol │ │ │ │ │ ├── MultipleInheritanceInitializableMocks.sol │ │ │ │ │ ├── OwnableMock.sol │ │ │ │ │ ├── PausableMock.sol │ │ │ │ │ ├── PullPaymentMock.sol │ │ │ │ │ ├── ReentrancyAttack.sol │ │ │ │ │ ├── ReentrancyMock.sol │ │ │ │ │ ├── RegressionImplementation.sol │ │ │ │ │ ├── SafeCastMock.sol │ │ │ │ │ ├── SafeERC20Helper.sol │ │ │ │ │ ├── SafeMathMock.sol │ │ │ │ │ ├── SignatureCheckerMock.sol │ │ │ │ │ ├── SignedMathMock.sol │ │ │ │ │ ├── SignedSafeMathMock.sol │ │ │ │ │ ├── SingleInheritanceInitializableMocks.sol │ │ │ │ │ ├── StorageSlotMock.sol │ │ │ │ │ ├── StringsMock.sol │ │ │ │ │ ├── TimersBlockNumberImpl.sol │ │ │ │ │ ├── TimersTimestampImpl.sol │ │ │ │ │ ├── UUPS │ │ │ │ │ │ ├── UUPSLegacy.sol │ │ │ │ │ │ └── UUPSUpgradeableMock.sol │ │ │ │ │ ├── VotesMock.sol │ │ │ │ │ ├── compound │ │ │ │ │ │ └── CompTimelock.sol │ │ │ │ │ ├── crosschain │ │ │ │ │ │ ├── bridges.sol │ │ │ │ │ │ └── receivers.sol │ │ │ │ │ └── wizard │ │ │ │ │ │ ├── MyGovernor1.sol │ │ │ │ │ │ ├── MyGovernor2.sol │ │ │ │ │ │ └── MyGovernor3.sol │ │ │ │ ├── package.json │ │ │ │ ├── proxy │ │ │ │ │ ├── Clones.sol │ │ │ │ │ ├── ERC1967 │ │ │ │ │ │ ├── ERC1967Proxy.sol │ │ │ │ │ │ └── ERC1967Upgrade.sol │ │ │ │ │ ├── Proxy.sol │ │ │ │ │ ├── README.adoc │ │ │ │ │ ├── beacon │ │ │ │ │ │ ├── BeaconProxy.sol │ │ │ │ │ │ ├── IBeacon.sol │ │ │ │ │ │ └── UpgradeableBeacon.sol │ │ │ │ │ ├── transparent │ │ │ │ │ │ ├── ProxyAdmin.sol │ │ │ │ │ │ └── TransparentUpgradeableProxy.sol │ │ │ │ │ └── utils │ │ │ │ │ │ ├── Initializable.sol │ │ │ │ │ │ └── UUPSUpgradeable.sol │ │ │ │ ├── security │ │ │ │ │ ├── Pausable.sol │ │ │ │ │ ├── PullPayment.sol │ │ │ │ │ ├── README.adoc │ │ │ │ │ └── ReentrancyGuard.sol │ │ │ │ ├── token │ │ │ │ │ ├── ERC1155 │ │ │ │ │ │ ├── ERC1155.sol │ │ │ │ │ │ ├── IERC1155.sol │ │ │ │ │ │ ├── IERC1155Receiver.sol │ │ │ │ │ │ ├── README.adoc │ │ │ │ │ │ ├── extensions │ │ │ │ │ │ │ ├── ERC1155Burnable.sol │ │ │ │ │ │ │ ├── ERC1155Pausable.sol │ │ │ │ │ │ │ ├── ERC1155Supply.sol │ │ │ │ │ │ │ ├── ERC1155URIStorage.sol │ │ │ │ │ │ │ └── IERC1155MetadataURI.sol │ │ │ │ │ │ ├── presets │ │ │ │ │ │ │ ├── ERC1155PresetMinterPauser.sol │ │ │ │ │ │ │ └── README.md │ │ │ │ │ │ └── utils │ │ │ │ │ │ │ ├── ERC1155Holder.sol │ │ │ │ │ │ │ └── ERC1155Receiver.sol │ │ │ │ │ ├── ERC20 │ │ │ │ │ │ ├── ERC20.sol │ │ │ │ │ │ ├── IERC20.sol │ │ │ │ │ │ ├── README.adoc │ │ │ │ │ │ ├── extensions │ │ │ │ │ │ │ ├── ERC20Burnable.sol │ │ │ │ │ │ │ ├── ERC20Capped.sol │ │ │ │ │ │ │ ├── ERC20FlashMint.sol │ │ │ │ │ │ │ ├── ERC20Pausable.sol │ │ │ │ │ │ │ ├── ERC20Snapshot.sol │ │ │ │ │ │ │ ├── ERC20Votes.sol │ │ │ │ │ │ │ ├── ERC20VotesComp.sol │ │ │ │ │ │ │ ├── ERC20Wrapper.sol │ │ │ │ │ │ │ ├── ERC4626.sol │ │ │ │ │ │ │ ├── IERC20Metadata.sol │ │ │ │ │ │ │ ├── draft-ERC20Permit.sol │ │ │ │ │ │ │ └── draft-IERC20Permit.sol │ │ │ │ │ │ ├── presets │ │ │ │ │ │ │ ├── ERC20PresetFixedSupply.sol │ │ │ │ │ │ │ ├── ERC20PresetMinterPauser.sol │ │ │ │ │ │ │ └── README.md │ │ │ │ │ │ └── utils │ │ │ │ │ │ │ ├── SafeERC20.sol │ │ │ │ │ │ │ └── TokenTimelock.sol │ │ │ │ │ ├── ERC721 │ │ │ │ │ │ ├── ERC721.sol │ │ │ │ │ │ ├── IERC721.sol │ │ │ │ │ │ ├── IERC721Receiver.sol │ │ │ │ │ │ ├── README.adoc │ │ │ │ │ │ ├── extensions │ │ │ │ │ │ │ ├── ERC721Burnable.sol │ │ │ │ │ │ │ ├── ERC721Enumerable.sol │ │ │ │ │ │ │ ├── ERC721Pausable.sol │ │ │ │ │ │ │ ├── ERC721Royalty.sol │ │ │ │ │ │ │ ├── ERC721URIStorage.sol │ │ │ │ │ │ │ ├── IERC721Enumerable.sol │ │ │ │ │ │ │ ├── IERC721Metadata.sol │ │ │ │ │ │ │ └── draft-ERC721Votes.sol │ │ │ │ │ │ ├── presets │ │ │ │ │ │ │ ├── ERC721PresetMinterPauserAutoId.sol │ │ │ │ │ │ │ └── README.md │ │ │ │ │ │ └── utils │ │ │ │ │ │ │ └── ERC721Holder.sol │ │ │ │ │ ├── ERC777 │ │ │ │ │ │ ├── ERC777.sol │ │ │ │ │ │ ├── IERC777.sol │ │ │ │ │ │ ├── IERC777Recipient.sol │ │ │ │ │ │ ├── IERC777Sender.sol │ │ │ │ │ │ ├── README.adoc │ │ │ │ │ │ └── presets │ │ │ │ │ │ │ └── ERC777PresetFixedSupply.sol │ │ │ │ │ └── common │ │ │ │ │ │ ├── ERC2981.sol │ │ │ │ │ │ └── README.adoc │ │ │ │ ├── utils │ │ │ │ │ ├── Address.sol │ │ │ │ │ ├── Arrays.sol │ │ │ │ │ ├── Base64.sol │ │ │ │ │ ├── Checkpoints.sol │ │ │ │ │ ├── Context.sol │ │ │ │ │ ├── Counters.sol │ │ │ │ │ ├── Create2.sol │ │ │ │ │ ├── Multicall.sol │ │ │ │ │ ├── README.adoc │ │ │ │ │ ├── StorageSlot.sol │ │ │ │ │ ├── Strings.sol │ │ │ │ │ ├── Timers.sol │ │ │ │ │ ├── cryptography │ │ │ │ │ │ ├── ECDSA.sol │ │ │ │ │ │ ├── MerkleProof.sol │ │ │ │ │ │ ├── SignatureChecker.sol │ │ │ │ │ │ └── draft-EIP712.sol │ │ │ │ │ ├── escrow │ │ │ │ │ │ ├── ConditionalEscrow.sol │ │ │ │ │ │ ├── Escrow.sol │ │ │ │ │ │ └── RefundEscrow.sol │ │ │ │ │ ├── introspection │ │ │ │ │ │ ├── ERC165.sol │ │ │ │ │ │ ├── ERC165Checker.sol │ │ │ │ │ │ ├── ERC165Storage.sol │ │ │ │ │ │ ├── ERC1820Implementer.sol │ │ │ │ │ │ ├── IERC165.sol │ │ │ │ │ │ ├── IERC1820Implementer.sol │ │ │ │ │ │ └── IERC1820Registry.sol │ │ │ │ │ ├── math │ │ │ │ │ │ ├── Math.sol │ │ │ │ │ │ ├── SafeCast.sol │ │ │ │ │ │ ├── SafeMath.sol │ │ │ │ │ │ ├── SignedMath.sol │ │ │ │ │ │ └── SignedSafeMath.sol │ │ │ │ │ └── structs │ │ │ │ │ │ ├── BitMaps.sol │ │ │ │ │ │ ├── DoubleEndedQueue.sol │ │ │ │ │ │ ├── EnumerableMap.sol │ │ │ │ │ │ └── EnumerableSet.sol │ │ │ │ └── vendor │ │ │ │ │ ├── amb │ │ │ │ │ └── IAMB.sol │ │ │ │ │ ├── arbitrum │ │ │ │ │ ├── IArbSys.sol │ │ │ │ │ ├── IBridge.sol │ │ │ │ │ ├── IInbox.sol │ │ │ │ │ ├── IMessageProvider.sol │ │ │ │ │ └── IOutbox.sol │ │ │ │ │ ├── compound │ │ │ │ │ ├── ICompoundTimelock.sol │ │ │ │ │ └── LICENSE │ │ │ │ │ ├── optimism │ │ │ │ │ ├── ICrossDomainMessenger.sol │ │ │ │ │ └── LICENSE │ │ │ │ │ └── polygon │ │ │ │ │ └── IFxMessageProcessor.sol │ │ │ ├── hardhat.config.js │ │ │ ├── hardhat │ │ │ │ └── env-contract.js │ │ │ ├── logo.svg │ │ │ ├── migrations │ │ │ │ └── .gitkeep │ │ │ ├── netlify.toml │ │ │ ├── package-lock.json │ │ │ ├── package.json │ │ │ ├── renovate.json │ │ │ ├── scripts │ │ │ │ ├── checks │ │ │ │ │ ├── compareGasReports.js │ │ │ │ │ ├── generation.sh │ │ │ │ │ └── inheritance-ordering.js │ │ │ │ ├── gen-nav.js │ │ │ │ ├── generate │ │ │ │ │ ├── format-lines.js │ │ │ │ │ ├── run.js │ │ │ │ │ └── templates │ │ │ │ │ │ ├── SafeCast.js │ │ │ │ │ │ └── SafeCastMock.js │ │ │ │ ├── git-user-config.sh │ │ │ │ ├── helpers.js │ │ │ │ ├── migrate-imports.js │ │ │ │ ├── prepack.sh │ │ │ │ ├── prepare-contracts-package.sh │ │ │ │ ├── prepare-docs-solc.js │ │ │ │ ├── prepare-docs.sh │ │ │ │ ├── prepare.sh │ │ │ │ ├── release │ │ │ │ │ ├── release.sh │ │ │ │ │ ├── synchronize-versions.js │ │ │ │ │ ├── update-changelog-release-date.js │ │ │ │ │ ├── update-comment.js │ │ │ │ │ └── version.sh │ │ │ │ ├── remove-ignored-artifacts.js │ │ │ │ └── update-docs-branch.js │ │ │ ├── slither.config.json │ │ │ └── test │ │ │ │ ├── TESTING.md │ │ │ │ ├── access │ │ │ │ ├── AccessControl.behavior.js │ │ │ │ ├── AccessControl.test.js │ │ │ │ ├── AccessControlCrossChain.test.js │ │ │ │ ├── AccessControlEnumerable.test.js │ │ │ │ └── Ownable.test.js │ │ │ │ ├── crosschain │ │ │ │ └── CrossChainEnabled.test.js │ │ │ │ ├── finance │ │ │ │ ├── PaymentSplitter.test.js │ │ │ │ ├── VestingWallet.behavior.js │ │ │ │ └── VestingWallet.test.js │ │ │ │ ├── governance │ │ │ │ ├── Governor.test.js │ │ │ │ ├── TimelockController.test.js │ │ │ │ ├── compatibility │ │ │ │ │ └── GovernorCompatibilityBravo.test.js │ │ │ │ ├── extensions │ │ │ │ │ ├── GovernorComp.test.js │ │ │ │ │ ├── GovernorERC721.test.js │ │ │ │ │ ├── GovernorPreventLateQuorum.test.js │ │ │ │ │ ├── GovernorTimelockCompound.test.js │ │ │ │ │ ├── GovernorTimelockControl.test.js │ │ │ │ │ ├── GovernorWeightQuorumFraction.test.js │ │ │ │ │ └── GovernorWithParams.test.js │ │ │ │ └── utils │ │ │ │ │ ├── Votes.behavior.js │ │ │ │ │ └── Votes.test.js │ │ │ │ ├── helpers │ │ │ │ ├── create2.js │ │ │ │ ├── crosschain.js │ │ │ │ ├── customError.js │ │ │ │ ├── eip712.js │ │ │ │ ├── enums.js │ │ │ │ ├── erc1967.js │ │ │ │ ├── governance.js │ │ │ │ ├── sign.js │ │ │ │ └── txpool.js │ │ │ │ ├── metatx │ │ │ │ ├── ERC2771Context.test.js │ │ │ │ └── MinimalForwarder.test.js │ │ │ │ ├── migrate-imports.test.js │ │ │ │ ├── proxy │ │ │ │ ├── Clones.behaviour.js │ │ │ │ ├── Clones.test.js │ │ │ │ ├── ERC1967 │ │ │ │ │ └── ERC1967Proxy.test.js │ │ │ │ ├── Proxy.behaviour.js │ │ │ │ ├── beacon │ │ │ │ │ ├── BeaconProxy.test.js │ │ │ │ │ └── UpgradeableBeacon.test.js │ │ │ │ ├── transparent │ │ │ │ │ ├── ProxyAdmin.test.js │ │ │ │ │ ├── TransparentUpgradeableProxy.behaviour.js │ │ │ │ │ └── TransparentUpgradeableProxy.test.js │ │ │ │ └── utils │ │ │ │ │ ├── Initializable.test.js │ │ │ │ │ └── UUPSUpgradeable.test.js │ │ │ │ ├── security │ │ │ │ ├── Pausable.test.js │ │ │ │ ├── PullPayment.test.js │ │ │ │ └── ReentrancyGuard.test.js │ │ │ │ ├── token │ │ │ │ ├── ERC1155 │ │ │ │ │ ├── ERC1155.behavior.js │ │ │ │ │ ├── ERC1155.test.js │ │ │ │ │ ├── extensions │ │ │ │ │ │ ├── ERC1155Burnable.test.js │ │ │ │ │ │ ├── ERC1155Pausable.test.js │ │ │ │ │ │ ├── ERC1155Supply.test.js │ │ │ │ │ │ └── ERC1155URIStorage.test.js │ │ │ │ │ ├── presets │ │ │ │ │ │ └── ERC1155PresetMinterPauser.test.js │ │ │ │ │ └── utils │ │ │ │ │ │ └── ERC1155Holder.test.js │ │ │ │ ├── ERC20 │ │ │ │ │ ├── ERC20.behavior.js │ │ │ │ │ ├── ERC20.test.js │ │ │ │ │ ├── extensions │ │ │ │ │ │ ├── ERC20Burnable.behavior.js │ │ │ │ │ │ ├── ERC20Burnable.test.js │ │ │ │ │ │ ├── ERC20Capped.behavior.js │ │ │ │ │ │ ├── ERC20Capped.test.js │ │ │ │ │ │ ├── ERC20FlashMint.test.js │ │ │ │ │ │ ├── ERC20Pausable.test.js │ │ │ │ │ │ ├── ERC20Snapshot.test.js │ │ │ │ │ │ ├── ERC20Votes.test.js │ │ │ │ │ │ ├── ERC20VotesComp.test.js │ │ │ │ │ │ ├── ERC20Wrapper.test.js │ │ │ │ │ │ ├── ERC4626.test.js │ │ │ │ │ │ └── draft-ERC20Permit.test.js │ │ │ │ │ ├── presets │ │ │ │ │ │ ├── ERC20PresetFixedSupply.test.js │ │ │ │ │ │ └── ERC20PresetMinterPauser.test.js │ │ │ │ │ └── utils │ │ │ │ │ │ ├── SafeERC20.test.js │ │ │ │ │ │ └── TokenTimelock.test.js │ │ │ │ ├── ERC721 │ │ │ │ │ ├── ERC721.behavior.js │ │ │ │ │ ├── ERC721.test.js │ │ │ │ │ ├── ERC721Enumerable.test.js │ │ │ │ │ ├── extensions │ │ │ │ │ │ ├── ERC721Burnable.test.js │ │ │ │ │ │ ├── ERC721Pausable.test.js │ │ │ │ │ │ ├── ERC721Royalty.test.js │ │ │ │ │ │ ├── ERC721URIStorage.test.js │ │ │ │ │ │ └── ERC721Votes.test.js │ │ │ │ │ ├── presets │ │ │ │ │ │ └── ERC721PresetMinterPauserAutoId.test.js │ │ │ │ │ └── utils │ │ │ │ │ │ └── ERC721Holder.test.js │ │ │ │ ├── ERC777 │ │ │ │ │ ├── ERC777.behavior.js │ │ │ │ │ ├── ERC777.test.js │ │ │ │ │ └── presets │ │ │ │ │ │ └── ERC777PresetFixedSupply.test.js │ │ │ │ └── common │ │ │ │ │ └── ERC2981.behavior.js │ │ │ │ └── utils │ │ │ │ ├── Address.test.js │ │ │ │ ├── Arrays.test.js │ │ │ │ ├── Base64.test.js │ │ │ │ ├── Checkpoints.test.js │ │ │ │ ├── Context.behavior.js │ │ │ │ ├── Context.test.js │ │ │ │ ├── Counters.test.js │ │ │ │ ├── Create2.test.js │ │ │ │ ├── Multicall.test.js │ │ │ │ ├── StorageSlot.test.js │ │ │ │ ├── Strings.test.js │ │ │ │ ├── TimersBlockNumberImpl.test.js │ │ │ │ ├── TimersTimestamp.test.js │ │ │ │ ├── cryptography │ │ │ │ ├── ECDSA.test.js │ │ │ │ ├── MerkleProof.test.js │ │ │ │ ├── SignatureChecker.test.js │ │ │ │ └── draft-EIP712.test.js │ │ │ │ ├── escrow │ │ │ │ ├── ConditionalEscrow.test.js │ │ │ │ ├── Escrow.behavior.js │ │ │ │ ├── Escrow.test.js │ │ │ │ └── RefundEscrow.test.js │ │ │ │ ├── introspection │ │ │ │ ├── ERC165.test.js │ │ │ │ ├── ERC165Checker.test.js │ │ │ │ ├── ERC165Storage.test.js │ │ │ │ ├── ERC1820Implementer.test.js │ │ │ │ └── SupportsInterface.behavior.js │ │ │ │ ├── math │ │ │ │ ├── Math.test.js │ │ │ │ ├── SafeCast.test.js │ │ │ │ ├── SafeMath.test.js │ │ │ │ ├── SignedMath.test.js │ │ │ │ └── SignedSafeMath.test.js │ │ │ │ └── structs │ │ │ │ ├── BitMap.test.js │ │ │ │ ├── DoubleEndedQueue.test.js │ │ │ │ ├── EnumerableMap.behavior.js │ │ │ │ ├── EnumerableMap.test.js │ │ │ │ ├── EnumerableSet.behavior.js │ │ │ │ └── EnumerableSet.test.js │ │ └── solmate │ │ │ ├── .gas-snapshot │ │ │ ├── .gitattributes │ │ │ ├── .github │ │ │ ├── pull_request_template.md │ │ │ └── workflows │ │ │ │ └── tests.yml │ │ │ ├── .gitignore │ │ │ ├── .gitmodules │ │ │ ├── .prettierignore │ │ │ ├── .prettierrc │ │ │ ├── .vscode │ │ │ └── settings.json │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── audits │ │ │ └── v6-Fixed-Point-Solutions.pdf │ │ │ ├── foundry.toml │ │ │ ├── lib │ │ │ └── ds-test │ │ │ │ ├── .gitignore │ │ │ │ ├── LICENSE │ │ │ │ ├── Makefile │ │ │ │ ├── default.nix │ │ │ │ ├── demo │ │ │ │ └── demo.sol │ │ │ │ └── src │ │ │ │ └── test.sol │ │ │ ├── package-lock.json │ │ │ ├── package.json │ │ │ └── src │ │ │ ├── auth │ │ │ ├── Auth.sol │ │ │ ├── Owned.sol │ │ │ └── authorities │ │ │ │ ├── MultiRolesAuthority.sol │ │ │ │ └── RolesAuthority.sol │ │ │ ├── mixins │ │ │ └── ERC4626.sol │ │ │ ├── test │ │ │ ├── Auth.t.sol │ │ │ ├── Bytes32AddressLib.t.sol │ │ │ ├── CREATE3.t.sol │ │ │ ├── DSTestPlus.t.sol │ │ │ ├── ERC1155.t.sol │ │ │ ├── ERC20.t.sol │ │ │ ├── ERC4626.t.sol │ │ │ ├── ERC721.t.sol │ │ │ ├── FixedPointMathLib.t.sol │ │ │ ├── LibString.t.sol │ │ │ ├── MerkleProofLib.t.sol │ │ │ ├── MultiRolesAuthority.t.sol │ │ │ ├── Owned.t.sol │ │ │ ├── ReentrancyGuard.t.sol │ │ │ ├── RolesAuthority.t.sol │ │ │ ├── SSTORE2.t.sol │ │ │ ├── SafeCastLib.t.sol │ │ │ ├── SafeTransferLib.t.sol │ │ │ ├── SignedWadMath.t.sol │ │ │ ├── WETH.t.sol │ │ │ └── utils │ │ │ │ ├── DSInvariantTest.sol │ │ │ │ ├── DSTestPlus.sol │ │ │ │ ├── Hevm.sol │ │ │ │ ├── mocks │ │ │ │ ├── MockAuthChild.sol │ │ │ │ ├── MockAuthority.sol │ │ │ │ ├── MockERC1155.sol │ │ │ │ ├── MockERC20.sol │ │ │ │ ├── MockERC4626.sol │ │ │ │ ├── MockERC721.sol │ │ │ │ └── MockOwned.sol │ │ │ │ └── weird-tokens │ │ │ │ ├── MissingReturnToken.sol │ │ │ │ ├── ReturnsFalseToken.sol │ │ │ │ ├── ReturnsGarbageToken.sol │ │ │ │ ├── ReturnsTooLittleToken.sol │ │ │ │ ├── ReturnsTooMuchToken.sol │ │ │ │ ├── ReturnsTwoToken.sol │ │ │ │ └── RevertingToken.sol │ │ │ ├── tokens │ │ │ ├── ERC1155.sol │ │ │ ├── ERC20.sol │ │ │ ├── ERC721.sol │ │ │ └── WETH.sol │ │ │ └── utils │ │ │ ├── Bytes32AddressLib.sol │ │ │ ├── CREATE3.sol │ │ │ ├── FixedPointMathLib.sol │ │ │ ├── LibString.sol │ │ │ ├── MerkleProofLib.sol │ │ │ ├── ReentrancyGuard.sol │ │ │ ├── SSTORE2.sol │ │ │ ├── SafeCastLib.sol │ │ │ ├── SafeTransferLib.sol │ │ │ └── SignedWadMath.sol │ ├── remappings.txt │ ├── script │ │ └── DeployPermit2.s.sol │ ├── src │ │ ├── AllowanceTransfer.sol │ │ ├── EIP712.sol │ │ ├── Permit2.sol │ │ ├── PermitErrors.sol │ │ ├── SignatureTransfer.sol │ │ ├── interfaces │ │ │ ├── IAllowanceTransfer.sol │ │ │ ├── IDAIPermit.sol │ │ │ ├── IEIP712.sol │ │ │ ├── IERC1271.sol │ │ │ ├── IPermit2.sol │ │ │ └── ISignatureTransfer.sol │ │ └── libraries │ │ │ ├── Allowance.sol │ │ │ ├── Permit2Lib.sol │ │ │ ├── PermitHash.sol │ │ │ ├── SafeCast160.sol │ │ │ └── SignatureVerification.sol │ └── test │ │ ├── AllowanceTransferInvariants.t.sol │ │ ├── AllowanceTransferTest.t.sol │ │ ├── AllowanceUnitTest.sol │ │ ├── CompactSignature.t.sol │ │ ├── EIP712.t.sol │ │ ├── NonceBitmap.t.sol │ │ ├── Permit2Lib.t.sol │ │ ├── SignatureTransfer.t.sol │ │ ├── TypehashGeneration.t.sol │ │ ├── actors │ │ ├── Permitter.sol │ │ └── Spender.sol │ │ ├── integration │ │ ├── Argent.t.sol │ │ ├── GnosisSafe.t.sol │ │ ├── MainnetToken.t.sol │ │ └── tokens │ │ │ ├── DAI.t.sol │ │ │ ├── FeeOnTransferToken.t.sol │ │ │ ├── RebasingToken.t.sol │ │ │ ├── TooManyReturnBytesToken.t.sol │ │ │ ├── UNI.t.sol │ │ │ ├── USDC.t.sol │ │ │ ├── USDT.t.sol │ │ │ ├── WBTC.t.sol │ │ │ └── ZRX.t.sol │ │ ├── mocks │ │ ├── MockERC1155.sol │ │ ├── MockERC20.sol │ │ ├── MockERC721.sol │ │ ├── MockFallbackERC20.sol │ │ ├── MockHash.sol │ │ ├── MockNonPermitERC20.sol │ │ ├── MockNonPermitNonERC20WithDS.sol │ │ ├── MockPermit2.sol │ │ ├── MockPermit2Lib.sol │ │ ├── MockPermitWithDS.sol │ │ └── MockSignatureVerification.sol │ │ └── utils │ │ ├── AddressBuilder.sol │ │ ├── AmountBuilder.sol │ │ ├── DeployPermit2.sol │ │ ├── DeployPermit2.t.sol │ │ ├── PermitSignature.sol │ │ ├── StructBuilder.sol │ │ └── TokenProvider.sol ├── solmate │ ├── .gas-snapshot │ ├── .gitattributes │ ├── .github │ │ ├── pull_request_template.md │ │ └── workflows │ │ │ └── tests.yml │ ├── .gitignore │ ├── .gitmodules │ ├── .prettierignore │ ├── .prettierrc │ ├── .vscode │ │ └── settings.json │ ├── LICENSE │ ├── README.md │ ├── audits │ │ └── v6-Fixed-Point-Solutions.pdf │ ├── foundry.toml │ ├── lib │ │ └── ds-test │ │ │ ├── .gitignore │ │ │ ├── LICENSE │ │ │ ├── Makefile │ │ │ ├── default.nix │ │ │ ├── demo │ │ │ └── demo.sol │ │ │ ├── package.json │ │ │ └── src │ │ │ └── test.sol │ ├── package-lock.json │ ├── package.json │ └── src │ │ ├── auth │ │ ├── Auth.sol │ │ ├── Owned.sol │ │ └── authorities │ │ │ ├── MultiRolesAuthority.sol │ │ │ └── RolesAuthority.sol │ │ ├── mixins │ │ └── ERC4626.sol │ │ ├── test │ │ ├── Auth.t.sol │ │ ├── Bytes32AddressLib.t.sol │ │ ├── CREATE3.t.sol │ │ ├── DSTestPlus.t.sol │ │ ├── ERC1155.t.sol │ │ ├── ERC20.t.sol │ │ ├── ERC4626.t.sol │ │ ├── ERC721.t.sol │ │ ├── FixedPointMathLib.t.sol │ │ ├── LibString.t.sol │ │ ├── MerkleProofLib.t.sol │ │ ├── MultiRolesAuthority.t.sol │ │ ├── Owned.t.sol │ │ ├── ReentrancyGuard.t.sol │ │ ├── RolesAuthority.t.sol │ │ ├── SSTORE2.t.sol │ │ ├── SafeCastLib.t.sol │ │ ├── SafeTransferLib.t.sol │ │ ├── SignedWadMath.t.sol │ │ ├── WETH.t.sol │ │ └── utils │ │ │ ├── DSInvariantTest.sol │ │ │ ├── DSTestPlus.sol │ │ │ ├── Hevm.sol │ │ │ ├── mocks │ │ │ ├── MockAuthChild.sol │ │ │ ├── MockAuthority.sol │ │ │ ├── MockERC1155.sol │ │ │ ├── MockERC20.sol │ │ │ ├── MockERC4626.sol │ │ │ ├── MockERC721.sol │ │ │ └── MockOwned.sol │ │ │ └── weird-tokens │ │ │ ├── MissingReturnToken.sol │ │ │ ├── ReturnsFalseToken.sol │ │ │ ├── ReturnsGarbageToken.sol │ │ │ ├── ReturnsTooLittleToken.sol │ │ │ ├── ReturnsTooMuchToken.sol │ │ │ ├── ReturnsTwoToken.sol │ │ │ └── RevertingToken.sol │ │ ├── tokens │ │ ├── ERC1155.sol │ │ ├── ERC20.sol │ │ ├── ERC721.sol │ │ └── WETH.sol │ │ └── utils │ │ ├── Bytes32AddressLib.sol │ │ ├── CREATE3.sol │ │ ├── FixedPointMathLib.sol │ │ ├── LibString.sol │ │ ├── MerkleProofLib.sol │ │ ├── ReentrancyGuard.sol │ │ ├── SSTORE2.sol │ │ ├── SafeCastLib.sol │ │ ├── SafeTransferLib.sol │ │ └── SignedWadMath.sol ├── v3-core │ ├── .gitattributes │ ├── .github │ │ └── workflows │ │ │ ├── fuzz-testing.yml │ │ │ ├── lint.yml │ │ │ ├── mythx.yml │ │ │ └── tests.yml │ ├── .gitignore │ ├── .prettierrc │ ├── .solhint.json │ ├── .yarnrc │ ├── LICENSE │ ├── README.md │ ├── bug-bounty.md │ ├── contracts │ │ ├── NoDelegateCall.sol │ │ ├── UniswapV3Factory.sol │ │ ├── UniswapV3Pool.sol │ │ ├── UniswapV3PoolDeployer.sol │ │ ├── interfaces │ │ │ ├── IERC20Minimal.sol │ │ │ ├── IUniswapV3Factory.sol │ │ │ ├── IUniswapV3Pool.sol │ │ │ ├── IUniswapV3PoolDeployer.sol │ │ │ ├── LICENSE │ │ │ ├── callback │ │ │ │ ├── IUniswapV3FlashCallback.sol │ │ │ │ ├── IUniswapV3MintCallback.sol │ │ │ │ └── IUniswapV3SwapCallback.sol │ │ │ └── pool │ │ │ │ ├── IUniswapV3PoolActions.sol │ │ │ │ ├── IUniswapV3PoolDerivedState.sol │ │ │ │ ├── IUniswapV3PoolErrors.sol │ │ │ │ ├── IUniswapV3PoolEvents.sol │ │ │ │ ├── IUniswapV3PoolImmutables.sol │ │ │ │ ├── IUniswapV3PoolOwnerActions.sol │ │ │ │ └── IUniswapV3PoolState.sol │ │ ├── libraries │ │ │ ├── BitMath.sol │ │ │ ├── FixedPoint128.sol │ │ │ ├── FixedPoint96.sol │ │ │ ├── FullMath.sol │ │ │ ├── LICENSE │ │ │ ├── LICENSE_MIT │ │ │ ├── Oracle.sol │ │ │ ├── Position.sol │ │ │ ├── SafeCast.sol │ │ │ ├── SqrtPriceMath.sol │ │ │ ├── SwapMath.sol │ │ │ ├── Tick.sol │ │ │ ├── TickBitmap.sol │ │ │ ├── TickMath.sol │ │ │ ├── TransferHelper.sol │ │ │ └── UnsafeMath.sol │ │ └── test │ │ │ ├── BitMathEchidnaTest.sol │ │ │ ├── BitMathTest.sol │ │ │ ├── FullMathEchidnaTest.sol │ │ │ ├── FullMathTest.sol │ │ │ ├── MockTimeUniswapV3Pool.sol │ │ │ ├── MockTimeUniswapV3PoolDeployer.sol │ │ │ ├── NoDelegateCallTest.sol │ │ │ ├── OracleEchidnaTest.sol │ │ │ ├── OracleTest.sol │ │ │ ├── SqrtPriceMathEchidnaTest.sol │ │ │ ├── SqrtPriceMathTest.sol │ │ │ ├── SwapMathEchidnaTest.sol │ │ │ ├── SwapMathTest.sol │ │ │ ├── TestERC20.sol │ │ │ ├── TestUniswapV3Callee.sol │ │ │ ├── TestUniswapV3ReentrantCallee.sol │ │ │ ├── TestUniswapV3Router.sol │ │ │ ├── TestUniswapV3SwapPay.sol │ │ │ ├── TickBitmapEchidnaTest.sol │ │ │ ├── TickBitmapTest.sol │ │ │ ├── TickEchidnaTest.sol │ │ │ ├── TickMathEchidnaTest.sol │ │ │ ├── TickMathTest.sol │ │ │ ├── TickOverflowSafetyEchidnaTest.sol │ │ │ ├── TickTest.sol │ │ │ ├── UniswapV3PoolSwapTest.sol │ │ │ └── UnsafeMathEchidnaTest.sol │ ├── echidna.config.yml │ ├── hardhat.config.ts │ ├── package.json │ ├── test │ │ ├── BitMath.spec.ts │ │ ├── FullMath.spec.ts │ │ ├── NoDelegateCall.spec.ts │ │ ├── Oracle.spec.ts │ │ ├── SqrtPriceMath.spec.ts │ │ ├── SwapMath.spec.ts │ │ ├── Tick.spec.ts │ │ ├── TickBitmap.spec.ts │ │ ├── TickMath.spec.ts │ │ ├── UniswapV3Factory.spec.ts │ │ ├── UniswapV3Pool.arbitrage.spec.ts │ │ ├── UniswapV3Pool.gas.spec.ts │ │ ├── UniswapV3Pool.spec.ts │ │ ├── UniswapV3Pool.swaps.spec.ts │ │ ├── UniswapV3Router.spec.ts │ │ ├── __snapshots__ │ │ │ ├── BitMath.spec.ts.snap │ │ │ ├── NoDelegateCall.spec.ts.snap │ │ │ ├── Oracle.spec.ts.snap │ │ │ ├── SqrtPriceMath.spec.ts.snap │ │ │ ├── SwapMath.spec.ts.snap │ │ │ ├── TickBitmap.spec.ts.snap │ │ │ ├── TickMath.spec.ts.snap │ │ │ ├── UniswapV3Factory.spec.ts.snap │ │ │ ├── UniswapV3Pool.arbitrage.spec.ts.snap │ │ │ ├── UniswapV3Pool.gas.spec.ts.snap │ │ │ └── UniswapV3Pool.swaps.spec.ts.snap │ │ └── shared │ │ │ ├── checkObservationEquals.ts │ │ │ ├── expect.ts │ │ │ ├── fixtures.ts │ │ │ ├── format.ts │ │ │ ├── snapshotGasCost.ts │ │ │ └── utilities.ts │ ├── tsconfig.json │ └── yarn.lock └── v3-periphery │ ├── .gitattributes │ ├── .github │ └── workflows │ │ ├── lint.yml │ │ └── tests.yml │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── .solhint.json │ ├── .yarnrc │ ├── LICENSE │ ├── README.md │ ├── bug-bounty.md │ ├── contracts │ ├── NonfungiblePositionManager.sol │ ├── NonfungibleTokenPositionDescriptor.sol │ ├── SwapRouter.sol │ ├── V3Migrator.sol │ ├── base │ │ ├── BlockTimestamp.sol │ │ ├── ERC721Permit.sol │ │ ├── LiquidityManagement.sol │ │ ├── Multicall.sol │ │ ├── PeripheryImmutableState.sol │ │ ├── PeripheryPayments.sol │ │ ├── PeripheryPaymentsWithFee.sol │ │ ├── PeripheryValidation.sol │ │ ├── PoolInitializer.sol │ │ └── SelfPermit.sol │ ├── examples │ │ └── PairFlash.sol │ ├── interfaces │ │ ├── IERC20Metadata.sol │ │ ├── IERC721Permit.sol │ │ ├── IMulticall.sol │ │ ├── INonfungiblePositionManager.sol │ │ ├── INonfungibleTokenPositionDescriptor.sol │ │ ├── IPeripheryImmutableState.sol │ │ ├── IPeripheryPayments.sol │ │ ├── IPeripheryPaymentsWithFee.sol │ │ ├── IPoolInitializer.sol │ │ ├── IQuoter.sol │ │ ├── IQuoterV2.sol │ │ ├── ISelfPermit.sol │ │ ├── ISwapRouter.sol │ │ ├── ITickLens.sol │ │ ├── IV3Migrator.sol │ │ └── external │ │ │ ├── IERC1271.sol │ │ │ ├── IERC20PermitAllowed.sol │ │ │ └── IWETH9.sol │ ├── lens │ │ ├── Quoter.sol │ │ ├── QuoterV2.sol │ │ ├── README.md │ │ ├── TickLens.sol │ │ └── UniswapInterfaceMulticall.sol │ ├── libraries │ │ ├── AddressStringUtil.sol │ │ ├── BytesLib.sol │ │ ├── CallbackValidation.sol │ │ ├── ChainId.sol │ │ ├── HexStrings.sol │ │ ├── LiquidityAmounts.sol │ │ ├── NFTDescriptor.sol │ │ ├── NFTSVG.sol │ │ ├── OracleLibrary.sol │ │ ├── Path.sol │ │ ├── PoolAddress.sol │ │ ├── PoolTicksCounter.sol │ │ ├── PositionKey.sol │ │ ├── PositionValue.sol │ │ ├── SafeERC20Namer.sol │ │ ├── SqrtPriceMathPartial.sol │ │ ├── TokenRatioSortOrder.sol │ │ └── TransferHelper.sol │ └── test │ │ ├── Base64Test.sol │ │ ├── LiquidityAmountsTest.sol │ │ ├── MockObservable.sol │ │ ├── MockObservations.sol │ │ ├── MockTimeNonfungiblePositionManager.sol │ │ ├── MockTimeSwapRouter.sol │ │ ├── NFTDescriptorTest.sol │ │ ├── NonfungiblePositionManagerPositionsGasTest.sol │ │ ├── OracleTest.sol │ │ ├── PathTest.sol │ │ ├── PeripheryImmutableStateTest.sol │ │ ├── PoolAddressTest.sol │ │ ├── PoolTicksCounterTest.sol │ │ ├── PositionValueTest.sol │ │ ├── SelfPermitTest.sol │ │ ├── TestCallbackValidation.sol │ │ ├── TestERC20.sol │ │ ├── TestERC20Metadata.sol │ │ ├── TestERC20PermitAllowed.sol │ │ ├── TestMulticall.sol │ │ ├── TestPositionNFTOwner.sol │ │ ├── TestUniswapV3Callee.sol │ │ └── TickLensTest.sol │ ├── deploys.md │ ├── hardhat.config.ts │ ├── package.json │ ├── test │ ├── Base64.spec.ts │ ├── CallbackValidation.spec.ts │ ├── LiquidityAmounts.spec.ts │ ├── Multicall.spec.ts │ ├── NFTDescriptor.spec.ts │ ├── NonfungiblePositionManager.spec.ts │ ├── NonfungibleTokenPositionDescriptor.spec.ts │ ├── OracleLibrary.spec.ts │ ├── PairFlash.spec.ts │ ├── Path.spec.ts │ ├── PeripheryImmutableState.spec.ts │ ├── PoolAddress.spec.ts │ ├── PoolTicksCounter.spec.ts │ ├── PositionValue.spec.ts │ ├── Quoter.spec.ts │ ├── QuoterV2.spec.ts │ ├── SelfPermit.spec.ts │ ├── SwapRouter.gas.spec.ts │ ├── SwapRouter.spec.ts │ ├── TickLens.spec.ts │ ├── V3Migrator.spec.ts │ ├── __snapshots__ │ │ ├── Base64.spec.ts.snap │ │ ├── LiquidityAmounts.spec.ts.snap │ │ ├── Multicall.spec.ts.snap │ │ ├── NFTDescriptor.spec.ts.snap │ │ ├── NFTDescriptor.svg │ │ ├── NonfungiblePositionManager.spec.ts.snap │ │ ├── OracleLibrary.spec.ts.snap │ │ ├── PairFlash.spec.ts.snap │ │ ├── Path.spec.ts.snap │ │ ├── PeripheryImmutableState.spec.ts.snap │ │ ├── PoolAddress.spec.ts.snap │ │ ├── PositionValue.spec.ts.snap │ │ ├── QuoterV2.spec.ts.snap │ │ ├── SwapRouter.gas.spec.ts.snap │ │ ├── SwapRouter.spec.ts.snap │ │ ├── TickLens.spec.ts.snap │ │ └── V3Migrator.spec.ts.snap │ ├── contracts │ │ └── WETH9.json │ └── shared │ │ ├── base64.ts │ │ ├── completeFixture.ts │ │ ├── computePoolAddress.ts │ │ ├── constants.ts │ │ ├── encodePriceSqrt.ts │ │ ├── expandTo18Decimals.ts │ │ ├── expect.ts │ │ ├── externalFixtures.ts │ │ ├── extractJSONFromURI.ts │ │ ├── formatSqrtRatioX96.spec.ts │ │ ├── formatSqrtRatioX96.ts │ │ ├── getPermitNFTSignature.ts │ │ ├── path.ts │ │ ├── permit.ts │ │ ├── poolAtAddress.ts │ │ ├── quoter.ts │ │ ├── snapshotGasCost.ts │ │ ├── ticks.ts │ │ └── tokenSort.ts │ ├── testnet-deploys.md │ ├── tsconfig.json │ └── yarn.lock ├── out_of_scope.txt ├── package-lock.json ├── package.json ├── remappings.txt ├── scope.txt ├── script ├── Counter.s.sol └── abi.js ├── slither.config.json ├── src ├── PredyPool.sol ├── PriceFeed.sol ├── base │ ├── BaseHookCallback.sol │ ├── BaseHookCallbackUpgradable.sol │ ├── BaseMarket.sol │ ├── BaseMarketUpgradable.sol │ └── SettlementCallbackLib.sol ├── interfaces │ ├── IFillerMarket.sol │ ├── IHooks.sol │ ├── IPredyPool.sol │ ├── ISettlement.sol │ ├── ISpotMarket.sol │ └── ISupplyToken.sol ├── lens │ ├── GammaTradeMarketQuoter.sol │ ├── PerpMarketQuoter.sol │ ├── PredyPoolQuoter.sol │ └── SpotMarketQuoter.sol ├── libraries │ ├── ApplyInterestLib.sol │ ├── Constants.sol │ ├── DataType.sol │ ├── InterestRateModel.sol │ ├── PairLib.sol │ ├── Perp.sol │ ├── PerpFee.sol │ ├── PositionCalculator.sol │ ├── PremiumCurveModel.sol │ ├── Reallocation.sol │ ├── ScaledAsset.sol │ ├── SlippageLib.sol │ ├── Trade.sol │ ├── UniHelper.sol │ ├── VaultLib.sol │ ├── logic │ │ ├── AddPairLogic.sol │ │ ├── LiquidationLogic.sol │ │ ├── ReaderLogic.sol │ │ ├── ReallocationLogic.sol │ │ ├── SupplyLogic.sol │ │ └── TradeLogic.sol │ ├── math │ │ ├── Bps.sol │ │ ├── LPMath.sol │ │ └── Math.sol │ └── orders │ │ ├── DecayLib.sol │ │ ├── OrderInfoLib.sol │ │ ├── Permit2Lib.sol │ │ └── ResolvedOrder.sol ├── markets │ ├── L2Decoder.sol │ ├── gamma │ │ ├── ArrayLib.sol │ │ ├── GammaOrder.sol │ │ ├── GammaTradeMarket.sol │ │ ├── GammaTradeMarketL2.sol │ │ ├── GammaTradeMarketLib.sol │ │ ├── GammaTradeMarketWrapper.sol │ │ └── L2GammaDecoder.sol │ ├── perp │ │ ├── PerpMarket.sol │ │ ├── PerpMarketLib.sol │ │ ├── PerpMarketV1.sol │ │ ├── PerpOrder.sol │ │ └── PerpOrderV3.sol │ └── spot │ │ ├── SpotMarket.sol │ │ ├── SpotMarketL2.sol │ │ └── SpotOrder.sol ├── settlements │ └── UniswapSettlement.sol ├── tokenization │ └── SupplyToken.sol ├── types │ ├── GlobalData.sol │ └── LockData.sol └── vendors │ ├── AggregatorV3Interface.sol │ ├── IPyth.sol │ └── IUniswapV3PoolOracle.sol ├── test-artifacts └── Permit2.sol │ └── Permit2.json ├── test ├── attack │ └── AttackCallback.t.sol ├── feed │ └── PriceFeed.t.sol ├── lens │ ├── GammaTradeMarketQuoter.t.sol │ ├── PerpMarketQuoter.t.sol │ ├── PredyPoolQuoter.t.sol │ ├── Setup.t.sol │ └── SpotMarketQuoter.t.sol ├── libraries │ ├── InterestRateModel.t.sol │ ├── PairLib.t.sol │ ├── PerpFee.t.sol │ ├── PremiumCurveModel.t.sol │ ├── Reallocation.t.sol │ ├── SlippageLib.t.sol │ ├── math │ │ ├── LPMath.t.sol │ │ └── Math.t.sol │ ├── orders │ │ └── DecayLib.t.sol │ ├── perp │ │ ├── CalculateEntry.t.sol │ │ ├── CalculateSqrtPerpOffset.t.sol │ │ ├── ComputeRequiredAmounts.t.sol │ │ ├── Perp.t.sol │ │ ├── Reallocate.t.sol │ │ ├── SettleUserBalance.t.sol │ │ ├── Setup.t.sol │ │ └── UpdatePosition.t.sol │ ├── position │ │ ├── CalculateMinMargin.t.sol │ │ ├── PositionCalculator.t.sol │ │ └── Setup.t.sol │ └── scaled │ │ ├── Compound.t.sol │ │ ├── Setup.t.sol │ │ └── UpdatePosition.t.sol ├── market │ ├── L2Decoder.t.sol │ ├── gamma │ │ ├── ArrayLib.t.sol │ │ ├── AutoClose.t.sol │ │ ├── AutoHedge.t.sol │ │ ├── Callback.t.sol │ │ ├── ExecLiquidationCall.t.sol │ │ ├── ExecuteOrder.t.sol │ │ ├── GammaTradeMarketLib.t.sol │ │ ├── GetUserPositions.t.sol │ │ ├── L2GammaDecoder.t.sol │ │ ├── Modify.t.sol │ │ ├── PredyLiquidationCallback.t.sol │ │ ├── Setup.t.sol │ │ └── UpdateWhitelistFiller.t.sol │ ├── perp │ │ ├── Callback.t.sol │ │ ├── ExecLiquidationCall.t.sol │ │ ├── ExecuteOrderV3.t.sol │ │ ├── GetUserPosition.t.sol │ │ ├── PerpMarketLib.t.sol │ │ ├── PredyLiquidationCallback.t.sol │ │ └── Setup.t.sol │ └── spot │ │ ├── ExecuteL2Order.t.sol │ │ ├── ExecuteOrder.t.sol │ │ └── Setup.t.sol ├── mocks │ ├── AttackCallbackContract.sol │ ├── DebugSettlement.sol │ ├── DebugSettlement2.sol │ ├── MockERC20.sol │ ├── MockPriceFeed.sol │ ├── TestSettlement.sol │ └── TestTradeMarket.sol ├── pool │ ├── ExecLiquidationCall.t.sol │ ├── ProtocolInsolvency.t.sol │ ├── Reallocate.t.sol │ ├── RegisterPair.t.sol │ ├── SetOperator.t.sol │ ├── Setup.t.sol │ ├── Supply.t.sol │ ├── Trade.t.sol │ ├── UpdateAssetRiskParams.t.sol │ └── Withdraw.t.sol └── utils │ ├── OrderValidatorUtils.sol │ ├── PairStatusUtils.sol │ └── SigUtils.sol └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiler files 2 | cache/ 3 | out/ 4 | 5 | # Ignores development broadcast logs 6 | !/broadcast 7 | /broadcast/*/31337/ 8 | /broadcast/**/dry-run/ 9 | 10 | # Docs 11 | docs/ 12 | 13 | # Dotenv file 14 | .env 15 | 16 | cache_hardhat/ 17 | 18 | node_modules 19 | artifacts 20 | typechain 21 | typechain-types 22 | -------------------------------------------------------------------------------- /.solhint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "solhint:recommended", 3 | "plugins": [ 4 | "prettier" 5 | ], 6 | "rules": { 7 | "prettier/prettier": "error" 8 | } 9 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "solidity.packageDefaultDependenciesContractsDirectory": "src", 3 | "solidity.packageDefaultDependenciesDirectory": "lib", 4 | "solidity.compileUsingRemoteVersion": "v0.8.19", 5 | "solidity.formatter": "forge", 6 | "search.exclude": { 7 | "lib": true 8 | }, 9 | "files.associations": { 10 | ".gas-snapshot": "julia" 11 | }, 12 | "editor.formatOnSave": true 13 | } -------------------------------------------------------------------------------- /addressList.ts: -------------------------------------------------------------------------------- 1 | export const Permit2 = '0x000000000022d473030f116ddee9f6b43ac78ba3' 2 | export const Filler = '0x51B89C499F3038756Eff64a0EF52d753147EAd75' 3 | 4 | // Chainlink USDC 5 | // 0x50834f3163758fcc1df9973b6e91f0f0f0434ad3 6 | // ETH 7 | // 0x639fe6ab55c921f74e7fac1ee960c0b6293ba612 8 | // decimalDiff: 12 -------------------------------------------------------------------------------- /assets/PerpMarket.mermaid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/assets/PerpMarket.mermaid.png -------------------------------------------------------------------------------- /assets/PredyPool.mermaid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/assets/PredyPool.mermaid.png -------------------------------------------------------------------------------- /assets/SpotMarket.mermaid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/assets/SpotMarket.mermaid.png -------------------------------------------------------------------------------- /deployments/arbitrum/.chainId: -------------------------------------------------------------------------------- 1 | 42161 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/0-EB806.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/0-EB806.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/073f0c045759497a01cc41aadc93619e-D875F.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/073f0c045759497a01cc41aadc93619e-D875F.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/0b8eb95ae05f7d8b62136d857c324c66-088A8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/0b8eb95ae05f7d8b62136d857c324c66-088A8.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/0cf7719f20f0aaed168c3f31a3f0bceb-8014C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/0cf7719f20f0aaed168c3f31a3f0bceb-8014C.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1-B2132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1-B2132.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1083068770823721071-EE4F6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1083068770823721071-EE4F6.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1162a888c78000773591a5db6de8aa9f-DCF7E.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1162a888c78000773591a5db6de8aa9f-DCF7E.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1233171131012223026-67C35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1233171131012223026-67C35.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1237627076333539328-5DC87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1237627076333539328-5DC87.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1628fc11e7961d85181295493426b775-7E20F.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1628fc11e7961d85181295493426b775-7E20F.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1aea383fe7da3deeefb7a87fc44e7bca-D0D1A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1aea383fe7da3deeefb7a87fc44e7bca-D0D1A.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1eb7f1d8b39c92052acbc65fa18aa056-95A27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1eb7f1d8b39c92052acbc65fa18aa056-95A27.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1f2874ce34e1d8171e0dc5d95c212a40-1FE2A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1f2874ce34e1d8171e0dc5d95c212a40-1FE2A.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/1f50d-195C0.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2-ADBB4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2-ADBB4.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2024-05-28_195000-C6BB4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2024-05-28_195000-C6BB4.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/258a1ffc46d9e9c3872ad643ab9b4bd5-EE2DC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/258a1ffc46d9e9c3872ad643ab9b4bd5-EE2DC.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2705-0589F.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2764-A3D25.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/288aa0de2d7ec6f3bcca11bc9f778f2f-E6A23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/288aa0de2d7ec6f3bcca11bc9f778f2f-E6A23.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2a9faff195fe333526cfe6ae6fce1420-49B98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2a9faff195fe333526cfe6ae6fce1420-49B98.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2afb13731f83ccb20ea25b5bdb1a6c95-35031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2afb13731f83ccb20ea25b5bdb1a6c95-35031.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2c1e18acbcb9cdaeabfd7fc6f5090edf-CA387.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/2c1e18acbcb9cdaeabfd7fc6f5090edf-CA387.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/3-FB033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/3-FB033.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/34d2d7de2893f18e31aa4da767ee758f-58D64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/34d2d7de2893f18e31aa4da767ee758f-58D64.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/35f6ac12be0ae6f4138cbeb1a28a20d3-DBCEC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/35f6ac12be0ae6f4138cbeb1a28a20d3-DBCEC.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4-4551A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4-4551A.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4300144ca69d0a514c0680d966674c41-CD85B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4300144ca69d0a514c0680d966674c41-CD85B.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4634554b26c5ac710fcace1ce468e6b4-DCDA1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4634554b26c5ac710fcace1ce468e6b4-DCDA1.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4de8e7cb6dfbbe8795697f1df8d66439-044AF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4de8e7cb6dfbbe8795697f1df8d66439-044AF.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4eaf99d01e4b5042454b4a6a8809687a-F166B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/4eaf99d01e4b5042454b4a6a8809687a-F166B.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/50dd7f528e6efa2618511364dd0ddce0-1D481.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/50dd7f528e6efa2618511364dd0ddce0-1D481.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/568d22b97293cdd2d9b7006198d6adbc-F0132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/568d22b97293cdd2d9b7006198d6adbc-F0132.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/5871d40d01a047d984fbaf957cc13f86-4D592.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/5871d40d01a047d984fbaf957cc13f86-4D592.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/5b71d15a9bcde45fd5520e3fb580eb53-E1A50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/5b71d15a9bcde45fd5520e3fb580eb53-E1A50.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/5e3fb61df91ed29c573265a690af4600-E824E.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/5e3fb61df91ed29c573265a690af4600-E824E.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/5fa1462b3cbd6d23b63942466a6d2f06-2F604.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/5fa1462b3cbd6d23b63942466a6d2f06-2F604.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/67594ee4b4d1fc03bca468327a0d145b-BD76A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/67594ee4b4d1fc03bca468327a0d145b-BD76A.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/6cc3a1021947158341eb813f8c41bf1f-C7CFE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/6cc3a1021947158341eb813f8c41bf1f-C7CFE.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/750d791c21ffd3863332eea023124fa5-05646.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/750d791c21ffd3863332eea023124fa5-05646.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/7d09c08ff18b852203d15b51bf26bca2-D3DD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/7d09c08ff18b852203d15b51bf26bca2-D3DD1.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/8043f1de89cc1387981f4990ad574c08-78DE7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/8043f1de89cc1387981f4990ad574c08-78DE7.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/816cfc933746a8ffd61a8a93193028c5-41002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/816cfc933746a8ffd61a8a93193028c5-41002.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/851893827027075142-F23DF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/851893827027075142-F23DF.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/851893827089727568-5FD38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/851893827089727568-5FD38.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/851893828280909886-FBF42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/851893828280909886-FBF42.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/86f4180c3829539aab0c6210474061a7-4349C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/86f4180c3829539aab0c6210474061a7-4349C.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/8f53411d3af94b5a6d0e4f6a2f48a6bb-68553.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/8f53411d3af94b5a6d0e4f6a2f48a6bb-68553.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/930871c4671919ec697c9144a1911535-814BF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/930871c4671919ec697c9144a1911535-814BF.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/944081698067451954-2550D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/944081698067451954-2550D.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/95596e5ab52617d3b75a967597c7c5ce-94B44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/95596e5ab52617d3b75a967597c7c5ce-94B44.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/970d2e2f00cd7ef2134a1a3f21326349-404EA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/970d2e2f00cd7ef2134a1a3f21326349-404EA.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/9743d0d8b5564acfdfeef2c6c63d5410-11A3C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/9743d0d8b5564acfdfeef2c6c63d5410-11A3C.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/977133670429261884-CA8EA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/977133670429261884-CA8EA.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/OIBc5iSVj0oei6YWkCuN-44C89: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/OIBc5iSVj0oei6YWkCuN-44C89 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/Qlcl0eqb1Z5UFlKw9Obr-FEF69: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/Qlcl0eqb1Z5UFlKw9Obr-FEF69 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/Untitled-D27AD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/Untitled-D27AD.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/a1f41505314077e259d5c3b02ec3570e-5BB24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/a1f41505314077e259d5c3b02ec3570e-5BB24.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/a752f8fd-ae79-4d48-83da-8a6a213214e9-D71D1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/a752f8fd-ae79-4d48-83da-8a6a213214e9-D71D1 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/adddc7313b30a4e8b5329894bf2034ab-5B4E5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/adddc7313b30a4e8b5329894bf2034ab-5B4E5.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ae55bccd105a97e5e171c290822eab04-394BB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ae55bccd105a97e5e171c290822eab04-394BB.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/afca0e84e90e7172fdf16a089da1d694-947DB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/afca0e84e90e7172fdf16a089da1d694-947DB.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/bafed0770e472da8f19eb96dac5ac510-62868.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/bafed0770e472da8f19eb96dac5ac510-62868.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/bd62ce81b7d8b78cae1cff4b51cf6b59-37CFE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/bd62ce81b7d8b78cae1cff4b51cf6b59-37CFE.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/bde09905c12e2e8893a97a4b24df78b1-D1D61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/bde09905c12e2e8893a97a4b24df78b1-D1D61.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/c4-og-v2-8584A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/c4-og-v2-8584A.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/c4-og-v2-D055C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/c4-og-v2-D055C.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ca9e82ca04289e14a609324c61011434-E49F7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ca9e82ca04289e14a609324c61011434-E49F7.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ce33938a6121cd196500c7b573fba65a-15E3D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ce33938a6121cd196500c7b573fba65a-15E3D.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/d12592c492cf72b2b5f317f8341c2d38-3CEFE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/d12592c492cf72b2b5f317f8341c2d38-3CEFE.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/d2d94d7e11412f6f18f842f82452604d-D4DA0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/d2d94d7e11412f6f18f842f82452604d-D4DA0.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/d482d56e4533980c4a4108a97afecfcb-31323.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/d482d56e4533980c4a4108a97afecfcb-31323.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/db37a44fec3e7215df0fd640d3fe1e71-83EA5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/db37a44fec3e7215df0fd640d3fe1e71-83EA5.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/dd0b02132544c612d48d10270e412d9b-9486F.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/dd0b02132544c612d48d10270e412d9b-9486F.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/dfacc77d68962a991f5a4c3b7859b4c2-BAB3E.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/dfacc77d68962a991f5a4c3b7859b4c2-BAB3E.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/e00d2cfe4e679acc9e11182ab19c5db3-F3931.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/e00d2cfe4e679acc9e11182ab19c5db3-F3931.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/e6f4ca0e498c6a1841fd2181890d7668-D7F35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/e6f4ca0e498c6a1841fd2181890d7668-D7F35.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ef353ac557c47e95ecd46e0afac40642-CEF40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ef353ac557c47e95ecd46e0afac40642-CEF40.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/f37097a7d18a772a380665929aaba15b-94EB7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/f37097a7d18a772a380665929aaba15b-94EB7.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/feb79bb6c3285f43d25af82703f76106-392DC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/feb79bb6c3285f43d25af82703f76106-392DC.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-400-E988B.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-400-E988B.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-500-0777F.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-500-0777F.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-600-CB411.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-600-CB411.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-700-891AC.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-700-891AC.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-800-D36B0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-italic-800-D36B0.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-400-1456D.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-400-1456D.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-500-89CE5.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-500-89CE5.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-600-C1EA8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-600-C1EA8.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-700-1949A.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-700-1949A.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-800-58487.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/ggsans-normal-800-58487.woff2 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-1DCAA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-1DCAA.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-3F30C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-3F30C.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-52956.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-52956.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-6F169.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-6F169.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-85669.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-85669.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-B5D52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].html_Files/image-B5D52.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/2024-05-28_195000-C6BB4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/2024-05-28_195000-C6BB4.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/OIBc5iSVj0oei6YWkCuN-44C89: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/OIBc5iSVj0oei6YWkCuN-44C89 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/Qlcl0eqb1Z5UFlKw9Obr-FEF69: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/Qlcl0eqb1Z5UFlKw9Obr-FEF69 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/Untitled-D27AD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/Untitled-D27AD.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/a752f8fd-ae79-4d48-83da-8a6a213214e9-D71D1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/a752f8fd-ae79-4d48-83da-8a6a213214e9-D71D1 -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/c4-og-v2-8584A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/c4-og-v2-8584A.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/c4-og-v2-D055C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/c4-og-v2-D055C.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-1DCAA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-1DCAA.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-3F30C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-3F30C.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-52956.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-52956.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-6F169.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-6F169.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-85669.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-85669.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-B5D52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/image-B5D52.png -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/maxresdefault-01AD8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/maxresdefault-01AD8.jpg -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/maxresdefault-BF663.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/maxresdefault-BF663.jpg -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/maxresdefault-D4441.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/maxresdefault-D4441.jpg -------------------------------------------------------------------------------- /discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/maxresdefault-ED879.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/discord-export/Code4rena - ARCHIVE-Q2-2024 - predy-may24 [1242872233345679501].txt_Files/maxresdefault-ED879.jpg -------------------------------------------------------------------------------- /foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | src = "src" 3 | out = "out" 4 | libs = ["lib"] 5 | 6 | optimizer = true 7 | via_ir = false 8 | optimizer_runs = 200 9 | solc_version = "0.8.19" 10 | 11 | gas_reports = ["*"] 12 | fs_permissions = [{ access = "read", path = "./"}] 13 | 14 | [fuzz] 15 | runs = 1024 16 | -------------------------------------------------------------------------------- /lib/forge-std/.gitignore: -------------------------------------------------------------------------------- 1 | cache/ 2 | out/ 3 | .vscode 4 | .idea 5 | -------------------------------------------------------------------------------- /lib/forge-std/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/ds-test"] 2 | path = lib/ds-test 3 | url = https://github.com/dapphub/ds-test 4 | -------------------------------------------------------------------------------- /lib/forge-std/lib/ds-test/.gitignore: -------------------------------------------------------------------------------- 1 | /.dapple 2 | /build 3 | /out 4 | /cache/ 5 | -------------------------------------------------------------------------------- /lib/forge-std/lib/ds-test/Makefile: -------------------------------------------------------------------------------- 1 | all:; dapp build 2 | 3 | test: 4 | -dapp --use solc:0.4.23 build 5 | -dapp --use solc:0.4.26 build 6 | -dapp --use solc:0.5.17 build 7 | -dapp --use solc:0.6.12 build 8 | -dapp --use solc:0.7.5 build 9 | 10 | demo: 11 | DAPP_SRC=demo dapp --use solc:0.7.5 build 12 | -hevm dapp-test --verbose 3 13 | 14 | .PHONY: test demo 15 | -------------------------------------------------------------------------------- /lib/forge-std/lib/ds-test/default.nix: -------------------------------------------------------------------------------- 1 | { solidityPackage, dappsys }: solidityPackage { 2 | name = "ds-test"; 3 | src = ./src; 4 | } 5 | -------------------------------------------------------------------------------- /lib/forge-std/lib/ds-test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ds-test", 3 | "version": "1.0.0", 4 | "description": "Assertions, equality checks and other test helpers ", 5 | "bugs": "https://github.com/dapphub/ds-test/issues", 6 | "license": "GPL-3.0", 7 | "author": "Contributors to ds-test", 8 | "files": [ 9 | "src/*" 10 | ], 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/dapphub/ds-test.git" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/forge-std/test/compilation/CompilationScript.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Script.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationScript is Script {} 11 | -------------------------------------------------------------------------------- /lib/forge-std/test/compilation/CompilationScriptBase.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Script.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationScriptBase is ScriptBase {} 11 | -------------------------------------------------------------------------------- /lib/forge-std/test/compilation/CompilationTest.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Test.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationTest is Test {} 11 | -------------------------------------------------------------------------------- /lib/forge-std/test/compilation/CompilationTestBase.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Test.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationTestBase is TestBase {} 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", 3 | "changelog": [ 4 | "@changesets/changelog-github", 5 | { 6 | "repo": "OpenZeppelin/openzeppelin-contracts" 7 | } 8 | ], 9 | "commit": false, 10 | "access": "public", 11 | "baseBranch": "master" 12 | } 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.codecov.yml: -------------------------------------------------------------------------------- 1 | comment: off 2 | github_checks: 3 | annotations: false 4 | coverage: 5 | status: 6 | patch: 7 | default: 8 | target: 95% 9 | only_pulls: true 10 | project: 11 | default: 12 | threshold: 1% 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | end_of_line = lf 9 | indent_style = space 10 | insert_final_newline = true 11 | trim_trailing_whitespace = false 12 | max_line_length = 120 13 | 14 | [*.sol] 15 | indent_size = 4 16 | 17 | [*.js] 18 | indent_size = 2 19 | 20 | [*.{adoc,md}] 21 | max_line_length = 0 22 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends" : [ 4 | "eslint:recommended", 5 | "prettier", 6 | ], 7 | "env": { 8 | "es2022": true, 9 | "browser": true, 10 | "node": true, 11 | "mocha": true, 12 | }, 13 | "globals" : { 14 | "artifacts": "readonly", 15 | "contract": "readonly", 16 | "web3": "readonly", 17 | "extendEnvironment": "readonly", 18 | "expect": "readonly", 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Questions & Support Requests 3 | url: https://forum.openzeppelin.com/c/support/contracts/18 4 | about: Ask in the OpenZeppelin Forum 5 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.github/actions/setup/action.yml: -------------------------------------------------------------------------------- 1 | name: Setup 2 | 3 | runs: 4 | using: composite 5 | steps: 6 | - uses: actions/setup-node@v3 7 | with: 8 | node-version: 14.x 9 | - uses: actions/cache@v3 10 | id: cache 11 | with: 12 | path: '**/node_modules' 13 | key: npm-v3-${{ hashFiles('**/package-lock.json') }} 14 | - name: Install dependencies 15 | run: npm ci 16 | shell: bash 17 | if: steps.cache.outputs.cache-hit != 'true' 18 | env: 19 | SKIP_COMPILE: true 20 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.github/workflows/docs.yml: -------------------------------------------------------------------------------- 1 | name: Build Docs 2 | 3 | on: 4 | push: 5 | branches: [release-v*] 6 | 7 | permissions: 8 | contents: write 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | - name: Set up environment 16 | uses: ./.github/actions/setup 17 | - run: bash scripts/git-user-config.sh 18 | - run: node scripts/update-docs-branch.js 19 | - run: git push --all origin 20 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/forge-std"] 2 | branch = v1 3 | path = lib/forge-std 4 | url = https://github.com/foundry-rs/forge-std 5 | [submodule "lib/erc4626-tests"] 6 | path = lib/erc4626-tests 7 | url = https://github.com/a16z/erc4626-tests.git 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.mocharc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | require: 'hardhat/register', 3 | timeout: 4000, 4 | }; 5 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "arrowParens": "avoid", 6 | "overrides": [ 7 | { 8 | "files": "*.sol", 9 | "options": { 10 | "singleQuote": false 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.solcover.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | norpc: true, 3 | testCommand: 'npm test', 4 | compileCommand: 'npm run compile', 5 | skipFiles: ['mocks'], 6 | providerOptions: { 7 | default_balance_ether: '10000000000000000000000000', 8 | }, 9 | mocha: { 10 | fgrep: '[skip-on-coverage]', 11 | invert: true, 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/.solhint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-unused-vars": "error", 4 | "const-name-snakecase": "error", 5 | "contract-name-camelcase": "error", 6 | "event-name-camelcase": "error", 7 | "func-name-mixedcase": "error", 8 | "func-param-name-mixedcase": "error", 9 | "modifier-name-mixedcase": "error", 10 | "private-vars-leading-underscore": "error", 11 | "var-name-mixedcase": "error", 12 | "imports-on-top": "error" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/audits/2018-10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/openzeppelin-contracts/audits/2018-10.pdf -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/.gitignore: -------------------------------------------------------------------------------- 1 | patched 2 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/diff/token_ERC721_ERC721.sol.patch: -------------------------------------------------------------------------------- 1 | --- token/ERC721/ERC721.sol 2023-03-07 10:48:47.736822221 +0100 2 | +++ token/ERC721/ERC721.sol 2023-03-09 19:49:39.669338673 +0100 3 | @@ -199,6 +199,11 @@ 4 | return _owners[tokenId]; 5 | } 6 | 7 | + // FV 8 | + function _getApproved(uint256 tokenId) internal view returns (address) { 9 | + return _tokenApprovals[tokenId]; 10 | + } 11 | + 12 | /** 13 | * @dev Returns whether `tokenId` exists. 14 | * 15 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/harnesses/AccessControlHarness.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../patched/access/AccessControl.sol"; 6 | 7 | contract AccessControlHarness is AccessControl {} 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/harnesses/ERC3156FlashBorrowerHarness.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | import "../patched/interfaces/IERC3156FlashBorrower.sol"; 4 | 5 | pragma solidity ^0.8.0; 6 | 7 | contract ERC3156FlashBorrowerHarness is IERC3156FlashBorrower { 8 | bytes32 somethingToReturn; 9 | 10 | function onFlashLoan(address, address, uint256, uint256, bytes calldata) external view override returns (bytes32) { 11 | return somethingToReturn; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/harnesses/ERC721ReceiverHarness.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../patched/interfaces/IERC721Receiver.sol"; 6 | 7 | contract ERC721ReceiverHarness is IERC721Receiver { 8 | function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) { 9 | return this.onERC721Received.selector; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/harnesses/Ownable2StepHarness.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../patched/access/Ownable2Step.sol"; 6 | 7 | contract Ownable2StepHarness is Ownable2Step { 8 | function restricted() external onlyOwner {} 9 | } 10 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/harnesses/OwnableHarness.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../patched/access/Ownable.sol"; 6 | 7 | contract OwnableHarness is Ownable { 8 | function restricted() external onlyOwner {} 9 | } 10 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/harnesses/PausableHarness.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../patched/security/Pausable.sol"; 6 | 7 | contract PausableHarness is Pausable { 8 | function pause() external { 9 | _pause(); 10 | } 11 | 12 | function unpause() external { 13 | _unpause(); 14 | } 15 | 16 | function onlyWhenPaused() external whenPaused {} 17 | 18 | function onlyWhenNotPaused() external whenNotPaused {} 19 | } 20 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/harnesses/TimelockControllerHarness.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.8.0; 2 | 3 | import "../patched/governance/TimelockController.sol"; 4 | 5 | contract TimelockControllerHarness is TimelockController { 6 | constructor( 7 | uint256 minDelay, 8 | address[] memory proposers, 9 | address[] memory executors, 10 | address admin 11 | ) TimelockController(minDelay, proposers, executors, admin) {} 12 | } 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/reports/2021-10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/openzeppelin-contracts/certora/reports/2021-10.pdf -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/reports/2022-03.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/openzeppelin-contracts/certora/reports/2022-03.pdf -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/reports/2022-05.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/openzeppelin-contracts/certora/reports/2022-05.pdf -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/specs/helpers/helpers.spec: -------------------------------------------------------------------------------- 1 | definition nonpayable(env e) returns bool = e.msg.value == 0; 2 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/specs/methods/IAccessControl.spec: -------------------------------------------------------------------------------- 1 | methods { 2 | hasRole(bytes32, address) returns(bool) envfree 3 | getRoleAdmin(bytes32) returns(bytes32) envfree 4 | grantRole(bytes32, address) 5 | revokeRole(bytes32, address) 6 | renounceRole(bytes32, address) 7 | } 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/specs/methods/IERC2612.spec: -------------------------------------------------------------------------------- 1 | methods { 2 | permit(address,address,uint256,uint256,uint8,bytes32,bytes32) => DISPATCHER(true) 3 | nonces(address) returns (uint256) envfree => DISPATCHER(true) 4 | DOMAIN_SEPARATOR() returns (bytes32) envfree => DISPATCHER(true) 5 | } 6 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/specs/methods/IERC3156.spec: -------------------------------------------------------------------------------- 1 | methods { 2 | maxFlashLoan(address) returns (uint256) envfree => DISPATCHER(true) 3 | flashFee(address,uint256) returns (uint256) envfree => DISPATCHER(true) 4 | flashLoan(address,address,uint256,bytes) returns (bool) => DISPATCHER(true) 5 | } 6 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/specs/methods/IERC5313.spec: -------------------------------------------------------------------------------- 1 | methods { 2 | owner() returns (address) envfree 3 | } 4 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/specs/methods/IOwnable.spec: -------------------------------------------------------------------------------- 1 | methods { 2 | owner() returns (address) envfree 3 | transferOwnership(address) 4 | renounceOwnership() 5 | } 6 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/certora/specs/methods/IOwnable2Step.spec: -------------------------------------------------------------------------------- 1 | methods { 2 | owner() returns (address) envfree 3 | pendingOwner() returns (address) envfree 4 | transferOwnership(address) 5 | acceptOwnership() 6 | renounceOwnership() 7 | } 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/crosschain/errors.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol) 3 | 4 | pragma solidity ^0.8.4; 5 | 6 | error NotCrossChainCall(); 7 | error InvalidCrossChainSender(address actual, address expected); 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC1155/IERC1155.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155MetadataURI.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC1155/extensions/IERC1155MetadataURI.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155Receiver.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC1155/IERC1155Receiver.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../utils/introspection/IERC165.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1820Implementer.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../utils/introspection/IERC1820Implementer.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1820Registry.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../utils/introspection/IERC1820Registry.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC20/IERC20.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC20/extensions/IERC20Metadata.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC2612.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC20/extensions/IERC20Permit.sol"; 7 | 8 | interface IERC2612 is IERC20Permit {} 9 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC3156.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "./IERC3156FlashBorrower.sol"; 7 | import "./IERC3156FlashLender.sol"; 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5805.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../governance/utils/IVotes.sol"; 7 | import "./IERC6372.sol"; 8 | 9 | interface IERC5805 is IERC6372, IVotes {} 10 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC721/IERC721.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Enumerable.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC721/extensions/IERC721Enumerable.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Metadata.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC721/extensions/IERC721Metadata.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Receiver.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC721/IERC721Receiver.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC777/IERC777.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777Recipient.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC777/IERC777Recipient.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777Sender.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC777/IERC777Sender.sol"; 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/interfaces/draft-IERC2612.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.9.0) (interfaces/draft-IERC2612.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | // EIP-2612 is Final as of 2022-11-01. This file is deprecated. 7 | 8 | import "./IERC2612.sol"; 9 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/metatx/README.adoc: -------------------------------------------------------------------------------- 1 | = Meta Transactions 2 | 3 | [.readme-notice] 4 | NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/metatx 5 | 6 | == Core 7 | 8 | {{ERC2771Context}} 9 | 10 | == Utils 11 | 12 | {{MinimalForwarder}} 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/AccessControlCrossChainMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.4; 4 | 5 | import "../access/AccessControlCrossChain.sol"; 6 | import "../crosschain/arbitrum/CrossChainEnabledArbitrumL2.sol"; 7 | 8 | contract AccessControlCrossChainMock is AccessControlCrossChain, CrossChainEnabledArbitrumL2 {} 9 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MaliciousData.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract ERC165MaliciousData { 6 | function supportsInterface(bytes4) public pure returns (bool) { 7 | assembly { 8 | mstore(0, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) 9 | return(0, 32) 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MissingData.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract ERC165MissingData { 6 | function supportsInterface(bytes4 interfaceId) public view {} // missing return 7 | } 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165NotSupported.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract ERC165NotSupported {} 6 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/ERC20Mock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import {ERC20} from "../token/ERC20/ERC20.sol"; 5 | 6 | contract ERC20Mock is ERC20 { 7 | constructor() ERC20("ERC20Mock", "E20M") {} 8 | 9 | function mint(address account, uint256 amount) external { 10 | _mint(account, amount); 11 | } 12 | 13 | function burn(address account, uint256 amount) external { 14 | _burn(account, amount); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/ERC4626Mock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "../token/ERC20/extensions/ERC4626.sol"; 5 | 6 | contract ERC4626Mock is ERC4626 { 7 | constructor(address underlying) ERC20("ERC4626Mock", "E4626M") ERC4626(IERC20(underlying)) {} 8 | 9 | function mint(address account, uint256 amount) external { 10 | _mint(account, amount); 11 | } 12 | 13 | function burn(address account, uint256 amount) external { 14 | _burn(account, amount); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract EtherReceiverMock { 6 | bool private _acceptEther; 7 | 8 | function setAcceptEther(bool acceptEther) public { 9 | _acceptEther = acceptEther; 10 | } 11 | 12 | receive() external payable { 13 | if (!_acceptEther) { 14 | revert(); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/PullPaymentMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../security/PullPayment.sol"; 6 | 7 | // mock class using PullPayment 8 | contract PullPaymentMock is PullPayment { 9 | constructor() payable {} 10 | 11 | // test helper function to call asyncTransfer 12 | function callTransfer(address dest, uint256 amount) public { 13 | _asyncTransfer(dest, amount); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/Context.sol"; 6 | 7 | contract ReentrancyAttack is Context { 8 | function callSender(bytes4 data) public { 9 | (bool success, ) = _msgSender().call(abi.encodeWithSelector(data)); 10 | require(success, "ReentrancyAttack: failed call"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/proxy/BadBeacon.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract BadBeaconNoImpl {} 6 | 7 | contract BadBeaconNotContract { 8 | function implementation() external pure returns (address) { 9 | return address(0x1); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/token/ERC20DecimalsMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../../token/ERC20/ERC20.sol"; 6 | 7 | abstract contract ERC20DecimalsMock is ERC20 { 8 | uint8 private immutable _decimals; 9 | 10 | constructor(uint8 decimals_) { 11 | _decimals = decimals_; 12 | } 13 | 14 | function decimals() public view override returns (uint8) { 15 | return _decimals; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/token/ERC20ExcessDecimalsMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract ERC20ExcessDecimalsMock { 6 | function decimals() public pure returns (uint256) { 7 | return type(uint256).max; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/token/ERC20MulticallMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../../token/ERC20/ERC20.sol"; 6 | import "../../utils/Multicall.sol"; 7 | 8 | abstract contract ERC20MulticallMock is ERC20, Multicall {} 9 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/token/ERC4626OffsetMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../../token/ERC20/extensions/ERC4626.sol"; 6 | 7 | abstract contract ERC4626OffsetMock is ERC4626 { 8 | uint8 private immutable _offset; 9 | 10 | constructor(uint8 offset_) { 11 | _offset = offset_; 12 | } 13 | 14 | function _decimalsOffset() internal view virtual override returns (uint8) { 15 | return _offset; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/mocks/token/ERC777Mock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../../token/ERC777/ERC777.sol"; 6 | 7 | abstract contract ERC777Mock is ERC777 { 8 | event BeforeTokenTransfer(); 9 | 10 | function _beforeTokenTransfer(address, address, address, uint256) internal override { 11 | emit BeforeTokenTransfer(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | /** 7 | * @dev This is the interface that {BeaconProxy} expects of its beacon. 8 | */ 9 | interface IBeacon { 10 | /** 11 | * @dev Must return an address that can be used as a delegate call target. 12 | * 13 | * {BeaconProxy} will check that this address is a contract. 14 | */ 15 | function implementation() external view returns (address); 16 | } 17 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/token/ERC1155/presets/README.md: -------------------------------------------------------------------------------- 1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative. 2 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20Permit.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/draft-ERC20Permit.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | // EIP-2612 is Final as of 2022-11-01. This file is deprecated. 7 | 8 | import "./ERC20Permit.sol"; 9 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/draft-IERC20Permit.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | // EIP-2612 is Final as of 2022-11-01. This file is deprecated. 7 | 8 | import "./IERC20Permit.sol"; 9 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/token/ERC20/presets/README.md: -------------------------------------------------------------------------------- 1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative. 2 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/token/ERC721/extensions/draft-ERC721Votes.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/extensions/draft-ERC721Votes.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | // ERC721Votes was marked as draft due to the EIP-712 dependency. 7 | // EIP-712 is Final as of 2022-08-11. This file is deprecated. 8 | 9 | import "./ERC721Votes.sol"; 10 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/token/ERC721/presets/README.md: -------------------------------------------------------------------------------- 1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative. 2 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/token/common/README.adoc: -------------------------------------------------------------------------------- 1 | = Common (Tokens) 2 | 3 | Functionality that is common to multiple token standards. 4 | 5 | * {ERC2981}: NFT Royalties compatible with both ERC721 and ERC1155. 6 | ** For ERC721 consider {ERC721Royalty} which clears the royalty information from storage on burn. 7 | 8 | == Contracts 9 | 10 | {{ERC2981}} 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/utils/cryptography/draft-EIP712.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/draft-EIP712.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | // EIP-712 is Final as of 2022-08-11. This file is deprecated. 7 | 8 | import "./EIP712.sol"; 9 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/contracts/vendor/polygon/IFxMessageProcessor.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.9.0) (vendor/polygon/IFxMessageProcessor.sol) 3 | pragma solidity ^0.8.0; 4 | 5 | interface IFxMessageProcessor { 6 | function processMessageFromRoot(uint256 stateId, address rootMessageSender, bytes calldata data) external; 7 | } 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/foundry.toml: -------------------------------------------------------------------------------- 1 | [fuzz] 2 | runs = 10000 3 | max_test_rejects = 150000 4 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/hardhat/env-contract.js: -------------------------------------------------------------------------------- 1 | extendEnvironment(env => { 2 | const { contract } = env; 3 | 4 | env.contract = function (name, body) { 5 | // remove the default account from the accounts list used in tests, in order 6 | // to protect tests against accidentally passing due to the contract 7 | // deployer being used subsequently as function caller 8 | contract(name, accounts => body(accounts.slice(1))); 9 | }; 10 | }); 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js: -------------------------------------------------------------------------------- 1 | const { subtask } = require('hardhat/config'); 2 | const { TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS } = require('hardhat/builtin-tasks/task-names'); 3 | 4 | subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS).setAction(async (_, __, runSuper) => 5 | (await runSuper()).filter(path => !path.endsWith('.t.sol')), 6 | ); 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/.gitignore: -------------------------------------------------------------------------------- 1 | cache/ 2 | out/ 3 | .vscode 4 | .idea 5 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/ds-test"] 2 | path = lib/ds-test 3 | url = https://github.com/dapphub/ds-test 4 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/.gitignore: -------------------------------------------------------------------------------- 1 | /.dapple 2 | /build 3 | /out 4 | /cache/ 5 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/Makefile: -------------------------------------------------------------------------------- 1 | all:; dapp build 2 | 3 | test: 4 | -dapp --use solc:0.4.23 build 5 | -dapp --use solc:0.4.26 build 6 | -dapp --use solc:0.5.17 build 7 | -dapp --use solc:0.6.12 build 8 | -dapp --use solc:0.7.5 build 9 | 10 | demo: 11 | DAPP_SRC=demo dapp --use solc:0.7.5 build 12 | -hevm dapp-test --verbose 3 13 | 14 | .PHONY: test demo 15 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/default.nix: -------------------------------------------------------------------------------- 1 | { solidityPackage, dappsys }: solidityPackage { 2 | name = "ds-test"; 3 | src = ./src; 4 | } 5 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ds-test", 3 | "version": "1.0.0", 4 | "description": "Assertions, equality checks and other test helpers ", 5 | "bugs": "https://github.com/dapphub/ds-test/issues", 6 | "license": "GPL-3.0", 7 | "author": "Contributors to ds-test", 8 | "files": [ 9 | "src/*" 10 | ], 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/dapphub/ds-test.git" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScript.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Script.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationScript is Script {} 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScriptBase.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Script.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationScriptBase is ScriptBase {} 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTest.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Test.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationTest is Test {} 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTestBase.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Test.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationTestBase is TestBase {} 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "npm run docs" 3 | publish = "build/site" 4 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/remappings.txt: -------------------------------------------------------------------------------- 1 | openzeppelin/=contracts/ 2 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["github>OpenZeppelin/configs"], 3 | "labels": ["ignore-changeset"] 4 | } 5 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/requirements.txt: -------------------------------------------------------------------------------- 1 | certora-cli==3.6.4 2 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/checks/generation.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | npm run generate 6 | git diff -R --exit-code 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/generate/format-lines.js: -------------------------------------------------------------------------------- 1 | function formatLines(...lines) { 2 | return [...indentEach(0, lines)].join('\n') + '\n'; 3 | } 4 | 5 | function* indentEach(indent, lines) { 6 | for (const line of lines) { 7 | if (Array.isArray(line)) { 8 | yield* indentEach(indent + 1, line); 9 | } else { 10 | const padding = ' '.repeat(indent); 11 | yield* line.split('\n').map(subline => (subline === '' ? '' : padding + subline)); 12 | } 13 | } 14 | } 15 | 16 | module.exports = formatLines; 17 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/git-user-config.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail -x 4 | 5 | git config user.name 'github-actions' 6 | git config user.email '41898282+github-actions[bot]@users.noreply.github.com' 7 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/prepack.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | shopt -s globstar 5 | 6 | # cross platform `mkdir -p` 7 | node -e 'fs.mkdirSync("build/contracts", { recursive: true })' 8 | 9 | cp artifacts/contracts/**/*.json build/contracts 10 | rm build/contracts/*.dbg.json 11 | 12 | node scripts/remove-ignored-artifacts.js 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/prepare-contracts-package.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # cd to the root of the repo 4 | cd "$(git rev-parse --show-toplevel)" 5 | 6 | # avoids re-compilation during publishing of both packages 7 | if [[ ! -v ALREADY_COMPILED ]]; then 8 | npm run clean 9 | npm run prepare 10 | npm run prepack 11 | fi 12 | 13 | cp README.md contracts/ 14 | mkdir contracts/build contracts/build/contracts 15 | cp -r build/contracts/*.json contracts/build/contracts 16 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/prepare.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | if [ "${SKIP_COMPILE:-}" == true ]; then 6 | exit 7 | fi 8 | 9 | npm run clean 10 | env COMPILE_MODE=production npm run compile 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/release/version.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | changeset version 6 | 7 | scripts/release/format-changelog.js 8 | scripts/release/synchronize-versions.js 9 | scripts/release/update-comment.js 10 | 11 | oz-docs update-version 12 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/release/workflow/exit-prerelease.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | npx changeset pre exit rc 6 | git add . 7 | git commit -m "Exit release candidate" 8 | git push origin 9 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/release/workflow/rerun.js: -------------------------------------------------------------------------------- 1 | module.exports = ({ github, context }) => 2 | github.rest.actions.createWorkflowDispatch({ 3 | owner: context.repo.owner, 4 | repo: context.repo.repo, 5 | workflow_id: 'release-cycle.yml', 6 | ref: process.env.REF || process.env.GITHUB_REF_NAME, 7 | }); 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/upgradeable/patch-apply.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | DIRNAME="$(dirname -- "${BASH_SOURCE[0]}")" 6 | PATCH="$DIRNAME/upgradeable.patch" 7 | 8 | error() { 9 | echo Error: "$*" >&2 10 | exit 1 11 | } 12 | 13 | if ! git diff-files --quiet ":!$PATCH" || ! git diff-index --quiet HEAD ":!$PATCH"; then 14 | error "Repository must have no staged or unstaged changes" 15 | fi 16 | 17 | if ! git apply -3 "$PATCH"; then 18 | error "Fix conflicts and run $DIRNAME/patch-save.sh" 19 | fi 20 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/scripts/upgradeable/patch-save.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | DIRNAME="$(dirname -- "${BASH_SOURCE[0]}")" 6 | PATCH="$DIRNAME/upgradeable.patch" 7 | 8 | error() { 9 | echo Error: "$*" >&2 10 | exit 1 11 | } 12 | 13 | if ! git diff-files --quiet ":!$PATCH"; then 14 | error "Unstaged changes. Stage to include in patch or temporarily stash." 15 | fi 16 | 17 | git diff-index --cached --patch --output="$PATCH" HEAD 18 | git restore --staged --worktree ":!$PATCH" 19 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/TESTING.md: -------------------------------------------------------------------------------- 1 | ## Testing 2 | 3 | Unit test are critical to OpenZeppelin Contracts. They help ensure code quality and mitigate against security vulnerabilities. The directory structure within the `/test` directory corresponds to the `/contracts` directory. 4 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/access/AccessControl.test.js: -------------------------------------------------------------------------------- 1 | const { DEFAULT_ADMIN_ROLE, shouldBehaveLikeAccessControl } = require('./AccessControl.behavior.js'); 2 | 3 | const AccessControl = artifacts.require('$AccessControl'); 4 | 5 | contract('AccessControl', function (accounts) { 6 | beforeEach(async function () { 7 | this.accessControl = await AccessControl.new({ from: accounts[0] }); 8 | await this.accessControl.$_grantRole(DEFAULT_ADMIN_ROLE, accounts[0]); 9 | }); 10 | 11 | shouldBehaveLikeAccessControl('AccessControl', ...accounts); 12 | }); 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/helpers/chainid.js: -------------------------------------------------------------------------------- 1 | const hre = require('hardhat'); 2 | 3 | async function getChainId() { 4 | const chainIdHex = await hre.network.provider.send('eth_chainId', []); 5 | return new hre.web3.utils.BN(chainIdHex, 'hex'); 6 | } 7 | 8 | module.exports = { 9 | getChainId, 10 | }; 11 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/helpers/create2.js: -------------------------------------------------------------------------------- 1 | function computeCreate2Address(saltHex, bytecode, deployer) { 2 | return web3.utils.toChecksumAddress( 3 | `0x${web3.utils 4 | .sha3(`0x${['ff', deployer, saltHex, web3.utils.soliditySha3(bytecode)].map(x => x.replace(/0x/, '')).join('')}`) 5 | .slice(-40)}`, 6 | ); 7 | } 8 | 9 | module.exports = { 10 | computeCreate2Address, 11 | }; 12 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/helpers/enums.js: -------------------------------------------------------------------------------- 1 | const { BN } = require('@openzeppelin/test-helpers'); 2 | 3 | function Enum(...options) { 4 | return Object.fromEntries(options.map((key, i) => [key, new BN(i)])); 5 | } 6 | 7 | module.exports = { 8 | Enum, 9 | ProposalState: Enum('Pending', 'Active', 'Canceled', 'Defeated', 'Succeeded', 'Queued', 'Expired', 'Executed'), 10 | VoteType: Enum('Against', 'For', 'Abstain'), 11 | Rounding: Enum('Down', 'Up', 'Zero'), 12 | }; 13 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/helpers/map-values.js: -------------------------------------------------------------------------------- 1 | function mapValues(obj, fn) { 2 | return Object.fromEntries([...Object.entries(obj)].map(([k, v]) => [k, fn(v)])); 3 | } 4 | 5 | module.exports = { 6 | mapValues, 7 | }; 8 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js: -------------------------------------------------------------------------------- 1 | const shouldBehaveLikeProxy = require('../Proxy.behaviour'); 2 | 3 | const ERC1967Proxy = artifacts.require('ERC1967Proxy'); 4 | 5 | contract('ERC1967Proxy', function (accounts) { 6 | const [proxyAdminOwner] = accounts; 7 | 8 | const createProxy = async function (implementation, _admin, initData, opts) { 9 | return ERC1967Proxy.new(implementation, initData, opts); 10 | }; 11 | 12 | shouldBehaveLikeProxy(createProxy, undefined, proxyAdminOwner); 13 | }); 14 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/utils/escrow/Escrow.test.js: -------------------------------------------------------------------------------- 1 | require('@openzeppelin/test-helpers'); 2 | const { shouldBehaveLikeEscrow } = require('./Escrow.behavior'); 3 | 4 | const Escrow = artifacts.require('Escrow'); 5 | 6 | contract('Escrow', function (accounts) { 7 | const [owner, ...otherAccounts] = accounts; 8 | 9 | beforeEach(async function () { 10 | this.escrow = await Escrow.new({ from: owner }); 11 | }); 12 | 13 | shouldBehaveLikeEscrow(owner, otherAccounts); 14 | }); 15 | -------------------------------------------------------------------------------- /lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js: -------------------------------------------------------------------------------- 1 | const { shouldSupportInterfaces } = require('./SupportsInterface.behavior'); 2 | 3 | const ERC165 = artifacts.require('$ERC165'); 4 | 5 | contract('ERC165', function () { 6 | beforeEach(async function () { 7 | this.mock = await ERC165.new(); 8 | }); 9 | 10 | shouldSupportInterfaces(['ERC165']); 11 | }); 12 | -------------------------------------------------------------------------------- /lib/permit2/.env.example: -------------------------------------------------------------------------------- 1 | FORK_URL= -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/batchTransferFrom.snap: -------------------------------------------------------------------------------- 1 | 61797 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/batchTransferFromMultiToken.snap: -------------------------------------------------------------------------------- 1 | 81786 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/lockdown.snap: -------------------------------------------------------------------------------- 1 | 28435 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permit2 + transferFrom2 with WETH9's mainnet address.snap: -------------------------------------------------------------------------------- 1 | 60346 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permit2 + transferFrom2 with a non EIP-2612 native token with fallback.snap: -------------------------------------------------------------------------------- 1 | 65533 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permit2 + transferFrom2 with a non EIP-2612 native token.snap: -------------------------------------------------------------------------------- 1 | 60811 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permit2 + transferFrom2 with an EIP-2612 native token.snap: -------------------------------------------------------------------------------- 1 | 46296 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitBatchCleanWrite.snap: -------------------------------------------------------------------------------- 1 | 91924 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitBatchDirtyWrite.snap: -------------------------------------------------------------------------------- 1 | 57724 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitBatchTransferFromMultipleTokens.snap: -------------------------------------------------------------------------------- 1 | 143387 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitBatchTransferFromSingleToken.snap: -------------------------------------------------------------------------------- 1 | 88867 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitCleanWrite.snap: -------------------------------------------------------------------------------- 1 | 63119 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitCompactSig.snap: -------------------------------------------------------------------------------- 1 | 63094 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitDirtyNonce.snap: -------------------------------------------------------------------------------- 1 | 44014 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitDirtyWrite.snap: -------------------------------------------------------------------------------- 1 | 46019 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitInvalidSigner.snap: -------------------------------------------------------------------------------- 1 | 40301 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitSetMaxAllowanceCleanWrite.snap: -------------------------------------------------------------------------------- 1 | 61114 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitSetMaxAllowanceDirtyWrite.snap: -------------------------------------------------------------------------------- 1 | 44014 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitSignatureExpired.snap: -------------------------------------------------------------------------------- 1 | 31700 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitTransferFromBatchTypedWitness.snap: -------------------------------------------------------------------------------- 1 | 120325 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitTransferFromCompactSig.snap: -------------------------------------------------------------------------------- 1 | 86066 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitTransferFromSingleToken.snap: -------------------------------------------------------------------------------- 1 | 86092 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/permitTransferFromTypedWitness.snap: -------------------------------------------------------------------------------- 1 | 87817 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/safePermit + safeTransferFrom with an EIP-2612 native token.snap: -------------------------------------------------------------------------------- 1 | 48268 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/simplePermit2 + transferFrom2 with a non EIP-2612 native token.snap: -------------------------------------------------------------------------------- 1 | 60811 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/single recipient 2 tokens.snap: -------------------------------------------------------------------------------- 1 | 118525 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/single recipient many tokens.snap: -------------------------------------------------------------------------------- 1 | 133544 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/transferFrom with different owners.snap: -------------------------------------------------------------------------------- 1 | 61886 -------------------------------------------------------------------------------- /lib/permit2/.forge-snapshots/transferFrom.snap: -------------------------------------------------------------------------------- 1 | 52197 -------------------------------------------------------------------------------- /lib/permit2/.gitattributes: -------------------------------------------------------------------------------- 1 | *.sol linguist-language=Solidity 2 | .gas-snapshot linguist-language=Julia -------------------------------------------------------------------------------- /lib/permit2/.github/workflows/gas.yml: -------------------------------------------------------------------------------- 1 | name: Gas 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | 9 | jobs: 10 | tests: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | 15 | - name: Install Foundry 16 | uses: foundry-rs/foundry-toolchain@v1 17 | with: 18 | version: nightly 19 | 20 | - name: Check gas snapshots 21 | run: forge snapshot --check 22 | -------------------------------------------------------------------------------- /lib/permit2/.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | 9 | jobs: 10 | tests: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | 15 | - name: Install Foundry 16 | uses: foundry-rs/foundry-toolchain@v1 17 | with: 18 | version: nightly 19 | 20 | - name: Check formatting 21 | run: forge fmt --check 22 | -------------------------------------------------------------------------------- /lib/permit2/.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | /cache 3 | /out 4 | broadcast/ 5 | -------------------------------------------------------------------------------- /lib/permit2/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/forge-std"] 2 | path = lib/forge-std 3 | url = https://github.com/foundry-rs/forge-std 4 | [submodule "lib/solmate"] 5 | path = lib/solmate 6 | url = https://github.com/rari-capital/solmate 7 | [submodule "lib/openzeppelin-contracts"] 8 | path = lib/openzeppelin-contracts 9 | url = https://github.com/OpenZeppelin/openzeppelin-contracts 10 | [submodule "lib/forge-gas-snapshot"] 11 | path = lib/forge-gas-snapshot 12 | url = https://github.com/marktoda/forge-gas-snapshot 13 | -------------------------------------------------------------------------------- /lib/permit2/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "solidity.packageDefaultDependenciesContractsDirectory": "src", 3 | "solidity.packageDefaultDependenciesDirectory": "lib", 4 | "solidity.compileUsingRemoteVersion": "v0.8.17", 5 | "solidity.formatter": "forge", 6 | "search.exclude": { "lib": true }, 7 | "files.associations": { 8 | ".gas-snapshot": "julia" 9 | }, 10 | "editor.formatOnSave": true 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/audits/ABDKAudit.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/permit2/audits/ABDKAudit.pdf -------------------------------------------------------------------------------- /lib/permit2/audits/Chainsecurity Audit.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/permit2/audits/Chainsecurity Audit.pdf -------------------------------------------------------------------------------- /lib/permit2/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | solc = "0.8.17" 3 | bytecode_hash = "none" 4 | optimizer = true 5 | via_ir = true 6 | optimizer_runs = 1000000 7 | no_match_path = "*/integration/*" 8 | fuzz_runs = 10000 9 | ffi = true 10 | fs_permissions = [{ access = "read-write", path = ".forge-snapshots/"}] 11 | 12 | [profile.integration] 13 | no_match_path = "" 14 | match_path = "*/integration/*" 15 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.forge-snapshots/add.snap: -------------------------------------------------------------------------------- 1 | 134 -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.forge-snapshots/addFirst.snap: -------------------------------------------------------------------------------- 1 | 134 -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.forge-snapshots/addSecond.snap: -------------------------------------------------------------------------------- 1 | 134 -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.forge-snapshots/manyAdd.snap: -------------------------------------------------------------------------------- 1 | 19195 -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.forge-snapshots/manySstore.snap: -------------------------------------------------------------------------------- 1 | 50990 -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.forge-snapshots/snapmanyAdd.snap: -------------------------------------------------------------------------------- 1 | 19195 2 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.forge-snapshots/snapmanySstore.snap: -------------------------------------------------------------------------------- 1 | 1 2 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.gitignore: -------------------------------------------------------------------------------- 1 | out/ 2 | lib/ 3 | cache/ 4 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/forge-std"] 2 | path = lib/forge-std 3 | url = https://github.com/foundry-rs/forge-std 4 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-gas-snapshot/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | src = 'src' 3 | out = 'out' 4 | libs = ['lib'] 5 | ffi = true 6 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/.gitignore: -------------------------------------------------------------------------------- 1 | cache/ 2 | out/ 3 | .vscode 4 | .idea 5 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/ds-test"] 2 | path = lib/ds-test 3 | url = https://github.com/dapphub/ds-test 4 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/lib/ds-test/.gitignore: -------------------------------------------------------------------------------- 1 | /.dapple 2 | /build 3 | /out 4 | /cache/ 5 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/lib/ds-test/Makefile: -------------------------------------------------------------------------------- 1 | all:; dapp build 2 | 3 | test: 4 | -dapp --use solc:0.4.23 build 5 | -dapp --use solc:0.4.26 build 6 | -dapp --use solc:0.5.17 build 7 | -dapp --use solc:0.6.12 build 8 | -dapp --use solc:0.7.5 build 9 | 10 | demo: 11 | DAPP_SRC=demo dapp --use solc:0.7.5 build 12 | -hevm dapp-test --verbose 3 13 | 14 | .PHONY: test demo 15 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/lib/ds-test/default.nix: -------------------------------------------------------------------------------- 1 | { solidityPackage, dappsys }: solidityPackage { 2 | name = "ds-test"; 3 | src = ./src; 4 | } 5 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/lib/ds-test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ds-test", 3 | "version": "1.0.0", 4 | "description": "Assertions, equality checks and other test helpers ", 5 | "bugs": "https://github.com/dapphub/ds-test/issues", 6 | "license": "GPL-3.0", 7 | "author": "Contributors to ds-test", 8 | "files": [ 9 | "src/*" 10 | ], 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/dapphub/ds-test.git" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/test/compilation/CompilationScript.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Script.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationScript is Script {} 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/test/compilation/CompilationScriptBase.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Script.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationScriptBase is ScriptBase {} 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/test/compilation/CompilationTest.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Test.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationTest is Test {} 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/forge-std/test/compilation/CompilationTestBase.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity >=0.6.2 <0.9.0; 3 | 4 | pragma experimental ABIEncoderV2; 5 | 6 | import "../../src/Test.sol"; 7 | 8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing 9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207 10 | contract CompilationTestBase is TestBase {} 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.codecov.yml: -------------------------------------------------------------------------------- 1 | comment: off 2 | github_checks: 3 | annotations: false 4 | coverage: 5 | status: 6 | patch: 7 | default: 8 | target: 95% 9 | project: 10 | default: 11 | threshold: 1% 12 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | end_of_line = lf 9 | indent_style = space 10 | insert_final_newline = true 11 | trim_trailing_whitespace = false 12 | max_line_length = 120 13 | 14 | [*.sol] 15 | indent_size = 4 16 | 17 | [*.js] 18 | indent_size = 2 19 | 20 | [*.{adoc,md}] 21 | max_line_length = 0 22 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.gitattributes: -------------------------------------------------------------------------------- 1 | *.sol linguist-language=Solidity 2 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Questions & Support Requests 3 | url: https://forum.openzeppelin.com/c/support/contracts/18 4 | about: Ask in the OpenZeppelin Forum 5 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.github/workflows/docs.yml: -------------------------------------------------------------------------------- 1 | name: Build Docs 2 | 3 | on: 4 | push: 5 | branches: [release-v*] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v3 12 | - name: Set up environment 13 | uses: ./.github/actions/setup 14 | - run: bash scripts/git-user-config.sh 15 | - run: node scripts/update-docs-branch.js 16 | - run: git push --all origin 17 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.mocharc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | require: 'hardhat/register', 3 | timeout: 4000, 4 | }; 5 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "overrides": [ 5 | { 6 | "files": "*.sol", 7 | "options": { 8 | "singleQuote": false, 9 | "printWidth": 120, 10 | "explicitTypes": "always" 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.solcover.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | norpc: true, 3 | testCommand: 'npm test', 4 | compileCommand: 'npm run compile', 5 | skipFiles: [ 6 | 'mocks', 7 | ], 8 | providerOptions: { 9 | default_balance_ether: '10000000000000000000000000', 10 | }, 11 | mocha: { 12 | fgrep: '[skip-on-coverage]', 13 | invert: true, 14 | }, 15 | } 16 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/.solhint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-unused-vars": "error", 4 | "const-name-snakecase": "error", 5 | "contract-name-camelcase": "error", 6 | "event-name-camelcase": "error", 7 | "func-name-mixedcase": "error", 8 | "func-param-name-mixedcase": "error", 9 | "modifier-name-mixedcase": "error", 10 | "private-vars-leading-underscore": "error", 11 | "var-name-mixedcase": "error", 12 | "imports-on-top": "error" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/audit/2018-10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/permit2/lib/openzeppelin-contracts/audit/2018-10.pdf -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/certora/munged/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/certora/scripts/Governor.sh: -------------------------------------------------------------------------------- 1 | make -C certora munged 2 | 3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/GovernorHarness.sol \ 4 | --verify GovernorHarness:certora/specs/GovernorBase.spec \ 5 | --solc solc8.0 \ 6 | --staging shelly/forSasha \ 7 | --optimistic_loop \ 8 | --settings -copyLoopUnroll=4 \ 9 | --rule voteStartBeforeVoteEnd \ 10 | --msg "$1" 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/certora/scripts/GovernorCountingSimple-counting.sh: -------------------------------------------------------------------------------- 1 | make -C certora munged 2 | 3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/GovernorBasicHarness.sol \ 4 | --verify GovernorBasicHarness:certora/specs/GovernorCountingSimple.spec \ 5 | --solc solc8.2 \ 6 | --staging shelly/forSasha \ 7 | --optimistic_loop \ 8 | --settings -copyLoopUnroll=4 \ 9 | --rule hasVotedCorrelation \ 10 | --msg "$1" 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/certora/scripts/WizardFirstTry.sh: -------------------------------------------------------------------------------- 1 | make -C certora munged 2 | 3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/WizardFirstTry.sol \ 4 | --verify WizardFirstTry:certora/specs/GovernorBase.spec \ 5 | --solc solc8.2 \ 6 | --staging shelly/forSasha \ 7 | --optimistic_loop \ 8 | --disableLocalTypeChecking \ 9 | --settings -copyLoopUnroll=4 \ 10 | --msg "$1" 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/certora/scripts/sanity.sh: -------------------------------------------------------------------------------- 1 | make -C certora munged 2 | 3 | for f in certora/harnesses/Wizard*.sol 4 | do 5 | echo "Processing $f" 6 | file=$(basename $f) 7 | echo ${file%.*} 8 | certoraRun certora/harnesses/$file \ 9 | --verify ${file%.*}:certora/specs/sanity.spec "$@" \ 10 | --solc solc8.2 --staging shelly/forSasha \ 11 | --optimistic_loop \ 12 | --msg "checking sanity on ${file%.*}" 13 | --settings -copyLoopUnroll=4 14 | done 15 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/crosschain/errors.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol) 3 | 4 | pragma solidity ^0.8.4; 5 | 6 | error NotCrossChainCall(); 7 | error InvalidCrossChainSender(address actual, address expected); 8 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC1155/IERC1155.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155MetadataURI.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC1155/extensions/IERC1155MetadataURI.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155Receiver.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC1155/IERC1155Receiver.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../utils/introspection/IERC165.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1820Implementer.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../utils/introspection/IERC1820Implementer.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1820Registry.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../utils/introspection/IERC1820Registry.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC20/IERC20.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC20/extensions/IERC20Metadata.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC3156.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "./IERC3156FlashBorrower.sol"; 7 | import "./IERC3156FlashLender.sol"; 8 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC721/IERC721.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Enumerable.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC721/extensions/IERC721Enumerable.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Metadata.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC721/extensions/IERC721Metadata.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Receiver.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC721/IERC721Receiver.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC777/IERC777.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777Recipient.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC777/IERC777Recipient.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777Sender.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC777/IERC777Sender.sol"; 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC2612.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts v4.4.1 (interfaces/draft-IERC2612.sol) 3 | 4 | pragma solidity ^0.8.0; 5 | 6 | import "../token/ERC20/extensions/draft-IERC20Permit.sol"; 7 | 8 | interface IERC2612 is IERC20Permit {} 9 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/metatx/README.adoc: -------------------------------------------------------------------------------- 1 | = Meta Transactions 2 | 3 | [.readme-notice] 4 | NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/metatx 5 | 6 | == Core 7 | 8 | {{ERC2771Context}} 9 | 10 | == Utils 11 | 12 | {{MinimalForwarder}} 13 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/AccessControlMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../access/AccessControl.sol"; 6 | 7 | contract AccessControlMock is AccessControl { 8 | constructor() { 9 | _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); 10 | } 11 | 12 | function setRoleAdmin(bytes32 roleId, bytes32 adminRoleId) public { 13 | _setRoleAdmin(roleId, adminRoleId); 14 | } 15 | 16 | function senderProtected(bytes32 roleId) public onlyRole(roleId) {} 17 | } 18 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ArraysImpl.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/Arrays.sol"; 6 | 7 | contract ArraysImpl { 8 | using Arrays for uint256[]; 9 | 10 | uint256[] private _array; 11 | 12 | constructor(uint256[] memory array) { 13 | _array = array; 14 | } 15 | 16 | function findUpperBound(uint256 element) external view returns (uint256) { 17 | return _array.findUpperBound(element); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/BadBeacon.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract BadBeaconNoImpl {} 6 | 7 | contract BadBeaconNotContract { 8 | function implementation() external pure returns (address) { 9 | return address(0x1); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/Base64Mock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/Base64.sol"; 6 | 7 | contract Base64Mock { 8 | function encode(bytes memory value) external pure returns (string memory) { 9 | return Base64.encode(value); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC1155BurnableMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../token/ERC1155/extensions/ERC1155Burnable.sol"; 6 | 7 | contract ERC1155BurnableMock is ERC1155Burnable { 8 | constructor(string memory uri) ERC1155(uri) {} 9 | 10 | function mint( 11 | address to, 12 | uint256 id, 13 | uint256 value, 14 | bytes memory data 15 | ) public { 16 | _mint(to, id, value, data); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MaliciousData.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract ERC165MaliciousData { 6 | function supportsInterface(bytes4) public view returns (bool) { 7 | assembly { 8 | mstore(0, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) 9 | return(0, 32) 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MissingData.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract ERC165MissingData { 6 | function supportsInterface(bytes4 interfaceId) public view {} // missing return 7 | } 8 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165NotSupported.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract ERC165NotSupported {} 6 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC165Mock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/introspection/ERC165.sol"; 6 | 7 | contract ERC165Mock is ERC165 {} 8 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC165StorageMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/introspection/ERC165Storage.sol"; 6 | 7 | contract ERC165StorageMock is ERC165Storage { 8 | function registerInterface(bytes4 interfaceId) public { 9 | _registerInterface(interfaceId); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC1820ImplementerMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/introspection/ERC1820Implementer.sol"; 6 | 7 | contract ERC1820ImplementerMock is ERC1820Implementer { 8 | function registerInterfaceForAddress(bytes32 interfaceHash, address account) public { 9 | _registerInterfaceForAddress(interfaceHash, account); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC20BurnableMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../token/ERC20/extensions/ERC20Burnable.sol"; 6 | 7 | contract ERC20BurnableMock is ERC20Burnable { 8 | constructor( 9 | string memory name, 10 | string memory symbol, 11 | address initialAccount, 12 | uint256 initialBalance 13 | ) ERC20(name, symbol) { 14 | _mint(initialAccount, initialBalance); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC20CappedMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../token/ERC20/extensions/ERC20Capped.sol"; 6 | 7 | contract ERC20CappedMock is ERC20Capped { 8 | constructor( 9 | string memory name, 10 | string memory symbol, 11 | uint256 cap 12 | ) ERC20(name, symbol) ERC20Capped(cap) {} 13 | 14 | function mint(address to, uint256 tokenId) public { 15 | _mint(to, tokenId); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ERC20WrapperMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../token/ERC20/extensions/ERC20Wrapper.sol"; 6 | 7 | contract ERC20WrapperMock is ERC20Wrapper { 8 | constructor( 9 | IERC20 _underlyingToken, 10 | string memory name, 11 | string memory symbol 12 | ) ERC20(name, symbol) ERC20Wrapper(_underlyingToken) {} 13 | 14 | function recover(address account) public returns (uint256) { 15 | return _recover(account); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract EtherReceiverMock { 6 | bool private _acceptEther; 7 | 8 | function setAcceptEther(bool acceptEther) public { 9 | _acceptEther = acceptEther; 10 | } 11 | 12 | receive() external payable { 13 | if (!_acceptEther) { 14 | revert(); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/MulticallTokenMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/Multicall.sol"; 6 | import "./ERC20Mock.sol"; 7 | 8 | contract MulticallTokenMock is ERC20Mock, Multicall { 9 | constructor(uint256 initialBalance) ERC20Mock("MulticallToken", "BCT", msg.sender, initialBalance) {} 10 | } 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/OwnableMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../access/Ownable.sol"; 6 | 7 | contract OwnableMock is Ownable {} 8 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/PullPaymentMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../security/PullPayment.sol"; 6 | 7 | // mock class using PullPayment 8 | contract PullPaymentMock is PullPayment { 9 | constructor() payable {} 10 | 11 | // test helper function to call asyncTransfer 12 | function callTransfer(address dest, uint256 amount) public { 13 | _asyncTransfer(dest, amount); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/Context.sol"; 6 | 7 | contract ReentrancyAttack is Context { 8 | function callSender(bytes4 data) public { 9 | (bool success, ) = _msgSender().call(abi.encodeWithSelector(data)); 10 | require(success, "ReentrancyAttack: failed call"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/mocks/SignatureCheckerMock.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | import "../utils/cryptography/SignatureChecker.sol"; 6 | 7 | contract SignatureCheckerMock { 8 | using SignatureChecker for address; 9 | 10 | function isValidSignatureNow( 11 | address signer, 12 | bytes32 hash, 13 | bytes memory signature 14 | ) public view returns (bool) { 15 | return signer.isValidSignatureNow(hash, signature); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/token/ERC1155/presets/README.md: -------------------------------------------------------------------------------- 1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative. 2 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/token/ERC20/presets/README.md: -------------------------------------------------------------------------------- 1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative. 2 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/token/ERC721/presets/README.md: -------------------------------------------------------------------------------- 1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative. 2 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/token/common/README.adoc: -------------------------------------------------------------------------------- 1 | = Common (Tokens) 2 | 3 | Functionality that is common to multiple token standards. 4 | 5 | * {ERC2981}: NFT Royalties compatible with both ERC721 and ERC1155. 6 | ** For ERC721 consider {ERC721Royalty} which clears the royalty information from storage on burn. 7 | 8 | == Contracts 9 | 10 | {{ERC2981}} 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/contracts/vendor/polygon/IFxMessageProcessor.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | // OpenZeppelin Contracts (last updated v4.6.0) (vendor/polygon/IFxMessageProcessor.sol) 3 | pragma solidity ^0.8.0; 4 | 5 | interface IFxMessageProcessor { 6 | function processMessageFromRoot( 7 | uint256 stateId, 8 | address rootMessageSender, 9 | bytes calldata data 10 | ) external; 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/hardhat/env-contract.js: -------------------------------------------------------------------------------- 1 | extendEnvironment(env => { 2 | const { contract } = env; 3 | 4 | env.contract = function (name, body) { 5 | // remove the default account from the accounts list used in tests, in order 6 | // to protect tests against accidentally passing due to the contract 7 | // deployer being used subsequently as function caller 8 | contract(name, accounts => body(accounts.slice(1))); 9 | }; 10 | }); 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/migrations/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/permit2/lib/openzeppelin-contracts/migrations/.gitkeep -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "npm run docs" 3 | publish = "build/site" 4 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "github>OpenZeppelin/code-style" 4 | ], 5 | "packageRules": [ 6 | { 7 | "extends": ["packages:eslint"], 8 | "enabled": false 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/scripts/checks/generation.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | npm run generate 6 | git diff -R --exit-code 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/scripts/generate/format-lines.js: -------------------------------------------------------------------------------- 1 | function formatLines (...lines) { 2 | return [...indentEach(0, lines)].join('\n') + '\n'; 3 | } 4 | 5 | function *indentEach (indent, lines) { 6 | for (const line of lines) { 7 | if (Array.isArray(line)) { 8 | yield * indentEach(indent + 1, line); 9 | } else { 10 | const padding = ' '.repeat(indent); 11 | yield * line.split('\n').map(subline => subline === '' ? '' : padding + subline); 12 | } 13 | } 14 | } 15 | 16 | module.exports = formatLines; 17 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/scripts/git-user-config.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail -x 4 | 5 | git config user.name 'github-actions' 6 | git config user.email '41898282+github-actions[bot]@users.noreply.github.com' 7 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/scripts/prepack.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | shopt -s globstar 5 | 6 | # cross platform `mkdir -p` 7 | node -e 'fs.mkdirSync("build/contracts", { recursive: true })' 8 | 9 | cp artifacts/contracts/**/*.json build/contracts 10 | rm build/contracts/*.dbg.json 11 | 12 | node scripts/remove-ignored-artifacts.js 13 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/scripts/prepare-contracts-package.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # cd to the root of the repo 4 | cd "$(git rev-parse --show-toplevel)" 5 | 6 | # avoids re-compilation during publishing of both packages 7 | if [[ ! -v ALREADY_COMPILED ]]; then 8 | npm run clean 9 | npm run prepare 10 | npm run prepack 11 | fi 12 | 13 | cp README.md contracts/ 14 | mkdir contracts/build contracts/build/contracts 15 | cp -r build/contracts/*.json contracts/build/contracts 16 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/scripts/prepare.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | if [ "${SKIP_COMPILE:-}" == true ]; then 6 | exit 7 | fi 8 | 9 | npm run clean 10 | env COMPILE_MODE=production npm run compile 11 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/scripts/release/version.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | scripts/release/update-changelog-release-date.js 6 | scripts/release/synchronize-versions.js 7 | scripts/release/update-comment.js 8 | 9 | oz-docs update-version 10 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/slither.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "detectors_to_run": "reentrancy-eth,reentrancy-no-eth,reentrancy-unlimited-gas", 3 | "filter_paths": "contracts/mocks" 4 | } -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/test/TESTING.md: -------------------------------------------------------------------------------- 1 | ## Testing 2 | 3 | Unit test are critical to OpenZeppelin Contracts. They help ensure code quality and mitigate against security vulnerabilities. The directory structure within the `/test` directory corresponds to the `/contracts` directory. 4 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/test/access/AccessControl.test.js: -------------------------------------------------------------------------------- 1 | const { 2 | shouldBehaveLikeAccessControl, 3 | } = require('./AccessControl.behavior.js'); 4 | 5 | const AccessControlMock = artifacts.require('AccessControlMock'); 6 | 7 | contract('AccessControl', function (accounts) { 8 | beforeEach(async function () { 9 | this.accessControl = await AccessControlMock.new({ from: accounts[0] }); 10 | }); 11 | 12 | shouldBehaveLikeAccessControl('AccessControl', ...accounts); 13 | }); 14 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/test/helpers/create2.js: -------------------------------------------------------------------------------- 1 | function computeCreate2Address (saltHex, bytecode, deployer) { 2 | return web3.utils.toChecksumAddress(`0x${web3.utils.sha3(`0x${[ 3 | 'ff', 4 | deployer, 5 | saltHex, 6 | web3.utils.soliditySha3(bytecode), 7 | ].map(x => x.replace(/0x/, '')).join('')}`).slice(-40)}`); 8 | } 9 | 10 | module.exports = { 11 | computeCreate2Address, 12 | }; 13 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js: -------------------------------------------------------------------------------- 1 | const shouldBehaveLikeProxy = require('../Proxy.behaviour'); 2 | 3 | const ERC1967Proxy = artifacts.require('ERC1967Proxy'); 4 | 5 | contract('ERC1967Proxy', function (accounts) { 6 | const [proxyAdminOwner] = accounts; 7 | 8 | const createProxy = async function (implementation, _admin, initData, opts) { 9 | return ERC1967Proxy.new(implementation, initData, opts); 10 | }; 11 | 12 | shouldBehaveLikeProxy(createProxy, undefined, proxyAdminOwner); 13 | }); 14 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/test/utils/escrow/Escrow.test.js: -------------------------------------------------------------------------------- 1 | require('@openzeppelin/test-helpers'); 2 | const { shouldBehaveLikeEscrow } = require('./Escrow.behavior'); 3 | 4 | const Escrow = artifacts.require('Escrow'); 5 | 6 | contract('Escrow', function (accounts) { 7 | const [ owner, ...otherAccounts ] = accounts; 8 | 9 | beforeEach(async function () { 10 | this.escrow = await Escrow.new({ from: owner }); 11 | }); 12 | 13 | shouldBehaveLikeEscrow(owner, otherAccounts); 14 | }); 15 | -------------------------------------------------------------------------------- /lib/permit2/lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js: -------------------------------------------------------------------------------- 1 | const { shouldSupportInterfaces } = require('./SupportsInterface.behavior'); 2 | 3 | const ERC165Mock = artifacts.require('ERC165Mock'); 4 | 5 | contract('ERC165', function (accounts) { 6 | beforeEach(async function () { 7 | this.mock = await ERC165Mock.new(); 8 | }); 9 | 10 | shouldSupportInterfaces([ 11 | 'ERC165', 12 | ]); 13 | }); 14 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/.gitattributes: -------------------------------------------------------------------------------- 1 | *.sol linguist-language=Solidity 2 | .gas-snapshot linguist-language=Julia -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | Describe the changes made in your pull request here. 4 | 5 | ## Checklist 6 | 7 | Ensure you completed **all of the steps** below before submitting your pull request: 8 | 9 | - [ ] Ran `forge snapshot`? 10 | - [ ] Ran `npm run lint`? 11 | - [ ] Ran `forge test`? 12 | 13 | _Pull requests with an incomplete checklist will be thrown out._ 14 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/.gitignore: -------------------------------------------------------------------------------- 1 | /cache 2 | /node_modules 3 | /out -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/ds-test"] 2 | path = lib/ds-test 3 | url = https://github.com/dapphub/ds-test 4 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/.prettierignore: -------------------------------------------------------------------------------- 1 | lib -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "printWidth": 100, 4 | 5 | "overrides": [ 6 | { 7 | "files": "*.sol", 8 | "options": { 9 | "tabWidth": 4, 10 | "printWidth": 120 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "solidity.packageDefaultDependenciesContractsDirectory": "src", 3 | "solidity.packageDefaultDependenciesDirectory": "lib", 4 | "solidity.compileUsingRemoteVersion": "v0.8.15", 5 | "search.exclude": { "lib": true }, 6 | "files.associations": { 7 | ".gas-snapshot": "julia" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/audits/v6-Fixed-Point-Solutions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/permit2/lib/solmate/audits/v6-Fixed-Point-Solutions.pdf -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | solc = "0.8.15" 3 | bytecode_hash = "none" 4 | optimizer_runs = 1000000 5 | 6 | [profile.intense.fuzz] 7 | runs = 10000 8 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/lib/ds-test/.gitignore: -------------------------------------------------------------------------------- 1 | /.dapple 2 | /build 3 | /out 4 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/lib/ds-test/Makefile: -------------------------------------------------------------------------------- 1 | all:; dapp build 2 | 3 | test: 4 | -dapp --use solc:0.4.23 build 5 | -dapp --use solc:0.4.26 build 6 | -dapp --use solc:0.5.17 build 7 | -dapp --use solc:0.6.12 build 8 | -dapp --use solc:0.7.5 build 9 | 10 | demo: 11 | DAPP_SRC=demo dapp --use solc:0.7.5 build 12 | -hevm dapp-test --verbose 3 13 | 14 | .PHONY: test demo 15 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/lib/ds-test/default.nix: -------------------------------------------------------------------------------- 1 | { solidityPackage, dappsys }: solidityPackage { 2 | name = "ds-test"; 3 | src = ./src; 4 | } 5 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/src/test/utils/DSInvariantTest.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | contract DSInvariantTest { 5 | address[] private targets; 6 | 7 | function targetContracts() public view virtual returns (address[] memory) { 8 | require(targets.length > 0, "NO_TARGET_CONTRACTS"); 9 | 10 | return targets; 11 | } 12 | 13 | function addTargetContract(address newTargetContract) internal virtual { 14 | targets.push(newTargetContract); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/src/test/utils/mocks/MockAuthChild.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | import {Auth, Authority} from "../../../auth/Auth.sol"; 5 | 6 | contract MockAuthChild is Auth(msg.sender, Authority(address(0))) { 7 | bool public flag; 8 | 9 | function updateFlag() public virtual requiresAuth { 10 | flag = true; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/src/test/utils/mocks/MockAuthority.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | import {Authority} from "../../../auth/Auth.sol"; 5 | 6 | contract MockAuthority is Authority { 7 | bool immutable allowCalls; 8 | 9 | constructor(bool _allowCalls) { 10 | allowCalls = _allowCalls; 11 | } 12 | 13 | function canCall( 14 | address, 15 | address, 16 | bytes4 17 | ) public view override returns (bool) { 18 | return allowCalls; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/permit2/lib/solmate/src/test/utils/mocks/MockOwned.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | import {Owned} from "../../../auth/Owned.sol"; 5 | 6 | contract MockOwned is Owned(msg.sender) { 7 | bool public flag; 8 | 9 | function updateFlag() public virtual onlyOwner { 10 | flag = true; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/permit2/remappings.txt: -------------------------------------------------------------------------------- 1 | solmate/=lib/solmate 2 | -------------------------------------------------------------------------------- /lib/permit2/src/PermitErrors.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity 0.8.17; 3 | 4 | /// @notice Shared errors between signature based transfers and allowance based transfers. 5 | 6 | /// @notice Thrown when validating an inputted signature that is stale 7 | /// @param signatureDeadline The timestamp at which a signature is no longer valid 8 | error SignatureExpired(uint256 signatureDeadline); 9 | 10 | /// @notice Thrown when validating that the inputted nonce has not been used 11 | error InvalidNonce(); 12 | -------------------------------------------------------------------------------- /lib/permit2/src/interfaces/IEIP712.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | interface IEIP712 { 5 | function DOMAIN_SEPARATOR() external view returns (bytes32); 6 | } 7 | -------------------------------------------------------------------------------- /lib/permit2/src/interfaces/IERC1271.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | interface IERC1271 { 5 | /// @dev Should return whether the signature provided is valid for the provided data 6 | /// @param hash Hash of the data to be signed 7 | /// @param signature Signature byte array associated with _data 8 | /// @return magicValue The bytes4 magic value 0x1626ba7e 9 | function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue); 10 | } 11 | -------------------------------------------------------------------------------- /lib/permit2/src/libraries/SafeCast160.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | library SafeCast160 { 5 | /// @notice Thrown when a valude greater than type(uint160).max is cast to uint160 6 | error UnsafeCast(); 7 | 8 | /// @notice Safely casts uint256 to uint160 9 | /// @param value The uint256 to be cast 10 | function toUint160(uint256 value) internal pure returns (uint160) { 11 | if (value > type(uint160).max) revert UnsafeCast(); 12 | return uint160(value); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/permit2/test/integration/tokens/DAI.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC20} from "solmate/src/tokens/ERC20.sol"; 5 | import {MainnetTokenTest} from "../MainnetToken.t.sol"; 6 | 7 | contract DAITest is MainnetTokenTest { 8 | function token() internal pure override returns (ERC20) { 9 | return ERC20(0x6B175474E89094C44Da98b954EedeAC495271d0F); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/test/integration/tokens/FeeOnTransferToken.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC20} from "solmate/src/tokens/ERC20.sol"; 5 | import {MainnetTokenTest} from "../MainnetToken.t.sol"; 6 | 7 | contract FeeOnTransferTokenTest is MainnetTokenTest { 8 | function token() internal pure override returns (ERC20) { 9 | return ERC20(0xF5238462E7235c7B62811567E63Dd17d12C2EAA0); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/test/integration/tokens/UNI.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC20} from "solmate/src/tokens/ERC20.sol"; 5 | import {MainnetTokenTest} from "../MainnetToken.t.sol"; 6 | 7 | contract UNITest is MainnetTokenTest { 8 | function token() internal pure override returns (ERC20) { 9 | return ERC20(0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/test/integration/tokens/USDC.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC20} from "solmate/src/tokens/ERC20.sol"; 5 | import {MainnetTokenTest} from "../MainnetToken.t.sol"; 6 | 7 | contract USDCTest is MainnetTokenTest { 8 | function token() internal pure override returns (ERC20) { 9 | return ERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/test/integration/tokens/USDT.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {SafeTransferLib} from "solmate/src/utils/SafeTransferLib.sol"; 5 | import {ERC20} from "solmate/src/tokens/ERC20.sol"; 6 | import {MainnetTokenTest} from "../MainnetToken.t.sol"; 7 | 8 | contract USDTTest is MainnetTokenTest { 9 | using SafeTransferLib for ERC20; 10 | 11 | function token() internal pure override returns (ERC20) { 12 | return ERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/permit2/test/integration/tokens/WBTC.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC20} from "solmate/src/tokens/ERC20.sol"; 5 | import {MainnetTokenTest} from "../MainnetToken.t.sol"; 6 | 7 | contract WBTCTest is MainnetTokenTest { 8 | function token() internal pure override returns (ERC20) { 9 | return ERC20(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/test/integration/tokens/ZRX.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC20} from "solmate/src/tokens/ERC20.sol"; 5 | import {MainnetTokenTest} from "../MainnetToken.t.sol"; 6 | 7 | contract ZRXTest is MainnetTokenTest { 8 | function token() internal pure override returns (ERC20) { 9 | return ERC20(0xE41d2489571d322189246DaFA5ebDe1F4699F498); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/permit2/test/mocks/MockERC1155.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC1155} from "solmate/src/tokens/ERC1155.sol"; 5 | 6 | contract MockERC1155 is ERC1155 { 7 | constructor() ERC1155() {} 8 | 9 | function mint(address to, uint256 id, uint256 amount) public { 10 | _mint(to, id, amount, ""); 11 | } 12 | 13 | function uri(uint256) public view virtual override returns (string memory) { 14 | return ""; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/permit2/test/mocks/MockERC20.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC20} from "solmate/src/tokens/ERC20.sol"; 5 | 6 | contract MockERC20 is ERC20 { 7 | constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol, decimals) {} 8 | 9 | function mint(address _to, uint256 _amount) public { 10 | _mint(_to, _amount); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/permit2/test/mocks/MockERC721.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {ERC721} from "solmate/src/tokens/ERC721.sol"; 5 | 6 | contract MockERC721 is ERC721 { 7 | constructor(string memory name, string memory symbol) ERC721(name, symbol) {} 8 | 9 | function mint(address to, uint256 id) public { 10 | _mint(to, id); 11 | } 12 | 13 | function tokenURI(uint256) public view virtual override returns (string memory) { 14 | return ""; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/permit2/test/mocks/MockNonPermitERC20.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {MockERC20} from "solmate/src/test/utils/mocks/MockERC20.sol"; 5 | 6 | contract MockNonPermitERC20 is MockERC20 { 7 | constructor(string memory _name, string memory _symbol, uint8 _decimals) MockERC20(_name, _symbol, _decimals) {} 8 | 9 | function DOMAIN_SEPARATOR() public pure override returns (bytes32) { 10 | return 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/permit2/test/mocks/MockNonPermitNonERC20WithDS.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | contract MockNonPermitNonERC20WithDS { 5 | function DOMAIN_SEPARATOR() external pure returns (bytes memory) { 6 | bytes memory returnData = "123456789012345678901234567890123"; 7 | require(returnData.length == 33); 8 | return returnData; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/permit2/test/mocks/MockSignatureVerification.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import {SignatureVerification} from "../../src/libraries/SignatureVerification.sol"; 5 | 6 | contract MockSignatureVerification { 7 | function verify(bytes calldata sig, bytes32 hashed, address signer) public view { 8 | SignatureVerification.verify(sig, hashed, signer); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/solmate/.gitattributes: -------------------------------------------------------------------------------- 1 | .gas-snapshot linguist-language=Julia -------------------------------------------------------------------------------- /lib/solmate/.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | Describe the changes made in your pull request here. 4 | 5 | ## Checklist 6 | 7 | Ensure you completed **all of the steps** below before submitting your pull request: 8 | 9 | - [ ] Ran `forge snapshot`? 10 | - [ ] Ran `npm run lint`? 11 | - [ ] Ran `forge test`? 12 | 13 | _Pull requests with an incomplete checklist will be thrown out._ 14 | -------------------------------------------------------------------------------- /lib/solmate/.gitignore: -------------------------------------------------------------------------------- 1 | /cache 2 | /node_modules 3 | /out -------------------------------------------------------------------------------- /lib/solmate/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/ds-test"] 2 | path = lib/ds-test 3 | url = https://github.com/dapphub/ds-test 4 | -------------------------------------------------------------------------------- /lib/solmate/.prettierignore: -------------------------------------------------------------------------------- 1 | lib -------------------------------------------------------------------------------- /lib/solmate/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "printWidth": 100, 4 | 5 | "overrides": [ 6 | { 7 | "files": "*.sol", 8 | "options": { 9 | "tabWidth": 4, 10 | "printWidth": 120 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /lib/solmate/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "solidity.packageDefaultDependenciesContractsDirectory": "src", 3 | "solidity.packageDefaultDependenciesDirectory": "lib", 4 | "solidity.compileUsingRemoteVersion": "v0.8.15", 5 | "search.exclude": { "lib": true }, 6 | "files.associations": { 7 | ".gas-snapshot": "julia" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/solmate/audits/v6-Fixed-Point-Solutions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-423n4/2024-05-predy/8af835b9dbc5ee2e136ebf5315b91d9d7e7eef22/lib/solmate/audits/v6-Fixed-Point-Solutions.pdf -------------------------------------------------------------------------------- /lib/solmate/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | solc = "0.8.15" 3 | bytecode_hash = "none" 4 | optimizer_runs = 1000000 5 | 6 | [profile.intense.fuzz] 7 | runs = 10000 8 | -------------------------------------------------------------------------------- /lib/solmate/lib/ds-test/.gitignore: -------------------------------------------------------------------------------- 1 | /.dapple 2 | /build 3 | /out 4 | -------------------------------------------------------------------------------- /lib/solmate/lib/ds-test/Makefile: -------------------------------------------------------------------------------- 1 | all:; dapp build 2 | 3 | test: 4 | -dapp --use solc:0.4.23 build 5 | -dapp --use solc:0.4.26 build 6 | -dapp --use solc:0.5.17 build 7 | -dapp --use solc:0.6.12 build 8 | -dapp --use solc:0.7.5 build 9 | 10 | demo: 11 | DAPP_SRC=demo dapp --use solc:0.7.5 build 12 | -hevm dapp-test --verbose 3 13 | 14 | .PHONY: test demo 15 | -------------------------------------------------------------------------------- /lib/solmate/lib/ds-test/default.nix: -------------------------------------------------------------------------------- 1 | { solidityPackage, dappsys }: solidityPackage { 2 | name = "ds-test"; 3 | src = ./src; 4 | } 5 | -------------------------------------------------------------------------------- /lib/solmate/lib/ds-test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ds-test", 3 | "version": "1.0.0", 4 | "description": "Assertions, equality checks and other test helpers ", 5 | "bugs": "https://github.com/dapphub/ds-test/issues", 6 | "license": "GPL-3.0", 7 | "author": "Contributors to ds-test", 8 | "files": [ 9 | "src/*" 10 | ], 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/dapphub/ds-test.git" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/solmate/src/test/utils/DSInvariantTest.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | contract DSInvariantTest { 5 | address[] private targets; 6 | 7 | function targetContracts() public view virtual returns (address[] memory) { 8 | require(targets.length > 0, "NO_TARGET_CONTRACTS"); 9 | 10 | return targets; 11 | } 12 | 13 | function addTargetContract(address newTargetContract) internal virtual { 14 | targets.push(newTargetContract); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/solmate/src/test/utils/mocks/MockAuthChild.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | import {Auth, Authority} from "../../../auth/Auth.sol"; 5 | 6 | contract MockAuthChild is Auth(msg.sender, Authority(address(0))) { 7 | bool public flag; 8 | 9 | function updateFlag() public virtual requiresAuth { 10 | flag = true; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/solmate/src/test/utils/mocks/MockAuthority.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | import {Authority} from "../../../auth/Auth.sol"; 5 | 6 | contract MockAuthority is Authority { 7 | bool immutable allowCalls; 8 | 9 | constructor(bool _allowCalls) { 10 | allowCalls = _allowCalls; 11 | } 12 | 13 | function canCall( 14 | address, 15 | address, 16 | bytes4 17 | ) public view override returns (bool) { 18 | return allowCalls; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/solmate/src/test/utils/mocks/MockOwned.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | import {Owned} from "../../../auth/Owned.sol"; 5 | 6 | contract MockOwned is Owned(msg.sender) { 7 | bool public flag; 8 | 9 | function updateFlag() public virtual onlyOwner { 10 | flag = true; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/v3-core/.gitattributes: -------------------------------------------------------------------------------- 1 | *.sol linguist-language=Solidity -------------------------------------------------------------------------------- /lib/v3-core/.gitignore: -------------------------------------------------------------------------------- 1 | artifacts/ 2 | cache/ 3 | crytic-export/ 4 | node_modules/ 5 | typechain/ 6 | -------------------------------------------------------------------------------- /lib/v3-core/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "printWidth": 120 5 | } 6 | -------------------------------------------------------------------------------- /lib/v3-core/.solhint.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["prettier"], 3 | "rules": { 4 | "prettier/prettier": "error" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /lib/v3-core/.yarnrc: -------------------------------------------------------------------------------- 1 | ignore-scripts true 2 | -------------------------------------------------------------------------------- /lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity >=0.5.0; 3 | 4 | /// @title Errors emitted by a pool 5 | /// @notice Contains all events emitted by the pool 6 | interface IUniswapV3PoolErrors { 7 | error LOK(); 8 | error TLU(); 9 | error TLM(); 10 | error TUM(); 11 | error AI(); 12 | error M0(); 13 | error M1(); 14 | error AS(); 15 | error IIA(); 16 | error L(); 17 | error F0(); 18 | error F1(); 19 | } 20 | -------------------------------------------------------------------------------- /lib/v3-core/contracts/libraries/FixedPoint128.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity >=0.4.0; 3 | 4 | /// @title FixedPoint128 5 | /// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) 6 | library FixedPoint128 { 7 | uint256 internal constant Q128 = 0x100000000000000000000000000000000; 8 | } 9 | -------------------------------------------------------------------------------- /lib/v3-core/contracts/libraries/FixedPoint96.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity >=0.4.0; 3 | 4 | /// @title FixedPoint96 5 | /// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) 6 | /// @dev Used in SqrtPriceMath.sol 7 | library FixedPoint96 { 8 | uint8 internal constant RESOLUTION = 96; 9 | uint256 internal constant Q96 = 0x1000000000000000000000000; 10 | } 11 | -------------------------------------------------------------------------------- /lib/v3-core/test/__snapshots__/NoDelegateCall.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`NoDelegateCall runtime overhead 1`] = `41`; 4 | -------------------------------------------------------------------------------- /lib/v3-core/test/__snapshots__/UniswapV3Factory.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`UniswapV3Factory #createPool gas 1`] = `4515119`; 4 | 5 | exports[`UniswapV3Factory factory bytecode size 1`] = `24574`; 6 | 7 | exports[`UniswapV3Factory pool bytecode size 1`] = `21930`; 8 | -------------------------------------------------------------------------------- /lib/v3-core/test/shared/expect.ts: -------------------------------------------------------------------------------- 1 | import { expect, use } from 'chai' 2 | import { solidity } from 'ethereum-waffle' 3 | import { jestSnapshotPlugin } from 'mocha-chai-jest-snapshot' 4 | 5 | use(solidity) 6 | use(jestSnapshotPlugin()) 7 | 8 | export { expect } 9 | -------------------------------------------------------------------------------- /lib/v3-core/test/shared/format.ts: -------------------------------------------------------------------------------- 1 | import { Decimal } from 'decimal.js' 2 | import { BigNumberish } from 'ethers' 3 | 4 | export function formatTokenAmount(num: BigNumberish): string { 5 | return new Decimal(num.toString()).dividedBy(new Decimal(10).pow(18)).toPrecision(5) 6 | } 7 | 8 | export function formatPrice(price: BigNumberish): string { 9 | return new Decimal(price.toString()).dividedBy(new Decimal(2).pow(96)).pow(2).toPrecision(5) 10 | } 11 | -------------------------------------------------------------------------------- /lib/v3-core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2018", 4 | "module": "commonjs", 5 | "strict": true, 6 | "esModuleInterop": true, 7 | "outDir": "dist", 8 | "typeRoots": ["./typechain", "./node_modules/@types"], 9 | "types": ["@nomiclabs/hardhat-ethers", "@nomiclabs/hardhat-waffle"] 10 | }, 11 | "include": ["./test"], 12 | "files": ["./hardhat.config.ts"] 13 | } 14 | -------------------------------------------------------------------------------- /lib/v3-periphery/.gitattributes: -------------------------------------------------------------------------------- 1 | *.sol linguist-language=Solidity -------------------------------------------------------------------------------- /lib/v3-periphery/.gitignore: -------------------------------------------------------------------------------- 1 | artifacts/ 2 | cache/ 3 | crytic-export/ 4 | node_modules/ 5 | typechain/ 6 | foundry-out/ 7 | -------------------------------------------------------------------------------- /lib/v3-periphery/.prettierignore: -------------------------------------------------------------------------------- 1 | .github -------------------------------------------------------------------------------- /lib/v3-periphery/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "printWidth": 120 5 | } 6 | -------------------------------------------------------------------------------- /lib/v3-periphery/.solhint.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["prettier"], 3 | "rules": { 4 | "prettier/prettier": "error" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /lib/v3-periphery/.yarnrc: -------------------------------------------------------------------------------- 1 | ignore-scripts true 2 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/base/BlockTimestamp.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity =0.8.15; 3 | 4 | /// @title Function for getting block timestamp 5 | /// @dev Base contract that is overridden for tests 6 | abstract contract BlockTimestamp { 7 | /// @dev Method that exists purely to be overridden for tests 8 | /// @return The current block timestamp 9 | function _blockTimestamp() internal view virtual returns (uint256) { 10 | return block.timestamp; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/base/PeripheryValidation.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity =0.8.15; 3 | 4 | import './BlockTimestamp.sol'; 5 | 6 | abstract contract PeripheryValidation is BlockTimestamp { 7 | modifier checkDeadline(uint256 deadline) { 8 | require(_blockTimestamp() <= deadline, 'Transaction too old'); 9 | _; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/interfaces/IPeripheryImmutableState.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity >=0.5.0; 3 | 4 | /// @title Immutable state 5 | /// @notice Functions that return immutable state of the router 6 | interface IPeripheryImmutableState { 7 | /// @return Returns the address of the Uniswap V3 factory 8 | function factory() external view returns (address); 9 | 10 | /// @return Returns the address of WETH9 11 | function WETH9() external view returns (address); 12 | } 13 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/interfaces/external/IWETH9.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity =0.8.15; 3 | 4 | import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; 5 | 6 | /// @title Interface for WETH9 7 | interface IWETH9 is IERC20 { 8 | /// @notice Deposit ether to get wrapped ether 9 | function deposit() external payable; 10 | 11 | /// @notice Withdraw wrapped ether to get ether 12 | function withdraw(uint256) external; 13 | } 14 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/lens/README.md: -------------------------------------------------------------------------------- 1 | # lens 2 | 3 | These contracts are not designed to be called on-chain. They simplify 4 | fetching on-chain data from off-chain. 5 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/libraries/ChainId.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity >=0.7.0; 3 | 4 | /// @title Function for getting the current chain ID 5 | library ChainId { 6 | /// @dev Gets the current chain ID 7 | /// @return chainId The current chain ID 8 | function get() internal view returns (uint256 chainId) { 9 | assembly { 10 | chainId := chainid() 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/libraries/PositionKey.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity >=0.5.0; 3 | 4 | library PositionKey { 5 | /// @dev Returns the key of the position in the core library 6 | function compute( 7 | address owner, 8 | int24 tickLower, 9 | int24 tickUpper 10 | ) internal pure returns (bytes32) { 11 | return keccak256(abi.encodePacked(owner, tickLower, tickUpper)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/libraries/TokenRatioSortOrder.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | library TokenRatioSortOrder { 5 | int256 constant NUMERATOR_MOST = 300; 6 | int256 constant NUMERATOR_MORE = 200; 7 | int256 constant NUMERATOR = 100; 8 | 9 | int256 constant DENOMINATOR_MOST = -300; 10 | int256 constant DENOMINATOR_MORE = -200; 11 | int256 constant DENOMINATOR = -100; 12 | } 13 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/test/Base64Test.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity =0.8.15; 3 | 4 | import 'base64-sol/base64.sol'; 5 | 6 | contract Base64Test { 7 | function encode(bytes memory data) external pure returns (string memory) { 8 | return Base64.encode(data); 9 | } 10 | 11 | function getGasCostOfEncode(bytes memory data) external view returns (uint256) { 12 | uint256 gasBefore = gasleft(); 13 | Base64.encode(data); 14 | return gasBefore - gasleft(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/test/MockTimeSwapRouter.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity =0.8.15; 3 | pragma abicoder v2; 4 | 5 | import '../SwapRouter.sol'; 6 | 7 | contract MockTimeSwapRouter is SwapRouter { 8 | uint256 time; 9 | 10 | constructor(address _factory, address _WETH9) SwapRouter(_factory, _WETH9) {} 11 | 12 | function _blockTimestamp() internal view override returns (uint256) { 13 | return time; 14 | } 15 | 16 | function setTime(uint256 _time) external { 17 | time = _time; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/test/PeripheryImmutableStateTest.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later 2 | pragma solidity =0.8.15; 3 | 4 | import '../base/PeripheryImmutableState.sol'; 5 | 6 | contract PeripheryImmutableStateTest is PeripheryImmutableState { 7 | constructor(address _factory, address _WETH9) PeripheryImmutableState(_factory, _WETH9) {} 8 | } 9 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/test/SelfPermitTest.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity =0.8.15; 3 | 4 | import '../base/SelfPermit.sol'; 5 | 6 | /// @dev Same as SelfPermit but not abstract 7 | contract SelfPermitTest is SelfPermit { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/test/TestCallbackValidation.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity =0.8.15; 3 | 4 | import '../libraries/CallbackValidation.sol'; 5 | 6 | contract TestCallbackValidation { 7 | function verifyCallback( 8 | address factory, 9 | address tokenA, 10 | address tokenB, 11 | uint24 fee 12 | ) external view returns (IUniswapV3Pool pool) { 13 | return CallbackValidation.verifyCallback(factory, tokenA, tokenB, fee); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/test/TestERC20.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity =0.8.15; 3 | 4 | import '@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol'; 5 | 6 | contract TestERC20 is ERC20Permit { 7 | constructor(uint256 amountToMint) ERC20('Test ERC20', 'TEST') ERC20Permit('Test ERC20') { 8 | _mint(msg.sender, amountToMint); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/v3-periphery/contracts/test/TestERC20Metadata.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity =0.8.15; 3 | 4 | import '@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol'; 5 | 6 | contract TestERC20Metadata is ERC20Permit { 7 | constructor( 8 | uint256 amountToMint, 9 | string memory name, 10 | string memory symbol 11 | ) ERC20(name, symbol) ERC20Permit(name) { 12 | _mint(msg.sender, amountToMint); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/Multicall.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Multicall gas cost of pay w/ multicall 1`] = `45983`; 4 | 5 | exports[`Multicall gas cost of pay w/o multicall 1`] = `43422`; 6 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/OracleLibrary.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`OracleLibrary #getQuoteAtTick gas test 1`] = `1296`; 4 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/PairFlash.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`PairFlash test flash gas 1`] = `351923`; 4 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/Path.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Path gas cost 1`] = `701`; 4 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/PeripheryImmutableState.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`PeripheryImmutableState bytecode size 1`] = `185`; 4 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/PoolAddress.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`PoolAddress #computeAddress gas cost 1`] = `643`; 4 | 5 | exports[`PoolAddress #computeAddress matches example from core repo 1`] = `"0xcf75931a4C18d87F784a91719DefFDdb74b7B0d5"`; 6 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/PositionValue.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`PositionValue #fees when price is above the position range gas 1`] = `50079`; 4 | 5 | exports[`PositionValue #fees when price is below the position range gas 1`] = `50047`; 6 | 7 | exports[`PositionValue #fees when price is within the position range gas 1`] = `55665`; 8 | 9 | exports[`PositionValue #principal gas 1`] = `23808`; 10 | 11 | exports[`PositionValue #total gas 1`] = `63220`; 12 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/SwapRouter.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`SwapRouter bytecode size 1`] = `12517`; 4 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/TickLens.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`TickLens #getPopulatedTicksInWord fully populated ticks 1`] = `2776254`; 4 | 5 | exports[`TickLens #getPopulatedTicksInWord gas for single populated tick 1`] = `55314`; 6 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/__snapshots__/V3Migrator.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`V3Migrator #migrate gas 1`] = `691258`; 4 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/base64.ts: -------------------------------------------------------------------------------- 1 | export function base64Encode(str: string): string { 2 | return Buffer.from(str, 'utf8').toString('base64') 3 | } 4 | 5 | export function base64Decode(str: string): string { 6 | return Buffer.from(str, 'base64').toString('utf8') 7 | } 8 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/constants.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export const MaxUint128 = BigNumber.from(2).pow(128).sub(1) 4 | 5 | export enum FeeAmount { 6 | LOW = 500, 7 | MEDIUM = 3000, 8 | HIGH = 10000, 9 | } 10 | 11 | export const TICK_SPACINGS: { [amount in FeeAmount]: number } = { 12 | [FeeAmount.LOW]: 10, 13 | [FeeAmount.MEDIUM]: 60, 14 | [FeeAmount.HIGH]: 200, 15 | } 16 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/encodePriceSqrt.ts: -------------------------------------------------------------------------------- 1 | import bn from 'bignumber.js' 2 | import { BigNumber, BigNumberish } from 'ethers' 3 | 4 | bn.config({ EXPONENTIAL_AT: 999999, DECIMAL_PLACES: 40 }) 5 | 6 | // returns the sqrt price as a 64x96 7 | export function encodePriceSqrt(reserve1: BigNumberish, reserve0: BigNumberish): BigNumber { 8 | return BigNumber.from( 9 | new bn(reserve1.toString()) 10 | .div(reserve0.toString()) 11 | .sqrt() 12 | .multipliedBy(new bn(2).pow(96)) 13 | .integerValue(3) 14 | .toString() 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/expandTo18Decimals.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export function expandTo18Decimals(n: number): BigNumber { 4 | return BigNumber.from(n).mul(BigNumber.from(10).pow(18)) 5 | } 6 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/expect.ts: -------------------------------------------------------------------------------- 1 | import { expect, use } from 'chai' 2 | import { solidity } from 'ethereum-waffle' 3 | import { jestSnapshotPlugin } from 'mocha-chai-jest-snapshot' 4 | 5 | use(solidity) 6 | use(jestSnapshotPlugin()) 7 | 8 | export { expect } 9 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/extractJSONFromURI.ts: -------------------------------------------------------------------------------- 1 | export function extractJSONFromURI(uri: string): { name: string; description: string; image: string } { 2 | const encodedJSON = uri.substr('data:application/json;base64,'.length) 3 | const decodedJSON = Buffer.from(encodedJSON, 'base64').toString('utf8') 4 | return JSON.parse(decodedJSON) 5 | } 6 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/poolAtAddress.ts: -------------------------------------------------------------------------------- 1 | import { abi as POOL_ABI } from '@uniswap/v3-core/artifacts/contracts/UniswapV3Pool.sol/UniswapV3Pool.json' 2 | import { Contract, Wallet } from 'ethers' 3 | import { IUniswapV3Pool } from '../../typechain' 4 | 5 | export default function poolAtAddress(address: string, wallet: Wallet): IUniswapV3Pool { 6 | return new Contract(address, POOL_ABI, wallet) as IUniswapV3Pool 7 | } 8 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/ticks.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export const getMinTick = (tickSpacing: number) => Math.ceil(-887272 / tickSpacing) * tickSpacing 4 | export const getMaxTick = (tickSpacing: number) => Math.floor(887272 / tickSpacing) * tickSpacing 5 | export const getMaxLiquidityPerTick = (tickSpacing: number) => 6 | BigNumber.from(2) 7 | .pow(128) 8 | .sub(1) 9 | .div((getMaxTick(tickSpacing) - getMinTick(tickSpacing)) / tickSpacing + 1) 10 | -------------------------------------------------------------------------------- /lib/v3-periphery/test/shared/tokenSort.ts: -------------------------------------------------------------------------------- 1 | export function compareToken(a: { address: string }, b: { address: string }): -1 | 1 { 2 | return a.address.toLowerCase() < b.address.toLowerCase() ? -1 : 1 3 | } 4 | 5 | export function sortedTokens( 6 | a: { address: string }, 7 | b: { address: string } 8 | ): [typeof a, typeof b] | [typeof b, typeof a] { 9 | return compareToken(a, b) < 0 ? [a, b] : [b, a] 10 | } 11 | -------------------------------------------------------------------------------- /lib/v3-periphery/testnet-deploys.md: -------------------------------------------------------------------------------- 1 | ## Uniswap V3 is live on Mainnet 2 | 3 | See the addresses [here](./deploys.md). 4 | -------------------------------------------------------------------------------- /lib/v3-periphery/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2018", 4 | "module": "commonjs", 5 | "strict": true, 6 | "esModuleInterop": true, 7 | "resolveJsonModule": true, 8 | "outDir": "dist", 9 | "typeRoots": ["./typechain", "./node_modules/@types"], 10 | "types": ["@nomiclabs/hardhat-ethers", "@nomiclabs/hardhat-waffle"] 11 | }, 12 | "include": ["./test"], 13 | "files": ["./hardhat.config.ts"] 14 | } 15 | -------------------------------------------------------------------------------- /remappings.txt: -------------------------------------------------------------------------------- 1 | forge-std/=lib/forge-std/src/ 2 | ds-test/=lib/forge-std/lib/ds-test/src/ 3 | @solmate/=lib/solmate/ 4 | solmate/=lib/solmate 5 | @openzeppelin/=lib/openzeppelin-contracts/ 6 | @openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/ 7 | @uniswap/v3-periphery/=lib/v3-periphery/ 8 | @uniswap/v3-core/=lib/v3-core/ 9 | @uniswap/permit2/=lib/permit2/ 10 | 11 | -------------------------------------------------------------------------------- /script/Counter.s.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.13; 3 | 4 | import "forge-std/Script.sol"; 5 | 6 | contract CounterScript is Script { 7 | function setUp() public {} 8 | 9 | function run() public { 10 | vm.broadcast(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /slither.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "filter_paths": "(lib/|test/)", 3 | "solc_remaps": [ 4 | "ds-test/=lib/ds-test/src/", 5 | "forge-std/=lib/forge-std/src/", 6 | "@solmate/=lib/solmate/src/", 7 | "@openzeppelin/=lib/openzeppelin-contracts/", 8 | "@uniswap/v3-core/=lib/v3-core/", 9 | "@uniswap/v3-periphery/=lib/v3-periphery/", 10 | "@uniswap/permit2/=lib/permit2/" 11 | ], 12 | "exclude_informational": true 13 | } -------------------------------------------------------------------------------- /src/interfaces/IHooks.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity >=0.7.0; 3 | 4 | import "./IPredyPool.sol"; 5 | 6 | interface IHooks { 7 | function predySettlementCallback( 8 | address quoteToken, 9 | address baseToken, 10 | bytes memory settlementData, 11 | int256 baseAmountDelta 12 | ) external; 13 | 14 | function predyTradeAfterCallback( 15 | IPredyPool.TradeParams memory tradeParams, 16 | IPredyPool.TradeResult memory tradeResult 17 | ) external; 18 | } 19 | -------------------------------------------------------------------------------- /src/interfaces/ISpotMarket.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity >=0.8.0; 3 | 4 | import {IFillerMarket} from "./IFillerMarket.sol"; 5 | 6 | interface ISpotMarket { 7 | function quoteSettlement(IFillerMarket.SettlementParams memory settlementParams, int256 baseAmountDelta) external; 8 | } 9 | -------------------------------------------------------------------------------- /src/interfaces/ISupplyToken.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: agpl-3.0 2 | pragma solidity >=0.7.0; 3 | 4 | interface ISupplyToken { 5 | function mint(address account, uint256 amount) external; 6 | function burn(address account, uint256 amount) external; 7 | } 8 | -------------------------------------------------------------------------------- /src/libraries/PairLib.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: agpl-3.0 2 | pragma solidity ^0.8.17; 3 | 4 | library PairLib { 5 | function getRebalanceCacheId(uint256 pairId, uint64 rebalanceId) internal pure returns (uint256) { 6 | return pairId * type(uint64).max + rebalanceId; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/libraries/math/Bps.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: agpl-3.0 2 | pragma solidity ^0.8.17; 3 | 4 | library Bps { 5 | uint32 public constant ONE = 1e6; 6 | 7 | function upper(uint256 price, uint256 bps) internal pure returns (uint256) { 8 | return price * bps / ONE; 9 | } 10 | 11 | function lower(uint256 price, uint256 bps) internal pure returns (uint256) { 12 | return price * ONE / bps; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/types/LockData.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.17; 3 | 4 | import "../interfaces/IPredyPool.sol"; 5 | 6 | library LockDataLibrary { 7 | struct LockData { 8 | address locker; 9 | uint256 quoteReserve; 10 | uint256 baseReserve; 11 | uint256 pairId; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /test/lens/Setup.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.0; 3 | 4 | import {IPermit2} from "@uniswap/permit2/src/interfaces/IPermit2.sol"; 5 | import "../../src/lens/PredyPoolQuoter.sol"; 6 | import "../pool/Setup.t.sol"; 7 | 8 | contract TestLens is TestPool { 9 | function setUp() public virtual override(TestPool) { 10 | TestPool.setUp(); 11 | 12 | registerPair(address(currency1), address(0)); 13 | 14 | predyPool.supply(1, true, 1e10); 15 | predyPool.supply(1, false, 1e10); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/libraries/PairLib.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.19; 3 | 4 | import "forge-std/Test.sol"; 5 | import "../../src/libraries/PairLib.sol"; 6 | 7 | contract PairLibTest is Test { 8 | function testGetRebalanceCacheId() public { 9 | uint256 rebalanceCacheId = PairLib.getRebalanceCacheId(18 * 1e18, 18 * 1e18); 10 | 11 | assertEq(rebalanceCacheId, 332041393326771929088000000000000000000); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /test/market/gamma/PredyLiquidationCallback.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.0; 3 | 4 | import "./Setup.t.sol"; 5 | 6 | contract TestPredyLiquidationCallback is TestGammaMarket { 7 | function setUp() public override { 8 | TestGammaMarket.setUp(); 9 | } 10 | 11 | // liquidate a filler market position 12 | } 13 | -------------------------------------------------------------------------------- /test/market/perp/PredyLiquidationCallback.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.0; 3 | 4 | import "./Setup.t.sol"; 5 | 6 | contract TestPredyLiquidationCallback is TestPerpMarket { 7 | function setUp() public override { 8 | TestPerpMarket.setUp(); 9 | } 10 | 11 | // liquidate a filler market position 12 | } 13 | -------------------------------------------------------------------------------- /test/mocks/MockERC20.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.0; 3 | 4 | import {ERC20} from "@solmate/src/tokens/ERC20.sol"; 5 | 6 | /** 7 | * @notice Mock of ERC20 contract 8 | */ 9 | contract MockERC20 is ERC20 { 10 | constructor(string memory _name, string memory _symbol, uint8 _decimals) ERC20(_name, _symbol, _decimals) {} 11 | 12 | function mint(address account, uint256 amount) public { 13 | _mint(account, amount); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /test/mocks/MockPriceFeed.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.0; 3 | 4 | /** 5 | * @notice Mock of price feed contract 6 | */ 7 | contract MockPriceFeed { 8 | uint256 sqrtPrice; 9 | 10 | function setSqrtPrice(uint256 newSqrtPrice) external { 11 | sqrtPrice = newSqrtPrice; 12 | } 13 | 14 | function getSqrtPrice() external view returns (uint256) { 15 | return sqrtPrice; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "module": "commonjs", 5 | "esModuleInterop": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "strict": true, 8 | "skipLibCheck": true, 9 | "resolveJsonModule": true 10 | } 11 | } --------------------------------------------------------------------------------