Rust Is财资模块';s set_pot功能是否可供公众使用?
国库模块是可调度的(在Rust Is财资模块';s set_pot功能是否可供公众使用?,rust,substrate,Rust,Substrate,国库模块是可调度的(在decl\u模块中声明),并且似乎不能确保任何关于来源的信息。这难道不意味着任何人都可以在任何时候单方面调整罐子吗 我使用polkadot UI的经验是,任何人都可以尝试调用此函数,但外部函数总是失败。如果只打算从sudo或democracy等调用它,为什么不编写它?如果在decl\u模块中声明一个没有origin作为第一个参数的函数宏时,它将自动假定您正在尝试声明一个“特权函数”:一个需要根源的函数 从: 如果省略了origin参数,则宏将其添加为第一个参数,并将sure
decl\u模块
中声明),并且似乎不能确保任何关于来源的信息。这难道不意味着任何人都可以在任何时候单方面调整罐子吗
我使用polkadot UI的经验是,任何人都可以尝试调用此函数,但外部函数总是失败。如果只打算从sudo或democracy等调用它,为什么不编写它?如果在
decl\u模块中声明一个没有origin
作为第一个参数的函数代码>宏时,它将自动假定您正在尝试声明一个“特权函数”:一个需要根
源的函数
从:
如果省略了origin参数,则宏将其添加为第一个参数,并将sure_root(origin)添加为函数的第一行。这些功能是相同的:
decl\u模块!{
用于枚举调用的发布结构模块,其中origin:T::origin{
fn my_privileged_function()->结果{
//您的实现
好(())
}
fn my_函数(原点)->结果{
确保_根(原点);
//您的实现
好(())
}
}
}
需要根
原点的函数不应被认为与放入impl
块中的内部或私有函数类似。它们应该被认为是“可调用的特权函数”,它基本上执行授权检查,以确保调用该函数的外部函数必须具有根的来源。您可以认为它类似于Sudo模块,它公开了两个可调度函数,但只有“Sudo键”才能成功调用这些函数
在“特权函数”的情况下,只有运行时本身才能生成一个根
源外部。
可分派的函数本质上不同于impl块中的“内部/私有函数”。例如,让我们看看您在财资模块中提到的set\u pot
函数
这是一个“特权函数”,可以将pot
的余额设置为任意数字
如果这是一个内部函数,那么是的,您可以在其他运行时函数中调用它,它将在运行时的所有内部执行您所期望的操作。但是现在让我们假设您想建立一个民主投票来改变pot
的平衡,无论出于何种原因。您将无法访问此函数sinc它不是作为模块中的“可调用”函数公开的。因此,您将失去执行此类逻辑的能力
set\u pot
函数完全按照它的方式创建,因为它意味着通过Root
外部函数,以及其他Root
原始函数,对财资模块进行一些低级特权访问