# MCBOT SimpleDAO Prompts
1.
DAOとは何ですか?400字以内で説明してください
また、どのようなスマートコントラクトの関数が列挙できますか?
simple-daoの参考実装はこれです (https://raw.githubusercontent.com/ecdysisxyz/simple-dao/main/src/simple-dao/functions/Propose.sol)
2. 以下が今日の手順です。
・SimpleDAOを参考にユースケース図を書く(あるいはAIにDAOが持つ振る舞いを聞く)
・MCBOTを用いてER図のMermaid記法の設計を得る
・MCBOTを用いてDAOそのものとProposalの状態遷移図を書く(isApprovedなど)
・MCBOTを用いて関数毎の、状態毎のフローチャート図を書く
・MCBOTを用いてER図からSchema .solを生成する
・MCBOTを用いてフローチャート図に対応する関数を生成する
・それらを統合してコンパイルを正常に終了させる
覚えておいてください
3. ER図を書きたいです。
エンティティ同士のリレーションを暗示するために親子構造を示す複数形のフィールドは必ず含めるようにしてください。
ただし、ProposalのExecute関数は数値をインクリメントするだけのデモにしたいので、DAOに数値型の状態を持たせればそれでいいです。
ファクトリーパターンは不要です。DAO1つにしか関心がありません
meta contractのSchema.sol を将来的に出力したいのですが、まずはER図としては、どんなデータ構造になりそうですか?
4. そのER図から Schema.sol を生成してみてください
5. 状態遷移図が欲しいです。
特に、DAOについてはPause状態、同時に2つ以上の提案が実施されてはいけない状態(=Busy)、新規メンバーが追加された後1日間のクールタイムを含めたいです。
Proposalについては、Expired, Executed、Approvedの状態は管理したいです。MermaidではENUMが使えないみたいなので、数値型 Proposal.state でいいです。
6.
状態遷移が複雑化したので、ER図を改善してください。また Scheme.sol も生成してください。
ただし、MermaidではENUMが使えないみたいなので、コメントアウトでuint型のproposal stateにメタ情報を書いておいて. Scheme.sol も再度生成しておいてください。
7.
addMember, removeMember, propose, vote, tally, execute関数毎のフローチャート図が欲しいです。
まずその関数が関心のある状態に関するチェックを入れて、次に入力値に関するチェックを入れて、状態遷移を行なってください。
例えばDAO paused cooldown busyチェックは必須です。cooldown, busy状態は新規proposeのみを禁止します。
個別のProposalに関係する処理はexpired, approved, executedの管理が必須です。
例えばアクセス管理の例は以下です。
addMember onlyOwner
removeMember onlyOwner
propose onlyMember
vote onlyMember
tally public
execute public
8.
addMember, removeMember, propose, vote, tally, execute
これらの関数をmeta contractのfunctionとして実装してください.simple-daoの参考実装はこれです (https://raw.githubusercontent.com/ecdysisxyz/simple-dao/main/src/simple-dao/functions/Propose.sol)
import "../storage/Storage.sol";
を使用して、Schema.sol で規定されたデータ構造をストレージ変数として呼び出し、1関数1ファイルの制約を守って実装し直してください。