封装web3连接函数返回Http时提示.eth() method not found错误
问题原因
你遇到的.eth() method not found编译错误,核心原因是调用自定义async连接函数时遗漏了.await关键字。establish_web3_connection_http被标记为async,这类函数不会直接返回Web3<Http>实例,而是返回一个需要异步执行器调度的Future对象。你未加.await时,web3_con变量的实际类型是这个Future类型,而非初始化完成的Web3客户端实例,Future类型上自然没有定义eth()方法,因此触发编译报错。
修复方案
- 调用封装的连接函数时,补充
.await执行Future,同时通过?传播连接阶段可能产生的错误,拿到真正可用的Web3实例:
#[tokio::main] async fn main() -> web3::Result<()> { // 补充.await和?,和官方示例的错误处理逻辑对齐 let web3_con = establish_web3_connection_http("http://localhost:7545").await?; println!("Calling accounts."); let mut accounts = web3_con.eth().accounts().await?; Ok(()) }
- 如果编译阶段提示
Web3、Http类型未找到,在文件顶部补充对应的导入语句即可:
use web3::transports::Http; use web3::Web3;
你封装的连接函数本身的返回值定义没有问题,错误仅出在调用环节没有正确处理async函数的返回值。
内容的提问来源于stack exchange,提问作者rajohs
相关产品推荐
相关产品推荐

