
Biblioteca de dados de bounties, puzzles e desafios crypto
Biblioteca de dados de recompensas, enigmas e desafios de criptomoedas.
Arch Linux (AUR):
paru -S boha
A partir do crates.io:
cargo install boha --features cli,balance
[dependencies]
boha = "0.19"
Com busca 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: o comando export suporta apenas JSON e JSONL. Use o comando list para saída 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());
}
| Funcionalidade | Descrição |
|---|---|
cli | Interface de linha de comando |
balance | Busca de saldo em blockchain (BTC via mempool.space, LTC via litecoinspace.org, ETH via Etherscan, DCR via dcrdata, AR via arweave.net) |
Bitcoin Puzzle Transaction - 256 enigmas em que cada enigma N tem uma chave privada no intervalo [2^(N-1), 2^N - 1].
Resolvidos (82): 1-70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130
Não resolvidos com chave pública (6): 135, 140, 145, 150, 155, 160
Não resolvidos (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
Vazios - sem fundos (96): 161-256
GSMG.IO 5 BTC Puzzle - Desafio criptográfico em várias fases com um único endereço Bitcoin.
| Endereço | Status | Prêmio |
|---|---|---|
| 1GSMG1JC9wtdSwfwApgj2xcmJPAwx7prBe | Não resolvido | ~1.25 BTC |
Originalmente 5 BTC, o prêmio é reduzido pela metade a cada halving do Bitcoin.
Recompensas de colisão de hash de Peter Todd - Endereços P2SH que podem ser reivindicados ao encontrar colisões de hash.
Enigmas Cripto Visuais de Zden - Enigmas artísticos em que chaves privadas são codificadas em imagens, animações e padrões visuais.
Não resolvidos: Level 5, Level HALV
Recompensas Arweave de Tiamat - Enigmas criptográficos na blockchain Arweave, criados por Tiamat (chronobot.io).
| Status | Quantidade |
|---|---|
| Reivindicado | 7 |
| Não resolvido | 4 |
Enigmas Cripto Ballet de Bobby Lee - Notas físicas de Bitcoin (carteiras Ballet) com chaves privadas criptografadas em BIP38. Resolva quebrando a frase-senha impressa no cartão.
| Status | Quantidade |
|---|---|
| Resolvido | 1 |
| Não resolvido | 2 |
Desafio Mnemônico da Bitaps - Enigma do Esquema de Compartilhamento de Segredo de Shamir (SSSS) em que o mnemônico original de 12 palavras foi dividido em 5 partes usando um limite de 3-de-5.
| Endereço | Status | Prêmio |
|---|---|---|
| bc1qyjwa0tf0en4x09magpuwmt2smpsrlaxwn85lh6 | Não resolvido | ~1.0 BTC |
Duas das três partes necessárias são publicadas. Objetivo: quebrar o esquema SSSS ou encontrar bugs de implementação.
Enigmas do Bitimage - Endereços Bitcoin derivados de arquivos arbitrários usando SHA256(Base64(file)) como entropia BIP39.
| Enigma | Frase-senha | Status | Prêmio |
|---|---|---|---|
| kitten | Não | ✅ Resolvido (2019-07-09) | 0.00095 BTC |
| kitten_passphrase | Sim | ⏳ Não resolvido | ~0.01 BTC |
Ambos os enigmas usam o mesmo arquivo de origem (tweet do gatinho de Antonopoulos). O enigma com frase-senha requer uma frase-senha BIP39 desconhecida.
Desafios WarpWallet da Keybase - Desafios de carteira-cérebro publicados para mostrar a rapidez com que frases-senha fracas do WarpWallet são quebradas.
| Status | Quantidade |
|---|---|
| Resolvido | 4 |
| Expirado | 2 |
Inclui os quatro desafios originais de novembro de 2013, além de duas rodadas posteriores de desafios específicos do WarpWallet reivindicadas pela Keybase após a expiração.
Todos os dados dos enigmas são incorporados em tempo de compilação a partir de arquivos JSONC em data/.
Cada enigma inclui: endereço (com HASH160 e tipo), cadeia, status, prêmio, chave pública (se exposta), chave privada (se resolvido), fonte da chave, data da solução (se resolvido), tempo de solução, data inicial (quando financiado), histórico de transações, informações do solucionador e ativos (imagens do enigma, dicas).
As coleções de enigmas visuais (zden, gsmg, bitimage) incluem ativos incorporados no diretório assets/:
assets/
├── zden/ # 15 puzzle images
├── gsmg/ # puzzle.png, follow_the_white_rabbit.png
└── bitimage/ # kitten images
Acesso via 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 projeto inclui habilidades de agente que ensinam agentes de codificação de IA a usar o boha.
Curadas pelo autor do projeto:
npx skills add oritwoen/boha
| Habilidade | Descrição |
|---|---|
boha | API da biblioteca Rust para consultar dados de enigmas e recompensas criptográficos em seis blockchains |
boha-cli | CLI para navegar, pesquisar, verificar e exportar dados de enigmas |
Geradas automaticamente a partir de documentações, issues e releases ativos usando skilld:
npx skilld add boha
MIT
| Formato | Flag | Descrição |
|---|
table | -o table | Tabela TUI com cores (padrão) |
json | -o json | JSON com indentação |
jsonl | -o jsonl | JSON Lines (um objeto por linha) |
yaml | -o yaml | YAML |
csv | -o csv | CSV com cabeçalho |
| Enigma | Hash | Status | Prêmio |
|---|
| sha1 | SHA-1 | ✅ Reivindicado (2017-02-23) | 2.48 BTC |
| sha256 | SHA-256 | ⏳ Não resolvido | 0.277 BTC |
| ripemd160 | RIPEMD-160 | ⏳ Não resolvido | 0.116 BTC |
| hash160 | HASH160 | ⏳ Não resolvido | 0.100 BTC |
| hash256 | HASH256 | ⏳ Não resolvido | 0.100 BTC |
| op_abs | OP_ABS | ✅ Reivindicado (2013-09-13) | - |
| Cadeia | Resolvidos | Não resolvidos | Total |
|---|
| Bitcoin | 9 | 2 | 11 |
| Ethereum | 2 | 0 | 2 |
| Litecoin | 1 | 0 | 1 |
| Decred | 1 | 0 | 1 |
| Ferramenta | Descrição |
|---|
| vuke | Ferramenta de pesquisa para estudar práticas vulneráveis de geração de chaves Bitcoin. Analise enigmas resolvidos em busca de padrões fracos. |
| vgen | Gerador de endereços Bitcoin personalizados (vanity) com correspondência de padrões regex e aceleração por GPU. |
| vusi | Análise de vulnerabilidades de assinatura ECDSA - reutilização de nonce, polynonce, nonces tendenciosos, ataques de reticulado/HNP. |
| kangaroo | Solucionador ECDLP Pollard's Kangaroo para secp256k1 usando computação Vulkan/Metal/DX12. |