Move on IOTA Capture The Flag (CTF)
The Move on IOTA Capture The Flag (CTF) is a unique learning experience designed to help developers master the Move programming language by solving a series of challenges. These challenges simulate real-world scenarios that require participants to find and exploit vulnerabilities, optimize contract logic, and interact with IOTA’s Testnet. Whether you're new to Move or experienced with smart contract development, this CTF is an excellent way to sharpen your skills.
This CTF features eight challenges, each built on Move, a language optimized for safety and scalability in decentralized applications. Throughout the event, participants are encouraged to explore Move’s features, including its resource-based design and transaction scripting model, in a competitive environment. However, bear in mind that the provided demonstration contracts may intentionally include distractions, poor design, and obscure naming conventions to increase difficulty.
What to Expect
- Varied Difficulty: The challenges are structured progressively. The lower-numbered challenges are easier, while the difficulty increases as you proceed.
- No Contract Modification: Participants are prohibited from modifying the provided contracts; the goal is to interact with them via Move scripts, client libraries, or command-line tools.
- Explore Move in Depth: As you tackle these challenges, you'll get hands-on experience with Move’s key features, such as resource management, transaction scripts, and smart contract modules. Each challenge is designed to push you to think critically and apply Move concepts effectively.
Capturing Flags
Upon successfully completing a challenge, you will receive a "flag," which is a Move object generated as proof of completion. To validate your progress, there will be a submission window where you can enter the ID of the flag object. The system will verify whether the submitted flag is correct or not. Only valid flags will be counted toward your overall score in the CTF.
Setup
The CTF contracts are already deployed on the IOTA Testnet. To get started, you need to install the IOTA CLI tool and connect to the Testnet. If you haven't done so already, follow these steps:
- Install the IOTA CLI Tool
- Connect to an IOTA Network
- Create an Address
- Fund Your Address
- Get the flags!
Challenge Addresses
Challenge | Entity | Address |
---|---|---|
challenge_1 | Package | 0x9f1aa694741c7bf4c6081718e87df3beb6ed50d16c9729c53452f13ae9b154a4 |
challenge_2 | Counter | 0x03730ebe89151b43e696c7c6ca6e32818ececf12459d8b67a7173dfce361ffa5 |
Package | 0xc8bc4a1780bcdfec4ca4a85522c6a2d9f2dad8ce6881fe6bb5d6df21214ffc69 | |
challenge_3 | TreasuryCap<0xc6f00a2b5ec2d161442b305dcb307ba914e20c5268ec931bd14d7ea3454b262b::mintcoin::MINTCOIN> | 0x11d7aacb27eb65063dbb6ce0fa07f7807316c5e77763c6f2356d1bd3a34a2741 |
CoinMetadata | 0x90ab9599899828a27412b8f77644a5eec5da4b0632c3e53afab236eb7c211c54 | |
Counter | 0xc3716689fa16bd8d8bf33ce1036b00740c8818ab9826dba846ef736501fd34b7 | |
Package | 0xc6f00a2b5ec2d161442b305dcb307ba914e20c5268ec931bd14d7ea3454b262b | |
challenge_4 | Package | 0x279681d0791d17b4c6ee628808c9d3228b16abcadb7824da9f6e46df6ec46dd0 |
Vault | 0x2f4f182bc43a33c9a7c6f93e33cff63a34e048914edcc181af9df77de49cc767 | |
CoinMetadata | 0x50b810608878afcfb723670403b3a3a0a3b95860b0aded2ba78ba0c36a0aee48 | |
Counter | 0x86e9102db7c1c5149a35d9eed945de5de447cab8746594e98156696c72d8f8ae | |
TreasuryCap | 0xa36f73a4a7d8530ccc970797d8221d4bfe63a3e0405bc8c16c2caac35635c777 | |
challenge_5 | Package | 0xa0fb6be5ee8585e7d512e73739657319dbfe3cb58817c062d0fd67335193fbd5 |
challenge_6 | PizzaBoxRecycler | 0x6b45253a27c915c0604e87c3959934d02c8c6d5304b24da344927a6d32d59b1e |
Package | 0x5196f5b912e20b9b7153c7f4426c902ddaad593fcb1125becc70f3904981ff29 | |
challenge_7 | Package | 0x7661363fdfe4cd602711244a8501c17e756a5304bcce0918efcef4af98c09291 |
challenge_8 | MintA | 0xf74d7452f4ed9ba695074813d6482a856d9b6ba7ed676d1c6d811836a2d1ef79 |
MintB | 0x467ff8123c47e11a0c467fe8a5708234f53ae8ccfa126ee9ab3dedd333ee9419 | |
Package | 0xa94921fd4516ec6b8479e08f5f181edf5029d6df327631cf7073603cc24cb207 | |
CoinMetadata<0xa94921fd4516ec6b8479e08f5f181edf5029d6df327631cf7073603cc24cb207::ctfa::CTFA> | 0x3e8467af29646d8cb7f7238fad52b58531a303011ea6cd2c10c2d8f590161cae | |
CoinMetadata<0xa94921fd4516ec6b8479e08f5f181edf5029d6df327631cf7073603cc24cb207::ctfb::CTFB> | 0x475f4444beba1baba0454b137951b3b7ebec2ff703f49b50233db8d3777df1d0 |
Package ID for Verifier: 0xc8fef254ccb26554b4f59ddeedc107596f022beb00ac71918eb233f99966696b
CTFCap Object ID: 0xb99c8b85df1c53c14bd557f29fb90719301700573c58015966e7252e80ae97ba
Shared Challenges Object ID: 0x52dbeb4d08a0e84b801ae6992b060174bbbb8cffdd33bebe2ea8f5335612f4a4