├── .gitignore
├── README.md
├── discord-export
├── Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html
├── Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files
│ ├── 0-EB806.png
│ ├── 02410a37de8a54f8cfb7a8842a2dd162-6E861.png
│ ├── 078d230d31ca0bb3d39100300f4fc596-46D48.png
│ ├── 0ab6fddedfdca4dee0b54ab41ab4faad-C5611.png
│ ├── 0e5b3c84382435322161f927b720d8f6-770EF.png
│ ├── 1-B2132.png
│ ├── 1020149613317083187-A46C1.gif
│ ├── 1142-6C954
│ ├── 134a97341ef016a343ffb22a13e06e84-FD483.png
│ ├── 1704fbbc-f7ef-48d0-8be8-661b749588c3-5B085
│ ├── 1872daea5b6d79f4b4939a932c73ce9a-B5C46.png
│ ├── 18d5019615e942cceb72e45de2354bec-4A3FE.png
│ ├── 1a1171703c04b002b3daa2ee9a355509-36415.png
│ ├── 1d05ddeb307810a671649aacb6d17615cd28abfd-D2245
│ ├── 1f1e6-19170.svg
│ ├── 1f1e8-7D86E.svg
│ ├── 1f1ed-38085.svg
│ ├── 1f1f9-6373B.svg
│ ├── 1f37b-F650C.svg
│ ├── 1f389-5C738.svg
│ ├── 1f3c1-445DC.svg
│ ├── 1f3c6-621A1.svg
│ ├── 1f410-A0700.svg
│ ├── 1f43a-EB486.svg
│ ├── 1f440-6C64D.svg
│ ├── 1f441-405F2.svg
│ ├── 1f44b-8A059.svg
│ ├── 1f44d-1f3fb-ED2AA.svg
│ ├── 1f44d-27259.svg
│ ├── 1f44e-EE417.svg
│ ├── 1f468-200d-1f9b3-B0939.svg
│ ├── 1f4af-4CFF5.svg
│ ├── 1f4b8-E3468.svg
│ ├── 1f4c6-44E30.svg
│ ├── 1f4dc-AC641.svg
│ ├── 1f50d-195C0.svg
│ ├── 1f525-8FE4F.svg
│ ├── 1f600-F7528.svg
│ ├── 1f602-168C5.svg
│ ├── 1f605-42B43.svg
│ ├── 1f611-59459.svg
│ ├── 1f631-75E8D.svg
│ ├── 1f642-83E8A.svg
│ ├── 1f64c-7C820.svg
│ ├── 1f64f-22B8D.svg
│ ├── 1f680-A35CE.svg
│ ├── 1f6a8-A8AB3.svg
│ ├── 1f911-F346C.svg
│ ├── 1f91d-5A0F2.svg
│ ├── 1f923-5854E.svg
│ ├── 1f92f-FF4E0.svg
│ ├── 1f972-F415D.svg
│ ├── 1f9d0-3E117.svg
│ ├── 1f9d1-5BC80.svg
│ ├── 1fae1-B19DE.svg
│ ├── 2-ADBB4.png
│ ├── 2597cb21d82c26b88e957e31a590d01a-76EC9.png
│ ├── 261d-23B11.svg
│ ├── 2620-8F5D5.svg
│ ├── 2696-15F4A.svg
│ ├── 2764-A3D25.svg
│ ├── 2795-3358E.svg
│ ├── 2a9faff195fe333526cfe6ae6fce1420-927E9.png
│ ├── 30024f2eab00f1f2f2caee60d2b320a7-40E01.png
│ ├── 310bb104d49148a05def03fa039fef92-95023.png
│ ├── 369461a5da30ea6fc67a176824d36d24-6685A.png
│ ├── 394983eda2eb8faf909901fe09d16b4b-3AEDC.png
│ ├── 3b01c38b7c5b905fd8e8a1d72f7d7492-6DE9E.png
│ ├── 402b68164a51455e395a06ad04fc04b5-6707B.png
│ ├── 4fc87fcfb254cf58d3b7bab5f1844eb9-07408.png
│ ├── 4mXrdL-LPoOUcXXkBWL_sTRFEbdNOlOTJFEDjcpCDY-C1CCA
│ ├── 52e9f48660caaa7eb5b5b9bc07fb9c90-84C2E.png
│ ├── 53568a250c872b66dd7c38db3d1dabf1-FF443.png
│ ├── 55afac51a32db1ff015fd3a7d901e67a-52D14.png
│ ├── 568d22b97293cdd2d9b7006198d6adbc-9738F.png
│ ├── 61086c0c5f508b48fcb3464ff7a81b95-E52FB.png
│ ├── 6519fe644ecf954cfdf81ad4c9fbaad9-38A4D.png
│ ├── 65b1ff0d8f64222e1f5c187cc6b8c431-ACB29.png
│ ├── 67594ee4b4d1fc03bca468327a0d145b-0C614.png
│ ├── 7-D5DE7
│ ├── 76ea6f31b23e6cc4cd86da226b2ac8f1-E3A26.png
│ ├── 77dc0599f4f70d7334b16f899d3f960c-7562C.png
│ ├── 82287b4212a9854e5730462bd70677ae-68341.png
│ ├── 831237b2e0476001c05cd187b7730bf2-71DF9.png
│ ├── 851893827027075142-F23DF.png
│ ├── 851893827089727568-5FD38.png
│ ├── 851893827315826708-F59C0.png
│ ├── 910676187288846397-518CD.png
│ ├── 918262047433691247-911FE.png
│ ├── 93f060e04ae9095b71d564c85c70fa36-0C755.png
│ ├── 9503f567dabd2781b3d25827ceb83075-313E1.png
│ ├── 966eaf1aafcae6abcb9e0db823947e2f-042FD.png
│ ├── 970d2e2f00cd7ef2134a1a3f21326349-B9EEF.png
│ ├── 974453250864611368-838C9.gif
│ ├── 977133670429261884-CA8EA.png
│ ├── 98038cba6c6067a19a5fa47387cbf465-56EC2.png
│ ├── 9bf2181404e658cab4039c07df56213f-EC9DE.png
│ ├── C4-banner-7C19B.png
│ ├── Screenshot_129-E5A69.png
│ ├── Screenshot_2022-12-01_at_11.32.32-EC763.png
│ ├── Screenshot_2022-12-08_at_9.46.05_PM-B6C55.png
│ ├── Screenshot_20230202_140107-5FBCC.jpg
│ ├── THoYqKdTDIScpwuwknQH-AF5CF.png
│ ├── a_069e3296176905705d670a8eed99d124-30D96.gif
│ ├── a_9cb46a6a13f6e5f999c3e5260f076c6d-891ED.gif
│ ├── aave-v3-periphery-A16A4
│ ├── ad10fe9de00ee56927d3d938b1e78c2d-C5711.png
│ ├── ae70f07a06c1c7e983291bb14a1bed7f-1AD00.png
│ ├── b0573173c5d19db1fedcd94e629ac6e2-928C8.png
│ ├── b285c2da7bb0e38ca12d94c52612d852-EB61A.png
│ ├── b9c55592f5ed1abc67cdabe564ab3e86-EECF3.png
│ ├── bf8b223b536a4efab3ae0bc8171660a3-4574C.png
│ ├── c77e6149c42951f942cece450d55509e-A81F7.png
│ ├── c9cb30134c634c9e02d0c64df4922803-1AAF2.png
│ ├── cb23e87e4eb33d228ed3294f90188951-D6A20.png
│ ├── cc8374ec433b7627e95f914e72deb9a1-38C6A.png
│ ├── cc8374ec433b7627e95f914e72deb9a1-55C4B.png
│ ├── curious-say-67688.mp4
│ ├── d61e2dd3154e69042813d2049f3f6ae5-8F044.png
│ ├── d6f1f56d219902e83e7f37cc225ffd0f-D4278.png
│ ├── d7f484a47fb6614c58c23ee77db7c48d-CB343.png
│ ├── db6e41bc98856f0b66c82ddf629bb78d-59E00.png
│ ├── de45a316681c8e9460d05a404a340bc7-56358.png
│ ├── ec906ee29b2bacd49cd7e28a849ef04b-0F413.png
│ ├── ed9af6ea81f74c291336519fe6c28423-70EFF.png
│ ├── etherscan-logo-circle-A29B1.jpg
│ ├── f23ad9ac8a8cff191cda46d9910d19d4-A120C.png
│ ├── f7147bfadb72a2afd2401e5071b39609-FADA3.png
│ ├── fbdc31983ba42cf10c71c6d37f811278-30C31.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
│ ├── gist-og-image-17482.png
│ ├── hero_17p0jg-EC294.jpg
│ ├── highlight.min-D8D27.js
│ ├── image-36CD3.png
│ ├── image-D2916.png
│ ├── image-F33D5.png
│ ├── lottie.min-99657.js
│ ├── paraspace-core-9DC91
│ ├── solarized-dark.min-BA98F.css
│ └── w71MGZdoSOjqMQ5Mr0Vy-7C6B1.png
├── Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt
└── Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files
│ ├── 1142-6C954
│ ├── 1704fbbc-f7ef-48d0-8be8-661b749588c3-5B085
│ ├── 1d05ddeb307810a671649aacb6d17615cd28abfd-D2245
│ ├── 4mXrdL-LPoOUcXXkBWL_sTRFEbdNOlOTJFEDjcpCDY-C1CCA
│ ├── 7-D5DE7
│ ├── C4-banner-7C19B.png
│ ├── Screenshot_129-E5A69.png
│ ├── Screenshot_2022-12-01_at_11.32.32-EC763.png
│ ├── Screenshot_2022-12-08_at_9.46.05_PM-B6C55.png
│ ├── Screenshot_20230202_140107-5FBCC.jpg
│ ├── THoYqKdTDIScpwuwknQH-AF5CF.png
│ ├── aave-v3-periphery-A16A4
│ ├── curious-say-29EC7.png
│ ├── etherscan-logo-circle-A29B1.jpg
│ ├── gist-og-image-17482.png
│ ├── hero_17p0jg-EC294.jpg
│ ├── image-36CD3.png
│ ├── image-D2916.png
│ ├── image-F33D5.png
│ ├── paraspace-core-9DC91
│ └── w71MGZdoSOjqMQ5Mr0Vy-7C6B1.png
├── images
└── paraspace-architecture.png
└── paraspace-core
├── .commitlintrc.json
├── .dockerignore
├── .env.example
├── .eslintignore
├── .eslintrc.json
├── .github
├── pull_request_template.md
└── workflows
│ ├── ci.yml
│ ├── deploy.yml
│ ├── doc.yml
│ ├── typos.yml
│ └── verify.yml
├── .gitignore
├── .nvmrc
├── .prettierignore
├── .prettierrc.json
├── .solcover.js
├── .solhint.json
├── .solhintignore
├── .yarn
├── plugins
│ └── @yarnpkg
│ │ └── plugin-outdated.cjs
└── releases
│ └── yarn-3.2.1.cjs
├── .yarnrc.yml
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── audits
└── CERTIK-V1.pdf
├── codecov.yml
├── contracts
├── dependencies
│ ├── chainlink
│ │ └── AggregatorInterface.sol
│ ├── erc721-collections
│ │ └── IMoonBird.sol
│ ├── gnosis
│ │ └── contracts
│ │ │ └── GPv2SafeERC20.sol
│ ├── looksrare
│ │ └── contracts
│ │ │ ├── CurrencyManager.sol
│ │ │ ├── ExecutionManager.sol
│ │ │ ├── LooksRareExchange.sol
│ │ │ ├── RoyaltyFeeManager.sol
│ │ │ ├── TransferSelectorNFT.sol
│ │ │ ├── executionStrategies
│ │ │ ├── StrategyAnyItemFromCollectionForFixedPrice.sol
│ │ │ ├── StrategyAnyItemInASetForFixedPrice.sol
│ │ │ ├── StrategyDutchAuction.sol
│ │ │ ├── StrategyPrivateSale.sol
│ │ │ └── StrategyStandardSaleForFixedPrice.sol
│ │ │ ├── interfaces
│ │ │ ├── ICurrencyManager.sol
│ │ │ ├── IExecutionManager.sol
│ │ │ ├── IExecutionStrategy.sol
│ │ │ ├── ILooksRareExchange.sol
│ │ │ ├── IOwnable.sol
│ │ │ ├── IRoyaltyFeeManager.sol
│ │ │ ├── IRoyaltyFeeRegistry.sol
│ │ │ ├── ITransferManagerNFT.sol
│ │ │ ├── ITransferSelectorNFT.sol
│ │ │ └── IWETH.sol
│ │ │ ├── libraries
│ │ │ ├── OrderTypes.sol
│ │ │ └── SignatureChecker.sol
│ │ │ ├── royaltyFeeHelpers
│ │ │ ├── RoyaltyFeeRegistry.sol
│ │ │ └── RoyaltyFeeSetter.sol
│ │ │ └── transferManagers
│ │ │ ├── TransferManagerERC1155.sol
│ │ │ ├── TransferManagerERC721.sol
│ │ │ └── TransferManagerNonCompliantERC721.sol
│ ├── math
│ │ ├── PRBMath.sol
│ │ ├── PRBMathSD59x18.sol
│ │ ├── PRBMathUD60x18.sol
│ │ └── SqrtLib.sol
│ ├── openzeppelin
│ │ ├── contracts
│ │ │ ├── AccessControl.sol
│ │ │ ├── Address.sol
│ │ │ ├── Context.sol
│ │ │ ├── ECDSA.sol
│ │ │ ├── ERC1155.sol
│ │ │ ├── ERC1155Holder.sol
│ │ │ ├── ERC1155Receiver.sol
│ │ │ ├── ERC165.sol
│ │ │ ├── ERC20.sol
│ │ │ ├── ERC721.sol
│ │ │ ├── ERC721Enumerable.sol
│ │ │ ├── ERC721Holder.sol
│ │ │ ├── EnumerableSet.sol
│ │ │ ├── IAccessControl.sol
│ │ │ ├── IERC1155.sol
│ │ │ ├── IERC1155MetadataURI.sol
│ │ │ ├── IERC1155Receiver.sol
│ │ │ ├── IERC1271.sol
│ │ │ ├── IERC165.sol
│ │ │ ├── IERC20.sol
│ │ │ ├── IERC20Detailed.sol
│ │ │ ├── IERC20WithPermit.sol
│ │ │ ├── IERC2981.sol
│ │ │ ├── IERC721.sol
│ │ │ ├── IERC721Enumerable.sol
│ │ │ ├── IERC721Metadata.sol
│ │ │ ├── IERC721Receiver.sol
│ │ │ ├── IMintableERC20.sol
│ │ │ ├── ITransferHook.sol
│ │ │ ├── Math.sol
│ │ │ ├── MerkleProof.sol
│ │ │ ├── Ownable.sol
│ │ │ ├── Pausable.sol
│ │ │ ├── ReentrancyGuard.sol
│ │ │ ├── SafeCast.sol
│ │ │ ├── SafeERC20.sol
│ │ │ ├── SafeMath.sol
│ │ │ ├── Strings.sol
│ │ │ └── draft-IERC20Permit.sol
│ │ └── upgradeability
│ │ │ ├── AddressUpgradeable.sol
│ │ │ ├── AdminUpgradeabilityProxy.sol
│ │ │ ├── BaseAdminUpgradeabilityProxy.sol
│ │ │ ├── BaseUpgradeabilityProxy.sol
│ │ │ ├── ContextUpgradeable.sol
│ │ │ ├── IERC20Upgradeable.sol
│ │ │ ├── Initializable.sol
│ │ │ ├── InitializableAdminUpgradeabilityProxy.sol
│ │ │ ├── InitializableUpgradeabilityProxy.sol
│ │ │ ├── OwnableUpgradeable.sol
│ │ │ ├── PausableUpgradeable.sol
│ │ │ ├── Proxy.sol
│ │ │ ├── ReentrancyGuardUpgradeable.sol
│ │ │ ├── SafeERC20Upgradeable.sol
│ │ │ ├── UpgradeabilityProxy.sol
│ │ │ └── draft-IERC20PermitUpgradeable.sol
│ ├── seaport
│ │ └── contracts
│ │ │ ├── Seaport.sol
│ │ │ ├── conduit
│ │ │ ├── Conduit.sol
│ │ │ ├── ConduitController.sol
│ │ │ └── lib
│ │ │ │ ├── ConduitConstants.sol
│ │ │ │ ├── ConduitEnums.sol
│ │ │ │ └── ConduitStructs.sol
│ │ │ ├── helpers
│ │ │ ├── TransferHelper.sol
│ │ │ └── TransferHelperStructs.sol
│ │ │ ├── interfaces
│ │ │ ├── AbridgedTokenInterfaces.sol
│ │ │ ├── AmountDerivationErrors.sol
│ │ │ ├── ConduitControllerInterface.sol
│ │ │ ├── ConduitInterface.sol
│ │ │ ├── ConsiderationEventsAndErrors.sol
│ │ │ ├── ConsiderationInterface.sol
│ │ │ ├── CriteriaResolutionErrors.sol
│ │ │ ├── EIP1271Interface.sol
│ │ │ ├── FulfillmentApplicationErrors.sol
│ │ │ ├── IERC721Receiver.sol
│ │ │ ├── ImmutableCreate2FactoryInterface.sol
│ │ │ ├── ReentrancyErrors.sol
│ │ │ ├── SeaportInterface.sol
│ │ │ ├── SignatureVerificationErrors.sol
│ │ │ ├── TokenTransferrerErrors.sol
│ │ │ ├── TransferHelperErrors.sol
│ │ │ ├── TransferHelperInterface.sol
│ │ │ ├── ZoneInteractionErrors.sol
│ │ │ └── ZoneInterface.sol
│ │ │ ├── lib
│ │ │ ├── AmountDeriver.sol
│ │ │ ├── Assertions.sol
│ │ │ ├── BasicOrderFulfiller.sol
│ │ │ ├── Consideration.sol
│ │ │ ├── ConsiderationBase.sol
│ │ │ ├── ConsiderationConstants.sol
│ │ │ ├── ConsiderationEnums.sol
│ │ │ ├── ConsiderationStructs.sol
│ │ │ ├── CounterManager.sol
│ │ │ ├── CriteriaResolution.sol
│ │ │ ├── Executor.sol
│ │ │ ├── FulfillmentApplier.sol
│ │ │ ├── GettersAndDerivers.sol
│ │ │ ├── LowLevelHelpers.sol
│ │ │ ├── OrderCombiner.sol
│ │ │ ├── OrderFulfiller.sol
│ │ │ ├── OrderValidator.sol
│ │ │ ├── ReentrancyGuard.sol
│ │ │ ├── SignatureVerification.sol
│ │ │ ├── TokenTransferrer.sol
│ │ │ ├── TokenTransferrerConstants.sol
│ │ │ ├── Verifiers.sol
│ │ │ └── ZoneInteraction.sol
│ │ │ └── zones
│ │ │ ├── PausableZone.sol
│ │ │ ├── PausableZoneController.sol
│ │ │ └── interfaces
│ │ │ ├── PausableZoneControllerInterface.sol
│ │ │ ├── PausableZoneEventsAndErrors.sol
│ │ │ └── PausableZoneInterface.sol
│ ├── uniswap
│ │ ├── IERC721Permit.sol
│ │ ├── IMulticall.sol
│ │ ├── INonfungiblePositionManager.sol
│ │ ├── IPeripheryImmutableState.sol
│ │ ├── IPeripheryPayments.sol
│ │ ├── IPoolInitializer.sol
│ │ ├── IUniswapV3Factory.sol
│ │ ├── IUniswapV3PoolState.sol
│ │ ├── LiquidityAmounts.sol
│ │ ├── PoolAddress.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
│ │ │ └── UnsafeMath.sol
│ ├── univ3
│ │ ├── NoDelegateCall.sol
│ │ ├── UniswapV3Factory.sol
│ │ ├── UniswapV3Pool.sol
│ │ ├── UniswapV3PoolDeployer.sol
│ │ ├── interfaces
│ │ │ ├── IERC20Minimal.sol
│ │ │ ├── ISwapRouter.sol
│ │ │ ├── IUniswapV3Factory.sol
│ │ │ ├── IUniswapV3Pool.sol
│ │ │ ├── IUniswapV3PoolDeployer.sol
│ │ │ ├── LICENSE
│ │ │ ├── callback
│ │ │ │ ├── IUniswapV3FlashCallback.sol
│ │ │ │ ├── IUniswapV3MintCallback.sol
│ │ │ │ └── IUniswapV3SwapCallback.sol
│ │ │ └── pool
│ │ │ │ ├── IUniswapV3PoolActions.sol
│ │ │ │ ├── IUniswapV3PoolDerivedState.sol
│ │ │ │ ├── IUniswapV3PoolEvents.sol
│ │ │ │ ├── IUniswapV3PoolImmutables.sol
│ │ │ │ ├── IUniswapV3PoolOwnerActions.sol
│ │ │ │ └── IUniswapV3PoolState.sol
│ │ └── libraries
│ │ │ ├── BitMath.sol
│ │ │ ├── FixedPoint128.sol
│ │ │ ├── FixedPoint96.sol
│ │ │ ├── FullMath.sol
│ │ │ ├── LICENSE
│ │ │ ├── LICENSE_MIT
│ │ │ ├── LiquidityMath.sol
│ │ │ ├── LowGasSafeMath.sol
│ │ │ ├── Oracle.sol
│ │ │ ├── Position.sol
│ │ │ ├── SafeCast.sol
│ │ │ ├── SqrtPriceMath.sol
│ │ │ ├── SwapMath.sol
│ │ │ ├── Tick.sol
│ │ │ ├── TickBitmap.sol
│ │ │ ├── TickMath.sol
│ │ │ ├── TransferHelper.sol
│ │ │ └── UnsafeMath.sol
│ ├── weth
│ │ └── WETH9.sol
│ ├── x2y2
│ │ └── contracts
│ │ │ ├── ERC721Delegate.sol
│ │ │ ├── IDelegate.sol
│ │ │ ├── IWETHUpgradable.sol
│ │ │ ├── MarketConsts.sol
│ │ │ └── X2Y2_r1.sol
│ └── yoga-labs
│ │ └── ApeCoinStaking.sol
├── deployments
│ └── ReservesSetupHelper.sol
├── interfaces
│ ├── IACLManager.sol
│ ├── IAToken.sol
│ ├── IAtomicPriceAggregator.sol
│ ├── IAuctionableERC721.sol
│ ├── ICollateralizableERC721.sol
│ ├── ICreditDelegationToken.sol
│ ├── IDelegationToken.sol
│ ├── IEACAggregatorProxy.sol
│ ├── IERC20WithPermit.sol
│ ├── IInitializableDebtToken.sol
│ ├── IInitializableNToken.sol
│ ├── IInitializablePToken.sol
│ ├── ILido.sol
│ ├── IMarketplace.sol
│ ├── INToken.sol
│ ├── INTokenApeStaking.sol
│ ├── INTokenUniswapV3.sol
│ ├── IPToken.sol
│ ├── IParaProxy.sol
│ ├── IParaSpaceOracle.sol
│ ├── IPool.sol
│ ├── IPoolAddressesProvider.sol
│ ├── IPoolAddressesProviderRegistry.sol
│ ├── IPoolApeStaking.sol
│ ├── IPoolConfigurator.sol
│ ├── IPoolCore.sol
│ ├── IPoolMarketplace.sol
│ ├── IPoolParameters.sol
│ ├── IPriceOracle.sol
│ ├── IPriceOracleGetter.sol
│ ├── IPriceOracleSentinel.sol
│ ├── IProtocolDataProvider.sol
│ ├── IReserveAuctionStrategy.sol
│ ├── IReserveInterestRateStrategy.sol
│ ├── IRewardController.sol
│ ├── IScaledBalanceToken.sol
│ ├── ISequencerOracle.sol
│ ├── IToken.sol
│ ├── IUniswapV3OracleWrapper.sol
│ ├── IUniswapV3PositionInfoProvider.sol
│ ├── IVariableDebtToken.sol
│ ├── IX2Y2.sol
│ ├── IXTokenType.sol
│ └── LICENSE.md
├── misc
│ ├── ERC721OracleWrapper.sol
│ ├── NFTFloorOracle.sol
│ ├── ParaSpaceFallbackOracle.sol
│ ├── ParaSpaceOracle.sol
│ ├── ProtocolDataProvider.sol
│ ├── UniswapV3OracleWrapper.sol
│ ├── flashclaim
│ │ ├── AirdropFlashClaimReceiver.sol
│ │ └── UserFlashclaimRegistry.sol
│ ├── interfaces
│ │ ├── IFlashClaimReceiver.sol
│ │ ├── INFTFloorOracle.sol
│ │ ├── INFTOracle.sol
│ │ ├── IPunks.sol
│ │ ├── IUniswapV2Factory.sol
│ │ ├── IUniswapV2Pair.sol
│ │ ├── IUniswapV2Router01.sol
│ │ ├── IUserFlashclaimRegistry.sol
│ │ ├── IWETH.sol
│ │ ├── IWrappedPunks.sol
│ │ └── LICENSE.md
│ └── marketplaces
│ │ ├── LooksRareAdapter.sol
│ │ ├── SeaportAdapter.sol
│ │ └── X2Y2Adapter.sol
├── mocks
│ ├── helpers
│ │ ├── MockIncentivesController.sol
│ │ ├── MockPeripheryContract.sol
│ │ ├── MockReserveConfiguration.sol
│ │ └── SelfDestructTransfer.sol
│ ├── oracle
│ │ ├── CLAggregators
│ │ │ └── MockAggregator.sol
│ │ ├── PriceOracle.sol
│ │ └── SequencerOracle.sol
│ ├── tests
│ │ ├── MockAirdropProject.sol
│ │ ├── MockReserveAuctionStrategy.sol
│ │ ├── MockReserveInterestRateStrategy.sol
│ │ └── WadRayMathWrapper.sol
│ ├── tokens
│ │ ├── AirdropMintableERC721.sol
│ │ ├── Azuki.sol
│ │ ├── BAYC.sol
│ │ ├── CloneX.sol
│ │ ├── CryptoPunksMarket.sol
│ │ ├── DOODLES.sol
│ │ ├── Land.sol
│ │ ├── MAYC.sol
│ │ ├── Meebits.sol
│ │ ├── MintableDelegationERC20.sol
│ │ ├── MintableERC1155.sol
│ │ ├── MintableERC20.sol
│ │ ├── MintableERC721.sol
│ │ ├── MockAToken.sol
│ │ ├── MockTokenFaucet.sol
│ │ ├── Moonbirds.sol
│ │ ├── WETH9Mocked.sol
│ │ ├── WrappedPunk
│ │ │ ├── ICryptoPunk.sol
│ │ │ ├── UserProxy.sol
│ │ │ └── WPunk.sol
│ │ ├── dependencies
│ │ │ └── ERC721A.sol
│ │ └── stETH.sol
│ └── upgradeability
│ │ ├── MockInitializableImplementation.sol
│ │ ├── MockNToken.sol
│ │ ├── MockPToken.sol
│ │ ├── MockPoolCore.sol
│ │ └── MockVariableDebtToken.sol
├── protocol
│ ├── configuration
│ │ ├── ACLManager.sol
│ │ ├── PoolAddressesProvider.sol
│ │ ├── PoolAddressesProviderRegistry.sol
│ │ └── PriceOracleSentinel.sol
│ ├── libraries
│ │ ├── configuration
│ │ │ ├── ReserveConfiguration.sol
│ │ │ └── UserConfiguration.sol
│ │ ├── helpers
│ │ │ ├── Errors.sol
│ │ │ └── Helpers.sol
│ │ ├── logic
│ │ │ ├── AuctionLogic.sol
│ │ │ ├── BorrowLogic.sol
│ │ │ ├── ConfiguratorLogic.sol
│ │ │ ├── FlashClaimLogic.sol
│ │ │ ├── GenericLogic.sol
│ │ │ ├── LiquidationLogic.sol
│ │ │ ├── MarketplaceLogic.sol
│ │ │ ├── PoolLogic.sol
│ │ │ ├── ReserveLogic.sol
│ │ │ ├── SupplyLogic.sol
│ │ │ └── ValidationLogic.sol
│ │ ├── math
│ │ │ ├── MathUtils.sol
│ │ │ ├── PercentageMath.sol
│ │ │ └── WadRayMath.sol
│ │ ├── paraspace-upgradeability
│ │ │ ├── BaseImmutableAdminUpgradeabilityProxy.sol
│ │ │ ├── InitializableImmutableAdminUpgradeabilityProxy.sol
│ │ │ ├── ParaProxy.sol
│ │ │ ├── ParaReentrancyGuard.sol
│ │ │ ├── ParaVersionedInitializable.sol
│ │ │ ├── VersionedInitializable.sol
│ │ │ └── lib
│ │ │ │ └── ParaProxyLib.sol
│ │ └── types
│ │ │ ├── ConfiguratorInputTypes.sol
│ │ │ └── DataTypes.sol
│ ├── pool
│ │ ├── DefaultReserveAuctionStrategy.sol
│ │ ├── DefaultReserveInterestRateStrategy.sol
│ │ ├── PoolApeStaking.sol
│ │ ├── PoolConfigurator.sol
│ │ ├── PoolCore.sol
│ │ ├── PoolMarketplace.sol
│ │ ├── PoolParameters.sol
│ │ └── PoolStorage.sol
│ └── tokenization
│ │ ├── ATokenDebtToken.sol
│ │ ├── DelegationAwarePToken.sol
│ │ ├── NToken.sol
│ │ ├── NTokenApeStaking.sol
│ │ ├── NTokenBAYC.sol
│ │ ├── NTokenMAYC.sol
│ │ ├── NTokenMoonBirds.sol
│ │ ├── NTokenUniswapV3.sol
│ │ ├── PToken.sol
│ │ ├── PTokenAToken.sol
│ │ ├── PTokenSApe.sol
│ │ ├── PTokenStETH.sol
│ │ ├── RebasingDebtToken.sol
│ │ ├── RebasingPToken.sol
│ │ ├── StETHDebtToken.sol
│ │ ├── VariableDebtToken.sol
│ │ ├── base
│ │ ├── DebtTokenBase.sol
│ │ ├── EIP712Base.sol
│ │ ├── IncentivizedERC20.sol
│ │ ├── MintableIncentivizedERC20.sol
│ │ ├── MintableIncentivizedERC721.sol
│ │ └── ScaledBalanceTokenBaseERC20.sol
│ │ └── libraries
│ │ ├── ApeStakingLogic.sol
│ │ └── MintableERC721Logic.sol
└── ui
│ ├── LICENSE.md
│ ├── UiIncentiveDataProvider.sol
│ ├── UiPoolDataProvider.sol
│ ├── WETHGateway.sol
│ ├── WPunkGateway.sol
│ ├── WalletBalanceProvider.sol
│ ├── interfaces
│ ├── IEACAggregatorProxy.sol
│ ├── IERC20DetailedBytes.sol
│ ├── IRewardsController.sol
│ ├── IRewardsDistributor.sol
│ ├── ITransferStrategyBase.sol
│ ├── IUiIncentiveDataProvider.sol
│ ├── IUiPoolDataProvider.sol
│ ├── IWETHGateway.sol
│ ├── IWPunkGateway.sol
│ └── LICENSE.md
│ └── libraries
│ ├── LICENSE.md
│ └── RewardsDataTypes.sol
├── deploy
├── .gitignore
├── evm-wallets.ts
├── helper-hardhat-config.ts
├── helpers
│ ├── README.md
│ ├── constants.ts
│ ├── contracts-deployments.ts
│ ├── contracts-getters.ts
│ ├── contracts-helpers.ts
│ ├── db-adapter.ts
│ ├── defender-utils.ts
│ ├── eip-712-types
│ │ ├── credit.ts
│ │ └── domain.ts
│ ├── etherscan-verification.ts
│ ├── hardhat-constants.ts
│ ├── init-helpers.ts
│ ├── misc-utils.ts
│ ├── oracles-helpers.ts
│ ├── seaport-helpers
│ │ ├── criteria.ts
│ │ ├── eip-712-types
│ │ │ ├── domain.js
│ │ │ └── order.js
│ │ ├── encoding.ts
│ │ ├── events.ts
│ │ ├── seeded-rng.js
│ │ └── types.ts
│ ├── tenderly-utils.ts
│ ├── types.ts
│ └── x2y2-helpers.ts
├── market-config
│ ├── auctionStrategies.ts
│ ├── index.ts
│ ├── mocks.ts
│ ├── oracle.ts
│ ├── rateStrategies.ts
│ └── reservesConfigs.ts
├── tasks
│ ├── README.md
│ ├── deployments
│ │ ├── dev
│ │ │ ├── 1.ad-hoc.ts
│ │ │ └── 2.transfer-tokens.ts
│ │ ├── full-deployment
│ │ │ ├── steps
│ │ │ │ ├── 00_deleteDb.ts
│ │ │ │ ├── 01_ERC20Tokens.ts
│ │ │ │ ├── 02_ERC721Tokens.ts
│ │ │ │ ├── 03_faucet.ts
│ │ │ │ ├── 04_addressProvider.ts
│ │ │ │ ├── 05_aclManager.ts
│ │ │ │ ├── 06_pool.ts
│ │ │ │ ├── 07_poolConfigurator.ts
│ │ │ │ ├── 08_reservesSetupHelper.ts
│ │ │ │ ├── 09_fallbackOracle.ts
│ │ │ │ ├── 10_allAggregators.ts
│ │ │ │ ├── 11_allReserves.ts
│ │ │ │ ├── 12_uiIncentiveDataProvider.ts
│ │ │ │ ├── 13_wethGateway.ts
│ │ │ │ ├── 14_punkGateway.ts
│ │ │ │ ├── 15_seaport.ts
│ │ │ │ ├── 16_looksrare.ts
│ │ │ │ ├── 17_x2y2.ts
│ │ │ │ ├── 18_flashClaimRegistry.ts
│ │ │ │ ├── 19_renounceOwnership.ts
│ │ │ │ ├── after-all.ts
│ │ │ │ ├── before-all.ts
│ │ │ │ └── index.ts
│ │ │ └── token_faucet.ts
│ │ └── upgrade
│ │ │ ├── upgrade.ts
│ │ │ ├── upgrade_ntoken.ts
│ │ │ ├── upgrade_ntoken_moonbirds.ts
│ │ │ ├── upgrade_ntoken_uniswapv3.ts
│ │ │ └── upgrade_ptoken.ts
│ └── misc
│ │ └── set-bre.ts
└── wallets.ts
├── docker-compose.yml
├── docs
└── DEVELOPER-GUIDE.md
├── foundry.toml
├── foundry_test
└── NFTFloorOracle.t.sol
├── hardhat.config.ts
├── package.json
├── rust-toolchain
├── tasks
└── deployments
│ ├── 00_deleteDb.ts
│ ├── 01_ERC20Tokens.ts
│ ├── 02_ERC721Tokens.ts
│ ├── 03_faucet.ts
│ ├── 04_addressProvider.ts
│ ├── 05_aclManager.ts
│ ├── 06_pool.ts
│ ├── 07_poolConfigurator.ts
│ ├── 08_reservesSetupHelper.ts
│ ├── 09_fallbackOracle.ts
│ ├── 10_allAggregators.ts
│ ├── 11_allReserves.ts
│ ├── 12_uiIncentiveDataProvider.ts
│ ├── 13_wethGateway.ts
│ ├── 14_punkGateway.ts
│ ├── 15_seaport.ts
│ ├── 16_looksrare.ts
│ ├── 17_x2y2.ts
│ ├── 18_flashClaimRegistry.ts
│ ├── 19_renounceOwnership.ts
│ ├── all.ts
│ ├── printContracts.ts
│ ├── upgrade.ts
│ └── verifyContracts.ts
├── test
├── _base_acl_manager.spec.ts
├── _base_addresses_provider.spec.ts
├── _base_addresses_provider_registry.spec.ts
├── _base_auction_strategy.spec.ts
├── _base_interest_rate_strategy.spec.ts
├── _base_reserve_configuration.spec.ts
├── _base_upgradeability.spec.ts
├── _base_wadraymath.spec.ts
├── _data_providers.spec.ts
├── _gateway_punk.spec.ts
├── _gateway_weth.spec.ts
├── _mock_token_faucet.spec.ts
├── _oracle_aggregator.spec.ts
├── _oracle_nft_floor_price.spec.ts
├── _oracle_sentinel.spec.ts
├── _oracle_uniswapv3.spec.ts
├── _pool_ape_staking.spec.ts
├── _pool_configurator.spec.ts
├── _pool_core_erc20_borrow.spec.ts
├── _pool_core_erc20_liquidation.spec.ts
├── _pool_core_erc20_repay.spec.ts
├── _pool_core_erc20_supply.spec.ts
├── _pool_core_erc20_withdraw.spec.ts
├── _pool_core_erc721_auction_liquidation.spec.ts
├── _pool_core_erc721_liquidation.spec.ts
├── _pool_core_erc721_supply.spec.ts
├── _pool_core_erc721_withdraw.spec.ts
├── _pool_core_flash_claim.spec.ts
├── _pool_core_use_as_collateral.spec.ts
├── _pool_initialization.spec.ts
├── _pool_marketplace_accept_bid_with_credit.spec.ts
├── _pool_marketplace_buy_with_credit.spec.ts
├── _pool_parameters_mint_to_treasury.spec.ts
├── _pool_parameters_rescue_tokens.spec.ts
├── _pool_pausable.spec.ts
├── _sape_pool_operation.spec.ts
├── _uniswap-v3-oracle.spec.ts
├── _uniswap_ltv_validation.spec.ts
├── _uniswapv3_pool_operation.spec.ts
├── _uniswapv3_position_control.spec.ts
├── _xtoken_ntoken.spec.ts
├── _xtoken_ntoken_atomic-token-balance_limit.spec.ts
├── _xtoken_ntoken_moonbirds.spec.ts
├── _xtoken_ntoken_uniswapv3.spec.ts
├── _xtoken_ptoken.spec.ts
├── _xtoken_ptoken_rebasing.spec.ts
├── _xtoken_variable_debt_token.spec.ts
├── emptyrun.coverage.spec.ts
├── helpers
│ ├── actions.ts
│ ├── make-suite.ts
│ ├── marketplace-helper.ts
│ ├── scenario-engine.ts
│ ├── scenarios
│ │ ├── borrow-repay-variable.json
│ │ ├── borrow-repayWithPermit-variable.json
│ │ ├── credit-delegation.json
│ │ ├── deposit.json
│ │ ├── set-use-as-collateral.json
│ │ ├── withdraw-negatives.json
│ │ └── withdraw.json
│ ├── setup-env.ts
│ ├── snapshot-manager.ts
│ ├── uniswapv3-helper.ts
│ ├── utils
│ │ ├── calculations.ts
│ │ ├── funds.ts
│ │ ├── helpers.ts
│ │ ├── interfaces
│ │ │ └── index.ts
│ │ ├── positions.ts
│ │ ├── wadraymath.ts
│ │ └── wallets.ts
│ └── validated-steps.ts
└── scenario.spec.ts
├── tsconfig.json
├── typos.toml
└── yarn.lock
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/0-EB806.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/0-EB806.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/02410a37de8a54f8cfb7a8842a2dd162-6E861.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/02410a37de8a54f8cfb7a8842a2dd162-6E861.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/078d230d31ca0bb3d39100300f4fc596-46D48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/078d230d31ca0bb3d39100300f4fc596-46D48.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/0ab6fddedfdca4dee0b54ab41ab4faad-C5611.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/0ab6fddedfdca4dee0b54ab41ab4faad-C5611.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/0e5b3c84382435322161f927b720d8f6-770EF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/0e5b3c84382435322161f927b720d8f6-770EF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1-B2132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1-B2132.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1020149613317083187-A46C1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1020149613317083187-A46C1.gif
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1142-6C954:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1142-6C954
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/134a97341ef016a343ffb22a13e06e84-FD483.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/134a97341ef016a343ffb22a13e06e84-FD483.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1704fbbc-f7ef-48d0-8be8-661b749588c3-5B085:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1704fbbc-f7ef-48d0-8be8-661b749588c3-5B085
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1872daea5b6d79f4b4939a932c73ce9a-B5C46.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1872daea5b6d79f4b4939a932c73ce9a-B5C46.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/18d5019615e942cceb72e45de2354bec-4A3FE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/18d5019615e942cceb72e45de2354bec-4A3FE.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1a1171703c04b002b3daa2ee9a355509-36415.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1a1171703c04b002b3daa2ee9a355509-36415.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1d05ddeb307810a671649aacb6d17615cd28abfd-D2245:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1d05ddeb307810a671649aacb6d17615cd28abfd-D2245
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f1e6-19170.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f1e8-7D86E.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f1ed-38085.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f1f9-6373B.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f3c6-621A1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f410-A0700.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f440-6C64D.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f441-405F2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f468-200d-1f9b3-B0939.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f4dc-AC641.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f50d-195C0.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f525-8FE4F.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f600-F7528.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f605-42B43.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f611-59459.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f642-83E8A.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f680-A35CE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f6a8-A8AB3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/1f972-F415D.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/2-ADBB4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/2-ADBB4.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/2597cb21d82c26b88e957e31a590d01a-76EC9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/2597cb21d82c26b88e957e31a590d01a-76EC9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/2764-A3D25.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/2795-3358E.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/2a9faff195fe333526cfe6ae6fce1420-927E9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/2a9faff195fe333526cfe6ae6fce1420-927E9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/30024f2eab00f1f2f2caee60d2b320a7-40E01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/30024f2eab00f1f2f2caee60d2b320a7-40E01.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/310bb104d49148a05def03fa039fef92-95023.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/310bb104d49148a05def03fa039fef92-95023.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/369461a5da30ea6fc67a176824d36d24-6685A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/369461a5da30ea6fc67a176824d36d24-6685A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/394983eda2eb8faf909901fe09d16b4b-3AEDC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/394983eda2eb8faf909901fe09d16b4b-3AEDC.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/3b01c38b7c5b905fd8e8a1d72f7d7492-6DE9E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/3b01c38b7c5b905fd8e8a1d72f7d7492-6DE9E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/402b68164a51455e395a06ad04fc04b5-6707B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/402b68164a51455e395a06ad04fc04b5-6707B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/4fc87fcfb254cf58d3b7bab5f1844eb9-07408.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/4fc87fcfb254cf58d3b7bab5f1844eb9-07408.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/4mXrdL-LPoOUcXXkBWL_sTRFEbdNOlOTJFEDjcpCDY-C1CCA:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/4mXrdL-LPoOUcXXkBWL_sTRFEbdNOlOTJFEDjcpCDY-C1CCA
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/52e9f48660caaa7eb5b5b9bc07fb9c90-84C2E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/52e9f48660caaa7eb5b5b9bc07fb9c90-84C2E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/53568a250c872b66dd7c38db3d1dabf1-FF443.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/53568a250c872b66dd7c38db3d1dabf1-FF443.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/55afac51a32db1ff015fd3a7d901e67a-52D14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/55afac51a32db1ff015fd3a7d901e67a-52D14.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/568d22b97293cdd2d9b7006198d6adbc-9738F.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/568d22b97293cdd2d9b7006198d6adbc-9738F.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/61086c0c5f508b48fcb3464ff7a81b95-E52FB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/61086c0c5f508b48fcb3464ff7a81b95-E52FB.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/6519fe644ecf954cfdf81ad4c9fbaad9-38A4D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/6519fe644ecf954cfdf81ad4c9fbaad9-38A4D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/65b1ff0d8f64222e1f5c187cc6b8c431-ACB29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/65b1ff0d8f64222e1f5c187cc6b8c431-ACB29.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/67594ee4b4d1fc03bca468327a0d145b-0C614.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/67594ee4b4d1fc03bca468327a0d145b-0C614.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/7-D5DE7:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/7-D5DE7
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/76ea6f31b23e6cc4cd86da226b2ac8f1-E3A26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/76ea6f31b23e6cc4cd86da226b2ac8f1-E3A26.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/77dc0599f4f70d7334b16f899d3f960c-7562C.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/77dc0599f4f70d7334b16f899d3f960c-7562C.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/82287b4212a9854e5730462bd70677ae-68341.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/82287b4212a9854e5730462bd70677ae-68341.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/831237b2e0476001c05cd187b7730bf2-71DF9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/831237b2e0476001c05cd187b7730bf2-71DF9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/851893827027075142-F23DF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/851893827027075142-F23DF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/851893827089727568-5FD38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/851893827089727568-5FD38.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/851893827315826708-F59C0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/851893827315826708-F59C0.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/910676187288846397-518CD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/910676187288846397-518CD.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/918262047433691247-911FE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/918262047433691247-911FE.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/93f060e04ae9095b71d564c85c70fa36-0C755.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/93f060e04ae9095b71d564c85c70fa36-0C755.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/9503f567dabd2781b3d25827ceb83075-313E1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/9503f567dabd2781b3d25827ceb83075-313E1.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/966eaf1aafcae6abcb9e0db823947e2f-042FD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/966eaf1aafcae6abcb9e0db823947e2f-042FD.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/970d2e2f00cd7ef2134a1a3f21326349-B9EEF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/970d2e2f00cd7ef2134a1a3f21326349-B9EEF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/974453250864611368-838C9.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/974453250864611368-838C9.gif
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/977133670429261884-CA8EA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/977133670429261884-CA8EA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/98038cba6c6067a19a5fa47387cbf465-56EC2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/98038cba6c6067a19a5fa47387cbf465-56EC2.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/9bf2181404e658cab4039c07df56213f-EC9DE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/9bf2181404e658cab4039c07df56213f-EC9DE.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/C4-banner-7C19B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/C4-banner-7C19B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/Screenshot_129-E5A69.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/Screenshot_129-E5A69.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/Screenshot_2022-12-01_at_11.32.32-EC763.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/Screenshot_2022-12-01_at_11.32.32-EC763.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/Screenshot_2022-12-08_at_9.46.05_PM-B6C55.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/Screenshot_2022-12-08_at_9.46.05_PM-B6C55.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/Screenshot_20230202_140107-5FBCC.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/Screenshot_20230202_140107-5FBCC.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/THoYqKdTDIScpwuwknQH-AF5CF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/THoYqKdTDIScpwuwknQH-AF5CF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/a_069e3296176905705d670a8eed99d124-30D96.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/a_069e3296176905705d670a8eed99d124-30D96.gif
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/a_9cb46a6a13f6e5f999c3e5260f076c6d-891ED.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/a_9cb46a6a13f6e5f999c3e5260f076c6d-891ED.gif
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/aave-v3-periphery-A16A4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/aave-v3-periphery-A16A4
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ad10fe9de00ee56927d3d938b1e78c2d-C5711.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ad10fe9de00ee56927d3d938b1e78c2d-C5711.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ae70f07a06c1c7e983291bb14a1bed7f-1AD00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ae70f07a06c1c7e983291bb14a1bed7f-1AD00.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/b0573173c5d19db1fedcd94e629ac6e2-928C8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/b0573173c5d19db1fedcd94e629ac6e2-928C8.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/b285c2da7bb0e38ca12d94c52612d852-EB61A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/b285c2da7bb0e38ca12d94c52612d852-EB61A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/b9c55592f5ed1abc67cdabe564ab3e86-EECF3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/b9c55592f5ed1abc67cdabe564ab3e86-EECF3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/bf8b223b536a4efab3ae0bc8171660a3-4574C.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/bf8b223b536a4efab3ae0bc8171660a3-4574C.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/c77e6149c42951f942cece450d55509e-A81F7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/c77e6149c42951f942cece450d55509e-A81F7.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/c9cb30134c634c9e02d0c64df4922803-1AAF2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/c9cb30134c634c9e02d0c64df4922803-1AAF2.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/cb23e87e4eb33d228ed3294f90188951-D6A20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/cb23e87e4eb33d228ed3294f90188951-D6A20.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/cc8374ec433b7627e95f914e72deb9a1-38C6A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/cc8374ec433b7627e95f914e72deb9a1-38C6A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/cc8374ec433b7627e95f914e72deb9a1-55C4B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/cc8374ec433b7627e95f914e72deb9a1-55C4B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/curious-say-67688.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/curious-say-67688.mp4
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/d61e2dd3154e69042813d2049f3f6ae5-8F044.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/d61e2dd3154e69042813d2049f3f6ae5-8F044.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/d6f1f56d219902e83e7f37cc225ffd0f-D4278.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/d6f1f56d219902e83e7f37cc225ffd0f-D4278.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/d7f484a47fb6614c58c23ee77db7c48d-CB343.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/d7f484a47fb6614c58c23ee77db7c48d-CB343.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/db6e41bc98856f0b66c82ddf629bb78d-59E00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/db6e41bc98856f0b66c82ddf629bb78d-59E00.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/de45a316681c8e9460d05a404a340bc7-56358.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/de45a316681c8e9460d05a404a340bc7-56358.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ec906ee29b2bacd49cd7e28a849ef04b-0F413.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ec906ee29b2bacd49cd7e28a849ef04b-0F413.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ed9af6ea81f74c291336519fe6c28423-70EFF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ed9af6ea81f74c291336519fe6c28423-70EFF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/etherscan-logo-circle-A29B1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/etherscan-logo-circle-A29B1.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/f23ad9ac8a8cff191cda46d9910d19d4-A120C.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/f23ad9ac8a8cff191cda46d9910d19d4-A120C.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/f7147bfadb72a2afd2401e5071b39609-FADA3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/f7147bfadb72a2afd2401e5071b39609-FADA3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/fbdc31983ba42cf10c71c6d37f811278-30C31.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/fbdc31983ba42cf10c71c6d37f811278-30C31.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-400-E988B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-400-E988B.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-500-0777F.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-500-0777F.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-600-CB411.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-600-CB411.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-700-891AC.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-700-891AC.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-800-D36B0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-italic-800-D36B0.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-400-1456D.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-400-1456D.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-500-89CE5.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-500-89CE5.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-600-C1EA8.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-600-C1EA8.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-700-1949A.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-700-1949A.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-800-58487.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/ggsans-normal-800-58487.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/gist-og-image-17482.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/gist-og-image-17482.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/hero_17p0jg-EC294.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/hero_17p0jg-EC294.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/image-36CD3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/image-36CD3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/image-D2916.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/image-D2916.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/image-F33D5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/image-F33D5.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/paraspace-core-9DC91:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/paraspace-core-9DC91
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/solarized-dark.min-BA98F.css:
--------------------------------------------------------------------------------
1 | .hljs{display:block;overflow-x:auto;padding:.5em;background:#002b36;color:#839496}.hljs-comment,.hljs-quote{color:#586e75}.hljs-keyword,.hljs-selector-tag,.hljs-addition{color:#859900}.hljs-number,.hljs-string,.hljs-meta .hljs-meta-string,.hljs-literal,.hljs-doctag,.hljs-regexp{color:#2aa198}.hljs-title,.hljs-section,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#268bd2}.hljs-attribute,.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-class .hljs-title,.hljs-type{color:#b58900}.hljs-symbol,.hljs-bullet,.hljs-subst,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-link{color:#cb4b16}.hljs-built_in,.hljs-deletion{color:#dc322f}.hljs-formula{background:#073642}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/w71MGZdoSOjqMQ5Mr0Vy-7C6B1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].html_Files/w71MGZdoSOjqMQ5Mr0Vy-7C6B1.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/1142-6C954:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/1142-6C954
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/1704fbbc-f7ef-48d0-8be8-661b749588c3-5B085:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/1704fbbc-f7ef-48d0-8be8-661b749588c3-5B085
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/1d05ddeb307810a671649aacb6d17615cd28abfd-D2245:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/1d05ddeb307810a671649aacb6d17615cd28abfd-D2245
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/4mXrdL-LPoOUcXXkBWL_sTRFEbdNOlOTJFEDjcpCDY-C1CCA:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/4mXrdL-LPoOUcXXkBWL_sTRFEbdNOlOTJFEDjcpCDY-C1CCA
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/7-D5DE7:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/7-D5DE7
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/C4-banner-7C19B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/C4-banner-7C19B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/Screenshot_129-E5A69.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/Screenshot_129-E5A69.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/Screenshot_2022-12-01_at_11.32.32-EC763.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/Screenshot_2022-12-01_at_11.32.32-EC763.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/Screenshot_2022-12-08_at_9.46.05_PM-B6C55.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/Screenshot_2022-12-08_at_9.46.05_PM-B6C55.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/Screenshot_20230202_140107-5FBCC.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/Screenshot_20230202_140107-5FBCC.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/THoYqKdTDIScpwuwknQH-AF5CF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/THoYqKdTDIScpwuwknQH-AF5CF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/aave-v3-periphery-A16A4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/aave-v3-periphery-A16A4
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/curious-say-29EC7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/curious-say-29EC7.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/etherscan-logo-circle-A29B1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/etherscan-logo-circle-A29B1.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/gist-og-image-17482.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/gist-og-image-17482.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/hero_17p0jg-EC294.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/hero_17p0jg-EC294.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/image-36CD3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/image-36CD3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/image-D2916.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/image-D2916.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/image-F33D5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/image-F33D5.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/paraspace-core-9DC91:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/paraspace-core-9DC91
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/w71MGZdoSOjqMQ5Mr0Vy-7C6B1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/discord-export/Code4rena - ARCHIVE-Q4-2022 - paraspace-nov28 [1044669795443945564].txt_Files/w71MGZdoSOjqMQ5Mr0Vy-7C6B1.png
--------------------------------------------------------------------------------
/images/paraspace-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/images/paraspace-architecture.png
--------------------------------------------------------------------------------
/paraspace-core/.commitlintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "@commitlint/config-conventional"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/paraspace-core/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | cache
3 | artifacts
4 | types
5 |
--------------------------------------------------------------------------------
/paraspace-core/.env.example:
--------------------------------------------------------------------------------
1 | NETWORK=hardhat #required
2 | ETHERSCAN_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 #required
3 | ETHERSCAN_VERIFICATION=false #required
4 | ETHERSCAN_VERIFICATION_JOBS=1
5 | ETHERSCAN_VERIFICATION_MAX_RETRIES=1
6 | BLOCKSCOUT_DISABLE_INDEXER=false
7 | INFURA_KEY=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
8 | ALCHEMY_KEY=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb #required
9 | DEPLOYER_MNEMONIC=bottom drive obey lake curtain smoke basket hold race lonely fit walk #required
10 | REPORT_GAS=true
11 | MOCHA_JOBS=1
12 | DB_PATH=:memory: #required
13 | DEPLOY_START=0
14 | DEPLOY_END=20
15 | # FORK=mainnet
16 |
--------------------------------------------------------------------------------
/paraspace-core/.eslintignore:
--------------------------------------------------------------------------------
1 | deploy/helpers/seaport-helpers
2 | deploy/helpers/x2y2-helpers.ts
3 | deploy/helpers/types.ts
4 | deploy/helpers/db-adapter.ts
5 |
--------------------------------------------------------------------------------
/paraspace-core/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "parser": "@typescript-eslint/parser",
4 | "plugins": ["@typescript-eslint", "prettier"],
5 | "extends": [
6 | "eslint:recommended",
7 | "plugin:@typescript-eslint/eslint-recommended",
8 | "plugin:@typescript-eslint/recommended",
9 | "prettier"
10 | ],
11 | "rules": {
12 | "no-unused-vars": "error",
13 | "no-process-exit": "off",
14 | "node/no-missing-import": "off",
15 | "no-unpublished-import": "off",
16 | "no-case-declarations": "off",
17 | "@typescript-eslint/no-non-null-assertion": "off"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/paraspace-core/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | ## Security Checklist
2 |
3 | - [ ] 1. Re-Entrancy
4 | - [ ] 2. Arithmetic Over/Under Flows
5 | - [ ] 3. Unexpected Ether
6 | - [ ] 4. Delegatecall
7 | - [ ] 5. Default Visibilities
8 | - [ ] 6. Entropy Illusion
9 | - [ ] 7. External Contract Referencing
10 | - [ ] 8. Short Address/Parameter Attack (off chain)
11 | - [ ] 9. Unchecked CALL Return Values
12 | - [ ] 10. Race Conditions / Front Running
13 | - [ ] 11. Denial Of Service (DOS)
14 | - [ ] 12. Block Timestamp Manipulation
15 | - [ ] 13. Constructors with Care
16 | - [ ] 14. Uninitialized Storage Pointers
17 | - [ ] 15. Floating Points and Precision
18 | - [ ] 16. Tx.Origin Authentication
19 | - [ ] 17. Address.isContract Re-Entrancy via Constructor
20 |
21 | ### ⚠️ NOTES ⚠️
22 |
23 | Make sure to think about each of these exploits in this PR.
24 |
--------------------------------------------------------------------------------
/paraspace-core/.github/workflows/typos.yml:
--------------------------------------------------------------------------------
1 | name: Typos
2 |
3 | on:
4 | push:
5 | branches:
6 | - v*
7 | - main
8 | pull_request: {}
9 | workflow_dispatch: {}
10 |
11 | jobs:
12 | run:
13 | name: Spell Check with Typos
14 | runs-on: ubuntu-latest
15 | steps:
16 | - name: Checkout Repository
17 | uses: actions/checkout@v3
18 |
19 | - name: Check Typos
20 | uses: crate-ci/typos@v1.12.12
21 |
--------------------------------------------------------------------------------
/paraspace-core/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | **/.DS_Store
3 | .idea
4 | node_modules
5 | cache
6 | artifacts
7 | /types
8 | .env
9 | deployed-contracts.json
10 | coverage.json
11 | /coverage
12 | dist
13 |
14 | # Setting for non zero-installs (https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored)
15 | .yarn/*
16 | !.yarn/releases
17 | !.yarn/plugins
18 | !.yarn/sdks
19 | !.yarn/versions
20 | .pnp.*
21 |
22 | docs/*
23 | !docs/DEVELOPER-GUIDE.md
24 | docs.restore
25 |
26 | .vscode
27 | coverage
28 | *sol.html
29 | coverage.json
30 | remix-compiler.config.js
31 | logs
32 | *data
33 | *.swp
34 |
35 | # foundry ignore
36 | foundry_libs
37 | foundry_out
38 |
--------------------------------------------------------------------------------
/paraspace-core/.nvmrc:
--------------------------------------------------------------------------------
1 | 18
2 |
--------------------------------------------------------------------------------
/paraspace-core/.prettierignore:
--------------------------------------------------------------------------------
1 | contracts/dependencies
2 | contracts/deployments
3 | contracts/mocks
4 | contracts/test
5 |
--------------------------------------------------------------------------------
/paraspace-core/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "semi": true,
3 | "trailingComma": "es5",
4 | "singleQuote": false,
5 | "printWidth": 80,
6 | "useTabs": false,
7 | "bracketSpacing": false
8 | }
9 |
--------------------------------------------------------------------------------
/paraspace-core/.solcover.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | mocha: {
3 | grep: "@skip-on-coverage",
4 | invert: true,
5 | },
6 | skipFiles: [
7 | "dependencies",
8 | "mocks",
9 | "deployments",
10 | ],
11 | configureYulOptimizer: true,
12 | };
13 |
--------------------------------------------------------------------------------
/paraspace-core/.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": "off",
8 | "func-param-name-mixedcase": "off",
9 | "modifier-name-mixedcase": "error",
10 | "private-vars-leading-underscore": "off",
11 | "var-name-mixedcase": "off",
12 | "imports-on-top": "error"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/paraspace-core/.solhintignore:
--------------------------------------------------------------------------------
1 | artifacts
2 | types
3 | coverage/
4 | contracts/dependencies
5 | contracts/deployments
6 | contracts/mocks
7 | contracts/test
8 | foundry_libs
9 | foundry_out
10 |
--------------------------------------------------------------------------------
/paraspace-core/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 |
3 | plugins:
4 | - path: .yarn/plugins/@yarnpkg/plugin-outdated.cjs
5 | spec: "https://mskelton.dev/yarn-outdated/v2"
6 |
7 | yarnPath: .yarn/releases/yarn-3.2.1.cjs
8 |
--------------------------------------------------------------------------------
/paraspace-core/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:18
2 |
3 | ARG MAX_OLD_SPACE_SIZE=8192
4 | ENV NODE_OPTIONS=--max-old-space-size=${MAX_OLD_SPACE_SIZE}
5 |
6 | WORKDIR /paraspace
7 |
8 | COPY . /paraspace
9 | RUN yarn && yarn build
10 |
11 | # https://docs.docker.com/config/containers/multi-service_container/
12 | RUN echo '#!/bin/bash\nset -m\nmake node &\nsleep 30 && make deploy\nmake transfer-tokens\nfg %1' > .entrypoint.sh
13 | RUN chmod u+x .entrypoint.sh
14 |
15 | ENTRYPOINT ["/paraspace/.entrypoint.sh"]
16 |
--------------------------------------------------------------------------------
/paraspace-core/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2022-2032 Para-Space Team
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/paraspace-core/audits/CERTIK-V1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/paraspace-core/audits/CERTIK-V1.pdf
--------------------------------------------------------------------------------
/paraspace-core/codecov.yml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - "contracts/mock"
3 | - "contracts/dependencies"
4 | - "contracts/deployments"
5 | coverage:
6 | range: 70..90
7 | round: down
8 | precision: 2
9 | status:
10 | project:
11 | default:
12 | target: auto
13 | threshold: 1%
14 | base: auto
15 | if_ci_failed: error
16 | informational: true
17 | patch:
18 | default:
19 | informational: true
20 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/chainlink/AggregatorInterface.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // Chainlink Contracts v0.8
3 | pragma solidity ^0.8.10;
4 |
5 | interface AggregatorInterface {
6 | function latestAnswer() external view returns (int256);
7 |
8 | function latestTimestamp() external view returns (uint256);
9 |
10 | function latestRound() external view returns (uint256);
11 |
12 | function getAnswer(uint256 roundId) external view returns (int256);
13 |
14 | function getTimestamp(uint256 roundId) external view returns (uint256);
15 |
16 | event AnswerUpdated(
17 | int256 indexed current,
18 | uint256 indexed roundId,
19 | uint256 updatedAt
20 | );
21 |
22 | event NewRound(
23 | uint256 indexed roundId,
24 | address indexed startedBy,
25 | uint256 startedAt
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/erc721-collections/IMoonBird.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: UNLICENSED
2 | pragma solidity 0.8.10;
3 |
4 | /**
5 | @title MoonBirds contract interface
6 | */
7 | interface IMoonBirdBase {
8 | function nestingOpen() external returns(bool);
9 |
10 | function toggleNesting(uint256[] calldata tokenIds) external;
11 |
12 | function nestingPeriod(uint256 tokenId)
13 | external
14 | view
15 | returns (
16 | bool nesting,
17 | uint256 current,
18 | uint256 total
19 | );
20 | }
21 |
22 | interface IMoonBird is IMoonBirdBase {
23 | function safeTransferWhileNesting(
24 | address from,
25 | address to,
26 | uint256 tokenId
27 | ) external;
28 | }
29 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/ICurrencyManager.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | interface ICurrencyManager {
5 | function addCurrency(address currency) external;
6 |
7 | function removeCurrency(address currency) external;
8 |
9 | function isCurrencyWhitelisted(address currency) external view returns (bool);
10 |
11 | function viewWhitelistedCurrencies(uint256 cursor, uint256 size) external view returns (address[] memory, uint256);
12 |
13 | function viewCountWhitelistedCurrencies() external view returns (uint256);
14 | }
15 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/IExecutionManager.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | interface IExecutionManager {
5 | function addStrategy(address strategy) external;
6 |
7 | function removeStrategy(address strategy) external;
8 |
9 | function isStrategyWhitelisted(address strategy) external view returns (bool);
10 |
11 | function viewWhitelistedStrategies(uint256 cursor, uint256 size) external view returns (address[] memory, uint256);
12 |
13 | function viewCountWhitelistedStrategies() external view returns (uint256);
14 | }
15 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/IExecutionStrategy.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | import {OrderTypes} from "../libraries/OrderTypes.sol";
5 |
6 | interface IExecutionStrategy {
7 | function canExecuteTakerAsk(OrderTypes.TakerOrder calldata takerAsk, OrderTypes.MakerOrder calldata makerBid)
8 | external
9 | view
10 | returns (
11 | bool,
12 | uint256,
13 | uint256
14 | );
15 |
16 | function canExecuteTakerBid(OrderTypes.TakerOrder calldata takerBid, OrderTypes.MakerOrder calldata makerAsk)
17 | external
18 | view
19 | returns (
20 | bool,
21 | uint256,
22 | uint256
23 | );
24 |
25 | function viewProtocolFee() external view returns (uint256);
26 | }
27 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/ILooksRareExchange.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | import {OrderTypes} from "../libraries/OrderTypes.sol";
5 |
6 | interface ILooksRareExchange {
7 | function matchAskWithTakerBidUsingETHAndWETH(
8 | OrderTypes.TakerOrder calldata takerBid,
9 | OrderTypes.MakerOrder calldata makerAsk
10 | ) external payable;
11 |
12 | function matchAskWithTakerBid(OrderTypes.TakerOrder calldata takerBid, OrderTypes.MakerOrder calldata makerAsk)
13 | external;
14 |
15 | function matchBidWithTakerAsk(OrderTypes.TakerOrder calldata takerAsk, OrderTypes.MakerOrder calldata makerBid)
16 | external;
17 | }
18 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/IOwnable.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | interface IOwnable {
5 | function transferOwnership(address newOwner) external;
6 |
7 | function owner() external view returns (address);
8 |
9 | function admin() external view returns (address);
10 | }
11 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/IRoyaltyFeeManager.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | interface IRoyaltyFeeManager {
5 | function calculateRoyaltyFeeAndGetRecipient(
6 | address collection,
7 | uint256 tokenId,
8 | uint256 amount
9 | ) external view returns (address, uint256);
10 | }
11 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/IRoyaltyFeeRegistry.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | interface IRoyaltyFeeRegistry {
5 | function updateRoyaltyInfoForCollection(
6 | address collection,
7 | address setter,
8 | address receiver,
9 | uint256 fee
10 | ) external;
11 |
12 | function updateRoyaltyFeeLimit(uint256 _royaltyFeeLimit) external;
13 |
14 | function royaltyInfo(address collection, uint256 amount) external view returns (address, uint256);
15 |
16 | function royaltyFeeInfoCollection(address collection)
17 | external
18 | view
19 | returns (
20 | address,
21 | address,
22 | uint256
23 | );
24 | }
25 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/ITransferManagerNFT.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | interface ITransferManagerNFT {
5 | function transferNonFungibleToken(
6 | address collection,
7 | address from,
8 | address to,
9 | uint256 tokenId,
10 | uint256 amount
11 | ) external;
12 | }
13 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/ITransferSelectorNFT.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | interface ITransferSelectorNFT {
5 | function checkTransferManagerForToken(address collection) external view returns (address);
6 | }
7 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/looksrare/contracts/interfaces/IWETH.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GNU
2 | pragma solidity >=0.5.0;
3 |
4 | interface IWETH {
5 | function deposit() external payable;
6 |
7 | function transfer(address to, uint256 value) external returns (bool);
8 |
9 | function withdraw(uint256) external;
10 | }
11 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/Context.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.10;
3 |
4 | /*
5 | * @dev Provides information about the current execution context, including the
6 | * sender of the transaction and its data. While these are generally available
7 | * via msg.sender and msg.data, they should not be accessed in such a direct
8 | * manner, since when dealing with GSN meta-transactions the account sending and
9 | * paying for execution may not be the actual sender (as far as an application
10 | * is concerned).
11 | *
12 | * This contract is only required for intermediate, library-like contracts.
13 | */
14 | abstract contract Context {
15 | function _msgSender() internal view virtual returns (address payable) {
16 | return payable(msg.sender);
17 | }
18 |
19 | function _msgData() internal view virtual returns (bytes memory) {
20 | this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
21 | return msg.data;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/ERC1155Holder.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "./ERC1155Receiver.sol";
6 |
7 | /**
8 | * @dev _Available since v3.1._
9 | */
10 | contract ERC1155Holder is ERC1155Receiver {
11 | function onERC1155Received(
12 | address,
13 | address,
14 | uint256,
15 | uint256,
16 | bytes memory
17 | ) public virtual override returns (bytes4) {
18 | return this.onERC1155Received.selector;
19 | }
20 |
21 | function onERC1155BatchReceived(
22 | address,
23 | address,
24 | uint256[] memory,
25 | uint256[] memory,
26 | bytes memory
27 | ) public virtual override returns (bytes4) {
28 | return this.onERC1155BatchReceived.selector;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/ERC1155Receiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "./IERC1155Receiver.sol";
6 | import "./ERC165.sol";
7 |
8 | /**
9 | * @dev _Available since v3.1._
10 | */
11 | abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
12 | /**
13 | * @dev See {IERC165-supportsInterface}.
14 | */
15 | function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
16 | return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/ERC165.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.10;
4 |
5 | import "./IERC165.sol";
6 |
7 | /**
8 | * @dev Implementation of the {IERC165} interface.
9 | *
10 | * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
11 | * for the additional interface id that will be supported. For example:
12 | *
13 | * ```solidity
14 | * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
15 | * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
16 | * }
17 | * ```
18 | *
19 | * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
20 | */
21 | abstract contract ERC165 is IERC165 {
22 | /**
23 | * @dev See {IERC165-supportsInterface}.
24 | */
25 | function supportsInterface(bytes4 interfaceId)
26 | public
27 | view
28 | virtual
29 | override
30 | returns (bool)
31 | {
32 | return interfaceId == type(IERC165).interfaceId;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/ERC721Holder.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "./IERC721Receiver.sol";
6 |
7 | /**
8 | * @dev Implementation of the {IERC721Receiver} interface.
9 | *
10 | * Accepts all token transfers.
11 | * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
12 | */
13 | contract ERC721Holder is IERC721Receiver {
14 | /**
15 | * @dev See {IERC721Receiver-onERC721Received}.
16 | *
17 | * Always returns `IERC721Receiver.onERC721Received.selector`.
18 | */
19 | function onERC721Received(
20 | address,
21 | address,
22 | uint256,
23 | bytes memory
24 | ) public virtual override returns (bytes4) {
25 | return this.onERC721Received.selector;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC1155MetadataURI.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "./IERC1155.sol";
7 |
8 | /**
9 | * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
10 | * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
11 | *
12 | * _Available since v3.1._
13 | */
14 | interface IERC1155MetadataURI is IERC1155 {
15 | /**
16 | * @dev Returns the URI for token type `id`.
17 | *
18 | * If the `\{id\}` substring is present in the URI, it must be replaced by
19 | * clients with the actual token type ID.
20 | */
21 | function uri(uint256 id) external view returns (string memory);
22 | }
23 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC1271.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)
3 |
4 | pragma solidity 0.8.10;
5 |
6 | /**
7 | * @dev Interface of the ERC1271 standard signature validation method for
8 | * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].
9 | *
10 | * _Available since v4.1._
11 | */
12 | interface IERC1271 {
13 | /**
14 | * @dev Should return whether the signature provided is valid for the provided data
15 | * @param hash Hash of the data to be signed
16 | * @param signature Signature byte array associated with _data
17 | */
18 | function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);
19 | }
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC165.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.10;
4 |
5 | /**
6 | * @dev Interface of the ERC165 standard, as defined in the
7 | * https://eips.ethereum.org/EIPS/eip-165[EIP].
8 | *
9 | * Implementers can declare support of contract interfaces, which can then be
10 | * queried by others ({ERC165Checker}).
11 | *
12 | * For an implementation, see {ERC165}.
13 | */
14 | interface IERC165 {
15 | /**
16 | * @dev Returns true if this contract implements the interface defined by
17 | * `interfaceId`. See the corresponding
18 | * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
19 | * to learn more about how these ids are created.
20 | *
21 | * This function call must use less than 30 000 gas.
22 | */
23 | function supportsInterface(bytes4 interfaceId) external view returns (bool);
24 | }
25 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {IERC20} from "./IERC20.sol";
5 |
6 | interface IERC20Detailed is IERC20 {
7 | function name() external view returns (string memory);
8 |
9 | function symbol() external view returns (string memory);
10 |
11 | function decimals() external view returns (uint8);
12 | }
13 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC20WithPermit.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.10;
3 |
4 | import {IERC20} from "./IERC20.sol";
5 |
6 | interface IERC20WithPermit is IERC20 {
7 | function permit(
8 | address owner,
9 | address spender,
10 | uint256 value,
11 | uint256 deadline,
12 | uint8 v,
13 | bytes32 r,
14 | bytes32 s
15 | ) external;
16 | }
17 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC2981.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)
3 |
4 | pragma solidity 0.8.10;
5 |
6 | import "./IERC165.sol";
7 |
8 | /**
9 | * @dev Interface for the NFT Royalty Standard.
10 | *
11 | * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
12 | * support for royalty payments across all NFT marketplaces and ecosystem participants.
13 | *
14 | * _Available since v4.5._
15 | */
16 | interface IERC2981 is IERC165 {
17 | /**
18 | * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
19 | * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
20 | */
21 | function royaltyInfo(uint256 tokenId, uint256 salePrice)
22 | external
23 | view
24 | returns (address receiver, uint256 royaltyAmount);
25 | }
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC721Enumerable.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
3 |
4 | pragma solidity ^0.8.10;
5 |
6 | import "./IERC721.sol";
7 |
8 | /**
9 | * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
10 | * @dev See https://eips.ethereum.org/EIPS/eip-721
11 | */
12 | interface IERC721Enumerable is IERC721 {
13 | /**
14 | * @dev Returns the total amount of tokens stored by the contract.
15 | */
16 | function totalSupply() external view returns (uint256);
17 |
18 | /**
19 | * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
20 | * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
21 | */
22 | function tokenOfOwnerByIndex(address owner, uint256 index)
23 | external
24 | view
25 | returns (uint256);
26 |
27 | /**
28 | * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
29 | * Use along with {totalSupply} to enumerate all tokens.
30 | */
31 | function tokenByIndex(uint256 index) external view returns (uint256);
32 | }
33 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC721Metadata.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
3 |
4 | pragma solidity ^0.8.10;
5 |
6 | import "./IERC721.sol";
7 |
8 | /**
9 | * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
10 | * @dev See https://eips.ethereum.org/EIPS/eip-721
11 | */
12 | interface IERC721Metadata is IERC721 {
13 | /**
14 | * @dev Returns the token collection name.
15 | */
16 | function name() external view returns (string memory);
17 |
18 | /**
19 | * @dev Returns the token collection symbol.
20 | */
21 | function symbol() external view returns (string memory);
22 |
23 | /**
24 | * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
25 | */
26 | function tokenURI(uint256 tokenId) external view returns (string memory);
27 | }
28 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IERC721Receiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
3 |
4 | pragma solidity 0.8.10;
5 |
6 | /**
7 | * @title ERC721 token receiver interface
8 | * @dev Interface for any contract that wants to support safeTransfers
9 | * from ERC721 asset contracts.
10 | */
11 | interface IERC721Receiver {
12 | /**
13 | * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
14 | * by `operator` from `from`, this function is called.
15 | *
16 | * It must return its Solidity selector to confirm the token transfer.
17 | * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
18 | *
19 | * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
20 | */
21 | function onERC721Received(
22 | address operator,
23 | address from,
24 | uint256 tokenId,
25 | bytes calldata data
26 | ) external returns (bytes4);
27 | }
28 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/IMintableERC20.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import "./IERC20Detailed.sol";
5 |
6 | interface IMintableERC20 is IERC20Detailed {
7 | /**
8 | * @dev Function to mint tokens
9 | * @param value The amount of tokens to mint.
10 | * @return A boolean that indicates if the operation was successful.
11 | */
12 | function mint(uint256 value) external returns (bool);
13 |
14 | /**
15 | * @dev Function to mint tokens to address
16 | * @param account The account to mint tokens.
17 | * @param value The amount of tokens to mint.
18 | * @return A boolean that indicates if the operation was successful.
19 | */
20 | function mint(address account, uint256 value) external returns (bool);
21 | }
22 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/openzeppelin/contracts/ITransferHook.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | interface ITransferHook {
5 | function onTransfer(
6 | address from,
7 | address to,
8 | uint256 amount
9 | ) external;
10 | }
11 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/conduit/lib/ConduitConstants.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | // error ChannelClosed(address channel)
5 | uint256 constant ChannelClosed_error_signature = (
6 | 0x93daadf200000000000000000000000000000000000000000000000000000000
7 | );
8 | uint256 constant ChannelClosed_error_ptr = 0x00;
9 | uint256 constant ChannelClosed_channel_ptr = 0x4;
10 | uint256 constant ChannelClosed_error_length = 0x24;
11 |
12 | // For the mapping:
13 | // mapping(address => bool) channels
14 | // The position in storage for a particular account is:
15 | // keccak256(abi.encode(account, channels.slot))
16 | uint256 constant ChannelKey_channel_ptr = 0x00;
17 | uint256 constant ChannelKey_slot_ptr = 0x20;
18 | uint256 constant ChannelKey_length = 0x40;
19 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/conduit/lib/ConduitEnums.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | enum ConduitItemType {
5 | NATIVE, // unused
6 | ERC20,
7 | ERC721,
8 | ERC1155
9 | }
10 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/conduit/lib/ConduitStructs.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | import { ConduitItemType } from "./ConduitEnums.sol";
5 |
6 | struct ConduitTransfer {
7 | ConduitItemType itemType;
8 | address token;
9 | address from;
10 | address to;
11 | uint256 identifier;
12 | uint256 amount;
13 | }
14 |
15 | struct ConduitBatch1155Transfer {
16 | address token;
17 | address from;
18 | address to;
19 | uint256[] ids;
20 | uint256[] amounts;
21 | }
22 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/helpers/TransferHelperStructs.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | import { ConduitItemType } from "../conduit/lib/ConduitEnums.sol";
5 |
6 | /**
7 | * @dev A TransferHelperItem specifies the itemType (ERC20/ERC721/ERC1155),
8 | * token address, token identifier, and amount of the token to be
9 | * transferred via the TransferHelper. For ERC20 tokens, identifier
10 | * must be 0. For ERC721 tokens, amount must be 1.
11 | */
12 | struct TransferHelperItem {
13 | ConduitItemType itemType;
14 | address token;
15 | uint256 identifier;
16 | uint256 amount;
17 | }
18 |
19 | /**
20 | * @dev A TransferHelperItemsWithRecipient specifies the tokens to transfer
21 | * via the TransferHelper, their intended recipient, and a boolean flag
22 | * indicating whether onERC721Received should be called on a recipient
23 | * contract.
24 | */
25 | struct TransferHelperItemsWithRecipient {
26 | TransferHelperItem[] items;
27 | address recipient;
28 | bool validateERC721Receiver;
29 | }
30 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/AbridgedTokenInterfaces.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | interface ERC20Interface {
5 | function transferFrom(
6 | address,
7 | address,
8 | uint256
9 | ) external returns (bool);
10 | }
11 |
12 | interface ERC721Interface {
13 | function transferFrom(
14 | address,
15 | address,
16 | uint256
17 | ) external;
18 | }
19 |
20 | interface ERC1155Interface {
21 | function safeTransferFrom(
22 | address from,
23 | address to,
24 | uint256 id,
25 | uint256 amount,
26 | bytes calldata data
27 | ) external;
28 |
29 | function safeBatchTransferFrom(
30 | address from,
31 | address to,
32 | uint256[] calldata ids,
33 | uint256[] calldata amounts,
34 | bytes calldata data
35 | ) external;
36 | }
37 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/AmountDerivationErrors.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | /**
5 | * @title AmountDerivationErrors
6 | * @author 0age
7 | * @notice AmountDerivationErrors contains errors related to amount derivation.
8 | */
9 | interface AmountDerivationErrors {
10 | /**
11 | * @dev Revert with an error when attempting to apply a fraction as part of
12 | * a partial fill that does not divide the target amount cleanly.
13 | */
14 | error InexactFraction();
15 | }
16 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/EIP1271Interface.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | interface EIP1271Interface {
5 | function isValidSignature(bytes32 digest, bytes calldata signature)
6 | external
7 | view
8 | returns (bytes4);
9 | }
10 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/IERC721Receiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | interface IERC721Receiver {
5 | function onERC721Received(
6 | address operator,
7 | address from,
8 | uint256 tokenId,
9 | bytes calldata data
10 | ) external returns (bytes4);
11 | }
12 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/ReentrancyErrors.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | /**
5 | * @title ReentrancyErrors
6 | * @author 0age
7 | * @notice ReentrancyErrors contains errors related to reentrancy.
8 | */
9 | interface ReentrancyErrors {
10 | /**
11 | * @dev Revert with an error when a caller attempts to reenter a protected
12 | * function.
13 | */
14 | error NoReentrantCalls();
15 | }
16 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/SignatureVerificationErrors.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | /**
5 | * @title SignatureVerificationErrors
6 | * @author 0age
7 | * @notice SignatureVerificationErrors contains all errors related to signature
8 | * verification.
9 | */
10 | interface SignatureVerificationErrors {
11 | /**
12 | * @dev Revert with an error when a signature that does not contain a v
13 | * value of 27 or 28 has been supplied.
14 | *
15 | * @param v The invalid v value.
16 | */
17 | error BadSignatureV(uint8 v);
18 |
19 | /**
20 | * @dev Revert with an error when the signer recovered by the supplied
21 | * signature does not match the offerer or an allowed EIP-1271 signer
22 | * as specified by the offerer in the event they are a contract.
23 | */
24 | error InvalidSigner();
25 |
26 | /**
27 | * @dev Revert with an error when a signer cannot be recovered from the
28 | * supplied signature.
29 | */
30 | error InvalidSignature();
31 |
32 | /**
33 | * @dev Revert with an error when an EIP-1271 call to an account fails.
34 | */
35 | error BadContractSignature();
36 | }
37 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/TransferHelperInterface.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | import {
5 | TransferHelperItem,
6 | TransferHelperItemsWithRecipient
7 | } from "../helpers/TransferHelperStructs.sol";
8 |
9 | interface TransferHelperInterface {
10 | /**
11 | * @notice Transfer multiple items to a single recipient.
12 | *
13 | * @param items The items to transfer.
14 | * @param conduitKey The key of the conduit performing the bulk transfer.
15 | */
16 | function bulkTransfer(
17 | TransferHelperItemsWithRecipient[] calldata items,
18 | bytes32 conduitKey
19 | ) external returns (bytes4);
20 | }
21 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/ZoneInteractionErrors.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | /**
5 | * @title ZoneInteractionErrors
6 | * @author 0age
7 | * @notice ZoneInteractionErrors contains errors related to zone interaction.
8 | */
9 | interface ZoneInteractionErrors {
10 | /**
11 | * @dev Revert with an error when attempting to fill an order that specifies
12 | * a restricted submitter as its order type when not submitted by
13 | * either the offerer or the order's zone or approved as valid by the
14 | * zone in question via a staticcall to `isValidOrder`.
15 | *
16 | * @param orderHash The order hash for the invalid restricted order.
17 | */
18 | error InvalidRestrictedOrder(bytes32 orderHash);
19 | }
20 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/seaport/contracts/interfaces/ZoneInterface.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.7;
3 |
4 | import {
5 | AdvancedOrder,
6 | CriteriaResolver
7 | } from "../lib/ConsiderationStructs.sol";
8 |
9 | interface ZoneInterface {
10 | // Called by Consideration whenever extraData is not provided by the caller.
11 | function isValidOrder(
12 | bytes32 orderHash,
13 | address caller,
14 | address offerer,
15 | bytes32 zoneHash
16 | ) external view returns (bytes4 validOrderMagicValue);
17 |
18 | // Called by Consideration whenever any extraData is provided by the caller.
19 | function isValidOrderIncludingExtraData(
20 | bytes32 orderHash,
21 | address caller,
22 | AdvancedOrder calldata order,
23 | bytes32[] calldata priorOrderHashes,
24 | CriteriaResolver[] calldata criteriaResolvers
25 | ) external view returns (bytes4 validOrderMagicValue);
26 | }
27 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/uniswap/IMulticall.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.7.5;
3 | pragma abicoder v2;
4 |
5 | /// @title Multicall interface
6 | /// @notice Enables calling multiple methods in a single call to the contract
7 | interface IMulticall {
8 | /// @notice Call multiple functions in the current contract and return the data from all of them if they all succeed
9 | /// @dev The `msg.value` should not be trusted for any method callable from multicall.
10 | /// @param data The encoded function data for each of the calls to make to this contract
11 | /// @return results The results from each of the calls passed in via data
12 | function multicall(bytes[] calldata data) external payable returns (bytes[] memory results);
13 | }
14 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/uniswap/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 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/uniswap/IPoolInitializer.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.7.5;
3 | pragma abicoder v2;
4 |
5 | /// @title Creates and initializes V3 Pools
6 | /// @notice Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that
7 | /// require the pool to exist.
8 | interface IPoolInitializer {
9 | /// @notice Creates a new pool if it does not exist, then initializes if not initialized
10 | /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool
11 | /// @param token0 The contract address of token0 of the pool
12 | /// @param token1 The contract address of token1 of the pool
13 | /// @param fee The fee amount of the v3 pool for the specified token pair
14 | /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value
15 | /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary
16 | function createAndInitializePoolIfNecessary(
17 | address token0,
18 | address token1,
19 | uint24 fee,
20 | uint160 sqrtPriceX96
21 | ) external payable returns (address pool);
22 | }
23 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/uniswap/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 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/uniswap/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 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/uniswap/libraries/LICENSE_MIT:
--------------------------------------------------------------------------------
1 | Copyright (c) 2021 Remco Bloemen
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/uniswap/libraries/SafeCast.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.5.0;
3 |
4 | /// @title Safe casting methods
5 | /// @notice Contains methods for safely casting between types
6 | library SafeCast {
7 | /// @notice Cast a uint256 to a uint160, revert on overflow
8 | /// @param y The uint256 to be downcasted
9 | /// @return z The downcasted integer, now type uint160
10 | function toUint160(uint256 y) internal pure returns (uint160 z) {
11 | require((z = uint160(y)) == y);
12 | }
13 |
14 | /// @notice Cast a int256 to a int128, revert on overflow or underflow
15 | /// @param y The int256 to be downcasted
16 | /// @return z The downcasted integer, now type int128
17 | function toInt128(int256 y) internal pure returns (int128 z) {
18 | require((z = int128(y)) == y);
19 | }
20 |
21 | /// @notice Cast a uint256 to a int256, revert on overflow
22 | /// @param y The uint256 to be casted
23 | /// @return z The casted integer, now type int256
24 | function toInt256(uint256 y) internal pure returns (int256 z) {
25 | require(y < 2**255);
26 | z = int256(y);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/uniswap/libraries/UnsafeMath.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.5.0;
3 |
4 | /// @title Math functions that do not check inputs or outputs
5 | /// @notice Contains methods that perform common math functions but do not do any overflow or underflow checks
6 | library UnsafeMath {
7 | /// @notice Returns ceil(x / y)
8 | /// @dev division by 0 has unspecified behavior, and must be checked externally
9 | /// @param x The dividend
10 | /// @param y The divisor
11 | /// @return z The quotient, ceil(x / y)
12 | function divRoundingUp(uint256 x, uint256 y)
13 | internal
14 | pure
15 | returns (uint256 z)
16 | {
17 | assembly {
18 | z := add(div(x, y), gt(mod(x, y), 0))
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/NoDelegateCall.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity =0.7.6;
3 |
4 | /// @title Prevents delegatecall to a contract
5 | /// @notice Base contract that provides a modifier for preventing delegatecall to methods in a child contract
6 | abstract contract NoDelegateCall {
7 | /// @dev The original address of this contract
8 | address private immutable original;
9 |
10 | constructor() {
11 | // Immutables are computed in the init code of the contract, and then inlined into the deployed bytecode.
12 | // In other words, this variable won't change when it's checked at runtime.
13 | original = address(this);
14 | }
15 |
16 | /// @dev Private method is used instead of inlining into modifier because modifiers are copied into each method,
17 | /// and the use of immutable means the address bytes are copied in every place the modifier is used.
18 | function checkNotDelegateCall() private view {
19 | require(address(this) == original);
20 | }
21 |
22 | /// @notice Prevents delegatecall into the modified method
23 | modifier noDelegateCall() {
24 | checkNotDelegateCall();
25 | _;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/interfaces/IUniswapV3Pool.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.5.0;
3 |
4 | import "./pool/IUniswapV3PoolImmutables.sol";
5 | import "./pool/IUniswapV3PoolState.sol";
6 | import "./pool/IUniswapV3PoolDerivedState.sol";
7 | import "./pool/IUniswapV3PoolActions.sol";
8 | import "./pool/IUniswapV3PoolOwnerActions.sol";
9 | import "./pool/IUniswapV3PoolEvents.sol";
10 |
11 | /// @title The interface for a Uniswap V3 Pool
12 | /// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform
13 | /// to the ERC20 specification
14 | /// @dev The pool interface is broken up into many smaller pieces
15 | interface IUniswapV3Pool is
16 | IUniswapV3PoolImmutables,
17 | IUniswapV3PoolState,
18 | IUniswapV3PoolDerivedState,
19 | IUniswapV3PoolActions,
20 | IUniswapV3PoolOwnerActions,
21 | IUniswapV3PoolEvents
22 | {
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/interfaces/callback/IUniswapV3FlashCallback.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.5.0;
3 |
4 | /// @title Callback for IUniswapV3PoolActions#flash
5 | /// @notice Any contract that calls IUniswapV3PoolActions#flash must implement this interface
6 | interface IUniswapV3FlashCallback {
7 | /// @notice Called to `msg.sender` after transferring to the recipient from IUniswapV3Pool#flash.
8 | /// @dev In the implementation you must repay the pool the tokens sent by flash plus the computed fee amounts.
9 | /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory.
10 | /// @param fee0 The fee amount in token0 due to the pool by the end of the flash
11 | /// @param fee1 The fee amount in token1 due to the pool by the end of the flash
12 | /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#flash call
13 | function uniswapV3FlashCallback(
14 | uint256 fee0,
15 | uint256 fee1,
16 | bytes calldata data
17 | ) external;
18 | }
19 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/interfaces/callback/IUniswapV3MintCallback.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.5.0;
3 |
4 | /// @title Callback for IUniswapV3PoolActions#mint
5 | /// @notice Any contract that calls IUniswapV3PoolActions#mint must implement this interface
6 | interface IUniswapV3MintCallback {
7 | /// @notice Called to `msg.sender` after minting liquidity to a position from IUniswapV3Pool#mint.
8 | /// @dev In the implementation you must pay the pool tokens owed for the minted liquidity.
9 | /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory.
10 | /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity
11 | /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity
12 | /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#mint call
13 | function uniswapV3MintCallback(
14 | uint256 amount0Owed,
15 | uint256 amount1Owed,
16 | bytes calldata data
17 | ) external;
18 | }
19 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/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 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/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 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/libraries/LICENSE_MIT:
--------------------------------------------------------------------------------
1 | Copyright (c) 2021 Remco Bloemen
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/libraries/LiquidityMath.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.5.0;
3 |
4 | /// @title Math library for liquidity
5 | library LiquidityMath {
6 | /// @notice Add a signed liquidity delta to liquidity and revert if it overflows or underflows
7 | /// @param x The liquidity before change
8 | /// @param y The delta by which liquidity should be changed
9 | /// @return z The liquidity delta
10 | function addDelta(uint128 x, int128 y) internal pure returns (uint128 z) {
11 | if (y < 0) {
12 | require((z = x - uint128(-y)) < x, "LS");
13 | } else {
14 | require((z = x + uint128(y)) >= x, "LA");
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/libraries/SafeCast.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.5.0;
3 |
4 | /// @title Safe casting methods
5 | /// @notice Contains methods for safely casting between types
6 | library SafeCast {
7 | /// @notice Cast a uint256 to a uint160, revert on overflow
8 | /// @param y The uint256 to be downcasted
9 | /// @return z The downcasted integer, now type uint160
10 | function toUint160(uint256 y) internal pure returns (uint160 z) {
11 | require((z = uint160(y)) == y);
12 | }
13 |
14 | /// @notice Cast a int256 to a int128, revert on overflow or underflow
15 | /// @param y The int256 to be downcasted
16 | /// @return z The downcasted integer, now type int128
17 | function toInt128(int256 y) internal pure returns (int128 z) {
18 | require((z = int128(y)) == y);
19 | }
20 |
21 | /// @notice Cast a uint256 to a int256, revert on overflow
22 | /// @param y The uint256 to be casted
23 | /// @return z The casted integer, now type int256
24 | function toInt256(uint256 y) internal pure returns (int256 z) {
25 | require(y < 2**255);
26 | z = int256(y);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/libraries/TransferHelper.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.6.0;
3 |
4 | import "../interfaces/IERC20Minimal.sol";
5 |
6 | /// @title TransferHelper
7 | /// @notice Contains helper methods for interacting with ERC20 tokens that do not consistently return true/false
8 | library TransferHelper {
9 | /// @notice Transfers tokens from msg.sender to a recipient
10 | /// @dev Calls transfer on token contract, errors with TF if transfer fails
11 | /// @param token The contract address of the token which will be transferred
12 | /// @param to The recipient of the transfer
13 | /// @param value The value of the transfer
14 | function safeTransfer(
15 | address token,
16 | address to,
17 | uint256 value
18 | ) internal {
19 | (bool success, bytes memory data) = token.call(
20 | abi.encodeWithSelector(IERC20Minimal.transfer.selector, to, value)
21 | );
22 | require(
23 | success && (data.length == 0 || abi.decode(data, (bool))),
24 | "TF"
25 | );
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/univ3/libraries/UnsafeMath.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: GPL-2.0-or-later
2 | pragma solidity >=0.5.0;
3 |
4 | /// @title Math functions that do not check inputs or outputs
5 | /// @notice Contains methods that perform common math functions but do not do any overflow or underflow checks
6 | library UnsafeMath {
7 | /// @notice Returns ceil(x / y)
8 | /// @dev division by 0 has unspecified behavior, and must be checked externally
9 | /// @param x The dividend
10 | /// @param y The divisor
11 | /// @return z The quotient, ceil(x / y)
12 | function divRoundingUp(uint256 x, uint256 y)
13 | internal
14 | pure
15 | returns (uint256 z)
16 | {
17 | assembly {
18 | z := add(div(x, y), gt(mod(x, y), 0))
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/x2y2/contracts/IDelegate.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: Unlicensed
2 |
3 | pragma solidity ^0.8.0;
4 | pragma abicoder v2;
5 |
6 | interface IDelegate {
7 | function delegateType() external view returns (uint256);
8 |
9 | function executeSell(
10 | address seller,
11 | address buyer,
12 | bytes calldata data
13 | ) external returns (bool);
14 |
15 | function executeBuy(
16 | address seller,
17 | address buyer,
18 | bytes calldata data
19 | ) external returns (bool);
20 |
21 | function executeBid(
22 | address seller,
23 | address previousBidder,
24 | address bidder,
25 | bytes calldata data
26 | ) external returns (bool);
27 |
28 | function executeAuctionComplete(
29 | address seller,
30 | address buyer,
31 | bytes calldata data
32 | ) external returns (bool);
33 |
34 | function executeAuctionRefund(
35 | address seller,
36 | address lastBidder,
37 | bytes calldata data
38 | ) external returns (bool);
39 | }
--------------------------------------------------------------------------------
/paraspace-core/contracts/dependencies/x2y2/contracts/IWETHUpgradable.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: Unlicensed
2 |
3 | pragma solidity ^0.8.0;
4 | pragma abicoder v2;
5 |
6 | import '../../openzeppelin/upgradeability/IERC20Upgradeable.sol';
7 |
8 | interface IWETHUpgradable is IERC20Upgradeable {
9 | function deposit() external payable;
10 |
11 | function withdraw(uint256 wad) external;
12 | }
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IAToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {IPool} from "./IPool.sol";
5 |
6 | /************
7 | @title IAToken interface
8 | @notice Interface for rebasing AToken support.*/
9 |
10 | interface IAToken {
11 | function POOL() external view returns (IPool pool);
12 |
13 | function UNDERLYING_ASSET_ADDRESS() external view returns (address);
14 | }
15 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IAtomicPriceAggregator.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /************
5 | @title IAtomicPriceAggregator interface
6 | @notice Interface for individual NFT token price oracle.*/
7 |
8 | interface IAtomicPriceAggregator {
9 | // get price of a specific tokenId
10 | function getTokenPrice(uint256 tokenId) external view returns (uint256);
11 |
12 | // get list of prices for list of tokenIds
13 | function getTokensPrices(uint256[] calldata _okenIds)
14 | external
15 | view
16 | returns (uint256[] memory);
17 |
18 | // get the sum of prices for list of tokenIds
19 | function getTokensPricesSum(uint256[] calldata tokenIds)
20 | external
21 | view
22 | returns (uint256);
23 |
24 | function latestAnswer() external view returns (int256);
25 | }
26 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IAuctionableERC721.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 | import {DataTypes} from "../protocol/libraries/types/DataTypes.sol";
4 |
5 | /**
6 | * @title IAuctionableERC721
7 | * @author Parallel
8 | * @notice Defines the basic interface for an AuctionableERC721.
9 | **/
10 | interface IAuctionableERC721 {
11 | /**
12 | * @dev get the auction configuration of a specific token
13 | */
14 | function isAuctioned(uint256 tokenId) external view returns (bool);
15 |
16 | /**
17 | *
18 | * @dev start auction
19 | */
20 | function startAuction(uint256 tokenId) external;
21 |
22 | /**
23 | *
24 | * @dev end auction
25 | */
26 | function endAuction(uint256 tokenId) external;
27 |
28 | /**
29 | *
30 | * @dev get auction data
31 | */
32 | function getAuctionData(uint256 tokenId)
33 | external
34 | view
35 | returns (DataTypes.Auction memory);
36 | }
37 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IDelegationToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /**
5 | * @title IDelegationToken
6 | *
7 | * @notice Implements an interface for tokens with delegation COMP/UNI compatible
8 | **/
9 | interface IDelegationToken {
10 | /**
11 | * @notice Delegate voting power to a delegatee
12 | * @param delegatee The address of the delegatee
13 | */
14 | function delegate(address delegatee) external;
15 | }
16 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IEACAggregatorProxy.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface IEACAggregatorProxy {
5 | function decimals() external view returns (uint8);
6 |
7 | function latestAnswer() external view returns (int256);
8 |
9 | function latestTimestamp() external view returns (uint256);
10 |
11 | function latestRound() external view returns (uint256);
12 |
13 | function getAnswer(uint256 roundId) external view returns (int256);
14 |
15 | function getTimestamp(uint256 roundId) external view returns (uint256);
16 |
17 | event AnswerUpdated(
18 | int256 indexed current,
19 | uint256 indexed roundId,
20 | uint256 timestamp
21 | );
22 | event NewRound(uint256 indexed roundId, address indexed startedBy);
23 | }
24 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IERC20WithPermit.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {IERC20} from "../dependencies/openzeppelin/contracts/IERC20.sol";
5 |
6 | /**
7 | * @title IERC20WithPermit
8 | *
9 | * @notice Interface for the permit function (EIP-2612)
10 | **/
11 | interface IERC20WithPermit is IERC20 {
12 | /**
13 | * @notice Allow passing a signed message to approve spending
14 | * @dev implements the permit function as for
15 | * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md
16 | * @param owner The owner of the funds
17 | * @param spender The spender
18 | * @param value The amount
19 | * @param deadline The deadline timestamp, type(uint256).max for max deadline
20 | * @param v Signature param
21 | * @param s Signature param
22 | * @param r Signature param
23 | */
24 | function permit(
25 | address owner,
26 | address spender,
27 | uint256 value,
28 | uint256 deadline,
29 | uint8 v,
30 | bytes32 r,
31 | bytes32 s
32 | ) external;
33 | }
34 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/ILido.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface ILido {
5 | function getPooledEthByShares(uint256 _sharesAmount)
6 | external
7 | view
8 | returns (uint256);
9 | }
10 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/INTokenUniswapV3.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface INTokenUniswapV3 {
5 | /**
6 | * @notice Decreases liquidity for underlying Uniswap V3 NFT LP and validates
7 | * that the user respects liquidation checks.
8 | * @param user The user address decreasing liquidity for
9 | * @param tokenId The id of the erc721 token
10 | * @param liquidityDecrease The amount of liquidity to remove of LP
11 | * @param amount0Min The minimum amount to remove of token0
12 | * @param amount1Min The minimum amount to remove of token1
13 | * @param receiveEthAsWeth If convert weth to ETH
14 | */
15 | function decreaseUniswapV3Liquidity(
16 | address user,
17 | uint256 tokenId,
18 | uint128 liquidityDecrease,
19 | uint256 amount0Min,
20 | uint256 amount1Min,
21 | bool receiveEthAsWeth
22 | ) external;
23 | }
24 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IPool.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {IPoolCore} from "./IPoolCore.sol";
5 | import {IPoolMarketplace} from "./IPoolMarketplace.sol";
6 | import {IPoolParameters} from "./IPoolParameters.sol";
7 | import "./IPoolApeStaking.sol";
8 |
9 | /**
10 | * @title IPool
11 | *
12 | * @notice Defines the basic interface for an ParaSpace Pool.
13 | **/
14 | interface IPool is
15 | IPoolCore,
16 | IPoolMarketplace,
17 | IPoolParameters,
18 | IPoolApeStaking
19 | {
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IPriceOracle.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /**
5 | * @title IPriceOracle
6 | *
7 | * @notice Defines the basic interface for a Price oracle.
8 | **/
9 | interface IPriceOracle {
10 | /**
11 | * @notice Returns the asset price in the base currency
12 | * @param asset The address of the asset
13 | * @return The price of the asset
14 | **/
15 | function getAssetPrice(address asset) external view returns (uint256);
16 |
17 | /**
18 | * @notice Set the price of the asset
19 | * @param asset The address of the asset
20 | * @param price The price of the asset
21 | **/
22 | function setAssetPrice(address asset, uint256 price) external;
23 | }
24 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IReserveAuctionStrategy.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /**
5 | * @title IReserveAuctionStrategy
6 | *
7 | * @notice Interface for the calculation of current auction price
8 | */
9 | interface IReserveAuctionStrategy {
10 | function getMaxPriceMultiplier() external view returns (uint256);
11 |
12 | function getMinExpPriceMultiplier() external view returns (uint256);
13 |
14 | function getMinPriceMultiplier() external view returns (uint256);
15 |
16 | function getStepLinear() external view returns (uint256);
17 |
18 | function getStepExp() external view returns (uint256);
19 |
20 | function getTickLength() external view returns (uint256);
21 |
22 | /**
23 | * @notice Calculates the interest rates depending on the reserve's state and configurations
24 | * @param auctionStartTimestamp The auction start block timestamp
25 | * @param currentTimestamp The current block timestamp
26 | * @return auctionPrice The current auction price
27 | **/
28 | function calculateAuctionPriceMultiplier(
29 | uint256 auctionStartTimestamp,
30 | uint256 currentTimestamp
31 | ) external view returns (uint256);
32 | }
33 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/ISequencerOracle.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /**
5 | * @title ISequencerOracle
6 | *
7 | * @notice Defines the basic interface for a Sequencer oracle.
8 | */
9 | interface ISequencerOracle {
10 | /**
11 | * @notice Returns the health status of the sequencer.
12 | * @return roundId The round ID from the aggregator for which the data was retrieved combined with a phase to ensure
13 | * that round IDs get larger as time moves forward.
14 | * @return answer The answer for the latest round: 0 if the sequencer is up, 1 if it is down.
15 | * @return startedAt The timestamp when the round was started.
16 | * @return updatedAt The timestamp of the block in which the answer was updated on L1.
17 | * @return answeredInRound The round ID of the round in which the answer was computed.
18 | */
19 | function latestRoundData()
20 | external
21 | view
22 | returns (
23 | uint80 roundId,
24 | int256 answer,
25 | uint256 startedAt,
26 | uint256 updatedAt,
27 | uint80 answeredInRound
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface IToken {
5 | function balanceOf(address) external view returns (uint256);
6 |
7 | function totalSupply() external view returns (uint256);
8 | }
9 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IUniswapV3OracleWrapper.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {IAtomicPriceAggregator} from "../interfaces/IAtomicPriceAggregator.sol";
5 | import {IUniswapV3PositionInfoProvider} from "../interfaces/IUniswapV3PositionInfoProvider.sol";
6 |
7 | interface IUniswapV3OracleWrapper is
8 | IAtomicPriceAggregator,
9 | IUniswapV3PositionInfoProvider
10 | {}
11 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IUniswapV3PositionInfoProvider.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | struct UinswapV3PositionData {
5 | address token0;
6 | address token1;
7 | uint24 fee;
8 | int24 tickLower;
9 | int24 tickUpper;
10 | int24 currentTick;
11 | uint160 currentPrice;
12 | uint128 liquidity;
13 | uint256 feeGrowthInside0LastX128;
14 | uint256 feeGrowthInside1LastX128;
15 | uint256 tokensOwed0;
16 | uint256 tokensOwed1;
17 | }
18 |
19 | /************
20 | @title IUniswapV3PositionInfoProvider interface
21 | @notice Interface for UniswapV3 Lp token position info.*/
22 |
23 | interface IUniswapV3PositionInfoProvider {
24 | function getOnchainPositionData(uint256 tokenId)
25 | external
26 | view
27 | returns (UinswapV3PositionData memory);
28 |
29 | function getLiquidityAmountFromPositionData(
30 | UinswapV3PositionData memory positionData
31 | ) external view returns (uint256 token0Amount, uint256 token1Amount);
32 |
33 | function getLpFeeAmountFromPositionData(
34 | UinswapV3PositionData memory positionData
35 | ) external view returns (uint256 token0Amount, uint256 token1Amount);
36 | }
37 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/IXTokenType.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /**
5 | * @title IXTokenType
6 | * @author ParallelFi
7 | * @notice Defines the basic interface for an IXTokenType.
8 | **/
9 | enum XTokenType {
10 | PhantomData, // unused
11 | NToken,
12 | NTokenMoonBirds,
13 | NTokenUniswapV3,
14 | NTokenBAYC,
15 | NTokenMAYC,
16 | PToken,
17 | DelegationAwarePToken,
18 | RebasingPToken,
19 | PTokenAToken,
20 | PTokenStETH,
21 | PTokenSApe
22 | }
23 |
24 | interface IXTokenType {
25 | /**
26 | * @notice return token type`of xToken
27 | **/
28 | function getXTokenType() external pure returns (XTokenType);
29 | }
30 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/interfaces/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (C) 2022 ParaSpace
2 |
3 | This program is free software: you can redistribute it and/or modify
4 | it under the terms of the GNU Affero General Public License as
5 | published by the Free Software Foundation, either version 3 of the
6 | License, or any later version.
7 |
8 | This program is distributed in the hope that it will be useful,
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.en.html)
12 | for more details
13 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/flashclaim/UserFlashclaimRegistry.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import "./AirdropFlashClaimReceiver.sol";
5 | import "../interfaces/IUserFlashclaimRegistry.sol";
6 |
7 | contract UserFlashclaimRegistry is IUserFlashclaimRegistry {
8 | address public pool;
9 | mapping(address => address) public userReceivers;
10 |
11 | constructor(address pool_) {
12 | pool = pool_;
13 | }
14 |
15 | /**
16 | * @notice create a default receiver contract for the user
17 | */
18 | function createReceiver() public virtual override {
19 | address caller = msg.sender;
20 | AirdropFlashClaimReceiver receiver = new AirdropFlashClaimReceiver(
21 | caller,
22 | pool
23 | );
24 | userReceivers[caller] = address(receiver);
25 | }
26 |
27 | /**
28 | * @notice get receiver contract address for the user
29 | * @param user The user address
30 | */
31 | function getUserReceivers(address user)
32 | external
33 | view
34 | virtual
35 | override
36 | returns (address)
37 | {
38 | return userReceivers[user];
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/IFlashClaimReceiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /**
5 | * @title IFlashClaimReceiver interface
6 | * @dev implement this interface to develop a flashclaim-compatible flashClaimReceiver contract
7 | **/
8 | interface IFlashClaimReceiver {
9 | function executeOperation(
10 | address asset,
11 | uint256[] calldata tokenIds,
12 | bytes calldata params
13 | ) external returns (bool);
14 | }
15 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/INFTFloorOracle.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface INFTFloorOracle {
5 | function getPrice(address token) external view returns (uint256 price);
6 |
7 | function getLastUpdateTime(address token)
8 | external
9 | view
10 | returns (uint256 timestamp);
11 | }
12 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/INFTOracle.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /************
5 | @title INFTOracle interface
6 | @notice Interface for NFT price oracle.*/
7 | interface INFTOracle {
8 | /* CAUTION: Price uint is ETH based (WEI, 18 decimals) */
9 | // get asset price
10 | function getAssetPrice(address _nftContract)
11 | external
12 | view
13 | returns (uint256);
14 | }
15 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/IPunks.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | /**
5 | * @dev Interface for a permittable ERC721 contract
6 | * See https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
7 | *
8 | * Adds the {permit} method, which can be used to change an account's ERC72 allowance (see {IERC721-allowance}) by
9 | * presenting a message signed by the account. By not relying on {IERC721-approve}, the token holder account doesn't
10 | * need to send a transaction, and thus is not required to hold Ether at all.
11 | */
12 | interface IPunks {
13 | function balanceOf(address account) external view returns (uint256);
14 |
15 | function punkIndexToAddress(uint256 punkIndex)
16 | external
17 | view
18 | returns (address owner);
19 |
20 | function buyPunk(uint256 punkIndex) external;
21 |
22 | function transferPunk(address to, uint256 punkIndex) external;
23 | }
24 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/IUniswapV2Factory.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface IUniswapV2Factory {
5 | function getPair(address tokenA, address tokenB)
6 | external
7 | view
8 | returns (address pair);
9 | }
10 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/IUniswapV2Pair.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity >=0.5.0;
3 |
4 | interface IUniswapV2Pair {
5 | function getReserves()
6 | external
7 | view
8 | returns (
9 | uint112 reserve0,
10 | uint112 reserve1,
11 | uint32 blockTimestampLast
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/IUniswapV2Router01.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface IUniswapV2Router01 {
5 | function getAmountOut(
6 | uint256 amountIn,
7 | uint256 reserveIn,
8 | uint256 reserveOut
9 | ) external pure returns (uint256 amountOut);
10 | }
11 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/IUserFlashclaimRegistry.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: AGPL-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface IUserFlashclaimRegistry {
5 | function createReceiver() external;
6 |
7 | function getUserReceivers(address user) external view returns (address);
8 | }
9 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/IWETH.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface IWETH {
5 | function deposit() external payable;
6 |
7 | function withdraw(uint256) external;
8 |
9 | function approve(address guy, uint256 wad) external returns (bool);
10 |
11 | function transferFrom(
12 | address src,
13 | address dst,
14 | uint256 wad
15 | ) external returns (bool);
16 | }
17 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/IWrappedPunks.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {IERC721} from "../../../contracts/dependencies/openzeppelin/contracts/IERC721.sol";
5 |
6 | //import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
7 |
8 | /**
9 | * @dev Interface for a permittable ERC721 contract
10 | * See https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
11 | *
12 | * Adds the {permit} method, which can be used to change an account's ERC72 allowance (see {IERC721-allowance}) by
13 | * presenting a message signed by the account. By not relying on {IERC721-approve}, the token holder account doesn't
14 | * need to send a transaction, and thus is not required to hold Ether at all.
15 | */
16 | interface IWrappedPunks is IERC721 {
17 | function punkContract() external view returns (address);
18 |
19 | function mint(uint256 punkIndex) external;
20 |
21 | function burn(uint256 punkIndex) external;
22 |
23 | function registerProxy() external;
24 |
25 | function proxyInfo(address user) external returns (address proxy);
26 | }
27 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/misc/interfaces/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (C) 2022 ParaSpace
2 |
3 | This program is free software: you can redistribute it and/or modify
4 | it under the terms of the GNU Affero General Public License as
5 | published by the Free Software Foundation, either version 3 of the
6 | License, or any later version.
7 |
8 | This program is distributed in the hope that it will be useful,
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.en.html)
12 | for more details
13 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/helpers/MockPeripheryContract.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | contract MockPeripheryContractV1 {
5 | address private _manager;
6 | uint256 private _value;
7 |
8 | function initialize(address manager, uint256 value) external {
9 | _manager = manager;
10 | _value = value;
11 | }
12 |
13 | function getManager() external view returns (address) {
14 | return _manager;
15 | }
16 |
17 | function setManager(address newManager) external {
18 | _manager = newManager;
19 | }
20 | }
21 |
22 | contract MockPeripheryContractV2 {
23 | address private _manager;
24 | uint256 private _value;
25 | address private _addressesProvider;
26 |
27 | function initialize(address addressesProvider) external {
28 | _addressesProvider = addressesProvider;
29 | }
30 |
31 | function getManager() external view returns (address) {
32 | return _manager;
33 | }
34 |
35 | function setManager(address newManager) external {
36 | _manager = newManager;
37 | }
38 |
39 | function getAddressesProvider() external view returns (address) {
40 | return _addressesProvider;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/helpers/SelfDestructTransfer.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | contract SelfdestructTransfer {
5 | function destroyAndTransfer(address payable to) external payable {
6 | selfdestruct(to);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/oracle/PriceOracle.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {IPriceOracle} from "../../interfaces/IPriceOracle.sol";
5 |
6 | contract PriceOracle is IPriceOracle {
7 | // Map of asset prices (asset => price)
8 | mapping(address => uint256) internal prices;
9 |
10 | uint256 internal ethPriceUsd;
11 |
12 | event AssetPriceUpdated(address asset, uint256 price, uint256 timestamp);
13 | event EthPriceUpdated(uint256 price, uint256 timestamp);
14 |
15 | function getAssetPrice(address asset)
16 | external
17 | view
18 | override
19 | returns (uint256)
20 | {
21 | return prices[asset];
22 | }
23 |
24 | // set access control if we want to deploy this to mainnet
25 | function setAssetPrice(address asset, uint256 price) external override {
26 | prices[asset] = price;
27 | emit AssetPriceUpdated(asset, price, block.timestamp);
28 | }
29 |
30 | function getEthUsdPrice() external view returns (uint256) {
31 | return ethPriceUsd;
32 | }
33 |
34 | function setEthUsdPrice(uint256 price) external {
35 | ethPriceUsd = price;
36 | emit EthPriceUpdated(price, block.timestamp);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/tokens/AirdropMintableERC721.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import "../../dependencies/openzeppelin/contracts/ERC721Enumerable.sol";
5 |
6 | /**
7 | * @title MintableERC721
8 | * @dev ERC721 minting logic
9 | */
10 | contract AirdropMintableERC721 is ERC721Enumerable {
11 | string public baseURI;
12 |
13 | constructor(string memory name, string memory symbol) ERC721(name, symbol) {
14 | baseURI = "https://MintableERC721/";
15 | }
16 |
17 | /**
18 | * @dev Function to mint tokens
19 | * @param tokenId The id of tokens to mint.
20 | * @return A boolean that indicates if the operation was successful.
21 | */
22 | function mint(uint256 tokenId) public returns (bool) {
23 | require(tokenId < 10000, "exceed id limit");
24 |
25 | _mint(_msgSender(), tokenId);
26 | return true;
27 | }
28 |
29 | function _baseURI() internal view virtual override returns (string memory) {
30 | return baseURI;
31 | }
32 |
33 | function setBaseURI(string memory baseURI_) public {
34 | baseURI = baseURI_;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/tokens/MintableDelegationERC20.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {ERC20} from "../../dependencies/openzeppelin/contracts/ERC20.sol";
5 | import {IDelegationToken} from "../../interfaces/IDelegationToken.sol";
6 |
7 | /**
8 | * @title MintableDelegationERC20
9 | * @dev ERC20 minting logic with delegation
10 | */
11 | contract MintableDelegationERC20 is IDelegationToken, ERC20 {
12 | address public delegatee;
13 |
14 | constructor(
15 | string memory name,
16 | string memory symbol,
17 | uint8 decimals
18 | ) ERC20(name, symbol) {
19 | _setupDecimals(decimals);
20 | }
21 |
22 | /**
23 | * @dev Function to mint tokens
24 | * @param value The amount of tokens to mint.
25 | * @return A boolean that indicates if the operation was successful.
26 | */
27 | function mint(uint256 value) public returns (bool) {
28 | _mint(msg.sender, value);
29 | return true;
30 | }
31 |
32 | function delegate(address delegateeAddress) external override {
33 | delegatee = delegateeAddress;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/tokens/MintableERC1155.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import "../../dependencies/openzeppelin/contracts/ERC1155.sol";
5 |
6 | /**
7 | * @title MintableERC1155
8 | * @dev ERC1155 minting logic
9 | */
10 | contract MintableERC1155 is ERC1155 {
11 | constructor() ERC1155("https://MintableERC1155/") {}
12 |
13 | /**
14 | * @dev Function to mint tokens
15 | * @param id The id of tokens to mint.
16 | * @return A boolean that indicates if the operation was successful.
17 | */
18 | function mint(uint256 id, uint256 amount) public returns (bool) {
19 | require(id > 0, "id is zero");
20 | require(id <= 10, "exceed id limit");
21 | require(amount <= 10000000, "exceed amount limit");
22 |
23 | _mint(_msgSender(), id, amount, new bytes(0));
24 | return true;
25 | }
26 |
27 | function setURI(string memory uri_) public {
28 | _setURI(uri_);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/tokens/MockAToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {MintableERC20} from "./MintableERC20.sol";
5 | import {WadRayMath} from "../../protocol/libraries/math/WadRayMath.sol";
6 |
7 | contract MockAToken is MintableERC20 {
8 |
9 | uint256 public incomeIndex;
10 |
11 | constructor(
12 | string memory name,
13 | string memory symbol,
14 | uint8 decimals
15 | ) MintableERC20(name, symbol, decimals){
16 | incomeIndex = WadRayMath.RAY;
17 | }
18 |
19 | function setIncomeIndex(uint256 _incomeIndex) external{
20 | incomeIndex = _incomeIndex;
21 | }
22 |
23 | function getReserveNormalizedIncome(address)
24 | external
25 | view
26 | returns (uint256) {
27 | return incomeIndex;
28 | }
29 |
30 | function POOL() external view returns (address){
31 | return address(this);
32 | }
33 |
34 | function UNDERLYING_ASSET_ADDRESS() external view returns (address) {
35 | return address(this);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/tokens/WETH9Mocked.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {WETH9} from "../../dependencies/weth/WETH9.sol";
5 |
6 | contract WETH9Mocked is WETH9 {
7 | // Mint not backed by Ether: only for testing purposes
8 | function mint(uint256 value) public returns (bool) {
9 | balanceOf[msg.sender] += value;
10 | emit Transfer(address(0), msg.sender, value);
11 | return true;
12 | }
13 |
14 | function mint(address account, uint256 value) public returns (bool) {
15 | balanceOf[account] += value;
16 | emit Transfer(address(0), account, value);
17 | return true;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/tokens/WrappedPunk/ICryptoPunk.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface ICryptoPunk {
5 | function punkIndexToAddress(uint256 punkIndex) external returns (address);
6 |
7 | function punksOfferedForSale(uint256 punkIndex)
8 | external
9 | returns (
10 | bool,
11 | uint256,
12 | address,
13 | uint256,
14 | address
15 | );
16 |
17 | function buyPunk(uint256 punkIndex) external payable;
18 |
19 | function transferPunk(address to, uint256 punkIndex) external;
20 | }
21 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/tokens/WrappedPunk/UserProxy.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | contract UserProxy {
5 | address private immutable _owner;
6 |
7 | /**
8 | * @dev Initializes the contract settings
9 | */
10 | constructor() {
11 | _owner = msg.sender;
12 | }
13 |
14 | /**
15 | * @dev Transfers punk to the smart contract owner
16 | */
17 | function transfer(address punkContract, uint256 punkIndex)
18 | external
19 | returns (bool)
20 | {
21 | if (_owner != msg.sender) {
22 | return false;
23 | }
24 |
25 | (bool result, ) = punkContract.call(
26 | abi.encodeWithSignature(
27 | "transferPunk(address,uint256)",
28 | _owner,
29 | punkIndex
30 | )
31 | );
32 |
33 | return result;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/tokens/stETH.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {MintableERC20} from "./MintableERC20.sol";
5 | import {ILido} from "../../interfaces/ILido.sol";
6 | import {WadRayMath} from "../../protocol/libraries/math/WadRayMath.sol";
7 |
8 | contract stETH is MintableERC20, ILido {
9 |
10 |
11 | uint256 internal _shares;
12 |
13 |
14 | constructor(
15 | string memory name,
16 | string memory symbol,
17 | uint8 decimals
18 | ) MintableERC20(name, symbol, decimals){
19 |
20 | }
21 |
22 |
23 | function setPooledEthBaseShares(uint256 _sharesAmount)
24 | external {
25 | _shares = _sharesAmount;
26 | }
27 |
28 | function getPooledEthByShares(uint256 _sharesAmount)
29 | external
30 | view
31 | returns (uint256) {
32 | return _shares * _sharesAmount / WadRayMath.RAY;
33 | }
34 | }
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/upgradeability/MockNToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {NToken} from "../../protocol/tokenization/NToken.sol";
5 | import {IPool} from "../../interfaces/IPool.sol";
6 | import {IRewardController} from "../../interfaces/IRewardController.sol";
7 |
8 | contract MockNToken is NToken {
9 | constructor(IPool pool) NToken(pool, false) {}
10 |
11 | function getRevision() internal pure override returns (uint256) {
12 | return 0x2;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/upgradeability/MockPToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {PToken} from "../../protocol/tokenization/PToken.sol";
5 | import {IPool} from "../../interfaces/IPool.sol";
6 | import {IRewardController} from "../../interfaces/IRewardController.sol";
7 |
8 | contract MockPToken is PToken {
9 | constructor(IPool pool) PToken(pool) {}
10 |
11 | function getRevision() internal pure override returns (uint256) {
12 | return 0x2;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/mocks/upgradeability/MockVariableDebtToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {VariableDebtToken} from "../../protocol/tokenization/VariableDebtToken.sol";
5 | import {IPool} from "../../interfaces/IPool.sol";
6 |
7 | contract MockVariableDebtToken is VariableDebtToken {
8 | constructor(IPool pool) VariableDebtToken(pool) {}
9 |
10 | function getRevision() internal pure override returns (uint256) {
11 | return 0x3;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/protocol/libraries/helpers/Helpers.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {IERC20} from "../../../dependencies/openzeppelin/contracts/IERC20.sol";
5 | import {DataTypes} from "../types/DataTypes.sol";
6 |
7 | /**
8 | * @title Helpers library
9 | *
10 | */
11 | library Helpers {
12 | /**
13 | * @notice Fetches the user current stable and variable debt balances
14 | * @param user The user address
15 | * @param debtTokenAddress The debt token address
16 | * @return The variable debt balance
17 | **/
18 | function getUserCurrentDebt(address user, address debtTokenAddress)
19 | internal
20 | view
21 | returns (uint256)
22 | {
23 | return (IERC20(debtTokenAddress).balanceOf(user));
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/protocol/pool/PoolStorage.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {UserConfiguration} from "../libraries/configuration/UserConfiguration.sol";
5 | import {ReserveConfiguration} from "../libraries/configuration/ReserveConfiguration.sol";
6 | import {ReserveLogic} from "../libraries/logic/ReserveLogic.sol";
7 | import {DataTypes} from "../libraries/types/DataTypes.sol";
8 |
9 | /**
10 | * @title PoolStorage
11 | *
12 | * @notice Contract used as storage of the Pool contract.
13 | * @dev It defines the storage layout of the Pool contract.
14 | */
15 | contract PoolStorage {
16 | bytes32 constant POOL_STORAGE_POSITION =
17 | bytes32(uint256(keccak256("paraspace.proxy.pool.storage")) - 1);
18 |
19 | function poolStorage()
20 | internal
21 | pure
22 | returns (DataTypes.PoolStorage storage rgs)
23 | {
24 | bytes32 position = POOL_STORAGE_POSITION;
25 | assembly {
26 | rgs.slot := position
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/protocol/tokenization/ATokenDebtToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {IPool} from "../../interfaces/IPool.sol";
5 | import {RebasingDebtToken} from "./RebasingDebtToken.sol";
6 | import {WadRayMath} from "../libraries/math/WadRayMath.sol";
7 | import {IAToken} from "../../interfaces/IAToken.sol";
8 |
9 | /**
10 | * @title aToken Rebasing Debt Token
11 | *
12 | * @notice Implementation of the interest bearing token for the ParaSpace protocol
13 | */
14 | contract ATokenDebtToken is RebasingDebtToken {
15 | constructor(IPool pool) RebasingDebtToken(pool) {
16 | //intentionally empty
17 | }
18 |
19 | /**
20 | * @return Current rebasing index of aToken in RAY
21 | **/
22 | function lastRebasingIndex() internal view override returns (uint256) {
23 | // Returns Aave aToken liquidity index
24 | return
25 | IAToken(_underlyingAsset).POOL().getReserveNormalizedIncome(
26 | IAToken(_underlyingAsset).UNDERLYING_ASSET_ADDRESS()
27 | );
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/protocol/tokenization/PTokenAToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {IPool} from "../../interfaces/IPool.sol";
5 | import {RebasingPToken} from "./RebasingPToken.sol";
6 | import {WadRayMath} from "../libraries/math/WadRayMath.sol";
7 | import {IAToken} from "../../interfaces/IAToken.sol";
8 | import {XTokenType} from "../../interfaces/IXTokenType.sol";
9 |
10 | /**
11 | * @title aToken Rebasing PToken
12 | *
13 | * @notice Implementation of the interest bearing token for the ParaSpace protocol
14 | */
15 | contract PTokenAToken is RebasingPToken {
16 | constructor(IPool pool) RebasingPToken(pool) {
17 | //intentionally empty
18 | }
19 |
20 | /**
21 | * @return Current rebasing index of aToken in RAY
22 | **/
23 | function lastRebasingIndex() internal view override returns (uint256) {
24 | // Returns Aave aToken liquidity index
25 | return
26 | IAToken(_underlyingAsset).POOL().getReserveNormalizedIncome(
27 | IAToken(_underlyingAsset).UNDERLYING_ASSET_ADDRESS()
28 | );
29 | }
30 |
31 | function getXTokenType() external pure override returns (XTokenType) {
32 | return XTokenType.PTokenAToken;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/protocol/tokenization/StETHDebtToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BUSL-1.1
2 | pragma solidity 0.8.10;
3 |
4 | import {IPool} from "../../interfaces/IPool.sol";
5 | import {ILido} from "../../interfaces/ILido.sol";
6 | import {RebasingDebtToken} from "./RebasingDebtToken.sol";
7 | import {WadRayMath} from "../libraries/math/WadRayMath.sol";
8 |
9 | /**
10 | * @title stETH Rebasing Debt Token
11 | *
12 | * @notice Implementation of the interest bearing token for the ParaSpace protocol
13 | */
14 | contract StETHDebtToken is RebasingDebtToken {
15 | constructor(IPool pool) RebasingDebtToken(pool) {
16 | //intentionally empty
17 | }
18 |
19 | /**
20 | * @return Current rebasing index of stETH in RAY
21 | **/
22 | function lastRebasingIndex() internal view override returns (uint256) {
23 | // Returns amount of stETH corresponding to 10**27 stETH shares.
24 | // The 10**27 is picked to provide the same precision as the ParaSpace
25 | // liquidity index, which is in RAY (10**27).
26 | return ILido(_underlyingAsset).getPooledEthByShares(WadRayMath.RAY);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/ui/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (C) 2022 ParaSpace
2 |
3 | This program is free software: you can redistribute it and/or modify
4 | it under the terms of the GNU Affero General Public License as
5 | published by the Free Software Foundation, either version 3 of the
6 | License, or any later version.
7 |
8 | This program is distributed in the hope that it will be useful,
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.en.html)
12 | for more details
13 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/ui/interfaces/IEACAggregatorProxy.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | interface IEACAggregatorProxy {
5 | function decimals() external view returns (uint8);
6 |
7 | function latestAnswer() external view returns (int256);
8 |
9 | function latestTimestamp() external view returns (uint256);
10 |
11 | function latestRound() external view returns (uint256);
12 |
13 | function getAnswer(uint256 roundId) external view returns (int256);
14 |
15 | function getTimestamp(uint256 roundId) external view returns (uint256);
16 |
17 | event AnswerUpdated(
18 | int256 indexed current,
19 | uint256 indexed roundId,
20 | uint256 timestamp
21 | );
22 | event NewRound(uint256 indexed roundId, address indexed startedBy);
23 | }
24 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/ui/interfaces/IERC20DetailedBytes.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {IERC20} from "../../dependencies/openzeppelin/contracts/IERC20.sol";
5 |
6 | interface IERC20DetailedBytes is IERC20 {
7 | function name() external view returns (bytes32);
8 |
9 | function symbol() external view returns (bytes32);
10 |
11 | function decimals() external view returns (uint8);
12 | }
13 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/ui/interfaces/IWETHGateway.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {DataTypes} from "../../protocol/libraries/types/DataTypes.sol";
5 |
6 | interface IWETHGateway {
7 | event EmergencyTokenTransfer(address token, address to, uint256 amount);
8 |
9 | function depositETH(address onBehalfOf, uint16 referralCode)
10 | external
11 | payable;
12 |
13 | function withdrawETH(uint256 amount, address onBehalfOf) external;
14 |
15 | function repayETH(uint256 amount, address onBehalfOf) external payable;
16 |
17 | function borrowETH(uint256 amount, uint16 referralCode) external;
18 |
19 | function withdrawETHWithPermit(
20 | uint256 amount,
21 | address to,
22 | uint256 deadline,
23 | uint8 permitV,
24 | bytes32 permitR,
25 | bytes32 permitS
26 | ) external;
27 | }
28 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/ui/interfaces/IWPunkGateway.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: agpl-3.0
2 | pragma solidity 0.8.10;
3 |
4 | import {DataTypes} from "../../protocol/libraries/types/DataTypes.sol";
5 |
6 | interface IWPunkGateway {
7 | event EmergencyERC721TokenTransfer(
8 | address token,
9 | uint256 tokenId,
10 | address to
11 | );
12 |
13 | event EmergencyPunkTransfer(address to, uint256 punkIndex);
14 |
15 | function supplyPunk(
16 | DataTypes.ERC721SupplyParams[] calldata punkIndexes,
17 | address onBehalfOf,
18 | uint16 referralCode
19 | ) external;
20 |
21 | function withdrawPunk(uint256[] calldata punkIndexes, address to) external;
22 |
23 | function acceptBidWithCredit(
24 | bytes32 marketplaceId,
25 | bytes calldata payload,
26 | DataTypes.Credit calldata credit,
27 | uint256[] calldata punkIndexes,
28 | uint16 referralCode
29 | ) external;
30 |
31 | function batchAcceptBidWithCredit(
32 | bytes32[] calldata marketplaceIds,
33 | bytes[] calldata payloads,
34 | DataTypes.Credit[] calldata credits,
35 | uint256[] calldata punkIndexes,
36 | uint16 referralCode
37 | ) external;
38 | }
39 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/ui/interfaces/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (C) 2022 ParaSpace
2 |
3 | This program is free software: you can redistribute it and/or modify
4 | it under the terms of the GNU Affero General Public License as
5 | published by the Free Software Foundation, either version 3 of the
6 | License, or any later version.
7 |
8 | This program is distributed in the hope that it will be useful,
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.en.html)
12 | for more details
13 |
--------------------------------------------------------------------------------
/paraspace-core/contracts/ui/libraries/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (C) 2022 ParaSpace
2 |
3 | This program is free software: you can redistribute it and/or modify
4 | it under the terms of the GNU Affero General Public License as
5 | published by the Free Software Foundation, either version 3 of the
6 | License, or any later version.
7 |
8 | This program is distributed in the hope that it will be useful,
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.en.html)
12 | for more details
13 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/evm-wallets.ts:
--------------------------------------------------------------------------------
1 | const balance = "1000000000000000000000000";
2 |
3 | export const accounts = [
4 | {
5 | privateKey:
6 | "f0293a766d316479b4eb46b8a4b68ec7d22ec8eb384e15552dba3a8daf6f487e",
7 | balance,
8 | },
9 | {
10 | privateKey:
11 | "d15e90bad64e8f9acbd2f47e5523ca1fe30bd68c0e76149f4c6c95c9967ad4fd",
12 | balance,
13 | },
14 | {
15 | privateKey:
16 | "54575da22fe9de29b12d7f10e93bcc1fee72839c33bfa254f03b5753cd43c417",
17 | balance,
18 | },
19 | {
20 | privateKey:
21 | "aaadd9d0d6e73dff9ebd749ab5c5343062166609f7d55a340443557f25ff686a",
22 | balance,
23 | },
24 | {
25 | privateKey:
26 | "8f7f6f865393d882becf3c662bb3c6011955b074ba22dfe246d9b1136c9dd01f",
27 | balance,
28 | },
29 | ];
30 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/helpers/README.md:
--------------------------------------------------------------------------------
1 | # paraspace-helpers
2 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/helpers/db-adapter.ts:
--------------------------------------------------------------------------------
1 | import type {AdapterSync} from "lowdb";
2 | import {default as FileAdapter} from "lowdb/adapters/FileSync";
3 |
4 | class MemoryAdapter {
5 | static state: any = {};
6 | read() {
7 | return MemoryAdapter.state;
8 | }
9 | write(_state: any) {
10 | MemoryAdapter.state = _state;
11 | }
12 | }
13 |
14 | export const getAdapter = (file: string): AdapterSync =>
15 | (file === ":memory:" ? new MemoryAdapter() : new FileAdapter(file)) as any;
16 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/helpers/eip-712-types/credit.ts:
--------------------------------------------------------------------------------
1 | const creditType = {
2 | Credit: [
3 | {name: "token", type: "address"},
4 | {name: "amount", type: "uint256"},
5 | {name: "orderId", type: "bytes"},
6 | ],
7 | };
8 |
9 | export default creditType;
10 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/helpers/eip-712-types/domain.ts:
--------------------------------------------------------------------------------
1 | const eip712DomainType = Object.freeze({
2 | EIP712Domain: [
3 | {name: "name", type: "string"},
4 | {name: "version", type: "string"},
5 | {name: "chainId", type: "uint256"},
6 | {name: "verifyingContract", type: "address"},
7 | ],
8 | });
9 |
10 | export default eip712DomainType;
11 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/helpers/seaport-helpers/eip-712-types/domain.js:
--------------------------------------------------------------------------------
1 | const eip712DomainType = {
2 | EIP712Domain: [
3 | {name: "name", type: "string"},
4 | {name: "version", type: "string"},
5 | {name: "chainId", type: "uint256"},
6 | {name: "verifyingContract", type: "address"},
7 | ],
8 | };
9 |
10 | module.exports = Object.freeze({
11 | eip712DomainType,
12 | });
13 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/helpers/seaport-helpers/eip-712-types/order.js:
--------------------------------------------------------------------------------
1 | const orderType = {
2 | OrderComponents: [
3 | {name: "offerer", type: "address"},
4 | {name: "zone", type: "address"},
5 | {name: "offer", type: "OfferItem[]"},
6 | {name: "consideration", type: "ConsiderationItem[]"},
7 | {name: "orderType", type: "uint8"},
8 | {name: "startTime", type: "uint256"},
9 | {name: "endTime", type: "uint256"},
10 | {name: "zoneHash", type: "bytes32"},
11 | {name: "salt", type: "uint256"},
12 | {name: "conduitKey", type: "bytes32"},
13 | {name: "counter", type: "uint256"},
14 | ],
15 | OfferItem: [
16 | {name: "itemType", type: "uint8"},
17 | {name: "token", type: "address"},
18 | {name: "identifierOrCriteria", type: "uint256"},
19 | {name: "startAmount", type: "uint256"},
20 | {name: "endAmount", type: "uint256"},
21 | ],
22 | ConsiderationItem: [
23 | {name: "itemType", type: "uint8"},
24 | {name: "token", type: "address"},
25 | {name: "identifierOrCriteria", type: "uint256"},
26 | {name: "startAmount", type: "uint256"},
27 | {name: "endAmount", type: "uint256"},
28 | {name: "recipient", type: "address"},
29 | ],
30 | };
31 |
32 | module.exports = Object.freeze({
33 | orderType,
34 | });
35 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/helpers/tenderly-utils.ts:
--------------------------------------------------------------------------------
1 | import {HardhatRuntimeEnvironment} from "hardhat/types";
2 | import {DRE} from "./misc-utils";
3 | import {Contract} from "ethers";
4 | import {TENDERLY} from "./hardhat-constants";
5 |
6 | export const usingTenderly = () =>
7 | DRE &&
8 | ((DRE as HardhatRuntimeEnvironment).network.name.includes("tenderly") ||
9 | TENDERLY);
10 |
11 | export const verifyAtTenderly = async (id: string, instance: Contract) => {
12 | console.log("\n- Doing Tenderly contract verification of", id);
13 | // eslint-disable-next-line
14 | await (DRE as any).tenderlyNetwork.verify({
15 | name: id,
16 | address: instance.address,
17 | });
18 | console.log(` - Verified ${id} at Tenderly!`);
19 | };
20 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/market-config/oracle.ts:
--------------------------------------------------------------------------------
1 | import {IOracleConfig} from "../helpers/types";
2 |
3 | export const MainnetOracleConfig: IOracleConfig = {
4 | ExpirationPeriod: 1800,
5 | DeviationRate: 300,
6 | Nodes: [],
7 | };
8 |
9 | export const TestnetOracleConfig: IOracleConfig = {
10 | ExpirationPeriod: 600,
11 | DeviationRate: 1000,
12 | Nodes: [],
13 | };
14 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/README.md:
--------------------------------------------------------------------------------
1 | # paraspace-tasks
2 |
3 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/deployments/full-deployment/steps/00_deleteDb.ts:
--------------------------------------------------------------------------------
1 | import fs from "fs";
2 | import {DB_PATH} from "../../../../helpers/hardhat-constants";
3 |
4 | export const step_00 = async () => {
5 | if (fs.existsSync(DB_PATH)) fs.unlinkSync(DB_PATH);
6 | };
7 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/deployments/full-deployment/steps/01_ERC20Tokens.ts:
--------------------------------------------------------------------------------
1 | import {deployAllERC20Tokens} from "../../../../helpers/contracts-deployments";
2 |
3 | export const step_01 = async (verify = false) => {
4 | try {
5 | return await deployAllERC20Tokens(verify);
6 | } catch (error) {
7 | console.error(error);
8 | process.exit(1);
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/deployments/full-deployment/steps/02_ERC721Tokens.ts:
--------------------------------------------------------------------------------
1 | import {deployAllERC721Tokens} from "../../../../helpers/contracts-deployments";
2 |
3 | export const step_02 = async (verify = false) => {
4 | try {
5 | return await deployAllERC721Tokens(verify);
6 | } catch (error) {
7 | console.error(error);
8 | process.exit(1);
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/deployments/full-deployment/steps/08_reservesSetupHelper.ts:
--------------------------------------------------------------------------------
1 | import {deployReservesSetupHelper} from "../../../../helpers/contracts-deployments";
2 |
3 | export const step_08 = async (verify = false) => {
4 | try {
5 | return await deployReservesSetupHelper(verify);
6 | } catch (error) {
7 | console.error(error);
8 | process.exit(1);
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/deployments/full-deployment/steps/12_uiIncentiveDataProvider.ts:
--------------------------------------------------------------------------------
1 | import {deployUiIncentiveDataProvider} from "../../../../helpers/contracts-deployments";
2 |
3 | export const step_12 = async (verify = false) => {
4 | try {
5 | return await deployUiIncentiveDataProvider(verify);
6 | } catch (error) {
7 | console.error(error);
8 | process.exit(1);
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/deployments/full-deployment/steps/13_wethGateway.ts:
--------------------------------------------------------------------------------
1 | import {ZERO_ADDRESS} from "../../../../helpers/constants";
2 | import {
3 | deployWETHGateway,
4 | deployWETHGatewayProxy,
5 | } from "../../../../helpers/contracts-deployments";
6 | import {
7 | getAllTokens,
8 | getPoolProxy,
9 | getPoolAddressesProvider,
10 | } from "../../../../helpers/contracts-getters";
11 |
12 | export const step_13 = async (verify = false) => {
13 | try {
14 | const allTokens = await getAllTokens();
15 | const addressesProvider = await getPoolAddressesProvider();
16 | const poolAddress = await addressesProvider.getPool();
17 | const poolProxy = await getPoolProxy(poolAddress);
18 |
19 | const wethGateway = await deployWETHGateway(
20 | allTokens.WETH.address,
21 | poolProxy.address,
22 | verify
23 | );
24 |
25 | const wethGatewayEncodedInitialize =
26 | wethGateway.interface.encodeFunctionData("initialize");
27 |
28 | await deployWETHGatewayProxy(
29 | ZERO_ADDRESS, // disable upgradeability
30 | wethGateway.address,
31 | wethGatewayEncodedInitialize,
32 | verify
33 | );
34 | } catch (error) {
35 | console.error(error);
36 | process.exit(1);
37 | }
38 | };
39 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/deployments/full-deployment/steps/after-all.ts:
--------------------------------------------------------------------------------
1 | import {BLOCKSCOUT_DISABLE_INDEXER} from "../../../../helpers/hardhat-constants";
2 | import {DRE, isFork} from "../../../../helpers/misc-utils";
3 |
4 | export const afterAll = async () => {
5 | console.log("running after all hook");
6 | if (!isFork() && BLOCKSCOUT_DISABLE_INDEXER) {
7 | return;
8 | }
9 | await DRE.network.provider.send("evm_setAutomine", [false]);
10 | await DRE.network.provider.send("evm_setIntervalMining", [3000]);
11 | };
12 |
--------------------------------------------------------------------------------
/paraspace-core/deploy/tasks/deployments/full-deployment/steps/before-all.ts:
--------------------------------------------------------------------------------
1 | export const beforeAll = async () => {
2 | console.log("running before all hook");
3 | };
4 |
--------------------------------------------------------------------------------
/paraspace-core/foundry.toml:
--------------------------------------------------------------------------------
1 | [profile.default]
2 | via_ir = false
3 | src = 'contracts'
4 | out = 'foundry_out'
5 | libs = ["foundry_libs"]
6 | test = 'foundry_test'
7 | remappings = [
8 | 'ds-test=foundry_libs/ds-test/src/',
9 | 'forge-std=foundry_libs/forge-std/src/',
10 | ]
11 | optimizer = true
12 | optimizer_runs = 19_066
13 | optimizerSteps = ''
14 |
15 |
16 |
--------------------------------------------------------------------------------
/paraspace-core/rust-toolchain:
--------------------------------------------------------------------------------
1 | nightly-2022-09-19
2 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/00_deleteDb.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:delete-db", "Delete Db").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_00} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/00_deleteDb"
8 | );
9 | await step_00(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/01_ERC20Tokens.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:erc20-tokens", "Deploy ERC20 tokens").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_01} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/01_ERC20Tokens"
8 | );
9 | await step_01(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/02_ERC721Tokens.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:erc721-tokens", "Deploy ERC721 tokens").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {step_02} = await import(
8 | "../../deploy/tasks/deployments/full-deployment/steps/02_ERC721Tokens"
9 | );
10 | await step_02(ETHERSCAN_VERIFICATION);
11 | }
12 | );
13 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/03_faucet.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task(
5 | "deploy:faucet",
6 | "Deploy faucet for mocked ERC20 & ERC721 tokens"
7 | ).setAction(async (_, DRE) => {
8 | await DRE.run("set-DRE");
9 | const {step_03} = await import(
10 | "../../deploy/tasks/deployments/full-deployment/steps/03_faucet"
11 | );
12 | await step_03(ETHERSCAN_VERIFICATION);
13 | });
14 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/04_addressProvider.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:address-provider", "Deploy addresses provider").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {step_04} = await import(
8 | "../../deploy/tasks/deployments/full-deployment/steps/04_addressProvider"
9 | );
10 | await step_04(ETHERSCAN_VERIFICATION);
11 | }
12 | );
13 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/05_aclManager.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:acl-manager", "Deploy ACL manager").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_05} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/05_aclManager"
8 | );
9 | await step_05(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/06_pool.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:pool", "Deploy pool components").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_06} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/06_pool"
8 | );
9 | await step_06(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/07_poolConfigurator.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:pool-configurator", "Deploy pool configurator").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {step_07} = await import(
8 | "../../deploy/tasks/deployments/full-deployment/steps/07_poolConfigurator"
9 | );
10 | await step_07(ETHERSCAN_VERIFICATION);
11 | }
12 | );
13 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/08_reservesSetupHelper.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:reserves-setup-helper", "Deploy reserves setup helper").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {step_08} = await import(
8 | "../../deploy/tasks/deployments/full-deployment/steps/08_reservesSetupHelper"
9 | );
10 | await step_08(ETHERSCAN_VERIFICATION);
11 | }
12 | );
13 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/09_fallbackOracle.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:fallback-oracle", "Deploy fallback oracle").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {step_09} = await import(
8 | "../../deploy/tasks/deployments/full-deployment/steps/09_fallbackOracle"
9 | );
10 | await step_09(ETHERSCAN_VERIFICATION);
11 | }
12 | );
13 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/10_allAggregators.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:all-aggregators", "Deploy all aggregators").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {step_10} = await import(
8 | "../../deploy/tasks/deployments/full-deployment/steps/10_allAggregators"
9 | );
10 | await step_10(ETHERSCAN_VERIFICATION);
11 | }
12 | );
13 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/11_allReserves.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:all-reserves", "Deploy all reserves").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_11} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/11_allReserves"
8 | );
9 | await step_11(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/12_uiIncentiveDataProvider.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task(
5 | "deploy:ui-incentive-data-provider",
6 | "Deploy UI incentive data provider"
7 | ).setAction(async (_, DRE) => {
8 | await DRE.run("set-DRE");
9 | const {step_12} = await import(
10 | "../../deploy/tasks/deployments/full-deployment/steps/12_uiIncentiveDataProvider"
11 | );
12 | await step_12(ETHERSCAN_VERIFICATION);
13 | });
14 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/13_wethGateway.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:weth-gateway", "Deploy weth gateway").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_13} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/13_wethGateway"
8 | );
9 | await step_13(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/14_punkGateway.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:punk-gateway", "Deploy punk gateway").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_14} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/14_punkGateway"
8 | );
9 | await step_14(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/15_seaport.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:seaport", "Deploy seaport").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_15} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/15_seaport"
8 | );
9 | await step_15(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/16_looksrare.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:looksrare", "Deploy looksrare").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_16} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/16_looksrare"
8 | );
9 | await step_16(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/17_x2y2.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:x2y2", "Deploy x2y2").setAction(async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {step_17} = await import(
7 | "../../deploy/tasks/deployments/full-deployment/steps/17_x2y2"
8 | );
9 | await step_17(ETHERSCAN_VERIFICATION);
10 | });
11 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/18_flashClaimRegistry.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:flash-claim-registry", "Deploy flash claim registry").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {step_18} = await import(
8 | "../../deploy/tasks/deployments/full-deployment/steps/18_flashClaimRegistry"
9 | );
10 | await step_18(ETHERSCAN_VERIFICATION);
11 | }
12 | );
13 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/19_renounceOwnership.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("deploy:renounce-ownership", "Renounce deployer ownership").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {step_19} = await import(
8 | "../../deploy/tasks/deployments/full-deployment/steps/19_renounceOwnership"
9 | );
10 | await step_19(ETHERSCAN_VERIFICATION);
11 | }
12 | );
13 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/all.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {
3 | DEPLOY_END,
4 | DEPLOY_START,
5 | ETHERSCAN_VERIFICATION,
6 | } from "../../deploy/helpers/hardhat-constants";
7 | import {beforeAll} from "../../deploy/tasks/deployments/full-deployment/steps/before-all";
8 | import {afterAll} from "../../deploy/tasks/deployments/full-deployment/steps/after-all";
9 |
10 | task("deploy:all", "Deploy all contracts").setAction(async (_, DRE) => {
11 | await DRE.run("set-DRE");
12 | //for test_only mode we run each test in a live hardhat network without redeploy
13 | if (DEPLOY_END - DEPLOY_START < 1) {
14 | return;
15 | }
16 |
17 | const {printContracts} = await import("../../deploy/helpers/misc-utils");
18 | const {getAllSteps} = await import(
19 | "../../deploy/tasks/deployments/full-deployment/steps"
20 | );
21 | const steps = await getAllSteps();
22 |
23 | console.time("setup");
24 |
25 | await beforeAll();
26 | for (let i = DEPLOY_START; i < DEPLOY_END; i++) {
27 | await steps[i](ETHERSCAN_VERIFICATION);
28 | console.log(
29 | `------------ step ${i.toString().padStart(2, "0")} done ------------`
30 | );
31 | }
32 | await afterAll();
33 |
34 | await printContracts();
35 |
36 | console.timeEnd("setup");
37 | });
38 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/printContracts.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 |
3 | task("print-contracts", "Print deployed contracts").setAction(
4 | async (_, DRE) => {
5 | await DRE.run("set-DRE");
6 | const {printContracts} = await import("../../deploy/helpers/misc-utils");
7 | printContracts();
8 | }
9 | );
10 |
--------------------------------------------------------------------------------
/paraspace-core/tasks/deployments/verifyContracts.ts:
--------------------------------------------------------------------------------
1 | import {task} from "hardhat/config";
2 | import {ETHERSCAN_VERIFICATION_JOBS} from "../../deploy/helpers/hardhat-constants";
3 |
4 | task("verify-contracts", "Verify deployed contracts on etherscan").setAction(
5 | async (_, DRE) => {
6 | await DRE.run("set-DRE");
7 | const {verifyContracts} = await import("../../deploy/helpers/misc-utils");
8 | await verifyContracts(ETHERSCAN_VERIFICATION_JOBS);
9 | }
10 | );
11 |
--------------------------------------------------------------------------------
/paraspace-core/test/_oracle_uniswapv3.spec.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/paraspace-core/test/_oracle_uniswapv3.spec.ts
--------------------------------------------------------------------------------
/paraspace-core/test/_xtoken_ntoken.spec.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/paraspace-core/test/_xtoken_ntoken.spec.ts
--------------------------------------------------------------------------------
/paraspace-core/test/_xtoken_ntoken_uniswapv3.spec.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2022-11-paraspace/34cb87ea4a5e698f49ae5f5a07228db99514b7c7/paraspace-core/test/_xtoken_ntoken_uniswapv3.spec.ts
--------------------------------------------------------------------------------
/paraspace-core/test/emptyrun.coverage.spec.ts:
--------------------------------------------------------------------------------
1 | /* Workaround to fix 0 coverage report issue */
2 |
3 | describe("Empty run for coverage", () => {
4 | // nope
5 | });
6 |
--------------------------------------------------------------------------------
/paraspace-core/test/helpers/setup-env.ts:
--------------------------------------------------------------------------------
1 | import hre from "hardhat";
2 | import {initializeMakeSuite} from "./make-suite";
3 |
4 | export async function testEnvFixture() {
5 | await hre.run("deploy:all");
6 | return await initializeMakeSuite();
7 | }
8 |
--------------------------------------------------------------------------------
/paraspace-core/test/helpers/snapshot-manager.ts:
--------------------------------------------------------------------------------
1 | import {DRE} from "../../deploy/helpers/misc-utils";
2 |
3 | class SnapshotManager {
4 | snapshots: {[id: string]: string} = {};
5 |
6 | async take(): Promise {
7 | const id = await this.takeSnapshot();
8 | this.snapshots[id] = id;
9 | return id;
10 | }
11 |
12 | async revert(id: string): Promise {
13 | await this.revertSnapshot(this.snapshots[id]);
14 | this.snapshots[id] = await this.takeSnapshot();
15 | }
16 |
17 | private async takeSnapshot(): Promise {
18 | return (await DRE.network.provider.request({
19 | method: "evm_snapshot",
20 | params: [],
21 | })) as string;
22 | }
23 |
24 | private async revertSnapshot(id: string) {
25 | await DRE.network.provider.request({
26 | method: "evm_revert",
27 | params: [id],
28 | });
29 | }
30 | }
31 |
32 | export const snapshot = new SnapshotManager();
33 |
--------------------------------------------------------------------------------
/paraspace-core/test/helpers/utils/funds.ts:
--------------------------------------------------------------------------------
1 | import {BigNumber, Signer} from "ethers";
2 | import {SelfdestructTransfer__factory} from "../../../types";
3 |
4 | export const topUpNonPayableWithEther = async (
5 | holder: Signer,
6 | accounts: string[],
7 | amount: BigNumber
8 | ) => {
9 | let selfdestructContract;
10 | const factory = new SelfdestructTransfer__factory(holder);
11 | for (const account of accounts) {
12 | selfdestructContract = await factory.deploy();
13 | await selfdestructContract.deployed();
14 | await selfdestructContract.destroyAndTransfer(account, {
15 | value: amount,
16 | });
17 | }
18 | };
19 |
20 | // const topUpWalletsWithEther = async (
21 | // holder: JsonRpcSigner,
22 | // wallets: string[],
23 | // amount: string
24 | // ) => {
25 | // for (const wallet of wallets) {
26 | // await waitForTx(
27 | // await holder.sendTransaction({
28 | // to: wallet,
29 | // value: amount,
30 | // })
31 | // )
32 | // }
33 | // };
34 |
--------------------------------------------------------------------------------
/paraspace-core/test/helpers/utils/interfaces/index.ts:
--------------------------------------------------------------------------------
1 | import {BigNumber} from "ethers";
2 |
3 | export interface UserReserveData {
4 | scaledPTokenBalance: BigNumber;
5 | currentPTokenBalance: BigNumber;
6 | currentVariableDebt: BigNumber;
7 | scaledVariableDebt: BigNumber;
8 | liquidityRate: BigNumber;
9 | usageAsCollateralEnabled: boolean;
10 | walletBalance: BigNumber;
11 | [key: string]: BigNumber | string | boolean;
12 | }
13 |
14 | export interface ReserveData {
15 | address: string;
16 | symbol: string;
17 | decimals: BigNumber;
18 | reserveFactor: BigNumber;
19 | availableLiquidity: BigNumber;
20 | totalVariableDebt: BigNumber;
21 | scaledVariableDebt: BigNumber;
22 | variableBorrowRate: BigNumber;
23 | supplyUtilizationRate: BigNumber;
24 | borrowUtilizationRate: BigNumber;
25 | liquidityIndex: BigNumber;
26 | variableBorrowIndex: BigNumber;
27 | xTokenAddress: string;
28 | lastUpdateTimestamp: BigNumber;
29 | liquidityRate: BigNumber;
30 | accruedToTreasuryScaled: BigNumber;
31 | [key: string]: BigNumber | string;
32 | }
33 |
--------------------------------------------------------------------------------
/paraspace-core/test/helpers/utils/wallets.ts:
--------------------------------------------------------------------------------
1 | import {accounts} from "../../../deploy/wallets";
2 |
3 | export const getTestWallets = (): {privateKey: string; balance: string}[] => {
4 | if (!accounts.every((element) => element.privateKey) || accounts.length === 0)
5 | throw new Error("INVALID_TEST_WALLETS");
6 | return accounts;
7 | };
8 |
--------------------------------------------------------------------------------
/paraspace-core/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2019",
4 | "module": "commonjs",
5 | "strict": true,
6 | "esModuleInterop": true,
7 | "outDir": "dist",
8 | "noImplicitAny": false,
9 | "resolveJsonModule": true
10 | },
11 | "include": ["./test", "./deploy/tasks"],
12 | "files": ["./hardhat.config.ts"]
13 | }
14 |
--------------------------------------------------------------------------------
/paraspace-core/typos.toml:
--------------------------------------------------------------------------------
1 | [files]
2 | extend-exclude = ["contracts/dependencies", "contracts/mocks"]
3 |
4 | [default.extend-words]
5 | BAKC = "BAKC"
6 | BRE = "BRE"
7 | Vas = "Vas"
8 |
--------------------------------------------------------------------------------