1 个不稳定版本
0.1.0 | 2021 年 7 月 8 日 |
---|
在 #lottery 中排名第 3
10KB
188 行
verilot
verilot(可验证彩票)是一个运行和验证一次性彩票的命令行工具。
安装
使用 Rustup 安装 Rust 和 Cargo。
使用 cargo install verilot
安装 verilot。
用法
可验证彩票的过程有几个总体步骤。
- 生成秘密随机数据并发布承诺。
- 收集参与者。
- 运行彩票。
- 发布结果(包括秘密随机数据)。
- 用户验证结果。
生成秘密
verilot generate /path/to/secret.txt > /path/to/commitment.txt
generate
将秘密字节(十六进制编码)写入参数中提供的路径。它将承诺输出到标准输出。我们建议发布承诺,以便彩票的参与者验证。
如果您发布秘密,用户可以使用计算能力来增加中奖的机会。
运行彩票
printf "foo\nbar\nbaz" | verilot lottery --secret /path/to/secret.txt > /path/to/results.json
lottery
从标准输入接收以换行符分隔的任意字符串列表作为输入。它将包含结果的 json 结构输出到标准输出。整个 json 文件应发布,以便参与者验证公平性。
输出包含按哈希值顺序排列的参与者字段。获胜者是具有最低哈希值的参与者。
哈希输入
由于通常不想发布原始参与者输入字符串(这是验证公平性的必要条件),我们提供了一个子命令来哈希原始输入字符串。
printf "foo\nbar\nbaz" | verilot digest
# Output:
# abcdef... "foo"
# abcdef... "bar"
# abcdef... "baz"
然后您可以使用 -f1 -d' '
轻松地将哈希值分割出来。您需要手动将结果中的哈希值与 digest
的输出配对,以获取适当的获胜者。
验证
cat /path/to/results.json | verilot verify --commitment "abcdef"
verify
从标准输入接收彩票的 json 结果。它可选地接收十六进制编码的承诺。如果验证失败,验证将退出代码非零。
算法
每个参与者都得到一个“票据”,其计算方式为 Hash(entrant_data | secret)
。获胜者是具有最低票据的参与者。
依赖关系
~2.5–3.5MB
~62K SLoC