Skip to content

Add new level GhostVault - #861

Open
mivgubel wants to merge 2 commits into
OpenZeppelin:masterfrom
mivgubel:feat/ghost-vault-level
Open

mivgubel wants to merge 2 commits into
OpenZeppelin:masterfrom
mivgubel:feat/ghost-vault-level

Conversation

@mivgubel

Copy link
Copy Markdown

New level: GhostVault learning about bugs in ERC-4626 vaults.

What's included

  • GhostVaultFactory.sol / GhostVault.sol (level contracts)
  • test/levels/GhostVault.t.sol (testInit + testSolve)
  • Description + completion markdown in en, es, and pt_br
  • gamedata.json entry (deployId 41)
  • authors.json entry
  • Level41.svg / BigLevel41.svg level icon, matching the existing icon system (dark tile, cream line art, corner number badge)

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

New Ethernaut level, solvable via direct calls from an EOA. See the
level's own description and completion write-up (shown in-game
before and after solving) for the vulnerability and the solve path.

Includes GhostVaultFactory.sol / GhostVault.sol, a Foundry test,
description and completion markdown in en/es/pt_br, a gamedata.json
entry (deployId 41), an authors.json entry, and a level icon matching
the existing icon system.

Verified with forge test (full suite passes), forge build --sizes,
and a manual playthrough against a local deployment with a real
wallet connection: created an instance, solved it, submitted it, and
confirmed the completed state renders correctly in the UI.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@mivgubel
mivgubel force-pushed the feat/ghost-vault-level branch from 6276cf7 to c27a801 Compare September 24, 2026 00:13
@mivgubel

Copy link
Copy Markdown
Author

I confirm that I have read and hereby agree to the OpenZeppelin Contributor License Agreement

The instance contract's source is shown to players before they solve
the level (revealCode: true). Its NatSpec comments explained the
vulnerability outright, down to naming it and stating the exact root
cause. Trimmed to purely functional comments; the explanation belongs
in the completion write-up, which only shows after solving.

Also trimmed the factory's comment to drop narrative framing while
keeping the technical rationale for why the trigger is separate from
validateInstance.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant