PUSHDATA4 unnecessary?

7

1

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?

Bjarne

Posted 2016-04-11T22:51:43.910

Reputation: 752

Answers

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.

cdecker

Posted 2016-04-11T22:51:43.910

Reputation: 7 878

Is there any chance that OP_PUSHDATA4 could be reclaimed / redefined for some other use in the future?Jonathan Cross 2017-09-24T14:31:17.527

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 2017-09-24T17:35:26.393

-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

Satchmo

Posted 2016-04-11T22:51:43.910

Reputation: 11