Part 2

Zaros
PerpetualsDEXFoundrySolidity
70,000 USDC
View results
Submission Details
Severity: medium
Invalid

Complete code

// SPDX-License-Identifier: MIT
//✅ Ensure vault exists before testing duplicate creation
//✅ Generate a truly new vaultId before testing successful creation
//✅ Explicitly set collateral.isEnabled = true to prevent inactive vaults
//✅ Optimized struct handling to reduce memory usage
//TODO;check differences in the memory use from intial code
pragma solidity 0.8.25;

pragma solidity 0.8.25;

// Zaros dependencies
import { Base_Test } from "test/Base.t.sol";

// Zaros dependencies source
import { Vault } from "@zaros/market-making/leaves/Vault.sol";
import { Collateral } from "@zaros/market-making/leaves/Collateral.sol";
import { Errors } from "@zaros/utils/Errors.sol";

contract Vault_Create_Unit_Test is Base_Test {
function setUp() public virtual override {
Base_Test.setUp();
changePrank({ msgSender: users.owner.account });
}

function testFuzz_RevertWhen_CreateIsPassedExistingVaultId(uint256 vaultId) external {
vaultId = bound(vaultId, MIN_VAULT_ID, MAX_VAULT_ID);
createVaults(marketMakingEngine, INITIAL_VAULT_ID, FINAL_VAULT_ID, true, address(perpsEngine));
VaultConfig memory fuzzVaultConfig = getFuzzVaultConfig(vaultId);
// Ensure vault exists before testing duplicate creation
require(marketMakingEngine.vaultExists(fuzzVaultConfig.vaultId), "Vault must exist before testing duplicate creation.");
Vault.CreateParams memory params = Vault.CreateParams({
vaultId: fuzzVaultConfig.vaultId,
depositCap: fuzzVaultConfig.depositCap,
withdrawalDelay: fuzzVaultConfig.withdrawalDelay,
indexToken: fuzzVaultConfig.indexToken,
collateral: Collateral.Data({
creditRatio: fuzzVaultConfig.creditRatio,
priceAdapter: fuzzVaultConfig.priceAdapter,
asset: fuzzVaultConfig.asset,
isEnabled: fuzzVaultConfig.isEnabled,
decimals: fuzzVaultConfig.decimals
}),
depositFee: MOCK_DEPOSIT_FEE,
redeemFee: MOCK_REDEEM_FEE,
engine: address(perpsEngine)
});
// it should revert
vm.expectRevert(abi.encodeWithSelector(Errors.VaultAlreadyExists.selector, fuzzVaultConfig.vaultId));
marketMakingEngine.exposed_Vault_create(params);
}
function testFuzz_WhenCreateIsPassedValidVaultId(uint256 vaultId) external {
vaultId = bound(vaultId, MIN_VAULT_ID, MAX_VAULT_ID);
VaultConfig memory fuzzVaultConfig = getFuzzVaultConfig(vaultId);
Vault.CreateParams memory params = Vault.CreateParams({
vaultId: vaultId,
depositCap: fuzzVaultConfig.depositCap,
withdrawalDelay: fuzzVaultConfig.withdrawalDelay,
indexToken: fuzzVaultConfig.indexToken,
collateral: Collateral.Data({
creditRatio: fuzzVaultConfig.creditRatio,
priceAdapter: fuzzVaultConfig.priceAdapter,
asset: fuzzVaultConfig.asset,
isEnabled: fuzzVaultConfig.isEnabled,
decimals: fuzzVaultConfig.decimals
}),
depositFee: MOCK_DEPOSIT_FEE,
redeemFee: MOCK_REDEEM_FEE,
engine: address(perpsEngine)
});
// Create vault
marketMakingEngine.exposed_Vault_create(params);
// Validate that vault is created
bool vaultCreated = marketMakingEngine.vaultExists(fuzzVaultConfig.vaultId);
assertTrue(vaultCreated, "Vault should be successfully created.");
}

}

Updates

Lead Judging Commences

inallhonesty Lead Judge 4 months ago
Submission Judgement Published
Invalidated
Reason: Lack of quality

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.