Получение списка ключей из блока 0 - PullRequest
0 голосов
/ 29 октября 2019

Используя локальную цепочку блоков, возможно ли использовать команды rpc bitcoin-core для запроса блока (такого как блок genesis) и получения списка всех открытых ключей, используемых в этом блоке? Если это возможно, какие команды мне нужно использовать?

1 Ответ

3 голосов
/ 29 октября 2019

Не совсем. Это связано с тем, что современные выходные данные содержат адреса (технически scriptPubkeys), которые представляют собой закодированные хеши открытого ключа, см. Типы транзакций . Хэши не могут быть сторнированы (иначе Биткойн не будет работать вообще), поэтому, чтобы раскрыть открытый ключ, спонсор должен предоставить его. Вы можете извлечь открытые ключи из потраченных выходных данных (через scriptSig), но это не так просто. Однако при использовании устаревших выходных данных (как в блоке генезиса) это возможно без затрат, поскольку они используют устаревший тип транзакции (Pay-To-Pubkey).

Есть несколько команд для использования. Сначала получите транзакции в блоке:

  1. getblockhash
$ bitcoin-cli getblockhash 0
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

, где 0 - индекс блока генезиса блока.

getblock
$ bitcoin-cli getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 2

{
  "hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
  "confirmations": 600908,
  "strippedsize": 285,
  "size": 285,
  "weight": 1140,
  "height": 0,
  "version": 1,
  "versionHex": "00000001",
  "merkleroot": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
  "tx": [
    {
      "txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
      "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
      "version": 1,
      "size": 204,
      "vsize": 204,
      "weight": 816,
      "locktime": 0,
      "vin": [
        {
          "coinbase": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73",
          "sequence": 4294967295
        }
      ],
      "vout": [
        {
          "value": 50.00000000,
          "n": 0,
          "scriptPubKey": {
            "asm": "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f OP_CHECKSIG",
            "hex": "4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac",
            "reqSigs": 1,
            "type": "pubkey",
            "addresses": [
              "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
            ]
          }
        }
      ],
      "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000"
    }
  ],
  "time": 1231006505,
  "mediantime": 1231006505,
  "nonce": 2083236893,
  "bits": "1d00ffff",
  "difficulty": 1,
  "chainwork": "0000000000000000000000000000000000000000000000000000000100010001",
  "nTx": 1,
  "nextblockhash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"
}

, где первый аргумент - это хэш блока, а 2 - многословие (т. Е. Для объекта json с данными транзакции). Обратите внимание, что это не много данных для блока генезиса, но для более поздних блоков это будет очень большой и медленный.

Извлеките открытый ключ из scriptPubkey К счастью для нас, блок genesis использует устаревший тип транзакции, называемый Pay-to-Pubkey, который дает нам открытый ключ и имеет форму:

<pubkey> OP_CHECKSIG

В первом vout значение scriptPubkey равно 04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f OP_CHECKSIG

Таким образом, открытый ключ равен 04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f. Обратите внимание, что это 65 байтов, поскольку в ранних версиях Биткойн использовались открытые ключи без сжатия.

...