簡體   English   中英

基板 - 在此 scope 中找不到類型“Vec”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM