7

Any data push greater than 520 bytes in a Bitcoin transaction is not allowed (https://github.com/bitcoin/bitcoin/blob/v0.10.0rc3/src/script/script.h#L18).

The opcode OP_PUSHDATA4 specifies, that the next four bytes contain the number of following bytes to be pushed onto the stack. The smallest number using four bytes is 0x10000000=268435456.

But due to the 520 bytes limit and since 520=0x208, we only need at most two bytes to represent the number 520.

So for example, if I want to push any 520 bytes of data I can do: OP_PUSHDATA2 0208 [520-bytes-of-data]. Right?

In that case, what is the PUSHDATA4 used for?

8

There is currently no real need for an OP_PUSHDATA4, which would allow pushing up to 4GB onto the stack. It was in the original script definition and simply was not disabled when the 520 byte limit was introduced. The only possibility for it to appear in today's scripts is as a non-minimal push and may be caused by a custom client or transaction malleability.

  • Is there any chance that OP_PUSHDATA4 could be reclaimed / redefined for some other use in the future? – Jonathan Cross Sep 24 '17 at 14:31
  • Unlikely, since we need to keep compatibility with existing clients. Clients that did not reclaim would attempt to push huge elements on stack and fail to do so. The good news is that with segwit the scripts are versioned and can redefine all opcodes. – cdecker Sep 24 '17 at 17:35
-2

Update 2019:

As of yesterday OP_PUSHDATA4 is in use for up to 100000 bytes per OP_RETURN on Bitcoin SV. Here is one such tx: https://blockchair.com/bitcoin-sv/transaction/b742886801560f57b4dc824ce3a1719613d8b2d38530909fe988c1ca04cc82af

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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