Jason C


Chained 0-Conf Transactions on Memo 2018-08-16

Broadcast Failures

On Memo.cash there have been some broadcast errors and reports from users that actions weren't going through. The symptoms are that all actions stop working, and then eventually start working again once a block is mined.

Looking at corresponding logs, some transactions were getting rejected by the network with this error message:

Code: REJECT_NONSTANDARD
Reason: too-long-mempool-chain

This error occurs when you chain too many unconfirmed transactions. The default setting for both Bitcoin ABC and Bitcoin Unlimited is a maximum of 25 unconfirmed "descendants".

Actions on Memo often use the output of the previous action. This means, if you perform more than 25 actions between blocks, you can run into this error. Once the transactions are confirmed in a block, the counter resets. This explains the symptoms people are experiencing.

Mitigating the Problem

In order to mitigate this issue, multiple UTXOs would need to be used. Then each UTXO could have it's own chain of 25 unconfirmed transactions.

This isn't trivial to implement and only mitigates the issue. Cases where there are 100's or 1,000's of actions in a single block would be difficult to account for. And that might not be too uncommon of a use case if posting a long message in the future when long messages are supported.

Ancestor and Descendant Limits

A solution that should be considered, is removing these limits from BCH node software. If BCH is safe for 0-conf, I'm sure there will be many use cases that generate more than 25 transactions in a 10 min - 2 hour time period (due to variation in block times, occasionally there are 1-2 hour gaps).

By having these limits, it incentivizes creating more UTXOs which creates unnecessary additional overhead on nodes. It also creates a burden on application developers to work around the restrictions.

These limits were added in July 2015 and were originally set to 100 ancestors and 1,000 descendants. And then in October 2015 the limits were both reduced to 25.

Even though these are configurable settings on both ABC and BU, it doesn't look like anyone is changing from the default. In order to have wide adoption, the defaults would need to be raised or the limits removed altogether.

These limits were added unnecessarily by core developers and removing them is likely more along the lines of Satoshi's vision.


← Back to all blog posts