1个不稳定版本
0.1.0 | 2024年7月1日 |
---|
#491 in 密码学
1MB
194 行
种子保管员工作空间
架构图
- seed-keeper-core:种子生成和加密的核心功能。
- seed-keeper-wallet:用于在应用程序中使用Seed-Keeper-Core的Wasm接口类型(WIT)组件。
- seed-keeper-wit-ui:在种子保管员之上构建的用户界面。
示例用法
要使用种子保管员,我们需要一个用户使用密钥进行一些有用的操作,例如签名消息。我们可以将种子保管员与一个可以签名消息的WIT组件和一个可以显示签名的WIT组件组合在一起。
- examples/crates/edwards-wit:用于使用Edwards25519签名消息的简单WIT组件。
- examples/crates/edwards-ui:Edwards WIT组件的简单用户界面。
- examples/aggregate-wit-ui:如何将多个WIT组件组合成一个单个WIT组件的示例。
- examples/sveltekit:如何在SvelteKit应用程序中使用构建的种子保管员Wasm二进制文件的示例。任何前端都可以使用Wasm,我只是非常喜欢Svelte和Vite。React也可以以类似的方式工作。
种子保管员
种子保管员是一个用于生成、加密和管理种子的工具。它用于生成、加密、解密和查看种子。
构建
Justfile 包含所有构建脚本,只需运行它即可
just build
或使用 cargo-component
直接构建
cargo component build
组合
将 seed-keeper-wallet
、seed-keeper-wit-ui
和您选择的种子消费者组合成一个单个Wasm组件,以在应用程序中使用 wasm-tools compose
wasm-tools compose ./target/wasm32-wasi/release/seed_keeper_wit_ui.wasm -d ./target/wasm32-wasi/release/seed_keeper_wit.wasm -o examples/composed-wallet.wasm
示例
我们可以组合一个Edwards25519签名者和一个Edwards25519用户界面(UI),以创建一个能够签名消息的迷你钱包。如果我们不使用seed-keeper
,我们每次都需要提供导入以获取种子(我们可以用JavaScript做到这一点)。
首先,我们需要将Edwards签名者后端与“输入消息 & 显示签名”的Edwards UI组合在一起
cargo component build --workspace --release
wasm-tools compose ./target/wasm32-wasi/release/edwards_ui.wasm -d ./target/wasm32-wasi/release/edwards_wit.wasm -o examples/edwards-only.wasm
然后,我们可以通过简单的种子提供者导入将这个仅由Edwards组成的组件加载到我们的Svelte应用程序中
通过运行以下命令,我们可以看到我们新组合组件的界面
wasm-tools component wit examples/edwards-only.wasm
这显示了我们的接口
package root:component;
world root {
import component:wurbo/wurbo-types;
import component:wurbo/wurbo-in;
import component:wallet/[email protected];
export example:edwards-ui/wurbo-out;
}
测试
运行所有测试
cargo test --workspace --all-targets
可扩展性:构建自己的钱包
插件
没有使用种子进行加密的函数,种子就没有太大用处。种子守护者旨在可扩展,可以向种子守护者添加插件以提供附加功能。
这些插件可以是加载到应用程序中使用的Wasm接口类型(WIT)组件。种子守护者提供了一种加载和卸载插件以及调用插件上的函数的方法。
构建自己的钱包
如果您有多个使用种子的应用程序,您可以使用种子守护者将这些WIT组件组合在一起,以创建一个钱包,该钱包可以用来管理同一个钱包中的多个应用程序。
每个应用程序都应该有自己的用户界面,否则种子守护者将不得不为每个应用程序构建每个可能的UI。种子守护者提供功能,应用程序提供UI和用法实现。
另一个好处是种子守护者保持轻量级且加载速度快,并且每个应用程序组件都按需异步加载。
依赖关系
~1.5–2.1MB
~45K SLoC