- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
财务模块的set_pot
function是可分派(dispatch)的(在 decl_module
中声明)并且似乎不能确保任何关于来源的信息。那岂不是任何人都可以随时单方面调锅?
我使用 polkadot UI 的经验是,任何人都可以尝试调用此函数,但外部函数总是失败。如果它只是为了从 sudo 或 democracy 等调用,为什么不写成 lower in the impl Module
block ?
最佳答案
如果你在 decl_module!
宏中声明一个没有 origin
作为第一个参数的函数,它会自动假定你正在尝试声明一个“特权函数”:需要 Root
来源的函数。
来自docs :
If the origin param is omitted, the macro adds it as the first parameter and adds ensure_root(origin) as the first line of the function. These functions are the same:
decl_module! {
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
fn my_privileged_function() -> Result {
// Your implementation
Ok(())
}
fn my_function(origin) -> Result {
ensure_root(origin);
// Your implementation
Ok(())
}
}
}
需要 Root
来源的函数不应被认为是放在 impl
block 中的内部或私有(private)函数。它们应该被认为是“可调用的特权函数”,它基本上进行授权检查,以确保调用该函数的外部函数必须具有 Root
的来源。你可以把它想象成类似于 Sudo 模块,它公开了两个可调度的函数,但只有“Sudo 键”才能成功调用这些函数。
在“特权函数”的情况下,只有运行时本身可以产生一个 Root
origin extrinsic。
可分派(dispatch)的函数本质上不同于 impl block 中的那些“内部/私有(private)函数”。例如,让我们看一下您在 Treasury 模块中提到的 set_pot
函数。
这是一个“特权函数”,可以将 pot
的余额设置为任意数字。
如果这是一个内部函数,那么是的,您可以在其他运行时函数中调用它,它会在运行时内部执行您期望的所有操作。但现在假设您出于某种原因想要建立民主投票来改变 pot
的平衡。您将无法访问此函数,因为它没有作为模块的“可调用”函数公开。因此,您将失去提案执行此类逻辑的能力。
set_pot
函数是按原样制作的,因为它意味着通过 Root
外部对 Treasury 模块进行一些低级特权访问,其他 Root
源函数。
关于rust - Treasury Module 的 set_pot 函数是否可供公众使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56108572/
财务模块的set_pot function是可分派(dispatch)的(在 decl_module 中声明)并且似乎不能确保任何关于来源的信息。那岂不是任何人都可以随时单方面调锅? 我使用 polk
我正在玩弄 Enigma Catalyst .不幸的是,文档相当有限。 所以我正在尝试运行他们的示例“hello world”类型算法,如下所示: from catalyst import run_a
我是一名优秀的程序员,十分优秀!