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?

1 Answer 1

9

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.

2
  • Is there any chance that OP_PUSHDATA4 could be reclaimed / redefined for some other use in the future? Sep 24, 2017 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, 2017 at 17:35

Your Answer

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

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