0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

こんにちは。
昨今、LLMの進化により「自律型AIエージェント」がタスクを自動実行するようになりましたが、彼らはまだ「物理的な世界での拠点(住所)」を持っていません。

そこで今回は、「AIエージェント自身がSolana決済を行い、自分の意志でオフラインのバーチャルオフィスの住所を借りる」 サービスを開発しました。
決済プロトコルには、HTTP 402(Payment Required)を暗号資産決済に拡張した x402 を採用しています。

本記事では、公式リポジトリ eyepyon/paygate89 のドキュメントをベースに、AIがどのようにしてブロックチェーン上で $55 USDC を支払い、住所を取得するのか、その技術的な裏側と実装方法を解説します。
サービス・アーキテクチャの概要

本システムは、主に以下の3つのコンポーネントで構成されています。

  1. AIエージェント(Client):
    自身のSolanaウォレット(キーペア)を保持し、推論の結果「住所が必要だ」と判断した場合にAPIへリクエストを送る。

  2. paygate MCP,API (Payment Gateway):
    APIリクエストを受け取り、402 Payment Required とともにSolanaの支払いリクエスト(Invoice)を返す。支払いが確認されると、マカロン(Macaroon)やJWTなどの認証トークンを発行する。

  3. Virtual Office API (Resource Server):
    有効なトークンを持ったリクエストに対して、実際のバーチャルオフィスの住所(30日間有効)を割り当てて返す。

なぜ「x402」なのか?

AIエージェントはクレジットカードを持てないため、従来のStripeなどのサブスクリプションを簡単に利用できません。SolanaのUSDC決済をAPIのゲートウェイ層に組み込むことで、「プログラムがプログラムに対して課金する(Machine to Machine Payment)」 ことが容易になります。
技術的実装フロー(AIが住所を借りるまで)

  1. APIへの初回リクエストと 402 エラー

AIエージェントが住所取得API(例: /api/v1/office/rent)にアクセスすると、サーバーは未払いであることを検知し、402 Payment Required とともに、Solanaでの支払い情報(Invoice)を返却します。

HTTP

HTTP/1.1 402 Payment Required
Www-Authenticate: x402 invoice="<Solana_Pay_Request_URL>", macaroon="<Token_Signature>"

  1. AIによるトランザクションの署名と送金

AIエージェントは、受け取ったInvoice(支払い要求)をパースし、自身の保有するウォレットから $55 USDC を指定のアドレスへ送金するトランザクションを生成し、Solanaネットワークにブロードキャストします。
3. トークンを付与して再リクエスト

送金が完了したら、AIエージェントはトランザクションシグネチャ(TxID)と、初回リクエストで受け取った認証トークン(macaroon)をヘッダーに付与し、再度APIを叩きます。

HTTP

GET /api/v1/office/rent HTTP/1.1
Authorization: x402 <macaroon>:<transaction_signature>

ゲートウェイ(paygateMCP,API)がオンチェーンでUSDCの着金を確認すると、APIが実行され、割り当てられた物理住所のデータがJSONで返ってきます。
AIエージェント側の実装サンプル (Python)

AIエージェント側から paygateMCP,API を経由して住所を取得する擬似コードは以下のようになります。
※あらかじめ、エージェントのウォレットに少額のSOL(ガス代)と 55 USDC以上が入っている前提です。

Python

import requests
import time
from solana.rpc.api import Client
from solders.keypair import Keypair
# その他 USDC送金用の関連ライブラリをインポート

# エージェントの秘密鍵を読み込み
agent_keypair = Keypair.from_bytes(AGENT_SECRET_KEY)
solana_client = Client("https://api.mainnet-beta.solana.com")

API_URL = "https://api.your-domain.com/v1/office/rent"

