Bitcoin - andyceo/documentation GitHub Wiki
Следующие команды нужно выполнять из папки с бинарниками (если биткойн установлен не через пакеты)
-
./bitcoind
: запускает демон биткойна -
./bitcoin-qt
: запускает биткойн со стандартным графическим интерфейсом
Данные опции командной строки могут быть применены к ./bitcoind
или ./bitcoin-qt
. Подробнее можно посмотреть на странице документации.
-
-?
: печатает помощь и выходит -
-version
: печатает версию и выходит -
-daemon
: запускается в фоне и принимает команды -
-printtoconsole
: отправлять отладочную информацию в консоль (stdout
). По умолчанию: 1 если нет опции-daemon
.Чтобы выключить логирование в файл, установите опцию-nodebuglogfile
-
-nodebuglogfile
: отключает ведение лога отладки -
-debuglogfile
: местоположение лога отладки. По умолчанию:debug.log
-
-reindex
: перестраивает стейт и индекс блоков из файловblk*.dat
на диске. Подробнее:- очищает стейт (UTXO)
- очищает индекс блоков (базу данных с информацией о том, где каждый блок находится на диске)
- перестраивает индекс блоков (проходит все файлы
blk*.dat
и находит все похожее на блоки) - перестраивает стейт (перевалидирует все блоки), основываясь на индексе блоков
-
-reindex-chainstate
: перестраивает стейт из текущего индекса блоков. Подробнее:- очищает стейт
- перестраивает стейт, основываясь на том индексе блоков, который уже есть
-
-settings=<file>
: местоположение файла динамических настроек. Не предназначен для изменения пользователем (используйте файлbitcoin.conf
для настроек). По умолчанию:settings.json
-
-conf=<file>
: Местоположения файла конфигурации (файл только для чтения). По умолчанию:bitcoin.conf
-
-datadir=<dir>
: Задает местоположение папки с данными -
-dbcache=<n>
: Максимальный размер кеша базы данных, в MiB (может быть в диапазоне от 4 до 16384, по умолчанию: 450). В дополнение, неиспользованная память мемпула будет задействована для этого кеша (см.-maxmempool
)
- https://blockchain.com/explorer (он же https://blockchain.info)- самый распространенный кошелек. Не дает скачать приватный ключ! Также можно посмотреть информацию о транзакции (/tx/номер_транзакции) и блоках
- https://bitref.com/ - посмотреть информацию о кошельке (/номер_кошелька)
- Running A Full Node
- RPC API
- What's the difference between a wallet and an address? - отличное описание теории
- https://hub.docker.com/r/beli/bitcoin/~/dockerfile/
- https://hub.docker.com/r/bwstitt/bitcoin/~/dockerfile/
- https://hub.docker.com/r/amacneil/bitcoin/~/dockerfile/
- https://gist.github.com/nyanloutre/9015e60a00a5dfcc113d1d32386ae382 и обсуждение https://www.reddit.com/r/btc/comments/5oaxi2/dockerfile_for_bitcoin_unlimited/
Bitcoin Core не поддерживает BIP39, так что получить seed-фразу не получится.
hdseedid
это то же самое что и hdmasterkeyid
(последнее остается из-за обратной совместимости, было переименовано в hdseedid
для большей ясности). Это HASH160
от HD seed.
Новый кошелек можно получить, просто удалив старый файл wallet.dat
. Будет создан новый. По необходимости, защитите его с помощью encryptwallet <passphrase>
.
Можно посмотреть весь список тут: https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list
А также сайт со списком команд в интересной форме: https://chainquery.com/bitcoin-cli
Разные команды:
-
--version
: печатает версию и выходит. Командыversion
нет! -
uptime
: выводит количество секунд с момента запуска -
getblockchaininfo
: -
getnetworkinfo
: -
getpeerinfo
: -
getpeerinfo
: -
getwalletinfo
: -
getbalance
: баланс общий по всему кошельку -
listreceivedbyaddress
: список адресов и полученных на них сумм, с указанием транзакций -
listaddressgroupings
: сгруппированные адреса c балансами на них -
getnewaddress
: выдает новый адрес для получения биткойнов -
sendtoaddress <bitcoinaddress> $(bitcoin-cli getbalance) "" "" true
: отправить все деньги с кошелька на адрес<bitcoinaddress>
-
listunspent
: показать список не потраченных выходов транзакций (unspent transactions outputs, UTXO) -
createrawtransaction '[{"txid":"id","vout":n},...]' '[{"<bitcoinaddress>":amount},,...]'
: создает сырую неподписанную транзакцию в виде последовательности байтов, первый параметр - входы транзакций, второй - адреса куда и сколько перевести средств, все балансы указываются в биткойнах и его долях -
signrawtransactionwithwallet <hex_rawtransaction>
: подписать с помощью кошелька сырую транзакцию (кошелек надо сначала разблокировать с помощьюwalletpassphrase <passphrase> <timeout>
) -
sendrawtransaction <hex_signedrawtransaction>
: валидирует и отсылает сырую подписанную транзакцию -
getrawmempool
: выдает список транзакций в мемпуле -
getrawtransaction txid 1
: представляет JSON транзакции по ееtxid
, если последний параметр равен 1. Если не задан - то отдает ее сериализованное представление -
reconsiderblock <hash>
: скрытая команда. Удаляет статус "невалидный" у блока и последующих от него блоков, пересматривает их для активации. Может использоваться для отмены операцииinvalidateblock
. Аргумент: хеш блока, который нужно пересмотреть. Ничего не выводит в ответ -
invalidateblock <hash>
: скрытая команда. Навсегда помечает блок как "невалидный", как будто он не подходит правилам консенсуса. Аргумент: хеш блока, который нужно пометить невалидным. Ничего не выводит в ответ.
Команды защиты (шифрования) кошелька wallet.dat
:
-
encryptwallet <passphrase>
- зашифровывает кошелек ключом<passphrase>
-
walletlock
- ключ шифрования убирается из памяти, и кошелек запирается. Чтобы сделать любую операцию, требующую незапертый кошелек, нужно будет сначала открыть его с помощьюwalletpassphrase
-
walletpassphrase <passphrase> <timeout>
- разблокировать кошелек с помощью пароля<passphrase>
на<timeout>
секунд, иными словами, сохраняет ключ шифрования<passphrase>
на<timeout>
секунд в памяти -
walletpassphrasechange <oldpassphrase> <newpassphrase>
- меняет ключ шифрования кошелька<oldpassphrase>
на<newpassphrase>
-
dumpwallet /some/filepath/wallet.txt
- записывает незашифрованный кошелек в простом текстовом файле
Классная страница с описанием вызовов API: A Map of the Bitcoin Core RPC API across Versions
Пример соответствия консольной команды и API:
Команда CLI:
bitcoin-cli reconsiderblock "blockhash"
Вызов API:
curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "reconsiderblock", "params": ["blockhash"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/
-
Сначала выбрать выходы транзакций для траты из всех что есть:
bitcoin-cli listunspent
-
Посчитать и четко прописать, сколько монет, с каких выходов и на какие адреса отсылать. Не забыть сдачу на свой адрес, если она образуется! Сумма входов минус сумма выходов = комиссия майнеру, ее надо заложить на уровне 1-10 сатоши за байт (это величина динамическая, и периодически надо смотреть, какие комиссии сейчас в среднем по сети, хорошая визуализация есть например на mempool.space). Средняя длина типовой транзакции, которая тратит 1 выход, на два кошелька (один кошелек- собственно перевод, второй - сдача) = 247 байт, таким образом нужно заложить комиссию около 247 * 1 = 247 сатоши, или, для ровного счета и округляя в большую сторону (больше шансов что транзакция быстро пройдет),
0,0000025
биткойна. Или, более сбалансированно,0,000003
(три миллионных) битка. (Для справки, средняя длина транзакции вида "тратим 1 выход на 1 вход", например, когда переводим все с одного адреса (выхода) на другой без остатка, равняется 217 байт) -
Затем, создать "сырую" транзакцию, указав выходы и адреса, на которые надо отсылать транзакции, вручную:
bitcoin-cli createrawtransaction '[{"txid":"id","vout":n},...]' '[{"<bitcoinaddress>":amount},,...]'
На выходе получится последовательность байт, что и есть "сырая транзакция"
-
Разблокировать кошелек, чтобы сырую транзакцию можно было подписать:
bitcoin-cli walletpassphrase '<PASSWORD>' <TIMEOUT>
-
Подписать сырую транзакцию:
bitcoin-cli signrawtransactionwithwallet <RAW_TRANSACTION>
На выходе получится подписанная транзакция в виде последовательности байт, чуть длинее неподписанной.
-
Провалидировать и затем отослать транзакцию в сеть:
bitcoin-cli sendrawtransaction <RAW_SIGNED_TRANSACTION>