2

I would like to generate a transaction with createrawtransaction such that it can be passed to submitblock along with the block header.

I tried to use:

[{"txid":"0000000000000000000000000000000000000000000000000000000000000000","vout":0}]{"bc1qd8hza5w3mz7t3tudtlplm9xht4sjwg0e3t9gy2":6.25000000}

but it's not outputting a coinbase transaction:

020000000100000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0140be40250000000016001469ee2ed1d1d8bcb8af8d5fc3fd94d75d612721f900000000
8
  • How is that not a coinbase? The null input is the key characteristic.
    – pinhead
    Commented Jul 18, 2020 at 11:02
  • i was test it with fresh blockchain with 100% valid block , with markle root from this tx , submitblock was no accept it and say "Block does not start with a coinbase (code -22)"
    – tseries
    Commented Jul 18, 2020 at 12:06
  • there are also other coinbase rules as well such as bip34 height in scriptSig.
    – pinhead
    Commented Jul 18, 2020 at 12:08
  • ok, but how add them for make coinbase valid for submit block ? a dont see any other rules at createrawtransaction help.
    – tseries
    Commented Jul 18, 2020 at 12:15
  • Oh I see one more thing -- the vout for coinbase input should be 0xffffffff not 0
    – pinhead
    Commented Jul 18, 2020 at 12:17

3 Answers 3

3

It is not possible to create a coinbase transaction using createrawtransaction. There are numerous rules that coinbase transactions must follow that the createrawtransaction RPC does not have the ability to set the fields to meet those rules. For example, BIP 34 requires the coinbase contain the block's height in the scriptSig. However createrawtransaction does not allow you to set the anything in the scriptSig.

Miners must use software that can independently create the coinbase transaction. Miners actually prefer doing this because they want to be able to modify the coinbase to use as an extra nonce so that when they run out of nonces, they don't necessarily have to re-select the transactions to include in the block. Instead they can change the coinbase to cause the merkle root to change.

1

According to BIP 34, you must include the block Height to your Coinbase transaction, otherwise, it will be invalid,

The scryptSig of your coinbase transaction, must begin with number of pushed bytes (Actually is 0x03) and then the hex representation of your candidate block, dont forget the little endian conversion

0

I recommend looking over this code in python which will illustrate how the coinbase is constructed, it is the simplest example I can think of, and is commented well - https://github.com/vsergeev/ntgbtminer/blob/master/ntgbtminer.py#L166

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.