Difficulty Adjustment Algorithm (DAA) Change: Affected Software

Below is a WIP list of software that checks for DAA in headers (as opposed to trusting a full node) when interacting with the blockchain, and hence need to be updated for new algorithms when DAA is changed.

Please feel free to post other pieces missed (I’ll edit into main list where I can), and post evidence pointing to code where not immediately obvious.

Full Nodes:

Bitcoin Cash Node
Bitcoin Unlimited
Bitcoin ABC
bchd
Bitcoin Verde
Knuth
Flowee the Hub

Wallets:

bitcoincashj
Crescent (using bitcoincashj)
Electron-Cash
Edge Wallet
BRD
Neutrino

Pool software:

P2Pool (positively affected, currently not checking DAA)

2 Likes

Projects known to be NOT affected by DAA change:

Bitcore + Bitpay wallet
Bitcoin.com wallet
Coinomi
Coinbase wallet
Blockbook
Openbazaar (via Blockbook backend?)
Fulcrum/Electrs/Electrumx (serves headers, but don’t check them)
SLPDB
Bitbox/bch-api
Badger wallet
BTC.com pool
Memo.cash
Bitdb
Zapit wallet
Flowee P2PNet/Pay/Seeder
Stamp

Unknown status, move when ascertained:

Ledger Live
Trezor official client
IFWallet

1 Like

Actually, p2pool is slightly affected. Normally, p2pool just uses the getblocktemplate API results from bitcoind to construct new blocks, which allows p2pool to rely on bitcoind’s DAA implementation. However, when p2pool hears about a new block header from a p2pool peer instead of from bitcoind (e.g. when the header propagates significantly faster than the block), then p2pool will construct its own block header and do “SPV” mining/VFM of an empty block. This feature is rarely used on BCH, due to the small average block size and rapid block propagation speed, but has been used on BTC a few times. I’ve mined at least one BTC block myself with p2pool using this feature.

That said, the current p2pool code does not even support the current BCH DAA. The code currently just assumes that the new difficulty (nBits) is equal to the previous block’s difficulty, which is valid for 2015 out of 2016 blocks in BTC and LTC, but generally invalid on BCH.

Adding support for the existing BCH DAA to p2pool would be difficult, as p2pool does not maintain a record of the last 146 BCH block headers. However, adding support for ASERT would be easy, as it only requires the most recent block’s header, which p2pool definitely has (it’s bb in the code above).

So p2pool is slightly affected, but in a positive way.

3 Likes

Thanks, revised P2Pool’s position

1 Like

Would you be willing to update the list with a stance from each project if they send it to you?

1 Like

I’m pretty sure BRD does not use bitcoincashj

I think their equivalent is “breadwallet-core”: https://github.com/breadwallet/breadwallet-core

I remember back when Aaron Voisine was originally implementing breadwallet, he decided to implement it all himself rather then use bitcoinj at the time.

3 Likes

Zapit wallet uses bitbox (flutter), bitdb and slpdb. Is there something that we should be aware of or we would be considered under the Not Affected category.

2 Likes

Sounds like it should not be affected - adding to list

Flowee P2PNet, and its users Flowee Seeder and Flowee Pay all check chain-length using PoW, but do not calculate ‘next pow’ for each block.

Which means that they are not affected by DAA changes.

1 Like

sure, though this is more intended to be a “readiness” count eventually.