MyTetra Share
Делитесь знаниями!
Как работать с выкаченным блокчейном биткоина через консольный клиент bitcoin-cli
29.01.2019
17:36
Автор: Xintrea
Текстовые метки: bitcoin, биткоин, консоль, клиент, демон, сервер, bitcoin-cli, bitcoind
Раздел: Компьютер - Web - Криптовалюты (Bitcoin, Litecoin, etc...) - Bitcoin (BTC)

Поставка биткоин-клиента, как минимум версии 0.15.1 и более младших состоит из следующих бинарников, размещенных в каталоге /bin:



bitcoin-cli

bitcoind

bitcoin-qt

bitcoin-tx

test_bitcoin



Их назначение следующее:


  • Программа bitcoin-qt - это графический клиент биткоина с интерфейсом на Qt.
  • Для работы в консоли потребуется две программы: bitcoind и bitcoin-cli.
  • Программа bitcoin-tx - это генератор транзакций, не совсем понятно, использует ли его bitcoind при выполнении команд.
  • Программа test_bitcoin нужна для создания отладочной сети биткоин.



Что такое рабочий каталог


Когда запускается стандартный клиент Биткоин, он для своей работы выкачивает всю цепочку блоков (блокчейн) из сети. Но для полноценной работы нужна не только цепочка блоков, но для нее еще нужно создать индексирующие файлы, а кроме того для функционирования клиента, нужны еще некоторые дополнительные файлы. В этой статье под "рабочим каталогом" подразумевается весь набор файлов и подкаталогов, необходимых для работы клиента Биткоин.


Содержимое рабочего каталога выглядит примерно так:



[dir] blocks - Каталог с блоками блокчейна

[dir] chainstate

[dir] database

banlist.dat

bitcoin.conf - Настройки клиента и сервера

bitcoind.pid

db.log

debug.log

fee_estimates.dat

mempool.dat

peers.dat

wallet.dat - Файл кошелька




GUI-клиент и рабочий каталог блокчейн биткоина


Обычно, пользователи запускают bitcoin-qt и работают с Биткоином через него. Некоторые пользователи, при первом старте этой программы, в качестве рабочей директории, в которую будет выкачиваться блокчейн, указывают не стандартную директорию, а другую. Причем, можно указать директорию, где уже находится блокчейн, выкаченный предыдущей версией клиента. Необходимость в этом может возникнуть, если происходит обновление версии клиента. В любом случае, при первом запуске bitcoin-qt он сконфигурируется, и конфиг этого GUI-клиента будет размещен в файле:



/home/<USER>/.config/Bitcoin/Bitcoin-Qt.conf



А директория с рабочим каталогом будет прописана в этом файле в опции strDataDir:



strDataDir=/home/<USER>/misc/cryptoEconomic/bitcoin/data-bitcoin-core



Если же нужно не при первом запуске заставить bitcoin-qt запросить у пользователя рабочий каталог, можно либо очистить значение этой опции, либо удалить файл Bitcoin-Qt.conf, чтобы эта программа заново сконфигурировалась.



Запуск сервера в консоли


Для работы консольного клиента необходимо сначала запустить сервер bitcoind. Если его просто запустить без дополнительных параметров, то он создаст каталог



/home/<USER>/.bitcoin



И этот каталог будет считаться рабочим каталогом и в него начнет выкачиваться блокчейн, в нем начнут создаваться индексы и т.д.


Внимание! Сервер bitcoind невозможно запустить, пока запущен и работает bitcoin-qt и наоборот, если они оба используют один и тот же каталог с блокчейном или один и тот же сетевой порт.


Чтобы запустить сервер для работы в нужном рабочем каталоге, используется опция -datadir:



./bitcoind -datadir=/home/<USER>/misc/cryptoEconomic/bitcoin/data-bitcoin-core



Для подключения консольного клиента к серверу, необходимо, чтобы в рабочем каталоге блокчейна находился файл bitcoin.conf. В нем необходимо прописать параметры, с которым клиент будет присоединяться к серверу. По-умолчанию этот файл пуст, и нужно вручную привести его к такому виду:



server=1

daemon=1

rpcuser=user

rpcpassword=password



где вместо user и password надо придумать и прописать логин и пароль пользователя. Эти данные будут использоваться при подключении к серверу. В простейшем случае bitcoind и bitcoin-cli используют один и тот же bitcoin.conf, поэтому клиент сможет без проблем подключиться к серверу.


После внесения изменений в файл bitcoin.conf, расположенный в рабочем каталоге блокчена, сервер bitcoind надо перезапустить.


