Dùng RPC blockchain trong Agent LangChain với BlockVectra
Cấp cho Agent LangChain dữ liệu blockchain trực tiếp bằng một tool trên endpoint công khai không cần key của BlockVectra, rồi thêm máy chủ MCP tài liệu và API key cho các phương thức cần key.
Một Agent LangChain đọc dữ liệu blockchain trực tiếp qua một tool gửi POST JSON-RPC tới https://api.blockvectra.com/v1/eth_mainnet/public. Endpoint đó không cần API key hay đăng ký cho các phương thức trong public.methods của từng chuỗi. API key bổ sung phần còn lại, và Gói miễn phí cung cấp 30,000,000 CU cho mỗi cửa sổ 30 ngày. Kiểm tra ngày .
import httpx
from langchain.agents import create_agent
from langchain.tools import tool
RPC = "https://api.blockvectra.com/v1/eth_mainnet/public"
@tool
def eth_block_number() -> str:
"""Return the latest Ethereum mainnet block number as a hex string."""
body = {"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []}
return httpx.post(RPC, json=body, timeout=10).json()["result"]
agent = create_agent("claude-sonnet-5", tools=[eth_block_number])
result = agent.invoke({"messages": [{"role": "user", "content": "What is the latest block?"}]})
print(result["messages"][-1].content)Cài đặt bằng pip install langchain httpx; chuỗi tên model và key của nhà cung cấp đi theo hướng dẫn nhanh LangChain. Tool dùng decorator @tool của LangChain và create_agent.
Cùng tool đó trong TypeScript
import * as z from "zod";
import { createAgent, tool } from "langchain";
const ethBlockNumber = tool(
async () => {
const res = await fetch("https://api.blockvectra.com/v1/eth_mainnet/public", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "eth_blockNumber", params: [] }),
});
return (await res.json()).result as string;
},
{ name: "eth_block_number", description: "Latest Ethereum mainnet block number (hex).", schema: z.object({}) },
);
const agent = createAgent({ model: "claude-sonnet-5", tools: [ethBlockNumber] });Xem hướng dẫn tools của LangChain JS để biết chữ ký của tool().
Gọi mọi phương thức bằng API key
Các phương thức ngoài public.methods, như eth_getLogs, cần key. Đọc key từ biến môi trường và gửi trong header x-api-key; chain slug (eth_mainnet, base_mainnet, v.v.) lấy từ GET /v1/chains:
import os
import httpx
from langchain.tools import tool
@tool
def rpc_call(chain: str, method: str, params: list) -> dict:
"""Call a JSON-RPC method on a BlockVectra chain slug such as base_mainnet."""
headers = {"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]}
body = {"jsonrpc": "2.0", "id": 1, "method": method, "params": params}
return httpx.post(f"https://api.blockvectra.com/v1/{chain}", json=body, headers=headers, timeout=15).json()Trả về toàn bộ phản hồi JSON-RPC cho phép model đọc đối tượng error và thay đổi lệnh gọi tiếp theo. Để tạo key mà không cần trình duyệt, chạy quy trình bốn bước trong hướng dẫn đăng ký bằng chương trình: challenge, chữ ký, đăng nhập, rồi POST /keys. Nhà phát triển cũng có thể tạo key trong console.
Thêm máy chủ MCP tài liệu
Agent LangChain kết nối tới máy chủ MCP qua MCPAdapter. Trỏ nó tới https://docs.blockvectra.com/mcp để cấp cho Agent list_chains, get_status, rpc_call, read_doc và các công cụ khác được liệt kê trên trang máy chủ MCP. Kết nối không cần key.
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter
async def main():
async with MCPAdapter("https://docs.blockvectra.com/mcp") as adapter:
tools = await adapter.list_tools()
agent = create_agent("claude-sonnet-5", tools)
return await agent.ainvoke({"messages": [{"role": "user", "content": "List the supported chains."}]})Cài đặt bằng pip install "langchain[mcp]" (langchain>=1.4.0, đang ở bản beta). Để dùng các công cụ cần key, truyền key dưới dạng bearer token: MCPAdapter(Client(url, auth=os.environ["BLOCKVECTRA_API_KEY"])) với from fastmcp.client import Client, như trong hướng dẫn xác thực MCP của LangChain.
Trong TypeScript, cài @langchain/mcp-adapters@^2.0.0 và truyền một map header:
import { MCPAdapter } from "@langchain/mcp-adapters";
import { createAgent } from "langchain";
const adapter = new MCPAdapter({
servers: {
blockvectra: {
url: "https://docs.blockvectra.com/mcp",
headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
},
},
});
try {
const agent = createAgent({ model: "claude-sonnet-5", tools: await adapter.listTools() });
// agent.invoke(...)
} finally {
await adapter.close();
}Bỏ dòng headers để kết nối không cần key. Tài liệu tham khảo chính thức: LangChain MCP (Python) và LangChain MCP (JavaScript).
Các lỗi tool của bạn sẽ gặp
| Phản hồi | Ý nghĩa | Agent nên làm |
|---|---|---|
HTTP 401, -32024, missing_api_key | URL dùng key được gọi mà không có key | Gửi key trong x-api-key hoặc đường dẫn |
HTTP 401, -32024, invalid_api_key | Key không tồn tại, đã bị vô hiệu hóa hoặc đã bị thu hồi | Kiểm tra key trong console; key mới cần vài giây để kích hoạt |
-32601, method_not_public | Phương thức không nằm trong public.methods của chuỗi | Dùng URL có key thay cho /public |
-32601, method not available | Phương thức chưa được bật trên chuỗi đó | Kiểm tra methods.allow trong GET /v1/chains |
Mỗi lỗi có data.reason và docs_url; danh sách đầy đủ nằm trên trang lỗi.
Câu hỏi thường gặp
Endpoint công khai có dùng được cho eth_getLogs không? Không. Nó chỉ phục vụ các phương thức trong public.methods của chuỗi; eth_getLogs và Data API cần API key.
Agent có thể truyền API key làm tham số của tool không? Không. Giữ key trong biến môi trường hoặc header của MCP client; máy chủ MCP từ chối key nằm trong tham số của công cụ.
Tool có thể nhắm tới chuỗi khác không? Có. Thay eth_mainnet bằng bất kỳ chain slug nào có public.url trong GET /v1/chains.
Bước tiếp theo
- Tổng quan framework Agent cho ElizaOS, viem, wagmi và Coinbase AgentKit.
- Kết nối AI Agent để khám phá endpoint bằng MCP, llms.txt và OpenAPI.
- Quy tắc thanh toán về đo lường CU, giới hạn tốc độ và các lỗi không bị tính phí.
Cập nhật lần cuối:
So sánh với Infura
Sử dụng credit theo chu kỳ của BlockVectra cho các tác vụ đọc tập trung, thanh toán theo phương thức mà không cần gói đăng ký RPC hàng tháng, và tự động hóa việc tạo tài khoản cùng nạp tiền bằng stablecoin.
Logs vs Transfers API
Chọn eth_getLogs cho log sự kiện hợp đồng hoặc Token Transfers API cho lịch sử chuyển token ERC-20 đã lập chỉ mục. So sánh phạm vi khối, phân trang, độ bao phủ và tính bất biến sau cùng.