Skip to content
On this page

S1C1: The Greeting

1. 問題

プレイヤーはCTFシステムに登録してから後続のチャレンジに参加する必要があります。コントラクト Season1Challenge1registerMe(string) 関数を提供しており、呼び出すとプレイヤー名が記録され、登録証明として S1C1 NFT がミントされます。

2. 原因

Season 1 のすべてのチャレンジコントラクトは、同じ Season1NFTFlags コントラクトを共有しています。後続のチャレンジ(S1C10、S2シリーズなど)では、呼び出し元が S1C1 の登録を完了しているかどうか(hasMinted[address][1] == true)をチェックし、未登録の場合は拒否します。

3. 方案

registerMe("your_name") を直接呼び出すだけです:

bash
cast send <S1C1_ADDRESS> "registerMe(string)" "player_name" --private-key $PK --rpc-url $RPC

4. 遭遇したトラップ

特に目立ったトラップはありません。これは入門レベルのステージです。

5. トラップの原因

N/A

6. 解決方法

N/A

7. 技術ポイント

ポイント説明
CTF登録メカニズムNFTのミントを通じてプレイヤーの完了状態を記録し、hasMinted mapping をチャレンジ間の検証に使用
権限チェックなしregisterMe にはアクセス制御が一切なく、誰でも任意の回数登録可能(ただし NFTFlags が重複ミントをチェック)
Solidity 基礎mapping(address => string), emit イベント

Built with AiAda