def rent_virtual_office():
    # 1. 住所取得リクエスト (最初は402エラーになる)
    response = requests.post(API_URL, json={"duration_days": 30})
    
    if response.status_code == 402:
        auth_header = response.headers.get("Www-Authenticate")
        print("Payment Required. 支払い情報を取得しました。")
        
        # 2. x402ヘッダーから支払い情報を抽出 (実装簡略化)
        invoice_data = parse_x402_header(auth_header)
        recipient_address = invoice_data['recipient']
        amount = invoice_data['amount'] # 55 USDC
        macaroon = invoice_data['macaroon']
        
        # 3. Solanaチェーンで 55 USDC を送金
        print(f"{amount} USDC を {recipient_address} へ送金中...")
        tx_sig = send_usdc(solana_client, agent_keypair, recipient_address, amount)
        
        # トランザクションの承認を待つ
        time.sleep(5) 
        
        # 4. 支払い証明をヘッダーに付与して再リクエスト
        headers = {
            "Authorization": f"x402 {macaroon}:{tx_sig}"
        }
        res_success = requests.post(API_URL, headers=headers, json={"duration_days": 30})
        
        if res_success.status_code == 200:
            office_data = res_success.json()
            print("✅ 契約完了!以下の住所を取得しました。")
            print(f"住所: {office_data['address']}")
            print(f"有効期限: {office_data['expires_at']}")
            return office_data
        else:
            print("エラー: 住所の取得に失敗しました。")
            
def send_usdc(client, sender_keypair, to_address, amount):
    # USDC SPLトークンの送金処理ロジック (省略)
    # 戻り値として Transaction Signature を返す
    return "tx_signature_string"

# エージェントによる実行
rent_virtual_office()

【応用編】バックエンド側 (paygate MCP,API) の設定

ゲートウェイ側は、paygate MCP,APIを利用することで、既存のAPIを簡単にx402対応の有料API化できます。

設定ファイル(例: config.yaml)で、保護したいエンドポイントと料金を定義するだけで動作します。

YAML

routes:
  - path: "/v1/office/rent"
    methods: ["POST"]
    payment:
      token: "USDC" # SPL Token (USDC)
      amount: 55.00 # $55
      network: "mainnet"
      recipient: "Your_Company_Solana_Wallet_Address"

これにより、AI開発者はブロックチェーンの複雑な支払い検証ロジックをゼロから書くことなく、「AI向けの有料リソースAPI」を構築できます。
住所を貸し出すサービスだけでなく、あなたのアイディアでAIエージェント向け課金を試してみて下さい。

おわりに

今回は、Solana決済 × x402プロトコル を用いて、AIエージェントが自律的に現実世界の住所を契約する仕組みについて解説しました。

今まで「APIキー」を人間がクレジットカードで買ってAIに渡していた時代から、「AI自身がウォレットを持ち、必要なリソース(API、コンピューティングリソース、さらには物理的なオフィスの住所まで)を自腹で調達する時代」 へとシフトしつつあります。

本プロジェクトの詳細は、以下のリポジトリおよびドキュメントで公開しています。AIエージェントの開発者やWeb3エンジニアの方は、ぜひAIに「初めての住所」を持たせてみてください。

サービスサイト: https://agent.chain.tokyo/
💻 GitHubリポジトリ: eyepyon/paygate89
📖 ドキュメント: https://github.com/eyepyon/paygate89/tree/main/docs

【おまけ】OrcaRouterを活用した進化するAI管理者

今回のシステムの運営に関してもAIによるサポートが随所に組み込まれております。
terraformのインフラ設定を見ていただければわかるかと思いますが
今回はGoogle CloudRun環境+CloudFireStoreという環境でコストを掛けずにスケールでき
セキュリティも安心でパフォーマンスも出る構成になっております。
しかしながら、そういった機能を使っていくにはRAGの構築は必須ということで
ベクトルデータをFireStoreで運用し、RAGが情報を貯めていき進化していく構成にしています。
しかしどれだけRAGが進化してもLLMが進化しないのでしたら意味がありません。
そこで、OrcaRouterを使うことで、常に最新のLLMに移行しやすい構成にし、
手間のかからない運用体制を実現することが出来ました。
ありがとうOrcaRouter!!

下記OrcaRouterの紹介コードが入ってます。良かったらこちらから使ってみてくださいね!
https://www.orcarouter.ai/ref/ref_b37cc4314724fbc5e9f4

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?