Что такое broadcast raw transaction Биткоин

Raw транзакции – это способ создания транзакций и управления Bitcoin кошельком через командную строку, где полностью вручную можно указать все возможные параметры и обойти ограничения, вносимые графическими оболочками клиентов.

Консоль можно открыть через bitcoin-Qt. Меню: Help -> Debug Window -> вкладка “Concole”. Либо, если используется демон bitcoind, то можно выполнять команды напрямую через терминал операционной системы, например в Windows:

Какие существуют команды?

Все возможные команды, которые можно использовать в консоли, можно посмотреть командой help . Их действительно очень много. В данной статье будут рассмотрены команды, которые требуются для создания raw транзакций.

listunspent [minconf] [maxconf] [«address». ] — выводит данные о монетах, содержащихся в кошельке.

minconf и maxconf – необязательные параметры, заставляющие показывать только те монеты, которые имеют количество подтверждений в промежутке между этими значениями включительно. Тем самым можно сократить список вывода, так как иногда он может быть очень длинным, если кошелек активно используется.

Пример команды, выводящей список монет на указанном адресе с числом подтверждений от 10 и больше:

Вывод состоит из 5 элементов:

  1. txid –ID транзакции;
  2. vout – номер выхода транзакции;
  3. scriptPubKey – хэш открытого ключа получателя (Ваш).
  4. amount – количество монет
  5. confirmations – число подтверждений транзакции.

Более подробно о все элементах, из которых состоит транзакция, можно прочитать в статье Анатомия Bitcoin транзакций, а также статье Транзакции Bitcoin.

createrawtransaction [<"txid":txid,"vout":n>. ] — создание транзакции на отправку монет на указанный адрес (или несколько адресов).

txid – id транзакции, которая будет на входе создаваемой

vout – какой выход этой транзакции мы используем.

amount – сколько BTC отправляем.

Следует быть внимательным и не забыть включить в транзакцию комиссию, а то она может быть никогда не включена в блок.

В данной транзакции 0,003 монеты отправится новому получателю, для 0,005 указываем наш адрес, чтобы они остались при нас. И 0,0005 BTC – оставшиеся монеты — на комиссию.

Ответ возвращает хэш транзакции:

Или, если отправляемые монеты будут браться из нескольких транзакций, то тогда написание команды усложнится, и для двух входящих будет выглядеть примерно так:

По аналогии можно написать команду для сколь угодно длинной транзакции.

Стоит отметить, что после выполнения createrawtransaction транзакция не является подписанной, она не хранится в кошельке и не передается в сеть. То есть вы еще ничего никому не отправили. Вы, по сути, только узнали ее хэш для себя.

Также следует сказать, что никаких проверок корректности транзакции не делается, поэтому можно легко создать невозможную транзакцию или транзакцию с недостаточным размером комиссии, для ее включения в блок.

decoderawtransaction — возвращает подробные данные о транзакции. Таким образом можно дополнительно проверить, что транзакция сформирована правильно. В качестве hex string вставляем полученный нами ранее хэш транзакции.

Читайте также:  Биткоин block explorer что это

Если кошелек заблокирован паролем, нужно сначала его ввести перед последующим подписанием транзакции, использовав команду:

walletpassphrase your_pass timeout

timeout – указывается число секунд, сколько авторизация с этим паролем будет действовать. После истечения этого времени, потребуется заново выполнять команду walletpassphrase чтобы подписать транзакцию.

«complete» : true – показывает, что все прошло удачно. Полученный хэш и указываем в следующей команде:

sendrawtransaction — Передает raw транзакцию в сеть.

Возвращает id транзакции или ошибку, если команда по какой-то причине не сработала.

Можно сразу сказать, что если вы столкнулись с ошибкой: «TX rejected (code -22)», то вот возможные причины:

— Вы указали хэш транзакции, который получили до ее подписи.

— Сумма отправляемых монет больше, чем сумма монет на указанных в транзакции инпутах.

— Выполнение команды signrawtransaction вернуло результат «false».

— Вы используете input, который уже был отправлен когда-то до этого.

Дополнительные сведения об ошибках можно смотреть в файлике debug.log, который находится там же, где лежит файл кошелька.

Где может понадобиться использование raw транзакций?

  1. Многоподписанные транзакции.
  2. Управление через консоль.
  3. Выбор монет для отправки (с каких адресов и сколько).
  4. Возможность вручную указать желаемый размер комиссии.
  5. Самостоятельная повторная отправка в сеть транзакции, которая не была включена в блок до этого. Стоит напомнить, что , Bitcoin-Qt и bitcoind сами периодически автоматически ретранслируют транзакции в сеть, пока они не будут приняты в блок.

Подписывайтесь на новости и их анализ в нашем Telegram канале!

The «raw transaction API» was introduced with Bitcoin-Qt/bitcoind version 0.7. It gives developers or very sophisticated end-users low-level access to transaction creation and broadcast.

Returns an array of unspent transaction outputs in the wallet that have between minconf and maxconf (inclusive) confirmations. Each output is a 5-element object with keys: txid, output, scriptPubKey, amount, confirmations. txid is the hexadecimal transaction id, output is which output of that transaction, scriptPubKey is the hexadecimal-encoded CScript for that output, amount is the value of that output and confirmations is the transaction’s depth in the chain.

