- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经看过关于创建单个 Substrate 运行时模块的 crate 的 Substrate 教程 here为了重用该功能,但我想知道一个自定义模块是否有办法从另一个自定义模块访问存储或功能?
这些方面的东西:
/// In ModuleA
pub type IndexType = u64;
decl_storage! {
trait Store for Module<T: Trait> as ModuleA {
pub MyIndexCount get(my_index_count): Option<IndexType>;
}
}
/// In ModuleB
decl_module! {
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
fn deposit_event<T>() = default;
pub fn edit_index(origin) -> Result {
let sender = ensure_signed(origin)?;
// --->>>> I want to read some storage from ModuleA whilst inside ModuleB
let c: IndexType = ReadStorageFromModuleA >>> my_index_count().ok_or("Storage Read Error: cannot get index")?;
// change storage in ModuleA from ModuleB
WriteToStorageInModuleA <MyIndexCount<T>>::put(&c + 1);
Ok(())
}
}
}
最佳答案
如果您正在构建一个直接依赖于另一个模块 (module1) 的模块 (module2),则必须在 module2 的 trait 定义中继承 module1 的 trait:
pub trait Trait: module1::Trait {
...
}
StorageValue
, StorageMap
等... <module1::Something<T>>::get()
<module1::Something<T>>::put()
Module
类型:
<module1::Module<T>>::public_function();
Note that all the things in this module are marked public (
pub
)
use support::{decl_module, decl_storage, StorageValue};
pub trait Trait: system::Trait {}
decl_storage! {
trait Store for Module<T: Trait> as TemplateModule {
pub Something: u32;
}
}
decl_module! {
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
}
}
impl<T: Trait> Module<T> {
pub fn get_value() -> u32 {
<Something<T>>::get()
}
}
use support::{decl_module, decl_event, StorageValue, dispatch::Result};
use system::ensure_signed;
use crate::module1;
pub trait Trait: module1::Trait {
type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;
}
decl_module! {
/// The module declaration.
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
fn deposit_event<T>() = default;
pub fn get_value_directly(origin) -> Result {
let who = ensure_signed(origin)?;
let value = <module1::Something<T>>::get();
Self::deposit_event(RawEvent::ValueIs(value, who));
Ok(())
}
pub fn set_value_directly(origin, value: u32) -> Result {
let _ = ensure_signed(origin)?;
<module1::Something<T>>::put(value);
Ok(())
}
pub fn get_value_public_function(origin) -> Result {
let who = ensure_signed(origin)?;
let value = <module1::Module<T>>::get_value();
Self::deposit_event(RawEvent::ValueIs(value, who));
Ok(())
}
}
}
decl_event!(
pub enum Event<T> where <T as system::Trait>::AccountId {
ValueIs(u32, AccountId),
}
);
关于substrate - 在 Substrate 中,有没有办法在另一个自定义模块中使用存储和功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56902167/
场景:您想要向您的自定义提交一个外部 Substrate节点 基于 substrate-node-template通过使用 Polkadot/Substrate frontend .您通过仔细搜索和替
区块链解决方案中的事件模式是众所周知的,Substrate 团队中的任何人都可以链接到 Substrate 代码中的模式吗? 我只是想在 Substrate 框架和 Rust 语言的上下文中理解模式。
除了我的底层网络,我还想创建一个钱包应用程序。当用户打开它时,网络上的帐户应该以编程方式创建,我想出了如何生成助记词和 key 对,但我如何将我的 key 对放在区 block 链上?我可以只将 to
我最初尝试了这个问题中所教的实现。 ( How can I save string value on Substrate ) 但是,发生了与“ink_abi”和结构相关的错误 无法定义。 看最新的"i
我想在基板上保存“字符串”值 起初,我使用“Vec”但它不被 Polkadot JS 识别 我使用“字节”,所以我收到以下错误 我怎么解决这个问题? 请帮我。 使用“字节”作为存储字符串的方式是否正确
在处理 Parity Substrate 时运行时开发,如何打印调试消息以跟踪和检查我的变量? 最佳答案 以上两个答案在他们自己的意义上/时间上都是正确的。这是一个更准确的概述: runtime_io
我已经看过关于创建单个 Substrate 运行时模块的 crate 的 Substrate 教程 here为了重用该功能,但我想知道一个自定义模块是否有办法从另一个自定义模块访问存储或功能? 这些方
当我们启动 substrate-front-end-template 时,首先看到的是一堆带有一些余额的虚拟账户,我的印象是这些账户是从运行链的 Genesis 存储中获取的。然而,当我进入 chai
当我们启动 substrate-front-end-template 时,首先看到的是一堆带有一些余额的虚拟账户,我的印象是这些账户是从运行链的 Genesis 存储中获取的。然而,当我进入 chai
开发 Substrate Runtime Module 和 Substrate Smart Contract(例如使用 ink! 语言)之间有什么区别? 哪些应用程序最好以一种或另一种形式编写? 最佳
我已经设置了一个自定义的 Substrate 链,我想修改我的 token 的显示名称。 我需要修改什么才能使 Polkadot JS 和其他 API 可以发现我的 token 名称? 默认情况下它是
在 Substrate 生态系统中,通常通过 fork Substrate Node Template 来开始编写新的区 block 链节点。 .用户界面有几个选项(例如 Apps 和 front-e
每个 Substrate 运行时都有一个 RuntimeVersion .此 RuntimeVersion 结构中的字段指示运行时的各个方面何时发生变化,并且每个字段都有自己在这些文档中描述的语义。
我在我的 Substrate 1.0 运行时模块(基于 node-template )中使用了一个 extern crate,它给出了一个编译错误 duplicate lang item in cra
我在 decl_module 中有以下代码 #[weight = 10_000 + T::DbWeight::get().reads_writes(1,1)] pub fn create_deparm
所以每个托盘类型都有或多或少相同的声明:pub struct Pallet(_)或 pub struct Pallet(PhantomData)其中 T: Config .我的问题是什么 T代表?有人
如果我们查看 polkadot js 文档,我们可以看到以下注释: 这仅在此托盘用于存储余额的情况下使用。 现在我们如何使用余额托盘来存储余额?因为我们还有 api.query.system.acco
在实现我的链逻辑时,我想知道是否要使用事件,因为它们可能会花费节点额外的存储来存储事件日志。这里涉及的实际存储成本是多少?日志会在某个时候自动清除吗? 最佳答案 运行时事件由 System modul
跟随创建第一个底物链,一切正常。 然后,我想进一步走一步,在demo.rs文件上自定义我的代码,这是我正在做的事情: 用代码demo.rs完全替换here中的代码,现在有事件参与 。 使用更新lib.
我正在尝试创建一个函数或一个外部函数,它没有针对来源的交易费用,而是完全免费的。我以为 maby 权重为 0 它会被解决,但它仍然需要代币, #[weight = 0] 然后我尝试用一个rpc调用
我是一名优秀的程序员,十分优秀!