1 个不稳定版本

0.1.0 2021 年 7 月 8 日

#lottery 中排名第 3

MIT 许可证

10KB
188

verilot

verilot(可验证彩票)是一个运行和验证一次性彩票的命令行工具。

安装

使用 Rustup 安装 Rust 和 Cargo。

使用 cargo install verilot 安装 verilot。

用法

可验证彩票的过程有几个总体步骤。

  1. 生成秘密随机数据并发布承诺。
  2. 收集参与者。
  3. 运行彩票。
  4. 发布结果(包括秘密随机数据)。
  5. 用户验证结果。

生成秘密

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