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 contract 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 and Address
- Fund Your Address
- Get the flags!
Challenge Addresses
Challenge | Entity | Address |
---|---|---|
challenge_1 | Package | 0xce9b1471301ffaf1453297cca008a68ce851b6a9ba9ab241c357c346177903f3 |
challenge_2 | Counter | 0x88c94654907f9daabbc25e9724997bd71a16e13f55cc4580f5e7c207e3ff28f2 |
Package | 0xb13a3cd66c6aa2ccff512fee9d950176acf0835fbf2091fa32e789d44baabe01 | |
challenge_3 | CoinMetadata<0xf84628ac335e59ce6e305835cc09c0b9983d7b1695ab28e96cf875b49923e4ed::mintcoin::MINTCOIN> | 0x1bd5dfa2e5f1d3a3825403d92b8199ce3f69a5e70a785f28d698715b54d78321 |
Counter | 0xe7877309899ef0618ea0e269327f79e3bdf38ff2860fd01f5d278b46ea8cd630 | |
TreasuryCap<0xf84628ac335e59ce6e305835cc09c0b9983d7b1695ab28e96cf875b49923e4ed::mintcoin::MINTCOIN> | 0xf3cb314954f0823961fdfe93ba9403314b4c53bb654f73ba37fe3c8400831e23 | |
Package | 0xf84628ac335e59ce6e305835cc09c0b9983d7b1695ab28e96cf875b49923e4ed | |
challenge_4 | CoinMetadata<0x913ddcf84345bc087530e0b5d8b183780ecf902ea6cfa64b62d3f8a349ebafd9::airdrop::AIRDROP> | 0x163ef67f9631eea22ef33e58aab3e0d5c243184335e943047c28cb0a30985cf0 |
Vault | 0x4ae07fd00773080f9af2e43c2464667536d661ba0001a670e3971efbb01446e2 | |
Package | 0x913ddcf84345bc087530e0b5d8b183780ecf902ea6cfa64b62d3f8a349ebafd9 | |
TreasuryCap<0x913ddcf84345bc087530e0b5d8b183780ecf902ea6cfa64b62d3f8a349ebafd9::airdrop::AIRDROP> | 0xa9b65a0be78472f053298980a4fae935d12571731bfd7be3b9d41183a7f100ff | |
Counter | 0xc96bfaf42e3b8b1f2e5dbf469dc5f7846c911dbbb76966475cfd06cf3893b080 | |
challenge_5 | Package | 0x84c3037c252e1b9142087a19c2bd776ee86316775484eb78e9f97618d877a577 |
challenge_6 | PizzaBoxRecycler | 0x16ddd3ae8cc4fe71f1acdc52838412a645eac93f1176450d05a77642f1816f34 |
Package | 0xcbe251b41a23a3952e64036f01367df82f1ccf3498cb139ff3ef44712441abc9 | |
challenge_7 | Package | 0x202d65a2b1d2de4ba90e9eeb51ef4e16fafdaaa5c8b1dc3cbd8a935e5eb4d25c |
challenge_8 | MintA<0x828a5da05496e86075fab366b2b66ec3ba0a3bfbed68ce56140d589d94da9b33::ctfa::CTFA> | 0x66e8dd865238a68f50db8be7177ee662b754133f409c35c36975f9d6e6f7f6e4 |
MintB<0x828a5da05496e86075fab366b2b66ec3ba0a3bfbed68ce56140d589d94da9b33::ctfb::CTFB> | 0x7c4f0f9d2e62bb0c440e5d281fbac69997dc14e1586cfedcea49f547a54eca1b | |
Package | 0x828a5da05496e86075fab366b2b66ec3ba0a3bfbed68ce56140d589d94da9b33 | |
CoinMetadata<0x828a5da05496e86075fab366b2b66ec3ba0a3bfbed68ce56140d589d94da9b33::ctfa::CTFA> | 0x8f9c961398fcbfff8b9b1f14e1d6731bcfa2480f7c4f26fbb76496498bcc684e | |
CoinMetadata<0x828a5da05496e86075fab366b2b66ec3ba0a3bfbed68ce56140d589d94da9b33::ctfb::CTFB> | 0xca909dd26da43ac1d0992ebe796e0714d9382e0e4ec35640a1ac9845b3bb087d |
--------------------------------------------------------------------------------
Package ID for Verifier: 0xdf6b7e52065dc5d4ae29fe212763226ba4e12eae81944d2ae6cf507296a767b1
CTFCap Object ID: 0xc9ee0b68715c3eb8130e25c2bddd67552e5787cc4271f2a75955aab4b0927b99
Shared Challenges Object ID: 0x44cabb21a9f66f8ce02c3c4881595bf439c2740c41341c7d257ee41e6238a4a0
--------------------------------------------------------------------------------