Page MenuHomePhabricator

test: Add mockable steady clock, tests for PCP and NATPMP implementations
ClosedPublic

Authored by PiRK on Mar 31 2026, 08:19.

Details

Summary

The first commit was applied to D19759 (*net: Add optional length checking to CService::SetSockAddr*)

util: Add mockable steady_clock

This adds a NodeSteadyClock, which is a steady_clock that can be mocked
with millisecond precision.

net: Use mockable steady clock in PCP implementation

This will be needed for the test harness.

test: Add tests for PCP and NATPMP implementations

Add a mock for a simple scriptable UDP server, and use this to test
various code paths (including successful mappings, timeouts and errors)
in the PCP and NATPMP implementations.

qa: cover PROTOCOL_ERROR variant in PCP unit tests

This concludes backport of core#31022
Depends on D19760

Test Plan

ninja check

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Tail of the build log:

[401/594] Linking C executable src/secp256k1/examples/schnorr_example
[402/594] Building CXX object src/CMakeFiles/server.dir/torcontrol.cpp.o
[403/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/coins.cpp.o
[404/594] Building CXX object src/CMakeFiles/server.dir/validationinterface.cpp.o
[405/594] Building CXX object src/CMakeFiles/server.dir/rpc/avalanche.cpp.o
[406/594] Building CXX object src/CMakeFiles/server.dir/txmempool.cpp.o
[407/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[408/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[409/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[410/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[411/594] Building CXX object src/CMakeFiles/bitcoind.dir/bitcoind.cpp.o
[412/594] Building CXX object src/CMakeFiles/server.dir/rpc/rawtransaction.cpp.o
[413/594] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[414/594] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[415/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[416/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/random.cpp.o
[417/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[418/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[419/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[420/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[421/594] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[422/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[423/594] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[424/594] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[425/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[426/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[427/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[428/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[429/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[430/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[431/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[432/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[433/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[434/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[435/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[436/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[437/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[438/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[439/594] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[440/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[441/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[442/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[443/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[444/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[445/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[446/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[447/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[448/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[449/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[450/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[451/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[452/594] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[453/594] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[454/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[455/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[456/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[457/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[458/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1

Tail of the build log:

[618/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/intro.cpp.o
[619/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/crypto_hash.cpp.o
[620/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/data.cpp.o
[621/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoin-qt-base_autogen/mocs_compilation.cpp.o
[622/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/examples.cpp.o
[623/672] Linking CXX executable src/bitcoin-chainstate
FAILED: src/bitcoin-chainstate 
: && /usr/bin/c++ -Werror -g -O2 -fuse-ld=gold -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -lstdc++fs -fPIE -pie src/CMakeFiles/bitcoin-chainstate.dir/bitcoin-chainstate.cpp.o -o src/bitcoin-chainstate  /usr/lib/x86_64-linux-gnu/libjemalloc_pic.a  -lstdc++fs  src/libbitcoinkernel.a  src/crypto/libcrypto.a  src/crypto/libcrypto_sse4.1.a  src/crypto/libcrypto_avx2.a  src/crypto/libcrypto_shani.a  src/univalue/libunivalue.a  src/secp256k1/libsecp256k1.a  src/leveldb/libleveldb.a  src/crc32c/libcrc32c.a  /usr/lib/x86_64-linux-gnu/libjemalloc_pic.a  -lm  -lstdc++fs && :
/work/src/net.cpp:2360: error: undefined reference to 'GetLocalAddresses()'
collect2: error: ld returned 1 exit status
[624/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/hashpadding.cpp.o
[625/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/clientmodel.cpp.o
[626/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/lockedpool.cpp.o
[627/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/guiutil.cpp.o
[628/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsdialog.cpp.o
[629/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsmodel.cpp.o
[630/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/nanobench.cpp.o
[631/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o
[632/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/gcs_filter.cpp.o
[633/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/pool.cpp.o
[634/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/prevector.cpp.o
[635/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/poly1305.cpp.o
[636/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rollingbloom.cpp.o
[637/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/checkblock.cpp.o
[638/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/merkle_root.cpp.o
[639/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/streams_findbyte.cpp.o
[640/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/strencodings.cpp.o
[641/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/crypto_aes.cpp.o
[642/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/verify_script.cpp.o
[643/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoin.cpp.o
[644/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/platformstyle.cpp.o
[645/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvalidatedlineedit.cpp.o
[646/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvaluecombobox.cpp.o
[647/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/block_assemble.cpp.o
[648/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/util_time.cpp.o
[649/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/chained_tx.cpp.o
[650/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/bench.cpp.o
[651/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/duplicate_inputs.cpp.o
[652/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/load_external.cpp.o
[653/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin_locale.cpp.o
[654/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin.cpp.o
[655/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/mempool_eviction.cpp.o
[656/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/mempool_stress.cpp.o
[657/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/peer_eviction.cpp.o
[658/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rpc_mempool.cpp.o
[659/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/readwriteblock.cpp.o
[660/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/trafficgraphwidget.cpp.o
[661/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rpc_blockchain.cpp.o
[662/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/peertablemodel.cpp.o
[663/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/utilitydialog.cpp.o
[664/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/splashscreen.cpp.o
[665/672] Linking CXX executable src/bench/bitcoin-bench
[666/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/rpcconsole.cpp.o
[667/672] Linking CXX static library src/qt/libbitcoin-qt-base.a
[668/672] Automatic MOC for target bitcoin-qt
[669/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/bitcoin-qt_autogen/mocs_compilation.cpp.o
[670/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/main.cpp.o
[671/672] Linking CXX executable src/qt/bitcoin-qt
ninja: build stopped: cannot make progress due to previous errors.
Build build-without-wallet failed with exit code 1

Tail of the build log:

tests/test_iguana.py::test_invalid_inputindex ##teamcity[testStarted timestamp='2026-03-31T08:56:29.172' captureStandardOutput='false' flowId='tests.test_iguana.test_invalid_inputindex' metainfo='test_invalid_inputindex' name='tests.test_iguana.test_invalid_inputindex']
PASSED                     [ 25%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.192' duration='19' flowId='tests.test_iguana.test_invalid_inputindex' name='tests.test_iguana.test_invalid_inputindex']

tests/test_iguana.py::test_sig_push_only ##teamcity[testStarted timestamp='2026-03-31T08:56:29.193' captureStandardOutput='false' flowId='tests.test_iguana.test_sig_push_only' metainfo='test_sig_push_only' name='tests.test_iguana.test_sig_push_only']
PASSED                          [ 30%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.246' duration='52' flowId='tests.test_iguana.test_sig_push_only' name='tests.test_iguana.test_sig_push_only']

tests/test_iguana.py::test_script_sig_success ##teamcity[testStarted timestamp='2026-03-31T08:56:29.246' captureStandardOutput='false' flowId='tests.test_iguana.test_script_sig_success' metainfo='test_script_sig_success' name='tests.test_iguana.test_script_sig_success']
PASSED                     [ 35%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.301' duration='54' flowId='tests.test_iguana.test_script_sig_success' name='tests.test_iguana.test_script_sig_success']

tests/test_iguana.py::test_script_sig_invalid_opcode_encoding ##teamcity[testStarted timestamp='2026-03-31T08:56:29.302' captureStandardOutput='false' flowId='tests.test_iguana.test_script_sig_invalid_opcode_encoding' metainfo='test_script_sig_invalid_opcode_encoding' name='tests.test_iguana.test_script_sig_invalid_opcode_encoding']
PASSED     [ 40%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.345' duration='42' flowId='tests.test_iguana.test_script_sig_invalid_opcode_encoding' name='tests.test_iguana.test_script_sig_invalid_opcode_encoding']

tests/test_iguana.py::test_script_pub_key_success ##teamcity[testStarted timestamp='2026-03-31T08:56:29.346' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_success' metainfo='test_script_pub_key_success' name='tests.test_iguana.test_script_pub_key_success']
PASSED                 [ 45%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.388' duration='41' flowId='tests.test_iguana.test_script_pub_key_success' name='tests.test_iguana.test_script_pub_key_success']

tests/test_iguana.py::test_script_pub_key_failure ##teamcity[testStarted timestamp='2026-03-31T08:56:29.388' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_failure' metainfo='test_script_pub_key_failure' name='tests.test_iguana.test_script_pub_key_failure']
PASSED                 [ 50%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.404' duration='14' flowId='tests.test_iguana.test_script_pub_key_failure' name='tests.test_iguana.test_script_pub_key_failure']

tests/test_iguana.py::test_script_pub_key_empty_stack ##teamcity[testStarted timestamp='2026-03-31T08:56:29.404' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_empty_stack' metainfo='test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']
PASSED             [ 55%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.420' duration='14' flowId='tests.test_iguana.test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']

tests/test_iguana.py::test_script_pub_key_false_stack ##teamcity[testStarted timestamp='2026-03-31T08:56:29.420' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_false_stack' metainfo='test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']
PASSED             [ 60%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.425' duration='3' flowId='tests.test_iguana.test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']

tests/test_iguana.py::test_script_pub_key_cleanstack ##teamcity[testStarted timestamp='2026-03-31T08:56:29.425' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_cleanstack' metainfo='test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']
PASSED              [ 65%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.433' duration='7' flowId='tests.test_iguana.test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']

tests/test_iguana.py::test_redeem_script_success ##teamcity[testStarted timestamp='2026-03-31T08:56:29.433' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_success' metainfo='test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']
PASSED                  [ 70%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.454' duration='20' flowId='tests.test_iguana.test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']

tests/test_iguana.py::test_redeem_script_error ##teamcity[testStarted timestamp='2026-03-31T08:56:29.455' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_error' metainfo='test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']
PASSED                    [ 75%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.464' duration='8' flowId='tests.test_iguana.test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']

tests/test_iguana.py::test_redeem_script_exception ##teamcity[testStarted timestamp='2026-03-31T08:56:29.465' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_exception' metainfo='test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']
PASSED                [ 80%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.474' duration='8' flowId='tests.test_iguana.test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']

tests/test_iguana.py::test_redeem_script_empty_stack ##teamcity[testStarted timestamp='2026-03-31T08:56:29.475' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_empty_stack' metainfo='test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']
PASSED              [ 85%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.492' duration='16' flowId='tests.test_iguana.test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']

tests/test_iguana.py::test_redeem_script_false ##teamcity[testStarted timestamp='2026-03-31T08:56:29.492' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_false' metainfo='test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']
PASSED                    [ 90%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.509' duration='16' flowId='tests.test_iguana.test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']

tests/test_iguana.py::test_redeem_script_cleanstack ##teamcity[testStarted timestamp='2026-03-31T08:56:29.510' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_cleanstack' metainfo='test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']
PASSED               [ 95%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.516' duration='4' flowId='tests.test_iguana.test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']

tests/test_iguana.py::test_redeem_script_input_sigchecks ##teamcity[testStarted timestamp='2026-03-31T08:56:29.516' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' metainfo='test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']
PASSED          [100%]##teamcity[testFinished timestamp='2026-03-31T08:56:29.565' duration='47' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']


============================== 20 passed in 0.60s ==============================
[238/544] Running seeder test suite
PASSED: seeder test suite
[251/544] Running pow test suite
PASSED: pow test suite
[254/544] Running bitcoin-qt test suite
PASSED: bitcoin-qt test suite
[261/544] Running avalanche test suite
PASSED: avalanche test suite
ninja: build stopped: cannot make progress due to previous errors.
Build build-debug failed with exit code 1

Tail of the build log:

[412/604] Linking C executable src/secp256k1/examples/ecdh_example
[413/604] Linking C executable src/secp256k1/examples/schnorr_example
[414/604] Building CXX object src/CMakeFiles/server.dir/torcontrol.cpp.o
[415/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[416/604] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[417/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[418/604] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[419/604] Building CXX object src/CMakeFiles/server.dir/txmempool.cpp.o
[420/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[421/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/coins.cpp.o
[422/604] Building CXX object src/CMakeFiles/bitcoind.dir/bitcoind.cpp.o
[423/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/random.cpp.o
[424/604] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[425/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[426/604] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[427/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[428/604] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[429/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[430/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[431/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[432/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[433/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[434/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[435/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[436/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[437/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[438/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[439/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[440/604] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[441/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[442/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[443/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[444/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[445/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[446/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[447/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[448/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[449/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[450/604] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[451/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[452/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[453/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[454/604] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[455/604] Linking CXX static library chronik/libchronik-bridge.a
[456/604] Linking CXX static library chronik/libchronik.a
[457/604] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[458/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[459/604] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[460/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[461/604] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[462/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[463/604] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[464/604] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[465/604] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[466/604] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[467/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[468/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[469/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang-tidy failed with exit code 1

Tail of the build log:

wallet_watchonly.py --usecli                     | ✓ Passed  | 1 s
chronik_avalanche.py                             | ○ Skipped | 0 s
chronik_block.py                                 | ○ Skipped | 0 s
chronik_block_header.py                          | ○ Skipped | 0 s
chronik_block_info.py                            | ○ Skipped | 0 s
chronik_block_txs.py                             | ○ Skipped | 0 s
chronik_blockchain_info.py                       | ○ Skipped | 0 s
chronik_blocks.py                                | ○ Skipped | 0 s
chronik_broadcast_tx.py                          | ○ Skipped | 0 s
chronik_chronik_info.py                          | ○ Skipped | 0 s
chronik_cors.py                                  | ○ Skipped | 0 s
chronik_disable_token_index.py                   | ○ Skipped | 0 s
chronik_disallow_prune.py                        | ○ Skipped | 0 s
chronik_electrum_basic.py                        | ○ Skipped | 0 s
chronik_electrum_blockchain.py                   | ○ Skipped | 0 s
chronik_lokad_id_group.py                        | ○ Skipped | 0 s
chronik_mempool_conflicts.py                     | ○ Skipped | 0 s
chronik_mempool_disconnectpool.py                | ○ Skipped | 0 s
chronik_pause.py                                 | ○ Skipped | 0 s
chronik_plugin_groups.py                         | ○ Skipped | 0 s
chronik_plugins.py                               | ○ Skipped | 0 s
chronik_plugins_setup.py                         | ○ Skipped | 0 s
chronik_raw_tx.py                                | ○ Skipped | 0 s
chronik_resync.py                                | ○ Skipped | 0 s
chronik_script_confirmed_txs.py                  | ○ Skipped | 0 s
chronik_script_history.py                        | ○ Skipped | 0 s
chronik_script_unconfirmed_txs.py                | ○ Skipped | 0 s
chronik_script_utxos.py                          | ○ Skipped | 0 s
chronik_scripthash.py                            | ○ Skipped | 0 s
chronik_serve.py                                 | ○ Skipped | 0 s
chronik_shutdown.py                              | ○ Skipped | 0 s
chronik_spent_by.py                              | ○ Skipped | 0 s
chronik_token_alp.py                             | ○ Skipped | 0 s
chronik_token_broadcast_txs.py                   | ○ Skipped | 0 s
chronik_token_burn.py                            | ○ Skipped | 0 s
chronik_token_id_group.py                        | ○ Skipped | 0 s
chronik_token_parse_failure.py                   | ○ Skipped | 0 s
chronik_token_script_group.py                    | ○ Skipped | 0 s
chronik_token_slp_fungible.py                    | ○ Skipped | 0 s
chronik_token_slp_mint_vault.py                  | ○ Skipped | 0 s
chronik_token_slp_nft1.py                        | ○ Skipped | 0 s
chronik_tx.py                                    | ○ Skipped | 0 s
chronik_tx_removal_order.py                      | ○ Skipped | 0 s
chronik_unconfirmed_txs.py                       | ○ Skipped | 0 s
chronik_ws.py                                    | ○ Skipped | 0 s
chronik_ws_avalanche.py                          | ○ Skipped | 0 s
chronik_ws_ordering.py                           | ○ Skipped | 0 s
chronik_ws_ping.py                               | ○ Skipped | 0 s
chronik_ws_script.py                             | ○ Skipped | 0 s
feature_bind_port_discover.py                    | ○ Skipped | 0 s
feature_bind_port_externalip.py                  | ○ Skipped | 0 s
interface_usdt_net.py                            | ○ Skipped | 0 s
interface_usdt_utxocache.py                      | ○ Skipped | 0 s
interface_usdt_validation.py                     | ○ Skipped | 0 s

ALL                                              | ✓ Passed  | 1301 s (accumulated) 
Runtime: 109 s

ninja: build stopped: cannot make progress due to previous errors.
Build build-diff failed with exit code 1

Tail of the build log:

[401/594] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[402/594] Linking C executable src/secp256k1/examples/ecdh_example
[403/594] Linking C executable src/secp256k1/examples/ecdsa_example
[404/594] Building C object src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o
[405/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[406/594] Linking C executable src/secp256k1/examples/schnorr_example
[407/594] Linking C executable src/secp256k1/internal-bench
[408/594] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[409/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[410/594] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[411/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[412/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/coins.cpp.o
[413/594] Building C object src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o
[414/594] Linking C executable src/secp256k1/ecmult-bench
[415/594] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[416/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/random.cpp.o
[417/594] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[418/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[419/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[420/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[421/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[422/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[423/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[424/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[425/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[426/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[427/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[428/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[429/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[430/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[431/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[432/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[433/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[434/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[435/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[436/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[437/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[438/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[439/594] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[440/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[441/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[442/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[443/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[444/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[445/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[446/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[447/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[448/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[449/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[450/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[451/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[452/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[453/594] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[454/594] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[455/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[456/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[457/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[458/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1

Tail of the build log:

[618/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/clientmodel.cpp.o
[619/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/ccoins_caching.cpp.o
[620/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/data.cpp.o
[621/672] Linking CXX executable src/bitcoin-chainstate
FAILED: src/bitcoin-chainstate 
: && /usr/bin/c++ -Werror -g -O2 -fuse-ld=gold -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -lstdc++fs -fPIE -pie src/CMakeFiles/bitcoin-chainstate.dir/bitcoin-chainstate.cpp.o -o src/bitcoin-chainstate  /usr/lib/x86_64-linux-gnu/libjemalloc_pic.a  -lstdc++fs  src/libbitcoinkernel.a  src/crypto/libcrypto.a  src/crypto/libcrypto_sse4.1.a  src/crypto/libcrypto_avx2.a  src/crypto/libcrypto_shani.a  src/univalue/libunivalue.a  src/secp256k1/libsecp256k1.a  src/leveldb/libleveldb.a  src/crc32c/libcrc32c.a  /usr/lib/x86_64-linux-gnu/libjemalloc_pic.a  -lm  -lstdc++fs && :
/work/src/net.cpp:2360: error: undefined reference to 'GetLocalAddresses()'
collect2: error: ld returned 1 exit status
[622/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/examples.cpp.o
[623/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/guiutil.cpp.o
[624/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o
[625/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/crypto_hash.cpp.o
[626/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/lockedpool.cpp.o
[627/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsmodel.cpp.o
[628/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/hashpadding.cpp.o
[629/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsdialog.cpp.o
[630/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/checkqueue.cpp.o
[631/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/nanobench.cpp.o
[632/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/pool.cpp.o
[633/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/poly1305.cpp.o
[634/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoin.cpp.o
[635/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/gcs_filter.cpp.o
[636/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rollingbloom.cpp.o
[637/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/crypto_aes.cpp.o
[638/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/merkle_root.cpp.o
[639/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/streams_findbyte.cpp.o
[640/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/strencodings.cpp.o
[641/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/block_assemble.cpp.o
[642/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/checkblock.cpp.o
[643/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/prevector.cpp.o
[644/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/util_time.cpp.o
[645/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/platformstyle.cpp.o
[646/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvalidatedlineedit.cpp.o
[647/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvaluecombobox.cpp.o
[648/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/bench.cpp.o
[649/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/chained_tx.cpp.o
[650/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/verify_script.cpp.o
[651/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/duplicate_inputs.cpp.o
[652/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin_locale.cpp.o
[653/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin.cpp.o
[654/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/peer_eviction.cpp.o
[655/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/load_external.cpp.o
[656/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/mempool_eviction.cpp.o
[657/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/mempool_stress.cpp.o
[658/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/readwriteblock.cpp.o
[659/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rpc_mempool.cpp.o
[660/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rpc_blockchain.cpp.o
[661/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/peertablemodel.cpp.o
[662/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/trafficgraphwidget.cpp.o
[663/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/utilitydialog.cpp.o
[664/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/splashscreen.cpp.o
[665/672] Linking CXX executable src/bench/bitcoin-bench
[666/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/rpcconsole.cpp.o
[667/672] Linking CXX static library src/qt/libbitcoin-qt-base.a
[668/672] Automatic MOC for target bitcoin-qt
[669/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/bitcoin-qt_autogen/mocs_compilation.cpp.o
[670/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/main.cpp.o
[671/672] Linking CXX executable src/qt/bitcoin-qt
ninja: build stopped: cannot make progress due to previous errors.
Build build-without-wallet failed with exit code 1

Tail of the build log:

tests/test_iguana.py::test_invalid_inputindex ##teamcity[testStarted timestamp='2026-03-31T11:02:58.096' captureStandardOutput='false' flowId='tests.test_iguana.test_invalid_inputindex' metainfo='test_invalid_inputindex' name='tests.test_iguana.test_invalid_inputindex']
PASSED                     [ 25%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.115' duration='19' flowId='tests.test_iguana.test_invalid_inputindex' name='tests.test_iguana.test_invalid_inputindex']

tests/test_iguana.py::test_sig_push_only ##teamcity[testStarted timestamp='2026-03-31T11:02:58.116' captureStandardOutput='false' flowId='tests.test_iguana.test_sig_push_only' metainfo='test_sig_push_only' name='tests.test_iguana.test_sig_push_only']
PASSED                          [ 30%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.151' duration='33' flowId='tests.test_iguana.test_sig_push_only' name='tests.test_iguana.test_sig_push_only']

tests/test_iguana.py::test_script_sig_success ##teamcity[testStarted timestamp='2026-03-31T11:02:58.151' captureStandardOutput='false' flowId='tests.test_iguana.test_script_sig_success' metainfo='test_script_sig_success' name='tests.test_iguana.test_script_sig_success']
PASSED                     [ 35%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.159' duration='7' flowId='tests.test_iguana.test_script_sig_success' name='tests.test_iguana.test_script_sig_success']

tests/test_iguana.py::test_script_sig_invalid_opcode_encoding ##teamcity[testStarted timestamp='2026-03-31T11:02:58.160' captureStandardOutput='false' flowId='tests.test_iguana.test_script_sig_invalid_opcode_encoding' metainfo='test_script_sig_invalid_opcode_encoding' name='tests.test_iguana.test_script_sig_invalid_opcode_encoding']
PASSED     [ 40%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.175' duration='14' flowId='tests.test_iguana.test_script_sig_invalid_opcode_encoding' name='tests.test_iguana.test_script_sig_invalid_opcode_encoding']

tests/test_iguana.py::test_script_pub_key_success ##teamcity[testStarted timestamp='2026-03-31T11:02:58.176' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_success' metainfo='test_script_pub_key_success' name='tests.test_iguana.test_script_pub_key_success']
PASSED                 [ 45%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.192' duration='15' flowId='tests.test_iguana.test_script_pub_key_success' name='tests.test_iguana.test_script_pub_key_success']

tests/test_iguana.py::test_script_pub_key_failure ##teamcity[testStarted timestamp='2026-03-31T11:02:58.192' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_failure' metainfo='test_script_pub_key_failure' name='tests.test_iguana.test_script_pub_key_failure']
PASSED                 [ 50%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.204' duration='10' flowId='tests.test_iguana.test_script_pub_key_failure' name='tests.test_iguana.test_script_pub_key_failure']

tests/test_iguana.py::test_script_pub_key_empty_stack ##teamcity[testStarted timestamp='2026-03-31T11:02:58.205' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_empty_stack' metainfo='test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']
PASSED             [ 55%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.213' duration='7' flowId='tests.test_iguana.test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']

tests/test_iguana.py::test_script_pub_key_false_stack ##teamcity[testStarted timestamp='2026-03-31T11:02:58.214' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_false_stack' metainfo='test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']
PASSED             [ 60%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.222' duration='7' flowId='tests.test_iguana.test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']

tests/test_iguana.py::test_script_pub_key_cleanstack ##teamcity[testStarted timestamp='2026-03-31T11:02:58.223' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_cleanstack' metainfo='test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']
PASSED              [ 65%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.232' duration='8' flowId='tests.test_iguana.test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']

tests/test_iguana.py::test_redeem_script_success ##teamcity[testStarted timestamp='2026-03-31T11:02:58.232' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_success' metainfo='test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']
PASSED                  [ 70%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.253' duration='19' flowId='tests.test_iguana.test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']

tests/test_iguana.py::test_redeem_script_error ##teamcity[testStarted timestamp='2026-03-31T11:02:58.253' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_error' metainfo='test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']
PASSED                    [ 75%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.263' duration='8' flowId='tests.test_iguana.test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']

tests/test_iguana.py::test_redeem_script_exception ##teamcity[testStarted timestamp='2026-03-31T11:02:58.264' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_exception' metainfo='test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']
PASSED                [ 80%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.274' duration='9' flowId='tests.test_iguana.test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']

tests/test_iguana.py::test_redeem_script_empty_stack ##teamcity[testStarted timestamp='2026-03-31T11:02:58.274' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_empty_stack' metainfo='test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']
PASSED              [ 85%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.287' duration='11' flowId='tests.test_iguana.test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']

tests/test_iguana.py::test_redeem_script_false ##teamcity[testStarted timestamp='2026-03-31T11:02:58.287' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_false' metainfo='test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']
PASSED                    [ 90%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.292' duration='4' flowId='tests.test_iguana.test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']

tests/test_iguana.py::test_redeem_script_cleanstack ##teamcity[testStarted timestamp='2026-03-31T11:02:58.293' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_cleanstack' metainfo='test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']
PASSED               [ 95%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.298' duration='4' flowId='tests.test_iguana.test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']

tests/test_iguana.py::test_redeem_script_input_sigchecks ##teamcity[testStarted timestamp='2026-03-31T11:02:58.299' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' metainfo='test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']
PASSED          [100%]##teamcity[testFinished timestamp='2026-03-31T11:02:58.324' duration='24' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']


============================== 20 passed in 0.37s ==============================
[238/544] Running seeder test suite
PASSED: seeder test suite
[251/544] Running bitcoin-qt test suite
PASSED: bitcoin-qt test suite
[254/544] Running pow test suite
PASSED: pow test suite
[261/544] Running avalanche test suite
PASSED: avalanche test suite
ninja: build stopped: cannot make progress due to previous errors.
Build build-debug failed with exit code 1

Tail of the build log:

wallet_watchonly.py --usecli                     | ✓ Passed  | 1 s
chronik_avalanche.py                             | ○ Skipped | 0 s
chronik_block.py                                 | ○ Skipped | 0 s
chronik_block_header.py                          | ○ Skipped | 0 s
chronik_block_info.py                            | ○ Skipped | 0 s
chronik_block_txs.py                             | ○ Skipped | 0 s
chronik_blockchain_info.py                       | ○ Skipped | 0 s
chronik_blocks.py                                | ○ Skipped | 0 s
chronik_broadcast_tx.py                          | ○ Skipped | 0 s
chronik_chronik_info.py                          | ○ Skipped | 0 s
chronik_cors.py                                  | ○ Skipped | 0 s
chronik_disable_token_index.py                   | ○ Skipped | 0 s
chronik_disallow_prune.py                        | ○ Skipped | 0 s
chronik_electrum_basic.py                        | ○ Skipped | 0 s
chronik_electrum_blockchain.py                   | ○ Skipped | 0 s
chronik_lokad_id_group.py                        | ○ Skipped | 0 s
chronik_mempool_conflicts.py                     | ○ Skipped | 0 s
chronik_mempool_disconnectpool.py                | ○ Skipped | 0 s
chronik_pause.py                                 | ○ Skipped | 0 s
chronik_plugin_groups.py                         | ○ Skipped | 0 s
chronik_plugins.py                               | ○ Skipped | 0 s
chronik_plugins_setup.py                         | ○ Skipped | 0 s
chronik_raw_tx.py                                | ○ Skipped | 0 s
chronik_resync.py                                | ○ Skipped | 0 s
chronik_script_confirmed_txs.py                  | ○ Skipped | 0 s
chronik_script_history.py                        | ○ Skipped | 0 s
chronik_script_unconfirmed_txs.py                | ○ Skipped | 0 s
chronik_script_utxos.py                          | ○ Skipped | 0 s
chronik_scripthash.py                            | ○ Skipped | 0 s
chronik_serve.py                                 | ○ Skipped | 0 s
chronik_shutdown.py                              | ○ Skipped | 0 s
chronik_spent_by.py                              | ○ Skipped | 0 s
chronik_token_alp.py                             | ○ Skipped | 0 s
chronik_token_broadcast_txs.py                   | ○ Skipped | 0 s
chronik_token_burn.py                            | ○ Skipped | 0 s
chronik_token_id_group.py                        | ○ Skipped | 0 s
chronik_token_parse_failure.py                   | ○ Skipped | 0 s
chronik_token_script_group.py                    | ○ Skipped | 0 s
chronik_token_slp_fungible.py                    | ○ Skipped | 0 s
chronik_token_slp_mint_vault.py                  | ○ Skipped | 0 s
chronik_token_slp_nft1.py                        | ○ Skipped | 0 s
chronik_tx.py                                    | ○ Skipped | 0 s
chronik_tx_removal_order.py                      | ○ Skipped | 0 s
chronik_unconfirmed_txs.py                       | ○ Skipped | 0 s
chronik_ws.py                                    | ○ Skipped | 0 s
chronik_ws_avalanche.py                          | ○ Skipped | 0 s
chronik_ws_ordering.py                           | ○ Skipped | 0 s
chronik_ws_ping.py                               | ○ Skipped | 0 s
chronik_ws_script.py                             | ○ Skipped | 0 s
feature_bind_port_discover.py                    | ○ Skipped | 0 s
feature_bind_port_externalip.py                  | ○ Skipped | 0 s
interface_usdt_net.py                            | ○ Skipped | 0 s
interface_usdt_utxocache.py                      | ○ Skipped | 0 s
interface_usdt_validation.py                     | ○ Skipped | 0 s

ALL                                              | ✓ Passed  | 1313 s (accumulated) 
Runtime: 124 s

ninja: build stopped: cannot make progress due to previous errors.
Build build-diff failed with exit code 1

Tail of the build log:

chronik_broadcast_tx.py                          | ○ Skipped | 1 s
chronik_chronik_info.py                          | ○ Skipped | 0 s
chronik_cors.py                                  | ○ Skipped | 0 s
chronik_disable_token_index.py                   | ○ Skipped | 0 s
chronik_disallow_prune.py                        | ○ Skipped | 0 s
chronik_electrum_basic.py                        | ○ Skipped | 0 s
chronik_electrum_blockchain.py                   | ○ Skipped | 0 s
chronik_lokad_id_group.py                        | ○ Skipped | 0 s
chronik_mempool_conflicts.py                     | ○ Skipped | 0 s
chronik_mempool_disconnectpool.py                | ○ Skipped | 0 s
chronik_pause.py                                 | ○ Skipped | 0 s
chronik_plugin_groups.py                         | ○ Skipped | 0 s
chronik_plugins.py                               | ○ Skipped | 0 s
chronik_plugins_setup.py                         | ○ Skipped | 0 s
chronik_raw_tx.py                                | ○ Skipped | 0 s
chronik_resync.py                                | ○ Skipped | 0 s
chronik_script_confirmed_txs.py                  | ○ Skipped | 0 s
chronik_script_history.py                        | ○ Skipped | 0 s
chronik_script_unconfirmed_txs.py                | ○ Skipped | 0 s
chronik_script_utxos.py                          | ○ Skipped | 0 s
chronik_scripthash.py                            | ○ Skipped | 0 s
chronik_serve.py                                 | ○ Skipped | 0 s
chronik_shutdown.py                              | ○ Skipped | 0 s
chronik_spent_by.py                              | ○ Skipped | 0 s
chronik_token_alp.py                             | ○ Skipped | 0 s
chronik_token_broadcast_txs.py                   | ○ Skipped | 0 s
chronik_token_burn.py                            | ○ Skipped | 0 s
chronik_token_id_group.py                        | ○ Skipped | 0 s
chronik_token_parse_failure.py                   | ○ Skipped | 0 s
chronik_token_script_group.py                    | ○ Skipped | 0 s
chronik_token_slp_fungible.py                    | ○ Skipped | 0 s
chronik_token_slp_mint_vault.py                  | ○ Skipped | 0 s
chronik_token_slp_nft1.py                        | ○ Skipped | 0 s
chronik_tx.py                                    | ○ Skipped | 0 s
chronik_tx_removal_order.py                      | ○ Skipped | 0 s
chronik_unconfirmed_txs.py                       | ○ Skipped | 0 s
chronik_ws.py                                    | ○ Skipped | 0 s
chronik_ws_avalanche.py                          | ○ Skipped | 1 s
chronik_ws_ordering.py                           | ○ Skipped | 0 s
chronik_ws_ping.py                               | ○ Skipped | 0 s
chronik_ws_script.py                             | ○ Skipped | 0 s
feature_bind_port_discover.py                    | ○ Skipped | 0 s
feature_bind_port_externalip.py                  | ○ Skipped | 0 s
interface_usdt_net.py                            | ○ Skipped | 0 s
interface_usdt_utxocache.py                      | ○ Skipped | 0 s
interface_usdt_validation.py                     | ○ Skipped | 0 s

ALL                                              | ✓ Passed  | 3030 s (accumulated) 
Runtime: 261 s

[236/544] Running seeder test suite
PASSED: seeder test suite
[252/544] Running pow test suite
PASSED: pow test suite
[254/544] Running bitcoin-qt test suite
PASSED: bitcoin-qt test suite
[261/544] Running avalanche test suite
PASSED: avalanche test suite
ninja: build stopped: cannot make progress due to previous errors.
Build build-debug failed with exit code 1

Tail of the build log:

tests/test_iguana.py::test_invalid_inputindex ##teamcity[testStarted timestamp='2026-03-31T14:56:53.080' captureStandardOutput='false' flowId='tests.test_iguana.test_invalid_inputindex' metainfo='test_invalid_inputindex' name='tests.test_iguana.test_invalid_inputindex']
PASSED                     [ 25%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.103' duration='22' flowId='tests.test_iguana.test_invalid_inputindex' name='tests.test_iguana.test_invalid_inputindex']

tests/test_iguana.py::test_sig_push_only ##teamcity[testStarted timestamp='2026-03-31T14:56:53.104' captureStandardOutput='false' flowId='tests.test_iguana.test_sig_push_only' metainfo='test_sig_push_only' name='tests.test_iguana.test_sig_push_only']
PASSED                          [ 30%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.140' duration='35' flowId='tests.test_iguana.test_sig_push_only' name='tests.test_iguana.test_sig_push_only']

tests/test_iguana.py::test_script_sig_success ##teamcity[testStarted timestamp='2026-03-31T14:56:53.140' captureStandardOutput='false' flowId='tests.test_iguana.test_script_sig_success' metainfo='test_script_sig_success' name='tests.test_iguana.test_script_sig_success']
PASSED                     [ 35%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.167' duration='26' flowId='tests.test_iguana.test_script_sig_success' name='tests.test_iguana.test_script_sig_success']

tests/test_iguana.py::test_script_sig_invalid_opcode_encoding ##teamcity[testStarted timestamp='2026-03-31T14:56:53.168' captureStandardOutput='false' flowId='tests.test_iguana.test_script_sig_invalid_opcode_encoding' metainfo='test_script_sig_invalid_opcode_encoding' name='tests.test_iguana.test_script_sig_invalid_opcode_encoding']
PASSED     [ 40%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.195' duration='26' flowId='tests.test_iguana.test_script_sig_invalid_opcode_encoding' name='tests.test_iguana.test_script_sig_invalid_opcode_encoding']

tests/test_iguana.py::test_script_pub_key_success ##teamcity[testStarted timestamp='2026-03-31T14:56:53.196' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_success' metainfo='test_script_pub_key_success' name='tests.test_iguana.test_script_pub_key_success']
PASSED                 [ 45%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.227' duration='30' flowId='tests.test_iguana.test_script_pub_key_success' name='tests.test_iguana.test_script_pub_key_success']

tests/test_iguana.py::test_script_pub_key_failure ##teamcity[testStarted timestamp='2026-03-31T14:56:53.228' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_failure' metainfo='test_script_pub_key_failure' name='tests.test_iguana.test_script_pub_key_failure']
PASSED                 [ 50%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.243' duration='14' flowId='tests.test_iguana.test_script_pub_key_failure' name='tests.test_iguana.test_script_pub_key_failure']

tests/test_iguana.py::test_script_pub_key_empty_stack ##teamcity[testStarted timestamp='2026-03-31T14:56:53.244' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_empty_stack' metainfo='test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']
PASSED             [ 55%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.248' duration='3' flowId='tests.test_iguana.test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']

tests/test_iguana.py::test_script_pub_key_false_stack ##teamcity[testStarted timestamp='2026-03-31T14:56:53.248' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_false_stack' metainfo='test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']
PASSED             [ 60%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.252' duration='3' flowId='tests.test_iguana.test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']

tests/test_iguana.py::test_script_pub_key_cleanstack ##teamcity[testStarted timestamp='2026-03-31T14:56:53.253' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_cleanstack' metainfo='test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']
PASSED              [ 65%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.257' duration='3' flowId='tests.test_iguana.test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']

tests/test_iguana.py::test_redeem_script_success ##teamcity[testStarted timestamp='2026-03-31T14:56:53.258' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_success' metainfo='test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']
PASSED                  [ 70%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.266' duration='7' flowId='tests.test_iguana.test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']

tests/test_iguana.py::test_redeem_script_error ##teamcity[testStarted timestamp='2026-03-31T14:56:53.267' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_error' metainfo='test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']
PASSED                    [ 75%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.272' duration='4' flowId='tests.test_iguana.test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']

tests/test_iguana.py::test_redeem_script_exception ##teamcity[testStarted timestamp='2026-03-31T14:56:53.272' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_exception' metainfo='test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']
PASSED                [ 80%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.278' duration='4' flowId='tests.test_iguana.test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']

tests/test_iguana.py::test_redeem_script_empty_stack ##teamcity[testStarted timestamp='2026-03-31T14:56:53.278' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_empty_stack' metainfo='test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']
PASSED              [ 85%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.283' duration='4' flowId='tests.test_iguana.test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']

tests/test_iguana.py::test_redeem_script_false ##teamcity[testStarted timestamp='2026-03-31T14:56:53.284' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_false' metainfo='test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']
PASSED                    [ 90%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.289' duration='4' flowId='tests.test_iguana.test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']

tests/test_iguana.py::test_redeem_script_cleanstack ##teamcity[testStarted timestamp='2026-03-31T14:56:53.289' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_cleanstack' metainfo='test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']
PASSED               [ 95%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.296' duration='6' flowId='tests.test_iguana.test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']

tests/test_iguana.py::test_redeem_script_input_sigchecks ##teamcity[testStarted timestamp='2026-03-31T14:56:53.297' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' metainfo='test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']
PASSED          [100%]##teamcity[testFinished timestamp='2026-03-31T14:56:53.329' duration='31' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']


============================== 20 passed in 0.44s ==============================
[228/504] Running seeder test suite
PASSED: seeder test suite
[231/504] Running pow test suite
PASSED: pow test suite
[238/504] Running bitcoin-qt test suite
PASSED: bitcoin-qt test suite
[239/504] Building CXX object src/test/CMakeFiles/test_bitcoin.dir/util_tests.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-without-wallet failed with exit code 1

Tail of the build log:

wallet_watchonly.py --usecli                     | ✓ Passed  | 1 s
chronik_avalanche.py                             | ○ Skipped | 0 s
chronik_block.py                                 | ○ Skipped | 0 s
chronik_block_header.py                          | ○ Skipped | 0 s
chronik_block_info.py                            | ○ Skipped | 0 s
chronik_block_txs.py                             | ○ Skipped | 0 s
chronik_blockchain_info.py                       | ○ Skipped | 0 s
chronik_blocks.py                                | ○ Skipped | 0 s
chronik_broadcast_tx.py                          | ○ Skipped | 0 s
chronik_chronik_info.py                          | ○ Skipped | 0 s
chronik_cors.py                                  | ○ Skipped | 0 s
chronik_disable_token_index.py                   | ○ Skipped | 0 s
chronik_disallow_prune.py                        | ○ Skipped | 0 s
chronik_electrum_basic.py                        | ○ Skipped | 0 s
chronik_electrum_blockchain.py                   | ○ Skipped | 0 s
chronik_lokad_id_group.py                        | ○ Skipped | 0 s
chronik_mempool_conflicts.py                     | ○ Skipped | 0 s
chronik_mempool_disconnectpool.py                | ○ Skipped | 0 s
chronik_pause.py                                 | ○ Skipped | 0 s
chronik_plugin_groups.py                         | ○ Skipped | 0 s
chronik_plugins.py                               | ○ Skipped | 0 s
chronik_plugins_setup.py                         | ○ Skipped | 0 s
chronik_raw_tx.py                                | ○ Skipped | 0 s
chronik_resync.py                                | ○ Skipped | 0 s
chronik_script_confirmed_txs.py                  | ○ Skipped | 0 s
chronik_script_history.py                        | ○ Skipped | 0 s
chronik_script_unconfirmed_txs.py                | ○ Skipped | 0 s
chronik_script_utxos.py                          | ○ Skipped | 0 s
chronik_scripthash.py                            | ○ Skipped | 0 s
chronik_serve.py                                 | ○ Skipped | 0 s
chronik_shutdown.py                              | ○ Skipped | 0 s
chronik_spent_by.py                              | ○ Skipped | 0 s
chronik_token_alp.py                             | ○ Skipped | 0 s
chronik_token_broadcast_txs.py                   | ○ Skipped | 0 s
chronik_token_burn.py                            | ○ Skipped | 0 s
chronik_token_id_group.py                        | ○ Skipped | 0 s
chronik_token_parse_failure.py                   | ○ Skipped | 0 s
chronik_token_script_group.py                    | ○ Skipped | 0 s
chronik_token_slp_fungible.py                    | ○ Skipped | 0 s
chronik_token_slp_mint_vault.py                  | ○ Skipped | 0 s
chronik_token_slp_nft1.py                        | ○ Skipped | 0 s
chronik_tx.py                                    | ○ Skipped | 0 s
chronik_tx_removal_order.py                      | ○ Skipped | 0 s
chronik_unconfirmed_txs.py                       | ○ Skipped | 0 s
chronik_ws.py                                    | ○ Skipped | 0 s
chronik_ws_avalanche.py                          | ○ Skipped | 0 s
chronik_ws_ordering.py                           | ○ Skipped | 0 s
chronik_ws_ping.py                               | ○ Skipped | 0 s
chronik_ws_script.py                             | ○ Skipped | 0 s
feature_bind_port_discover.py                    | ○ Skipped | 0 s
feature_bind_port_externalip.py                  | ○ Skipped | 0 s
interface_usdt_net.py                            | ○ Skipped | 0 s
interface_usdt_utxocache.py                      | ○ Skipped | 0 s
interface_usdt_validation.py                     | ○ Skipped | 0 s

ALL                                              | ✓ Passed  | 1238 s (accumulated) 
Runtime: 106 s

ninja: build stopped: cannot make progress due to previous errors.
Build build-diff failed with exit code 1
PiRK published this revision for review.Mar 31 2026, 15:33
src/test/pcp_tests.cpp
283 ↗(On Diff #58824)

I'm keeping the comments on the same line because here the lint result is less readable if I put them above the data (everything in a single column)

This revision is now accepted and ready to land.Mar 31 2026, 20:24

final rebase just to test the guix builds one more time at the top of the stack

@bot guix-win guix-linux guix-osx build-linux64 build-win64 build-aarch64

The build failed due to an unexpected infrastructure outage. The administrators have been notified to investigate. Sorry for the inconvenience.