Основные команды для взаимодействия с консолью Bitcoin Core RPC
В этой статье мы рассмотрим использование полностью синхронизированного узла Bitcoin Core для запуска команд в консоли bitcoin-qt. Если на вашем компьютере еще не установлен Bitcoin Core, вы можете скачать его здесь .
Имейте в виду, что Bitcoin Core предъявляет повышенные минимальные требования к пространству (в настоящее время
250 ГБ), требования к полосе пропускания и потребуется повторная синхронизация, если в автономном режиме в течение любого периода времени.
Bitcoin Core имеет встроенные команды для получения данных, генерации адресов, отправки транзакций и многого другого. Консоль RPC — отличный способ начать работу, если вы заинтересованы в разработке биткоин приложений или просто узнать больше о работе узлов сети биткоин. Мы будем изучать некоторые основные команды для получения информации о сети, блокчейне и транзакциях.
После того, как вы установили биткоин клиент и ожидали синхронизации вашего узла с сетью, откройте консоль. Его можно найти в раскрывающемся окне при запуске bitcoin-qt (графический интерфейс для Bitcoin Core).
Консоль биткоин-RPC принимает различные команды, обычно от 0 или 1 arguments. Существуют также методы, которые требуют более 1 arguments, такие как отправка или проверка транзакции. Полный список команд RPC можно найти здесь . В этом уроке мы будем использовать следующие основные команды для знакомства с консолью:
Общая информация
getblockchaininfo
getmininginfo
getpeerinfo
Информация о блоке
getblockcount
getbestblockhash
getblock хэш
индекс getblockhash
Информация о транзакции
getrawmempool
getrawtransaction txid
decoderawtransaction rawtx
Общая информация по командам
Эти команды будут возвращать объект с различной информацией. Например,
В этой команде много информации. Это дает нам все детали, которые нам нужны, чтобы определить лучший блок и где его найти. Мы также можем увидеть размер реализованного блокчейна и различных программных форков.
Вторая команда общей информации,
возвращает следующий объект:
Блоки и значения сложности также находятся в getblockchaininfoкоманде, но здесь мы можем найти:
- сетевые хэши в секунду
- количество транзакций в пуле передачи
Третья команда общей информации — это узнать информацию о Peers, с которыми ваш узел передает данные блокчейна. Эта команда:
возвращает массив объектов. Каждый объект имеет информацию об узле-партнере, к которому в данный момент подключен ваш экземпляр Bitcoin Core. Обычно это число составляет 10–50, если на маршрутизаторе открыт порт 8333. Возвращенная информация включает в себя:
- Информация об IP-адресе
- Время с момента последней отправки / получения
- Время соединения узла (время работы)
- Версия
- Дополнительная информация о сети
общее число Peer в этом массиве указывает количество подключений, однако вы также можете использовать команду getconnectioncountдля возврата числового значения подключенных узлов.
Block команды
Чтобы получить данные о блоке, нам сначала нужен индекс блока или хеш, чтобы идентифицировать этот блок. Мы можем получить оба значения о текущем лучшем блоке в цепочке, используя команды:
чтобы вернуть текущий лучший индекс блока:
чтобы вернуть текущий лучший хеш блока:
Каждый блок в цепочке биткоинов имеет индекс и хэш, который мы можем использовать, чтобы найти подробности о нем. Блоки можно искать непосредственно с помощью хэша блока или косвенно с помощью индекса блока. Например, скажем, мы знаем, что хотим найти блок с уровнем (индекс ) 530120. Сначала введите команду:
который возвращает хеш:
Затем используйте getblockкоманду для получения данных блока:
Команда, getblockвызванная с определенным хешем, вернет:
- количество подтвержденных блоков с этого блока
- размер блока
- вес блока
- корень меркле
- массив всех идентификаторов TX в блоке
- время, когда блок был найден
- блок nonce
- текущая сложность
- количество транзакций (нТх )
- следующий / предыдущий блок хэшей
Команды транзакции
Биткоин не индексирует транзакции по умолчанию. Чтобы искать транзакции, отличные от тех, которые связаны с вашим кошельком, вы должны сначала включить индексацию в файле конфигурации. Перейдите в «Настройки »> «Параметры » >> «Открыть файл конфигурации», чтобы открыть файл конфигурации биткойнов (bitcoin .conf).
После добавления этой команды сохраните файл и перезапустите Bitcoin Core. Этот процесс может занять несколько часов, поэтому его полезно настроить на ночь или пока вас нет. После того, как Bitcoin Core имеет проиндексированый блокчейн, любая сделка может рассматриваться индивидуально с помощью getrawtransactionи decoderawtransactionкоманды.
Это может показаться утомительным дополнительным шагом, но имейте в виду, что этот параметр также является требованием для работы lightnening node.
Теперь, когда у нас работает индексированный биткойн-узел, давайте найдем несколько транзакций для декодирования. Мы можем увидеть идентификаторы всех транзакций в mempool с помощью команды
эта команда вернет массив (обычно ) тысяч ожидающих транзакций, находящихся в настоящий момент в mempool.
Мы можем посмотреть конкретную транзакцию, выбрав один из этих идентификаторов транзакций.
это вернет необработанную транзакцию:
Эта шестнадцатеричная строка, назовем ее hex, является закодированной транзакцией и может быть декодирована с использованием:
Эта команда возвращает объект с подробной информацией об этой транзакции
- размер транзакции
- вес транзакции
- детали ввода
- выходные данные и значение / с
Здесь много информации, но обратите внимание, что указанная выше транзакция не имеет никаких значений, связанных с ее вводом. Блок, в котором была подтверждена транзакция, также недоступен в транзакции. Эти детали отсутствуют для того, чтобы блокчейн не повторял ненужные данные. Однако у нас достаточно информации для поиска сумм, полученных по каждой биткоин-транзакции и возможность просмотра результатов предыдущих транзакций. С помощью этих команд достаточно построить базовый проводник блоков.
Заключение
Консоль Bitcoin Core RPC находится в центре использования биткоин-узла для упрощения транзакций и создания приложений. Каждый экземпляр биткоина имеет доступ к почти неизменной общей базе данных с предыдущей историей транзакций, а также с информацией о сети и майнинге.
Понимание некоторых из этих основных команд является важным шагом в разработке приложений для биткоинов и работе с узлами в целом. Эти команды могут быть доступны для множества различных языков программирования для создания API и приложений, которые используют и реализуют логику транзакций. Можно вести бизнес из своего собственного узла и программно отслеживать каждую транзакцию через приложение с настраиваемым пользовательским интерфейсом.
Источник
Bitcoin core linux console
Copy raw contents
UNIX BUILD NOTES
Some notes on how to build Bitcoin Core in Unix.
(For BSD specific instructions, see build-*bsd.md in this directory.)
Always use absolute paths to configure and compile Bitcoin Core and the dependencies. For example, when specifying the path of the dependency:
Here BDB_PREFIX must be an absolute path — it is defined using $(pwd) which ensures the usage of the absolute path.
This will build bitcoin-qt as well, if the dependencies are met.
These dependencies are required:
Library | Purpose | Description |
---|---|---|
libboost | Utility | Library for threading, data structures, etc |
libevent | Networking | OS independent asynchronous networking |
Library | Purpose | Description |
---|---|---|
miniupnpc | UPnP Support | Firewall-jumping support |
libnatpmp | NAT-PMP Support | Firewall-jumping support |
libdb4.8 | Berkeley DB | Optional, wallet storage (only needed when wallet enabled) |
qt | GUI | GUI toolkit (only needed when GUI enabled) |
libqrencode | QR codes in GUI | Optional for generating QR codes (only needed when GUI enabled) |
univalue | Utility | JSON parsing and encoding (bundled version will be used unless —with-system-univalue passed to configure) |
libzmq3 | ZMQ notification | Optional, allows generating ZMQ notifications (requires ZMQ version >= 4.0.0) |
sqlite3 | SQLite DB | Optional, wallet storage (only needed when wallet enabled) |
systemtap | Tracing (USDT) | Optional, statically defined tracepoints |
For the versions used, see dependencies.md
C++ compilers are memory-hungry. It is recommended to have at least 1.5 GB of memory available when compiling Bitcoin Core. On systems with less, gcc can be tuned to conserve memory with additional CXXFLAGS:
Alternatively, or in addition, debugging information can be skipped for compilation. The default compile flags are -g -O2 , and can be changed with:
Finally, clang (often less resource hungry) can be used instead of gcc, which is used by default:
Linux Distribution Specific Instructions
Dependency Build Instructions
Now, you can either build from self-compiled depends or install the required dependencies:
Berkeley DB is required for the wallet.
Ubuntu and Debian have their own libdb-dev and libdb++-dev packages, but these will install Berkeley DB 5.1 or later. This will break binary wallet compatibility with the distributed executables, which are based on BerkeleyDB 4.8. If you do not care about wallet compatibility, pass —with-incompatible-bdb to configure.
Otherwise, you can build Berkeley DB yourself.
SQLite is required for the descriptor wallet:
To build Bitcoin Core without wallet, see Disable-wallet mode
Optional port mapping libraries (see: —with-miniupnpc , —enable-upnp-default , and —with-natpmp , —enable-natpmp-default ):
ZMQ dependencies (provides ZMQ API):
User-Space, Statically Defined Tracing (USDT) dependencies:
If you want to build bitcoin-qt, make sure that the required packages for Qt development are installed. Qt 5 is necessary to build the GUI. To build without GUI pass —without-gui .
To build with Qt 5 you need the following:
Additionally, to support Wayland protocol for modern desktop environments:
libqrencode (optional) can be installed with:
Once these are installed, they will be found by configure and a bitcoin-qt executable will be built by default.
Dependency Build Instructions
Now, you can either build from self-compiled depends or install the required dependencies:
Berkeley DB is required for the wallet:
Newer Fedora releases, since Fedora 33, have only libdb-devel and libdb-cxx-devel packages, but these will install Berkeley DB 5.3 or later. This will break binary wallet compatibility with the distributed executables, which are based on Berkeley DB 4.8. If you do not care about wallet compatibility, pass —with-incompatible-bdb to configure.
Otherwise, you can build Berkeley DB yourself.
SQLite is required for the descriptor wallet:
To build Bitcoin Core without wallet, see Disable-wallet mode
Optional port mapping libraries (see: —with-miniupnpc , —enable-upnp-default , and —with-natpmp , —enable-natpmp-default ):
ZMQ dependencies (provides ZMQ API):
User-Space, Statically Defined Tracing (USDT) dependencies:
If you want to build bitcoin-qt, make sure that the required packages for Qt development are installed. Qt 5 is necessary to build the GUI. To build without GUI pass —without-gui .
To build with Qt 5 you need the following:
Additionally, to support Wayland protocol for modern desktop environments:
libqrencode (optional) can be installed with:
Once these are installed, they will be found by configure and a bitcoin-qt executable will be built by default.
The release is built with GCC and then «strip bitcoind» to strip the debug symbols, which reduces the executable size by about 90%.
miniupnpc may be used for UPnP port mapping. It can be downloaded from here. UPnP support is compiled in and turned off by default. See the configure options for UPnP behavior desired:
libnatpmp may be used for NAT-PMP port mapping. It can be downloaded from here. NAT-PMP support is compiled in and turned off by default. See the configure options for NAT-PMP behavior desired:
It is recommended to use Berkeley DB 4.8. If you have to build it yourself, you can use the installation script included in contrib/ like so:
from the root of the repository.
Otherwise, you can build Bitcoin Core from self-compiled depends.
Note: You only need Berkeley DB if the wallet is enabled (see Disable-wallet mode).
If you need to build Boost yourself:
To help make your Bitcoin Core installation more secure by making certain attacks impossible to exploit even if a vulnerability is found, binaries are hardened by default. This can be disabled with:
Hardening enables the following features:
Position Independent Executable: Build position independent code to take advantage of Address Space Layout Randomization offered by some kernels. Attackers who can cause execution of code at an arbitrary memory location are thwarted if they don’t know where anything useful is located. The stack and heap are randomly located by default, but this allows the code section to be randomly located as well.
On an AMD64 processor where a library was not compiled with -fPIC, this will cause an error such as: «relocation R_X86_64_32 against `. ‘ can not be used when making a shared object;»
To test that you have built PIE executable, install scanelf, part of paxutils, and use:
The output should contain:
Non-executable Stack: If the stack is executable then trivial stack-based buffer overflow exploits are possible if vulnerable buffers are found. By default, Bitcoin Core should be built with a non-executable stack, but if one of the libraries it uses asks for an executable stack or someone makes a mistake and uses a compiler extension which requires an executable stack, it will silently build an executable without the non-executable stack protection.
To verify that the stack is non-executable after compiling use: scanelf -e ./bitcoin
The output should contain: STK/REL/PTL RW- R— RW-
The STK RW- means that the stack is readable and writeable but not executable.
When the intention is to run only a P2P node without a wallet, Bitcoin Core may be compiled in disable-wallet mode with:
In this case there is no dependency on Berkeley DB 4.8 and SQLite.
Mining is also possible in disable-wallet mode using the getblocktemplate RPC call.
Additional Configure Flags
A list of additional configure flags can be displayed with:
Setup and Build Example: Arch Linux
This example lists the steps necessary to setup and build a command line only, non-wallet distribution of the latest changes on Arch Linux:
Note: Enabling wallet support requires either compiling against a Berkeley DB newer than 4.8 (package db ) using —with-incompatible-bdb , or building and depending on a local version of Berkeley DB 4.8. The readily available Arch Linux packages are currently built using —with-incompatible-bdb according to the PKGBUILD. As mentioned above, when maintaining portability of the wallet between the standard Bitcoin Core distributions and independently built node software is desired, Berkeley DB 4.8 must be used.
These steps can be performed on, for example, an Ubuntu VM. The depends system will also work on other Linux distributions, however the commands for installing the toolchain will be different.
Make sure you install the build requirements mentioned above. Then, install the toolchain and curl:
Источник