rust - 在 `.into()` 上调用时 `RawOrigin:Signed(who)` 会做什么?上下文如何影响它?

标签 rust substrate polkadot

我已经看到 .into() 被多次使用,例如 frame_system::RawOrigin::Signed(who).into()。据我了解,它会进行一些转换,但 docs for into不要说清楚(对我来说)如何知道它正在转换成什么。对于上下文 a specific example我感兴趣的是来自 sudo 模块中的 sudo_as()

        fn sudo_as(origin, who: <T::Lookup as StaticLookup>::Source, call: Box<<T as Trait>::Call>) {
            // This is a public call, so we ensure that the origin is some signed account.
            let sender = ensure_signed(origin)?;
            ensure!(sender == Self::key(), Error::<T>::RequireSudo);

            let who = T::Lookup::lookup(who)?;

            let res = match call.dispatch(frame_system::RawOrigin::Signed(who).into()) {
                Ok(_) => true,
                Err(e) => {
                    sp_runtime::print(e);
                    false
                }
            };

            Self::deposit_event(RawEvent::SudoAsDone(res));
        }

最佳答案

您是正确的,into 将根据调用它的上下文返回“正确的”类型。在您提供的示例中,您可以查看 the docs for the dispatch function并看到它需要 Origin作为参数。但是,如您所见,who 变量用于创建 RawOrigin。类型。因此,into 函数用于将提供的类型 (RawOrigin) 转换为所需的任何类型(在本例中为 Origin)。

关于rust - 在 `.into()` 上调用时 `RawOrigin:Signed(who)` 会做什么?上下文如何影响它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61716047/

相关文章:

winapi - 获取硬盘所有逻辑驱动器号并收集根目录的有效方法

rust - 什么等效于C++的虚拟覆盖以防止代码重写的Rust?

blockchain - 开发 key (Alice) 如何从 `chain_specs.rs` 添加到本地 keystore ?

substrate - 有没有办法调整基板中的 block 间隔?

rust - 从函数返回 `u32` 的数组/切片

rust - RwLock 什么时候会 panic 而不是死锁?

substrate - 如何在 Substrate 的智能合约平台ink上保存字符串值?

substrate - 如何正确升级Substrate节点上的运行时?

rust - 如何使用Substrate API客户端写入Substrate的存储中?

python - 为什么我不能从 py-substrate-interface 发送外部数据?