monad-development
Monadブロックチェーン上でdappsを構築します。スマートコントラクトのデプロイ、viem/wagmiを使ったフロントエンドのセットアップ、またはMonadテストネット・メインネット上でのコントラクト検証が必要な場合に利用できます。
description の原文を見る
Builds dapps on Monad blockchain. Use when deploying contracts, setting up frontends with viem/wagmi, or verifying contracts on Monad testnet or mainnet.
SKILL.md 本文
Monad 開発
ここに記載されていない質問については、https://docs.monad.xyz/llms.txt を参照してください。
クイックリファレンス
デフォルト設定
- ネットワーク: ユーザーが「メインネット」と明記しない限り、常に テストネット (チェーン ID 10143) を使用します
- 検証: ユーザーが検証しないよう指示しない限り、デプロイ後は常にコントラクトを検証します
- フレームワーク: Foundry を使用します (Hardhat ではなく)
- ウォレット: ウォレットを生成する場合、必ず永続化 します (ウォレット永続化セクションを参照)
ネットワーク
| ネットワーク | チェーン ID | RPC |
|---|---|---|
| テストネット | 10143 | https://testnet-rpc.monad.xyz |
| メインネット | 143 | https://rpc.monad.xyz |
ドキュメント: https://docs.monad.xyz
エクスプローラー
| エクスプローラー | テストネット | メインネット |
|---|---|---|
| Socialscan | https://monad-testnet.socialscan.io | https://monad.socialscan.io |
| MonadVision | https://testnet.monadvision.com | https://monadvision.com |
| Monadscan | https://testnet.monadscan.com | https://monadscan.com |
エージェント API
重要: ブラウザを使用しないでください。curl を使用してこれらの API を直接呼び出します。
フォーセット (テストネット資金供給):
curl -X POST https://agents.devnads.com/v1/faucet \
-H "Content-Type: application/json" \
-d '{"chainId": 10143, "address": "0xYOUR_ADDRESS"}'
戻り値: {"txHash": "0x...", "amount": "1000000000000000000", "chain": "Monad Testnet"}
フォールバック (公式フォーセット): https://faucet.monad.xyz エージェントフォーセットが失敗した場合、ユーザーに公式フォーセット経由での資金調達を依頼します (ブラウザ自体は使用しないでください)。
検証 (全エクスプローラー):
常に検証 API を優先的に使用してください。1 回の呼び出しで、3 つすべてのエクスプローラー (MonadVision、Socialscan、Monadscan) で検証します。最初の選択肢として forge verify-contract を使用しないでください。
# 1. 検証データを取得
forge verify-contract <ADDR> <CONTRACT> \
--chain 10143 \
--show-standard-json-input > /tmp/standard-input.json
cat out/<Contract>.sol/<Contract>.json | jq '.metadata' > /tmp/metadata.json
COMPILER_VERSION=$(jq -r '.metadata | fromjson | .compiler.version' out/<Contract>.sol/<Contract>.json)
# 2. 検証 API を呼び出し
STANDARD_INPUT=$(cat /tmp/standard-input.json)
FOUNDRY_METADATA=$(cat /tmp/metadata.json)
cat > /tmp/verify.json << EOF
{
"chainId": 10143,
"contractAddress": "0xYOUR_CONTRACT_ADDRESS",
"contractName": "src/MyContract.sol:MyContract",
"compilerVersion": "v${COMPILER_VERSION}",
"standardJsonInput": $STANDARD_INPUT,
"foundryMetadata": $FOUNDRY_METADATA
}
EOF
curl -X POST https://agents.devnads.com/v1/verify \
-H "Content-Type: application/json" \
-d @/tmp/verify.json
コンストラクタ引数を使用する場合: constructorArgs を追加します (ABI エンコード、0x プレフィックスなし):
ARGS=$(cast abi-encode "constructor(string,string,uint256)" "MyToken" "MTK" 1000000000000000000000000)
ARGS_NO_PREFIX=${ARGS#0x}
# リクエストに追加: "constructorArgs": "$ARGS_NO_PREFIX"
手動検証フォールバック (API が失敗した場合):
forge verify-contract <ADDR> <CONTRACT> --chain 10143 \
--verifier sourcify \
--verifier-url "https://sourcify-api-monad.blockvision.org/"
ウォレット永続化
エージェントにとって重大: ユーザーのウォレットを生成した場合、今後の使用のために 必ず永続化 します。
新しいウォレットを生成する場合:
- ウォレットを作成:
cast wallet new - すぐに アドレスと秘密鍵を安全な場所に保存します
- ウォレットの詳細がどこに保存されているか、ユーザーに通知します
- デプロイ前にフォーセットを通じてウォレットに資金を供給します
ストレージオプション:
~/.monad-walletに chmod 600 で書き込む- プロジェクト固有の
.envファイルに保存 (.gitignore に追加) - 認証情報をユーザーに返して、安全に保存するよう依頼する
これが重要な理由: ユーザーはウォレットにアクセスして以下を行う必要があります:
- 追加のコントラクトをデプロイする
- デプロイしたコントラクトと相互作用する
- 資金を管理する
- 所有権を検証する
デプロイメント ワークフロー
デプロイメントに forge script を使用します:
forge script script/Deploy.s.sol:DeployScript \
--rpc-url https://testnet-rpc.monad.xyz \
--private-key $PRIVATE_KEY \
--broadcast
デプロイスクリプトテンプレート:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import "forge-std/Script.sol";
import "../src/MyContract.sol";
contract DeployScript is Script {
function run() external {
vm.startBroadcast();
MyContract contract = new MyContract();
console.log("Contract deployed at:", address(contract));
vm.stopBroadcast();
}
}
技術詳細
EVM バージョン (重大)
常に evmVersion: "prague" を設定します。Solidity 0.8.27 以上が必要です。
Foundry (foundry.toml):
[profile.default]
evm_version = "prague"
solc_version = "0.8.28"
Foundry のヒント
存在しないフラグ (使用しないでください):
--no-commit-forge initまたはforge installの無効なフラグです
デプロイメント - forge script を使用、forge create は使用しません:
forge create --broadcast はバグがあり、無視されることがよくあります。代わりに forge script を使用してください。
forge script script/Deploy.s.sol:DeployScript \
--rpc-url https://testnet-rpc.monad.xyz \
--private-key $PRIVATE_KEY \
--broadcast
デプロイスクリプトはアドレスをハードコードしてはいけません:
// ✅ 正しい - --private-key フラグから秘密鍵を読み取ります
function run() external {
vm.startBroadcast();
new MyContract();
vm.stopBroadcast();
}
// ❌ 間違い - アドレスをハードコードしており、「No associated wallet」エラーが発生します
function run() external {
vm.startBroadcast(0x1234...);
}
フロントエンド
viem/chains からインポートします。カスタムチェーンを定義しないでください:
import { monadTestnet } from "viem/chains";
wagmi で使用します:
import { createConfig, http } from 'wagmi'
import { monadTestnet } from 'viem/chains'
const config = createConfig({
chains: [monadTestnet],
transports: {
[monadTestnet.id]: http()
}
})
例: ERC20 をデプロイ
1. プロジェクトを作成:
forge init my-token
cd my-token
2. foundry.toml を設定:
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
evm_version = "prague"
solc_version = "0.8.28"
3. コントラクト src/MyToken.sol を作成:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
_mint(msg.sender, initialSupply);
}
}
4. 依存関係をインストール:
forge install OpenZeppelin/openzeppelin-contracts --no-commit
5. デプロイスクリプト script/Deploy.s.sol を作成:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import "forge-std/Script.sol";
import "../src/MyToken.sol";
contract DeployScript is Script {
function run() external {
vm.startBroadcast();
MyToken token = new MyToken(1000000 * 10**18);
console.log("Token deployed at:", address(token));
vm.stopBroadcast();
}
}
6. デプロイ:
forge script script/Deploy.s.sol:DeployScript \
--rpc-url https://testnet-rpc.monad.xyz \
--private-key $PRIVATE_KEY \
--broadcast
7. 検証:
# 検証 API を使用 (全エクスプローラーで検証)
STANDARD_INPUT=$(forge verify-contract <TOKEN_ADDRESS> src/MyToken.sol:MyToken --chain 10143 --show-standard-json-input)
COMPILER_VERSION=$(jq -r '.metadata | fromjson | .compiler.version' out/MyToken.sol/MyToken.json)
curl -X POST https://agents.devnads.com/v1/verify \
-H "Content-Type: application/json" \
-d "{
\"chainId\": 10143,
\"contractAddress\": \"<TOKEN_ADDRESS>\",
\"contractName\": \"src/MyToken.sol:MyToken\",
\"compilerVersion\": \"v${COMPILER_VERSION}\",
\"standardJsonInput\": $STANDARD_INPUT,
\"constructorArgs\": \"$(cast abi-encode 'constructor(uint256)' 1000000000000000000000000 | sed 's/0x//')\"
}"
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- portdeveloper
- リポジトリ
- portdeveloper/skills
- ライセンス
- MIT
- 最終更新
- 2026/2/12
Source: https://github.com/portdeveloper/skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。