Blockchain 重新分派职能的费用

Blockchain 重新分派职能的费用,blockchain,parity,substrate,Blockchain,Parity,Substrate,Subscriber允许您“重新分派”外部命令,例如在调用sudo模块中的sudo函数时: let res = match proposal.dispatch(system::RawOrigin::Root.into()) { Ok(_) => true, Err(e) => { let e: DispatchError = e.into();

Subscriber允许您“重新分派”外部命令,例如在调用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
                }
            };
在此模型中,正在执行的基础外部(
提案
)不会通过SignedExtension流,因此不会收取任何费用(费用是根据
sudo
函数收取的,而不是基础
提案

在本例中,这可能是合理的(因为sudo帐户是特殊的,可以被认为是可信的),但在其他情况下(例如,使用multisig重新分派拟定的交易),情况似乎并非如此


是否有办法通过SignedExtension流程将提案传回,以便对基础交易评估
TakeFee
之类的内容?

确实,您可以看到pallet_sudo take a,此dispatchable不包含中可用的重量信息,也不包含任何计算费用的逻辑

如果你想计算费用,也许你不想签派,但实际的外部执行。 框架执行板条箱是通用的而非外部的,您应该能够使用类似的

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

impl pallet\u mine::Trait for Runtime{
外在的:未勾选的外在的
}

事实上,您可以看到托盘_sudo take a,该分派表不包含中可用的重量信息,也不包含任何计算费用的逻辑

如果你想计算费用,也许你不想签派,但实际的外部执行。 框架执行板条箱是通用的而非外部的,您应该能够使用类似的

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

impl pallet\u mine::Trait for Runtime{
外在的:未勾选的外在的
}

对我来说@Thiollier推荐的内容听起来很合理。详细说明一下:

  • 执行
    中需要运行时的泛型
    外部
    类型,以使trait
    可应用
    。在
    可应用
    的实现中,可以看到内部调用是
    可调度的
  • 签名的扩展管道在相同trait的
    fn apply()
    内部触发。因此,您可能希望在trait中执行以下操作:
    type Extrinsic:Applyable
    ,并如上所述将运行时的外部类型传递给它
归根结底,它归结为对高层的抽象,不透明的
外部的
或更细粒度的内部的
可调度的
调用
枚举变量


请注意,根据您想要实现的目标,您也可以只对内部调用保持抽象状态,并手动扣除一些额外费用。您可以将建议类型(如果类似于democracy,它只是一个
调用
)限制为
GetDispatchInfo
(即
类型建议:Dispatchable+…+GetDispatchInfo
)。这允许您通过
poposal.get_dispatch_info()读取权重值
。结合编码长度,您实际上可以复制或执行与TakeFees类似的操作。

Thiollier推荐的内容听起来对我来说合理。详细说明如下:

  • 执行
    中需要运行时的泛型
    外部
    类型,以使trait
    可应用
    。在
    可应用
    的实现中,可以看到内部调用是
    可调度的
  • 签名的扩展管道在相同trait的
    fn apply()
    内部触发。因此,您可能希望在trait中执行以下操作:
    type Extrinsic:Applyable
    ,并如上所述将运行时的外部类型传递给它
归根结底,它归结为对高层的抽象,不透明的
外部的
或更细粒度的内部的
可调度的
调用
枚举变量

请注意,根据您想要实现的目标,您也可以只对内部调用保持抽象状态,并手动扣除一些额外费用。您可以将建议类型(如果类似于democracy,它只是一个
调用
)限制为
GetDispatchInfo
(即
类型建议:Dispatchable+…+GetDispatchInfo
)。这允许您通过
poposal.get\u dispatch\u info()
读取权重值。结合编码长度,您实际上可以复制或执行与
TakeFees
类似的操作