我在我的 Substrate 1.0 运行时模块(基于node-template)中使用了一个 extern crate,它给出了一个编译错误
duplicate lang item in crate 'std' (which 'myexternalcrate' depends on): 'panic_impl'.
= note: first defined in crate `sr_io` (which `node_template_runtime` depends on).
Run Code Online (Sandbox Code Playgroud)
如果我正确理解了该消息,那么我认为如果开发人员想要包含依赖于std已在 中实现的功能的外部板条箱,这可能是一个常见问题sr-io,但我不确定这是否正确。
我在这里看到了这个问题,它似乎已被修复,sr-io但这似乎不是这里的原因。
他们是解决这个问题的另一种方法吗?
编辑:添加更改Cargo.toml
我们正在尝试引入名为 nacl 的板条箱
[dependencies]
nacl = {version = "0.3.0", default-features = false}
Run Code Online (Sandbox Code Playgroud)
加入 lib.rs
extern crate nacl;
Run Code Online (Sandbox Code Playgroud)
在运行时模块中
use nacl::public_box::*;
Run Code Online (Sandbox Code Playgroud) 我想以 Babe/Grandpa 共识开始一条链。我可以Toolbox->RPC->author->insertKey()在 UI 中开始块生产。但我不知道如何开始区块终结。
我试过设置爷爷钥匙的方式与我坐在里面的宝贝钥匙一样Toolbox->RPC->author->insertKey():
gran//Alice0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee我也试过sr25519版本0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d)它没有帮助。
在这里,您可以看到块编号正确递增,而最终计数器保持为 #0:
2020-01-16 15:03:19 Idle (1 peers), best: #101 (0x56ce…7c6a), finalized #0 (0x885c…85d7), ? 0 ? 0
2020-01-16 15:03:21 Imported #102 (0xe984…2776)
2020-01-16 15:03:24 Idle (1 peers), best: #102 (0xe984…2776), finalized #0 (0x885c…85d7), ? 0.1kiB/s ? 10 B/s
2020-01-16 15:03:27 Starting consensus session on top of parent 0xe98487a704c4fb20239df06ba4e8dda9e57c3fa1813b97819c16311c4ac92776
2020-01-16 15:03:29 Idle (1 peers), best: #102 (0xe984…2776), finalized #0 …Run Code Online (Sandbox Code Playgroud) 我熟悉实现此问题标题中描述的目标的一种机制:在调用在另一个托盘中编写的外部(如 Sudo 托盘或实用程序托盘中定义的多重签名功能。跨托盘调度功能还有哪些其他选项?具体来说,我想将一个托盘(托盘 A)作为Trait另一个托盘(托盘 B)的绑定类型,然后从托盘 A 中分派在托盘 B 中定义的函数。
我刚刚开始研究基材,添加托盘教程已经让我严重困惑:
值得注意的是,Substrate 运行时会编译为本机 Rust std 二进制文件和 WebAssembly (Wasm) 二进制文件。
std有关编译和功能的更多信息no_std,请参阅 XXX。
这很好,我很熟悉std和no_std。我的印象是,您要么已std启用并编译为本机 Rust 二进制文件,要么未启用并编译为 WASM 二进制文件。
但是,当我检查运行时时lib.rs,我发现以下内容:
#![cfg_attr(not(feature = "std"), no_std)]
// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256.
#![recursion_limit = "256"]
// Make the WASM binary available.
#[cfg(feature = "std")]
include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));
// ...
Run Code Online (Sandbox Code Playgroud)
std这让我很困惑:为什么 WASM 二进制文件在启用时“可用” ?我本以为情况恰恰相反。在这种情况下,“可用”到底意味着什么?
我更深入地挖掘了一下,在旧版本的教程中发现了以下内容,该版本更加详细,导致了更严重的精神混乱:
这对于使 Substrate 运行时能够编译为本机二进制文件(支持 Rust
std)和 Wasm …
开发基板运行时模块和基板智能合约(例如使用ink!语言)有什么区别?
哪些应用程序示例中最好以一种或另一种形式编写?
区块链解决方案中的事件模式是众所周知的,Substrate 团队的任何人都可以链接到 Substrate 代码中的模式吗?
我只是想了解 Substrate 框架和 Rust 语言背景下的模式。
因此,每种托盘类型都有或多或少相同的声明:pub struct Pallet<T>(_)或pub struct Pallet<T>(PhantomData<T>)where T: Config。我的问题是T代表什么?有人提到 代表T基质运行时,这让我产生疑问,如果一个节点有多个运行的托盘,它们是否都共享相同的定义T?
我正在从 PolkadotJS 生成公钥,如下所示
const keyring = new Keyring({ type: "sr25519" });
const account = keyring.addFromUri("//Bob", { name: "Bob default" });
// encoded public key
let public_key = keyring.encodeAddress(account.publicKey, 42);
console.log(public_key);
Run Code Online (Sandbox Code Playgroud)
public_key我正在添加as的类型"public_key": "Vec<u8>",
我正在从 Substrate Node 读取公钥,如下所示
// pk_raw is a Vec<u8> array
let pk = str::from_utf8(pk_raw.as_ref()).unwrap()
// the above returns `5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty`
Run Code Online (Sandbox Code Playgroud)
我需要根据这个值生成公钥。我尝试了以下方法
ed25519::Public::try_from(&*pk_raw).unwrap();
// above throws error since the data length is not equals to 32
fn try_from(data: &[u8]) -> Result<Self, Self::Error> {
if data.len() == 32 { …Run Code Online (Sandbox Code Playgroud) ./polkadot build-spec --disable-default-bootnode --dev我正在使用(我正在运行版本0.9.8-3a10ee63c-x86_64-linux-gnu)创建规范
使用上述命令生成的规范包含code字段。我的理解是该字段包含 wasm 字节。然而,这些字节似乎不合适。
在.wasm文件中,前 4 个字节应该是幻数(\0asm此处),接下来的四个字节应该是 wasm 规范的版本,之后可能是其他模式。我在这些 wasm 字节中没有看到那些东西。
这是一个错误吗?它使用某种编码吗?基本上,我如何从规范中获取 wasm 字节?
我在这里发布了 JSON 规范https://gist.github.com/kishansagathiya/b38b8f06964c8cb101ccab7fbefa428d
"code": "0x52bc537646db8e0528b52ffd0058543305de8806381552107855541d2c26fa78e0cf83b70a44352557cb13532c6d0da03c59cf642396cd44daa103555dc3770d003433894b7c7055d95101002568d5f5a28e71a5e6114909a47fa095fefffdbfb7ffde5bca2da54c01351574155015a0bfbfb2adf1efab2acd5757e1d...
Run Code Online (Sandbox Code Playgroud) substrate ×10
blockchain ×3
polkadot ×3
rust ×3
ink ×1
merkle-tree ×1
parity ×1
storage ×1
webassembly ×1