Skip to content

Bitcoin

andyceo edited this page Oct 15, 2023 · 14 revisions

Bitcoin

Установка

Запуск

Следующие команды нужно выполнять из папки с бинарниками (если биткойн установлен не через пакеты)

  • ./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)

Ссылки

Docker и установка

Кошелек

Bitcoin Core не поддерживает BIP39, так что получить seed-фразу не получится.

hdseedid это то же самое что и hdmasterkeyid (последнее остается из-за обратной совместимости, было переименовано в hdseedid для большей ясности). Это HASH160 от HD seed.

Новый кошелек можно получить, просто удалив старый файл wallet.dat. Будет создан новый. По необходимости, защитите его с помощью encryptwallet <passphrase>.

Описание консольных команд (использовать как bitcoin-cli COMMAND)

Можно посмотреть весь список тут: 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 - записывает незашифрованный кошелек в простом текстовом файле

RPC API

Классная страница с описанием вызовов 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/

Как создать свою транзакцию

  1. Сначала выбрать выходы транзакций для траты из всех что есть:

     bitcoin-cli listunspent
    
  2. Посчитать и четко прописать, сколько монет, с каких выходов и на какие адреса отсылать. Не забыть сдачу на свой адрес, если она образуется! Сумма входов минус сумма выходов = комиссия майнеру, ее надо заложить на уровне 1-10 сатоши за байт (это величина динамическая, и периодически надо смотреть, какие комиссии сейчас в среднем по сети, хорошая визуализация есть например на mempool.space). Средняя длина типовой транзакции, которая тратит 1 выход, на два кошелька (один кошелек- собственно перевод, второй - сдача) = 247 байт, таким образом нужно заложить комиссию около 247 * 1 = 247 сатоши, или, для ровного счета и округляя в большую сторону (больше шансов что транзакция быстро пройдет), 0,0000025 биткойна. Или, более сбалансированно, 0,000003 (три миллионных) битка. (Для справки, средняя длина транзакции вида "тратим 1 выход на 1 вход", например, когда переводим все с одного адреса (выхода) на другой без остатка, равняется 217 байт)

  3. Затем, создать "сырую" транзакцию, указав выходы и адреса, на которые надо отсылать транзакции, вручную:

     bitcoin-cli createrawtransaction '[{"txid":"id","vout":n},...]' '[{"<bitcoinaddress>":amount},,...]'
    

    На выходе получится последовательность байт, что и есть "сырая транзакция"

  4. Разблокировать кошелек, чтобы сырую транзакцию можно было подписать:

     bitcoin-cli walletpassphrase '<PASSWORD>' <TIMEOUT>
    
  5. Подписать сырую транзакцию:

     bitcoin-cli signrawtransactionwithwallet <RAW_TRANSACTION>
    

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

  6. Провалидировать и затем отослать транзакцию в сеть:

     bitcoin-cli sendrawtransaction <RAW_SIGNED_TRANSACTION>
    

Sidebar is under construction

Clone this wiki locally