我想建立一個到 Ganache 測驗區塊鏈的 http 連接。通過 web3 crate 的 GitHub 頁面,我發現了這個例子:
#[tokio::main]
async fn main() -> web3::Result<()> {
let _ = env_logger::try_init();
let transport = web3::transports::Http::new("http://localhost:7545")?;
let web3 = web3::Web3::new(transport);
let mut accounts = web3.eth().accounts().await?;
...
Ok(())
}
但是我想在一個函式中實作連接設定。所以我嘗試了以下方法:
async fn establish_web3_connection_http(url: &str) -> web3::Result<Web3<Http>>{
let transport = web3::transports::Http::new(url)?;
Ok(web3::Web3::new(transport))
}
...
#[tokio::main]
async fn main() -> web3::Result<()> {
let web3_con = establish_web3_connection_http("http://localhost:7545");
println!("Calling accounts.");
let mut accounts = web3_con.eth().accounts().await?;
Ok(())
}
這會導致以下錯誤:
錯誤
我不確定為什么我不回傳正確的值。當我不呼叫web3_con時沒有錯誤,所以該功能似乎很好。
回傳值是否存在某種錯誤,或者我如何稱呼它?
uj5u.com熱心網友回復:
establish_web3_connection_http()是一個異步函式,所以它回傳一個未來。你試圖呼叫.eth()未來,而你可能想呼叫未來產生的價值。您需要等待此函式的結果:
let web3_con = establish_web3_connection_http("http://localhost:7545").await?;
// ^^^^^^^
但是,您不執行任何 await in establish_web3_connection_http(),因此沒有理由首先需要異步。您可以async從其簽名中洗掉:
fn establish_web3_connection_http(url: &str) -> web3::Result<Web3<Http>>{
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/488421.html
上一篇:使用令牌的角度訪問
下一篇:按部分提升野獸閱讀內容
