PandaPump Info

PandaPump is a meme coin project built with purpose that blends fun with functionality across a dynamic crypto ecosystem. Built on the Base network, our mission is to foster a vibrant, engaged community centered around $PPUMP. Our ecosystem includes: • A meme token ($PPUMP) at the heart of our brand • A participation platform designed to provide long term engagement • A dual utility based NFT collection To ensure the safety and transparency of our ecosystem, we’ve partnered with SolidProof to audit our smart contracts. This audit reflects our commitment to responsible development and community trust. PandaPump is where creativity meets transparency and trust — and we’re just getting started.

PandaPump Logo

TrustNet Score

The TrustNet Score evaluates crypto projects based on audit results, security, KYC verification, and social media presence. This score offers a quick, transparent view of a project's credibility, helping users make informed decisions in the Web3 space.

60.46
Poor Excellent

Real-Time Threat Detection

Real-time threat detection, powered by Cyvers.io, is currently not activated for this project.

This advanced feature provides continuous monitoring and instant alerts to safeguard your assets from potential security threats. Real-time detection enhances your project's security by proactively identifying and mitigating risks. For more information, click here.

Security Assessments

Select the audit
"\"\\\"Static Analysis Dynamic Analysis Symbolic Execution SWC Check Manual Review\\\"\""
Contract address
N/A
Network N/A
License N/A
Compiler N/A
Type N/A
Language Solidity
Onboard date 2025/02/06
Revision date 2025/02/08

Summary and Final Words

No crucial issues found

The contract does not contain issues of high or medium criticality. This means that no known vulnerabilities were found in the source code.

Contract owner cannot mint

It is not possible to mint new tokens.

Contract owner cannot blacklist addresses.

It is not possible to lock user funds by blacklisting addresses.

Contract owner cannot set high fees

The fees, if applicable, can be a maximum of 25% or lower. The contract can therefore not be locked. Please take a look in the comment section for more details.

Contract cannot be locked

Owner cannot lock any user funds.

Token cannot be burned

There is no burning within the contract without any allowances

Ownership is not renounced

The owner retains significant control, which could potentially be used to modify key contract parameters.

Contract is not upgradeable

The contract does not use proxy patterns or other mechanisms to allow future upgrades. Its behavior is locked in its current state.

Scope of Work

This audit encompasses the evaluation of the files listed below, each verified with a SHA-1 Hash. The team referenced above has provided the necessary files for assessment.

The auditing process consists of the following systematic steps:

  1. Specification Review: Analyze the provided specifications, source code, and instructions to fully understand the smart contract's size, scope, and functionality.
  2. Manual Code Examination: Conduct a thorough line-by-line review of the source code to identify potential vulnerabilities and areas for improvement.
  3. Specification Alignment: Ensure that the code accurately implements the provided specifications and intended functionalities.
  4. Test Coverage Assessment: Evaluate the extent and effectiveness of test cases in covering the codebase, identifying any gaps in testing.
  5. Symbolic Execution: Analyze the smart contract to determine how various inputs affect execution paths, identifying potential edge cases and vulnerabilities.
  6. Best Practices Evaluation: Assess the smart contracts against established industry and academic best practices to enhance efficiency, maintainability, and security.
  7. Actionable Recommendations: Provide detailed, specific, and actionable steps to secure and optimize the smart contracts.

A file with a different Hash has been intentionally or otherwise modified after the security review. A different Hash may indicate a changed condition or potential vulnerability that was not within the scope of this review.

Final Words

The following provides a concise summary of the audit report, accompanied by insightful comments from the auditor. This overview captures the key findings and observations, offering valuable context and clarity.


Ownership Privileges
  • The owner can add the new staking pool to the contract.
  • The owner can update the allocation point in the pool.
  • The owner can deposit the rewards in the contract.
  • The owner can mass update pools.
  • The owner can update the burn on claim percentage value to not more than 20%.
  • The owner can withdraw the reward tokens from the contract.
  • The owner can update the boost NFT address.
  • The owner can recover the reward tokens.

Note - This Audit report consists of a security analysis of the PandaPump staking smart contract. This analysis did not include functional testing (or unit testing) of the contract’s logic. Moreover, we only audited one token contract for the PandaPump team. Other contracts associated with the project were not audited by our team. We recommend investors do their own research before investing.

Files and details

Findings and Audit result

medium Issues | 7 findings

Resolved

#1 medium Issue
Missing 'isContract' check.
MasterChef.sol
L87-98
L103-106
Description

The contract lacks a validation check to ensure that specific parameters are contract addresses. Without this check, there is a risk that non-contract addresses (such as externally owned accounts, or EOAs) could be mistakenly set for parameters intended to reference other contracts. This could lead to failures in executing critical interactions within the contract, as EOAs do not support contract-specific functions. To mitigate this, Implement a validation check to ensure that parameters designated as contract addresses are verified as such. This can be done using Solidity’s Address library function isContract, which checks if an address has associated contract code.

