CrewAI-Zahlungsintegration.
Geben Sie einer CrewAI-Crew eine Wallet. Ein dedizierter Schatzmeister-Agent sendet USDC, begleicht Rechnungen und liest Salden, während die Arbeitsagenten sich auf die Arbeit konzentrieren.
Blockchain0x liefert ein echtes Python-Paket, . Installieren Sie es, setzen Sie , rufen Sie auf und geben Sie die Tools an einen dedizierten Treasurer-Agenten weiter. Dieser Agent kann USDC senden, eine Rechnung mit On-Chain-Nachweis begleichen und Wallets lesen, während die Work-Agenten im Team keinen Wallet-Zugriff haben. USDC wird auf Base abgewickelt.
Die Stärke von CrewAI ist die Rollentrennung. Nutzen Sie es auch für die Wallet.
Andere Frameworks stapeln jedes Werkzeug auf einen einzelnen Agenten. Das Design von CrewAI fördert die Rollentrennung: Ein Forscher forscht, ein Schriftsteller schreibt, ein Prüfer überprüft. Geld verdient die gleiche Behandlung - ein dedizierter Schatzmeister-Agent hält die Brieftaschenwerkzeuge, und die Arbeitsagenten halten keine. Die Ausgabenberechtigung lebt an einem Ort, anstatt sich über jeden Agenten zu verteilen, der zufällig im Team ist.
Diese Struktur macht auch die Prüfpfade klarer. Wenn USDC bewegt wird, wissen Sie genau, welcher Agent es bewegt hat (der Schatzmeister) und für welche Aufgabe es war (die, die es übergeben hat). Integrationen mit einem einzelnen Agenten verwischen diese Linie und erschweren die Ausgabenanalysen pro Aufgabe.
Eine pip-Installation. Eine Umgebungsvariable.
Das Paket benötigt Python 3.10 oder neuer und funktioniert mit Poetry oder Pip. Es zieht das Kern-blockchain0x SDK und crewai als Abhängigkeiten ein; nichts weiter hinzuzufügen.
pip install blockchain0x-crewaiexport 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 Blockchain0x-Dashboard, und es ist die einzige Variable, die der Adapter benötigt - er leitet den Schlüssel an das Backend weiter und hält kein eigenes Geheimnis. Für den untenstehenden Webhook-Handler setzen Sie auch BLOCKCHAIN0X_WEBHOOK_SECRET, das das Dashboard einmal zurückgibt, wenn Sie einen Webhook erstellen oder rotieren.
Ein funktionierendes Team mit zwei Agenten mit Abrechnungs- + Forschungsrollen.
Unten ist eine vollständige CrewAI-Crew, in der ein Treuhänder-Agent einen Datenanbieter in USDC bezahlt und ein Forschungsagent das Ergebnis verwendet. Der Treuhänder hält die Wallet-Tools; der Forscher hat keine. Dies ist das kanonische Muster für eine Crew, die Ausgaben hat.
from crewai import Agent, Task, Crew from blockchain0x import Client from blockchain0x_crewai import create_blockchain0x_toolset client = Client() # reads BLOCKCHAIN0X_API_KEY from the environment tools = create_blockchain0x_toolset(client) # A dedicated treasurer holds the wallet tools; the work agents do not. treasurer = Agent( role="Treasurer", goal="Pay vendor invoices in USDC within owner-set limits", backstory="Operates a Blockchain0x agent wallet on Base.", tools=tools, allow_delegation=False, ) researcher = Agent( role="Senior Market Analyst", goal="Produce a thorough Q4 LLM market analysis", backstory="A specialist analyst with 10 years in tech-market research.", tools=[], allow_delegation=False, ) pay_task = Task( description="Pay 0.01 USDC from our agent wallet to the data vendor at 0xVendor.", expected_output="The transaction hash of the settled payment.", agent=treasurer, ) research_task = Task( description="Using the purchased dataset, write the Q4 LLM market analysis.", expected_output="A 1,500-word market analysis.", agent=researcher, context=[pay_task], ) crew = Crew(agents=[treasurer, researcher], tasks=[pay_task, research_task]) result = crew.kickoff()
When you call crew.kickoff(), the pay_task runs first: the treasurer calls blockchain0x_send_payment, the SDK submits the transfer on Base, and the transaction hash is the task output. The research_task runs next and uses the purchased result. amount_wei is USDC base units, so 0.01 USDC is the string "10000". On a sk_test_ key the whole flow runs on Base Sepolia, and payments.create can answer 503 until the chain adapter is wired for your network.
Die nächste Crew auslösen, wenn eine Zahlung eingeht.
Wenn USDC an Ihren Agenten ausgezahlt wird, POSTet Blockchain0x ein signiertes Ereignis an Ihre Webhook-URL. Der Verify-Helfer wird im Node SDK geliefert; ein Python-Dienst überprüft manuell gegen das dokumentierte HMAC, was der Helfer ohnehin tut. Flask-Beispiel unten; der gleiche Code funktioniert in FastAPI oder jedem Python-Webframework.
import hmac, hashlib, os, time from flask import Flask, request, abort app = Flask(__name__) SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode() @app.post("/webhooks/payment") def receive(): raw = request.get_data() # RAW bytes - do not parse first sig = request.headers.get("X-Blockchain0x-Signature", "") ts = request.headers.get("X-Blockchain0x-Timestamp", "") # Header is "t=<unix>,v1=<hex>"; some proxies send bare hex + the ts header. 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: abort(401) if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received": run_followup_for(request.get_json()) # USDC landed - do the work return "ok", 200
Dies ist der echte Algorithmus: HMAC-SHA256 über den String t.rawBody, ein zeitkonstanter Vergleich und ein 300-Sekunden-Wiederholfenster. Lesen Sie den Rohkörper (request.get_data()), niemals request.get_json() erneut serialisiert, da dies die Bytes ändert, die die Signatur abdeckt. Architektur: Lassen Sie den Handler einen Job in die Warteschlange stellen (Celery, RQ, eine Redis-Liste), der den tatsächlichen CrewAI-Lauf auslöst. crew.kickoff() im Handler aufzurufen, kann Minuten dauern und die HTTP-Anforderung zeitlich begrenzen.
Geben Sie der Crew das gesamte Toolset oder nur ein Tool.
create_blockchain0x_toolset gibt alle fünf Tools zurück: blockchain0x_send_payment, blockchain0x_settle_invoice, blockchain0x_get_wallet, blockchain0x_list_wallets und blockchain0x_get_transaction. Wenn eine Crew nur bezahlen muss, geben Sie ihr nur das eine mit einer einzigen Fabrik.
from blockchain0x_crewai import create_payment_tool pay = create_payment_tool(client) # amount_wei is USDC base units: 6 decimals, so 10000 = 0.01 USDC. pay.run(agent_id="agt_123", to="0xRecipient", amount_wei="10000")
Die Fabriken pro Fähigkeit sind create_payment_tool, create_invoice_tool, create_wallet_tool, create_wallets_list_tool und create_transaction_tool. Quell- und Testnet-Beispiele finden Sie in dem Python SDK-Repo; die CrewAI-Supportmatrix befindet sich in den Dokumenten.
Fünf Dinge, auf die man achten sollte, wenn man die Abrechnung in eine Crew integriert.
Das rollenbasierte Design von CrewAI macht die Zahlungsintegration sauberer als bei anderen Frameworks. Es hat auch seine eigenen Fallstricke. Diese im Voraus zu kennen, spart Zeit.
Die Brieftaschenwerkzeuge auf dem falschen Agenten platzieren
CrewAI-Agenten haben Rollen. Geben Sie die Wallet-Tools dem Forscher, der forschen sollte, und das LLM beginnt, Geld während der Analyse zu bewegen. Das saubere Muster ist ein dedizierter Schatzmeister-Agent, der die Tools hält und als eigene Aufgabe läuft; die Arbeitsagenten haben überhaupt keinen Wallet-Zugang. Das obige Beispiel folgt dieser Struktur. Kopieren Sie es.
Sequentielle vs hierarchische Prozesse
CrewAI unterstützt sequentielle (Standard) und hierarchische Ausführung. Bei hierarchischer Ausführung orchestriert ein Manager-Agent die Crew. Wenn der Manager die Wallet-Tools delegieren darf, kann er sie an jeden Untergebenen weitergeben, was genau das ist, was Sie für die Ausgabenbefugnis nicht wollen. Entweder behalten Sie die Tools bei einem dedizierten Agenten und führen sie sequentiell aus, oder Sie schränken die Delegierungsregeln des Managers ein.
Lesen des Abrechnungsstatus aus dem Aufgaben-Kontext
Die eingehende Abrechnung ist asynchron. Wenn die Forschung Aufgabe die Zahlungsaufgabe in ihrem Kontext auflistet (in Ordnung), aber das LLM dann versucht, einen endgültigen Zahlungsstatus aus diesem Kontext zu lesen (nicht in Ordnung, die Bestätigung kommt später per Webhook), erhalten Sie verwirrte Ausgaben. Leiten Sie die nachgelagerte Arbeit an einem durch Webhook ausgelösten Signal und nicht am Aufgaben-Kontext. Die Aufgaben-Callbacks von CrewAI sind der richtige Hook.
Beträge sind USDC-Basiseinheiten, als Strings
blockchain0x_send_payment takes amount_wei: a string of USDC base units, not a float and not a dollar figure. USDC has 6 decimals, so 0.01 USDC is "10000". CrewAI passes tool inputs through as-is, so a Python float arrives as a float and the SDK rejects it - but the error reads like a CrewAI tool error, which throws off first integrators. Pass a string.
Webhook-Handler außerhalb des Crew-Prozesses
Ihr Webhook-Handler ist normalerweise ein separater Flask- oder FastAPI-Prozess und kein Teil der Crew-Laufzeit. Die Crew beendet ihr kickoff() und gibt zurück; der Webhook landet später, wenn eine Zahlung abgeschlossen ist. Überbrücken Sie die beiden mit einer Warteschlange oder einer Datenbankzeile, die der Webhook schreibt und die die Crew beim nächsten Lauf liest. Halten Sie keine Crew am Leben, während Sie auf einen Webhook warten - CrewAI-Läufe sind absichtlich kurzlebig.