Bitcoin full node and query server

Jul 25, 2026

View in context in the libbitcoin Slack #general mirror.

Kevin Ravensberg07:07
*Hardware* - AMD Ryzen 9 5950X, 16C/32T - 64 GB RAM - Samsung 990 PRO 4TB NVMe (chain on internal NVMe, not USB) - NVIDIA RTX 5080 16 GB, driver 610.62 - Windows 11 Home 26200 *Build* libbitcoin master, 2026-07-21/23: system 8f0c082, database 6cf5992, network 12ff6dc, node 5ae5d93, server 6828fdd. Toolchain: VS 2026 (18.8.12021.73), toolset *v145*, vs2026 solutions. Dependency: *UltrafastSecp256k1-vc145 4.5.0.0*. v145 is required, not preferred — the vc143 package references __std_rotate, which exists only in the v145 STL, so it will not link against any v143 toolset.
msbuild libbitcoin-<repo>.sln
  /p:Configuration=StaticRelease /p:Platform=x64
  /p:PreferredToolArchitecture=x64
  /p:Option-sha=true
  /p:Option-ultrafast=true
  /p:Option-cuda=true
  /m:2 /p:MultiProcessorCompilation=false
Option-ultrafast defines WITH_ULTRAFAST → HAVE_ULTRAFAST and sets Linkage-ultrafast=static. Option-cuda links secp256k1_gpu_host + secp256k1_cuda + cudart_static and adds /INCLUDE:secp256k1_gpu_columns_provider_anchor. *Both default to false* — build without them and it compiles clean, links no GPU, and silently runs CPU-only. Verify with a 25.6 MB .nv_fatb section in the resulting binary. (/m:2 + MultiProcessorCompilation=false only works around C1060: out of heap space on bs.vcxproj.) *Runtime config* (non-defaults only)
ini
[bitcoin]
milestone  = 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f:0
checkpoint = 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f:0

[node]
batch_signatures    = 100000
maximum_concurrency = 4000
delay_inbound       = false
thread_priority     = true
memory_priority     = true
Both milestone and checkpoint pinned to *genesis*. This is the critical setting: stock milestone is height 950,000 and bypass = is_under_checkpoint(height) || is_milestone(link), so defaults skip script/signature validation for ~99.3% of the chain. Pinned to genesis, nothing is bypassed. batch_signatures is the only GPU-related knob in libbitcoin — upstream default is now 0 (inline CPU verify). Non-zero routes through the ufsecp bridge, which binds CUDA via UFSECP_LBTC_AUTO. No device selector, no env var. Process ran under a Job Object at 75% CPU cap. *Results — 959,516 blocks, all signature-verified* - 22,450 s elapsed; tip reached at ~3 h, remainder idle at tip - signature verification: *219 s total* — ecdsa_secs 11 s over 27,835 batches, schnorr_secs 208 s over 9,951 batches - 27,834 of 27,835 ECDSA batches completed under the log's 1 s resolution; the single 11 s outlier is first-batch CUDA context/module load - observed per-batch rates 4–8M sigs/sec, consistent with the aggregate *What limited it — storage, per the run's own disk sampler (33,501 samples)* Reads climb from 27 MB/s to a 3,309 MB/s 15-minute average, peaking at 5,166 MB/s. Writes stay bursty and modest. That is prevout resolution: random lookups into the archive tables, growing with inputs-per-block and table size. archived − validated gap: p50 1,337, p90 3,954, max *4,000* — exactly maximum_concurrency. Download was pinned at its ceiling waiting on validation to drain, so this was validation-limited, not bandwidth-limited. Raising the window would not help.