2 个不稳定版本
0.8.0 | 2022 年 5 月 23 日 |
---|---|
0.1.0 | 2022 年 5 月 20 日 |
#10 in #user-key
200KB
6K SLoC
Sub-script
为 Substrate 节点提供简单的脚本接口。它使用 Rhai 作为脚本引擎。
特性
- 通过访问
USER.<UserName>
自动为命名用户生成密钥对。 - 为所有模块、外联、事件、存储和类型(v14+ 元数据链)加载链元数据。
- 易于签名和提交外联调用。
- 为负载测试启动子任务(线程)。
目标
- 灵活 - 从节点加载链元数据,并从
schema.json
文件加载所有自定义类型。无需重新编译。 - 模拟 - 容易在本地节点上分享脚本,以模拟大量用户、资产等,用于测试 UI。
- 调试 - 提供对节点的低级接口。易于更改模式类型以测试编码问题。
非目标
- 这不会取代其他语言的 SDK。可用的库将非常有限。
- 请勿在主网上使用。
待办事项
- 订阅存储更新。
- 添加 REPL 支持以快速进行外联调用。
示例
// Use Alice for mocking cdd.
let alice = USER.Alice;
// Generate a test user. Key generated from "//Test123" seed.
let user = USER.Test123;
// Mock Cdd for user and make sure they have some POLYX.
let res = alice.submit(TestUtils.mock_cdd_register_did(user));
if res.is_success {
// New account send them some POLYX.
alice.submit(Balances.transfer(user, 5.0));
}
// Generate another test user. Key generated from "//Key1" seed.
let key = USER.Key1; // Don't mock cdd for this user.
// Add JoinIdentity authorization for `key` to join `user`.
let res = user.submit(Identity.add_authorization(#{
Account: key
}, #{
JoinIdentity: #{
asset: #{ These: ["ACME"] },
extrinsic: #{ Whole: () },
portfolio: #{ Whole: () },
}
}, ()));
if res.is_success {
// call successful.
} else {
// call failed.
print(`failed: ${res.result}`);
}
// Process all events emitted by the call.
for event in res.events {
print(`EventName: ${event.name}`);
print(` Args: ${event.args}`);
}
// Process events matching prefix 'Identity.Auth'.
for event in res.events("Identity.Auth") {
print(`EventName: ${event.name}`);
print(` Args: ${event.args}`);
}
请参阅 ./scripts/
文件夹中的其他示例脚本。
依赖项
~22–38MB
~641K SLoC