Non-standard >80 byte op_return

Bitcoin has two sets of rules. The consensus rules, which all blocks/transaction must comply with. And standard rules which are optional and set by default in Bitcoin Core.

The 80 byte limit for op_return is a standard rule. Node operators can disable it.

I am testing to see if I can get such a non-standard >80 byte op_return accepted by a miner.

Step 1:
Make a long broadcast message with Electrum-Counterparty/broadcast_text.html at master · Jpja/Electrum-Counterparty · GitHub. Need to comment out the line for input length (currently line #80 //print_result("Input text is too long"); return; ).

Step 2:
Create transaction with Electrum. This goes well until broadcasting the tx. The server returns an error Some of the outputs pay to a non-standard script.

Step 3:
Export → Copy to clipboard

Step 4:
Push raw tx with BlockCypher - Push Raw Bitcoin Hexadecimal Transaction | BlockCypher

Step 5:
Wait until confirmed - BTC Transaction 547d2cca830d0a1c7b8105846f192b5f165e196d9721d7e05378f5b79fdef02b | BlockCypher

The last time I tried, the transaction stayed in mempool for a few days. And then dropped out. Did not make it to a block. However, the fee I paid was very low, about 2 sat/byte.

This time I’m using 20 sat/byte. Let’s see if a higher reward convinces a miner to accept it.

A similar >80-byte op_return on testnet went through without a problem.

This is as expected, as testnet nodes do not enforce “standard” rules.

1 day passed, the tx is dropped from mempool

To be clear, all we know is that

  1. BlockCypher does not have the tx in their mempool anymore.
  2. No miner has so far included the tx in a block.

In theory, the tx could have been relayed to other nodes which may still keep a copy. There is still a chance that a miner adds the transaction to a block.

This holds true until I spend the input in another transaction, which I won’t do for a while. The fee ratio is 20 sat/byte, significantly more than the current level of 5 sat/byte. A profit maximizing miner is incentivized to include it.