ParaSpace (Audit #3)

CertiKFiles named in the report

CertiK reviewed ParaSpace Lending V1 (ParaSpace (Audit #3)) on 23 Dec 2022: 15 findings, 0 critical; 4 marked fixed, 1 acknowledged, 10 open.

No open critical findings
Open the reportOpen ParaSpace Lending V1’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings15

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical000
High011
Medium001
Low1002
HighNo Access Restriction On Function `removeFeeder()Fixed

The function `removeFeeder()` in the aforementioned line can be called by anyone as it has no access restriction. This enables anyone to call this function to remove the price feeder and revoke the `UPDATE_ROLE` of the feeder. **Attack Scenario** Anyone is free to remove any Oracle price feeder. **Proof of concept** PoC exploit code is not necessary in this case. The finding is straightforward and about access restriction on function.

MediumNot Withdraw Rewards While Transferring AssetFixed

The functions `transfer()` and `transferFrom()` are not overridden to withdraw all staked and pending rewards before transferring the asset. So the original owner of the asset will potentially lose some staking and reward tokens. **Proof of concept** 1. User A supplies the BAYC/MAYC and gets the BAYC/MAYC NToken, then stakes the APE with their BAYC/MAYC NToken. 2. User A transfers the BAYC/MAYC NToken to User B. User A will lose the staked APE coins and rewards.

LowRedundant Modifier `onlyWhenAssetExisted` On FuncFixed

The modifier `onlyWhenAssetExisted` is redundant on the function `removeAsset()`, because it is declared on the internal function `_removeAsset()`.

LowWithdraw Balance Is Not Properly CalculatedFixed

The withdrawal amount of Ape coins from the staking contract is not properly calculated, this will transfer all Ape coins left in the current contract to the recipient. The token balance should be checked before and after the withdrawal. ```solidity=38 function withdrawBAKC( ApeCoinStaking _apeCoinStaking, uint256 poolId, ApeCoinStaking.PairNftWithAmount[] memory _nftPairs, address _apeRecipient ) external { ApeCoinStaking.PairNftWithAmount[] memory _otherPairs = new ApeCoinStaking.PairNftWithAmount[](0); if (poolId == BAYC_POOL_ID) { _apeCoinStaking.withdrawBAKC(_nftPairs, _otherPairs); } else { _apeCoinStaking.withdrawBAKC(_otherPairs, _nftPairs); } uint256 balance = _apeCoinStaking.apeCoin().balanceOf(address(this)); _apeCoinStaking.apeCoin().safeTransfer(_apeRecipient, balance); } ```

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (45)

  • contracts/protocol/pool/PoolMarketplace.sol
  • contracts/protocol/tokenization/NTokenApeStaking.sol
  • contracts/protocol/libraries/logic/SupplyLogic.sol
  • contracts/protocol/tokenization/NTokenBAYC.sol
  • contracts/protocol/tokenization/NToken.sol
  • contracts/protocol/libraries/logic/PoolLogic.sol
  • contracts/protocol/libraries/configuration/UserConfiguration.sol
  • contracts/protocol/tokenization/NTokenUniswapV3.sol
  • contracts/misc/NFTFloorOracle.sol
  • contracts/misc/ProtocolDataProvider.sol
  • contracts/protocol/libraries/logic/ValidationLogic.sol
  • contracts/protocol/pool/PoolApeStaking.sol
  • contracts/protocol/tokenization/NTokenMoonBirds.sol
  • contracts/protocol/pool/PoolConfigurator.sol
  • contracts/misc/marketplaces/LooksRareAdapter.sol
  • contracts/protocol/pool/PoolCore.sol
  • contracts/protocol/pool/PoolParameters.sol
  • contracts/protocol/configuration/PoolAddressesProvider.sol
  • contracts/ui/WETHGateway.sol
  • contracts/ui/WPunkGateway.sol
  • contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol
  • contracts/misc/flashclaim/AirdropFlashClaimReceiver.sol
  • contracts/protocol/tokenization/libraries/MintableERC721Logic.sol
  • contracts/misc/marketplaces/SeaportAdapter.sol
  • contracts/protocol/configuration/ACLManager.sol
  • contracts/protocol/libraries/logic/AuctionLogic.sol
  • contracts/protocol/libraries/logic/ConfiguratorLogic.sol
  • contracts/protocol/pool/PoolStorage.sol
  • contracts/protocol/tokenization/libraries/ApeStakingLogic.sol
  • contracts/protocol/libraries/logic/LiquidationLogic.sol
  • contracts/misc/flashclaim/UserFlashclaimRegistry.sol
  • contracts/protocol/libraries/configuration/ReserveConfiguration.sol
  • contracts/misc/marketplaces/X2Y2Adapter.sol
  • contracts/protocol/libraries/logic/ReserveLogic.sol
  • contracts/protocol/libraries/logic/BorrowLogic.sol
  • contracts/misc/ERC721OracleWrapper.sol
  • contracts/misc/UniswapV3OracleWrapper.sol
  • contracts/protocol/configuration/PoolAddressesProviderRegistry.sol
  • contracts/protocol/tokenization/base/MintableIncentivizedERC721.sol
  • contracts/protocol/libraries/logic/FlashClaimLogic.sol
  • contracts/protocol/libraries/logic/GenericLogic.sol
  • contracts/protocol/libraries/logic/MarketplaceLogic.sol
  • contracts/protocol/pool/DefaultReserveAuctionStrategy.sol
  • contracts/misc/ParaSpaceOracle.sol
  • contracts/protocol/tokenization/NTokenMAYC.sol

Part of ParaSpace Lending V1’s security record

ParaSpace Lending V1
Audits2 audits by 1 firmLast audit Dec 2022, by CertiK.
Critical findingsNo open critical findingsAcross the 2 reports, 2 critical findings were reported. Each is marked fixed by the firm that reported it.
Open ParaSpace Lending V1’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 reports · latest May 2025

See CertiK’s audits

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us