Integrazione dei pagamenti AutoGen.
Non esiste un pacchetto AutoGen, e non ne hai bisogno. Avvolgi il vero client blockchain0x in una funzione, passalo al tuo agente, e può muovere USDC su Base.
Non esiste un package specifico per AutoGen, e non ne hai bisogno. AutoGen trasforma già una normale funzione tipizzata in uno strumento, quindi avvolgi il vero client Python in una funzione, lo passi a un tramite , e l'agente può inviare USDC, saldare fatture e leggere i wallet su Base. Imposta e vai.
AutoGen rende già una funzione uno strumento. Usalo.
AutoGen costruisce uno schema di strumenti direttamente dalla firma e dalla docstring di una funzione Python. Un adattatore AutoGen dedicato avvolgerebbe solo una funzione che avremmo comunque scritto, per poi allontanarsi dalla sincronizzazione con l'API in rapida evoluzione di AutoGen. Quindi non ne spediamo uno. Scrivi poche righe che chiamano il vero client blockchain0x e mantieni il pieno controllo degli argomenti, della convalida e della gestione degli errori.
Questo è lo stesso client che gli adattatori LangChain e CrewAI forniti avvolgono sotto il cofano. Qui lo avvolgi tu stesso, il che significa che non c'è una versione dell'adattatore da tenere sotto controllo e nulla tra il tuo agente e l'API tranne la tua funzione. I team multi-agente funzionano allo stesso modo: dai la funzione wallet a un agente, lascia gli altri senza di essa, e l'autorità di spesa rimane in un posto.
Installa AutoGen e il core SDK. Una variabile d'ambiente.
Non esiste un pacchetto AutoGen dedicato da aggiungere. Installa AutoGen (Python 3.10+) e il vero core SDK blockchain0x, quindi scrivi la funzione qui sotto. Questa è l'intera lista delle dipendenze.
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 è una chiave sk_test_ per testnet o sk_live_ per mainnet dalla tua dashboard; il client la legge dall'ambiente. Se il tuo agent riceve anche denaro, il gestore webhook richiede inoltre BLOCKCHAIN0X_WEBHOOK_SECRET, che la dashboard restituisce una sola volta quando crei o ruoti un webhook.
Una funzione che paga, consegnata a un AssistantAgent.
Di seguito è l'intera integrazione. send_usdc chiama il reale client blockchain0x; AssistantAgent(tools=[send_usdc]) lo trasforma in uno strumento che il modello può chiamare. AutoGen legge gli suggerimenti di tipo e la docstring per costruire lo schema, quindi mantienili onesti. Eseguilo e l'agente sposta USDC su 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.
Conferma i pagamenti in entrata con un webhook firmato.
Se il tuo agente riceve anche USDC, confermalo con il webhook piuttosto che tramite polling. L'helper di verifica è incluso nel Node SDK; in un servizio Python verifichi manualmente contro l'HMAC documentato, che è tutto ciò che fa l'helper. Esempio FastAPI qui sotto; lo stesso codice funziona in qualsiasi framework Python asincrono.
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}
L'algoritmo è HMAC-SHA256 sulla stringa t.rawBody, un confronto a tempo costante e una finestra di replay di 300 secondi. Leggi il corpo grezzo tramite await request.body(), mai request.json() rieseguito, perché ciò cambia i byte coperti dalla firma. Gli eventi spediti sono payment.received, payment.sent, wallet.deployed e webhook.test. Per lavori di follow-up pesanti, accoda un lavoro (Celery, RQ, arq) e rispondi 200 immediatamente anziché bloccare il gestore.
Il client che stai avvolgendo è aperto. Leggilo.
Non esiste un starter package AutoGen da clonare - la ricetta sopra è l'integrazione. Gli SDK blockchain0x sono open source su GitHub; questa ricetta incapsula il Python SDK (blockchain0x-python), con la superficie completa dei metodi nella documentazione. Consultala come riferimento per i body delle funzioni.
github.com/tosh-labs/blockchain0x-pythonLa superficie completa dei metodi dell'SDK e gli scope sono documentati in the docs. Inizia con una chiave sk_test_ su Base Sepolia, poi passa a sk_live_ quando la funzione si comporta come previsto.
Cinque trappole di chat di gruppo e asincrone da evitare.
Il design multi-agente + asincrono di AutoGen sblocca modelli potenti ma introduce le proprie insidie. Queste provengono dalla nostra casella di supporto.
Non esiste un pacchetto AutoGen - avvolgi l'SDK
Blockchain0x fornisce adattatori per LangChain e CrewAI oltre al server MCP; non esiste un pacchetto AutoGen dedicato. La ricetta sopra è il percorso supportato: una funzione tipizzata semplice che chiama il reale client blockchain0x, consegnata a AssistantAgent(tools=[...]). AutoGen legge la firma della funzione e la docstring per costruire lo schema dello strumento, quindi mantieni la docstring accurata.
Gli importi sono unità base USDC, come stringhe
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 può rispondere 503 all'inizio
payments.create non ripete per impostazione predefinita e può restituire 503 fino a quando l'adattatore della catena non è collegato alla tua rete. Non lasciare che la chat di gruppo continui a girare su un pagamento fallito - cattura l'errore nella tua funzione, restituisci un messaggio chiaro su cui il modello può agire e fai affidamento sulla chiave di idempotenza auto-mintata affinché un tentativo manuale non comporti un pagamento doppio.
AutoGen 0.4+ è asincrono; la chiamata SDK è sincrona
AutoGen 0.4 esegue strumenti in un ciclo asincrono. La chiamata al client blockchain0x è sincrona, il che va bene per una richiesta veloce, ma una chiamata lenta blocca il ciclo. Se stai gestendo un volume reale, avvolgi la chiamata SDK con asyncio.to_thread in modo che il ciclo degli eventi rimanga reattivo. Per un singolo pagamento per turno, chiamarlo direttamente va bene.
Verifica i webhook in entrata rispetto al corpo grezzo
Se il tuo agente riceve anche denaro, confermalo con il webhook, non tramite polling. Verifica la firma sui byte RAW della richiesta (await request.body()), mai request.json() ri-serializzato, perché l'HMAC copre i byte esatti. È HMAC-SHA256 con una finestra di replay di 300 secondi. Il gestore qui sotto è l'intero processo.