Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
224 commits
Select commit Hold shift + click to select a range
a099655
scripted-diff: Update `DeriveType` enum values to mention ranged deri…
rkrux Jun 13, 2025
0a8d303
test: fix test_limit_enforcement_package
instagibbs Dec 3, 2025
9f2b338
subprocess: Fix `-Wunused-private-field` for `Popen` class on Windows
hebasto Jan 23, 2026
1b36bf0
subprocess: Fix `-Wunused-private-field` for `Child` class on Windows
hebasto Jan 23, 2026
5cd5794
test: verify node state after restart in assumeutxo
yashbhutwala Jan 14, 2026
881ab4f
support multiple block status checks in CheckBlockDataAvailability
furszy Jun 16, 2025
67696b2
net: extend log message to include attempted connection type
vasild Jan 30, 2026
ce4c66e
test: Test that key expression indexes match key count
achow101 Jan 20, 2026
b12281b
miniscript: Use a reference to key_exp_index in KeyParser
achow101 Dec 23, 2025
6fd780d
descriptors: Increment key_exp_index in ParsePubkey(Inner)
achow101 Dec 23, 2025
ec0f47b
miniscript: Using Func and Expr when parsing keys, hashes, and locktimes
achow101 Dec 22, 2025
4b53cbd
test: Test for musig() in various miniscript expressions
achow101 Dec 22, 2025
634cd60
build: Add embedded asmap data
fjahr Aug 28, 2024
6202b50
build: Generate ip_asn.dat.h during build process
fjahr Aug 28, 2024
6244212
init, net: Implement usage of binary-embedded asmap data
fjahr Oct 30, 2023
e539344
doc: Expand documentation on asmap feature and tooling
fjahr Aug 30, 2024
bab085d
ci: Use without embedded asmap build option in one ci job
fjahr Mar 3, 2025
24699fe
doc: Add initial asmap data documentation
fjahr Jun 13, 2025
04c4d71
ci: remove commit count limit from `test-each-commit`
l0rinc Jan 26, 2026
eb510f8
ci: fail fast in test-each-commit script
l0rinc Feb 3, 2026
b54dedc
fees: reduce `MIN_BUCKET_FEERATE` to 100
ismaelsadeeq Sep 1, 2025
fc4fbda
fees: bump fees file version
ismaelsadeeq Nov 7, 2025
243e48c
fees: delete unused dummy field
ismaelsadeeq Nov 7, 2025
704a09f
test: ensure fee estimator provide fee rate estimate < 1 s/vb
ismaelsadeeq Sep 1, 2025
8966352
doc: add release notes
ismaelsadeeq Sep 1, 2025
7e52b1b
fuzz: call `EmplaceCoinInternalDANGER` as well in `SimulationTest`
l0rinc Sep 30, 2025
b413491
coins: Keep track of number of dirty entries in `CCoinsViewCache`
sipa Jan 21, 2025
afb1bc1
validation: Use dirty entry count in flush warnings and disk space ch…
sipa Jan 21, 2025
18f1169
validation: don't update BLOCK_FAILED_VALID to BLOCK_FAILED_CHILD in …
stratospher Jan 15, 2025
573bb54
net: Store recipient node address in private broadcast
andrewtoth Jan 25, 2026
922ebf9
refactor: move-only: move `FeeEstimateMode` enum to `util/fees.h`
ismaelsadeeq Feb 10, 2026
c135549
refactor: fees: split fee rate format from fee estimate mode
ismaelsadeeq Nov 17, 2025
50cf683
wallet: rpc: manpage: fix example missing `fee_rate` argument
SomberNight Feb 11, 2026
5e64982
net: Add PrivateBroadcast::GetBroadcastInfo
andrewtoth Jan 17, 2026
996f20c
rpc: Add getprivatebroadcastinfo
andrewtoth Jan 17, 2026
15dff45
test: Cover getprivatebroadcastinfo in p2p_private_broadcast
andrewtoth Jan 17, 2026
557260c
rpc: Add abortprivatebroadcast
andrewtoth Jan 17, 2026
c3378be
test: Cover abortprivatebroadcast in p2p_private_broadcast
andrewtoth Jan 17, 2026
2a1d0db
doc: Mention private broadcast RPCs in release notes
andrewtoth Jan 17, 2026
df53a3e
rpc refactor: stop using deprecated getCoinbaseCommitment method
ryanofsky Feb 12, 2026
b970cdf
test framework: expand expected_stderr, expected_ret_code options
ryanofsky Jan 14, 2026
ff995b5
ipc test: add workaround to block_reserved_weight exception test
ryanofsky Feb 12, 2026
a4603ac
ipc mining: declare constants for default field values
ryanofsky Feb 9, 2026
c6638fa
ipc mining: provide default option values (incompatible schema change)
ryanofsky Feb 9, 2026
2278f01
ipc mining: remove deprecated methods (incompatible schema change)
ryanofsky Feb 9, 2026
70de5cc
ipc mining: pass missing context to BlockTemplate methods (incompatib…
Sjors Nov 24, 2025
9453c15
ipc mining: break compatibility with existing clients (version bump)
Sjors Nov 24, 2025
fa90d44
test: Fix intermittent issues in feature_assumevalid.py
Feb 12, 2026
79c934b
cmake: Fix NetBSD-specific workaround for Boost
hebasto Feb 12, 2026
f700609
doc: Release notes for mining IPC interface bump
ryanofsky Feb 12, 2026
69b01af
coins: add PeekCoin()
andrewtoth Dec 24, 2025
67c0d17
coins: introduce CoinsViewOverlay
andrewtoth Feb 12, 2026
73e99a5
coins: don't mutate main cache when connecting block
andrewtoth Feb 12, 2026
89824fb
fuzz: pass coins_view_cache to TestCoinsView in coins_view
andrewtoth Dec 26, 2025
86eda88
fuzz: move backend mutating block to end of coins_view
andrewtoth Feb 3, 2026
cae6d89
fuzz: add target for CoinsViewOverlay
andrewtoth Jan 31, 2026
331a527
wallet, rpc:remove settxfee and paytxfee
polespinasa Mar 25, 2025
24f93c9
release note
polespinasa Jan 7, 2026
211111b
test: Avoid empty errmsg in JSONRPCException
Feb 12, 2026
6df4a04
qt: Replace three dots with ellipsis
hebasto Feb 14, 2026
faee36f
util: Add SettingTo<Int>() and GetArg<Int>()
Feb 13, 2026
fac3eca
rpc: Properly parse -rpcworkqueue/-rpcthreads
Feb 13, 2026
afea2af
net: reduce log level for PCP/NAT-PMP NOT_AUTHORIZED failures
ANAVHEOBA Dec 19, 2025
fa5672d
refactor: [gui] Use SettingTo<int64_t> over deprecated SettingToInt
Feb 16, 2026
746d8cd
qt: Use plurals where necessary
hebasto Feb 17, 2026
8a050b9
Merge bitcoin/bitcoin#34575: test: Avoid empty errmsg in JSONRPCExcep…
fanquake Feb 17, 2026
badcf1c
guix: fix typo in guix-codesign
fanquake Feb 13, 2026
62e3785
guix: don't export TZ twice
fanquake Feb 13, 2026
c8c9c1e
Merge bitcoin/bitcoin#34383: ci: remove commit count limit from `test…
fanquake Feb 17, 2026
a9a3b29
index: Check availability of undo data for indices
fjahr Mar 29, 2024
312919c
test: Indices can not start based on block data without undo data
fjahr Mar 30, 2024
3d7ab7e
rpc, test: Address feedback from #29668
fjahr Jul 12, 2024
fd06157
test: Add coverage for restarted node without any block sync
fjahr Apr 3, 2025
fa626bd
util: Remove brittle and confusing sp::Popen(std::string)
Jan 20, 2026
fa48d42
test: Stricter unit test
Jan 20, 2026
231dd04
build: define CMAKE_COMPILE_WARNING_AS_ERROR as a cache option
willcl-ark Feb 17, 2026
a7c29df
Merge bitcoin/bitcoin#34552: fees: refactor: separate feerate format …
sedited Feb 17, 2026
666b379
clusterlin: fix type to count dependencies
sipa Feb 17, 2026
900e459
clusterlin: avoid depgraph argument in SanityCheck (cleanup)
sipa Feb 16, 2026
f66fa69
clusterlin: split tx/chunk dep counting (preparation)
sipa Dec 22, 2025
d69c9f5
clusterlin: count chunk deps without loop (optimization)
sipa Dec 22, 2025
268fcb6
clusterlin: add more Assumes and sanity checks (tests)
sipa Feb 14, 2026
20e2f3e
scripted-diff: rename _rep -> _idx in SFL
sipa Dec 22, 2025
7c6f63a
clusterlin: pool SetInfos (preparation)
sipa Feb 14, 2026
73cbd15
clusterlin: get rid of DepData (optimization)
sipa Feb 14, 2026
b75574a
clusterlin: improve TxData::dep_top_idx type (optimization)
sipa Dec 21, 2025
cbd684a
clusterlin: abstract out functions from MergeStep (refactor)
sipa Dec 26, 2025
dcf458f
clusterlin: split up OptimizeStep (refactor)
sipa Jan 24, 2026
6f898db
clusterlin: simplify PickMergeCandidate (optimization)
sipa Dec 26, 2025
7194de3
clusterlin: precompute reachable sets (optimization)
sipa Dec 26, 2025
3221f1a
clusterlin: make MergeSequence take SetIdx (simplification)
sipa Dec 26, 2025
ae16485
clusterlin: special-case self-merges (optimization)
sipa Jan 12, 2026
63b06d5
clusterlin: keep track of active children (optimization)
sipa Jan 12, 2026
1daa600
clusterlin: track suboptimal chunks (optimization)
sipa Oct 16, 2025
b684f95
clusterlin: unidirectional MakeTopological initially (optimization)
sipa Oct 15, 2025
d90f98a
clusterlin: inline UpdateChunk into (De)Activate (optimization)
sipa Dec 26, 2025
c2fcf25
clusterlin: inline GetReachable into Deactivate (optimization)
sipa Dec 26, 2025
fa4cb96
test: Set assert_debug_log timeout to 0
Feb 12, 2026
120c631
refactor: use clearer variables in InvalidateBlock()
stratospher Jan 16, 2025
37bc207
validation: stop using BLOCK_FAILED_CHILD
stratospher Jan 16, 2025
b5b2956
validation: reset BLOCK_FAILED_CHILD to BLOCK_FAILED_VALID when loadi…
stratospher Feb 7, 2025
29740c0
validation: remove BLOCK_FAILED_MASK
stratospher Jan 16, 2025
fb3e1bf
test: check LoadBlockIndex correctly recomputes invalidity flags
stratospher Oct 8, 2025
59d24bd
threadpool: make Submit return Expected instead of throwing
furszy Feb 12, 2026
fae31b1
ci: [refactor] Move github_import_vs_env to python script
Feb 12, 2026
fa36ade
ci: [refactor] Drop last use of pwsh
Feb 12, 2026
59e10a5
Merge bitcoin/bitcoin#34023: Optimized SFL cluster linearization
fanquake Feb 18, 2026
2706758
Merge bitcoin/bitcoin#34349: util: Remove brittle and confusing sp::P…
fanquake Feb 18, 2026
655b9d1
Merge bitcoin/bitcoin#32950: validation: remove BLOCK_FAILED_CHILD
fanquake Feb 18, 2026
9e4567b
Merge bitcoin/bitcoin#34581: test: Set assert_debug_log timeout to 0
fanquake Feb 18, 2026
fa69297
util: Fix UB in SetStdinEcho when ENOTTY
Feb 16, 2026
fa6af85
refactor: Use static_cast<decltype(...)> to suppress integer sanitize…
Feb 16, 2026
a849b7e
Merge bitcoin-core/gui#928: Replace three dots with ellipsis
hebasto Feb 18, 2026
241ad58
Merge bitcoin-core/gui#929: Use plurals where necessary
hebasto Feb 18, 2026
726b366
http: properly respond to HTTP request during shutdown
furszy Feb 12, 2026
6d482b2
Merge bitcoin/bitcoin#32138: wallet, rpc: remove settxfee and paytxfee
achow101 Feb 19, 2026
4933d1f
Merge bitcoin/bitcoin#28792: build: Embedded ASMap [3/3]: Build binar…
achow101 Feb 19, 2026
8ee24d7
Merge bitcoin/bitcoin#34604: guix: remove double export of `TZ`
fanquake Feb 19, 2026
3d82ec5
Add a "tx output spender" index
sstone Mar 10, 2022
5a8a427
Merge bitcoin/bitcoin#32745: scripted-diff: Update DeriveType enum va…
sedited Feb 19, 2026
e0463b4
rpc: add coinbase_tx field to getblock
Sjors Feb 9, 2026
910bd1c
Merge bitcoin/bitcoin#34582: rpc: Properly parse -rpcworkqueue/-rpcth…
sedited Feb 19, 2026
097c182
Merge bitcoin/bitcoin#34385: subprocess: Fix `-Wunused-private-field`…
sedited Feb 19, 2026
37e449d
Merge bitcoin/bitcoin#34512: rpc: add coinbase_tx field to getblock
sedited Feb 19, 2026
d0998cb
Merge bitcoin/bitcoin#33199: fees: enable `CBlockPolicyEstimator` ret…
achow101 Feb 19, 2026
0b96b9c
Minimize mempool lock, sync txo spender index only when and if needed
sstone Feb 18, 2026
02c83fe
Merge bitcoin/bitcoin#34577: http: fix submission during shutdown race
achow101 Feb 19, 2026
739f75c
Merge bitcoin/bitcoin#33512: coins: use dirty entry count for flush w…
sedited Feb 19, 2026
c808dfb
Merge bitcoin/bitcoin#34329: rpc,net: Add private broadcast RPCs
achow101 Feb 19, 2026
76de2f8
Merge bitcoin/bitcoin#34571: test: Fix intermittent issues in feature…
achow101 Feb 20, 2026
96bec21
Merge bitcoin/bitcoin#34549: net: reduce log level for PCP/NAT-PMP NO…
achow101 Feb 20, 2026
ee2065f
Merge bitcoin/bitcoin#34165: coins: don't mutate main cache when conn…
ryanofsky Feb 20, 2026
faed837
test: Add missing syncwithvalidationinterfacequeue
Feb 19, 2026
fa4424f
test: Fixup assert_debug_log timeouts in feature_config_args.py
Feb 19, 2026
1a54886
Merge bitcoin/bitcoin#24539: Add a "tx output spender" index
sedited Feb 20, 2026
3574905
Revert "ci: Treat SHA1 LLVM signing key as warning"
willcl-ark Feb 20, 2026
641a195
Merge bitcoin/bitcoin#34633: Revert "ci: Treat SHA1 LLVM signing key …
fanquake Feb 20, 2026
cb3473a
Merge bitcoin/bitcoin#34568: mining: Break compatibility with existin…
sedited Feb 20, 2026
ef98768
qt: Update src/qt/locale/bitcoin_en.xlf after string freeze
hebasto Feb 20, 2026
a2fd558
Merge bitcoin/bitcoin#34572: cmake: Fix NetBSD-specific workaround fo…
fanquake Feb 20, 2026
c86bce5
guix: use a temporary file over sponge
fanquake Dec 9, 2025
a3fb3dd
mempool: log if we detect a non-optimal mempool
instagibbs Feb 18, 2026
a9e59f7
rpc: add optimal result to getmempoolinfo
instagibbs Feb 18, 2026
a11297a
mining: add cooldown argument to createNewBlock()
Sjors Feb 4, 2026
1e82fa4
mining: add interrupt()
Sjors Feb 7, 2026
fcaec25
doc: release note for IPC cooldown and interrupt
Sjors Feb 13, 2026
ce6898f
Merge bitcoin/bitcoin#34605: build: define CMAKE_COMPILE_WARNING_AS_E…
hebasto Feb 20, 2026
d907d65
Merge bitcoin/bitcoin#29770: index: Check all necessary block data is…
achow101 Feb 20, 2026
fa194fc
Merge bitcoin/bitcoin#34622: test: assert_debug_log timeouts follow-up
achow101 Feb 21, 2026
6c8d628
Merge bitcoin-core/gui#931: Release: Update `src/qt/locale/bitcoin_en…
hebasto Feb 21, 2026
d9c7364
Merge bitcoin/bitcoin#34141: miniscript: Use Func and Expr when parsi…
sedited Feb 21, 2026
3710566
test: move abortprivatebroadcast test at the end
vasild Feb 21, 2026
c462e54
test: don't always assert NUM_PRIVATE_BROADCAST_PER_TX broadcasts
vasild Feb 21, 2026
ce8b692
Add functional test exercising tx downloadman recently confirmed filter
l0rinc Feb 20, 2026
e5f0613
net processing: Check if we are in ibd before processing block for tx…
sedited Nov 28, 2025
45133c5
doc: clarify `git range-diff` add/delete output
l0rinc Feb 23, 2026
a8ebcfd
test: let connections happen in any order in p2p_private_broadcast.py
vasild Jan 26, 2026
da7f70a
test: use port 0 for I2P addresses in p2p_private_broadcast.py
vasild Jan 26, 2026
ac3bea0
test: improve rpc_gettxspendingprevout.py code
furszy Feb 22, 2026
b8fa6f0
util: introduce `TrySub` to prevent unsigned underflow
l0rinc Feb 22, 2026
d7e0d51
fuzz: make `AddCoins` query view for overwrites
l0rinc Feb 22, 2026
780f460
fuzz: avoid invalid `AddCoin` overwrites
l0rinc Feb 22, 2026
3281824
fuzz: prevent invalid `FRESH` entries and surface `BatchWrite` errors
l0rinc Feb 22, 2026
9581a0a
Merge bitcoin/bitcoin#34615: mempool: expose optimality of mempool to…
sedited Feb 23, 2026
ab8a7af
Merge bitcoin/bitcoin#34646: Fix two issues in p2p_private_broadcast.py
achow101 Feb 23, 2026
a28eedb
ci: use LLVM 22 in sanitizer tasks
fanquake Jan 26, 2026
bd9e0e6
Merge bitcoin/bitcoin#34184: mining: add cooldown to createNewBlock()…
ryanofsky Feb 24, 2026
fa03fbf
test: Fix broken --valgrind handling after bitcoin wrapper
Feb 17, 2026
fa29fb7
test: Remove redundant warning about missing binaries
Feb 18, 2026
fa5d478
test: valgrind --trace-children=yes for bitcoin wrapper
Feb 18, 2026
5db78c8
Merge bitcoin/bitcoin#34660: ci: use LLVM 22 in sanitizer tasks
hebasto Feb 24, 2026
c8e332c
init refactor: Remove node.init accesss in AppInitInterfaces
ryanofsky Feb 24, 2026
e8f8b74
test: index, improve txospenderindex_initial_sync() test code
furszy Feb 20, 2026
9e7129d
clusterlin: introduce CostModel class (preparation)
sipa Jan 25, 2026
ecc9a84
clusterlin: use 'cost' terminology instead of 'iters' (refactor)
sipa Feb 21, 2026
a7cabf9
init refactor: Only initialize node.notifications one time
ryanofsky Feb 24, 2026
bbc8f1e
ipc mining: Prevent ``Assertion `m_node.chainman' failed`` errors on …
ryanofsky Feb 24, 2026
4eefdfc
clusterlin: rescale costs (preparation)
sipa Feb 21, 2026
744d47f
clusterlin: adopt trained cost model (feature)
sipa Feb 5, 2026
c88c916
Merge bitcoin/bitcoin#34653: test: improve txospender index tests code
achow101 Feb 24, 2026
f50d53c
Merge bitcoin/bitcoin#34627: guix: use a temporary file over sponge, …
sedited Feb 24, 2026
9ff1e82
test: cleanup, block threads via semaphore instead of shared_future
l0rinc Feb 17, 2026
8cd4a43
threadpool: guard against Start-Stop race
furszy Feb 19, 2026
f3887cf
Merge bitcoin/bitcoin#34561: wallet: rpc: manpage: fix example missin…
achow101 Feb 24, 2026
21cd1ba
Merge bitcoin/bitcoin#34286: test: verify node state after restart in…
achow101 Feb 24, 2026
76eb04b
Merge bitcoin/bitcoin#34655: fuzz: keep `coins_view` fuzzers within c…
achow101 Feb 24, 2026
4035231
Merge bitcoin/bitcoin#34608: test: Fix broken --valgrind handling aft…
ryanofsky Feb 25, 2026
b9bf24c
Merge bitcoin/bitcoin#34616: Cluster mempool: SFL cost model (take 2)
fanquake Feb 25, 2026
33fbaed
policy: don't CheckEphemeralSpends on reorg
instagibbs Oct 13, 2025
7c80301
Merge bitcoin/bitcoin#33616: policy: don't CheckEphemeralSpends on reorg
sedited Feb 25, 2026
faa70ca
doc: Update Guix install for Debian/Ubuntu
Feb 25, 2026
707ad46
Merge bitcoin/bitcoin#34671: doc: Update Guix install for Debian/Ubuntu
achow101 Feb 25, 2026
af99643
Merge bitcoin/bitcoin#34054: net processing: Add ibd check before pro…
fanquake Feb 26, 2026
e88d274
test: add threadpool Start-Stop race coverage
furszy Feb 19, 2026
bf2c607
threadpool: active-wait during shutdown
furszy Feb 10, 2026
ca101a2
test: coverage for queued tasks completion after interrupt
furszy Feb 17, 2026
3b7cbca
test: ensure Stop() thread helps drain the queue
seduless Feb 20, 2026
dbbb780
test: move and simplify BOOST_CHECK ostream helpers
hodlinator Feb 24, 2026
d9c6769
test: refactor, decouple HasReason from test framework machinery
furszy Feb 10, 2026
ce2a984
test: cleanup, use HasReason in threadpool_tests.cpp
l0rinc Feb 10, 2026
9dc653b
test: threadpool, add coverage for all Submit() errors
furszy Feb 24, 2026
408d5b1
test: include response body in non-JSON HTTP error msg
pinheadmz Feb 10, 2026
17a079c
ci: fix vcpkg tools cache key collision between windows matrix jobs
willcl-ark Feb 26, 2026
107a204
Merge bitcoin/bitcoin#34682: ci: fix vcpkg tools cache key collision …
hebasto Feb 26, 2026
bb3ac00
Merge bitcoin/bitcoin#34001: test: fix test_limit_enforcement_package
fanquake Feb 26, 2026
8834e4e
test: remove appveyor reference in comment
m3dwards Feb 17, 2026
b6b8f8a
Merge bitcoin/bitcoin#34562: ThreadPool follow-ups, proactive shutdow…
achow101 Feb 26, 2026
c1361fc
netif: fix compilation warning in QueryDefaultGatewayImpl()
Dec 14, 2025
fac9326
ci: Set TEST_RUNNER_PORT_MIN in test-each after cirrus runner switch
Feb 27, 2026
fa18be2
test: Fix typo
Feb 27, 2026
701b8d7
Merge bitcoin/bitcoin#34609: test: remove appveyor reference in comment
hebasto Feb 27, 2026
3c7b0f9
Merge bitcoin/bitcoin#34656: doc: clarify confusing `git range-diff` …
fanquake Feb 27, 2026
05cd3b0
Merge bitcoin/bitcoin#34597: util: Fix UB in SetStdinEcho when ENOTTY
fanquake Feb 27, 2026
fa9cf81
test: Add missing resolve() to valgrind.supp file
Feb 25, 2026
fab51e4
test: Move valgrind.supp to the other sanitizer_suppressions files
Feb 25, 2026
286de1e
Merge bitcoin/bitcoin#34093: netif: fix compilation warning in QueryD…
fanquake Feb 27, 2026
3a8b4e8
Merge bitcoin/bitcoin#34687: ci: Set TEST_RUNNER_PORT_MIN in test-eac…
fanquake Feb 27, 2026
fa48f8c
test: Add missing timeout_factor to zmq socket
Feb 27, 2026
b0833b5
Merge bitcoin/bitcoin#34668: test: Add missing resolve() to valgrind.…
fanquake Feb 27, 2026
ceff677
Merge bitcoin/bitcoin#34583: ci: [refactor] Drop last use of pwsh
fanquake Feb 27, 2026
5a6dd7c
Merge bitcoin/bitcoin#34661: ipc mining: Prevent ``Assertion `m_node.…
achow101 Feb 27, 2026
9cad97f
Merge bitcoin/bitcoin#34690: test: Add missing timeout_factor to zmq …
achow101 Feb 27, 2026
6b0a980
Merge bitcoin/bitcoin#34410: test: let connections happen in any orde…
achow101 Mar 2, 2026
2083d08
this change will pass at first but will result in silent merge
m3dwards Mar 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/ci-test-each-commit-exec.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def main():
f"./{build_dir}/test/functional/test_runner.py",
"-j",
str(num_procs * 2),
"--failfast",
"--combinedlogslen=99999999",
])