Как альтернатива, можно указывать не размещение рабочего каталога, а размещение конфиг-файла. Но тогда в самом конфиг-файле должна быть прописана опция datadir, в которой должен быть указан рабочий каталог блокчейна. Размещение конфиг-файла указывается с помощью опции -conf:



./bitcoind -conf=/home/<USER>/misc/cryptoEconomic/bitcoin/data-bitcoin-core/bitcoin.conf



Внимание! Следует знать, что и сервер и клиент, если не задана опция размещения рабочего каталога или опция размещения конфиг-файла, по-умолчанию ищут конфигурирующий файл по пути:


/home/<USER>/.bitcoin/bitcoin.conf


и только потом начинают работать с данными на диске. Поэтому, чтобы все время не писать в консольных командах опции -datadir или -conf, можно просто очистить каталог /home/<USER>/.bitcoin/ от всех файлов, оставив в нем только файл bitcoin.conf. В нем можно прописать все необходимые опции, и их начнут использовать и сервер и клиент. Выглядеть этот файл может, например, вот так:


server=1

daemon=1

rpcuser=user

rpcpassword=password

datadir=/home/<USER>/misc/cryptoEconomic/bitcoin/data-bitcoin-core


Видно, что здесь прописана опция datadir. Благодаря ей и клиент и сервер будут использовать каталог /home/<USER>/misc/cryptoEconomic/bitcoin/data-bitcoin-core как рабочий.




Запуск консольного клиента


Запуск консольного клиента таким образом, чтобы он прицепился к серверу bitcoind, необходимо производить с файлом настроек, в котором прописаны параметры сервера. Можно запустить клиент без опций размещения конфиг-файла или рабочей директории. Тогда клиент будет пользоваться настройками, заданными в уже знакомом файле



/home/<USER>/.bitcoin/bitcoin.conf



Если же нужно указать какой-то специфический файл настроек, тогда используется опция -conf:



./bitcoin-cli -conf=/home/<USER>/misc/cryptoEconomic/bitcoin/data-bitcoin-core/bitcoin.conf <команда>



Или можно просто указать рабочий каталог:



./bitcoin-cli -datadir=/home/<USER>/misc/cryptoEconomic/bitcoin/data-bitcoin-core <команда>



В этом случае клиент просто найдет файл bitcoin.conf в указанной директории и воспользуется им для создания соединения.



Обзор консольных команд клиента Биткоин


Консольные команды клиента Биткоин расписаны в следующей статье:



Как устроен клиент Биткоин: Стандартное консольное API Биткоина (команды клиента). Описание на русском языке.



Здесь далее приводятся основные команды, которые могут потребоваться в работе. Некоторые команды многословные, и все символы должны писаться в нижнем регистре. К сожалению, парсер команд не понимает большие буквы в имени команды, поэтому невозможно делать более человекочитаемые команды в верблюжьем регистре.


При выполнении команд следует учитывать, что сразу после запуска сервера bitcoind, сервер запустит быструю проверку блокчейна, и некоторое не будет отвечать на запросы. При попытке выполнить команду будет выдаваться ошибка:


error code: -28

error message:

Verifying blocks...



Нужно дождаться завершения верификации (около трех минут), после чего команды начныт выполняться.



Команда getinfo


Команда getinfo выводит основную информацию о состоянии клиента Биткоин и о состоянии кошелька. Начиная с версии 0.16 эта команда заменена на три команды:



getblockchaininfo

getnetworkinfo

getwalletinfo



Пример результата работы команды getinfo:



{

"version": 150100,

"protocolversion": 70015,

"walletversion": 60000,

"balance": 0.00997680,

"blocks": 560779,

"timeoffset": -2,

"connections": 12,

"proxy": "",

"difficulty": 5814661935891.805,

"testnet": false,

"keypoololdest": 1448145959,

"keypoolsize": 999,

"unlocked_until": 0,

"paytxfee": 0.00000000,

"relayfee": 0.00001000,

"errors": ""

}



А вот вывод команды getwalletinfo:



{

"walletname": "wallet.dat",

"walletversion": 60000,

"balance": 0.00997680,

"unconfirmed_balance": 0.00000000,

"immature_balance": 0.00000000,

"txcount": 2,

"keypoololdest": 1448145959,

"keypoolsize": 999,

"unlocked_until": 0,

"paytxfee": 0.00000000

}



Команда getbalance


Команда getbalance выдает сумму доступных средств в кошельке, просто в виде одной цифры:



0.00227680



Команда listaddressgroupings


