oritwoen/boha
GitHub: oritwoen/boha
一个用 Rust 编写的加密货币谜题数据库,聚合了 Bitcoin Puzzle、哈希碰撞赏金、视觉密码挑战等多个知名谜题集合的完整数据。
Stars: 9 | Forks: 5
# boha
[](https://crates.io/crates/boha)
[](https://crates.io/crates/boha)
[](LICENSE)
[](https://deepwiki.com/oritwoen/boha)
加密货币赏金、谜题和挑战数据库。
## 安装说明
### CLI
Arch Linux (AUR):
```
paru -S boha
```
通过 crates.io:
```
cargo install boha --features cli,balance
```
### 库
```
[dependencies]
boha = "0.16"
```
带余额获取功能:
```
[dependencies]
boha = { version = "0.16", features = ["balance"] }
```
## 使用方法
### CLI
```
# 统计
boha stats
# 列出拼图
boha list
boha list b1000
boha list b1000 --unsolved
boha list b1000 --with-pubkey
# 显示拼图详情
boha show b1000/90
boha show gsmg
boha show hash_collision/sha256
# 显示拼图并在浏览器中打开资产
boha show zden/level_4 --open
# 获取密钥范围
boha range 90
# 检查余额 (需要 --features balance)
boha balance b1000/71
# 验证私钥派生正确地址
boha verify b1000/66
boha verify --all
boha verify --all --quiet; echo $?
# 导出完整数据库 (仅限 JSON/JSONL)
boha export
boha export b1000 zden
boha export --unsolved
boha export -o jsonl | jq .
boha export --compact
# 输出格式 (默认: table)
boha -o json stats
boha -o yaml show b1000/90
boha -o csv list b1000 > puzzles.csv
boha -o jsonl list b1000 --unsolved | jq .
```
#### 输出格式
| 格式 | 标志 | 描述 |
|--------|------|-------------|
| `table` | `-o table` | 带颜色的 TUI 表格(默认) |
| `json` | `-o json` | 格式化打印的 JSON |
| `jsonl` | `-o jsonl` | JSON Lines(每行一个对象) |
| `yaml` | `-o yaml` | YAML |
| `csv` | `-o csv` | 带标题的 CSV |
**注意:** `export` 命令仅支持 JSON 和 JSONL。请使用 `list` 命令输出 CSV/YAML。
### 库
```
use boha::{b1000, bitaps, gsmg, hash_collision, zden, Status};
let p90 = b1000::get(90).unwrap();
println!("Address: {}", p90.address.value);
println!("HASH160: {}", p90.address.hash160.unwrap());
println!("Funded: {}", p90.start_date.unwrap_or("unknown"));
let range = p90.key_range().unwrap();
println!("Range: 0x{:x} - 0x{:x}", range.start(), range.end());
if let Some(txid) = p90.claim_txid() {
println!("Claimed in: {}", txid);
println!("Explorer: {}", p90.chain.tx_explorer_url(txid));
}
let unsolved: Vec<_> = b1000::all()
.filter(|p| p.status == Status::Unsolved)
.filter(|p| p.pubkey.is_some())
.collect();
let gsmg_puzzle = gsmg::get();
let sha256 = hash_collision::get("sha256").unwrap();
let level1 = zden::get("level_1").unwrap();
let puzzle = boha::get("b1000/90").unwrap();
let puzzle = boha::get("gsmg").unwrap();
let puzzle = boha::get("bitaps").unwrap();
let puzzle = boha::get("bitimage/kitten").unwrap();
let puzzle = boha::get("zden/level_1").unwrap();
// Access puzzle assets (images, hints)
if let Some(path) = puzzle.asset_path() {
println!("Local: {}", path);
}
if let Some(url) = puzzle.asset_url() {
println!("Remote: {}", url);
}
```
### 余额获取 (async)
```
use boha::{b1000, balance};
#[tokio::main]
async fn main() {
let puzzle = b1000::get(71).unwrap();
let bal = balance::fetch(puzzle.address.value).await.unwrap();
println!("Confirmed: {} sats", bal.confirmed);
println!("Total: {:.8} BTC", bal.total_btc());
}
```
## 功能特性
| 特性 | 描述 |
|---------|-------------|
| `cli` | 命令行界面 |
| `balance` | 通过 mempool.space API 获取区块链余额 |
## 集合
### b1000
[Bitcoin Puzzle Transaction](https://privatekeys.pw/puzzles/bitcoin-puzzle-tx) - 256 个谜题,其中每个谜题 N 的私钥范围在 `[2^(N-1), 2^N - 1]` 内。
**已解决 (82):** 1-70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130
**已知公钥但未解决 (6):** 135, 140, 145, 150, 155, 160
**未解决 (72):** 71-74, 76-79, 81-84, 86-89, 91-94, 96-99, 101-104, 106-109, 111-114, 116-119, 121-124, 126-129, 131-134, 136-139, 141-144, 146-149, 151-154, 156-159
**空 — 无资金 (96):** 161-256
### gsmg
[GSMG.IO 5 BTC Puzzle](https://gsmg.io/puzzle) - 多阶段密码学挑战,只有一个 Bitcoin 地址。
| 地址 | 状态 | 奖金 |
|---------|--------|-------|
| 1GSMG1JC9wtdSwfwApgj2xcmJPAwx7prBe | 未解决 | ~1.25 BTC |
最初为 5 BTC,奖金随每次 Bitcoin 减半而减半。
### hash_collision
[Peter Todd's hash collision bounties](https://bitcointalk.org/index.php?topic=293382.0) - 通过发现哈希碰撞即可认领的 P2SH 地址。
| 谜题 | 哈希 | 状态 | 奖金 |
|--------|------|--------|-------|
| sha1 | SHA-1 | ✅ 已认领 (2017-02-23) | 2.48 BTC |
| sha256 | SHA-256 | ⏳ 未解决 | 0.277 BTC |
| ripemd160 | RIPEMD-160 | ⏳ 未解决 | 0.116 BTC |
| hash160 | HASH160 | ⏳ 未解决 | 0.100 BTC |
| hash256 | HASH256 | ⏳ 未解决 | 0.100 BTC |
| op_abs | OP_ABS | ✅ 已认领 (2013-09-13) | - |
### zden
[Zden's Visual Crypto Puzzles](https://crypto.haluska.sk/) - 艺术谜题,私钥编码在图像、动画和视觉图案中。
| 链 | 已解决 | 未解决 | 总计 |
|-------|--------|----------|-------|
| Bitcoin | 9 | 2 | 11 |
| Ethereum | 2 | 0 | 2 |
| Litecoin | 1 | 0 | 1 |
| Decred | 1 | 0 | 1 |
**未解决:** Level 5, Level HALV
### bitaps
[Bitaps Mnemonic Challenge](https://bitaps.com/mnemonic/challenge) - Shamir Secret Sharing Scheme (SSSS) 谜题,原始的 12 个单词助记词使用 3-of-5 阈值被拆分为 5 个份额。
| 地址 | 状态 | 奖金 |
|---------|--------|-------|
| bc1qyjwa0tf0en4x09magpuwmt2smpsrlaxwn85lh6 | 未解决 | ~1.0 BTC |
三个必需份额中有两个已公开。目标:破解 SSSS 方案或查找实现漏洞。
### bitimage
[Bitimage](https://github.com/coreyphillips/bitimage) 谜题 - 使用 SHA256(Base64(file)) 作为 BIP39 熵,从任意文件派生的 Bitcoin 地址。
| 谜题 | 密码短语 | 状态 | 奖金 |
|--------|------------|--------|-------|
| kitten | 无 | ✅ 已解决 (2019-07-09) | 0.00095 BTC |
| kitten_passphrase | 有 | ⏳ 未解决 | ~0.01 BTC |
这两个谜题使用相同的源文件(Antonopoulos 小猫推文)。密码短语谜题需要一个未知的 BIP39 密码短语。
## 数据
所有谜题数据在编译时从 `data/` 中的 JSONC 文件嵌入。
每个谜题包含:地址(包含 HASH160 和类型)、链、状态、奖金、公钥(如已公开)、私钥(如已解决)、密钥来源、解决日期(如已解决)、解决时间、起始日期(注资时间)、交易历史、求解者信息以及资产(谜题图像、提示)。
## 资产
视觉谜题集合(zden, gsmg, bitimage)包含 `assets/` 目录中的嵌入资产:
```
assets/
├── zden/ # 15 puzzle images
├── gsmg/ # puzzle.png, follow_the_white_rabbit.png
└── bitimage/ # kitten images
```
通过库访问:
```
let puzzle = zden::get("level_4").unwrap();
println!("{}", puzzle.asset_path().unwrap()); // assets/zden/level_4/puzzle.png
println!("{}", puzzle.asset_url().unwrap()); // https://raw.githubusercontent.com/...
```
## 相关工具
| 工具 | 描述 |
|------|-------------|
| [vuke](https://github.com/oritwoen/vuke) | 研究工具,用于研究脆弱的 Bitcoin 密钥生成实践。分析已解决的谜题以寻找弱模式。 |
| [vgen](https://github.com/oritwoen/vgen) | Bitcoin 助记符地址生成器,支持正则表达式模式匹配和 GPU 加速。 |
## 许可证
MIT
标签:Arch Linux, Crates.io, CSV, JSON, Rust库, YAML, 余额查询, 加密货币, 加密资产, 区块链, 可视化界面, 安全库, 密码学, 密码学挑战, 手动系统调用, 数据导出, 文档结构分析, 比特币谜题, 私钥验证, 网络空间测绘, 谜题, 赏金任务, 通知系统, 通知系统, 通知系统