标签: substrate

如何从基板中的子树中获取 roothash 或证明?

根据这里的示例,我看到可以使用srml_support::storage::childAPI 从任意数据中创建一个 Merkle 子树。但是我们如何使用它获得默克尔根或特定叶子的证明呢?我看到API没有提供任何这样命名的函数。

storage rust merkle-tree substrate

5
推荐指数
1
解决办法
126
查看次数

如何解决板条箱“std”中的 Substrate`duplicate lang item(“myexternalcrate”取决于):“panic_impl”与 sr-io 冲突

我在我的 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)

substrate

5
推荐指数
1
解决办法
1248
查看次数

如何激活 Substrate GRANDPA 敲定?

我想以 Babe/Grandpa 共识开始一条链。我可以Toolbox->RPC->author->insertKey()在 UI 中开始块生产。但我不知道如何开始区块终结。

我试过设置爷爷钥匙的方式与我坐在里面的宝贝钥匙一样Toolbox->RPC->author->insertKey()

  • 密钥类型: gran
  • 苏瑞: //Alice
  • publicKey:(0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee我也试过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)

parity blockchain substrate

5
推荐指数
1
解决办法
477
查看次数

调度另一个 Substrate FRAME Pallet 中定义的函数

我熟悉实现此问题标题中描述的目标的一种机制:在调用在另一个托盘中编写的外部(如 Sudo 托盘或实用程序托盘中定义的多重签名功能。跨托盘调度功能还有哪些其他选项?具体来说,我想将一个托盘(托盘 A)作为Trait另一个托盘(托盘 B)的绑定类型,然后从托盘 A 中分派在托盘 B 中定义的函数。

substrate

5
推荐指数
1
解决办法
741
查看次数

使用“std”和“no_std”属性与包含 WASM 之间的关系

我刚刚开始研究基材,添加托盘教程已经让我严重困惑:

值得注意的是,Substrate 运行时会编译为本机 Rust std 二进制文件和 WebAssembly (Wasm) 二进制文件。std有关编译和功能的更多信息no_std,请参阅 XXX。

这很好,我很熟悉stdno_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 …

rust blockchain substrate polkadot

5
推荐指数
1
解决办法
1066
查看次数

我应何时构建基板运行时模块和基板智能合约?

开发基板运行时模块和基板智能合约(例如使用ink!语言)有什么区别?

哪些应用程序示例中最好以一种或另一种形式编写?

blockchain substrate ink

4
推荐指数
1
解决办法
360
查看次数

Substrate 中的事件模式

区块链解决方案中的事件模式是众所周知的,Substrate 团队的任何人都可以链接到 Substrate 代码中的模式吗?

我只是想了解 Substrate 框架和 Rust 语言背景下的模式。

substrate

4
推荐指数
1
解决办法
761
查看次数

Pallet中T代表什么?

因此,每种托盘类型都有或多或少相同的声明:pub struct Pallet<T>(_)pub struct Pallet<T>(PhantomData<T>)where T: Config。我的问题是T代表什么?有人提到 代表T基质运行时,这让我产生疑问,如果一个节点有多个运行的托盘,它们是否都共享相同的定义T

substrate

4
推荐指数
1
解决办法
342
查看次数

如何从 Substrate 端从 Polkadot 地址生成公钥

我正在从 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)

rust substrate polkadot

4
推荐指数
1
解决办法
819
查看次数

为什么规范中的“代码”不以幻数和版本号开头?

./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)

webassembly substrate polkadot

4
推荐指数
1
解决办法
451
查看次数

标签 统计

substrate ×10

blockchain ×3

polkadot ×3

rust ×3

ink ×1

merkle-tree ×1

parity ×1

storage ×1

webassembly ×1