2 个不稳定版本

0.8.0 2022 年 5 月 23 日
0.1.0 2022 年 5 月 20 日

#10 in #user-key

Apache-2.0

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