Blockchain 重新分派职能的费用
Subscriber允许您“重新分派”外部命令,例如在调用sudo模块中的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();
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的
内部触发。因此,您可能希望在trait中执行以下操作:fn apply()
,并如上所述将运行时的外部类型传递给它type Extrinsic:Applyable
外部的
或更细粒度的内部的可调度的
调用
枚举变量
请注意,根据您想要实现的目标,您也可以只对内部调用保持抽象状态,并手动扣除一些额外费用。您可以将建议类型(如果类似于democracy,它只是一个
调用
)限制为GetDispatchInfo
(即类型建议:Dispatchable+…+GetDispatchInfo
)。这允许您通过poposal.get_dispatch_info()读取权重值
。结合编码长度,您实际上可以复制或执行与TakeFees类似的操作。Thiollier推荐的内容听起来对我来说合理。详细说明如下:
- 在
中需要运行时的泛型执行
类型,以使trait外部
。在可应用
的实现中,可以看到内部调用是可应用
可调度的
- 签名的扩展管道在相同trait的
内部触发。因此,您可能希望在trait中执行以下操作:fn apply()
,并如上所述将运行时的外部类型传递给它type Extrinsic:Applyable
外部的
或更细粒度的内部的可调度的
调用
枚举变量
请注意,根据您想要实现的目标,您也可以只对内部调用保持抽象状态,并手动扣除一些额外费用。您可以将建议类型(如果类似于democracy,它只是一个调用
)限制为GetDispatchInfo
(即类型建议:Dispatchable+…+GetDispatchInfo
)。这允许您通过poposal.get\u dispatch\u info()
读取权重值。结合编码长度,您实际上可以复制或执行与TakeFees
类似的操作