├── .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 | --------------------------------------------------------------------------------