ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AI 与 Web3 结合的第一版:把合约边界先收紧

AI 与 Web3 结合的第一版:把合约边界先收紧 AI 与 Web3 结合的第一版把合约边界先收紧智能合约部署上链后无法像传统后端一样随时修复。构建 AI 与 Web3 产品时需要明确 AI 的权限边界避免直接授予私钥操控权也避免将其限制为只能回答问题的聊天界面。第一版产品MVP需要先界定 AI 与 Web3 合约交互的工程边界。本文讨论核心链路拆解、链上状态异步隔离和防幻觉校验的实现方式。架构选型与边界切割AI 模型的核心特性是概率输出而智能合约追求确定性执行。将概率性逻辑直接映射为链上交易是生产事故的高发地带。第一版系统绝不能给 AI 赋予直接调用sendTransaction的权限。正确的架构应当是将 AI 定位为“意图构建器Intent Builder”与“交易参数预检器”。AI 负责解析用户的自然语言需求生成符合 ERC-20 / ERC-721 或 DeFi 协议标准的强类型 Payload后续的模拟执行、用户签名与链上广播必须在确定性沙箱中完成。这种分层设计让异常输出先经过链上模拟eth_call检查再决定是否提交交易从而降低非法或高风险 Payload 上链的概率。flowchart TD UserPrompt[用户自然语言指令] -- LLMIntent[LLM 意图解析器] LLMIntent -- RawPayload[结构化交易 Payload] RawPayload -- SimulationEngine{节点模拟执行 (eth_call)} SimulationEngine -- 模拟失败 / Gas过高 -- RejectAlert[拒绝交易并返错给AI] SimulationEngine -- 模拟成功 -- UserWallet[用户客户端私钥签名] UserWallet -- ChainBroadcast[区块链网络广播]关键链路一AI 意图解析与强结构化校验在第一版开发中不要尝试自己解析复杂的非结构化文本必须依赖 Pydantic 或 TypeScript Zod 强行约束 AI 的输出格式。以下示例展示了基于 Python asyncio 与 Pydantic 构建的意图解析与交易预校验引擎。系统获取 LLM 返回的 JSON 后优先进行严格的类型断言与数值范围校验剔除包含恶意合约地址或异常 Gas 限制的指令。import asyncio import json from typing import Dict, Any, Optional from pydantic import BaseModel, Field, field_validator from web3 import AsyncWeb3 from web3.providers import AsyncHTTPProvider class SwapIntentSchema(BaseModel): token_in: str Field(..., description输入代币合约地址) token_out: str Field(..., description输出代币合约地址) amount_in_wei: int Field(..., description输入金额(Wei)) max_slippage_bps: int Field(..., description最大滑点(基点 1-1000)) recipient: str Field(..., description接收方地址) field_validator(token_in, token_out, recipient) def validate_eth_address(cls, v: str) - str: if not v.startswith(0x) or len(v) ! 42: raise ValueError(非法 Ethereum 地址格式) return AsyncWeb3.to_checksum_address(v) field_validator(max_slippage_bps) def validate_slippage(cls, v: int) - int: if v 0 or v 1000: raise ValueError(滑点范围必须在 0.01% 至 10% 之间) return v class TransactionBuilderEngine: def __init__(self, rpc_url: str): self.w3 AsyncWeb3(AsyncHTTPProvider(rpc_url)) async def parse_and_validate(self, llm_raw_output: str) - Dict[str, Any]: try: parsed_data json.loads(llm_raw_output) intent SwapIntentSchema(**parsed_data) except Exception as e: return {success: False, stage: SCHEMA_VALIDATION, error: str(e)} # 模拟链上状态检查 is_contract await self._is_smart_contract(intent.token_out) if not is_contract: return {success: False, stage: CHAIN_PRECHECK, error: 目标输出代币地址非合约账户} return {success: True, validated_intent: intent.model_dump()} async def _is_smart_contract(self, address: str) - bool: code await self.w3.eth.get_code(AsyncWeb3.to_checksum_address(address)) return len(code) 0 async def main(): rpc https://eth-mainnet.g.alchemy.com/v2/your-api-key engine TransactionBuilderEngine(rpc) mock_llm_output { token_in: 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, token_out: 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48, amount_in_wei: 1000000000000000000, max_slippage_bps: 50, recipient: 0x71C7656EC7ab88b098defB751B7401B5f6d8976F } res await engine.parse_and_validate(mock_llm_output) print(预检结果:, res) if __name__ __main__: asyncio.run(main())这段代码揭示了第一版必须要做的防线任何由模型推荐的地址必须检查其get_code确保合约真实存在所有金额与滑点限制必须在 Python/TypeScript 层做硬性截断绝不透传原始概率数据。关键链路二链上模拟执行与状态沙箱即便校验通过也不代表交易可以安全提交。网络拥堵、流动性不足或者抢跑攻击MEV都可能导致实际交易失败。因此第二道防线是使用 RPC 节点的eth_call或eth_estimateGas进行干跑Dry-run。干跑的意义在于完全抹平 AI 生成非确定性代码带来的潜在风险。在第一版中可以将模拟执行结果作为结构化数据反馈给前级 AI使其具备“自我纠错”的能力。例如当模拟执行提示TRANSFER_FAILED时AI 可以在捕获回溯信息后重新调整兑换路径或减少交易数额。链上模拟不仅能捕获简单的逻辑错误还能精准计算出交易所需的真实 Gas 消耗。许多包含 AI 功能的 DApp 经常因为 Gas 限制预估过低导致交易在链上 Revert既白白浪费了用户的手续费又造成了极差的用户体验。通过沙箱模拟我们可以强制在估算出的 Gas 上限上增加 15% 的缓冲余量确保交易成功率。关键代码取舍MVP 阶段舍弃什么在确定第一版功能范围时团队容易产生过度设计的倾向。下表梳理了第一版开发中应当保留与临时舍弃的技术点功能模块第一版MVP必须保留第一版MVP坚决舍弃取舍理由私钥管理客户端 WalletConnect / Metamask 签名后端托管私钥代扣 Gas / 门限签名 (MPC)托管私钥大幅增加合规与被盗风险交易解析静态 ABI 硬编码与 Schema 匹配全网动态 ABI 智能解析与泛化 Agent泛化 ABI 解析在边界条件易崩溃错误自愈单次失败后提示用户手动重试无人值守多轮自动重试与链上抢跑自动重试可能引发重复扣款或连续亏损状态同步WebSocket 订阅特定 Hash 状态实时全节点日志索引与自建 Graph自建索引节点运维成本极高舍弃复杂性并不意味着降低安全标准。相反剥离了自动化托管与复杂的全网 ABI 动态匹配后开发精力可以集中在交易的安全性校验和界面交互的流畅度上。生产部署的真实教训在实际上线过程中经常会遇到 RPC 节点限频Rate Limit与 LLM 响应延迟叠加导致的体验停滞。当用户发起一条需要 AI 辅助分析的智能合约操作指令时如果后端直接进行同步阻塞等待HTTP 请求极易超时。解决这一问题的工程手段是采用异步 Task ID Event Stream 机制。前端提交意图生成请求后后端立即返回一个 Job ID同时启动后台协程完成“LLM解析 - Schema校验 - eth_call模拟”。前端通过 Server-Sent Events (SSE) 实时接收任务进度。这种异步流水线架构能够有效屏蔽底层 RPC 节点的网络抖动为第二版的扩展奠定稳固的基石。
返回列表