12

Previous research:

Are there any consensus rules that prohibit scripts from being too large? I know each individual element of a script has to be less than 520 bytes, as shown here, but a script could still have many many individual elements and create an extremely large block.

For example, a malicious miner wants to make the blockchain as big as possible and creates a coinbase transaction with a particular output that has the OP_RETURN opcode followed by enough data to make their block just less than the 1 MB limit. Will the malicious miner's block, in which 99% of the block data is encoded into a dummy OP_RETURN output, be accepted or rejected?

1

2 Answers 2

12

10,000 bytes. See Bitcoin Core source code: https://github.com/bitcoin/bitcoin/blob/v0.17.0/src/script/script.h#L31-L32 https://github.com/bitcoin/bitcoin/blob/v0.17.0/src/script/interpreter.cpp#L299-L300

Note that the EvalScript function only runs when someone tries to spend a script, so it doesn't apply to unspendable outputs like OP_RETURN. In that case, the consensus rules allow you to include as much data as you want in the output up to the maximum block weight limit. Bitcoin Core has long placed much more restrictive limits on what transactions it'll relay and mine when they contain OP_RETURN outputs, so we rarely see transactions exceeding those limits.

1
  • It was right under my nose :)
    – morsecoder
    Commented Feb 3, 2015 at 21:52
2

There are no checks specifically on OP_RETURN. There is a standardness rule, which is that they must embed up to 40 bytes of data. Of course, if you're mining your own blocks, you can ignore standardness rules.

There is a rule against scripts more than 10 kilobytes long, but since there's no limit on the number of outputs you can create, that's not a meaningful restriction.

However, this isn't a very good way to attack the network. It costs roughly $1000 of electricity to make a block. (You recoup some of that from the Bitcoins you get, of course.) It would take 104 years for 10000 nodes storing your block to cost more than mining it costed you in the first place.

0

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.