首页 > 解决方案 > 重新派遣功能的费用

问题描述

Substrate 允许您“重新调度”外部变量,例如在调用sudosudo 模块中的函数时,我们有:

            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可以对基础交易进行评估?

标签: blockchainparitysubstrate

解决方案


实际上,您可以看到 Pallet_sudo 采用Dispatchable,该可调度对象不包含DispatchInfo中可用的重量信息,也不包含任何计算费用的逻辑。

如果你想计算费用,也许你想要的不是可调度的,而是实际的外部执行。frame-executive crate 对 extrinsic 是通用的,您应该能够使用类似的trait bounds

然后在运行时定义(bin/node/runtime/src/lib.rs)中,您应该能够进行如下操作:

impl pallet_mine::Trait for Runtime {
    extrinsic: UncheckedExtrinsic
}

推荐阅读