Expand Down
25 changes: 8 additions & 17 deletions .github/ci-windows-cross.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,13 @@ def run_unit_tests():

def main():
parser = argparse.ArgumentParser(description="Utility to run Windows CI steps.")
steps = [
"print_version",
"check_manifests",
"prepare_tests",
"run_unit_tests",
"run_functional_tests",
]
steps = list(map(lambda f: f.__name__, [
print_version,
check_manifests,
prepare_tests,
run_unit_tests,
run_functional_tests,
]))
parser.add_argument("step", choices=steps, help="CI step to perform.")
args = parser.parse_args()

Expand All @@ -149,16 +149,7 @@ def main():
str(Path.cwd() / "previous_releases"),
)

if args.step == "print_version":
print_version()
elif args.step == "check_manifests":
check_manifests()
elif args.step == "prepare_tests":
prepare_tests()
elif args.step == "run_unit_tests":
run_unit_tests()
elif args.step == "run_functional_tests":
run_functional_tests()
exec(f'{args.step}()')


if __name__ == "__main__":
Expand Down
51 changes: 33 additions & 18 deletions .github/ci-windows.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,29 @@ def run(cmd, **kwargs):
}


def github_import_vs_env(_ci_type):
vswhere_path = Path(os.environ["ProgramFiles(x86)"]) / "Microsoft Visual Studio" / "Installer" / "vswhere.exe"
installation_path = run(
[str(vswhere_path), "-latest", "-property", "installationPath"],
capture_output=True,
text=True,
).stdout.strip()
vsdevcmd = Path(installation_path) / "Common7" / "Tools" / "vsdevcmd.bat"
comspec = os.environ["COMSPEC"]
output = run(
f'"{comspec}" /s /c ""{vsdevcmd}" -arch=x64 -no_logo && set"',
capture_output=True,
text=True,
).stdout
github_env = os.environ["GITHUB_ENV"]
with open(github_env, "a") as env_file:
for line in output.splitlines():
if "=" not in line:
continue
name, value = line.split("=", 1)
env_file.write(f"{name}={value}\n")


