用途:在 MetaMask Connect 中发送 EVM 交易,包括 ETH 转账与智能合约函数调用。适用于通过 eth_sendTransaction 发起交易、用 eth_estimateGas 预估 gas、用 eth_getTransactionReceipt 轮询确认,以及用 connectWith 在单次授权中完成连接与发送。
主要能力与流程: 1)创建 EVM 客户端并连接。使用 createEVMClient 与 getInfuraRpcUrls,传入 dapp 信息、Infura API Key 和支持网络(如 '0x1'、'0x89'),再调用 client.connect({ chainIds: ['0x1'] }) 获取 accounts,通过 client.getProvider() 取 provider,from 取 accounts[0]。 2)金额转换。交易 value 必须是十六进制 wei,示例函数 ethToHexWei 将 ETH 字符串转为 hex wei,如 0.01 对应 '0x2386f26fc10000'。 3)发送 ETH。构造 { from, to, value } 并调用 provider.request({ method: 'eth_sendTransaction', params: [txParams] }),返回交易哈希。 4)预估 gas。调用 eth_estimateGas,可在结果基础上加缓冲(示例加 20%),再随交易传入 gas 字段。 5)合约交互。把函数调用编码进 data,如 ERC-20 transfer 选择器 0xa9059cbb 加 64 位对齐的地址与金额,value 传 '0x0'。 6)确认交易。eth_sendTransaction 只返回哈希,需轮询 eth_getTransactionReceipt;receipt.status 为 '0x1' 表示成功,'0x0' 表示已打包但回滚。 7)单次授权流程。client.connectWith 支持传入 method 与 params 函数,params 接收第一个已连接账户(单个 Address),返回交易参数数组;result 即交易哈希。
限制与注意事项:value 必须是十六进制 wei,不可传十进制字符串或 ETH 数值;from 必须与已连接账户一致;回执状态为十六进制;eth_estimateGas 可能抛错,需 try/catch;connectWith 的 params 为函数时接收单个账户而非数组;链 ID 在 SDK 调用中始终为十六进制字符串(如 '0x1');错误码 4001 表示用户拒绝,-32002 表示已有待处理请求,-32000 表示执行错误(如余额不足、gas 过低);0x1 在每次 connect()/connectWith() 中自动包含。费用、价格与平台支持范围暂未提供。