
Libreria di dati su bounty, puzzle e sfide crypto
Libreria di dati per bounty, puzzle e sfide crittografiche.
Arch Linux (AUR):
paru -S boha
Da crates.io:
cargo install boha --features cli,balance
[dependencies]
boha = "0.19"
Con recupero del saldo:
[dependencies]
boha = { version = "0.19", features = ["balance"] }
# Statistics
boha stats
# List puzzles
boha list
boha list b1000
boha list b1000 --unsolved
boha list b1000 --with-pubkey
# Show puzzle details
boha show b1000/90
boha show gsmg
boha show hash_collision/sha256
# Show puzzle and open asset in browser
boha show zden/level_4 --open
# Show collection author
boha author b1000
boha author zden
# Get key range
boha range 90
# Check balance (requires --features balance)
boha balance b1000/71
# Search puzzles by ID, address, chain, or currency
boha search sha256
boha search kitten --collection bitimage
# Verify private key derives correct address
boha verify b1000/66
boha verify --all
boha verify --all --quiet; echo $?
# Export full database (JSON/JSONL only)
boha export
boha export b1000 zden
boha export --unsolved
boha export -o jsonl | jq .
boha export --compact
# Output formats (default: 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 .
Nota: il comando export supporta solo JSON e JSONL. Usa il comando list per l'output CSV/YAML.
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();
// 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);
}
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());
}
| Funzionalità | Descrizione |
|---|---|
cli | Interfaccia a riga di comando |
balance | Recupero del saldo blockchain (BTC tramite mempool.space, LTC tramite litecoinspace.org, ETH tramite Etherscan, DCR tramite dcrdata, AR tramite arweave.net) |
Bitcoin Puzzle Transaction - 256 puzzle in cui ogni puzzle N ha una chiave privata nell'intervallo [2^(N-1), 2^N - 1].
Risolti (82): 1-70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130
Non risolti con chiave pubblica (6): 135, 140, 145, 150, 155, 160
Non risolti (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
Vuoti - senza fondi (96): 161-256
GSMG.IO 5 BTC Puzzle - Sfida crittografica a più fasi con un singolo indirizzo Bitcoin.
| Indirizzo | Stato | Premio |
|---|---|---|
| 1GSMG1JC9wtdSwfwApgj2xcmJPAwx7prBe | Non risolto | ~1.25 BTC |
Inizialmente 5 BTC, il premio si dimezza a ogni halving di Bitcoin.
Le bounty per collisioni di hash di Peter Todd - Indirizzi P2SH che possono essere rivendicati trovando collisioni di hash.
I puzzle crittografici visivi di Zden - Puzzle artistici in cui le chiavi private sono codificate in immagini, animazioni e pattern visivi.
Non risolti: Level 5, Level HALV
Le bounty Arweave di Tiamat - Puzzle crittografici sulla blockchain Arweave, creati da Tiamat (chronobot.io).
| Stato | Conteggio |
|---|---|
| Rivendicato | 7 |
| Non risolto | 4 |
I puzzle crittografici Ballet di Bobby Lee - Banconote Bitcoin fisiche (portafogli Ballet) con chiavi private crittografate BIP38. Risolvili decifrando la passphrase stampata sulla carta.
| Stato | Conteggio |
|---|---|
| Risolto | 1 |
| Non risolto | 2 |
Sfida del mnemonico di Bitaps - Puzzle del Shamir Secret Sharing Scheme (SSSS) in cui il mnemonico originale di 12 parole è stato diviso in 5 parti usando una soglia 3-su-5.
| Indirizzo | Stato | Premio |
|---|---|---|
| bc1qyjwa0tf0en4x09magpuwmt2smpsrlaxwn85lh6 | Non risolto | ~1.0 BTC |
Due delle tre parti richieste sono pubblicate. Obiettivo: rompere lo schema SSSS o trovare bug nell'implementazione.
Puzzle Bitimage - Indirizzi Bitcoin derivati da file arbitrari usando SHA256(Base64(file)) come entropia BIP39.
| Puzzle | Passphrase | Stato | Premio |
|---|---|---|---|
| kitten | No | ✅ Risolto (2019-07-09) | 0.00095 BTC |
| kitten_passphrase | Sì | ⏳ Non risolto | ~0.01 BTC |
Entrambi i puzzle usano lo stesso file sorgente (il tweet di Antonopoulos sul gattino). Il puzzle con passphrase richiede una passphrase BIP39 sconosciuta.
Sfide WarpWallet di Keybase - Sfide brainwallet pubblicate per mostrare quanto velocemente le passphrase WarpWallet deboli vengano decifrate.
| Stato | Conteggio |
|---|---|
| Risolto | 4 |
| Scaduto | 2 |
Include le quattro sfide originali del novembre 2013 più due successive tornate di sfide specifiche di WarpWallet recuperate da Keybase dopo la scadenza.
Tutti i dati dei puzzle sono incorporati in fase di compilazione da file JSONC nella cartella data/.
Ogni puzzle include: indirizzo (con HASH160 e tipo), blockchain, stato, premio, chiave pubblica (se esposta), chiave privata (se risolto), origine della chiave, data di risoluzione (se risolto), tempo di risoluzione, data di inizio (quando finanziato), cronologia delle transazioni, informazioni sul solutore e risorse (immagini del puzzle, suggerimenti).
Le collezioni di puzzle visivi (zden, gsmg, bitimage) includono risorse incorporate nella directory assets/:
assets/
├── zden/ # 15 puzzle images
├── gsmg/ # puzzle.png, follow_the_white_rabbit.png
└── bitimage/ # kitten images
Accesso tramite libreria:
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/...
Questo progetto include agent skills che insegnano agli agenti di codifica AI come usare boha.
Curate dall'autore del progetto:
npx skills add oritwoen/boha
| Competenza | Descrizione |
|---|---|
boha | API della libreria Rust per interrogare dati di puzzle crittografici e bounty su sei blockchain |
boha-cli | CLI per navigare, cercare, verificare ed esportare i dati dei puzzle |
Generate automaticamente da documentazione live, issue e release usando skilld:
npx skilld add boha
MIT
| Formato | Flag | Descrizione |
|---|
table | -o table | Tabella TUI con colori (predefinita) |
json | -o json | JSON formattato in modo leggibile |
jsonl | -o jsonl | JSON Lines (un oggetto per riga) |
yaml | -o yaml | YAML |
csv | -o csv | CSV con intestazione |
| Puzzle | Hash | Stato | Premio |
|---|
| sha1 | SHA-1 | ✅ Rivendicato (2017-02-23) | 2.48 BTC |
| sha256 | SHA-256 | ⏳ Non risolto | 0.277 BTC |
| ripemd160 | RIPEMD-160 | ⏳ Non risolto | 0.116 BTC |
| hash160 | HASH160 | ⏳ Non risolto | 0.100 BTC |
| hash256 | HASH256 | ⏳ Non risolto | 0.100 BTC |
| op_abs | OP_ABS | ✅ Rivendicato (2013-09-13) | - |
| Blockchain | Risolti | Non risolti | Totale |
|---|
| Bitcoin | 9 | 2 | 11 |
| Ethereum | 2 | 0 | 2 |
| Litecoin | 1 | 0 | 1 |
| Decred | 1 | 0 | 1 |
| Strumento | Descrizione |
|---|
| vuke | Strumento di ricerca per studiare pratiche vulnerabili di generazione di chiavi Bitcoin. Analizza i puzzle risolti per individuare pattern deboli. |
| vgen | Generatore di indirizzi vanity Bitcoin con corrispondenza di pattern regex e accelerazione GPU. |
| vusi | Analisi delle vulnerabilità delle firme ECDSA - riutilizzo del nonce, polynonce, nonce distorti, attacchi lattice/HNP. |
| kangaroo | Solutore ECDLP di Pollard's Kangaroo per secp256k1 che usa il calcolo Vulkan/Metal/DX12. |