AutoGen-Zahlungsintegration.
Es gibt kein AutoGen-Paket, und Sie benötigen keines. Wickeln Sie den echten blockchain0x-Client in eine Funktion ein, übergeben Sie ihn Ihrem Agenten, und er kann USDC auf Base bewegen.
Es gibt kein AutoGen-spezifisches Paket, und Sie brauchen auch keines. AutoGen macht aus einer einfachen typisierten Funktion bereits ein Tool, also kapseln Sie den echten -Python-Client in eine Funktion, übergeben sie einem via , und der Agent kann USDC senden, Rechnungen begleichen und Wallets auf Base lesen. Setzen Sie und legen Sie los.
AutoGen macht bereits eine Funktion zu einem Tool. Verwenden Sie das.
AutoGen erstellt ein Tool-Schema direkt aus der Signatur und der Dokumentation einer Python-Funktion. Ein dedizierter AutoGen-Adapter würde nur eine Funktion umwickeln, die wir ohnehin geschrieben hätten, und dann aus dem Takt mit der sich schnell ändernden API von AutoGen geraten. Daher liefern wir keinen aus. Sie schreiben ein paar Zeilen, die den echten blockchain0x-Client aufrufen, und behalten die volle Kontrolle über die Argumente, Validierung und Fehlerbehandlung.
Dies ist derselbe Client, den die gelieferten LangChain- und CrewAI-Adapter im Hintergrund umschließen. Hier wickeln Sie es selbst ein, was bedeutet, dass es keine Adapterversion gibt, die verfolgt werden muss, und nichts zwischen Ihrem Agenten und der API außer Ihrer eigenen Funktion. Multi-Agenten-Teams funktionieren auf die gleiche Weise: Geben Sie die Wallet-Funktion einem Agenten, lassen Sie die anderen ohne sie, und die Ausgabenberechtigung bleibt an einem Ort.
Installieren Sie AutoGen und das Kern-SDK. Eine Umgebungsvariable.
Es gibt kein dediziertes AutoGen-Paket hinzuzufügen. Sie installieren AutoGen (Python 3.10+) und das echte blockchain0x-Kern-SDK und schreiben dann die Funktion unten. Das ist die gesamte Abhängigkeitsliste.
pip install autogen-agentchat "autogen-ext[openai]" blockchain0x
export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY ist ein sk_test_ Testnet- oder sk_live_ Mainnet-Schlüssel von Ihrem Dashboard; der Client liest ihn aus der Umgebung. Wenn Ihr Agent auch Geld erhält, benötigt der Webhook-Handler zusätzlich BLOCKCHAIN0X_WEBHOOK_SECRET, das das Dashboard einmal zurückgibt, wenn Sie einen Webhook erstellen oder rotieren.
Eine Funktion, die bezahlt, an einen AssistantAgent übergeben.
Unten ist die gesamte Integration. send_usdc ruft den echten blockchain0x-Client auf; AssistantAgent(tools=[send_usdc]) verwandelt es in ein Tool, das das Modell aufrufen kann. AutoGen liest die Typ-Hinweise und die Dokumentation, um das Schema zu erstellen, also halten Sie sie ehrlich. Führen Sie es aus, und der Agent bewegt USDC auf Base.
from autogen_agentchat.agents import AssistantAgent from autogen_ext.models.openai import OpenAIChatCompletionClient from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment # AutoGen turns a plain typed function into a tool. No dedicated package needed. def send_usdc(agent_id: str, to: str, amount_wei: str) -> str: """Send a USDC payment from an agent wallet. amount_wei is USDC base units (6 decimals), so "10000" is 0.01 USDC. """ result = blockchain0x.payments.create( body={"agentId": agent_id, "to": to, "amountWei": amount_wei}, ) return str(result) treasurer = AssistantAgent( name="treasurer", model_client=OpenAIChatCompletionClient(model="gpt-4o"), tools=[send_usdc], system_message="You pay vendor invoices in USDC within owner-set limits.", ) result = await treasurer.run( task="Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.", )
When the agent decides to pay, it calls send_usdc, the SDK submits the transfer, and you get a transaction hash back. amount_wei is base units, so 0.01 USDC is "10000". A sk_test_ key keeps it on Base Sepolia until you switch to sk_live_. Add more functions - read a wallet, settle an invoice - the same way; each becomes another entry in tools.
Bestätigen Sie eingehende Zahlungen mit einem signierten Webhook.
Wenn Ihr Agent auch USDC erhält, bestätigen Sie es mit dem Webhook anstelle von Abfragen. Der Verifizierungshelfer wird im Node SDK bereitgestellt; in einem Python-Dienst überprüfen Sie manuell gegen das dokumentierte HMAC, was der Helfer tut. Beispiel für FastAPI unten; derselbe Code funktioniert in jedem asynchronen Python-Framework.
import hmac, hashlib, os, time from fastapi import FastAPI, Request, HTTPException app = FastAPI() SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode() @app.post("/webhooks/payment") async def receive(request: Request): raw = await request.body() # RAW bytes - do not parse first sig = request.headers.get("X-Blockchain0x-Signature", "") ts = request.headers.get("X-Blockchain0x-Timestamp", "") parts = dict(p.split("=", 1) for p in sig.split(",") if "=" in p) t, v1 = parts.get("t", ts), parts.get("v1", sig) want = hmac.new(SECRET, t.encode() + b"." + raw, hashlib.sha256).hexdigest() if not hmac.compare_digest(want, v1) or abs(time.time() - int(t)) > 300: raise HTTPException(status_code=401) if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received": await trigger_followup() # USDC landed - run the next step return {"ok": True}
Der Algorithmus ist HMAC-SHA256 über den String t.rawBody, ein konstanter Vergleich und ein 300-Sekunden-Wiederholungsfenster. Lesen Sie den Rohkörper über await request.body(), niemals request.json() re-serialisiert, da dies die Bytes ändert, die die Signatur abdeckt. Die gelieferten Ereignisse sind payment.received, payment.sent, wallet.deployed und webhook.test. Für umfangreiche Nacharbeiten stellen Sie einen Job (Celery, RQ, arq) ein und antworten Sie sofort mit 200, anstatt den Handler zu blockieren.
Der Client, den Sie umwickeln, ist offen. Lesen Sie ihn.
Es gibt kein AutoGen-Starterpaket zum Klonen - das obige Rezept ist die Integration. Die blockchain0x SDKs sind Open Source auf GitHub; dieses Rezept umschließt das Python SDK (blockchain0x-python) mit der vollständigen Methodenoberfläche in den Dokumenten. Lesen Sie es als Referenz für die Funktionskörper.
github.com/tosh-labs/blockchain0x-pythonDie vollständige SDK-Methodenoberfläche und die Scopes sind in den Dokumenten dokumentiert. Beginnen Sie mit einem sk_test_ Schlüssel gegen Base Sepolia und wechseln Sie zu sk_live_, wenn die Funktion das tut, was Sie erwarten.
Fünf Fallen in Gruppen-Chats und asynchronen Prozessen, die zu vermeiden sind.
Das Multi-Agenten- und asynchrone Design von AutoGen eröffnet leistungsstarke Muster, bringt aber auch eigene Fallstricke mit sich. Diese stammen aus unserem Support-Posteingang.
Es gibt kein AutoGen-Paket - Sie wickeln das SDK ein.
Blockchain0x liefert Adapter für LangChain und CrewAI sowie den MCP-Server; es gibt kein dediziertes AutoGen-Paket. Das obige Rezept ist der unterstützte Weg: eine einfache typisierte Funktion, die den echten blockchain0x-Client aufruft, übergeben an AssistantAgent(tools=[...]). AutoGen liest die Funktionssignatur und den Docstring, um das Tool-Schema zu erstellen, also halten Sie den Docstring genau.
Beträge sind USDC-Basiseinheiten, als Strings
payments.create takes amountWei: a string of USDC base units, not a float and not a dollar figure. USDC has 6 decimals, so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the tool argument as str and validate it before the call - a float that sneaks through either errors at the backend or moves a millionth of what you meant.
send_payment kann frühzeitig 503 zurückgeben
payments.create versucht standardmäßig nicht erneut und kann 503 zurückgeben, bis der Chain-Adapter für Ihr Netzwerk konfiguriert ist. Lassen Sie den Gruppenchat nicht in einer Schleife auf eine fehlgeschlagene Zahlung laufen - fangen Sie den Fehler in Ihrer Funktion ab, geben Sie eine klare Nachricht zurück, auf die das Modell reagieren kann, und verlassen Sie sich auf den automatisch generierten Idempotency-Key, damit ein manueller Retry nicht doppelt zahlt.
AutoGen 0.4+ ist asynchron; der SDK-Aufruf ist synchron
AutoGen 0.4 führt Tools in einer asynchronen Schleife aus. Der Aufruf des blockchain0x-Clients ist synchron, was für eine schnelle Anfrage in Ordnung ist, aber ein langsamer Aufruf blockiert die Schleife. Wenn Sie echtes Volumen bewegen, wickeln Sie den SDK-Aufruf mit asyncio.to_thread ein, damit die Ereignisschleife reaktionsfähig bleibt. Für eine einzelne Zahlung pro Runde ist es in Ordnung, ihn direkt aufzurufen.
Überprüfen Sie eingehende Webhooks gegen den Rohkörper
Wenn Ihr Agent auch Geld EMPFÄNGT, bestätigen Sie es mit dem Webhook, nicht durch Abfragen. Überprüfen Sie die Signatur über die ROH-Anforderungsbytes (await request.body()), niemals request.json() erneut serialisiert, da das HMAC die genauen Bytes abdeckt. Es ist HMAC-SHA256 mit einem Replay-Fenster von 300 Sekunden. Der Handler unten ist das Ganze.