Bitcoind.exe

У биткоина есть как графический интерфейс именумеый bitcoin-qt.exe так и консольный, bitcoind.exe. Если первый удобен для использования человеком, то без сетевой службы довольно сложно сделать интернет магазин или какой-либо иной сервис, принимающий биткоины в качестве оплаты.

Для работы нужно запустить один экземпляр bitcoind, чтобы он работал в качестве полноценного узла сети и отдавать ему команды с помощью еще одной копии bitcoind. Взаимодействие между ними происходит по JSON-RPC через 8332 tcp порт. Для того чтобы они узнавали и доверяли друг другу нужно задать rpcpassword, который прописывается в файле ~/.bitcoin/bitcoin.conf как rpcpassword=xxxxxx. Если у вас нет такого файла то его нужно создать. Туда же можно прописать и другие параметры из тех, что указываются при запуске демона.

Полный список параметров можно получить запустив bitcoind с ключем —help или -?, вот пример того, что мы увидим в ответ:

Bitcoin version v0.8.5-beta

Usage:
bitcoind [options]
bitcoind [options] <command> [params]  Send command to -server or bitcoind
bitcoind [options] help                List commands
bitcoind [options] help <command>      Get help for a command

Options:
-?                     This help message
-conf=<file>           Specify configuration file (default: bitcoin.conf)
-pid=<file>            Specify pid file (default: bitcoind.pid)
-gen                   Generate coins (default: 0)
-datadir=<dir>         Specify data directory
-dbcache=<n>           Set database cache size in megabytes (default: 25)
-timeout=<n>           Specify connection timeout in milliseconds (default: 5000)
-proxy=<ip:port>       Connect through socks proxy
-socks=<n>             Select the version of socks proxy to use (4-5, default: 5)
-tor=<ip:port>         Use proxy to reach tor hidden services (default: same as -proxy)
-dns                   Allow DNS lookups for -addnode, -seednode and -connect
-port=<port>           Listen for connections on <port> (default: 8333 or testnet: 18333)
-maxconnections=<n>    Maintain at most <n> connections to peers (default: 125)
-addnode=<ip>          Add a node to connect to and attempt to keep the connection open
-connect=<ip>          Connect only to the specified node(s)
-seednode=<ip>         Connect to a node to retrieve peer addresses, and disconnect
-externalip=<ip>       Specify your own public address
-onlynet=<net>         Only connect to nodes in network <net> (IPv4, IPv6 or Tor)
-discover              Discover own IP address (default: 1 when listening and no -externalip)
-checkpoints           Only accept block chain matching built-in checkpoints (default: 1)
-listen                Accept connections from outside (default: 1 if no -proxy or -connect)
-bind=<addr>           Bind to given address and always listen on it. Use [host]:port notation for IPv6
-dnsseed               Find peers using DNS lookup (default: 1 unless -connect)
-banscore=<n>          Threshold for disconnecting misbehaving peers (default: 100)
-bantime=<n>           Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
-maxreceivebuffer=<n>  Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000)
-maxsendbuffer=<n>     Maximum per-connection send buffer, <n>*1000 bytes (default: 1000)
-upnp                  Use UPnP to map the listening port (default: 0)
-paytxfee=<amt>        Fee per KB to add to transactions you send
-testnet               Use the test network
-debug                 Output extra debugging information. Implies all other -debug* options
-debugnet              Output extra network debugging information
-logtimestamps         Prepend debug output with timestamp
-shrinkdebugfile       Shrink debug.log file on client startup (default: 1 when no -debug)
-printtoconsole        Send trace/debug info to console instead of debug.log file
-printtodebugger       Send trace/debug info to debugger
-rpcuser=<user>        Username for JSON-RPC connections
-rpcpassword=<pw>      Password for JSON-RPC connections
-rpcport=<port>        Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332)
-rpcallowip=<ip>       Allow JSON-RPC connections from specified IP address
-rpcconnect=<ip>       Send commands to node running on <ip> (default: 127.0.0.1)
-rpcthreads=<n>        Set the number of threads to service RPC calls (default: 4)
-blocknotify=<cmd>     Execute command when the best block changes (%s in cmd is replaced by block hash)
-walletnotify=<cmd>    Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)
-alertnotify=<cmd>     Execute command when a relevant alert is received (%s in cmd is replaced by message)
-upgradewallet         Upgrade wallet to latest format
-keypool=<n>           Set key pool size to <n> (default: 100)
-rescan                Rescan the block chain for missing wallet transactions
-salvagewallet         Attempt to recover private keys from a corrupt wallet.dat
-checkblocks=<n>       How many blocks to check at startup (default: 288, 0 = all)
-checklevel=<n>        How thorough the block verification is (0-4, default: 3)
-txindex               Maintain a full transaction index (default: 0)
-loadblock=<file>      Imports blocks from external blk000??.dat file
-reindex               Rebuild block chain index from current blk000??.dat files
-par=<n>               Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0)

