From: "'Angelo' via Bitcoin Development Mailing List" <bitcoindev@googlegroups.com>
To: Saint Wenhao <saintwenhao@gmail.com>
Cc: "bitcoindev@googlegroups.com" <bitcoindev@googlegroups.com>
Subject: [bitcoindev] Re: [bitcoin-dev] Unbreaking testnet4
Date: Thu, 22 Jan 2026 10:56:57 +0000 [thread overview]
Message-ID: <-XaFaE2DFoVGKF0rABuGC3vtjLoA2zptE5L-xP1FQg3JPwSdc3-AQJZep7AMO3dOYpxD-jK3l2DtoHpz9344ZTQ8vwONoNj8HliVHy4C5fU=@protonmail.com> (raw)
In-Reply-To: <CACgYNOLCvOiHSSpU0m9mGZmjH1JYb1S+_XfGpOFUV+gyJsGNKQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5667 bytes --]
- Yes, but you need some test cases as well.
I added unit tests that test the modified functions in isolation. Check my changes again.
Testnet4 fork behavior (4 tests):
1. testnet4_min_difficulty_pre_fork: At height 149,999, min-difficulty blocks ARE allowed (returns powLimit when block is >20min late)
2. testnet4_min_difficulty_at_fork: At height 150,000, min-difficulty blocks are NOT allowed (returns previous difficulty instead)
3. testnet4_min_difficulty_post_fork: At height 150,001, min-difficulty blocks are NOT allowed.
4. testnet4_permitted_difficulty_transition: PermittedDifficultyTransition() is permissive before fork, strict after.
Other chains unaffected (3 tests):
5. regtest_min_difficulty_unaffected: Regtest still allows min-difficulty at any height (nMinDifficultyBlocksForkHeight=0 means no fork)
6. mainnet_min_difficulty_unaffected: Mainnet unaffected (fPowAllowMinDifficultyBlocks=false)
7. Existing ChainParams_TESTNET4_sanity already verifies basic testnet4 param sanity.
Running the proof-of-work tests, I get no errors detected:
> $ ./build/bin/test_bitcoin --run_test=pow_tests
> Running 21 test cases...
> *** No errors detected
>
> $ ./build/bin/test_bitcoin --run_test=pow_tests/testnet4*
> Running 4 test cases...
>
> *** No errors detected
If you have any other unit tests in mind, let me know, but I think those are enough.
- Also, rejecting all blocks with CPU difficulty would mean, that the updated network will be stuck from time to time, when ASIC miners will come in, raise the difficulty, and then go away, leaving the rest of the users with halted chain.
The network is already in a halted chain, because empty blocks are propagated faster than non-empty, and transactions are confirmed most often when ASIC miners include them in their blocks. When ASIC miners go away with the current model, the users will have to wait for a much longer time, due to empty blocks.
On Monday, January 19th, 2026 at 12:28 PM, Saint Wenhao <saintwenhao@gmail.com> wrote:
>> The changes in the code are minimal.
>
> Yes, but you need some test cases as well.
>
>> We could modify the code to not suffer from the temporary 1-hour block interval if needed.
>
> It is not needed. Testnet4 overproduced around 30k blocks, if we count the time between today, and the Genesis Block. If it will take three months, instead of two weeks, to re-adjust the difficulty, then it wouldn't matter that much, because we already have around 1.5 million more coins, than we should have today.
>
> Also, rejecting all blocks with CPU difficulty would mean, that the updated network will be stuck from time to time, when ASIC miners will come in, raise the difficulty, and then go away, leaving the rest of the users with halted chain.
>
> pon., 19 sty 2026 o 00:35 'Angelo' via Bitcoin Development Mailing List <bitcoindev@googlegroups.com> napisał(a):
>
>> Hello mailing list.
>>
>> I have forked Bitcoin Core and modified the code to fix testnet4 by disabling the min difficulty rule after block 150,000: https://github.com/bitcoin/bitcoin/compare/master...batmanbytes:bitcoin:testnet4-fix
>>
>> The changes in the code are minimal. As I've written in [Bitcointalk](https://bitcointalk.org/index.php?topic=5569103.msg66301279#msg66301279):
>>
>>> I have introduced int nMinDifficultyBlocksForkHeight which is 0 by default in consensus/params.h, only ever used by the CTestNet4Params class. GetNextWorkRequired and PermittedDifficultyTransition are also modified to check whether min difficulty blocks are enabled, and if yes, whether nMinDifficultyBlocksForkHeight is 0 (which would indicate it is not testnet4).
>>
>> With no other changes to the code, during the epoch that includes block 150,000 (which already began at block 149,184), we should expect the block interval to increase by roughly sixfold (to about one hour per block). This is because the effective hashrate would correspond to approximately one-sixth of the difficulty. The difficulty increases by about 6x since there are roughly six times more difficulty-1 blocks than blocks at the normal difficulty.
>>
>> We could modify the code to not suffer from the temporary 1-hour block interval if needed. I'm just interested to see what you think of those changes, so that we can move forward.
>>
>> --
>> You received this message because you are subscribed to the Google Groups "Bitcoin Development Mailing List" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to bitcoindev+unsubscribe@googlegroups.com.
>> To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/85djL2Ah0Mh9Appt934138jLRE23gGmaIr96y8q-clEmMa_APPZLerKrrUZN524_Diq4pOydQLaEOZ3XBy4-sQIPxYODOHreM5RWuNHILto%3D%40protonmail.com.
>
> --
> You received this message because you are subscribed to the Google Groups "Bitcoin Development Mailing List" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to bitcoindev+unsubscribe@googlegroups.com.
> To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/CACgYNOLCvOiHSSpU0m9mGZmjH1JYb1S%2B_XfGpOFUV%2BgyJsGNKQ%40mail.gmail.com.
--
You received this message because you are subscribed to the Google Groups "Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bitcoindev+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/-XaFaE2DFoVGKF0rABuGC3vtjLoA2zptE5L-xP1FQg3JPwSdc3-AQJZep7AMO3dOYpxD-jK3l2DtoHpz9344ZTQ8vwONoNj8HliVHy4C5fU%3D%40protonmail.com.
[-- Attachment #2: Type: text/html, Size: 9686 bytes --]
next prev parent reply other threads:[~2026-01-22 11:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-18 17:26 'Angelo' via Bitcoin Development Mailing List
2026-01-19 8:40 ` Saint Wenhao
2026-01-22 10:56 ` 'Angelo' via Bitcoin Development Mailing List [this message]
[not found] ` <QivViO7YYXUY_b7I-HibvzwD9dftAUl8Yv4nOSRzlCeY12fdtLC5TcAWtqPodMnBeRQ73WPj_OtrSvWlO5mHyQpRYdWbwvslVtxBHJpSqO8=@protonmail.com>
2026-01-26 11:36 ` 'Angelo' via Bitcoin Development Mailing List
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='-XaFaE2DFoVGKF0rABuGC3vtjLoA2zptE5L-xP1FQg3JPwSdc3-AQJZep7AMO3dOYpxD-jK3l2DtoHpz9344ZTQ8vwONoNj8HliVHy4C5fU=@protonmail.com' \
--to=bitcoindev@googlegroups.com \
--cc=bymet4@protonmail.com \
--cc=saintwenhao@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox