diff --git a/README.md b/README.md
index 2eab2315eb6..4b589d03376 100644
--- a/README.md
+++ b/README.md
@@ -69,7 +69,7 @@ Translations
------------
Changes to translations as well as new translations can be submitted to
-[Bitcoin Core's Transifex page](https://www.transifex.com/bitcoin/bitcoin/).
+[Bitcoin Core's Transifex page](https://explore.transifex.com/bitcoin/bitcoin/).
Translations are periodically pulled from Transifex and merged into the git repository. See the
[translation process](doc/translation_process.md) for details on how this works.
diff --git a/contrib/guix/guix-build b/contrib/guix/guix-build
index 2ea574fe4b9..715568c1543 100755
--- a/contrib/guix/guix-build
+++ b/contrib/guix/guix-build
@@ -69,6 +69,24 @@ fi
mkdir -p "$VERSION_BASE"
+################
+# SOURCE_DATE_EPOCH should not unintentionally be set
+################
+
+if [ -n "$SOURCE_DATE_EPOCH" ] && [ -z "$FORCE_SOURCE_DATE_EPOCH" ]; then
+cat << EOF
+ERR: Environment variable SOURCE_DATE_EPOCH is set which may break reproducibility.
+
+ Aborting...
+
+Hint: You may want to:
+ 1. Unset this variable: \`unset SOURCE_DATE_EPOCH\` before rebuilding
+ 2. Set the 'FORCE_SOURCE_DATE_EPOCH' environment variable if you insist on
+ using your own epoch
+EOF
+exit 1
+fi
+
################
# Build directories should not exist
################
diff --git a/doc/bips.md b/doc/bips.md
index d544ff822bc..1b190a7ac5f 100644
--- a/doc/bips.md
+++ b/doc/bips.md
@@ -59,7 +59,8 @@ BIPs that are implemented by Bitcoin Core:
Validation rules for Taproot (including Schnorr signatures and Tapscript
leaves) are implemented as of **v0.21.0** ([PR 19953](https://github.com/bitcoin/bitcoin/pull/19953)),
with mainnet activation as of **v0.21.1** ([PR 21377](https://github.com/bitcoin/bitcoin/pull/21377),
- [PR 21686](https://github.com/bitcoin/bitcoin/pull/21686)).
+ [PR 21686](https://github.com/bitcoin/bitcoin/pull/21686)),
+ always active as of **v24.0** ([PR 23536](https://github.com/bitcoin/bitcoin/pull/23536)).
* [`BIP 350`](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki): Addresses for native v1+ segregated Witness outputs use Bech32m instead of Bech32 as of **v22.0** ([PR 20861](https://github.com/bitcoin/bitcoin/pull/20861)).
* [`BIP 371`](https://github.com/bitcoin/bips/blob/master/bip-0371.mediawiki): Taproot fields for PSBT as of **v24.0** ([PR 22558](https://github.com/bitcoin/bitcoin/pull/22558)).
* [`BIP 379`](https://github.com/bitcoin/bips/blob/master/bip-0379.md): Miniscript was partially implemented in **v24.0** ([PR 24148](https://github.com/bitcoin/bitcoin/pull/24148)), and fully implemented as of **v26.0** ([PR 27255](https://github.com/bitcoin/bitcoin/pull/27255)).
diff --git a/doc/release-notes.md b/doc/release-notes.md
index 057b1b43d8e..a9f527c2ef4 100644
--- a/doc/release-notes.md
+++ b/doc/release-notes.md
@@ -1,8 +1,8 @@
-Bitcoin Core version 28.2 is now available from:
+Bitcoin Core version 28.x is now available from:
-
+
-This release includes new features, various bug fixes and performance
+This release includes various bug fixes and performance
improvements, as well as updated translations.
Please report bugs using the issue tracker at GitHub:
@@ -37,47 +37,28 @@ unsupported systems.
Notable changes
===============
-### Build
-
-- #31407 guix: Notarize MacOS app bundle and codesign all MacOS and Windows binaries
-- #31500 depends: Fix compiling libevent package on NetBSD
-- #31627 depends: Fix spacing issue
-- #32070 build: use make < 3.82 syntax for define directive
-- #32439 guix: accomodate migration to codeberg
-- #32568 depends: use "mkdir -p" when installing xproto
-- #32693 depends: fix cmake compatibility error for freetype
-
### Test
-- #32286 test: Handle empty string returned by CLI as None in RPC tests
-- #32336 test: Suppress upstream -Wduplicate-decl-specifier in bpfcc
+- #32765 test: Fix list index out of range error in feature_bip68_sequence.py
-### Tracing
+### Build
-- #31623 tracing: Rename the MIN macro to TRACEPOINT_TEST_MIN in log_raw_p2p_msgs
+- #32678 guix: warn and abort when SOURCE_DATE_EPOCH is set
### Doc
-- #32003 doc: remove note about macOS self-signing
+- #32776 doc: taproot became always active in v24.0
+- #32777 doc: fix Transifex 404s
-### Misc
-
-- #31611 doc: upgrade license to 2025
-- #32187 refactor: Remove spurious virtual from final ~CZMQNotificationInterface
Credits
=======
Thanks to everyone who directly contributed to this release:
-- 0xB10C
-- achow101
-- Brandon Odiwuor
- fanquake
-- Hennadii Stepanov
-- josibake
-- kehiy
-- MarcoFalke
- Sjors Provoost
+- willcl-ark
+- zaidmstrr
As well as to everyone that helped with translations on
-[Transifex](https://www.transifex.com/bitcoin/bitcoin/).
+[Transifex](https://explore.transifex.com/bitcoin/bitcoin/).
diff --git a/doc/release-process.md b/doc/release-process.md
index d0dc4211d8f..9f42b7f1f8e 100644
--- a/doc/release-process.md
+++ b/doc/release-process.md
@@ -55,10 +55,10 @@ Release Process
- Clear the release notes and move them to the wiki (see "Write the release notes" below).
- Translations on Transifex:
- Pull translations from Transifex into the master branch.
- - Create [a new resource](https://www.transifex.com/bitcoin/bitcoin/content/) named after the major version with the slug `qt-translation-x`, where `RRR` is the major branch number padded with zeros. Use `src/qt/locale/bitcoin_en.xlf` to create it.
+ - Create [a new resource](https://app.transifex.com/bitcoin/bitcoin/content/) named after the major version with the slug `qt-translation-x`, where `RRR` is the major branch number padded with zeros. Use `src/qt/locale/bitcoin_en.xlf` to create it.
- In the project workflow settings, ensure that [Translation Memory Fill-up](https://help.transifex.com/en/articles/6224817-setting-up-translation-memory-fill-up) is enabled and that [Translation Memory Context Matching](https://help.transifex.com/en/articles/6224753-translation-memory-with-context) is disabled.
- Update the Transifex slug in [`.tx/config`](/.tx/config) to the slug of the resource created in the first step. This identifies which resource the translations will be synchronized from.
- - Make an announcement that translators can start translating for the new version. You can use one of the [previous announcements](https://www.transifex.com/bitcoin/communication/) as a template.
+ - Make an announcement that translators can start translating for the new version. You can use one of the [previous announcements](https://app.transifex.com/bitcoin/communication/) as a template.
- Change the auto-update URL for the resource to `master`, e.g. `https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/qt/locale/bitcoin_en.xlf`. (Do this only after the previous steps, to prevent an auto-update from interfering.)
#### After branch-off (on the major release branch)
diff --git a/doc/translation_process.md b/doc/translation_process.md
index e5ed7f4e0ae..604c30f8840 100644
--- a/doc/translation_process.md
+++ b/doc/translation_process.md
@@ -41,7 +41,7 @@ git commit
### Creating a Transifex account
Visit the [Transifex Signup](https://www.transifex.com/signup/) page to create an account. Take note of your username and password, as they will be required to configure the command-line tool.
-You can find the Bitcoin translation project at [https://www.transifex.com/bitcoin/bitcoin/](https://www.transifex.com/bitcoin/bitcoin/).
+You can find the Bitcoin translation project at [https://explore.transifex.com/bitcoin/bitcoin/](https://explore.transifex.com/bitcoin/bitcoin/).
### Installing the Transifex client command-line tool
The client is used to fetch updated translations. Please check installation instructions and any other details at https://developers.transifex.com/docs/cli.
diff --git a/test/functional/feature_bip68_sequence.py b/test/functional/feature_bip68_sequence.py
index 2d61987e944..7f576464b80 100755
--- a/test/functional/feature_bip68_sequence.py
+++ b/test/functional/feature_bip68_sequence.py
@@ -148,8 +148,10 @@ class BIP68Test(BitcoinTestFramework):
# between height/time locking). Small random chance of making the locks
# all pass.
for _ in range(400):
+ available_utxos = len(utxos)
+
# Randomly choose up to 10 inputs
- num_inputs = random.randint(1, 10)
+ num_inputs = random.randint(1, min(10, available_utxos))
random.shuffle(utxos)
# Track whether any sequence locks used should fail