Resolved

#2 medium Issue
Missing allowance check.
MasterChef.sol
L181
L207-234
Description

The depositNFT function does not check if the user has approved the contract to transfer their NFT before calling transferFrom. If the user hasn’t approved the contract, the transaction fails, wasting gas. This leads to poor user experience and unnecessary failed transactions. The issue can be mitigated by adding a check that the allowance is already present before the transfer in the contract.

Resolved

#3 medium Issue
Missing Non-reentrant check.
MasterChef.sol
L171-205
L207-234
L272-329
L335-363
Description

The functions withdrawNFT(), deposit(), and requestWithdraw() are vulnerable to reentrancy attacks because they call _claimRewards(), which executes an external ERC-20 token transfer before updating critical state variables. This allows a malicious contract to reenter the function before state updates, potentially claiming multiple rewards or withdrawing more tokens/NFTs than allowed. The vulnerability arises because _claimRewards() uses safeRewardTransfer(), which calls transfer() on an ERC-20 token, enabling an attacker to reenter the contract and manipulate balances before updates are finalized. To mitigate this, Use nonReentrant modifier in withdrawNFT(), deposit(), and requestWithdraw(). Move state updates before _claimRewards() to ensure balances are updated before external calls. Ensure all reward distributions occur after internal state modifications to prevent reentrancy exploits.

Resolved

#4 medium Issue
Missing access control.
MasterChef.sol
L261-266
Description

The massUpdatePools() function lacks access control, allowing anyone to call it, leading to unnecessary gas costs, spam attacks, and blockchain congestion. A malicious user could repeatedly trigger it, consuming excessive gas and disrupting contract operations. To mitigate this, restrict access to the contract owner (onlyOwner), implement a cooldown timer to prevent frequent calls, and use batch processing to update pools in smaller chunks, avoiding block gas limit issues.

Resolved

#5 medium Issue
The owner can drain reward tokens.
MasterChef.sol
L423-429
Description

The recoverRewardTokens() function poses a centralization risk as the owner can withdraw all reward tokens, potentially draining the contract and leaving stakers with no rewards. This could render staking useless and harm user trust. To mitigate this, restrict withdrawals to only excess tokens by ensuring enough tokens remain for pending rewards. Additionally, implementing a governance vote, multisig approval, or time-locking withdrawals until rewards are fully distributed can enhance security.

Resolved

#6 medium Issue
The owner can lock rewards.
MasterChef.sol
L99-101
Description

The setRewardPerBlock() function allows the owner to set rewards per block to any value, excluding zero, effectively locking all rewards and preventing stakers from earning. This creates a centralization risk, where the owner can stop reward distribution arbitrarily, making staking ineffective. To mitigate this, implement a minimum reward threshold to prevent setting it to zero or an unreasonably low value. Additionally, requiring a governance vote or timelock mechanism before adjusting rewards can prevent sudden unfair changes. These safeguards ensure consistent rewards for stakers and prevent malicious or accidental reward halts.

Resolved

#7 medium Issue
The owner can update reward token.
MasterChef.sol
L103-106
Description

The setRewardToken() function allows the owner to arbitrarily change the reward token, posing a centralization risk. The owner could replace it with a worthless or illiquid token, preventing users from claiming meaningful rewards. Additionally, switching to a scam or fake token could devalue rewards, harming stakers. To mitigate this, implement a timelock delay, require governance or multisig approval, and restrict changes to whitelisted tokens. These measures prevent sudden or malicious token swaps, ensuring stakers receive fair and valuable rewards, maintaining trust and stability in the staking system.

low Issues | 4 findings

Acknowledged

#1 low Issue
Old compiler version
MasterChef.sol
L2
Description

Adding the latest constant version of solidity is recommended, as this prevents the unintentional deployment of a contract with an outdated compiler that contains unresolved bugs.

Acknowledged

#2 low Issue
Missing failed check
MasterChef.sol
L115-137
Description

The add function fails silently when attempting to add more than two pools, causing confusion without an error message. This arbitrary limitation restricts future scalability. The issue is low severity as it doesn’t impact security or funds but can be medium severity if expansion is required. To mitigate this, replace the silent failure with a require statement. This ensures clear feedback to the owner, preventing unexpected behavior.

Acknowledged

#3 low Issue
Missing Pool ID Validation.
MasterChef.sol
L171-205
L207-234
Description

The function assumes that _pid (pool ID) is always valid, but no validation is done to check if _pid exists. If _pid is invalid (i.e., greater than poolInfo.length - 1), it will cause an out-of-bounds error, leading to contract failure. If _pid is invalid, trying to access poolInfo[_pid] throws an error. It is recommended to add the validation check in the contract.

Resolved

#4 low Issue
Missing events arithmetic
MasterChef.sol
L99-101
L103-106
Description

Emit all the critical parameter changes.