CrewAI betalingsintegratie.
Geef een CrewAI-crew een portemonnee. Een toegewijde penningmeester-agent stuurt USDC, vereffent facturen en leest saldi terwijl de werkagenten zich op het werk blijven concentreren.
Blockchain0x levert een echt Python-pakket, . Installeer het, stel in, roep aan, en geef de tools aan een dedicated treasurer-agent. Die agent kan USDC versturen, een factuur afwikkelen met on-chain bewijs, en wallets lezen, terwijl de work agents in de crew geen wallettoegang hebben. USDC settlet op Base.
De kracht van CrewAI is rol scheiding. Gebruik het ook voor de wallet.
Andere frameworks stapelen elke tool op één enkele agent. Het ontwerp van CrewAI moedigt rol scheiding aan: een onderzoeker onderzoekt, een schrijver schrijft, een beoordelaar beoordeelt. Geld verdient dezelfde behandeling - een toegewijde penningmeester-agent houdt de wallet-tools, en de werkagenten houden er geen. Uitgavenautoriteit leeft op één plek in plaats van te lekken over elke agent die toevallig in de ploeg is.
Deze structuur maakt ook auditsporen duidelijker. Wanneer USDC beweegt, weet je precies welke agent het heeft verplaatst (de penningmeester) en voor welke taak het was (de taak die het heeft overgedragen). Integraties met één agent vervagen die lijn en maken per-taak uitgavenanalyses moeilijker.
Eén pip-installatie. Eén omgevingsvariabele.
Het pakket heeft Python 3.10 of nieuwer nodig en werkt met poetry of pip. Het haalt de kern blockchain0x SDK en crewai als afhankelijkheden binnen; verder niets toe te voegen.
pip install blockchain0x-crewaiexport BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY is een sk_test_ testnet- of sk_live_ mainnet-sleutel uit je Blockchain0x-dashboard, en het is de enige variabele die de adapter nodig heeft - hij stuurt de sleutel door naar de backend en bewaart zelf geen geheim. Voor de webhook-handler hieronder stel je ook BLOCKCHAIN0X_WEBHOOK_SECRET in, die het dashboard één keer teruggeeft wanneer je een webhook aanmaakt of roteert.
Een werkende twee-agenten bemanning met facturerings- + onderzoeksrollen.
Hieronder is een complete CrewAI-crew waar een penningmeester-agent een dataleverancier in USDC betaalt, en een onderzoeker-agent het resultaat gebruikt. De penningmeester houdt de portemonnee-tools; de onderzoeker heeft er geen. Dit is het canonieke patroon voor een crew die uitgeeft.
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.
De volgende crew activeren wanneer een betaling aankomt.
Wanneer USDC naar je agent wordt afgehandeld, POST Blockchain0x een ondertekende gebeurtenis naar je webhook-URL. De verify-helper wordt geleverd in de Node SDK; een Python-service verifieert met de hand tegen de gedocumenteerde HMAC, wat de helper toch al doet. Flask-voorbeeld hieronder; dezelfde code werkt in FastAPI of elk 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
Dit is het echte algoritme: HMAC-SHA256 over de string t.rawBody, een constante tijdsvergelijking, en een replayvenster van 300 seconden. Lees de ruwe body (request.get_data()), nooit request.get_json() opnieuw serialiseren, omdat dat de bytes verandert die de handtekening dekt. Architectuur: laat de handler een taak in de wachtrij plaatsen (Celery, RQ, een Redis-lijst) die de daadwerkelijke CrewAI-run activeert. Het aanroepen van crew.kickoff() binnen de handler kan minuten duren en maakt de HTTP-aanroep tijdig af.
Geef de crew de hele toolset, of slechts één tool.
create_blockchain0x_toolset retourneert alle vijf tools: blockchain0x_send_payment, blockchain0x_settle_invoice, blockchain0x_get_wallet, blockchain0x_list_wallets en blockchain0x_get_transaction. Als een team alleen hoeft te betalen, geef dan alleen die met een enkele fabriek.
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")
De per-capability factories zijn create_payment_tool, create_invoice_tool, create_wallet_tool, create_wallets_list_tool en create_transaction_tool. Broncode en testnet-voorbeelden staan in de Python SDK repo; de CrewAI support matrix staat in de docs.
Vijf dingen om op te letten bij het aansluiten van facturering in een crew.
CrewAI's rolgebaseerde ontwerp maakt betalingsintegratie schoner dan andere frameworks. Het heeft ook zijn eigen valkuilen. Deze van tevoren kennen bespaart tijd.
De wallet-tools op de verkeerde agent plaatsen
CrewAI-agenten hebben rollen. Geef de wallet-tools aan de onderzoeker, die moet onderzoeken, en de LLM begint te proberen geld te verplaatsen tijdens de analyse. Het schone patroon is een toegewijde penningmeester-agent die de tools vasthoudt en als zijn eigen taak draait; de werkagenten hebben helemaal geen toegang tot de wallet. Het bovenstaande voorbeeld volgt die structuur. Kopieer het.
Sequentiële vs hiërarchische processen
CrewAI ondersteunt sequentiële (standaard) en hiërarchische uitvoering. Bij hiërarchisch orkestreert een manager-agent de crew. Als de manager de wallet-tools mag delegeren, kan hij ze aan elke ondergeschikte geven, wat precies is wat je niet wilt voor uitgavenautoriteit. Houd de tools ofwel op één toegewijde agent en voer sequentieel uit, of beperk de delegatieregels van de manager.
Lezen van de status van de afhandeling uit de taakcontext
Inkomende afwikkeling is asynchroon. Als de onderzoekstaak de betaaltaak in zijn context vermeldt (prima), maar de LLM vervolgens probeert een definitieve betalingsstatus uit die context te lezen (niet prima, de bevestiging arriveert later via webhook), krijg je verwarde output. Beperk het downstream-werk op een webhook-geactiveerd signaal, niet op taakcontext. De taakcallbacks van CrewAI zijn de juiste haak.
Bedragen zijn USDC basis eenheden, 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 buiten het crew-proces
Je webhook-handler is meestal een apart Flask- of FastAPI-proces, geen onderdeel van de crew-runtime. De crew voltooit zijn kickoff() en retourneert; de webhook komt later aan wanneer een betaling wordt afgehandeld. Verbind de twee met een wachtrij of een database-rij die de webhook schrijft en de crew leest bij de volgende uitvoering. Houd geen crew in leven terwijl je op een webhook wacht - CrewAI-runs zijn kortstondig van ontwerp.