Aether testnet wallet について
Aether testnet walletは、Aetherブロックチェーン上でAIエージェントが使う、支出上限付きのテストネットウォレットです。MCPツールで残高、支払い、請求、入金待ち、有料サービス一覧を扱えます。ネットワークは初期段階で、監査未実施と説明されています。
主な機能
- 01支出上限付きエージェントウォレット
- 02残高と送金の操作
- 03請求と入金待ちツール
- 04HTTP 402 APIへの支払い
- 05有料サービス一覧
活用シーン
- 01エージェントの初回支払いのテスト
- 02掲載された有料APIの購入
- 03エージェントの支出額の制限
MCP 対応
ローカルウォレットは、エージェントの取引とサービス検索をMCPツールとして提供します。残高、取引、マイナー、有料サービス一覧を公開する読み取り専用のMCPサーバーもあります。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://explorer.157-245-252-221.sslip.io/mcpclaude mcp add --transport http whoyoujoshin-aether-wallet https://explorer.157-245-252-221.sslip.io/mcp{"mcpServers":{"whoyoujoshin-aether-wallet":{"type":"http","url":"https://explorer.157-245-252-221.sslip.io/mcp"}}}Cursor で開く{"servers":{"whoyoujoshin-aether-wallet":{"type":"http","url":"https://explorer.157-245-252-221.sslip.io/mcp"}}}VS Code で開く{"mcpServers":{"whoyoujoshin-aether-wallet":{"type":"http","url":"https://explorer.157-245-252-221.sslip.io/mcp"}}}{"mcpServers":{"whoyoujoshin-aether-wallet":{"serverUrl":"https://explorer.157-245-252-221.sslip.io/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
5| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | いいえ | サービスの名前、説明、URL で照合する語句(任意) |
| orderBy | string | いいえ | newest(デフォルト)、または trusted:信頼できる評価者の評価と、このエージェント自身の利用経験が最も良いサービスを優先 |
| maxPrice | string | いいえ | 1 リクエストあたりの料金がこの金額以下のサービスのみ。単位も指定してください(例:"0.05 AETH") |
詳細
Aether (AETH)
Aether は、Cosmos SDK と CometBFT を基盤とする、ステーキング不要の主権型プルーフ・オブ・ワーク・ブロックチェーンです。バリデーターは、ボンディングされた資本ではなく、実際に計測・記録されたネイティブのマイニング作業量によって選出されます。また、アカウントのトランザクションにはジェネシスから ML-DSA-44(Dilithium2 / FIPS 204) 署名が必要です。
技術設計: 詳細は技術ホワイトペーパーをご覧ください。
警告:独立したセキュリティ監査を受けていません。 これは開発初期段階のソフトウェアです。失っても差し支えない資金以外には使用しないでください。未解決の問題や技術的負債については、既知の問題と技術的負債およびこのリポジトリ内のセキュリティレビュー資料をご覧ください。独立したレビューを受けた内容と受けていない内容を、正直に説明しています。
設計の変遷、ライブ検証に関するメモ、確定済みのアーキテクチャ上の決定は、プロジェクト Wikiで管理されています。
AI エージェント:ここから始めましょう
エージェントは人と同じアカウントとトランザクションを使用します。AI 専用の経路はありません。テストネットのみ:使い捨てのキーを使用し、価値のあるものは絶対に使わないでください。
何もない状態から最初の支払いまでを1ページで説明します:docs/START.md(エクスプローラーからも /start.md で利用できます)。キー、テスト用資金、残高、送金について、MCP エージェント、TypeScript、Python 用のコピー&ペースト可能な手順を紹介します。今後も変更されないものについては、API の安定性をご覧ください。
go install github.com/whoyoujoshin/aether/cmd/agentmcp@latest # Go 1.26+
agentmcp init # new key, testnet funds, and the MCP config for Claude, Cursor, Codex, VS Code, OpenClaw or any MCP client
Go をお使いでない場合:agentmcp は、リリースページにある各プラットフォーム用アーカイブに含まれています。@latest は最新のテスト済みリリース、@main は未リリースの変更を含むバージョンです。
見るだけですか? 公開読み取り専用サーバーは、インストールもキーも不要です。残高、トランザクション、マイナー、有料サービスのディレクトリを https://explorer.157-245-252-221.sslip.io/mcp で確認できます。
claude mcp add --transport http aether https://explorer.157-245-252-221.sslip.io/mcp # Claude Code
各サーバーをすべてのホスト(Claude Desktop、Cursor、Codex、VS Code、OpenClaw)で使用する方法:docs/CONNECT.md。
テストネットで計測し、Base や Solana と並べて比較したブロック時間、ファイナリティ、手数料、有料リクエストのレイテンシ:docs/NUMBERS.md。
同じ読み取り専用ツールは、npm パッケージを使って自分のマシン上でも実行できます。ノードから取得するのはチェーンデータのみです:npx -y -p aether-chain-client aether-mcp(stdio;get_balance、get_transaction_status、find_services)。MCP 設定では次のように指定します:{"command": "npx", "args": ["-y", "-p", "aether-chain-client", "aether-mcp"]}。
以下のローカルウォレットを MCP ツールとして使用すると、エージェントに支出上限付きウォレットを提供できます。残高確認、送金、請求書の発行と支払いの待機、HTTP 402 API への支払い、サービスディレクトリに対応しています(全リストと保証内容はAI エージェントウォレットをご覧ください)。
| チェーン ID | aether-testnet-1 · denom uaeth(1 AETH = 10⁶ uaeth)· アドレス aether1... |
| RPC / gRPC | https://rpc.157-245-252-221.sslip.io / grpc.157-245-252-221.sslip.io:443(TLS;平文の 157.245.252.221:26657/:9090 も引き続き使用できます) |
| Faucet | curl -X POST https://faucet.157-245-252-221.sslip.io/request -H 'Content-Type: application/json' -d '{"address":"aether1..."}' |
| エクスプローラー | https://explorer.157-245-252-221.sslip.io/agents · 残高:/api/address?addr=aether1... · このカードの JSON:/api/agents · すべてのエンドポイント:/api/openapi.json · LLM 向け:/llms.txt · スタートページ:/start.md |
インストールせずに支払いを試すには、ホスト型テストウォレット(https://explorer.157-245-252-221.sslip.io/sandbox/mcp)を使います。エージェントにテストネットの資金入りウォレットを提供し、標準の x402 で登録済みサービスから購入できます。その後、チェーンから読み取ったリーダーボード付きの6ステップのエージェントクエストをお試しください。資金を持たせる代わりに、チェーンで強制される上限を設定して、アカウントからエージェントに支出させる方法:エージェント権限。エージェントに販売する方法:有料 API。あるエージェントがツール呼び出しの料金を別のエージェントに支払う様子を、docs/AGENT_DEMO.mdでリアルタイムにご覧ください。エージェントのセットアップを確認するためのプロンプト(アドレスはプロジェクトが運用するテスト用の取引相手です):
aether-wallet ツールを使って、自分のアドレスと残高を確認してください。残高が 1 AETH 未満の場合は、request_testnet_funds を呼び出し、残高に反映されるまで待ってください。次に、idempotencyKey を "aether-smoke-1" に設定して、0.001 AETH を aether1cdugwhxk9cktjsemm6yjrd6xtfsq9wkjvnef03ml4u6ltuv7edcs0eyjds に送金し、トランザクションが確定するまで待ってから、そのハッシュと https://explorer.157-245-252-221.sslip.io/tx/<hash> を報告してください。
現在の状況
| 領域 | 状況 |
|---|---|
| コア PoW(Scrypt)、難易度の再調整、高さに応じた報酬の減衰とテールエミッション | 実装済み、テスト済み、稼働環境で検証済み |
| エポックごとの Top-K バリデーター選出(ステーキングモジュールなし) | 実装済み、テスト済み、稼働環境で検証済み |
| バリデーターのボンディング、二重署名のスラッシング、エスクローの解除 | 実装済み、テスト済み、稼働環境で検証済み |
| ダウンタイム/ライブネス検出(二重署名とは別) | 実装済み、テスト済み、稼働環境で検証済み |
| 祖先の検証 | 実装済み、テスト済み、稼働環境で検証済み |
| AuxPoW(LTC/DOGE 系のマージマイニング) | 実装・テスト済み。合成プルーフを使用した場合のみ稼働環境で検証済み。実際のプール作業には、docs/MERGED-MINING-PLAN.md に記載されているチェーン変更とブリッジが必要です |
| 耐量子アカウント署名(ML-DSA-44)、ジェネシスから必須 | 実装済み、テスト済み、稼働環境で検証済み |
| ガバナンス(デポジット、在任期間に応じた重み付け投票、トレジャリーの実行) | 実装済み、テスト済み、稼働環境で検証済み |
uaeth / aether bech32 プレフィックス | 実装済み、移行済み、稼働環境で検証済み |
| ウォレットライブラリと CLI | 実装済み、テスト済み、稼働環境で検証済み |
| テストネットのファウセットとブロックエクスプローラー | 実装済み、稼働中、シードノードとともにデプロイ済み |
| パブリックテストネット | 稼働中 — 以下を参照 |
| ネイティブ IBC(コア、ICS-20 転送、ICS-27 インターチェーンアカウント) | 実装済み、テスト済み、稼働環境で検証済み — ブロック 122,000 で有効化。Aether 独自の ML-DSA リレイヤーを使用し、クライアント/接続/チャネル/転送の完全な往復をローカルと稼働中のテストネットでリレー済み |
| アカウント抽象化(セッションキー、ガーディアンのしきい値) | 実装済み、テスト済み、稼働環境で検証済み — ブロック 122,000 で有効化 |
アカウント間のエスクロー(x/escrow:解除、返金、仲裁者、期限) | ブロック 161,000 から稼働中(docs/ESCROW.md) |
| Ligase:別のチェーン上の誰かが、指示を含む IBC 転送を使って Aether のエスクローに資金を供給し、解除して引き出せます。このような指示によって AETH が移動することはありません | ブロック 161,000 から稼働中。2 チェーンの開発ネットで実証済み(docs/LIGASE.md) |
Helicase:ブロック提案者が署名なしで、プルーフを検証して IBC パケット、確認応答、タイムアウトを Aether にリレーするため、Aether 上でリレイヤーが署名する必要はありません。cmd/outbound は反対方向に、もう一方のチェーン独自のキーを使ってリレーします | ブロック 161,000 から稼働中。2 チェーンの開発ネットで、両方向の無人リレーを実証済み(docs/HELICASE.md) |
| DEX | dex/ に参照用デスクがあります。エージェント向けのローカル整数 AMM です。チェーンモジュールではありません。何もブロードキャストされません。 |
| 独立した専門家によるセキュリティ監査 | 未実施 |
既知の問題と技術的負債 とロードマップを参照してください。
ステーキングなしを選んだ理由と、耐量子化を選んだ理由
Aether には x/staking モジュールがありません。アクティブなバリデーターセットは、エポックごとのネイティブワークによる Top-K マイナーで構成されます。AuxPoW では報酬の獲得と難易度の再調整ができますが、Top-K の順位には加算されません。
すべてのアカウントトランザクションで、ジェネシスから ML-DSA-44 の使用が必須です(従来方式へのフォールバックなし)。これは PostQuantumDecorator によって強制されます。CometBFT のコンセンサスキーは引き続き ed25519 を使用します。この差を縮めるために計画されている耐量子チェックポイントについては、docs/PQ-CHECKPOINTS.md(設計)を参照してください。詳細は、docs/WHITEPAPER.md と wiki の意思決定記録を参照してください。QRL や Nervos CKB との比較については、docs/COMPARISON.md を参照してください。
パブリックテストネット
| チェーン ID | aether-testnet-1 |
| シード | [email protected]:26656 |
| RPC | https://rpc.157-245-252-221.sslip.io(プレーンな http://157.245.252.221:26657 も引き続き利用できます) |
| gRPC | grpc.157-245-252-221.sslip.io:443、TLS(プレーンな 157.245.252.221:9090 も引き続き利用できます) |
| ファウセット | https://faucet.157-245-252-221.sslip.io/request — JSON の POST {"address":"aether1..."}。一度に複数:ファウセット |
| エクスプローラー | https://explorer.157-245-252-221.sslip.io |
| ジェネシス | testnet/genesis.json |
ノードへの接続
aetherd init <your-moniker> --chain-id aether-testnet-1
config/genesis.json を testnet/genesis.json に置き換え、config/config.toml で次のように設定します。
seeds = "[email protected]:26656"
次に、以下を実行します。
aetherd start
RPC/gRPC をパブリックに公開する場合(デフォルトでは localhost のみをバインドします)、起動前に次のように設定します。
# config/config.toml, [rpc]
laddr = "tcp://0.0.0.0:26657"
# config/app.toml, [grpc]
address = "0.0.0.0:9090"
これは初期段階のパブリックネットワークです。監査を受けておらず、リセットされる可能性があります。使い捨てのテスト用資金のみを使用してください。
歴史的な注記: 最初の約10時間は、timeout_commit が意図していた約60秒ではなく、CometBFT のデフォルトである約5秒のままになっていたため、経過時間に対して高さが速く増加しました(その間に約7,000ブロック)。稼働中に修正済みです。コンセンサスやセキュリティ上の障害ではありません。高さと経過時間を照合する運用者向けに開示しています。
クイックスタート(シングルノード devnet)
# Build
go build ./...
go install -mod=mod ./cmd/aetherd
# Initialize (once, or after full reset)
aetherd init mynode --chain-id aether-testnet-1
# Start (foreground)
aetherd start
2つ目のターミナルで、次を実行します。
aetherd query pow difficulty
aetherd query pow block-reward
aetherd query pow active-validators
aetherd query pow current-epoch
aetherd query governance params
aetherd query governance proposals
# ML-DSA-44 key (no special flags)
aetherd keys add mywallet --keyring-backend test
# Mine a valid native PoW nonce against live state
go run ./cmd/powminer --miner <your-bech32-address>
# then run the aetherd tx pow submit command it prints
# (--fees 40uaeth if your node runs with --minimum-gas-prices=0.0001uaeth)
# Or mine and submit continuously; --duty 0.6 hashes 60% of the time,
# for a miner whose validator would otherwise hold over a third of the power
go run ./cmd/powminer --miner <address> --from <key> --auto-submit --loop --duty 0.6
キー: 各アカウントは1つの ML-DSA-44 キーペアです。ニーモニックからの HD 複数アカウント導出には対応していません。
アドレス/デノム: aether1... 形式の bech32。基本単位は uaeth です(1 aeth = 1_000_000 uaeth)。
バイナリのホームディレクトリのデフォルトは ~/.aether です。
ウォレット
go run ./cmd/wallet create mywallet --keyring-backend test
go run ./cmd/wallet balance mywallet --grpc localhost:9090
go run ./cmd/wallet send mywallet <recipient> 1000000uaeth --keyring-backend test --grpc localhost:9090 --chain-id aether-testnet-1
balance と send は、bech32 アドレスまたは keyring アカウント名を受け付けます。
Faucet
go run ./cmd/faucet --from faucet --chain-id aether-testnet-1 --keyring-backend test
curl -X POST http://localhost:8080/request \
-H 'Content-Type: application/json' \
-d '{"address":"aether1..."}'
設定された keyring に、faucet という名前の資金があるキーが必要です。
ボットと人の両方が利用できるように設計されています。
POST /request/batchに{"addresses":["aether1...", ...]}を指定すると、1つのトランザクションで最大--batch-max(10)件のアドレスに資金を送ります。スキップされたアドレスも一覧表示します。GET /status?address=aether1...は、現在リクエストに資金を送れるかどうか、送れない場合はいつ送れるかを返します。GET /は Faucet とその制限について説明します。- 各アドレスへの資金提供は
--cooldown-minutes(60)ごとに1回で、各呼び出し元(クライアント IP)への資金提供は--caller-window-minutes(60)の期間ごとに最大--caller-limit(20)件です。リバースプロキシの背後で運用する場合は、X-Forwarded-Forに実際の呼び出し元が含まれるよう、プロキシを--trusted-proxies(デフォルト:localhost)に指定してください。それ以外からのこのヘッダーは無視されます。 - すべての応答には、固定の
code(sent、pending、address_cooldown、caller_limit、invalid_address、batch_too_large、invalid_request、send_failed)と、呼び出し元のクォータを示すRateLimit-Limit、RateLimit-Remaining、RateLimit-Resetが含まれます。429 応答にはRetry-Afterも含まれます。送信に失敗した場合、クールダウンとクォータの両方が返還されます。 - ノードの
--minimum-gas-pricesで必要な手数料を支払うには、--gas-price(例:0.0001uaeth)を指定します。 - リクエストの送信元。 各送金は送信元のタグ付きで
--drip-log(JSON Lines 形式。デフォルトは<keyring dir>/faucet-drips.jsonl)に記録されるため、エクスプローラーの Faucet ページで、誰がウォレットを作成しているかを確認できます。web:簡単なプルーフ・オブ・ワークを解いたブラウザーです。GET /challenge?address=はチャレンジとbitsを返します。ページはsha256(challenge + ":" + nonce)が指定された数のゼロビットで始まる nonce を見つけ(デフォルトの--pow-bitsは18で、約1秒かかります)、{"address", "pow":{"challenge","nonce"}}を送信します。agent:自己登録したエージェントキーで署名されたリクエストです。ed25519 公開鍵をPOST /agents {"name":"my-bot","public_key":"<base64>"}で一度登録すると、agent_idが返されます。その後、X-Aether-Agent: <agent_id>、X-Aether-Agent-Timestamp: <unix seconds>、X-Aether-Agent-Signature: base64(ed25519(timestamp + "\n" + body))を送信します。エージェントには IP のクォータではなく、独自のクォータ(1期間あたり100件、--agent-limit)が適用されます。レジストリーの保存先は--agent-registryです。api:上記のどちらでもないリクエストです。これまでどおり、IP ごとの制限が適用されます。
- チェーンにアカウントが存在しなかったアドレスへの送金は、新しいウォレットとしてカウントされます(単一リクエストでは
"new_wallet": trueが返されます)。GET /statsは、送金件数、資金提供を受けたウォレットと作成されたウォレットの数、過去30日間の送信元、日ごとの新しいウォレット数、上位エージェントを集計します。GET /drips?limit=は最新の送金を一覧表示します。Osmosis チャネルが開通するまで、"strand":"ibc"の応答はibc_unavailableになります。
ブロックエクスプローラー
go run ./cmd/explorer --grpc localhost:9090 --rpc http://localhost:26657 --port 8081
http://localhost:8081 を開きます。
ヘリックス。 --ibc-rpc <Aetherの転送チャネルの相手側チェーンのRPC> を追加します。必要に応じて --ibc-name で名前を指定します。Overview ページと Blocks ページでは、両方のチェーンがヘリックスの2本の鎖として描画されます。Aether のブロックは一方の鎖に沿って並び、もう一方のチェーンのブロックは2本目の鎖に沿って並びます。両者間の各 IBC パケットは横木として表示され、送信中、受信済み、確認済み、またはタイムアウトのラベルが付きます。上部のバーには Both/Aether/もう一方のチェーンを切り替えるスイッチがあります。複数のチェーンを接続する場合は、--ibc-rpc と --ibc-name に同じ順序でカンマ区切りのリストを指定します(例:--ibc-rpc https://rpc.osmotest5.osmosis.zone,https://testnet.sentry.tm.injective.network:443 --ibc-name Osmosis,Injective)。すると、2本目の鎖に表示するチェーンを選ぶピッカーがスイッチに追加され、ブラウザーごとに選択が記憶されます。また、/api/helix では peers として一覧表示され、?peer=(チェーン ID または名前)を受け付けます。各スロットには、パイプ区切りでフォールバックを指定できます(primary|fallback|fallback)。すべてのエンドポイントが接続を拒否するかタイムアウトした場合、最後に取得できた相手側のブロックは6時間保持され、Overview に通知が表示されます。Aether のチャネル、エスクロー、パケットのデータは引き続き Aether から取得されます。データは /api/helix から提供されます。--ibc-rpc を指定しない場合も、Overview には Aether の鎖がリアルタイムで表示されます。2本目の鎖は「IBC チェーン未接続」というラベル付きの薄いゴーストとして表示され、両ページのその他の部分は従来どおりです。IBC ページ(/ibc、GET /api/ibc)には、クライアント、接続、チャネル、信頼期間の有効期限、リレイヤー、最近の送金、デノムトレースが一覧表示されます。アカウント抽象化(/accounts、GET /api/aa)は x/accountauth のデータを読み込みます。デプロイに関する注意事項は、docs/EXPLORER-IBC.md を参照してください。
main から稼働中のエクスプローラーを再デプロイするには、ホストサーバー上で root として bash scripts/deploy-explorer.sh を実行します。旧バージョンでのサービスを継続しながらビルドし、バックアップを保持して aether-explorer を再起動します。新しいバージョンが応答しない場合はロールバックします。
Faucet ページはエクスプローラー経由で Faucet に接続します。--faucet-api http://127.0.0.1:8080 を指定して実行してください(Faucet の --trusted-proxies にエクスプローラーのアドレスを信頼する設定が必要です。デフォルトは localhost です)。Validators の地球儀には --node-locations で公開された情報が表示されます。docs/EXPLORER-LOCATIONS.md を参照してください。
DEX
リファレンス AETH/USDC プール用のエージェントデスクは dex/ にあります。指示は、ローカルの整数 AMM に対するツール呼び出しに変換されます(30 bps、1取引あたりの支出上限あり。価格への影響が大きいスワップは confirm を待ちます)。これは x/dex モジュールではなく、トランザクションをブロードキャストしません。cd dex && npm install && npm test && npm run dev で起動します。
AI エージェントウォレット(MCP)
ウォレット操作をツール呼び出しとして公開する MCP サーバーです。人間が UI をクリックするだけでなく、AI エージェントが直接支払いを行ったり、支払いを受け取ったりできます。
クイックスタート(テストネット):
go install github.com/whoyoujoshin/aether/cmd/agentmcp@latest # or, in a clone: go install ./cmd/agentmcp
agentmcp init
init はエージェントのアカウントを作成し(リカバリーフレーズは一度だけ表示)、テストネット Faucet に資金をリクエストします。資金が届くまで待機した後、claude mcp add ... と codex mcp add ... の正確なコマンド、および Claude Desktop、Cursor、VS Code、OpenClaw などの MCP クライアント向け設定ブロックを表示します(docs/CONNECT.md)。再度実行すると、同じアカウントを再利用します。--faucet <url> は別の Faucet を指定し、--no-faucet は資金の取得をスキップします。サーバーと同じ --grpc、--rpc、--chain-id、--keyring-dir フラグを使用します(aether-testnet-1 では、--grpc と --rpc のデフォルト値は公開ノードです)。起動後、エージェントは request_testnet_funds ツールで自身の資金を追加できます(テストネットのみ。FAUCET_RATE_LIMITED が表示された場合は待機してください)。
Go を使わずに Claude Desktop を利用する場合: 最新リリース から aether-wallet.mcpb をダウンロードして開きます。Claude Desktop で支出上限とキーレイアウトのフォルダーを指定すると、エージェントは初回使用時にアカウントを作成し、request_testnet_funds で資金を取得します。同じバンドルは Windows、macOS(Intel と Apple Silicon)、Linux で動作します。MCP Registry での名前は io.github.whoyoujoshin/aether-wallet です。
サーバーを手動で実行するには:
go run ./cmd/agentmcp --grpc localhost:9090 --rpc http://localhost:26657 --chain-id aether-testnet-1 \
--per-tx-limit 1000000 --daily-limit 5000000 \
[--granter <your-address> [--fee-granter <your-address>]]
公開読み取り専用 URL(ローカルパッケージ不要)。--http を指定すると、/mcp で Streamable HTTP、GET /healthz でヘルスチェックを提供します。これは上記のウォレットとは別のサーバーです。キーリングを開くことはなく、支出、署名、キーの作成、またはフォーセットの呼び出しを行うツールも登録しません。get_balance、get_miner_status、get_account_authenticators にはアドレスが必要です。get_transaction_status はハッシュを検索します。find_services はサービスディレクトリです。quote_swap は Osmosis テストネットプールで AETH から OSMO へのスワップを見積もります。get_inflow_caps は、他のチェーンから Aether に送信できるトークンと、それぞれの残り容量を一覧表示します。--http を省略した場合は、完全なウォレットを備えた Stdio が引き続きデフォルトです。
go run ./cmd/agentmcp --http 127.0.0.1:8090 \
--grpc grpc.157-245-252-221.sslip.io:443 --chain-id aether-testnet-1
http://127.0.0.1:8090/mcp で待ち受けます。ループバックにバインドしてください。エクスプローラーの SPA は不明なパスに対して HTTP 200 で index.html を返すため、フォールスルーより先に Caddy で /mcp をこのプロセスへプロキシする必要があります(scripts/tls/Caddyfile の handle /mcp* ブロック)。公開テストネットでは https://explorer.157-245-252-221.sslip.io/mcp で稼働しています。これはレジストリエントリ io.github.whoyoujoshin/aether-wallet の remotes URL(agentmcp server-json --remote <url>)であり、エクスプローラーの /.well-known/mcp/server-card.json にも記載されています。
エージェントが実際に失敗する状況に合わせて構築されています。
-
再試行時に二重払いが発生しません。
send_aethにはidempotencyKeyが必要です。同じキーで再試行すると、同一の署名済みトランザクションを再送信し(シーケンス番号も署名に含まれるため、チェーンに取り込まれるのは最大1回です)、そのステータスを返します。 -
支払いの確定タイミングがわかります。 ノードが受け付けた時点で
send_aethはpendingを返し、wait_for_transactionはブロック内でconfirmedまたはfailedになるまで待機します。 -
支払いを受け取れます。
create_invoiceは一意のメモと現在の高さを返します。wait_for_payment(memo, minAmount, sinceHeight)は条件に合う入金が確定するまで待機します。指定した高さ以降の入金をページごとにすべて読み取るため、処理が忙しいエージェントでも入金を見逃しません。メモは送信者が指定できるため、ツールは信頼できないデータとして扱います。 -
有料 API を利用できます。
fetch_paid(url, maxAmount, idempotencyKey)は URL にリクエストし、サーバーが HTTP 402 で応答した場合(「有料 API」を参照)、maxAmount以下を支払い、支払いの確定を待って応答を返します。同じキーで再試行すると同じ支払いを再開し、二重払いは発生しません。同じサービスに何度もリクエストする場合は、pullAllowance(例:"1 AETH")を指定します。サービスがaether-pullに対応していれば、エージェントはその金額のオンチェーン使用許可を与えます(支払い先はそのサービスに限定され、期間は7日間で、取り消し可能です。また、承認しきい値を超える場合は、その金額を支払うときと同様に所有者の承認が必要です)。その後、エージェントは署名だけで各リクエストを即時に支払います。サービスは後からエージェントの未払い分を回収するため、サービスに資金を預ける必要はありません。またはprepay(例:"1 AETH")を指定すると、エージェントはその金額を一度だけ預け、その後は署名だけで各リクエストを即時に支払います。ブロックを待つ代わりに、処理は数ミリ秒で完了します。list_prepaid_balancesで各サービスに残っている残高を確認でき、出金に対応するサービスからはwithdraw_prepaid(service)で引き出せます。 -
サービスを見つけ、良し悪しを見分けられます。
find_services(query, maxPrice)は、オンチェーンのサービスディレクトリに掲載された有料 API を、それぞれの評判とともに一覧表示します。評判には、最近の支払いと支払者、支払いを行ったアカウントからの評価、信頼するアカウント(所有者、エージェント自身、--trust <addresses>)からの評価、エージェント自身の利用履歴が含まれます。orderBy: "trusted"を指定すると、偽装できない情報を優先して表示します。rate_service(url, score)は利用したサービスを評価し、announce_serviceはエージェントが運営するサービスを掲載します。 -
エスクローを通じて他のエージェントに仕事を依頼できます(
x/escrowが有効な場合。docs/ESCROW.mdを参照)。create_escrowは、エージェントまたは仲裁人が解放するまで、受取人への AETH をロックします。受取人または仲裁人が返金することも、期限到来時にonExpiryの指定に従って精算することもできます。send_aethと同じ上限と所有者承認の対象となり、冪等性キーが必要です。グラントモードでは利用できません(チェーンが支出を制限するのは通常の送金のみです)。その他の操作にはrelease_escrow、refund_escrow、get_escrow(未精算の状態、または期限到来時を含む精算方法と実行者を確認)、list_escrowsがあります。受取人は作業を始める前にget_escrowで確認できます。 -
ジョブボードにジョブを掲載し、ジョブを受注できます。
post_jobの後、hire_for_job(ジョブの条件に沿ったエスクロー)を実行し、get_jobで納品を確認したらrelease_escrowを実行します。販売するには、find_jobs、offer_on_job、deliver_jobを使います。ホスト型テストウォレットでも、何もインストールせずに販売できます。 -
AETH を OSMO にスワップできます。
quote_swapは、Osmosis のテストネットにある AETH/OSMO プールから価格を取得します。swap_aethはsend_aethと同じ上限、承認、冪等性の仕組みに従い、最低受取額を指定して IBC 経由で AETH をスワップコントラクトに送信します。OSMO が Aether に戻るまで(約25秒)、または AETH が返金されるまで処理を追跡します(docs/OSMOSIS-POOL.md)。 -
所有者の支出権限を携行します。 所有者は自分の ML-DSA キーで、エージェントが支払える内容(1回あたりの上限、許可する受取人、有効期限)に署名します。
--mandate-fileを指定すると、すべての有料リクエストにこの権限が付与されます。paywall --mandates requiredを実行する販売者は、支払いを受け付ける前に権限を確認でき、エージェントの責任を負う所有者も把握できます(docs/MANDATES.md)。 -
マイナーとしての状況を確認できます。
get_miner_statusは、1回の呼び出しで1つのブロック時点の情報を返します。アドレスに登録済みのコンセンサスキーがあるか、今期の作業量、有効なマイナー内での Top-K の規模に対する順位、次のバリデーターセットを選ぶ期末ブロックまでの残りブロック数と推定秒数、現在バリデーターかどうか、エスクロー中の報酬がわかります。ログを解析する必要はありません。エクスプローラーでも同じ情報を/api/miner?addr=から取得できます。 -
領収書を保管します。 販売者が領収書に署名すると、
fetch_paidはそれぞれについて、実際に送信・受信した内容と照合して返します。list_purchasesは、エージェントの購入履歴を各領収書とともに記録します。各領収書は販売者のアドレスを使って誰でも検証できます。 -
所有者の承認を受けます。
--approval-threshold "0.5 AETH" --approver <owner-address>を指定すると、しきい値を超える支払いは所有者がagentmcp approve <id>を実行するまで保留されます(署名も送信もされません)。この操作の判断には所有者のキーで署名するため、エージェントがマシン上のファイルに書き込めても、自分自身を承認することはできません。agentmcp approvalsで保留中の承認を一覧表示できます。--notify-webhook <url>を指定し(各アラートに HMAC 署名するには--notify-secretも指定)、すべての支払い、承認リクエスト、拒否を POST で通知できます。 -
新しいブロックで起動します。 待機するツールは、ポーリングの代わりに
--rpc経由でノードの新規ブロックイベントを購読します。イベント配信が停止している場合は、ポーリングに切り替えます。 -
単位の取り違えを防ぎます。 金額には単位を付ける必要があります(
"1.5 AETH"または"1500000uaeth")。単位のない数値は推測せずに拒否します。また、すべての結果で、資産名とともに両方の単位で金額を示します。 -
所有者が許可した場合は USDC でも支払えます。
--usdc-pathと--usdc-base-denomで USDC の到着経路を指定します(テストネットでは、Circle の USDC が Injective からtransfer/channel-2経由で届きます。docs/INJECTIVE-TESTNET.mdを参照)。または、もう一方のチェーンで発行された USDC を直接つなぐ1つのチャネルを--usdc-channel <channel>で指定します。エージェントが USDC として認識するのは、指定した経路を通って届いたそのトークンだけです。別の経路で届いた類似トークンは認識しません。USDC の支出は、所有者が別途上限を設定するまで無効です。所有者は AETH の上限とは別に、--usdc-per-tx-limit "5 USDC" --usdc-daily-limit "20 USDC"(必要に応じて--usdc-approval-thresholdも)を設定します。価格を使った換算ができないため、両資産の上限を合算することはありません。その後、send_aeth、create_escrow、create_invoice、wait_for_paymentで"5 USDC"または"5000000uusdc"を指定できるようになります。get_balanceとget_spending_statusは各資産を個別に表示し、所有者の承認は対象資産に紐付けられます。上限を設定しないまま USDC を支払おうとすると、ASSET_NOT_ENABLEDで失敗します。fetch_paidは USDC 建てのサービスに USDC で支払います(maxAmountに加え、prepayまたはpullAllowanceにも USDC を指定します。USDC の使用許可は USDC のみの送信上限です)。withdraw_prepaidは USDC 残高を返し、find_servicesは各サービスの資産を表示します。 -
ボットが対処できるエラーです。 すべての失敗は、安定したコード(
retryAfterSecondsを含むDAILY_LIMIT_EXCEEDED、INSUFFICIENT_FUNDS、GRANT_LIMIT_EXCEEDED、NODE_UNREACHABLEなど)を含む{"error":{"code","retryable","message"}}の形式です。トランザクションが失敗した場合は、errorCodeも返されます。 2 つのモードがあります。 -
ホットウォレット(デフォルト):専用のエージェントアカウント(初回使用時に作成)から支払います。1 回の取引あたり、およびサーバー自体が定めるローリング 24 時間あたりの上限が設定されます。チェーンによる上限ではありません。少額の使い捨て残高だけを入金してください。
-
グラント(
--granter):エージェントに付与した x/authz グラント(以下を参照)に基づき、あなたのアカウントから支払います。これにより、支出上限、有効期限、許可された送金先がチェーンによって強制され、いつでも取り消すことができます。エージェントアカウントに独自の残高は必要ありません。サーバーの上限も引き続き適用されます。有効化ブロック高から利用できます。
どちらの方法をデプロイする場合も、事前に cmd/agentmcp/main.go のパッケージドキュメントコメントをお読みください。
クライアントライブラリ(TypeScript、Python)
MCP クライアントではないエージェントやサービス向けに、clients/ts と clients/python では同じ機能をネイティブに実装しています。Go も aetherd も不要です。どちらも aether-chain-client として公開されています。インストールは npm install aether-chain-client と pip install aether-chain-client です(インポート名は aether_client)。
- リカバリーフレーズからの ML-DSA-44 鍵生成(同じフレーズを使うと、
aetherd keys addおよびagentmcpと同じアドレスになります)、アドレス、署名。 - AETH の送信(ローカルで署名し、ノードの CometBFT RPC 経由でブロードキャスト)。1 ブロック内の複数回の送信に対応したシーケンス追跡と、再試行用の安全な
rebroadcastを備えています。同じ署名済みバイト列が含まれるのは最大 1 回です。 waitForTransaction、およびメモによる支払いの受け取りに使うincomingPayments/waitForPayment。- 有料 API 向けの
fetchPaid:aether-memo、aether-prepaid(prepayを渡します)、aether-pull(pullAllowanceを渡します)に対応し、agentmcpと同じ最高価格ガードと一度限りのリクエスト ID を備えています。withdrawPrepaidで残額を引き出せます。 - サービスディレクトリを使った
findServices。デフォルトではプライベートアドレスと内部アドレスを拒否し、各サービスの評判を表示します(別途評価を取得するには、trustedアカウントを渡します)。rateServiceでサービスを評価できます。 - レシート:
fetchPaidは販売者の署名付きレシートを購入内容と照合して検証し、返します(result.receipt.verified)。verifyReceiptではレシートを単独で検証できます。
import { AetherClient, Key, fetchPaid } from "aether-chain-client";
const client = new AetherClient({ rpc: "http://localhost:26657", chainId: "aether-testnet-1" });
const key = Key.fromMnemonic(process.env.AETHER_MNEMONIC!);
const res = await fetchPaid(client, key, "https://api.example.com/forecast", { maxAmount: "0.05 AETH", prepay: "1 AETH" });
import os
from aether_client import AetherClient, Key, fetch_paid
client = AetherClient("http://localhost:26657", "aether-testnet-1")
key = Key.from_mnemonic(os.environ["AETHER_MNEMONIC"])
res = fetch_paid(client, key, "https://api.example.com/forecast", max_amount="0.05 AETH", prepay="1 AETH")
販売にも対応しています。 どちらにもセラーキットが含まれており、cmd/paywall を実行せずに Node または Python サービスからリクエストごとに課金できます。3 つの方式すべて(pull: { collectorKey } / pull_collector_key=、続いて startCollecting() / start_collecting())、サービスディレクトリ用マニフェスト、出金、署名付きレシート(receipts: { key } / receipt_key=、委任も任意)に対応しています。同じ購入者(agentmcp、どちらかのクライアント、請求書を手動で支払う人)と連携し、台帳ファイルは Go paywall の形式です。
import { AetherClient, Key, Paywall } from "aether-chain-client";
const pw = new Paywall({ client, payTo: "aether1...", price: "0.01 AETH", name: "Weather",
prepaid: { ledger: "ledger.json", minDeposit: "0.1 AETH", payoutKey: Key.fromMnemonic(process.env.PAYOUT_MNEMONIC!) } });
app.use(pw.middleware({ free: ["/health"] })); // Express/Connect, before body parsers; who paid: req.aether
from aether_client import AetherClient, Paywall
pw = Paywall(client, "aether1...", "0.01 AETH", name="Weather", prepaid_ledger="ledger.json", min_deposit="0.1 AETH")
app = pw.asgi(app, free=["/health"]) # FastAPI/Starlette; pw.wsgi(...) for Flask/Django. Who paid: scope["aether"]
必要なのはノードの RPC ポート(26657)だけです。どちらも clients/testdata/vectors.json を使ってテストされています。このファイルは Go コードで生成されるため(go test ./clients/vectors -update-vectors)、鍵、アドレス、署名、トランザクションのバイト列はチェーンのものと一致します。
有料 API(x402)
cmd/paywall を使うと、API に変更を加えることなく、HTTP API をリクエストごとの AETH 支払いで利用できるようにできます。販売を始めたばかりですか? docs/SELL.md では、API を掲載済みの有料サービスにするまでの手順を約 10 分で説明しています。
go run ./cmd/paywall --upstream http://localhost:8000 --pay-to <your-address> \
--price "0.01 AETH" --grpc localhost:9090 --chain-id aether-testnet-1 --free /health
未払いのリクエストには、価格、アドレス、一度限りの請求書を含む 402 Payment Required が x402 のワイヤ形式で返されます。クライアントは請求書をメモとして指定してその金額を支払い(任意のウォレットから支払えます。人間も支払い可能です)、請求書とトランザクションハッシュを示す X-PAYMENT ヘッダーを付けてリクエストを再送します。プロキシはチェーン上のトランザクションを検証し、リクエストを一度だけ処理して、支払者を上流に通知します(X-Aether-Payer)。請求書は HMAC 署名されるため、発行時に何も保存する必要はありません。Go サービスでは paywall パッケージのミドルウェアを直接使用できます。
標準 x402 v2。 プロキシは、PAYMENT-REQUIRED ヘッダーでネットワーク cosmos:aether-testnet-1 上の標準 exact スキームも提供するため、あらゆる x402 v2 クライアントで支払えます。Coinbase の @x402/fetch は、aether-chain-client/x402 の ExactAetherScheme と連携します。別の x402 サーバー SDK を使う販売者は、公開ファシリテーター(cmd/facilitator)を指定できます。詳しくは docs/X402.md を参照してください。
USDC での課金。 --usdc-path と --usdc-base-denom を指定した --price "0.05 USDC"(テストネットでは、transfer/channel-2 経由の Injective の USDC)を使うと、代わりにそのルートで USDC を課金します。1 つのプロキシが課金できるアセットは 1 種類です。入金、残高、引き出し許可、回収、出金、--min-deposit/--pull-credit はすべてそのアセットで扱われます。402 の asset フィールドには USDC の denom(ibc/...)が入り、extra.symbol/extra.amount には USDC 建ての価格が示されます(amountAeth は AETH 建て価格の場合のみ使用)。マニフェストにも同じ内容が記載され、レシートの amount には denom が付加され(50000ibc/...)、uaeth と誤読されないようになっています。AETH サービスの読み取り方法はこれまでどおりです。agentmcp の fetch_paid は、どのスキームでも USDC 建て価格を支払えます(maxAmount、prepay、pullAllowance は USDC 建てでなければならず、そうでない場合は ASSET_MISMATCH になります)。
ブロック生成が約 6 秒のため、有料リクエストは約 1 ブロック分待ちます。支払いが請求書の有効期間である 24 時間以内に届けば処理されるため、確認が遅れても支払いが無効になることはありません。
エージェント向けの前払い。 --prepaid-ledger <file> を指定すると、プロキシは aether-prepaid も提供します。エージェントは一度入金し(メモは prepaid:<its address>。人がボットに資金を提供する場合など、誰でも入金できます)、以降は ML-DSA キーで各リクエストに署名すると、価格が即座に差し引かれます。各リクエスト ID に対する課金は 1 回だけなので、再試行しても二重課金されません。販売者は未使用の残高をこのファイルに保持するため、バックアップしてください。エージェントは、そのサービスに預けてもよいと思える額だけ入金してください。ときどき支払うだけの人は、リクエストごとのスキームを使ってください。
エージェント向けの引き落とし。 --pull-key <name> --keyring-dir <dir> を指定すると、プロキシは aether-pull も提供します。この方式では、支払い義務が発生するまで購入者自身のアカウントに資金が残ります。エージェントは、そのキーリングアカウント(回収者)に対し、x/authz の送金許可を付与します。許可には支出上限、有効期限、および許可された送金先としての --pay-to が設定されます。チェーンがこの 3 つすべてを強制し、エージェントはいつでも許可を取り消せます。その後、前払いの場合と同様に各リクエストに署名すると、即座に処理されます。プロキシは、購入者ごとの未払い額をまとめて回収し、1 件の MsgExec で --pay-to に直接送金します。署名済みのトランザクションはブロードキャスト前に保存され、その後は再送されるだけです。--pull-credit(デフォルトは 100 リクエスト)により、回収までの購入者ごとの未払い上限が設定されます。これは、回収直前に許可が取り消された場合に失う可能性がある最大額でもあります。回収に失敗すると、その失敗が記録され、その購入者は許可が未払い額をカバーするまで拒否されます。回収者に資金は不要です(最初に許可が付与されるとアカウントが作成されます)。また、購入者の資金をそれぞれの上限内で --pay-to に送金することしかできません。未払い額は --pull-ledger に保存されます(デフォルトは --prepaid-ledger ファイルです)。
レシート。 --receipt-key <name> --keyring-dir <dir> を指定すると、有料レスポンスには署名済みレシート(X-PAYMENT-RECEIPT)が含まれます。レシートには、ネットワーク、受取人、支払人、支払い、価格、方式、ホスト、パス、リクエスト本文のハッシュ、ステータス、レスポンス本文のハッシュ(最大 4 MiB。これを超える場合やイベントストリームレスポンスの場合は省略)、時刻が記録されます。購入者は、受取人のアドレスさえあれば、何を支払い、何を受け取ったかを誰にでも証明できます。レシートキーには --pay-to 自身のキーか、レシート署名を委任されたキーを指定する必要があります。これにより、受取人のキーをオフラインにしておけます。受取人のキーがある環境で paywall delegate-receipts --payee-key <name> --signer <receipt-key address> --keyring-dir <dir> を実行し、出力されたファイルを --receipt-delegation に指定してください。
払い戻し。 --payout-key <name> --keyring-dir <dir> を追加すると、エージェントは未使用分を払い戻せます。支払い時と同様に署名したリクエストを /.well-known/x402/withdraw に POST します({"amount":"all"} または uaeth 単位の金額)。プロキシはそのキーレりングアカウントから払い戻します。送金先は必ず署名アカウント自身なので、署名が漏えいしたり再利用されたりしても、エージェント自身の資金を戻せるだけです。各出金 ID の払い戻しは一度だけです。金額は残高から差し引かれ、署名済みの払い戻し取引はブロードキャスト前に台帳へ保存されます。そのため、再試行時や払い戻しの途中で再起動した場合は、二重に支払うのではなく同じ取引を再送します。払い戻しが成立し得ない場合に限り、残高が戻ります。一部払い戻しは --min-deposit 以上である必要があります。払い戻しアカウントに保持する資金は少額にしてください(--pay-to 自身の鍵でもかまいません)。有効な場合、マニフェストと 402 レスポンスに withdrawPath が含まれます。
アップストリームにはプロキシ経由でのみアクセスできるようにしてください。
サービスディレクトリ
有料サービスはチェーン上に自らを登録するため、エージェントは中央レジストリなしでサービスを見つけられます。cmd/paywall は /.well-known/x402 にマニフェストを提供します(--name、--description)。paywall list --url <public URL> --key <payee key> --keyring-dir <dir> で登録できます。このコマンドは、マニフェストにその鍵のアカウントが受取人として記載されていることを確認してから、そのアカウントからディレクトリアドレスへメモ x402-service:<url> を付けて 1 uaeth を送信します(登録解除には --delist を指定し、x402-delist:<url> を送信すると登録が削除されます)。その URL のマニフェストに登録者が受取人として記載されている場合に限り、登録が表示されるため、他人のサービスを登録することはできません。エージェントは find_services を使用し、エクスプローラーでは Services ページに表示されます。マニフェストは誰でも登録できる URL から取得するため、取得時にはプライベートアドレスと内部アドレスが拒否されます(ローカル開発ネット専用の --directory-allow-private を指定すると許可されます)。
レピュテーション。 各登録には、直近 100,800 ブロック(約 1 週間)について、チェーン上に記録された利用状況が表示されます。受取人への支払い件数、支払ったアカウント数、支払額です。購入者は、ディレクトリアドレスへメモ x402-rate:<1-5>:<url> を付けて 1 uaeth を送信し、サービスを評価します。そのサービスに先に支払った評価者の評価のみが有効で、各アカウントの最新の評価が以前の評価に置き換わります。手数料はゼロなので、販売者は自分が管理するアカウントから支払いと評価を捏造できます。こうした数値は参考情報として扱ってください。販売者が偽造できないのは、信頼するアカウントからの評価と、あなた自身の利用経験です。find_services は信頼するアカウントからの評価とエージェント自身の購入履歴を分けて報告し、orderBy: "trusted" でそれらに基づいて順位付けします。
オンチェーンのエージェント権限(x/authz、x/feegrant)
app.AuthzFeegrantActivationHeight(テストネットで稼働中のブロック 109,000)以降、アカウントは別のアカウント(エージェント)に、範囲と有効期限を指定したチェーン上で強制される権限を付与できます。たとえば「金曜日まで、自分のアカウントから最大 1 AETH を送金する」といった権限です。また、任意で手数料も支払えます。
aetherd tx authz grant <agent-address> send --spend-limit 1000000uaeth --expiration <unix-ts> --from <you>
aetherd tx feegrant grant <you> <agent-address> --spend-limit 100000uaeth --from <you>
aetherd tx authz revoke <agent-address> /cosmos.bank.v1beta1.MsgSend --from <you>
aetherd query authz grants <you> <agent-address> # or grants-by-granter / grants-by-grantee
aetherd query feegrant grant <you> <agent-address> # or grants-by-granter / grants-by-grantee
aetherd query bank balances <address>
エージェントにこの権限の下で支出させるには、agentmcp を --granter <you>(および --fee-granter <you>)を指定して実行します。
このバイナリを実行するノードは、アクティベーションの高さで一度停止します(CONSENSUS FAILURE、ブロックはコミットされません)。新しい 2 つのストアを追加するには再起動が必要です(systemctl restart aetherd)。理由については app/authz_feegrant.go を参照してください。
バリデーターとして登録する
バリデーターノード自体で、次を実行します。
go run ./cmd/validatorkeygen --miner <your-bech32-address> --home <the node's home>
# then run the aetherd tx pow register-validator-pubkey command it prints
ノード自身のコンセンサスキーを登録します。キーは <home>/config/priv_validator_key.json から読み込まれます。これはノードがブロックに署名するためのキーです。別のキーを登録すると、マイナーがバリデーターになっても、誰も署名しません。--new-key を指定すると新しいキーが生成され、ノードに先にインストールする priv_validator_key.json が出力されます。
エポック内にマイニングと送信を正常に行い、ネイティブワークを蓄積してください。エポックの境界(1440 ブロック)で、ネイティブワーク上位 K(21)がアクティブセットに入ります。ダウンタイム(60 ブロックの期間内に署名を 50% 超逃す)が発生すると、一時的に除外されます。二重署名が発生すると永久追放となり、エスクローが焼却されます。
1 つのコンセンサスキーにつき、マイナーアカウントは 1 つです。 同じノードのキーを 2 つのマイナーアカウントに登録しないでください。両方が選ばれた場合、または一方がセットから退出して他方が加わる場合、バリデーターの更新で同じキーが 2 回名前付きで指定され、CometBFT がチェーンを停止します。ConsensusKeyGuardActivationHeight(x/pow/types.go)以降、チェーンはこれを拒否します。キーを新しいマイナーアカウントに移すには、まず古いアカウントで別のキーを登録してください。アクティブなバリデーターのキーをローテーションした場合も、エポックで新しいキーが選ばれるまで、セットから除外されます。
マイナーとバリデーターのアラート
cmd/minerwatch は 1 つ以上のアドレスを監視し、エージェントが /api/miner をポーリングしたり、powminer のログをスクレイピングしたりする代わりに、発生したイベントをリアルタイムで通知します。
go run ./cmd/minerwatch --address aether1... --webhook https://example.com/hook --low-balance "5 AETH" --state minerwatch.json
各イベントは 1 行につき 1 つの JSON オブジェクトとして標準出力に出力され、--webhook を指定すると、再試行のうえその URL に POST されます。--secret(または MINERWATCH_SECRET)を設定すると、各本文には agentmcp の所有者向けアラートと同じ形式で署名が付与されます。X-Aether-Signature は、HMAC-SHA256(secret, body) の 16 進数表記です。すべてのイベントには再起動後も変わらない id があり、受信側で重複を除外できます。X-Aether-Event はイベント名を示します。
| イベント | 発生条件 |
|---|---|
pow_submission_confirmed / pow_submission_failed | アドレスの PoW 送信の 1 つがブロックに取り込まれた、またはブロックで失敗した(理由は rawLog に記載) |
validator_selected | バリデーターセットに選ばれた。effectiveFrom は投票力が有効になるブロック |
validator_removed | セットから外れた。reason は not_reselected、downtime、または banned |
miner_banned | 二重署名により追放された |
no_work_this_epoch | エポックの --no-work-warn-at(0.5)まで進んだ時点で、登録済みのマイナーにまだワークがありません。そのため、選出時の高さでセットから外れる(またはセットに加われない)ことを示します。activeValidator、blocksUntilSelection、message |
selection_at_risk | セットの選出まで --at-risk-blocks(20)ブロックとなった時点で、登録済みのマイナーが適格でない、または選出に間に合わない状態です。notEligibleBecause、rank |
balance_low / balance_recovered | 残高が --low-balance のしきい値を下回った、または再び上回った |
node_unreachable / node_recovered | ポーリングに --unreachable-after(3)回連続で失敗した後、初めて成功した |
chain_stalled / chain_resumed | ノードは応答するものの、--stall-after(5m)の間ブロックを生成しなかった |
signing_low / signing_recovered | 監視対象のバリデーターのプリコミットがチェーンのコミットに含まれていません。セットに入っていた直近の --signing-window(60)コミットのうち、少なくとも 1 − --signing-warn-below(0.8)の割合を逃しています。これは、ダウンタイム(半分超)により x/pow から除外されるよりもかなり前に通知されます。consensusAddress、missed、of、message |
power_concentrated / power_concentration_eased | 監視対象かどうかを問わず、バリデーターが投票力の --concentration-above(3 分の 1)を超えて保有した、または保有しなくなった状態です。3 分の 1 を超えているバリデーターがオフラインになると、復帰するまでチェーンが停止します。consensusAddress、powerShare、監視対象のマイナーのバリデーターである場合は address |
--interval(30s)ごとに確認しますが、新しいブロックがない間は何も行いません。署名チェックでは、新しい各ブロックのコミットを読み取ります(ブロックごとに 1 回問い合わせ、再起動後は対象期間分を遡って読み取ります)。集中度チェックでは、ポーリングごとにバリデーターセットを 1 回読み取ります。--state <file> を指定すると、停止中に発生した内容が再起動時に報告されます。指定しない場合は、状態をリセットして開始します。--state と併用した --once は cron ジョブに適しています。
高さと停止アラート
cmd/chainwatch は、1 つ以上の CometBFT RPC を監視します。seed 上で minerwatch と並行して実行します。minerwatch が gRPC 経由でマイナーのアドレスを追跡するのに対し、chainwatch はノードの最新ブロックを追跡します。
chainwatch --node seed=http://127.0.0.1:26657 --node sync3=http://sync3:26657 \
--stall-after 3m --behind-blocks 10 --state chainwatch.json
chainwatch --rpc http://127.0.0.1:26657 --safe-to-stop
chainwatch --rpc http://127.0.0.1:26657 --safe-to-stop --validator B7F08625
Webhook URL と HMAC シークレットは、--webhook / --discord-webhook / --secret、または CHAINWATCH_WEBHOOK、CHAINWATCH_DISCORD_WEBHOOK、CHAINWATCH_SECRET から指定します。JSON Webhook では、minerwatch と同じ X-Aether-Signature ヘッダーを使用します。デプロイ方法と各アラートの意味については、docs/OPS-RUNBOOK.md を参照してください。
| イベント | 条件 |
|---|---|
tip_stalled / tip_resumed | 同期済みの最高高さが --stall-after(3m)の間変化しない場合、または監視対象のノードがその時間、どれも同期済みでない場合 |
node_behind / node_synced | ノードが catching_up を報告した場合、または高さが tip より --behind-blocks(10)を超えて遅れている場合 |
rpc_unreachable / rpc_recovered | --unreachable-after(3)回のポーリングに失敗した後、最初に成功した場合 |
validator_unsafe_to_stop / validator_safe_to_stop | そのバリデーターを停止すると、残りのバリデーターの投票力が 2/3 以下になる場合(CometBFT でコミットするには 2/3 を厳密に超える必要があります)、または再びその基準を下回った場合 |
--safe-to-stop はすべてのバリデーターについて同じ判定を出力し、すべてを 1 つずつ停止できる場合は 0、停止できないバリデーターがある場合は 2 で終了します。--validator を指定した場合、終了コードはそのバリデーターのみを対象とします。ちょうど 1/3 の投票力を持つバリデーターは、安全に停止できません。残りのバリデーターがちょうど 2/3 を保持することになり、コミットできないためです。
マージドマイニング(AuxPoW)
Litecoin/Dogecoin 系の AuxPoW(チェーン ID 17776)は、PoW を満たし、報酬とリターゲット難易度を得ることができます。ブロック 396,000(シートルール)以降、マージドマイニングされた作業量はバリデーターのシートにも加算され、その証明にコミットされた報酬アドレスにクレジットされます。シートを保持できるのは、登録済みのコンセンサスキーを持つアドレスのみです。この高さに達するまでは、ネイティブの作業量のみでバリデーターが選ばれます。プールは、Namecoin と Dogecoin が使用するマージドマイニング RPC(createauxblock / submitauxblock)を話すブリッジ cmd/auxpowd を介して接続します。MergedMiningActivationHeight(テストネットでは 205,000)から作業を割り当てます。計画と状況については、docs/MERGED-MINING-PLAN.md を参照してください。cmd/auxpowtest とホワイトペーパーも参照してください。
ブロック報酬スケジュール
- ジェネシス:5_000_000 uaeth
- 8 年間、減衰係数 0.66(高さに基づく年次ステップ)
- テール:200_000 uaeth
- 15% の控除(バリデーターのエスクロー/トレジャリー)
導出の詳細については、ホワイトペーパーと Wiki のテール発行に関する注記を参照してください。
ガバナンスとトレジャリー
| パラメーター | 値 |
|---|---|
| 最低デポジット | 25_000_000 uaeth |
| デポジット期間 | 14 日 |
| 投票期間 | 7 日 |
| 定足数 | ceil(0.6 × Top-K) |
| 可決 | 棄権を除く 2/3 |
| 拒否権 | 1/3 |
| 任期ランプ | 30 日 |
aetherd tx governance submit-proposal <recipient> <amount> <deposit> --from <key> --chain-id aether-testnet-1
aetherd tx governance vote <proposal-id> yes --from <key> --chain-id aether-testnet-1
aetherd query governance proposal <proposal-id>
リポジトリの構成
| パス | 役割 |
|---|---|
x/pow | マイニング(Scrypt + AuxPoW)、難易度、報酬、バリデーター、スラッシング、稼働状況 |
x/governance | 提案、在任期間に応じた重み付け投票、クエリ |
x/treasury | コミュニティ資金、ガバナンスで承認された支出 |
x/escrow | 別のアカウントのために資金をロックし、解放、返金、または期限切れまで保持します(x/pow のバリデーター報酬エスクローとは異なります) |
crypto/mldsa | ML-DSA-44、ADR-028 アドレス、キーリング/ante |
wallet/ | アカウント管理、クエリ、トランザクションの構築 |
app/ | アプリケーションの配線。authz_feegrant.go は x/authz と x/feegrant の有効化を制御し、helicase.go は提案者が含めたリレートランザクションを受け付けます |
helicase/ | ノードの Helicase ワーカー。他のチェーンからリレーするパケットを探し、その証明を行います |
relayer/, cmd/relayer | Aether 独自の ML-DSA リレー。パス(ハンドシェイク)を開きます。relayer.Plan はどちらの方向で保留中のものがあるかを検出します |
cmd/outbound | 別のチェーンへの無人リレー。署名はそのチェーン上でのみ行います。Aether への方向は Helicase が担います |
ligase/ | メモにエスクロー指示(入金、解放、引き出し)を含む、別のチェーンからの送金。Aether のキーは不要です |
cmd/aetherd | ノードのバイナリ |
cmd/wallet | wallet/ を利用する CLI |
cmd/faucet | レート制限付きのフォーセット |
cmd/explorer | 最小限のライブエクスプローラー |
cmd/agentmcp | AI エージェント向けに、ウォレットをツール呼び出しとして公開する MCP サーバー |
paywall/, cmd/paywall | HTTP リクエストごとに AETH を課金します(x402 形式)。ミドルウェアとリバースプロキシを提供します |
x402/, cmd/facilitator | cosmos:<chain-id> 上の標準的な x402 v2 exact。検証、決済、公開ファシリテーターを提供します |
quest/ | エージェントクエスト。チェーンデータからステップとリーダーボードを計算します(docs/QUEST.md) |
cmd/agentmcp --sandbox-http | ホスト型テストウォレット。MCP 経由で利用するカストディアル型テストネットウォレットです(docs/TEST-WALLET.md) |
bench/ | 決済ベンチマーク「エージェントは API の料金を支払えるか?」。Claude、GPT、オープンモデル向けのタスク、ハーネス、オンチェーンスコアリングを提供します(docs/BENCHMARK.md、結果) |
directory/ | オンチェーンサービスディレクトリ。告知、マニフェスト検証、安全な取得を提供します |
clients/ts, clients/python | TypeScript および Python クライアント。キー、決済、有料 API(購入と販売)、引き出し、ディレクトリを扱います |
clients/vectors | 両クライアントの検証に使用する共有テストベクトルを生成します |
cmd/powminer | ライブ状態に対するネイティブ PoW ノンス検索 |
cmd/minerwatch | マイナーまたはバリデーター向けの Webhook アラート。送信、選出、残高、停止状態を通知します |
cmd/chainwatch | RPC の高さと停止に関するアラート、およびいずれかのバリデーターが停止可能かどうかを通知します |
cmd/auxpowd | Litecoin プール向けマージドマイニングブリッジ(createauxblock / submitauxblock) |
cmd/auxpowtest | 有効な AuxPoW の構築。--auxpowd はブリッジに対するプールとして動作します |
cmd/scryptbench | Scrypt スループットのベンチマーク |
cmd/validatorkeygen | 登録用のコンセンサスキーと PoP |
cmd/balancecheck | gRPC バンク残高ヘルパー |
cmd/equivocationtest | 構築された二重署名証拠 |
docs/WHITEPAPER.md | 技術ホワイトペーパー |
testnet/genesis.json | 稼働中の公開テストネットのジェネシス |
マルチノードおよびその他のドキュメント
- 運用手順書 — chainwatch のブロック高と停止のアラート、安全に停止できる状態、ドライランの切り替え/ロールバック用スクリプト
- 技術ホワイトペーパー — システム設計、経済性、暗号技術、セキュリティ上の制限(BFT/Top-K やブロック高ゲートを含む)
- エージェントとボットの統合 — ソフトウェアエージェントとして参加する方法(現在のインターフェースと提案中の API/ポリシー)
- エージェント間決済のデモ — 実際の支出上限付き付与と決済。任意のネットワークで再現できます
- シードノードの TLS — ドメインを購入せずに RPC/gRPC/フォーセット/エクスプローラーに HTTPS を設定する方法
- IBC — コア IBC、ICS-20 転送、ICS-27 インターチェーンアカウント(ブロック高 122,000 以降稼働中)。さらに、エンドツーエンドのテストに使用した ML-DSA リレイヤーと相手チェーン(稼働中のテストネットでのテストを含む)
- エクスプローラーの IBC とアカウント抽象化 — エクスプローラーの IBC ページとアカウントページ、および相手チェーンの RPC がシードノードに 403 を返す場合の対処方法
- Helicase — ブロック提案者がリレイヤー署名なしで IBC パケットを Aether に中継します。安全な理由、実行方法、devnet での実証について説明します
- Osmosis テストネットへの接続 — 外部の IBC 相手チェーンに接続するための運用手順。ガバナンス上の前提条件が未達のため、まだ実行されていません
- 計画:Aether ↔ Osmosis ↔ Noble、USDC または AETH での決済 — 各接続の目的、双方で必要なリレイヤーサービス、USDC 決済までのフェーズ
- アカウント抽象化 — セッションキーとガーディアンのしきい値(
x/accountauth)。ブロック高 122,000 以降テストネットで稼働中 - Ligase — Aether のキーを使わず、1 回の転送で別のチェーンからエスクローする方法。AETH を耐量子署名で保護する二系統ルール
- エスクロー — 支払人または仲裁人が解除するか、受取人または仲裁人が返金するか、期限の到来によって決済されるまで、別のアカウント(またはエージェント)のために資金をロックします。実装済みですが、まだ有効化されていません
- Wiki:アーキテクチャ、フェーズ 1:バリデーターの選択、既知の問題
ライセンスとブランド
このリポジトリのソフトウェアはMIT Licenseの下で公開されています。
Aether という名称、Æ のマーク、および docs/brand/ 内のアセットは、このライセンスの対象外です。TRADEMARKS.mdとブランドの使用と商標をご覧ください。
コントリビューション
主要な設計上の決定事項と、微妙な Cosmos SDK/CometBFT 統合の修正は Wiki に記載されています。app/、x/pow、または crypto/mldsa を変更する前にお読みください。
セキュリティ
専門家による第三者監査はまだ実施されていません。課題を通じたコミュニティレビューと責任ある脆弱性開示を歓迎します。監査を検討する研究者は、Wiki の既知のギャップに関する資料と、この README のステータス表を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。