mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-12 18:44:59 +01:00
Merge bitcoin/bitcoin#29899: [26.x] archive 26.1 release notes + backports
aa7e876953
[doc] add draft release notes for 26.2rc1 (glozow)21d9aaae32
p2p, bugfix: detect addnode cjdns peers in GetAddedNodeInfo() (Jon Atack)ec5ce2fb2b
windeploy: Renew certificate (Ava Chow)96d0e818c5
rpc: Reword SighashFromStr error message (MarcoFalke)6685affe92
rpc: move UniValue in blockToJSON (willcl-ark)7f45e00174
depends: Fix build of Qt for 32-bit platforms (laanwj)f9b76bae57
ci: Pull in qtbase5-dev instead of seperate low-level libraries (laanwj)c587753f48
doc: Suggest installing dev packages for debian/ubuntu qt5 build (laanwj)7ecdb0846d
ci: Bump s390x to ubuntu:24.04 (MarcoFalke)d9ef6cf934
sign: don't assume we are parsing a sane Miniscript (Antoine Poinsot)e4859c82c7
depends: fix mingw-w64 Qt DEBUG=1 build (fanquake)bb46b90b2e
Fix #29767, set m_synced = true after Commit() (nanlour)bf5b6fc8a7
Throw error if invalid parameters passed to getnetworkhashps RPC endpoint (Jameson Lopp)a81a9228fb
[rpc, bugfix] Enforce maximum value for setmocktime (dergoegge)d39ea519c7
Change Luke Dashjr seed to dashjr-list-of-p2p-nodes.us (Luke Dashjr)c21bbcc898
[doc] archive 26.1 release notes (glozow) Pull request description: Archives 26.1 release notes and adds draft release notes for 26.2rc1 Also backports: - #29691 - #29869 - #28554 - #29747 - #29853 - #29856 - #29764 - #29776 - #29985 - #30094 - #29870 - #30149 - #30085 ACKs for top commit: stickies-v: re-ACKaa7e876953
, only changes are fixing commit msg and transifex reference willcl-ark: ACKaa7e876953
Tree-SHA512: b81ba6092640de696d782114cdf43e7ed1d63ea0a3231cade30653c2743d87700e0f852a1b1fcc42ae313b2d4f004e6026ddbad87d58c2fde0a660e90026ed98
This commit is contained in:
commit
6d7a1e3670
23 changed files with 277 additions and 92 deletions
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
@ -62,7 +62,7 @@ jobs:
|
|||
echo "TEST_BASE=$(git rev-list -n$((${{ env.MAX_COUNT }} + 1)) --reverse HEAD ^$(git rev-list -n1 --merges HEAD)^@ | head -1)" >> "$GITHUB_ENV"
|
||||
- run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install clang ccache build-essential libtool autotools-dev automake pkg-config bsdmainutils python3-zmq libevent-dev libboost-dev libsqlite3-dev libdb++-dev systemtap-sdt-dev libminiupnpc-dev libnatpmp-dev libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools qtwayland5 libqrencode-dev -y
|
||||
sudo apt-get install clang ccache build-essential libtool autotools-dev automake pkg-config bsdmainutils python3-zmq libevent-dev libboost-dev libsqlite3-dev libdb++-dev systemtap-sdt-dev libminiupnpc-dev libnatpmp-dev qtbase5-dev qttools5-dev qttools5-dev-tools qtwayland5 libqrencode-dev -y
|
||||
- name: Compile and run tests
|
||||
run: |
|
||||
# Run tests on commits after the last merge commit and before the PR head commit
|
||||
|
|
|
@ -9,7 +9,7 @@ export LC_ALL=C.UTF-8
|
|||
export CI_IMAGE_NAME_TAG="docker.io/ubuntu:24.04"
|
||||
export CONTAINER_NAME=ci_native_tidy
|
||||
export TIDY_LLVM_V="17"
|
||||
export PACKAGES="clang-${TIDY_LLVM_V} libclang-${TIDY_LLVM_V}-dev llvm-${TIDY_LLVM_V}-dev libomp-${TIDY_LLVM_V}-dev clang-tidy-${TIDY_LLVM_V} jq bear cmake libevent-dev libboost-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev systemtap-sdt-dev libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libqrencode-dev libsqlite3-dev libdb++-dev"
|
||||
export PACKAGES="clang-${TIDY_LLVM_V} libclang-${TIDY_LLVM_V}-dev llvm-${TIDY_LLVM_V}-dev libomp-${TIDY_LLVM_V}-dev clang-tidy-${TIDY_LLVM_V} jq bear cmake libevent-dev libboost-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev systemtap-sdt-dev qtbase5-dev qttools5-dev qttools5-dev-tools libqrencode-dev libsqlite3-dev libdb++-dev"
|
||||
export NO_DEPENDS=1
|
||||
export RUN_UNIT_TESTS=false
|
||||
export RUN_FUNCTIONAL_TESTS=false
|
||||
|
|
|
@ -9,8 +9,8 @@ export LC_ALL=C.UTF-8
|
|||
export HOST=s390x-linux-gnu
|
||||
export PACKAGES="python3-zmq"
|
||||
export CONTAINER_NAME=ci_s390x
|
||||
export CI_IMAGE_NAME_TAG="docker.io/s390x/debian:bookworm"
|
||||
export TEST_RUNNER_EXTRA="--exclude feature_init,rpc_bind,feature_bind_extra" # Excluded for now, see https://github.com/bitcoin/bitcoin/issues/17765#issuecomment-602068547
|
||||
export CI_IMAGE_NAME_TAG="docker.io/s390x/ubuntu:24.04"
|
||||
export TEST_RUNNER_EXTRA="--exclude rpc_bind,feature_bind_extra" # Excluded for now, see https://github.com/bitcoin/bitcoin/issues/17765#issuecomment-602068547
|
||||
export RUN_FUNCTIONAL_TESTS=true
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-reduce-exports"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIHfDCCBWSgAwIBAgIQCmVvdQal72U2QxbUTT3SRTANBgkqhkiG9w0BAQsFADBp
|
||||
MIIHeTCCBWGgAwIBAgIQBzR46J2yq3g++NbQS/BBVDANBgkqhkiG9w0BAQsFADBp
|
||||
MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMT
|
||||
OERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0
|
||||
IDIwMjEgQ0ExMB4XDTIyMDUyNDAwMDAwMFoXDTI0MDUyOTIzNTk1OVowgYAxCzAJ
|
||||
IDIwMjEgQ0ExMB4XDTI0MDUyMjAwMDAwMFoXDTI3MDUzMTIzNTk1OVowgYAxCzAJ
|
||||
BgNVBAYTAlVTMREwDwYDVQQIEwhEZWxhd2FyZTEOMAwGA1UEBxMFTGV3ZXMxJjAk
|
||||
BgNVBAoTHUJpdGNvaW4gQ29yZSBDb2RlIFNpZ25pbmcgTExDMSYwJAYDVQQDEx1C
|
||||
aXRjb2luIENvcmUgQ29kZSBTaWduaW5nIExMQzCCAiIwDQYJKoZIhvcNAQEBBQAD
|
||||
|
@ -17,28 +17,28 @@ CDvScIgnQXmk+cbKMBtg9kM0F+aLWsN2xVf0uAj3U7sdXLrfJeW0DZIktWtTBQzX
|
|||
O/OE4Ka+1WFnDg0HJIih0cTjl9YYvfe53L4pCGy+qGt/XGBRqCMfXp3g+H9FGR5r
|
||||
pensVVcsrv3GbTfYdlpdmp9OHH5G57GTAZueobCZg7r7RKK0zPU9EiTLJxzyXuai
|
||||
v/Ksd8eIhHRjewMaQuAtQM1tO+oKAbLF0v2M7v7/aVT76X32JllYAizm3zjvAgMB
|
||||
AAGjggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNV
|
||||
HQ4EFgQUvCpU58PIuofv0kHJ3Ty0YDKEy3cwDgYDVR0PAQH/BAQDAgeAMBMGA1Ud
|
||||
JQQMMAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0dHA6Ly9jcmwz
|
||||
LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5
|
||||
NlNIQTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5kaWdpY2VydC5j
|
||||
b20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIx
|
||||
Q0ExLmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUFBwIBFhtodHRw
|
||||
Oi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsG
|
||||
AAGjggIDMIIB/zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNV
|
||||
HQ4EFgQUvCpU58PIuofv0kHJ3Ty0YDKEy3cwPgYDVR0gBDcwNTAzBgZngQwBBAEw
|
||||
KTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1Ud
|
||||
DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOg
|
||||
UaBPhk1odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRD
|
||||
b2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDov
|
||||
L2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdS
|
||||
U0E0MDk2U0hBMzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsG
|
||||
AQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0
|
||||
dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVT
|
||||
aWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB/wQCMAAwDQYJ
|
||||
KoZIhvcNAQELBQADggIBABhpTZufRws1vrtI0xB1/UWrSEJxdPHivfpXE708dzum
|
||||
Jh3TFzpsEUCQX5BJJet1l7x92sKNeAL7votA+8O8YvMD64Kim7VKA2BB8AOHKQbp
|
||||
r1c2iZBwwofInviRYvsrvQta6KBy2KOe1L/l0KnpUazL9Tv4VKvuWAw/Qc0/eTQr
|
||||
NZRsmADORxnZ1qW+SpF+/WbazIYjod/Oqb1U3on+PzyiGD3SjzNhsdFRptqzrIaY
|
||||
UVV+2XHG4fN6A8wkyQL5NIVXGiK7rqS5VrRAv58Lf1ZZTghdAL+5SySE0OsR9t0K
|
||||
W73ZB9pxbuZZ6Zfxjotjw+IilCEm3ADbc7Eb2ijI4x8mix0XWMUrhL34s7/jRyDi
|
||||
P+30aSgjWp611tp/EYRW5kpIaFR8AesDdM0DSSCCRXOMwQG2Tq2+CnqItB5oLNPp
|
||||
2XySwlIWvmjbzsREfIpE3yh3bxmHY+vFIc2R0nNkbWNIT6AGtaEQ7oWkgpK8YMkA
|
||||
QCf4EUC4Qa7qHiH6YSmYJhjApBLC7UDwevgwxuDrwimWAj+tDkzdnENMcBp4SAy6
|
||||
LwUuDi2IU6HRSXWdh2YEkDbc3FdwknnnEWaB4dlRL85YjHyLXN0KiE7SKTj1LfR4
|
||||
dGeDqVUlDj9D5+X4a7F89wLP/um40/52HUQv5t5WcNr/47r9aVkx9DHs1b8oUnLg
|
||||
aWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZI
|
||||
hvcNAQELBQADggIBADdniG9IY9oOfw1e3+uc2lR4hoZqquJQRrCnbWJ1npnCTavI
|
||||
CfcEEMuQ5ztg4TR7tQNj2KcaHWKuPYxEz2bg8HpSPG27lnXaz4pLgfqvjdZWNH2v
|
||||
W6DGRUAwuMQHSV0qhuRcJPZuhwSFx/8y4r++jIcBxCbt/Jprt/bqc8vZZZzTDPfG
|
||||
M6cGaKMDvF//OkUPVzh4s557kV7+LoaX8CigiACZky3Zj3tkQfJYkEvdQseNvX49
|
||||
CMJ+cjN+fGweshbn/DszAT5oXW5l2PXeceyGrE+5Ex1ELXCPqNj8ZSn+S9IKZOag
|
||||
zDFBA93RTVD438peXPz//xgusgnmSqSPS5tCp9KSvew81acu4v/+egg9EgSSx5Ho
|
||||
9fkOX7JuygvN3r3UZqsddxdwf2dPvBDYlMdieF8qsR7H5DQPQoaTVrIhW4TFtJl/
|
||||
UPjVlnDwu+yvMC70F+CaVgQs01uZ0VKuG3KNkkEj6+V/SM54NVVgcY/Q7llKIFA8
|
||||
Qk8Ip8/83cVBptKW+OU+i2ZwoYskLbdfDE31X2knUIouNZgBBMhzc5WjJCEGXAPm
|
||||
9xYZMn87cc+ejxCw6/WC4b6tDCziO8drq76Pl6LTNPOtRkEVqt12p8Uqi9PgznUB
|
||||
bdHeoF5XHt1Ca2ySpSYuMz5djwIC2ws8kiMm44/AyTm6dwRcesiOTqnaRc+t
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGsDCCBJigAwIBAgIQCK1AsmDSnEyfXs2pvZOu2TANBgkqhkiG9w0BAQwFADBi
|
||||
|
|
|
@ -23,6 +23,7 @@ $(package)_patches += guix_cross_lib_path.patch
|
|||
$(package)_patches += fix-macos-linker.patch
|
||||
$(package)_patches += memory_resource.patch
|
||||
$(package)_patches += windows_lto.patch
|
||||
$(package)_patches += zlib-timebits64.patch
|
||||
|
||||
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
|
||||
$(package)_qttranslations_sha256_hash=38b942bc7e62794dd072945c8a92bb9dfffed24070aea300327a3bb42f855609
|
||||
|
@ -180,6 +181,7 @@ $(package)_config_opts_mingw32 += -xplatform win32-g++
|
|||
$(package)_config_opts_mingw32 += "QMAKE_CFLAGS = '$($(package)_cflags) $($(package)_cppflags)'"
|
||||
$(package)_config_opts_mingw32 += "QMAKE_CXX = '$($(package)_cxx)'"
|
||||
$(package)_config_opts_mingw32 += "QMAKE_CXXFLAGS = '$($(package)_cxxflags) $($(package)_cppflags)'"
|
||||
$(package)_config_opts_mingw32 += "QMAKE_LINK = '$($(package)_cxx)'"
|
||||
$(package)_config_opts_mingw32 += "QMAKE_LFLAGS = '$($(package)_ldflags)'"
|
||||
$(package)_config_opts_mingw32 += "QMAKE_LIB = '$($(package)_ar) rc'"
|
||||
$(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-"
|
||||
|
@ -255,6 +257,7 @@ define $(package)_preprocess_cmds
|
|||
patch -p1 -i $($(package)_patch_dir)/fast_fixed_dtoa_no_optimize.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/guix_cross_lib_path.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/windows_lto.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/zlib-timebits64.patch && \
|
||||
mkdir -p qtbase/mkspecs/macx-clang-linux &&\
|
||||
cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\
|
||||
cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \
|
||||
|
|
31
depends/patches/qt/zlib-timebits64.patch
Normal file
31
depends/patches/qt/zlib-timebits64.patch
Normal file
|
@ -0,0 +1,31 @@
|
|||
From a566e156b3fa07b566ddbf6801b517a9dba04fa3 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Adler <madler@alumni.caltech.edu>
|
||||
Date: Sat, 29 Jul 2023 22:13:09 -0700
|
||||
Subject: [PATCH] Avoid compiler complaints if _TIME_BITS defined when building
|
||||
zlib.
|
||||
|
||||
zlib does not use time_t, so _TIME_BITS is irrelevant. However it
|
||||
may be defined anyway as part of a sledgehammer indiscriminately
|
||||
applied to all builds.
|
||||
|
||||
From https://github.com/madler/zlib/commit/a566e156b3fa07b566ddbf6801b517a9dba04fa3.patch
|
||||
---
|
||||
qtbase/src/3rdparty/zlib/src/gzguts.h | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/qtbase/src/3rdparty/zlib/src/gzguts.h b/qtbase/src/3rdparty/zlib/src/gzguts.h
|
||||
index e23f831f5..f9375047e 100644
|
||||
--- a/qtbase/src/3rdparty/zlib/src/gzguts.h
|
||||
+++ b/qtbase/src/3rdparty/zlib/src/gzguts.h
|
||||
@@ -26,9 +26,8 @@
|
||||
# ifndef _LARGEFILE_SOURCE
|
||||
# define _LARGEFILE_SOURCE 1
|
||||
# endif
|
||||
-# ifdef _FILE_OFFSET_BITS
|
||||
-# undef _FILE_OFFSET_BITS
|
||||
-# endif
|
||||
+# undef _FILE_OFFSET_BITS
|
||||
+# undef _TIME_BITS
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_HIDDEN
|
|
@ -81,7 +81,7 @@ To build without GUI pass `--without-gui`.
|
|||
|
||||
To build with Qt 5 you need the following:
|
||||
|
||||
sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools
|
||||
sudo apt-get install qtbase5-dev qttools5-dev qttools5-dev-tools
|
||||
|
||||
Additionally, to support Wayland protocol for modern desktop environments:
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
26.1 Release Notes
|
||||
26.2rc1 Release Notes
|
||||
==================
|
||||
|
||||
Bitcoin Core version 26.1 is now available from:
|
||||
Bitcoin Core version 26.2rc1 is now available from:
|
||||
|
||||
<https://bitcoincore.org/bin/bitcoin-core-26.1/>
|
||||
<https://bitcoincore.org/bin/bitcoin-core-26.2/test.rc1/>
|
||||
|
||||
This release includes various bug fixes and performance
|
||||
This release includes new features, various bug fixes and performance
|
||||
improvements, as well as updated translations.
|
||||
|
||||
Please report bugs using the issue tracker at GitHub:
|
||||
|
@ -40,66 +40,51 @@ unsupported systems.
|
|||
Notable changes
|
||||
===============
|
||||
|
||||
### Wallet
|
||||
### Script
|
||||
|
||||
- #28994 wallet: skip BnB when SFFO is enabled
|
||||
- #28920 wallet: birth time update during tx scanning
|
||||
- #29176 wallet: Fix use-after-free in WalletBatch::EraseRecords
|
||||
- #29510 wallet: getrawchangeaddress and getnewaddress failures should not affect keypools for descriptor wallets
|
||||
|
||||
### RPC
|
||||
|
||||
- #29003 rpc: fix getrawtransaction segfault
|
||||
- #28784 rpc: keep .cookie file if it was not generated
|
||||
|
||||
### Logs
|
||||
|
||||
- #29227 log mempool loading progress
|
||||
- #29853: sign: don't assume we are parsing a sane TapMiniscript
|
||||
|
||||
### P2P and network changes
|
||||
|
||||
- #29200 net: create I2P sessions using both ECIES-X25519 and ElGamal encryption
|
||||
- #29412 p2p: Don't process mutated blocks
|
||||
- #29524 p2p: Don't consider blocks mutated if they don't connect to known prev block
|
||||
- #29691: Change Luke Dashjr seed to dashjr-list-of-p2p-nodes.us
|
||||
- #30085: p2p: detect addnode cjdns peers in GetAddedNodeInfo()
|
||||
|
||||
### RPC
|
||||
|
||||
- #29869: rpc, bugfix: Enforce maximum value for setmocktime
|
||||
- #28554: bugfix: throw an error if an invalid parameter is passed to getnetworkhashps RPC
|
||||
- #30094: rpc: move UniValue in blockToJSON
|
||||
- #29870: rpc: Reword SighashFromStr error message
|
||||
|
||||
### Build
|
||||
|
||||
- #29127 Use hardened runtime on macOS release builds.
|
||||
- #29195 build: Fix -Xclang -internal-isystem option
|
||||
- #29747: depends: fix mingw-w64 Qt DEBUG=1 build
|
||||
- #29985: depends: Fix build of Qt for 32-bit platforms with recent glibc
|
||||
|
||||
### CI
|
||||
### Misc
|
||||
|
||||
- #28992 ci: Use Ubuntu 24.04 Noble for asan,tsan,tidy,fuzz
|
||||
- #29080 ci: Set HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK to avoid unrelated failures
|
||||
- #29610 ci: Fix "macOS native" job
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
- #28391 refactor: Simplify CTxMempool/BlockAssembler fields, remove some external mapTx access
|
||||
- #29179 test: wallet rescan with reorged parent + IsFromMe child in mempool
|
||||
- #28791 snapshots: don't core dump when running -checkblockindex after loadtxoutset
|
||||
- #29357 test: Drop x modifier in fsbridge::fopen call for MinGW builds
|
||||
- #29529 fuzz: restrict fopencookie usage to Linux & FreeBSD
|
||||
- #29776: ThreadSanitizer: Fix #29767
|
||||
- #29856: ci: Bump s390x to ubuntu:24.04
|
||||
- #29764: doc: Suggest installing dev packages for debian/ubuntu qt5 build
|
||||
- #30149: contrib: Renew Windows code signing certificate
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Thanks to everyone who directly contributed to this release:
|
||||
|
||||
- Antoine Poinsot
|
||||
- Ava Chow
|
||||
- dergoegge
|
||||
- fanquake
|
||||
- furszy
|
||||
- glozow
|
||||
- Greg Sanders
|
||||
- Hennadii Stepanov
|
||||
- Jon Atack
|
||||
- Jameson Lopp
|
||||
- jonatack
|
||||
- laanwj
|
||||
- Luke Dashjr
|
||||
- MarcoFalke
|
||||
- Mark Friedenbach
|
||||
- Martin Zumsande
|
||||
- Murch
|
||||
- Roman Zeyde
|
||||
- stickies-v
|
||||
- UdjinM6
|
||||
- nanlour
|
||||
- willcl-ark
|
||||
|
||||
As well as to everyone that helped with translations on
|
||||
[Transifex](https://www.transifex.com/bitcoin/bitcoin/).
|
||||
|
|
105
doc/release-notes/release-notes-26.1.md
Normal file
105
doc/release-notes/release-notes-26.1.md
Normal file
|
@ -0,0 +1,105 @@
|
|||
26.1 Release Notes
|
||||
==================
|
||||
|
||||
Bitcoin Core version 26.1 is now available from:
|
||||
|
||||
<https://bitcoincore.org/bin/bitcoin-core-26.1/>
|
||||
|
||||
This release includes various bug fixes and performance
|
||||
improvements, as well as updated translations.
|
||||
|
||||
Please report bugs using the issue tracker at GitHub:
|
||||
|
||||
<https://github.com/bitcoin/bitcoin/issues>
|
||||
|
||||
To receive security and update notifications, please subscribe to:
|
||||
|
||||
<https://bitcoincore.org/en/list/announcements/join/>
|
||||
|
||||
How to Upgrade
|
||||
==============
|
||||
|
||||
If you are running an older version, shut it down. Wait until it has completely
|
||||
shut down (which might take a few minutes in some cases), then run the
|
||||
installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on macOS)
|
||||
or `bitcoind`/`bitcoin-qt` (on Linux).
|
||||
|
||||
Upgrading directly from a version of Bitcoin Core that has reached its EOL is
|
||||
possible, but it might take some time if the data directory needs to be migrated. Old
|
||||
wallet versions of Bitcoin Core are generally supported.
|
||||
|
||||
Compatibility
|
||||
==============
|
||||
|
||||
Bitcoin Core is supported and extensively tested on operating systems
|
||||
using the Linux kernel, macOS 11.0+, and Windows 7 and newer. Bitcoin
|
||||
Core should also work on most other Unix-like systems but is not as
|
||||
frequently tested on them. It is not recommended to use Bitcoin Core on
|
||||
unsupported systems.
|
||||
|
||||
Notable changes
|
||||
===============
|
||||
|
||||
### Wallet
|
||||
|
||||
- #28994 wallet: skip BnB when SFFO is enabled
|
||||
- #28920 wallet: birth time update during tx scanning
|
||||
- #29176 wallet: Fix use-after-free in WalletBatch::EraseRecords
|
||||
- #29510 wallet: getrawchangeaddress and getnewaddress failures should not affect keypools for descriptor wallets
|
||||
|
||||
### RPC
|
||||
|
||||
- #29003 rpc: fix getrawtransaction segfault
|
||||
- #28784 rpc: keep .cookie file if it was not generated
|
||||
|
||||
### Logs
|
||||
|
||||
- #29227 log mempool loading progress
|
||||
|
||||
### P2P and network changes
|
||||
|
||||
- #29200 net: create I2P sessions using both ECIES-X25519 and ElGamal encryption
|
||||
- #29412 p2p: Don't process mutated blocks
|
||||
- #29524 p2p: Don't consider blocks mutated if they don't connect to known prev block
|
||||
|
||||
### Build
|
||||
|
||||
- #29127 Use hardened runtime on macOS release builds.
|
||||
- #29195 build: Fix -Xclang -internal-isystem option
|
||||
|
||||
### CI
|
||||
|
||||
- #28992 ci: Use Ubuntu 24.04 Noble for asan,tsan,tidy,fuzz
|
||||
- #29080 ci: Set HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK to avoid unrelated failures
|
||||
- #29610 ci: Fix "macOS native" job
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
- #28391 refactor: Simplify CTxMempool/BlockAssembler fields, remove some external mapTx access
|
||||
- #29179 test: wallet rescan with reorged parent + IsFromMe child in mempool
|
||||
- #28791 snapshots: don't core dump when running -checkblockindex after loadtxoutset
|
||||
- #29357 test: Drop x modifier in fsbridge::fopen call for MinGW builds
|
||||
- #29529 fuzz: restrict fopencookie usage to Linux & FreeBSD
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Thanks to everyone who directly contributed to this release:
|
||||
|
||||
- dergoegge
|
||||
- fanquake
|
||||
- furszy
|
||||
- glozow
|
||||
- Greg Sanders
|
||||
- Hennadii Stepanov
|
||||
- Jon Atack
|
||||
- MarcoFalke
|
||||
- Mark Friedenbach
|
||||
- Martin Zumsande
|
||||
- Murch
|
||||
- Roman Zeyde
|
||||
- stickies-v
|
||||
- UdjinM6
|
||||
|
||||
As well as to everyone that helped with translations on
|
||||
[Transifex](https://www.transifex.com/bitcoin/bitcoin/).
|
|
@ -257,6 +257,6 @@ util::Result<int> SighashFromStr(const std::string& sighash)
|
|||
if (it != map_sighash_values.end()) {
|
||||
return it->second;
|
||||
} else {
|
||||
return util::Error{Untranslated(sighash + " is not a valid sighash parameter.")};
|
||||
return util::Error{Untranslated("'" + sighash + "' is not a valid sighash parameter.")};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -165,9 +165,9 @@ void BaseIndex::ThreadSync()
|
|||
const CBlockIndex* pindex_next = NextSyncBlock(pindex, m_chainstate->m_chain);
|
||||
if (!pindex_next) {
|
||||
SetBestBlockIndex(pindex);
|
||||
m_synced = true;
|
||||
// No need to handle errors in Commit. See rationale above.
|
||||
Commit();
|
||||
m_synced = true;
|
||||
break;
|
||||
}
|
||||
if (pindex_next->pprev != pindex && !Rewind(pindex, pindex_next->pprev)) {
|
||||
|
|
|
@ -133,7 +133,7 @@ public:
|
|||
// release ASAP to avoid it where possible.
|
||||
vSeeds.emplace_back("seed.bitcoin.sipa.be."); // Pieter Wuille, only supports x1, x5, x9, and xd
|
||||
vSeeds.emplace_back("dnsseed.bluematt.me."); // Matt Corallo, only supports x9
|
||||
vSeeds.emplace_back("dnsseed.bitcoin.dashjr.org."); // Luke Dashjr
|
||||
vSeeds.emplace_back("dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us."); // Luke Dashjr
|
||||
vSeeds.emplace_back("seed.bitcoinstats.com."); // Christian Decker, supports x1 - xf
|
||||
vSeeds.emplace_back("seed.bitcoin.jonasschnelli.ch."); // Jonas Schnelli, only supports x1, x5, x9, and xd
|
||||
vSeeds.emplace_back("seed.btc.petertodd.org."); // Peter Todd, only supports x1, x5, x9, and xd
|
||||
|
|
|
@ -2794,7 +2794,7 @@ std::vector<AddedNodeInfo> CConnman::GetAddedNodeInfo() const
|
|||
}
|
||||
|
||||
for (const auto& addr : lAddresses) {
|
||||
CService service(LookupNumeric(addr.m_added_node, GetDefaultPort(addr.m_added_node)));
|
||||
CService service{MaybeFlipIPv6toCJDNS(LookupNumeric(addr.m_added_node, GetDefaultPort(addr.m_added_node)))};
|
||||
AddedNodeInfo addedNode{addr, CService(), false, false};
|
||||
if (service.IsValid()) {
|
||||
// strAddNode is an IP:port
|
||||
|
|
|
@ -190,12 +190,12 @@ UniValue blockToJSON(BlockManager& blockman, const CBlock& block, const CBlockIn
|
|||
const CTxUndo* txundo = (have_undo && i > 0) ? &blockUndo.vtxundo.at(i - 1) : nullptr;
|
||||
UniValue objTx(UniValue::VOBJ);
|
||||
TxToUniv(*tx, /*block_hash=*/uint256(), /*entry=*/objTx, /*include_hex=*/true, RPCSerializationFlags(), txundo, verbosity);
|
||||
txs.push_back(objTx);
|
||||
txs.push_back(std::move(objTx));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
result.pushKV("tx", txs);
|
||||
result.pushKV("tx", std::move(txs));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -49,13 +49,22 @@ using node::UpdateTime;
|
|||
|
||||
/**
|
||||
* Return average network hashes per second based on the last 'lookup' blocks,
|
||||
* or from the last difficulty change if 'lookup' is nonpositive.
|
||||
* If 'height' is nonnegative, compute the estimate at the time when a given block was found.
|
||||
* or from the last difficulty change if 'lookup' is -1.
|
||||
* If 'height' is -1, compute the estimate from current chain tip.
|
||||
* If 'height' is a valid block height, compute the estimate at the time when a given block was found.
|
||||
*/
|
||||
static UniValue GetNetworkHashPS(int lookup, int height, const CChain& active_chain) {
|
||||
if (lookup < -1 || lookup == 0) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid nblocks. Must be a positive number or -1.");
|
||||
}
|
||||
|
||||
if (height < -1 || height > active_chain.Height()) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Block does not exist at specified height");
|
||||
}
|
||||
|
||||
const CBlockIndex* pb = active_chain.Tip();
|
||||
|
||||
if (height >= 0 && height < active_chain.Height()) {
|
||||
if (height >= 0) {
|
||||
pb = active_chain[height];
|
||||
}
|
||||
|
||||
|
@ -63,7 +72,7 @@ static UniValue GetNetworkHashPS(int lookup, int height, const CChain& active_ch
|
|||
return 0;
|
||||
|
||||
// If lookup is -1, then use blocks since last difficulty change.
|
||||
if (lookup <= 0)
|
||||
if (lookup == -1)
|
||||
lookup = pb->nHeight % Params().GetConsensus().DifficultyAdjustmentInterval() + 1;
|
||||
|
||||
// If lookup is larger than chain, then set it to chain length.
|
||||
|
@ -97,7 +106,7 @@ static RPCHelpMan getnetworkhashps()
|
|||
"Pass in [blocks] to override # of blocks, -1 specifies since last difficulty change.\n"
|
||||
"Pass in [height] to estimate the network speed at the time when a certain block was found.\n",
|
||||
{
|
||||
{"nblocks", RPCArg::Type::NUM, RPCArg::Default{120}, "The number of blocks, or -1 for blocks since last difficulty change."},
|
||||
{"nblocks", RPCArg::Type::NUM, RPCArg::Default{120}, "The number of previous blocks to calculate estimate from, or -1 for blocks since last difficulty change."},
|
||||
{"height", RPCArg::Type::NUM, RPCArg::Default{-1}, "To estimate at the time of the given height."},
|
||||
},
|
||||
RPCResult{
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <univalue.h>
|
||||
#include <util/any.h>
|
||||
#include <util/check.h>
|
||||
#include <util/time.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#ifdef HAVE_MALLOC_INFO
|
||||
|
@ -54,9 +55,11 @@ static RPCHelpMan setmocktime()
|
|||
LOCK(cs_main);
|
||||
|
||||
const int64_t time{request.params[0].getInt<int64_t>()};
|
||||
if (time < 0) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Mocktime cannot be negative: %s.", time));
|
||||
constexpr int64_t max_time{Ticks<std::chrono::seconds>(std::chrono::nanoseconds::max())};
|
||||
if (time < 0 || time > max_time) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Mocktime must be in the range [0, %s], not %s.", max_time, time));
|
||||
}
|
||||
|
||||
SetMockTime(time);
|
||||
const NodeContext& node_context{EnsureAnyNodeContext(request.context)};
|
||||
for (const auto& chain_client : node_context.chain_clients) {
|
||||
|
|
|
@ -295,7 +295,7 @@ struct TapSatisfier: Satisfier<XOnlyPubKey> {
|
|||
//! Conversion from a raw xonly public key.
|
||||
template <typename I>
|
||||
std::optional<XOnlyPubKey> FromPKBytes(I first, I last) const {
|
||||
CHECK_NONFATAL(last - first == 32);
|
||||
if (last - first != 32) return {};
|
||||
XOnlyPubKey pubkey;
|
||||
std::copy(first, last, pubkey.begin());
|
||||
return pubkey;
|
||||
|
|
|
@ -1276,6 +1276,30 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
|
|||
BOOST_CHECK(combined.scriptSig == partial3c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reproduction of an exception incorrectly raised when parsing a public key inside a TapMiniscript.
|
||||
*/
|
||||
BOOST_AUTO_TEST_CASE(sign_invalid_miniscript)
|
||||
{
|
||||
FillableSigningProvider keystore;
|
||||
SignatureData sig_data;
|
||||
CMutableTransaction prev, curr;
|
||||
|
||||
// Create a Taproot output which contains a leaf in which a non-32 bytes push is used where a public key is expected
|
||||
// by the Miniscript parser. This offending Script was found by the RPC fuzzer.
|
||||
const auto invalid_pubkey{ParseHex("173d36c8c9c9c9ffffffffffff0200000000021e1e37373721361818181818181e1e1e1e19000000000000000000b19292929292926b006c9b9b9292")};
|
||||
TaprootBuilder builder;
|
||||
builder.Add(0, {invalid_pubkey}, 0xc0);
|
||||
XOnlyPubKey nums{ParseHex("50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0")};
|
||||
builder.Finalize(nums);
|
||||
prev.vout.emplace_back(0, GetScriptForDestination(builder.GetOutput()));
|
||||
curr.vin.emplace_back(COutPoint{prev.GetHash(), 0});
|
||||
sig_data.tr_spenddata = builder.GetSpendData();
|
||||
|
||||
// SignSignature can fail but it shouldn't raise an exception (nor crash).
|
||||
BOOST_CHECK(!SignSignature(keystore, CTransaction(prev), curr, 0, SIGHASH_ALL, sig_data));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(script_standard_push)
|
||||
{
|
||||
ScriptError err;
|
||||
|
|
|
@ -436,7 +436,6 @@ class BlockchainTest(BitcoinTestFramework):
|
|||
|
||||
def _test_getnetworkhashps(self):
|
||||
self.log.info("Test getnetworkhashps")
|
||||
hashes_per_second = self.nodes[0].getnetworkhashps()
|
||||
assert_raises_rpc_error(
|
||||
-3,
|
||||
textwrap.dedent("""
|
||||
|
@ -448,7 +447,33 @@ class BlockchainTest(BitcoinTestFramework):
|
|||
""").strip(),
|
||||
lambda: self.nodes[0].getnetworkhashps("a", []),
|
||||
)
|
||||
assert_raises_rpc_error(
|
||||
-8,
|
||||
"Block does not exist at specified height",
|
||||
lambda: self.nodes[0].getnetworkhashps(100, self.nodes[0].getblockcount() + 1),
|
||||
)
|
||||
assert_raises_rpc_error(
|
||||
-8,
|
||||
"Block does not exist at specified height",
|
||||
lambda: self.nodes[0].getnetworkhashps(100, -10),
|
||||
)
|
||||
assert_raises_rpc_error(
|
||||
-8,
|
||||
"Invalid nblocks. Must be a positive number or -1.",
|
||||
lambda: self.nodes[0].getnetworkhashps(-100),
|
||||
)
|
||||
assert_raises_rpc_error(
|
||||
-8,
|
||||
"Invalid nblocks. Must be a positive number or -1.",
|
||||
lambda: self.nodes[0].getnetworkhashps(0),
|
||||
)
|
||||
|
||||
# Genesis block height estimate should return 0
|
||||
hashes_per_second = self.nodes[0].getnetworkhashps(100, 0)
|
||||
assert_equal(hashes_per_second, 0)
|
||||
|
||||
# This should be 2 hashes every 10 minutes or 1/300
|
||||
hashes_per_second = self.nodes[0].getnetworkhashps()
|
||||
assert abs(hashes_per_second * 300 - 1) < 0.0001
|
||||
|
||||
def _test_stopatheight(self):
|
||||
|
|
|
@ -889,7 +889,7 @@ class PSBTTest(BitcoinTestFramework):
|
|||
assert_equal(comb_psbt, psbt)
|
||||
|
||||
self.log.info("Test walletprocesspsbt raises if an invalid sighashtype is passed")
|
||||
assert_raises_rpc_error(-8, "all is not a valid sighash parameter.", self.nodes[0].walletprocesspsbt, psbt, sighashtype="all")
|
||||
assert_raises_rpc_error(-8, "'all' is not a valid sighash parameter.", self.nodes[0].walletprocesspsbt, psbt, sighashtype="all")
|
||||
|
||||
self.log.info("Test decoding PSBT with per-input preimage types")
|
||||
# note that the decodepsbt RPC doesn't check whether preimages and hashes match
|
||||
|
@ -996,7 +996,7 @@ class PSBTTest(BitcoinTestFramework):
|
|||
self.nodes[2].sendrawtransaction(processed_psbt['hex'])
|
||||
|
||||
self.log.info("Test descriptorprocesspsbt raises if an invalid sighashtype is passed")
|
||||
assert_raises_rpc_error(-8, "all is not a valid sighash parameter.", self.nodes[2].descriptorprocesspsbt, psbt, [descriptor], sighashtype="all")
|
||||
assert_raises_rpc_error(-8, "'all' is not a valid sighash parameter.", self.nodes[2].descriptorprocesspsbt, psbt, [descriptor], sighashtype="all")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -124,7 +124,7 @@ class SignRawTransactionWithKeyTest(BitcoinTestFramework):
|
|||
self.log.info("Test signing transaction with invalid sighashtype")
|
||||
tx = self.nodes[0].createrawtransaction(INPUTS, OUTPUTS)
|
||||
privkeys = [self.nodes[0].get_deterministic_priv_key().key]
|
||||
assert_raises_rpc_error(-8, "all is not a valid sighash parameter.", self.nodes[0].signrawtransactionwithkey, tx, privkeys, sighashtype="all")
|
||||
assert_raises_rpc_error(-8, "'all' is not a valid sighash parameter.", self.nodes[0].signrawtransactionwithkey, tx, privkeys, sighashtype="all")
|
||||
|
||||
def run_test(self):
|
||||
self.successful_signing_test()
|
||||
|
|
|
@ -23,7 +23,7 @@ class UptimeTest(BitcoinTestFramework):
|
|||
self._test_uptime()
|
||||
|
||||
def _test_negative_time(self):
|
||||
assert_raises_rpc_error(-8, "Mocktime cannot be negative: -1.", self.nodes[0].setmocktime, -1)
|
||||
assert_raises_rpc_error(-8, "Mocktime must be in the range [0, 9223372036], not -1.", self.nodes[0].setmocktime, -1)
|
||||
|
||||
def _test_uptime(self):
|
||||
wait_time = 10
|
||||
|
|
|
@ -56,7 +56,7 @@ class SignRawTransactionWithWalletTest(BitcoinTestFramework):
|
|||
|
||||
def test_with_invalid_sighashtype(self):
|
||||
self.log.info("Test signrawtransactionwithwallet raises if an invalid sighashtype is passed")
|
||||
assert_raises_rpc_error(-8, "all is not a valid sighash parameter.", self.nodes[0].signrawtransactionwithwallet, hexstring=RAW_TX, sighashtype="all")
|
||||
assert_raises_rpc_error(-8, "'all' is not a valid sighash parameter.", self.nodes[0].signrawtransactionwithwallet, hexstring=RAW_TX, sighashtype="all")
|
||||
|
||||
def script_verification_error_test(self):
|
||||
"""Create and sign a raw transaction with valid (vin 0), invalid (vin 1) and one missing (vin 2) input script.
|
||||
|
|
Loading…
Add table
Reference in a new issue