4 个版本

0.2.0 2024 年 7 月 11 日
0.2.0-rc.12024 年 6 月 27 日
0.1.0 2024 年 5 月 21 日
0.1.0-rc.12024 年 5 月 15 日
0.0.0 2024 年 1 月 4 日

#tss 中排名第 14

Download history 82/week @ 2024-05-11 170/week @ 2024-05-18 12/week @ 2024-05-25 6/week @ 2024-06-01 5/week @ 2024-06-08 2/week @ 2024-06-15 76/week @ 2024-06-22 16/week @ 2024-06-29 123/week @ 2024-07-06 14/week @ 2024-07-13 1/week @ 2024-07-20 28/week @ 2024-07-27

每月下载量 168
用于 entropy-testing-utils

AGPL-3.0 或更高版本

625KB
9K SLoC

entropy-tss

存储密钥份额并执行熵协议的阈值签名服务器。

运行针对 entropy-protocol 私有用户 API 的 JS 绑定的集成测试

cd crates/protocol
make build-nodejs-testing
cd nodejs-test
yarn
cd ../../..
cargo test -p entropy-tss --release -F wasm_test test_wasm

如果在重新运行这些测试后遇到问题,请在重新运行 yarn 之前移除 nodejs-test/node_modules


lib.rs:

服务器

存储密钥份额并参与签名协议的阈值服务器。

概述

这公开了一个 HTTP API。

HTTP 端点

某些端点是为用户设计的,某些是为熵链节点设计的,还有某些是为 server 的其他实例设计的

对于用户

大多数面向用户的端点都接受一个 SignedMessage,它是一个加密并签名的消息。

/user/sign_tx - POST

[crate::user::api::sign_tx()]

由用户调用以提交待签名的事务(签名的新的方式)。接受一个在 SignedMessage 中加密的 [UserSignatureRequest]。

响应是分块响应流。如果可以处理 UserSignatureRequest,则发送成功响应头。然后运行签名协议。当它完成后,响应流中将发送一条消息,包含结果。

如果一切顺利,消息将是一个包含单个属性 "Ok" 的 JSON 对象,其中包含一个包含两个字符串的数组。

例如

{"Ok":["t7Mcxfdigds3RoT6OO/P+uMFE+XigRjUpn72E1cRU4Q2u7cVxZlsNRYhnahA+DvSNHBddj0HRz5u/XPlJT9QOQE=","32d7c0bfd90b546993d1ad51c542e1fc9dd1706c7bca395c8bd7f9642ae842400769488404dabd25d438cf08785a6750f95e7489245b8760af115f450d5f0a83"]}

第一个字符串是由签名协议生成的base64编码签名。这是一个65字节的签名,最后一个字节是一个恢复ID

第二个字符串是由TSS服务器生成的sr25519签名,可以用来自证这个响应确实来自这个TSS服务器。

如果签名不成功,消息将是一个包含单个属性"Err"的JSON对象,其中包含错误消息,例如

{"Err":"reqwest事件错误:无效状态码:500内部服务器错误"}

Curl示例用于user/sign_tx

curl -X POST -H "Content-Type: application/json" \
  -d '{"msg" "0x174...hex encoded signedmessage...","sig":"821754409744cbb878b44bd1e3dc575a4ea721e12d781b074fcdb808fc79fd33dd1928b1a281c0b6261a30536a7c0106a102f27dad1bc3ef475b626f0e57c983","pk":[172,133,159,138,33,110,235,27,50,11,76,118,209,24,218,61,116,7,250,82,52,132,208,169,128,18,109,59,77,13,34,10],"recip":[10,192,41,240,184,83,178,59,237,101,45,109,13,230,155,124,195,141,148,249,55,50,238,252,133,181,134,30,144,247,58,34],"a":[169,94,23,7,19,184,134,70,233,117,2,84,242,135,246,95,159,14,218,125,209,191,175,89,41,196,182,96,117,5,159,98],"nonce":[114,93,158,35,209,188,96,248,85,131,95,237]}' \
  -H "Accept: application/json" \
  http://127.0.0.1:3001/user/sign_tx

对于区块链节点

/user/new - POST

[crate::user::api::new_user()]

在用户注册期间由链下工作员(传播选板)调用。这接受一个parity scale编码的entropy_shared::types::OcwMessageDkg,它告诉我们哪些验证器在注册组中,并将执行DKG。

对于阈值服务器的其他实例

用于测试/开发

不安全有额外的路由,仅供测试和开发目的,不会在生产中使用。这些路由仅在编译此crate时启用了unsafe功能时才可用。

已启动组件

  • Axum服务器 - 包含全局状态和互斥锁定的IP地址
  • kvdb - 用于存储密钥份额和其他数据的加密键值数据库,使用 sled 构建

依赖项

~86–120MB
~2M SLoC