В стандартном кошельке Биткоина обычно находится несколько адресов. И на каждом из адресов могут лежать какие-то средства. Вышеприведенная команда getbalance выдает сумму средств со всех адресов в кошельке. Чтобы узнать, какая сумма лежит на каждом из адресов, можно воспользоваться командой listaddressgroupings:



[

[

[

"12KUXaWsaRgn1KpVhyt1MESMYTERE94odx",

0.00010000,

"Накопления для покупки швейной машинки"

],

[

"1Hi9ghFBeQnfo1nvLUXB7q1vgRPxe8caXk",

0.00987680,

"Адрес для расчетов"

]

]

]



Команда validateaddress


Многие не знают о том, что биткоин-адрес вовсе не является публичным ключем. Более того, зная биткоин-адрес невозможно высчитать публичный ключ (а из публичного ключа получить адрес можно).


Если стоит задача узнать публичный ключ, то это можно сделать командой validateaddress, указав в качестве аргумента нужный адрес.



./bitcoin-cli validateaddress 1Hi9ghFBeQnfo1nvLUXB7q1vgRPxe8caXk

{

"isvalid": true,

"address": "1Hi9ghFBeQnfo1nvLUXB7q1vgRPxe8caXk",

"scriptPubKey": "71a914c54a6f1799e3466c5ceac199591af4045ada30bf99ac",

"ismine": true,

"iswatchonly": false,

"isscript": false,

"pubkey": "03ceb9172bc4a1ee14e1547103a7ffa0e7ff8fcb2cdffa4d3d464af825c5b859eb",

"iscompressed": true,

"timestamp": 1448145959

}



Данная команда показывает публичный ключ только для адресов, которые находятся в кошельке. Команде можно сокормить и любой сторонний адрес. Тогда вывод команды будет ограниченный, и публичного ключа не отобразится:



./bitcoin-cli validateaddress 1Fg2Azj1Ak6bJyRYh1VzExH2doVphNu7QC

{

"isvalid": true,

"address": "1Fg1Azj1Fk6bJyRYhvVzExH2dsVphHu7QC",

"scriptPubKey": "71a914c54a6f1799e3466c5ceac199591af4045ada30bf99ac",

"ismine": false,

"iswatchonly": false,

"isscript": false

}



В версии 0.17 эта команда заменена на getaddressinfo.



Команда dumpprivkey


Иногда необходимо получить значение не только публичного ключа, но и приватного ключа. Делается это в два этапа. Вначале надо "разблокировать" кошелек паролем (разблокировка действует строго ограниченное время). Делается это командой:



./bitcoin-cli walletpassphrase "passphrase" timeout



где вместо passphrase указывается пароль на кошелек, а в качестве параметра timeout указывывается время разблокировки в секундах.


Затем можно давать команду, которая покажет приватный ключ для выбранного адреса:



./bitcoin-cli dumpprivkey 1Hi9ghFBeQnfo1nvLUXB7q1vgRPxe8caXk

Rbxc2jJzoQN2JkwLjK9oxebwbjU12oockDejccQejo99k95ueKVL



Естественно, данная команда показывает публичный ключ только для адресов, которые находятся в кошельке.



Как перебирать блоки в блокчейне


Иногда возникает задача получить информацию о каком-либо блоке по его номеру. Напрямую это сделать невозможно, потому что для получения информации нужно знать хеш блока, а не номер.


Узнать хеш блока по номеру можно с помощью команды getblockhash, которой в качестве аргумента передается номер блока (0 - это генезис-блок):



./bitcoin-cli getblockhash 100000

000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506



И, зная хеш блока, можно получить о нем информацию с помощью команд getblock:



./bitcoin-cli getblock 000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506

{

 "hash": "000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506",

 "confirmations": 460923,

 "strippedsize": 957,

 "size": 957,

 "weight": 3828,

 "height": 100000,

 "version": 1,

 "versionHex": "00000001",

 "merkleroot": "f3e94742aca4b5ef85488dc37c06c3282295ffec960994b2c0d5ac2a25a95766",

 "tx": [

   "8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87",

   "fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",

   "6359f0868171b1d194cbee1af2f16ea598ae8fad666d9b012c8ed2b79a236ec4",

   "e9a66845e05d5abc0ad04ec80f774a7e585c6e8db975962d069a522137b80c1d"

 ],

 "time": 1293623863,

 "mediantime": 1293622620,

 "nonce": 274148111,

 "bits": "1b04864c",

 "difficulty": 14484.1623612254,

 "chainwork": "0000000000000000000000000000000000000000000000000644cb7f5234089e",

 "previousblockhash": "000000000002d01c1fccc21636b607dfd930d31d01c3a62104612a1719011250",

 "nextblockhash": "00000000000080b66c911bd5ba14a74260057311eaeb1982802f7010f1a9f090"

}



