#run-time #api #substrate #traits #polkadot #metadata #done

no-std sp-api

Substrate运行时API原语(polkadot v1.15.0)

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.52020年3月24日

#1248 in 神奇豆子

Download history 5826/week @ 2024-04-26 4654/week @ 2024-05-03 4112/week @ 2024-05-10 4820/week @ 2024-05-17 5958/week @ 2024-05-24 5399/week @ 2024-05-31 4079/week @ 2024-06-07 3705/week @ 2024-06-14 6547/week @ 2024-06-21 3110/week @ 2024-06-28 3188/week @ 2024-07-05 6995/week @ 2024-07-12 4652/week @ 2024-07-19 4284/week @ 2024-07-26 4161/week @ 2024-08-02 4222/week @ 2024-08-09

每月下载量18,868次
用于 574 个crate(174个直接使用)

Apache-2.0

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 功能来实现这一点。请注意,此功能指示 logtracing 在编译时禁用日志记录,通过设置这些包的 max_level_off 功能来实现。因此,您不应为本地构建启用此功能,否则节点将不会输出任何日志消息。

它是如何工作的?

每个运行时API都声明为一个具有函数的特质。当编译为WASM时,每个实现的运行时API函数都作为以下命名模式的函数导出:${TRAIT_NAME}_${FUNCTION_NAME}。这样的函数具有以下签名:(ptr: *u8, length: u32) -> u64。它接受一个指向u8数组的指针及其长度作为参数。这个u8数组预计将是函数在特质中定义的SCALE编码参数。返回值是一个代表length << 32 | pointeru8数组。这个返回值u8数组包含由特质函数定义的SCALE编码的返回值。宏负责编码参数和解码返回值。

依赖关系

~15–29MB
~459K SLoC