What changed, and why it matters
This commit updates BTCPay Server's automated test environment to use Bitcoin Core version 30.2 instead of 29.1. It also adjusts a few test helper calls and one test assertion to match changed behavior in the newer Bitcoin Core version. There is no direct evidence in the commit of a security vulnerability being fixed or introduced.
No immediate security action required. Review whether the Bitcoin Core 30.2 upgrade itself addresses any known CVEs in 29.1, and ensure production deployment guidance is updated if applicable. Verify the watch-only assertion change reflects intended wallet behavior.
Security signals we found
Bitcoin Core version bump (29.1 -> 30.2) in test infrastructure only
Test assertion change related to wallet watch-only status
No changes to production BTCPay Server code paths
No mention of CVE, security fix, or vulnerability in commit message or diff
Evidence from the diff
The diff bumps Docker image tags from btcpayserver/bitcoin:29.1 to 30.2 across three docker-compose test files. In WalletTests.cs, calls to GenerateWallet are simplified or have explicit named arguments, and an assertion changes from Assert.True(result.IsWatchOnly) to Assert.False(result.IsWatchOnly), with a comment update reflecting that the wallet is no longer watch-only under Bitcoin Core 30.2. PlaywrightTests.cs similarly updates GenerateWallet calls. These are test-suite compatibility changes for a Bitcoin Core upgrade, not runtime product code changes.
Changed components
BTCPayServer.Tests/PlaywrightTests.csBTCPayServer.Tests/WalletTests.csBTCPayServer.Tests/docker-compose.altcoins.ymlBTCPayServer.Tests/docker-compose.testnet.ymlBTCPayServer.Tests/docker-compose.ymlInspect captured patch +15 / −15
diff --git a/BTCPayServer.Tests/PlaywrightTests.cs b/BTCPayServer.Tests/PlaywrightTests.cs
index b8e50ff..f386568 100644
--- a/BTCPayServer.Tests/PlaywrightTests.cs
+++ b/BTCPayServer.Tests/PlaywrightTests.cs
@@ -1260,7 +1260,7 @@ namespace BTCPayServer.Tests
await s.StartAsync();
await s.RegisterNewUser(true);
await s.CreateNewStore();
- await s.GenerateWallet("BTC", "", true);
+ await s.GenerateWallet();
// Create a payment request
await s.GoToStore();
@@ -1443,7 +1443,7 @@ namespace BTCPayServer.Tests
await s.StartAsync();
await s.RegisterNewUser(true);
await s.CreateNewStore();
- await s.GenerateWallet("BTC", "", true);
+ await s.GenerateWallet();
await s.GoToStore();
await s.Page.ClickAsync("#menu-item-PaymentRequests");
diff --git a/BTCPayServer.Tests/WalletTests.cs b/BTCPayServer.Tests/WalletTests.cs
index 00c91fe..7ae07f9 100644
--- a/BTCPayServer.Tests/WalletTests.cs
+++ b/BTCPayServer.Tests/WalletTests.cs
@@ -163,9 +163,9 @@ public class WalletTests(ITestOutputHelper helper) : UnitTestBase(helper)
// ReSharper disable once GrammarMistakeInComment
// In this test, we try to spend from a manual seed. We import the xpub 49'/0'/0',
// then try to use the seed to sign the transaction
- await s.GenerateWallet(cryptoCode, "", true);
+ await s.GenerateWallet();
- //let's test quickly the wallet send page
+ //let's quickly test the wallet send page
await s.GoToWallet(navPages: WalletsNavPages.Send);
//you cannot use the Sign with NBX option without saving private keys when generating the wallet.
Assert.DoesNotContain("nbx-seed", await s.Page.ContentAsync());
@@ -241,7 +241,7 @@ public class WalletTests(ITestOutputHelper helper) : UnitTestBase(helper)
await wt.AssertHasLabels("label2");
//change the wallet and ensure old address is not there and generating a new one does not result in the prev one
- await s.GenerateWallet(cryptoCode, "", true);
+ await s.GenerateWallet(importkeys: true, isHotWallet: true);
await s.GoToWallet(null, WalletsNavPages.Receive);
await s.Page.ClickAsync("button[value=generate-new-address]");
var newAddr = await s.Page.Locator("#Address").GetAttributeAsync("data-text");
@@ -252,10 +252,10 @@ public class WalletTests(ITestOutputHelper helper) : UnitTestBase(helper)
var btc = PaymentTypes.CHAIN.GetPaymentMethodId("BTC");
var address = invoice.GetPaymentPrompt(btc)!.Destination;
- //wallet should have been imported to bitcoin core wallet in watch only mode.
+ // wallet should have been imported to bitcoin core wallet
var result =
await s.Server.ExplorerNode.GetAddressInfoAsync(BitcoinAddress.Create(address, Network.RegTest));
- Assert.True(result.IsWatchOnly);
+ Assert.False(result.IsWatchOnly);
await s.GoToStore(storeId);
var mnemonic = await s.GenerateWallet(cryptoCode, "", true, true);
@@ -313,10 +313,10 @@ public class WalletTests(ITestOutputHelper helper) : UnitTestBase(helper)
});
await ws.Sign();
- // Back button should lead back to the previous page inside the send wizard
+ // The back button should lead back to the previous page inside the send wizard
var backUrl = await s.Page.Locator("#GoBack").GetAttributeAsync("href");
Assert.EndsWith($"/send?returnUrl={Uri.EscapeDataString(walletTransactionUri.AbsolutePath)}", backUrl);
- // Cancel button should lead to the page that referred to the send wizard
+ // The cancel button should lead to the page that referred to the send wizard
var cancelUrl = await s.Page.Locator("#CancelWizard").GetAttributeAsync("href");
Assert.EndsWith(walletTransactionUri.AbsolutePath, cancelUrl);
diff --git a/BTCPayServer.Tests/docker-compose.altcoins.yml b/BTCPayServer.Tests/docker-compose.altcoins.yml
index 273e7e0..848bac7 100644
--- a/BTCPayServer.Tests/docker-compose.altcoins.yml
+++ b/BTCPayServer.Tests/docker-compose.altcoins.yml
@@ -76,7 +76,7 @@ services:
- "sshd_datadir:/root/.ssh"
devlnd:
- image: btcpayserver/bitcoin:29.1
+ image: btcpayserver/bitcoin:30.2
environment:
BITCOIN_NETWORK: regtest
BITCOIN_WALLETDIR: "/data/wallets"
@@ -139,7 +139,7 @@ services:
bitcoind:
restart: unless-stopped
- image: btcpayserver/bitcoin:29.1
+ image: btcpayserver/bitcoin:30.2
environment:
BITCOIN_NETWORK: regtest
BITCOIN_WALLETDIR: "/data/wallets"
diff --git a/BTCPayServer.Tests/docker-compose.testnet.yml b/BTCPayServer.Tests/docker-compose.testnet.yml
index bf375b4..2438827 100644
--- a/BTCPayServer.Tests/docker-compose.testnet.yml
+++ b/BTCPayServer.Tests/docker-compose.testnet.yml
@@ -31,7 +31,7 @@ services:
- "sshd_datadir:/root/.ssh"
devlnd:
- image: btcpayserver/bitcoin:29.1
+ image: btcpayserver/bitcoin:30.2
environment:
BITCOIN_NETWORK: testnet
BITCOIN_WALLETDIR: "/data/wallets"
@@ -72,7 +72,7 @@ services:
bitcoind:
restart: unless-stopped
- image: btcpayserver/bitcoin:29.1
+ image: btcpayserver/bitcoin:30.2
environment:
BITCOIN_NETWORK: testnet
BITCOIN_WALLETDIR: "/data/wallets"
diff --git a/BTCPayServer.Tests/docker-compose.yml b/BTCPayServer.Tests/docker-compose.yml
index 3553084..d718362 100644
--- a/BTCPayServer.Tests/docker-compose.yml
+++ b/BTCPayServer.Tests/docker-compose.yml
@@ -72,7 +72,7 @@ services:
- "sshd_datadir:/root/.ssh"
devlnd:
- image: btcpayserver/bitcoin:29.1
+ image: btcpayserver/bitcoin:30.2
environment:
BITCOIN_NETWORK: regtest
BITCOIN_WALLETDIR: "/data/wallets"
@@ -124,7 +124,7 @@ services:
bitcoind:
restart: unless-stopped
- image: btcpayserver/bitcoin:29.1
+ image: btcpayserver/bitcoin:30.2
environment:
BITCOIN_NETWORK: regtest
BITCOIN_WALLETDIR: "/data/wallets"
Why this scored 18/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.