Como extrair todos os endereços de bitcoin com bitcoin-cli?

Aug 28 2020

Estou tentando obter todos os endereços existentes no blockchain bitcoin com bitcoin-cli. Parece que consigo endereços de vout que são do tipo "pubkeyhash". Se o tipo de vout for "pubkey", não haverá endereços.

tipo pubkeyhash:

  "vout": [
    {
      "value": 0.00000001,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 b04e3fb6f6c96ba23233c809e42d8e6a0e0e31ca OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914b04e3fb6f6c96ba23233c809e42d8e6a0e0e31ca88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "1H5DfbDtCnKUdke9xH9svwwxqga41Z5xbz"
        ]
      }
    }

tipo pubkey:

  "vout": [
    {
      "value": 50.63517500,
      "n": 0,
      "scriptPubKey": {
        "asm": "04b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e6537a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7b OP_CHECKSIG",
        "hex": "4104b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e6537a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7bac",
        "type": "pubkey"
      }
    }

Existe uma maneira fácil de obter TODOS os endereços no blockchain?

Respostas

4 PieterWuille Aug 29 2020 at 05:19

Responder a esta pergunta requer primeiro definir o que significa um endereço.

  1. Historicamente (antes do BIP16 ser ativado em 2012), um endereço era sinônimo de um "identificador de chave pública", pois não havia endereços para construções multisig ou algo parecido. Sob essa interpretação, as saídas pay-to-pubkey ou pay-to-pubkey-hash seriam vistas como tendo o mesmo endereço - afinal, a chave é a mesma. Isso é problemático, porque enviar para o "endereço" correspondente a um script pay-to-pubkey não enviaria realmente para esse script, mas para seu script pay-to-pubkey-hash correspondente. Softwares suficientemente antigos e alguns softwares mais novos (incluindo alguns exploradores de blocos) usam essa interpretação, causando confusão.

  2. A maioria dos softwares agora trata um endereço como uma notação legível para codificar scripts específicos (correspondendo ao script que seria construído se uma carteira fosse instruída a pagar para esse endereço). Sob esta interpretação, as saídas pay-to-pubkey simplesmente não têm um endereço (já que não há maneira de fazer carteira produzir tais saídas), e certamente não o mesmo endereço da saída pay-to-pubkey-hash com mesma chave.

O software que você está usando segue a interpretação (2), então a pergunta faz pouco sentido. Ele mostra todos os endereços observados, mas, neste caso, simplesmente não há nenhum endereço envolvido. As saídas de transação em Bitcoin são scripts de forma livre e apenas alguns deles têm uma notação de endereço correspondente. Outros são apenas scripts.

2 Murch Aug 28 2020 at 01:53

A segunda saída que você está mostrando está usando o pay to pubkeyscript de saída. Pay to pubkey (P2PK) bloqueia fundos com o mesmo nome em uma chave pública. O script de entrada correspondente só precisa fornecer uma assinatura da chave privada correspondente para gastar os fundos. O P2PK caiu em desuso para tudo, exceto saídas de mineração no início, e nunca houve um padrão para codificar scripts de saída P2PK como endereços. A melhor maneira de rastreá-los é provavelmente por meio da chave pública paga.