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>