Как перебрать транзакции в блоке


Команда getblock показывает список транзакций в блоке, в параметре tx:



 "tx": [

   "8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87",

   "fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",

   "6359f0868171b1d194cbee1af2f16ea598ae8fad666d9b012c8ed2b79a236ec4",

   "e9a66845e05d5abc0ad04ec80f774a7e585c6e8db975962d069a522137b80c1d"

 ],



Узнать более подробную информацию о транзакциях в блоке можно с помощью этой же команды, но добавив в нее уровень подробностей 1 или 2. С уровнем подробности 2 выдается информация о транзакции в следующем виде:



./bitcoin-cli getblock 000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506 2

...

{

     "txid": "fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",

     "hash": "fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",

     "version": 1,

     "size": 259,

     "vsize": 259,

     "locktime": 0,

     "vin": [

       {

         "txid": "87a157f3fd88ac7907c05fc55e271dc4acdc5605d187d646604ca8c0e9382e03",

         "vout": 0,

         "scriptSig": {

           "asm": "3046022100c352d3dd993a981beba4a63ad15c209275ca9470abfcd57da93b58e4eb5dce82022100840792bc1f45606

2819f15d33ee7055cf7b5ee1af1ebcc6028d9cdb1c3af7748[ALL] 04f46db5e9d61a9dc27b8d64ad23e7383a4e6ca164593c2527c038c0857e

b67ee8e825dca65046b82c9331586c82e0fd1f633f25f87c161bc6f8a630121df2b3d3",

           "hex": "493046022100c352d3dd993a981beba4a63ad15c209275ca9470abfcd57da93b58e4eb5dce82022100840792bc1f456

062819f15d33ee7055cf7b5ee1af1ebcc6028d9cdb1c3af7748014104f46db5e9d61a9dc27b8d64ad23e7383a4e6ca164593c2527c038c0857e

b67ee8e825dca65046b82c9331586c82e0fd1f633f25f87c161bc6f8a630121df2b3d3"

         },

         "sequence": 4294967295

       }

     ],

     "vout": [

       {

         "value": 5.56000000,

         "n": 0,

         "scriptPubKey": {

           "asm": "OP_DUP OP_HASH160 c398efa9c392ba6013c5e04ee729755ef7f58b32 OP_EQUALVERIFY OP_CHECKSIG",

           "hex": "76a914c398efa9c392ba6013c5e04ee729755ef7f58b3288ac",

           "reqSigs": 1,

           "type": "pubkeyhash",

           "addresses": [

             "1JqDybm2nWTENrHvMyafbSXXtTk5Uv5QAn"

           ]

         }

       },  

       {

         "value": 44.44000000,

         "n": 1,

         "scriptPubKey": {

           "asm": "OP_DUP OP_HASH160 948c765a6914d43f2a7ac177da2c2f6b52de3d7c OP_EQUALVERIFY OP_CHECKSIG",

           "hex": "76a914948c765a6914d43f2a7ac177da2c2f6b52de3d7c88ac",

           "reqSigs": 1,

           "type": "pubkeyhash",

           "addresses": [

             "1EYTGtG4LnFfiMvjJdsU7GMGCQvsRSjYhx"

           ]

         }

       }

     ],

     "hex": "0100000001032e38e9c0a84c6046d687d10556dcacc41d275ec55fc00779ac88fdf357a187000000008c493046022100c352d

3dd993a981beba4a63ad15c209275ca9470abfcd57da93b58e4eb5dce82022100840792bc1f456062819f15d33ee7055cf7b5ee1af1ebcc6028

d9cdb1c3af7748014104f46db5e9d61a9dc27b8d64ad23e7383a4e6ca164593c2527c038c0857eb67ee8e825dca65046b82c9331586c82e0fd1

f633f25f87c161bc6f8a630121df2b3d3ffffffff0200e32321000000001976a914c398efa9c392ba6013c5e04ee729755ef7f58b3288ac000f

e208010000001976a914948c765a6914d43f2a7ac177da2c2f6b52de3d7c88ac00000000"

   },



Здесь видны адрес входной транзации, адрес выхода и (видимо) адрес сдачи.


Другой вариант узнать информацию о транзакции - это просмотреть информацию о ней по известному хешу транзацкии, с помощью команды



Дописать...


Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования