60593 sc low no mechanism to set boostpriceperblock for levels added after initialization

Submitted on Nov 24th 2025 at 08:42:24 UTC by @Brainiac5 for Audit Comp | Vechain | Stargate Hayabusaarrow-up-right

  • Report ID: #60593

  • Report Type: Smart Contract

  • Report severity: Low

  • Target: https://github.com/immunefi-team/audit-comp-vechain-stargate-hayabusa/tree/main/packages/contracts/contracts/StargateNFT/StargateNFT.sol

  • Impacts:

    • Contract fails to deliver promised returns, but doesn't lose value

Description

Location: StargateNFT.sol Function: addLevel()

Description: When new NFT levels are added using the addLevel() function, there is no mechanism to set the boostPricePerBlock value for these levels. The boostPricePerBlock is only set for levels added during contract initialization (via initializeV3). As a result, any level added after deployment will have an unset boost price.

Relevant Code Snippet:

function addLevel(
    DataTypes.LevelAndSupply memory _levelAndSupply
) public onlyRole(LEVEL_OPERATOR_ROLE) {
    Levels.addLevel(_getStargateNFTStorage(), _levelAndSupply);
}

Impact:

  • Users can use the boost feature for levels added after contract initialization for free.

Suggested Fix:

  • Add a function to set or update boostPricePerBlock for any level, not just those initialized in initializeV3.

  • Alternatively, extend addLevel() to accept a boostPricePerBlock parameter and set it during level addition.

Proof of Concept

Proof of Concept

Add the unit test below to /test/unit/StargateNFT/Levels.test.ts

Was this helpful?