Block creation options:
-blockminsize=<n>      Set minimum block size in bytes (default: 0)
-blockmaxsize=<n>      Set maximum block size in bytes (default: 250000)
-blockprioritysize=<n> Set maximum size of high-priority/low-fee transactions in bytes (default: 27000)

SSL options: (see the Bitcoin Wiki for SSL setup instructions)
-rpcssl                                  Use OpenSSL (https) for JSON-RPC connections
-rpcsslcertificatechainfile=<file.cert>  Server certificate file (default: server.cert)
-rpcsslprivatekeyfile=<file.pem>         Server private key (default: server.pem)
-rpcsslciphers=<ciphers>                 Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)

Вот описание некоторых из них:
-conf — позволяет задать файл конфигурации отличный от ~/.bitcoin/bitcoin.conf
-pid — указать файл, в который будет писаться pid процесса демона
-gen — после старта начать майнить биткоины (он это будет пытаться делать на cpu, что крайне неэффективно)
-gen=0 — не майнить биткоины (если в файле конфигурации указано иное)
-datadir= — использовать вместо ~/.bitcoin/ указанный путь
-timeout= — таймаут tcp соединения
-proxy=<ip:port> — соединятся через указанный SOCKS4 прокси-сервер, например через tor
-port= — использовать указанный порт вместо 8333
-maxconnections= — ограничить число одновременных соединений, по умолчанию 125
-addnode= — так же подключится и к указанному узлу, тут полезно указать адреса пулов для ускорения транзакций, можно использовать несколько раз
-connect= — подключится только к указанному узлу, полезно, если вы хотите загрузить блоки с другого компьютера в локальной сети не загружая интернет-канал
-noirc — не использовать irc для поиска узлов и анонса собственного адреса (например irc запрещен хостингом, что встречается довольно часто)
-nolisten — не принимать входящие соединения
-nodnsseed — не использовать DNS для поиска узлов
-upnp — Пытаться использовать UPnP для того чтобы пробросить порт. Полезно, если вы заначены роутером, использующим внешний ip и поддерживающим UPnP. Не нужно, если вы имеете внешний ip напрямую и не имеет смысла, если ваш роутер не имеет внешнего ip.
-paytxfee= — установить размер комиссию (в биткоинах), собственная логика клиента имеет приоритет над этим значением
-daemon — запускаться в фоне
-testnet — использовать тестовую сеть
-debug — писать отладочную информацию
-logtimestamps — снабжать лог временными метками
-printtoconsole — использовать stdout вместо debug.log
-rpcuser= и -rpcpassword — имя пользователя и пароль для JSON-RPC, как для лемона так и для клиента
-rpcport= — использовать для JSON-RPC порт, отличный от 8332
-rpcallowip= — разрешить принимать команды с указанного ip, по умолчанию команды принимаются только с 127.0.0.1, можно использовать несколько раз
-rpcconnect= — отправлять команды на указанный узел а не на 127.0.0.1
-keypool= — сгенерировать указанное количество ключей при старте, по умолчанию — 100
-rescan — перечитать цепочку блоков, полезно если у вас поврежден blkindex.dat или есть зависшие транзакции в кошельке
Так же в 0.6 версии появилась довольно полезная опция -blocknotify=, которая запускает указанную команду при получении нового блока, например для обработчика платежей.

Большую часть перечисленных параметров можно указывать и в bitcoin.conf.

При работе в режиме демона клиент использует множество «виртуальных» аккаунтов, для каждого из которых ведет свой учет баланса. Такая логика может существенно упростить создание какого-либо сервиса, поскольку достаточно привязать пользователей сервиса к аккаунтам bitcoind. Баланс на аккаунте может быть как положительным так и отрицательным. Аккаунт, используемый по умолчанию — «» (пустая строка).

После запуска демона должно пройти какое-то время, чтобы он проинициализировался и начал ожидать команд. Список команд, которые можно отдать демону, можно получить, запустив bitcoind с аргументом help (без —).

Вот пример вывода:

backupwallet <destination>
encryptwallet <passphrase>
getaccount <bitcoinaddress>
getaccountaddress <account>
getaddressesbyaccount <account>
getbalance [account] [minconf=1]
getblockcount
getconnectioncount
getdifficulty
getgenerate
gethashespersec
getinfo
getmemorypool [data]
getnewaddress [account]
getreceivedbyaccount <account> [minconf=1]
getreceivedbyaddress <bitcoinaddress> [minconf=1]
gettransaction <txid>
getwork [data]
help [command]
keypoolrefill
listaccounts [minconf=1]
listreceivedbyaccount [minconf=1] [includeempty=false]
listreceivedbyaddress [minconf=1] [includeempty=false]
listsinceblock [blockid] [target-confirmations]
listtransactions [account] [count=10] [from=0]
move <fromaccount> <toaccount> <amount> [minconf=1] [comment]
sendfrom <fromaccount> <tobitcoinaddress> <amount> [minconf=1] [comment] [comment-to]
sendmany <fromaccount> {address:amount,…} [minconf=1] [comment]
sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]
setaccount <bitcoinaddress> <account>
setgenerate <generate> [genproclimit]
settxfee <amount>
signmessage <bitcoinaddress> <message>
stop
validateaddress <bitcoinaddress>
verifymessage <bitcoinaddress> <signature> <message>

Описание некоторых комманд:
backupwallet — сделать резервную копию wallet.dat
encryptwallet — зашифровать кошелек (необратимо!)
getaccount — Узнать, какому аккаунту принадлежит указанный адрес. Пареметр — bitcoin адрес, результат — строка с именем аккаунта.
getaddressesbyaccount — Вывести список адресов, принадлежащих указанному аккаунту. Параметр — имя аккаунта, результат — список bitcoin-адресов в формате JSON.
getaccountaddress — Сгенерировать еще один адрес для указанного аккаунта. Параметр — имя аккаунта, результат — строка с bitcoin-адресом.
getbalance — Вывести баланс аккаунта для указанного количества подтверждений. Первый необязательный параметр — имя аккаунта, второй необязательный параметр — количество подтверждений, результат — положительное или отрицательное число c 8ю знаками после точки.
getblockcount — Вывести текущее колиечество блоков. Результат — целое число.
getconnectioncount — Вывести текущее количество соединений. Результат — целое число.
getdifficulty — Вывести текущую сложность. Результат — число с 8ю знаками после точки.
getgenerate — Вывести состояние генерации. Результат — true или false.
getinfo — Вывести ряд текущих параметров в виде JSON-массива.
getnewaddress — Сгенерировать еще один адрес для указанного аккаунта. Параметр — имя аккаунта, результат — строка с bitcoin-адресом.
getreceivedbyaccount — Вывести общее количество принятых средств на аккаунт без учета отправленных. Первый параметр — имя аккаунта, второй необязательный параметр — количество подтверждений, результат — число с 8ю знаками после точки.
getreceivedbyaddress — Вывести список входящих транзакций на указанный адрес. Первый параметр — bitcoin-адрес, второй необязательный параметр — количество подтверждений, результат — JSON массив с входящими транзакциями на указанный адрес.
gettransaction — Вывести информацию по транзакции.
help — Вывести список доступных комманд или описание команды, если она указана аргументом.
listaccounts — Вывести список аккаунтов с балансом на них. Результат — JSON-массив.
listreceivedbyaccount — Вывести JSON-массив с аккантами, общим количеством принятых на них средств без учета отправленных и количеством подтверждений.
listreceivedbyaddress — Тожесамое, но с детализацией по bitcoin-адресам.
listtransactions — Вывести список транзакций в JSON формате.
move — Перевести средства с одного аккаунта на другой без осуществления транзакции в сети.
sendfrom — Отправить средства с указанного аккаунта.
sendmany — Отправить средства с указанного аккаунта на множество адресов.
sendtoaddress — Отправить средства с аккаунта по умолчанию.
setaccount — Сделать адрес принадлежащим аккаунту.
setgenerate — Включить/выключить генерацию блоков. Параметр — true или false, не возвращает ничего.
settxfee — Установить комиссию.
signmessage — Подписать сообщение, полезно для подтверждения принадлежности адреса.
stop — Остановить демон. До полной остановки должно пройти какое-то время.
validateaddress — Проверить правильность адреса. Так же возвращает аккаунт, которому он принадлежит, если таковой имеется.
verifymessage — Проверить подпись сообщения.