Temporarily lock (unlock=false) or unlock (unlock=true) specified transaction outputs. A locked transaction output will not be chosen by automatic coin selection, when spending bitcoins. Locks are stored in memory only. Nodes start with zero locked outputs, and the locked output list is always cleared (by virtue of process exit) when a node stops or fails.

List all temporarily locked transaction outputs.

Create a transaction spending given inputs (array of objects containing transaction outputs to spend), sending to given address(es). Returns the hex-encoded transaction in a string. Note that the transaction’s inputs are not signed, and it is not stored in the wallet or transmitted to the network.

Читайте также:  Что будет с Биткоином после хардфорка

Also note that NO transaction validity checks are done; it is easy to create invalid transactions or transactions that will not be relayed/mined by the network because they contain insufficient fees.

Returns JSON object with information about a serialized, hex-encoded transaction.

If verbose=0, returns serialized, hex-encoded data for transaction txid. If verbose is non-zero, returns a JSON Object containing information about the transaction. Returns an error if is unknown.

Sign as many inputs as possible for raw transaction (serialized, hex-encoded). The first argument may be several variations of the same transaction concatenated together; signatures from all of them will be combined together, along with signatures for keys in the local wallet. The optional second argument is an array of parent transaction outputs, so you can create a chain of raw transactions that depend on each other before sending them to the network. Third optional argument is an array of base58-encoded private keys that, if given, will be the only keys used to sign the transaction. The fourth optional argument is a string that specifies how the signature hash is computed, and can be «ALL», «NONE», «SINGLE», «ALL|ANYONECANPAY», «NONE|ANYONECANPAY», or «SINGLE|ANYONECANPAY». Returns json object with keys:

  • hex : raw transaction with signature(s) (hex-encoded string)
  • complete : 1 if rawtx is completely signed, 0 if signatures are missing.

If no private keys are given and the wallet is locked, requires that the wallet be unlocked with walletpassphrase first.

Submits raw transaction (serialized, hex-encoded) to local node and network. Returns transaction id, or an error if the transaction is invalid for any reason.

Funds are sitting in one or more multisignature transaction outputs, and it is time to gather signatures and spend them.

Assumption: you know the multisignature outputs’ .

  • Create a raw transaction to spend, using createrawtransaction.
  • Use signrawtransaction to add your signatures (after unlocking the wallet, if necessary).
  • Give the transaction to the other person(s) to sign.
  • You or they submit the transaction to the network using sendrawtransaction.

You must be careful to include an appropriate transaction fee, or the sendrawtransaction method is likely to fail (either immediately or, worse, the transaction will never confirm).

These lower-level routines will be useful for debugging and testing; listunspent gives a detailed list of the state of the wallet, and sendrawtx might be used to test double-spend-handling.

You want fine-grained control over exactly what coins in the wallet are spent.

  • Get a list of not-yet-spent outputs with listunspent
  • Create a transaction using createrawtransaction
  • Apply signatures using signrawtransaction
  • Submit it using sendrawtransaction
Читайте также:  Как сгенерировать красивый Биткоин адрес

Note that you are responsible for preventing accidental double-spends.

You want to specify, on a per-transaction basis, how much to pay in fees. Or you want to implement your own policy for how often transactions that are not immediately included in blocks are re-broadcast to the network.

  • Maintain a list of not-yet-spent, confirmed outputs with listunspent (refreshed every time a new block is found, using the -blocknotify feature).
  • Create a transaction with exactly the amount of fees you wish with createrawtransaction
  • Apply signatures using signrawtransaction
  • Submit it with sendrawtransaction
  • Re-submit it periodicially with sendrawtransaction if it does not get into a block.

If you want to re-broadcast a transaction right away, you can use the getrawtransaction and sendrawtransaction API calls to do that. As a bash shell-script one-liner it would be:

  • sendrawtransaction $(getrawtransaction $TXID)

(note that Bitcoin-Qt/bitcoind automatically re-transmit wallet transactions periodically until they are accepted into a block).

If you have a raw transaction and want to make sure all of its signatures are correct, you can use the signrawtransaction API call. Pass in the hex-encoded raw transaction, any inputs that bitcoind doesn’t yet know about, and an empty array of private keys to use to sign the transaction. Passing an empty array of private keys will prevent signrawtransaction from doing any signing; if it returns «complete»:1 then all of the existing signatures are valid and there are no signatures missing.

How to broadcast raw transaction using bitcoin-ruby? I used bitcoin-ruby gem from https://github.com/lian/bitcoin-ruby

The fee of a transaction is just the difference between the input and the output value. In you case, your output value is 0.0005 BTC. If you choose an input which is larger than the output you want to send as well as the fee, you have to create a change output to send the rest back to your wallet as well, otherwise it will all go to the miners as fees. For example, if your input was 0.25 BTC, and you wanted to send 0.15 BTC and only pay 0.01 BTC fee, your transaction would need to have two outputs, one for 0.15 BTC, and one for 0.09 BTC back to an address you own, so that the total fee is just (0.25-(0.15+0.9) = 0.01)

Читайте далее:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Adblock detector