blockchain - 重新派遣功能的费用
问题描述
Substrate 允许您“重新调度”外部变量,例如在调用sudo
sudo 模块中的函数时,我们有:
let res = match proposal.dispatch(system::RawOrigin::Root.into()) {
Ok(_) => true,
Err(e) => {
let e: DispatchError = e.into();
sr_primitives::print(e);
false
}
};
在这个模型中,被执行的底层proposal
外部sudo
函数proposal
(
在这个例子中这可能是合理的(因为 sudo 帐户是特殊的并且可以被认为是受信任的),但在其他情况下(例如,使用重新发送提议交易的多重签名),情况似乎并非如此。
有没有办法通过 SignedExtension 流程将提案传回,以便TakeFee
可以对基础交易进行评估?
解决方案
实际上,您可以看到 Pallet_sudo 采用Dispatchable,该可调度对象不包含DispatchInfo中可用的重量信息,也不包含任何计算费用的逻辑。
如果你想计算费用,也许你想要的不是可调度的,而是实际的外部执行。frame-executive crate 对 extrinsic 是通用的,您应该能够使用类似的trait bounds。
然后在运行时定义(bin/node/runtime/src/lib.rs)中,您应该能够进行如下操作:
impl pallet_mine::Trait for Runtime {
extrinsic: UncheckedExtrinsic
}
推荐阅读
- php - php登录页面在本地主机中工作,但在实时服务器中不工作
- android - 如何让 PWA 应用程序访问其他本机应用程序?
- java - 批量更新从更新 [0] 返回了意外的行数;实际行数:0;预期:1 更新时
- c++ - C++ 构造函数采用大小为一的 std::initializer_list
- ruby - 在 rakefile 中实现 rake db:rollback STEP=n
- c# - Directory.CreateDirectory 不创建文件夹
- javascript - foreach 中的 Firebase 参考
- reactjs - 反应:儿童内部的状态不通过道具更新
- python - 从 pandas df 中删除行
- php - 类别页面返回 recv() 失败(104:连接重置..) Magento 1.9 multistore + nginx | php7.1 每分钟