Raw транзакции – это способ создания транзакций и управления Bitcoin кошельком через командную строку, где полностью вручную можно указать все возможные параметры и обойти ограничения, вносимые графическими оболочками клиентов.
Консоль можно открыть через bitcoin-Qt. Меню: Help -> Debug Window -> вкладка “Concole”. Либо, если используется демон bitcoind, то можно выполнять команды напрямую через терминал операционной системы, например в Windows:
Какие существуют команды?
Все возможные команды, которые можно использовать в консоли, можно посмотреть командой help. Их действительно очень много. В данной статье будут рассмотрены команды, которые требуются для создания raw транзакций.
minconf и maxconf – необязательные параметры, заставляющие показывать только те монеты, которые имеют количество подтверждений в промежутке между этими значениями включительно. Тем самым можно сократить список вывода, так как иногда он может быть очень длинным, если кошелек активно используется.
Пример команды, выводящей список монет на указанном адресе с числом подтверждений от 10 и больше:
Вывод состоит из 5 элементов:
Более подробно о все элементах, из которых состоит транзакция, можно прочитать в статье Анатомия Bitcoin транзакций, а также статье Транзакции Bitcoin.
txid – id транзакции, которая будет на входе создаваемой
vout – какой выход этой транзакции мы используем.
amount – сколько BTC отправляем.
Следует быть внимательным и не забыть включить в транзакцию комиссию, а то она может быть никогда не включена в блок.
Пример команды:
В данной транзакции 0,003 монеты отправится новому получателю, для 0,005 указываем наш адрес, чтобы они остались при нас. И 0,0005 BTC – оставшиеся монеты - на комиссию.
Ответ возвращает хэш транзакции:
Или, если отправляемые монеты будут браться из нескольких транзакций, то тогда написание команды усложнится, и для двух входящих будет выглядеть примерно так:
По аналогии можно написать команду для сколь угодно длинной транзакции.
Стоит отметить, что после выполнения createrawtransaction транзакция не является подписанной, она не хранится в кошельке и не передается в сеть. То есть вы еще ничего никому не отправили. Вы, по сути, только узнали ее хэш для себя.
Также следует сказать, что никаких проверок корректности транзакции не делается, поэтому можно легко создать невозможную транзакцию или транзакцию с недостаточным размером комиссии, для ее включения в блок.
Если кошелек заблокирован паролем, нужно сначала его ввести перед последующим подписанием транзакции, использовав команду:
timeout – указывается число секунд, сколько авторизация с этим паролем будет действовать. После истечения этого времени, потребуется заново выполнять команду walletpassphrase чтобы подписать транзакцию.
Возвратит:
"complete" : true – показывает, что все прошло удачно. Полученный хэш и указываем в следующей команде:
Возвращает id транзакции или ошибку, если команда по какой-то причине не сработала.
Можно сразу сказать, что если вы столкнулись с ошибкой: "TX rejected (code -22)", то вот возможные причины:
- Вы указали хэш транзакции, который получили до ее подписи.
- Сумма отправляемых монет больше, чем сумма монет на указанных в транзакции инпутах.
- Выполнение команды signrawtransaction вернуло результат "false".
- Вы используете input, который уже был отправлен когда-то до этого.
Дополнительные сведения об ошибках можно смотреть в файлике debug.log, который находится там же, где лежит файл кошелька.
Где может понадобиться использование raw транзакций?
Подписывайтесь на новости и их анализ в нашем Telegram канале!