def generate(ci_type):
command = [
"cmake",
Expand All @@ -50,7 +73,7 @@ def generate(ci_type):
run(command)


def build():
def build(_ci_type):
command = [
"cmake",
"--build",
Expand Down Expand Up @@ -180,26 +203,18 @@ def run_tests(ci_type):
def main():
parser = argparse.ArgumentParser(description="Utility to run Windows CI steps.")
parser.add_argument("ci_type", choices=GENERATE_OPTIONS, help="CI type to run.")
steps = [
"generate",
"build",
"check_manifests",
"prepare_tests",
"run_tests",
]
steps = list(map(lambda f: f.__name__, [
github_import_vs_env,
generate,
build,
check_manifests,
prepare_tests,
run_tests,
]))
parser.add_argument("step", choices=steps, help="CI step to perform.")
args = parser.parse_args()

if args.step == "generate":
generate(args.ci_type)
elif args.step == "build":
build()
elif args.step == "check_manifests":
check_manifests(args.ci_type)
elif args.step == "prepare_tests":
prepare_tests(args.ci_type)
elif args.step == "run_tests":
run_tests(args.ci_type)
exec(f'{args.step}("{args.ci_type}")')


if __name__ == "__main__":
Expand Down
83 changes: 44 additions & 39 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,13 @@ jobs:
fi

test-each-commit:
name: 'test max 6 ancestor commits'
runs-on: ubuntu-24.04
if: github.event_name == 'pull_request' && github.event.pull_request.commits != 1
timeout-minutes: 360 # Use maximum time, see https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes. Assuming a worst case time of 1 hour per commit, this leads to a --max-count=6 below.
name: 'test ancestor commits'
needs: runners
runs-on: ${{ needs.runners.outputs.provider == 'cirrus' && 'ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04-md' || 'ubuntu-24.04' }}
env:
MAX_COUNT: 6 # Keep in sync with name above
TEST_RUNNER_PORT_MIN: "14000" # Use a larger port, to avoid colliding with CIRRUS_CACHE_HOST port 12321.
if: github.event_name == 'pull_request' && github.event.pull_request.commits != 1
timeout-minutes: 360 # Use maximum time, see https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes.
steps:
- name: Determine fetch depth
run: echo "FETCH_DEPTH=$((${{ github.event.pull_request.commits }} + 2))" >> "$GITHUB_ENV"
Expand All @@ -72,33 +73,43 @@ jobs:
fetch-depth: ${{ env.FETCH_DEPTH }}
- name: Determine commit range
run: |
# Checkout HEAD~ and find the test base commit
# Checkout HEAD~ because it would be wasteful to rerun tests on the PR
# head commit that are already run by other jobs.
# Checkout HEAD~ and find the test base commit.
# Checkout HEAD~ because it would be wasteful to rerun
# tests on the PR head commit that are already run
# by other jobs.
git checkout HEAD~
# Figure out test base commit by listing ancestors of HEAD, excluding
# ancestors of the most recent merge commit, limiting the list to the
# newest MAX_COUNT ancestors, ordering it from oldest to newest, and
# taking the first one.
# Moreover, pull requests that contain a merge commit
# are generally draft pull requests that merge in other
# pull requests, so only check the relevant commits
# after the last merge commit. A merge commit could
# also be a subtree merge commit, which may be
# worthwhile to check. However, it is rare that the
# subtree merge commit is not the top commit (which
# would be skipped anyway by this task, because it is
# run by all other tasks). Also, `git rebase --exec`
# does not work on merge commits, so if this was
# important to check, the logic would have to be
# rewritten.
#
# If the branch contains up to MAX_COUNT ancestor commits after the
# most recent merge commit, all of those commits will be tested. If it
# contains more, only the most recent MAX_COUNT commits will be
# tested.
# Figure out test base commit by listing ancestors of
# HEAD, excluding ancestors of the most recent merge
# commit, ordering them from oldest to newest, and
# taking the first one.
#
# In the command below, the ^@ suffix is used to refer to all parents
# of the merge commit as described in:
# In the command below, the ^@ suffix is used to refer
# to all parents of the merge commit as described in:
# https://git-scm.com/docs/git-rev-parse#_other_rev_parent_shorthand_notations
# and the ^ prefix is used to exclude these parents and all their
# ancestors from the rev-list output as described in:
# and the ^ prefix is used to exclude these parents
# and all their ancestors from the rev-list output
# as described in:
# https://git-scm.com/docs/git-rev-list
MERGE_BASE=$(git rev-list -n1 --merges HEAD)
EXCLUDE_MERGE_BASE_ANCESTORS=
# MERGE_BASE can be empty due to limited fetch-depth
if test -n "$MERGE_BASE"; then
EXCLUDE_MERGE_BASE_ANCESTORS=^${MERGE_BASE}^@
fi
echo "TEST_BASE=$(git rev-list -n$((${{ env.MAX_COUNT }} + 1)) --reverse HEAD $EXCLUDE_MERGE_BASE_ANCESTORS | head -1)" >> "$GITHUB_ENV"
echo "TEST_BASE=$(git rev-list -n${{ github.event.pull_request.commits }} --reverse HEAD $EXCLUDE_MERGE_BASE_ANCESTORS | head -1)" >> "$GITHUB_ENV"
- run: |
git fetch origin "${GITHUB_BASE_REF}"
git config user.email "ci@example.com"
Expand Down Expand Up @@ -227,26 +238,19 @@ jobs:

- *CHECKOUT

- &SET_UP_VS
name: Set up VS Developer Prompt
shell: pwsh -Command "$PSVersionTable; $PSNativeCommandUseErrorActionPreference = $true; $ErrorActionPreference = 'Stop'; & '{0}'"
run: |
$vswherePath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$installationPath = & $vswherePath -latest -property installationPath
& "${env:COMSPEC}" /s /c "`"$installationPath\Common7\Tools\vsdevcmd.bat`" -arch=x64 -no_logo && set" | foreach-object {
$name, $value = $_ -split '=', 2
echo "$name=$value" >> $env:GITHUB_ENV
}
- &IMPORT_VS_ENV
name: Import Visual Studio env vars
run: py -3 .github/ci-windows.py "standard" github_import_vs_env

- name: Get tool information
shell: pwsh
run: |
cmake -version | Tee-Object -FilePath "cmake_version"
Write-Output "---"
msbuild -version | Tee-Object -FilePath "msbuild_version"
$env:VCToolsVersion | Tee-Object -FilePath "toolset_version"
set -o errexit -o pipefail -o xtrace -o nounset

cmake -version | tee cmake_version
echo '---'
msbuild.exe -version | tee msbuild_version
echo "${VCToolsVersion-}" | tee toolset_version
py -3 --version
Write-Host "PowerShell version $($PSVersionTable.PSVersion.ToString())"
bash --version

- name: Using vcpkg with MSBuild
Expand Down Expand Up @@ -287,7 +291,8 @@ jobs:

- name: Save vcpkg tools cache
uses: actions/cache/save@v5
if: github.event_name != 'pull_request' && github.ref_name == github.event.repository.default_branch && steps.vcpkg-tools-cache.outputs.cache-hit != 'true'
# Only save cache from one job as they share tools. If the matrix is expanded to jobs with unique tools, this may need amending.
if: github.event_name != 'pull_request' && github.ref_name == github.event.repository.default_branch && steps.vcpkg-tools-cache.outputs.cache-hit != 'true' && matrix.job-type == 'standard'
with:
path: C:/vcpkg/downloads/tools
key: ${{ github.job }}-vcpkg-tools-${{ github.run_id }}
Expand Down Expand Up @@ -418,7 +423,7 @@ jobs:
- name: Run bitcoind.exe
run: py -3 .github/ci-windows-cross.py print_version

- *SET_UP_VS
- *IMPORT_VS_ENV

- name: Check executable manifests
run: py -3 .github/ci-windows-cross.py check_manifests
Expand Down
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,16 @@ endif()
cmake_dependent_option(BUILD_WALLET_TOOL "Build bitcoin-wallet tool." ${BUILD_TESTS} "ENABLE_WALLET" OFF)

option(REDUCE_EXPORTS "Attempt to reduce exported symbols in the resulting executables." OFF)
option(CMAKE_COMPILE_WARNING_AS_ERROR "Treat compiler warnings as errors." OFF)
option(WITH_CCACHE "Attempt to use ccache for compiling." ON)

option(WITH_ZMQ "Enable ZMQ notifications." OFF)
if(WITH_ZMQ)
find_package(ZeroMQ 4.0.0 MODULE REQUIRED)
endif()

option(WITH_EMBEDDED_ASMAP "Embed default ASMap data." ON)

option(WITH_USDT "Enable tracepoints for Userspace, Statically Defined Tracing." OFF)
if(WITH_USDT)
find_package(USDT MODULE REQUIRED)
Expand Down Expand Up @@ -215,6 +218,7 @@ if(BUILD_FOR_FUZZING)
set(BUILD_GUI OFF)
set(ENABLE_EXTERNAL_SIGNER OFF)
set(WITH_ZMQ OFF)
set(WITH_EMBEDDED_ASMAP OFF)
set(BUILD_TESTS OFF)
set(BUILD_GUI_TESTS OFF)
set(BUILD_BENCH OFF)
Expand Down Expand Up @@ -653,6 +657,7 @@ else()
set(ipc_status OFF)
endif()
message(" IPC ................................. ${ipc_status}")
message(" Embedded ASMap ...................... ${WITH_EMBEDDED_ASMAP}")
message(" USDT tracing ........................ ${WITH_USDT}")
message(" QR code (GUI) ....................... ${WITH_QRENCODE}")
message(" DBus (GUI) .......................... ${WITH_DBUS}")
Expand Down
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_asan.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ else
fi

export CONTAINER_NAME=ci_native_asan
export APT_LLVM_V="21"
export APT_LLVM_V="22"
export PACKAGES="systemtap-sdt-dev clang-${APT_LLVM_V} llvm-${APT_LLVM_V} libclang-rt-${APT_LLVM_V}-dev mold python3-zmq qt6-base-dev qt6-tools-dev qt6-l10n-tools libevent-dev libboost-dev libzmq3-dev libqrencode-dev libsqlite3-dev ${BPFCC_PACKAGE} libcapnp-dev capnproto python3-pip"
export PIP_PACKAGES="--break-system-packages pycapnp"
export NO_DEPENDS=1
Expand Down
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_fuzz.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8

export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
export CONTAINER_NAME=ci_native_fuzz
export APT_LLVM_V="21"
export APT_LLVM_V="22"
export PACKAGES="clang-${APT_LLVM_V} llvm-${APT_LLVM_V} libclang-rt-${APT_LLVM_V}-dev libevent-dev libboost-dev libsqlite3-dev libcapnp-dev capnproto"
export NO_DEPENDS=1
export RUN_UNIT_TESTS=false
Expand Down
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_fuzz_with_msan.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
export LC_ALL=C.UTF-8

export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
export APT_LLVM_V="21"
export APT_LLVM_V="22"
LIBCXX_DIR="/cxx_build/"
export MSAN_FLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1 -fno-optimize-sibling-calls"
# -lstdc++ to resolve link issues due to upstream packaging
Expand Down
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_msan.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
export LC_ALL=C.UTF-8

export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
export APT_LLVM_V="21"
export APT_LLVM_V="22"
LIBCXX_DIR="/cxx_build/"
export MSAN_FLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1 -fno-optimize-sibling-calls"
LIBCXX_FLAGS="-nostdinc++ -nostdlib++ -isystem ${LIBCXX_DIR}include/c++/v1 -L${LIBCXX_DIR}lib -Wl,-rpath,${LIBCXX_DIR}lib -lc++ -lc++abi -lpthread -Wno-unused-command-line-argument"
Expand Down
1 change: 1 addition & 0 deletions ci/test/00_setup_env_native_nowallet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ export BITCOIN_CONFIG="\
--preset=dev-mode \
-DREDUCE_EXPORTS=ON \
-DENABLE_WALLET=OFF \
-DWITH_EMBEDDED_ASMAP=OFF \
"
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_native_tsan.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8

export CONTAINER_NAME=ci_native_tsan
export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
export APT_LLVM_V="21"
export APT_LLVM_V="22"
LIBCXX_DIR="/cxx_build/"
LIBCXX_FLAGS="-fsanitize=thread -nostdinc++ -nostdlib++ -isystem ${LIBCXX_DIR}include/c++/v1 -L${LIBCXX_DIR}lib -Wl,-rpath,${LIBCXX_DIR}lib -lc++ -lc++abi -lpthread -Wno-unused-command-line-argument"
export PACKAGES="clang-${APT_LLVM_V} llvm-${APT_LLVM_V} llvm-${APT_LLVM_V}-dev libclang-${APT_LLVM_V}-dev libclang-rt-${APT_LLVM_V}-dev python3-zmq python3-pip"
Expand Down
7 changes: 1 addition & 6 deletions ci/test/01_base_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@ if [ -n "$DPKG_ADD_ARCH" ]; then
fi

if [ -n "${APT_LLVM_V}" ]; then
# Temporarily work around Sequoia PGP policy deadline for legacy repositories.
# See https://github.com/llvm/llvm-project/issues/153385.
if [ -f /usr/share/apt/default-sequoia.config ]; then
sed -i 's/\(sha1\.second_preimage_resistance =\).*/\1 9999-01-01/' /usr/share/apt/default-sequoia.config
fi
${CI_RETRY_EXE} apt-get update
${CI_RETRY_EXE} apt-get install curl -y
curl "https://apt.llvm.org/llvm-snapshot.gpg.key" | tee "/etc/apt/trusted.gpg.d/apt.llvm.org.asc"
Expand Down Expand Up @@ -62,7 +57,7 @@ if [ -n "$PIP_PACKAGES" ]; then
fi

if [[ -n "${USE_INSTRUMENTED_LIBCPP}" ]]; then
${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-21.1.5" /llvm-project
${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-22.1.0" /llvm-project

cmake -G Ninja -B /cxx_build/ \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
Expand Down
2 changes: 1 addition & 1 deletion ci/test/wrap-valgrind.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ for b_name in "${BASE_OUTDIR}/bin"/*; do
echo "Wrap $b ..."
mv "$b" "${b}_orig"
echo '#!/usr/bin/env bash' > "$b"
echo "exec valgrind --gen-suppressions=all --quiet --error-exitcode=1 --suppressions=${BASE_ROOT_DIR}/contrib/valgrind.supp \"${b}_orig\" \"\$@\"" >> "$b"
echo "exec valgrind --gen-suppressions=all --quiet --error-exitcode=1 --suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/valgrind.supp \"${b}_orig\" \"\$@\"" >> "$b"
chmod +x "$b"
done
done
10 changes: 6 additions & 4 deletions cmake/module/AddBoostIfNeeded.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,14 @@ function(add_boost_if_needed)
find_package(Boost 1.74.0 REQUIRED CONFIG)
mark_as_advanced(Boost_INCLUDE_DIR boost_headers_DIR)
# Workaround for a bug in NetBSD pkgsrc.
# See: https://github.com/NetBSD/pkgsrc/issues/167.
# See https://gnats.netbsd.org/59856.
if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
get_filename_component(_boost_include_dir "${boost_headers_DIR}/../../../include/" ABSOLUTE)
set_target_properties(Boost::headers PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${_boost_include_dir}
)
if(_boost_include_dir MATCHES "^/usr/pkg/")
set_target_properties(Boost::headers PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${_boost_include_dir}
)
endif()
unset(_boost_include_dir)
endif()
set_target_properties(Boost::headers PROPERTIES IMPORTED_GLOBAL TRUE)
Expand Down
3 changes: 1 addition & 2 deletions cmake/script/GenerateHeaderFromRaw.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,5 @@ ${formatted_bytes}
};
inline constexpr std::span ${raw_source_basename}{detail_${raw_source_basename}_raw};
}
")
}")
file(WRITE ${HEADER_PATH} "${header_content}")
Loading
Loading