
Biblioteca de datos de recompensas, acertijos y desafíos cripto
Biblioteca de datos de recompensas, acertijos y desafíos de criptomonedas.
Arch Linux (AUR):
paru -S boha
Desde crates.io:
cargo install boha --features cli,balance
[dependencies]
boha = "0.19"
Con obtención de 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: el comando export solo admite JSON y JSONL. Use el comando list para salida 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());
}
| Característica | Descripción |
|---|---|
cli | Interfaz de línea de comandos |
balance | Obtención de saldo de blockchain (BTC vía mempool.space, LTC vía litecoinspace.org, ETH vía Etherscan, DCR vía dcrdata, AR vía arweave.net) |
Transacción de Acertijo Bitcoin - 256 acertijos donde cada acertijo N tiene una clave privada en el rango [2^(N-1), 2^N - 1].
Resueltos (82): 1-70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130
Sin resolver con clave pública (6): 135, 140, 145, 150, 155, 160
Sin resolver (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
Vacío - sin fondos (96): 161-256
Acertijo de 5 BTC de GSMG.IO - Desafío criptográfico de múltiples fases con una única dirección de Bitcoin.
| Dirección | Estado | Premio |
|---|---|---|
| 1GSMG1JC9wtdSwfwApgj2xcmJPAwx7prBe | Sin resolver | ~1.25 BTC |
Originalmente 5 BTC, el premio se reduce a la mitad con cada halving de Bitcoin.
Recompensas de Peter Todd por colisiones de hash - Direcciones P2SH que se pueden reclamar encontrando colisiones de hash.
Acertijos Criptográficos Visuales de Zden - Acertijos artísticos donde las claves privadas están codificadas en imágenes, animaciones y patrones visuales.
Sin resolver: Level 5, Level HALV
Recompensas de Arweave de Tiamat - Acertijos criptográficos en la blockchain de Arweave, creados por Tiamat (chronobot.io).
| Estado | Cantidad |
|---|---|
| Reclamado | 7 |
| Sin resolver | 4 |
Acertijos Criptográficos Ballet de Bobby Lee - Billetes físicos de Bitcoin (carteras Ballet) con claves privadas cifradas con BIP38. Resuélvelos descifrando la frase de contraseña impresa en la tarjeta.
| Estado | Cantidad |
|---|---|
| Resuelto | 1 |
| Sin resolver | 2 |
Desafío Mnemotécnico de Bitaps - Acertijo del esquema de compartición de secretos de Shamir (SSSS) donde el mnemónico original de 12 palabras se dividió en 5 partes usando un umbral de 3 de 5.
| Dirección | Estado | Premio |
|---|---|---|
| bc1qyjwa0tf0en4x09magpuwmt2smpsrlaxwn85lh6 | Sin resolver | ~1.0 BTC |
Dos de las tres partes requeridas están publicadas. Objetivo: romper el esquema SSSS o encontrar errores de implementación.
Acertijos de Bitimage - Direcciones de Bitcoin derivadas de archivos arbitrarios usando SHA256(Base64(archivo)) como entropía BIP39.
| Puzzle | Frase de contraseña | Estado | Premio |
|---|---|---|---|
| kitten | No | ✅ Resuelto (2019-07-09) | 0.00095 BTC |
| kitten_passphrase | Sí | ⏳ Sin resolver | ~0.01 BTC |
Ambos acertijos usan el mismo archivo fuente (el tweet del gatito de Antonopoulos). El acertijo con frase de contraseña requiere una frase de contraseña BIP39 desconocida.
Desafíos de WarpWallet de Keybase - Desafíos de carteras mentales (brainwallets) publicados para demostrar lo rápido que se descifran las frases de contraseña débiles de WarpWallet.
| Estado | Cantidad |
|---|---|
| Resuelto | 4 |
| Expirado | 2 |
Incluye los cuatro desafíos originales de noviembre de 2013 más dos rondas posteriores de desafíos específicos de WarpWallet recuperadas por Keybase tras su expiración.
Todos los datos de los acertijos están integrados en tiempo de compilación desde archivos JSONC en data/.
Cada acertijo incluye: dirección (con HASH160 y tipo), cadena, estado, premio, clave pública (si está expuesta), clave privada (si está resuelto), origen de la clave, fecha de resolución (si está resuelto), tiempo de resolución, fecha de inicio (cuando fue financiado), historial de transacciones, información del solucionador y recursos (imágenes del acertijo, pistas).
Las colecciones de acertijos visuales (zden, gsmg, bitimage) incluyen recursos integrados en el directorio assets/:
assets/
├── zden/ # 15 puzzle images
├── gsmg/ # puzzle.png, follow_the_white_rabbit.png
└── bitimage/ # kitten images
Acceso a través de la biblioteca:
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/...
Este proyecto incluye habilidades de agente que enseñan a los agentes de codificación de IA a usar boha.
Seleccionadas por el autor del proyecto:
npx skills add oritwoen/boha
| Habilidad | Descripción |
|---|---|
boha | API de la biblioteca Rust para consultar datos de acertijos y recompensas de criptomonedas en seis blockchains |
boha-cli | CLI para navegar, buscar, verificar y exportar datos de acertijos |
Generadas automáticamente a partir de la documentación en vivo, los issues y las versiones usando skilld:
npx skilld add boha
MIT
| Formato | Flag | Descripción |
|---|
table | -o table | Tabla TUI con colores (predeterminada) |
json | -o json | JSON con formato legible |
jsonl | -o jsonl | JSON Lines (un objeto por línea) |
yaml | -o yaml | YAML |
csv | -o csv | CSV con encabezado |
| Puzzle | Hash | Estado | Premio |
|---|
| sha1 | SHA-1 | ✅ Reclamado (2017-02-23) | 2.48 BTC |
| sha256 | SHA-256 | ⏳ Sin resolver | 0.277 BTC |
| ripemd160 | RIPEMD-160 | ⏳ Sin resolver | 0.116 BTC |
| hash160 | HASH160 | ⏳ Sin resolver | 0.100 BTC |
| hash256 | HASH256 | ⏳ Sin resolver | 0.100 BTC |
| op_abs | OP_ABS | ✅ Reclamado (2013-09-13) | - |
| Cadena | Resueltos | Sin resolver | Total |
|---|
| Bitcoin | 9 | 2 | 11 |
| Ethereum | 2 | 0 | 2 |
| Litecoin | 1 | 0 | 1 |
| Decred | 1 | 0 | 1 |
| Herramienta | Descripción |
|---|
| vuke | Herramienta de investigación para estudiar prácticas vulnerables de generación de claves de Bitcoin. Analiza acertijos resueltos en busca de patrones débiles. |
| vgen | Generador de direcciones vanity de Bitcoin con coincidencia de patrones regex y aceleración por GPU. |
| vusi | Análisis de vulnerabilidades de firmas ECDSA: reutilización de nonces, polynonce, nonces sesgados, ataques lattice/HNP. |
| kangaroo | Solucionador de ECDLP de Pollard's Kangaroo para secp256k1 usando cómputo Vulkan/Metal/DX12. |