Bitcoin full node and query server

Node Performance

Performance measurements of libbitcoin-server across machines and configurations, some with Bitcoin Core, libsecp256k1, or UltrafastSecp256k1 comparisons.

See also server performance.

Milestone

Full validation

Mainnet and testnets

Hashing

Cryptography

Batching

Scanning

Store size

Analysis

Hardware acceleration

Intel (x86, x64)

AccelerationAlgorithmApplied toMethod
SSE4.1, AVX2, AVX-512SHA-256block and transaction hashing, merkle roots4, 8 or 16 messages per vector
SSE4.1, AVX2, AVX-512SHA-512SHA-512 hashing2, 4 or 8 messages per vector
SSE4.1, AVX2, AVX-512ChaCha20P2P encryption (BIP-324), TLS4, 8 or 16 keystream blocks per vector
SSE4.1, AVX2, AVX-512Poly1305P2P encryption (BIP-324), TLS2, 4 or 8 blocks per vector
SSE4.1, AVX2, AVX-512SipHashcompact block short ids2, 4 or 8 transactions per vector
SSE4.1, AVX2, AVX-512AES (bitsliced)TLS AES-GCM without AES-NI8, 16 or 32 counter blocks per vector
SHA-NISHA-256, SHA-1block and transaction hashing, merkle rootsnative, with two-message interleaved double hash
SHA512SHA-512SHA-512 hashingnative
AES-NI, PCLMULQDQAES-GCMTLSnative, 4 counter blocks interleaved, carry-less GHASH
VAES, VPCLMULQDQAES-GCMTLS8 or 16 counter blocks per vector
AVX-IFMA, AVX-512 IFMAsecp256k1batch ECDSA and Schnorr verification, silent payment indexing and scanning4 or 8 field multiplies per vector
CUDAsecp256k1batch ECDSA and Schnorr verification, silent payment indexing and scanningone signature or output per GPU thread

ARM (ARM64)

AccelerationAlgorithmApplied toMethod
NEONSHA-256block and transaction hashing, merkle roots4 messages per vector
NEONSHA-512SHA-512 hashing2 messages per vector
NEONChaCha20P2P encryption (BIP-324), TLS4 keystream blocks per vector
NEONPoly1305P2P encryption (BIP-324), TLS2 blocks per vector
NEONSipHashcompact block short ids2 transactions per vector
NEONAES (bitsliced)TLS AES-GCM without AES8 counter blocks per vector
SHA2SHA-256, SHA-1block and transaction hashing, merkle rootsnative
SHA3SHA-512SHA-512 hashingnative
AES, PMULLAES-GCMTLSnative, carry-less GHASH
CUDAsecp256k1batch ECDSA and Schnorr verification, silent payment indexing and scanningone signature or output per GPU thread

All are supported on all operating systems and compilers, except CUDA on macOS. CPU intrinsics are selected at build time. CUDA is selected at runtime when an NVIDIA driver is present, otherwise batches run on the CPU.

Hardware report

Threadripper PRO 9985WX, RTX PRO 6000
bs --hardware
Hardware configuration (x64)...
aesni....... platform:1 compiled:1.
vaes........ platform:1 compiled:1.
shani....... platform:1 compiled:1.
sha512...... platform:0 compiled:0.
sse41....... platform:1 compiled:1.
avx2........ platform:1 compiled:1.
avx512...... platform:1 compiled:1.
avxifma..... platform:0 compiled:0.
avx512ifma.. platform:1 compiled:1.
cuda........ platform:1 compiled:1.
cuda ecc.... platform:1 enabled:0.
Raspberry Pi 5
bs --hardware
Hardware configuration (arm64)...
aes......... platform:1 compiled:1.
sha......... platform:1 compiled:1.
sha3........ platform:0 compiled:0.
neon........ platform:1 compiled:1.
cuda........ platform:0 compiled:1.
cuda ecc.... platform:0 enabled:0.

Platform is what the processor or GPU supports, compiled is what the build includes. A feature with platform 1 and compiled 0 is available but unused, and is enabled by building with its option. CUDA ECC reports whether the GPU has error correcting memory enabled, which is required for strict equivalence of GPU and CPU signature verification. It is enabled by the GPU owner.

Constant time performance considerations

Bitcoin

UseSecretOperationConstant timeFaster alternative avoided
BIP-324ephemeral secp256k1 keykey generationyes, blinded, full table reads, masked additionsunblinded multiply, direct table lookups
ECDHyes, blinded, fixed exponent inversionvariable time multiply and inversion
HKDF-SHA-256, FSChaCha20-Poly1305yes, by construction
Silent payment scanningclient scan keyscan key multiply, CPUyes, constant time in the keyvariable time windowed multiply
scan key multiply, GPUno, variable time (omit CUDA to opt out)

General

UseSecretOperationConstant timeFaster alternative avoided
ZeroMQ CurveZMQCurve25519 keysX25519yes, conditional swap ladder, fixed exponent inversionvariable time inversion
XSalsa20-Poly1305yes, by construction
TLS record layersession keysAES-GCM, hardwareyes
AES-GCM, no AES instructionsyes, bitsliced AES and portable GHASHtable lookups
ChaCha20-Poly1305yes, by construction
TLS key exchangeephemeral private keyX25519yes, conditional swap ladder, fixed exponent inversionvariable time inversion
ECDHE P-256, P-384yes, full table readsvariable time windowed multiply
TLS key scheduleshared and traffic secretsHKDF with HMAC-SHA-256/384yes, by construction
TLS server signaturecertificate private keyECDSA P-256, P-384, RFC 6979 nonceyes, full table readsvariable time windowed multiply
HTTP basic authconfigured passwordSHA-256 of the header, digest comparisonno, early exit reveals only the hash

GPU silent payment scanning is left variable time, as it is a server scenario in which the scan key is already disclosed to the server. Authentication tag and TLS Finished comparisons are constant time. Operations on public values, including block and transaction signature verification, TLS client certificate verification, and ElligatorSwift decoding, use the faster variable time paths.

Copyright © 2011-2026 libbitcoin developers