暗号通貨の報奨金、パズル、チャレンジのデータライブラリ。
Arch Linux (AUR):
paru -S boha
crates.io から:
cargo install boha --features cli,balance
[dependencies]
boha = "0.19"
残高取得機能付き:
[dependencies]
boha = { version = "0.19", features = ["balance"] }
# 統計
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 author b1000
boha author zden
# 鍵の範囲を取得
boha range 90
# 残高の確認(--features balance が必要)
boha balance b1000/71
# ID、アドレス、チェーン、通貨でパズルを検索
boha search sha256
boha search kitten --collection bitimage
# 秘密鍵が正しいアドレスを導出するか検証
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 .
注: export コマンドは JSON と JSONL のみサポートしています。CSV/YAML 出力には list コマンドを使用してください。
use boha::{arweave, b1000, ballet, bitaps, bitimage, gsmg, hash_collision, warp, 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 kitten = bitimage::get("kitten").unwrap();
let sha256 = hash_collision::get("sha256").unwrap();
let warp_challenge = warp::get("challenge_1").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("warp/challenge_1").unwrap();
let puzzle = boha::get("zden/level_1").unwrap();
// パズルのアセット(画像、ヒント)にアクセス
if let Some(path) = puzzle.asset_path() {
println!("Local: {}", path);
}
if let Some(url) = puzzle.asset_url() {
println!("Remote: {}", url);
}
use boha::{b1000, balance};
#[tokio::main]
async fn main() {
let puzzle = b1000::get(71).unwrap();
let bal = balance::fetch(puzzle.address.value, puzzle.chain).await.unwrap();
println!("Confirmed: {} sats", bal.confirmed);
println!("Total: {:.8} BTC", bal.total_btc());
}
| Feature | Description |
|---|---|
cli | コマンドラインインターフェース |
balance | ブロックチェーンの残高取得(BTCはmempool.space、LTCはlitecoinspace.org、ETHはEtherscan、DCRはdcrdata、ARはarweave.net経由) |
Bitcoin Puzzle Transaction - 各パズルNの秘密鍵が範囲 [2^(N-1), 2^N - 1] にある256個のパズル。
解かれたパズル(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.IO 5 BTC Puzzle - 単一のBitcoinアドレスを使う多段階の暗号チャレンジ。
| Address | Status | Prize |
|---|---|---|
| 1GSMG1JC9wtdSwfwApgj2xcmJPAwx7prBe | 未解決 | ~1.25 BTC |
当初は5 BTC。賞金はBitcoinの半減期のたびに半分になります。
Peter Toddのハッシュ衝突報奨金 - ハッシュ衝突を見つけることで請求できるP2SHアドレス。
Zdenの視覚的な暗号パズル - 秘密鍵が画像、アニメーション、視覚パターンに埋め込まれた芸術的なパズル。
未解決: Level 5, Level HALV
TiamatのArweave報奨金 - Tiamat(chronobot.io)が作成した、Arweaveブロックチェーン上の暗号パズル。
| Status | Count |
|---|---|
| 請求済み | 7 |
| 未解決 | 4 |
Bobby LeeのBallet暗号パズル - BIP38で暗号化された秘密鍵を持つ物理的なBitcoin紙幣(Balletウォレット)。カードに印刷されたパスフレーズを解読して解きます。
| Status | Count |
|---|---|
| 解かれた | 1 |
| 未解決 | 2 |
Bitapsニーモニックチャレンジ - 元の12語のニーモニックが3-of-5の閾値で5つのシェアに分割されたShamir秘密分散法(SSSS)パズル。
| Address | Status | Prize |
|---|---|---|
| bc1qyjwa0tf0en4x09magpuwmt2smpsrlaxwn85lh6 | 未解決 | ~1.0 BTC |
必要な3つのシェアのうち2つが公開されています。目標: SSSS方式を破るか、実装のバグを見つけること。
Bitimage パズル - SHA256(Base64(file)) をBIP39エントロピーとして任意のファイルから導出されるBitcoinアドレス。
| Puzzle | Passphrase | Status | Prize |
|---|---|---|---|
| kitten | なし | ✅ 解決済み (2019-07-09) | 0.00095 BTC |
| kitten_passphrase | あり | ⏳ 未解決 | ~0.01 BTC |
両方のパズルは同じソースファイル(Antonopoulosの子猫ツイート)を使用しています。パスフレーズパズルには、不明なBIP39パスフレーズが必要です。
Keybase WarpWalletチャレンジ - 弱いWarpWalletパスフレーズがどれだけ早くクラックされるかを示すために公開されたBrainwalletチャレンジ。
| Status | Count |
|---|---|
| 解かれた | 4 |
| 期限切れ | 2 |
2013年11月のオリジナル4チャレンジに加え、期限切れ後にKeybaseが回収した2つのWarpWallet固有チャレンジラウンドが含まれます。
すべてのパズルデータは、コンパイル時に 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/...
このプロジェクトには、AIコーディングエージェントにbohaの使い方を教えるエージェントスキルが含まれています。
プロジェクト作者によるキュレーション:
npx skills add oritwoen/boha
| Skill | Description |
|---|---|
boha | 6つのブロックチェーンにわたる暗号パズルと報奨金データを照会するためのRustライブラリAPI |
boha-cli | パズルデータの閲覧、検索、検証、エクスポートのためのCLI |
skilld を使用して、ライブドキュメント、イシュー、リリースから自動生成:
npx skilld add boha
MIT
| Format | Flag | Description |
|---|
table | -o table | 色付きのTUIテーブル(デフォルト) |
json | -o json | 整形されたJSON |
jsonl | -o jsonl | JSON Lines(1行に1オブジェクト) |
yaml | -o yaml | YAML |
csv | -o csv | ヘッダー付きCSV |
| Puzzle | Hash | Status | Prize |
|---|
| 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) | - |
| Chain | Solved | Unsolved | Total |
|---|
| Bitcoin | 9 | 2 | 11 |
| Ethereum | 2 | 0 | 2 |
| Litecoin | 1 | 0 | 1 |
| Decred | 1 | 0 | 1 |
| Tool | Description |
|---|
| vuke | 脆弱なBitcoin鍵生成の実践を研究するためのリサーチツール。解決済みパズルを分析して弱いパターンを見つけます。 |
| vgen | 正規表現パターンのマッチングとGPUアクセラレーションを備えたBitcoinバニティアドレス生成器。 |
| vusi | ECDSA署名の脆弱性分析 - nonce再利用、polynonce、偏ったnonce、格子/HNP攻撃。 |
| kangaroo | Vulkan/Metal/DX12コンピュートを使用したsecp256k1向けのPollard's Kangaroo ECDLPソルバー。 |