52个版本 (32个主要版本更新)
34.0.0 | 2024年7月18日 |
---|---|
33.0.0 | 2024年6月21日 |
32.0.0 | 2024年5月23日 |
31.0.0 | 2024年4月30日 |
2.0.0-alpha.5 | 2020年3月24日 |
#1248 in 神奇豆子
每月下载量18,868次
用于 574 个crate(174个直接使用)
1MB
17K SLoC
Substrate运行时API
Substrate运行时API是节点和运行时之间的重要接口。所有进入运行时的调用都是通过运行时API进行的。运行时API不是固定的。每个Substrate用户都可以使用 decl_runtime_apis
定义自己的API,并在运行时中使用 impl_runtime_apis
实现它们。
每个Substrate运行时都需要实现 Core
运行时API。此API提供了每个运行时需要导出的基本功能。
除了宏和 Core
运行时 API 之外,这个包还提供了 Metadata
运行时 API、ApiExt
特性、CallApiAt
特性和 ConstructRuntimeApi
特性。
在元级别上,这意味着客户端从客户端的角度调用生成的 API。
许可证:Apache-2.0
lib.rs
:
Substrate运行时API
Substrate 运行时 API 是节点和运行时之间的接口。没有固定的运行时 API 集合,而是由用户自行声明和实现这些运行时 API。通常,运行时 API 的声明是在运行时之外完成的,而其实现在运行时中完成。我们提供了用于声明运行时 API 的 decl_runtime_apis!
宏以及用于实现的 impl_runtime_apis!
宏。宏文档提供了更多关于如何使用它们以及我们支持哪些属性的信息。
每个运行时必须至少实现 Core
运行时 API。这个运行时 API 提供了 Substrate 从运行时期望的所有核心功能。
版本控制
运行时 API 支持版本控制。每个运行时 API 本身都有一个版本号。它还支持以非破坏性的方式更改函数签名或名称。有关版本控制的信息,请参阅 decl_runtime_apis!
宏。
所有运行时 API 及其版本都作为 RuntimeVersion
的一部分返回。这可以用来检查链上运行时当前提供的运行时 API 版本。
测试
为了测试,我们提供了 mock_impl_runtime_apis!
宏,允许您为模拟对象实现运行时 API,以便在测试中使用。
日志记录
Substrate 支持在本地和 wasm 中从运行时进行日志记录。为此,它提供了 RuntimeLogger
。这个运行时日志记录器会自动为通过运行时 API 调用运行时的每个调用启用。由于日志记录会引入额外的代码,这些代码实际上并不是您运行时逻辑所必需的,同时也会增加最终的 wasm 块大小,因此建议您禁用链上 wasm 块的日志记录。可以通过启用此包的 disable-logging
功能来实现这一点。请注意,此功能指示 log
和 tracing
在编译时禁用日志记录,通过设置这些包的 max_level_off
功能来实现。因此,您不应为本地构建启用此功能,否则节点将不会输出任何日志消息。
它是如何工作的?
每个运行时API都声明为一个具有函数的特质。当编译为WASM时,每个实现的运行时API函数都作为以下命名模式的函数导出:${TRAIT_NAME}_${FUNCTION_NAME}
。这样的函数具有以下签名:(ptr: *u8, length: u32) -> u64
。它接受一个指向u8
数组的指针及其长度作为参数。这个u8
数组预计将是函数在特质中定义的SCALE编码参数。返回值是一个代表length << 32 | pointer
的u8
数组。这个返回值u8
数组包含由特质函数定义的SCALE编码的返回值。宏负责编码参数和解码返回值。
依赖关系
~15–29MB
~459K SLoC