[英]Substrate - cannot find type `Vec` in this scope
我正在嘗試使用基板節點模板示例並添加一些自定義結構。
但是,我收到以下編譯錯誤:
“在此范圍內找不到類型Vec
”
使用的結構示例(+ 相關特征以及我從哪里導入它們)是:
use codec::{Encode, Decode};
use scale_info::TypeInfo;
// , WrapperTypeDecode, WrapperTypeEncode, TypeInfo
#[derive(Encode, Decode, Default, Clone, PartialEq, TypeInfo)]
#[cfg_attr(feature = "std", derive(Debug))]
pub struct Image {
// Note: Consider changing to JPG compression in the future
pixels: Vec<Vec<(u8, u8, u8)>>,
height: u32,
width: u32
}
但鑒於該基板需要大量的引導,我無法提供一個可行的示例。
我嘗試的一件事是添加#[cfg(feature = "std")]
應該啟用 rust 標准或std
中定義的標准, Cargo.toml
,我不確定哪個。 但這沒有幫助。
我的主要問題是......我該如何解決這個問題? 我在哪里錯過了什么進口?
我的次要更重要的問題是為什么會發生這種情況? https://docs.substrate.io/tutorials/v3/kitties/pt1/教程vec!
並且Vec
似乎沒有任何問題或進一步添加......或者更確切地說,我看到的一個添加是在所有使用vec!
的 impl 塊之前使用#[cfg(feature = "std")]
! 但不是在使用Vec
之前。 為什么會這樣? 這是否只是允許塊從 rust 標准導入任何內容? 還是它指的是std
中定義的Cargo.toml
? 為什么需要vec!
但不是Vec
?
#[cfg(feature = "std")]
所做的是“如果我的 crate 的 Cargo 功能稱為std
已啟用,請包含下面的代碼塊。這是條件編譯的一種形式。顯然,substrate 需要在 no 中構建代碼-std 上下文也是如此。需要在 no-std 中運行的部分將無法使用 Vec。
首先,您不想在使用基板時啟用std
,因為 SCALE 編解碼器需要non-std
,這也啟用了 wasm 編譯。 更多關於 SCALE的信息
關於Vec
,您可能只是缺少使用一些frame_support
板條箱,僅用於檢查您提供的結構,我可以說的不多。 但是我會在這里給你關於底層文檔的運行時存儲的存儲條目。 並建議將您的代碼與基板回購上的一些托盤進行比較,這樣您就可以從其他使用Vec
的托盤中看到您可能缺少的內容。 例如, 刻痕托盤將刻痕本身存儲為Vec
,因此這可能是一個開始查找的好地方。
希望這足夠有幫助。
看看 CRUST 平行鏈、 https://github.com/paritytech/substrate-lfs或其他 web3/IPFS 鏈下存儲機制。
通常,您希望在鏈上存儲盡可能少的 state。 直接存儲圖像數據(即使是高度壓縮的 jpeg)可能不是一個很好的設計決策,因為它可能會變得非常昂貴(除非您的圖像尺寸非常小)。
我通過在我的 runtime/Cargo.toml 的依賴項中添加default-features = false,
來解決它
pallet-evm = { git = "https://github.com/paritytech/frontier", default-features = false, branch = "polkadot-v0.9.25" }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.