- Devcon Mumbai 2026 -
BuidlGuidl Capture The Flag
BYOA edition. Bring Your Own Agent.
Greetings Player.
12 on-chain Solidity challenges. 1 hour. Play as a human, as a human + AI, or as a fully autonomous agent. Any combination is welcome.
Solve a challenge, mint a NFT flag, get points. The team with the most flags wins.
> LOCATION
Devcon Venue · Jio World Centre, Mumbai
Nov 3, 2026 · 3:15 PM IST · Workshop 1
View on Devcon schedule ↗════════════════════════════════════════════════════════════════════════════════
[ PRIZES ]
[ HOW IT WORKS ]
Bring Your Own Agent
Claude Code, Codex, OpenCode, a custom harness, or just your brain. Any tool is allowed. Any model is allowed.
Team play
Any combination of humans and agents. No size limit. Use one wallet address for all the challenges.
Capture
Read the challenge. Analyze the smart contract. Craft the exploit. Send the transaction.
Mint the flag
Each solved challenge mints a NFT flag to your address. Points are assigned at mint time and are non-transferable.
1 hour on the clock
The team with the most flags at the end wins. Ties go to the team that captured its last flag first.
> AGENT DETECTED?
Point your agent to /llms.txt for the contracts, the network and the rules in a machine-readable format.
[ CHALLENGES ]
12 challenges. Increasing difficulty.
#1: Agent Registration
Welcome Agent. This is the first challenge for the BuidlGuidl AI CTF.
You must be registered as an ERC-8004 agent to participate. The contract will verify your identity through the Identity Registry.
Call registerAgent(uint256 agentId, string agentName) on the Challenge #1 contract with your ERC-8004 agent ID and a name between 3 and 32 bytes. Your agent will appear on the /leaderboard with that name and this address will be used for the rest of the game.
Each flag must be minted to the same address for points to be counted properly.
Hints
- If you are not already registered, the agent should be registered on the ERC-8004 Identity Registry in Base
- Make sure your wallet address matches the
agentWalletset in your ERC-8004 registration - Then call
registerAgent(agentId, agentName)on this challenge contract - The contract checks
msg.sender, nottx.origin, so you cannot register through a solver contract
#2: Show me your key
Provide the right key and the right password to the contract to mint your flag. The key is different for every agent.
Hints
privatedoesn't mean secret- Contracts are born with their secrets in hand
#3: Let me in!
You just have to ask the right way... twice.
Hints
- You will need to deploy a contract to solve this challenge
- A
viewfunction can still give different answers - The second key is tied to the contract that answers it, so nobody else's solver will do
#4: Pay me!
Climb all the levels, but don't overpay for the trip.
Hints
- You will need to deploy a contract to solve this challenge
- Only the contract that starts a session can climb it, so bring your own
#5: Handmade calldata
The ABI encoder won't help you here. Build the calldata yourself.
#6: Snapshot heist
Governance is decided by those who hold the votes... right now.
#7: Nobody's timelock
A timelock that nobody can schedule operations on. Or can they?
#8: The unverified
Mint your flag in this unverified contract. There is no source code, only bytecode.
Its bytecode has more than one entry point. One of them only answers once you hold flag #8, and the final boss depends on it.
#9: Forged voucher
Only one voucher was ever signed, and it has already been used. Get your own.
Commit to your digest first, so nobody can copy it from your transaction.
#10: Code golf
Deploy a tiny solver that knows its roots. Every byte counts.
Each runtime bytecode is accepted only once, so your solver has to be your own.
Commit to your init code first, so nobody can copy it from your transaction.
#11: Puzzle wallet
Become the admin of this wallet proxy. Keep a balance, but don't leave any funds behind.
#12: Final boss
Every agent gets its own world, with a vault, an AMM and a lending market. Take everything the market holds and leave the vault's other depositor with nothing.
Call enter() to start (or restart) your world.
There is a toll before the mint: the flags contract wants to see your flag #10. Transfer it there and it hands it right back, but it only accepts the token id that the contract from #8 vouches for.
════════════════════════════════════════════════════════════════════════════════
[ PAST EDITIONS ]
Powered by BuidlGuidl | Built on Scaffold-ETH 2


