test: wallet: Check fallbackfee default argument behavior. #34382

pull davidgumberg wants to merge 2 commits into bitcoin:master from davidgumberg:2026-01-22-fallbackfee_experiments changing 1 files +33 −3
  1. davidgumberg commented at 9:15 pm on January 22, 2026: contributor

    In an unmerged branch of #32636 (https://github.com/bitcoin/bitcoin/commit/097e00f90765915b0f8353a4eb5ebb18ceae2a66) I unintentionally broke default -fallbackfee behavior, but this was not caught by any tests. See #32636 (review).

    Something like the following diff does not cause any test failures on master despite causing a behavior change:

     0diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
     1index bc27018cd2..079610fba0 100644
     2--- a/src/wallet/wallet.cpp
     3+++ b/src/wallet/wallet.cpp
     4@@ -3048,24 +3048,24 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
     5     if (const auto arg{args.GetArg("-fallbackfee")}) {
     6         std::optional<CAmount> fallback_fee = ParseMoney(*arg);
     7         if (!fallback_fee) {
     8             error = strprintf(_("Invalid amount for %s=<amount>: '%s'"), "-fallbackfee", *arg);
     9             return nullptr;
    10         } else if (fallback_fee.value() > HIGH_TX_FEE_PER_KB) {
    11             warnings.push_back(AmountHighWarn("-fallbackfee") + Untranslated(" ") +
    12                                _("This is the transaction fee you may pay when fee estimates are not available."));
    13         }
    14         walletInstance->m_fallback_fee = CFeeRate{fallback_fee.value()};
    15+        // Disable fallback fee in case value was set to 0, enable if non-null value
    16+        walletInstance->m_allow_fallback_fee = walletInstance->m_fallback_fee.GetFeePerK() != 0;
    17     }
    18
    19-    // Disable fallback fee in case value was set to 0, enable if non-null value
    20-    walletInstance->m_allow_fallback_fee = walletInstance->m_fallback_fee.GetFeePerK() != 0;
    

    This PR adds a functional test check that when no -fallbackfee argument is set and fee estimation is not possible, that sending fails because -fallbackfee is disabled by default.

  2. DrahtBot added the label Tests on Jan 22, 2026
  3. DrahtBot commented at 9:15 pm on January 22, 2026: contributor

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/34382.

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK w0xlt, ismaelsadeeq
    Approach ACK polespinasa

    If your review is incorrectly listed, please copy-paste <!–meta-tag:bot-skip–> into the comment that the bot should ignore.

  4. test: wallet: -fallbackfee default is 0 699e2b4dde
  5. test: wallet: Warning for excessive fallback fee. 28a64d4ef8
  6. davidgumberg force-pushed on Jan 22, 2026
  7. DrahtBot added the label CI failed on Jan 22, 2026
  8. furszy commented at 9:23 pm on January 22, 2026: member
    not related, but the fee arg changes remind me to #29278. Writing it so we don’t forget it.
  9. DrahtBot removed the label CI failed on Jan 22, 2026
  10. w0xlt commented at 10:48 pm on January 22, 2026: contributor

    ACK 28a64d4ef8b872e3687350f93fd3dd78717f795f

    nit: This snippet could go in the second commit instead.

    0        # Sending a transaction with a fallback fee set succeeds. Use the
    1        # largest fallbackfee value that doesn't trigger a warning.
    2        self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    3        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    4        self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    5        self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    
  11. davidgumberg commented at 1:59 am on January 23, 2026: contributor

    nit: This snippet could go in the second commit instead.

    This replaces the default sendtoaddress test which gets deleted in the first commit, so to be atomic I think it should probably stay in the first commit.

  12. in test/functional/wallet_fallbackfee.py:47 in 699e2b4dde
    45 
    46+        # Sending a transaction with a fallback fee set succeeds. Use the
    47+        # largest fallbackfee value that doesn't trigger a warning.
    48+        self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    49+        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    50+        self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    


    polespinasa commented at 5:54 pm on February 24, 2026:

    Should the feerate used for the transaction created by fundrawtransaction be exactly what fallbackfee set?

    If that the case it is not what is happening here:

     0$ ./build/test/functional/wallet_fallbackfee.py 
     12026-02-24T17:51:00.304094Z TestFramework (INFO): PRNG seed is: 7181096759883981303
     22026-02-24T17:51:00.304546Z TestFramework (INFO): Initializing test directory /tmp/bitcoin_func_test_99f1niyg
     32026-02-24T17:51:01.927838Z TestFramework (ERROR): Unexpected exception
     4Traceback (most recent call last):
     5  File "/home/sliv3r/Documentos/Projectes/BitcoinCore/bitcoin/test/functional/test_framework/test_framework.py", line 142, in main
     6    self.run_test()
     7  File "/home/sliv3r/Documentos/Projectes/BitcoinCore/bitcoin/./build/test/functional/wallet_fallbackfee.py", line 53, in run_test
     8    assert_equal(tx2['fee'], HIGH_TX_FEE_PER_KB)
     9  File "/home/sliv3r/Documentos/Projectes/BitcoinCore/bitcoin/test/functional/test_framework/util.py", line 80, in assert_equal
    10    raise AssertionError("not(%s)" % " == ".join(str(arg) for arg in (thing1, thing2) + args))
    11AssertionError: not(0.00141000 == 0.01)
    

    Code:

     0$ git diff
     1diff --git a/test/functional/wallet_fallbackfee.py b/test/functional/wallet_fallbackfee.py
     2index 64df3931f9..2af2a84cd3 100755
     3--- a/test/functional/wallet_fallbackfee.py
     4+++ b/test/functional/wallet_fallbackfee.py
     5@@ -8,7 +8,10 @@ from decimal import Decimal
     6 
     7 from test_framework.blocktools import COINBASE_MATURITY
     8 from test_framework.test_framework import BitcoinTestFramework
     9-from test_framework.util import assert_raises_rpc_error
    10+from test_framework.util import (
    11+    assert_raises_rpc_error,
    12+    assert_equal,
    13+)
    14 
    15 HIGH_TX_FEE_PER_KB = Decimal('0.01')
    16 
    17@@ -44,9 +47,10 @@ class WalletRBFTest(BitcoinTestFramework):
    18         # largest fallbackfee value that doesn't trigger a warning.
    19         self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    20         self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    21-        self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    22+        tx2 = self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    23         self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    24 
    25+        assert_equal(tx2['fee'], HIGH_TX_FEE_PER_KB)
    26         # Starting a node with a large fallback fee set...
    27         excessive_fallback = HIGH_TX_FEE_PER_KB + Decimal('0.00000001')
    28         self.restart_node(0, extra_args=[f"-fallbackfee={excessive_fallback}"])
    

    rkrux commented at 1:15 pm on February 25, 2026:

    This appears to be incorrect comparison.

    tx2['fee'] is absolute fee whereas HIGH_TX_FEE_PER_KB is feerate.


    polespinasa commented at 6:45 pm on February 25, 2026:

    Oh you are right, my bad sorry. It does work as expected:

     0$ git diff
     1diff --git a/test/functional/wallet_fallbackfee.py b/test/functional/wallet_fallbackfee.py
     2index 64df3931f9..c91caadce5 100755
     3--- a/test/functional/wallet_fallbackfee.py
     4+++ b/test/functional/wallet_fallbackfee.py
     5@@ -8,7 +8,12 @@ from decimal import Decimal
     6 
     7 from test_framework.blocktools import COINBASE_MATURITY
     8 from test_framework.test_framework import BitcoinTestFramework
     9-from test_framework.util import assert_raises_rpc_error
    10+from test_framework.util import (
    11+    assert_raises_rpc_error,
    12+    assert_equal,
    13+)
    14+
    15+from test_framework.messages import CTransaction, from_hex
    16 
    17 HIGH_TX_FEE_PER_KB = Decimal('0.01')
    18 
    19@@ -44,7 +49,11 @@ class WalletRBFTest(BitcoinTestFramework):
    20         # largest fallbackfee value that doesn't trigger a warning.
    21         self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    22         self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    23-        self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    24+        tx2 = self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    25+        tx = CTransaction()
    26+        tx = from_hex(tx, tx2['hex'])
    27+        assert_equal(round(Decimal((tx2['fee']*1000)/(tx.get_vsize())),2), HIGH_TX_FEE_PER_KB)
    28+
    29         self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    30 
    31         # Starting a node with a large fallback fee set...
    

    I wonder what is the precision that fallbackfee has?

  13. in test/functional/wallet_fallbackfee.py:46 in 699e2b4dde
    44         assert_raises_rpc_error(-6, "Fee estimation failed", lambda: self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1}))
    45 
    46+        # Sending a transaction with a fallback fee set succeeds. Use the
    47+        # largest fallbackfee value that doesn't trigger a warning.
    48+        self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    49+        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    


    polespinasa commented at 5:57 pm on February 24, 2026:

    Maybe we can actually assert here that the feerate used is set because of fallback being used:

     0$ git diff
     1diff --git a/test/functional/wallet_fallbackfee.py b/test/functional/wallet_fallbackfee.py
     2index 64df3931f9..98344e804f 100755
     3--- a/test/functional/wallet_fallbackfee.py
     4+++ b/test/functional/wallet_fallbackfee.py
     5@@ -8,7 +8,10 @@ from decimal import Decimal
     6 
     7 from test_framework.blocktools import COINBASE_MATURITY
     8 from test_framework.test_framework import BitcoinTestFramework
     9-from test_framework.util import assert_raises_rpc_error
    10+from test_framework.util import (
    11+    assert_raises_rpc_error,
    12+    assert_equal
    13+)
    14 
    15 HIGH_TX_FEE_PER_KB = Decimal('0.01')
    16 
    17@@ -43,7 +46,7 @@ class WalletRBFTest(BitcoinTestFramework):
    18         # Sending a transaction with a fallback fee set succeeds. Use the
    19         # largest fallbackfee value that doesn't trigger a warning.
    20         self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    21-        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    22+        assert_equal(self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1, verbose=True)['fee_reason'], f"Fallback fee")
    23         self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    24         self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    25 
    

    rkrux commented at 1:21 pm on February 25, 2026:
    +1 for this suggestion, adds robustness in testing.
  14. in test/functional/wallet_fallbackfee.py:48 in 699e2b4dde
    46+        # Sending a transaction with a fallback fee set succeeds. Use the
    47+        # largest fallbackfee value that doesn't trigger a warning.
    48+        self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    49+        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    50+        self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    51+        self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    


    polespinasa commented at 6:00 pm on February 24, 2026:

    Same as #34382 (review) we could check the fee reason

     0$ git diff
     1diff --git a/test/functional/wallet_fallbackfee.py b/test/functional/wallet_fallbackfee.py
     2index 64df3931f9..61bc4cdc8a 100755
     3--- a/test/functional/wallet_fallbackfee.py
     4+++ b/test/functional/wallet_fallbackfee.py
     5@@ -8,7 +8,10 @@ from decimal import Decimal
     6 
     7 from test_framework.blocktools import COINBASE_MATURITY
     8 from test_framework.test_framework import BitcoinTestFramework
     9-from test_framework.util import assert_raises_rpc_error
    10+from test_framework.util import (
    11+    assert_raises_rpc_error,
    12+    assert_equal
    13+)
    14 
    15 HIGH_TX_FEE_PER_KB = Decimal('0.01')
    16 
    17@@ -45,7 +48,7 @@ class WalletRBFTest(BitcoinTestFramework):
    18         self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    19         self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    20         self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    21-        self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    22+        assert_equal(self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1}, verbose=True)["fee_reason"], f"Fallback fee")
    23 
    24         # Starting a node with a large fallback fee set...
    25         excessive_fallback = HIGH_TX_FEE_PER_KB + Decimal('0.00000001')
    
  15. polespinasa commented at 6:01 pm on February 24, 2026: member

    Approach ACK 28a64d4ef8b872e3687350f93fd3dd78717f795f

    Just left some ideas for improving the test

  16. in test/functional/wallet_fallbackfee.py:16 in 28a64d4ef8
    11 from test_framework.util import assert_raises_rpc_error
    12 
    13+HIGH_TX_FEE_PER_KB = Decimal('0.01')
    14+
    15+
    16 class WalletRBFTest(BitcoinTestFramework):
    


    rkrux commented at 1:30 pm on February 25, 2026:

    Can take this PR as an opportunity to rename this class. I don’t see any RBF stuff happening, Idk why it is called so.

     0--- a/test/functional/wallet_fallbackfee.py
     1+++ b/test/functional/wallet_fallbackfee.py
     2@@ -13,7 +13,7 @@ from test_framework.util import assert_raises_rpc_error
     3 HIGH_TX_FEE_PER_KB = Decimal('0.01')
     4 
     5 
     6-class WalletRBFTest(BitcoinTestFramework):
     7+class WalletFallbackFeeTest(BitcoinTestFramework):
     8     def set_test_params(self):
     9         self.num_nodes = 1
    10         self.setup_clean_chain = True
    11@@ -59,4 +59,4 @@ class WalletRBFTest(BitcoinTestFramework):
    12         self.stop_node(0, expected_stderr=expected_error)
    13 
    14 if __name__ == '__main__':
    15-    WalletRBFTest(__file__).main()
    16+    WalletFallbackFeeTest(__file__).main()
    17(END)
    
  17. in test/functional/wallet_fallbackfee.py:56 in 28a64d4ef8
    54+        excessive_fallback = HIGH_TX_FEE_PER_KB + Decimal('0.00000001')
    55+        self.restart_node(0, extra_args=[f"-fallbackfee={excessive_fallback}"])
    56+        # Works...
    57+        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    58+        self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    59+        self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    


    rkrux commented at 1:50 pm on February 25, 2026:

    Opinionated suggestion: I have seen these 3 RPCs 4 times in the test. Consider the following diff that reads slightly better but doesn’t really reduce the lines.

     0diff --git a/test/functional/wallet_fallbackfee.py b/test/functional/wallet_fallbackfee.py
     1index 64df3931f9..9c8316a100 100755
     2--- a/test/functional/wallet_fallbackfee.py
     3+++ b/test/functional/wallet_fallbackfee.py
     4@@ -12,6 +12,11 @@ from test_framework.util import assert_raises_rpc_error
     5 
     6 HIGH_TX_FEE_PER_KB = Decimal('0.01')
     7 
     8+TRANSACTION_RPCS = [
     9+    lambda node: node.sendtoaddress(node.getnewaddress(), 1),
    10+    lambda node: node.fundrawtransaction(node.createrawtransaction([], {node.getnewaddress(): 1})),
    11+    lambda node: node.sendmany("", {node.getnewaddress(): 1}),
    12+]
    13 
    14 class WalletRBFTest(BitcoinTestFramework):
    15     def set_test_params(self):
    16@@ -30,30 +35,26 @@ class WalletRBFTest(BitcoinTestFramework):
    17         self.restart_node(0)
    18 
    19         # Sending a transaction with no -fallbackfee setting fails, since the default value is 0.
    20-        assert_raises_rpc_error(-6, "Fee estimation failed", lambda: self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1))
    21-        assert_raises_rpc_error(-4, "Fee estimation failed", lambda: self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1})))
    22-        assert_raises_rpc_error(-6, "Fee estimation failed", lambda: self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1}))
    23+        for rpc in TRANSACTION_RPCS:
    24+            assert_raises_rpc_error(None, "Fee estimation failed", lambda: rpc(self.nodes[0]))
    25 
    26         # Sending a tx with explicitly disabled fallback fee fails.
    27         self.restart_node(0, extra_args=["-fallbackfee=0"])
    28-        assert_raises_rpc_error(-6, "Fee estimation failed", lambda: self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1))
    29-        assert_raises_rpc_error(-4, "Fee estimation failed", lambda: self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1})))
    30-        assert_raises_rpc_error(-6, "Fee estimation failed", lambda: self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1}))
    31+        for rpc in TRANSACTION_RPCS:
    32+            assert_raises_rpc_error(None, "Fee estimation failed", lambda: rpc(self.nodes[0]))
    33 
    34         # Sending a transaction with a fallback fee set succeeds. Use the
    35         # largest fallbackfee value that doesn't trigger a warning.
    36         self.restart_node(0, extra_args=[f"-fallbackfee={HIGH_TX_FEE_PER_KB}"])
    37-        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    38-        self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    39-        self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    40+        for rpc in TRANSACTION_RPCS:
    41+            rpc(self.nodes[0])
    42 
    43         # Starting a node with a large fallback fee set...
    44         excessive_fallback = HIGH_TX_FEE_PER_KB + Decimal('0.00000001')
    45         self.restart_node(0, extra_args=[f"-fallbackfee={excessive_fallback}"])
    46         # Works...
    47-        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
    48-        self.nodes[0].fundrawtransaction(self.nodes[0].createrawtransaction([], {self.nodes[0].getnewaddress(): 1}))
    49-        self.nodes[0].sendmany("", {self.nodes[0].getnewaddress(): 1})
    50+        for rpc in TRANSACTION_RPCS:
    51+            rpc(self.nodes[0])
    52         # But results in a warning message.
    53         expected_error = "Warning: -fallbackfee is set very high! This is the transaction fee you may pay when fee estimates are not available."
    54         self.stop_node(0, expected_stderr=expected_error)
    
  18. ismaelsadeeq approved
  19. ismaelsadeeq commented at 9:43 am on March 12, 2026: member

    ACK 28a64d4ef8b872e3687350f93fd3dd78717f795f

    In an unmerged branch of #32636 (https://github.com/bitcoin/bitcoin/commit/097e00f90765915b0f8353a4eb5ebb18ceae2a66) I unintentionally broke default -fallbackfee behavior, but this was not caught by any tests. See #32636 (review).

    The linked comment is incorrect, should be #32636 (review)

    Apart from that I think review comments from @polespinasa and @rkrux are nice to haves that can be done in a follow-up.

    I’ve verified that with diff

     0diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
     1index bc27018cd2..30dd68b155 100644
     2--- a/src/wallet/wallet.cpp
     3+++ b/src/wallet/wallet.cpp
     4@@ -3055,10 +3055,11 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
     5                                _("This is the transaction fee you may pay when fee estimates are not available."));
     6         }
     7         walletInstance->m_fallback_fee = CFeeRate{fallback_fee.value()};
     8+
     9+        // Disable fallback fee in case value was set to 0, enable if non-null value
    10+        walletInstance->m_allow_fallback_fee = walletInstance->m_fallback_fee.GetFeePerK() != 0;
    11     }
    12
    13-    // Disable fallback fee in case value was set to 0, enable if non-null value
    14-    walletInstance->m_allow_fallback_fee = walletInstance->m_fallback_fee.GetFeePerK() != 0;
    15
    16     if (const auto arg{args.GetArg("-discardfee")}) {
    17         std::optional<CAmount> discard_fee = ParseMoney(*arg);
    
     02026-03-12T09:38:56.622703Z TestFramework (INFO): PRNG seed is: 2067377870230985435
     12026-03-12T09:38:56.623048Z TestFramework (INFO): Initializing test directory /tmp/bitcoin_func_test_u50t3b7q
     22026-03-12T09:38:57.392184Z TestFramework (ERROR): Unexpected exception
     3Traceback (most recent call last):
     4  File "/home/ismaelsadeeq/bitcoin-dev/bitcoin-core/bitcoin/test/functional/test_framework/test_framework.py", line 142, in main
     5    self.run_test()
     6  File "/home/ismaelsadeeq/bitcoin-dev/bitcoin-core/bitcoin/build_dev_mode/test/functional/wallet_fallbackfee.py", line 33, in run_test
     7    assert_raises_rpc_error(-6, "Fee estimation failed", lambda: self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1))
     8  File "/home/ismaelsadeeq/bitcoin-dev/bitcoin-core/bitcoin/test/functional/test_framework/util.py", line 157, in assert_raises_rpc_error
     9    assert try_rpc(code, message, fun, *args, **kwds), "No exception raised"
    10           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    11AssertionError: No exception raised
    122026-03-12T09:38:57.442873Z TestFramework (INFO): Not stopping nodes as test failed. The dangling processes will be cleaned up later.
    132026-03-12T09:38:57.442944Z TestFramework (WARNING): Not cleaning up dir /tmp/bitcoin_func_test_u50t3b7q
    142026-03-12T09:38:57.442968Z TestFramework (ERROR): Test failed. Test logging available at /tmp/bitcoin_func_test_u50t3b7q/test_framework.log
    152026-03-12T09:38:57.443015Z TestFramework (ERROR):
    162026-03-12T09:38:57.443071Z TestFramework (ERROR): Hint: Call /home/ismaelsadeeq/bitcoin-dev/bitcoin-core/bitcoin/test/functional/combine_logs.py '/tmp/bitcoin_func_test_u50t3b7q' to consolidate all logs
    172026-03-12T09:38:57.443091Z TestFramework (ERROR):
    182026-03-12T09:38:57.443108Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
    192026-03-12T09:38:57.443136Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues
    202026-03-12T09:38:57.443153Z TestFramework (ERROR):
    21[node 0] Cleaning up leftover process
    

    While on master it passes.

  20. DrahtBot requested review from polespinasa on Mar 12, 2026
  21. achow101 commented at 8:51 pm on March 13, 2026: member

    nice to haves that can be done in a follow-up.

    This PR is small enough and not so significant that it needs followups. If those changes are going to be done, then they should be done in this PR.


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-03-24 06:13 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me