35 Commits

Author SHA1 Message Date
NotRin7
91975bb8bb gui: Add Dark Mode support with toggle switch
- Added dark.qss stylesheet for dark theme
- Implemented toggleTheme() slot in PalladiumGUI
- Added 'Dark Mode' checkbox to Settings menu
- Theme preference is saved in QSettings (darkModeEnabled)
- Updated palladium.qrc to include style resources
2025-11-18 17:34:01 +01:00
4063da67c3 Merge fix-7e418: set versione v1.4.2 2025-11-18 10:32:59 +01:00
8f1c4b142d Merge master into fix-7e418 and resolve conflicts by keeping v1.4.2 2025-11-18 10:30:32 +01:00
NotRin7
fd0718d2a7 Update README.md 2025-11-18 08:48:00 +01:00
NotRin7
d82347925f Update README.md 2025-11-18 08:48:00 +01:00
NotRin7
ad386005cf docs: Add troubleshooting section to README 2025-11-18 08:48:00 +01:00
NotRin7
78b6d11c82 Fix: Correct wallet confirmation time and update repository URLs 2025-11-18 08:47:45 +01:00
NotRin7
5d0f4d1e22 Update README.md 2025-11-18 08:47:45 +01:00
46f5e24fa4 docs: remove outdated configuration details 2025-11-18 08:47:45 +01:00
d7758f8b91 docs(configuration): move detailed config to separate doc and update readme
Update README.md to reference new comprehensive configuration documentation
Add detailed configuration-file.md with complete examples and best practices
2025-11-18 08:47:45 +01:00
0ed21f2dc0 fix(testnet): add testnet seed nodes for peer discovery
Enable peer discovery on testnet by adding seed nodes and preserving vFixedSeeds. This ensures nodes can connect to the network during initial sync.
2025-11-18 08:47:44 +01:00
NotRin7
73d160b238 Update README.md 2025-11-17 18:13:18 +01:00
NotRin7
caf1f78daa Update README.md 2025-11-17 18:12:37 +01:00
NotRin7
ef939bf6f8 docs: Add troubleshooting section to README 2025-11-17 18:11:17 +01:00
NotRin7
abdbc25de2 Merge branch 'master' of https://github.com/palladium-coin/palladiumcore 2025-11-17 18:00:09 +01:00
NotRin7
c046c329a4 Fix: Correct wallet confirmation time and update repository URLs 2025-11-17 17:43:13 +01:00
NotRin7
aacf183b4f Update README.md 2025-11-17 17:09:04 +01:00
57ef1546a7 docs: remove outdated configuration details 2025-11-17 14:37:09 +01:00
c02e062869 docs(configuration): move detailed config to separate doc and update readme
Update README.md to reference new comprehensive configuration documentation
Add detailed configuration-file.md with complete examples and best practices
2025-11-17 14:27:52 +01:00
ab397b9c1b fix(testnet): add testnet seed nodes for peer discovery
Enable peer discovery on testnet by adding seed nodes and preserving vFixedSeeds. This ensures nodes can connect to the network during initial sync.
2025-11-17 13:53:10 +01:00
72ee7e5872 Merge pull request #7 from palladium-coin/testnet
Testnet
2025-11-14 16:35:24 +01:00
1e1c4a5fdb feat(validation): allow min difficulty blocks after testnet inactivity
Add logic to skip proof-of-work check for testnet when there's been 20 minutes of inactivity, allowing min difficulty blocks to be mined. This helps maintain chain progress during periods of low testnet activity.
2025-11-14 15:06:09 +01:00
efe1cbf18b fix(chainparams): update BIP34 height and hash for testnet
The BIP34 activation height was increased to 1700 and the hash was initialized to support upcoming testnet changes
2025-11-14 14:46:27 +01:00
96eef06c25 fix(pow): simplify testnet difficulty adjustment logic
Move the special 20-minute rule check before LWMA calculation for clarity and maintain the same behavior. Remove redundant else block and consolidate the logic for returning last non-special-min-difficulty block.
2025-11-14 10:35:02 +01:00
922f94321e fix(chainparams): update BIP34Height to 1250 for testnet
The BIP34 activation height was lowered to match the actual activation point on testnet, ensuring proper block validation behavior.
2025-11-14 10:27:23 +01:00
0e08faad30 feat(validation): allow min difficulty blocks after testnet inactivity
Add logic to skip proof-of-work check for testnet when there's been 20 minutes of inactivity, allowing min difficulty blocks to be mined. This helps maintain chain progress during periods of low testnet activity.
2025-11-13 15:58:01 +01:00
7e418123a9 build: update version to 1.5.0
Update client version from 1.4.1 to 1.5.0 across configuration files, source code, and documentation
2025-11-13 15:58:01 +01:00
7f96a7d84c fix(chainparams): update BIP34 height and hash for testnet
The BIP34 activation height was increased to 1700 and the hash was initialized to support upcoming testnet changes
2025-11-13 15:58:01 +01:00
3f30d92472 fix(pow): simplify testnet difficulty adjustment logic
Move the special 20-minute rule check before LWMA calculation for clarity and maintain the same behavior. Remove redundant else block and consolidate the logic for returning last non-special-min-difficulty block.
2025-11-13 15:58:01 +01:00
7ebe9d9305 fix(chainparams): update BIP34Height to 1250 for testnet
The BIP34 activation height was lowered to match the actual activation point on testnet, ensuring proper block validation behavior.
2025-11-13 15:58:01 +01:00
9f156ae1ad build: update version to 1.4.2
Update client version from 1.4.1 to 1.4.2 across configuration files, source code, and documentation
2025-11-13 15:58:01 +01:00
553424d19d fix: update testnet chain params and restore getblocktemplate security check
Update testnet minimum chain work and default assume valid values to current state.
Restore security check in getblocktemplate RPC to prevent usage during initial block download.
2025-11-13 15:34:55 +01:00
ff87cc51c4 fix(pow): adjust testnet difficulty calculation rules
- Apply LWMA difficulty calculation for testnet from block 0 to match mainnet behavior
- Clarify testnet min-difficulty rule by using explicit 20 minute threshold instead of nPowTargetSpacing*2
2025-11-13 13:51:26 +01:00
5960d0d861 feat(rpc): allow getblocktemplate during initial block download for testnet
This temporary patch enables getblocktemplate RPC calls during initial block download for testnet purposes. The change will be reverted for mainnet.
2025-11-13 11:10:40 +01:00
2ee78184ef fix(chainparams): update testnet consensus parameters
- Change BIP34Height from 0 to 8192 to match mainnet activation
- Adjust nPowTargetTimespan from 1 day to 14 days for better difficulty stability
- Add nPowTargetSpacingV2 parameter for future compatibility
- Swap rule change activation threshold and miner confirmation window values
- Clarify fPowAllowMinDifficultyBlocks comment
2025-11-13 11:06:36 +01:00
31 changed files with 679 additions and 123 deletions

View File

@@ -1,6 +1,6 @@
# Palladium Core
**Official Website:** [palladiumblockchain.net](https://palladiumblockchain.net)
**Official Websites:** [palladiumblockchain.net](https://palladiumblockchain.net) and [palladium-coin.com](https://palladium-coin.com)
## Overview
Palladium Core is a decentralized digital currency forked from Bitcoin, specifically designed to serve the palladium market ecosystem. Built upon the proven Bitcoin protocol foundation, Palladium Core delivers enhanced security, efficiency, and transparency for palladium-related transactions.
@@ -18,67 +18,22 @@ Palladium Core is a decentralized digital currency forked from Bitcoin, specific
### Installation
1. **Download and Install**: Get the latest Palladium Core wallet from our [releases page](https://github.com/palladium-coin/palladiumcore/releases)
2. **Configure**: Create the `palladium.conf` configuration file (see [Configuration](#advanced-configuration) section below)
2. **Configure**: Create the `palladium.conf` configuration file (see [Configuration](#configuration) section below)
3. **Launch the Core**: Start the Palladium Core application (includes automatic network synchronization)
### Configuration
For enhanced connectivity and performance, you can create a configuration file:
For enhanced connectivity and performance, you can create a configuration file. Palladium Core supports comprehensive configuration options for mainnet, testnet, and regtest networks.
**Windows**: Navigate to `%appdata%/Palladium/`
**Linux**: Navigate to `/home/[username]/.palladium/`
**macOS**: Navigate to `~/Library/Application Support/Palladium/`
**Configuration File Location:**
- **Windows**: `%appdata%/Palladium/`
- **Linux**: `/home/[username]/.palladium/`
- **macOS**: `~/Library/Application Support/Palladium/`
Create a file named `palladium.conf`. For users running a full node or requiring advanced functionality, we recommend the following comprehensive configuration:
Create a file named `palladium.conf` in the appropriate directory for your operating system.
```conf
# Core Settings
txindex=1
server=1
listen=1
daemon=1
discover=1
# RPC Configuration
rpcuser=your_username_here
rpcpassword=your_secure_password_here
# Network Ports
port=2333
rpcport=2332
# Connection Settings
maxconnections=50
fallbackfee=0.0001
rpcallowip=192.168.0.0/16
rpcbind=192.168.0.0/16
# Trusted Nodes
addnode=89.117.149.130:2333
addnode=66.94.115.80:2333
addnode=173.212.224.67:2333
# ZeroMQ Configuration
zmqpubrawblock=tcp://0.0.0.0:28334
zmqpubrawtx=tcp://0.0.0.0:28335
zmqpubhashblock=tcp://0.0.0.0:28332
```
**Security Warning**: Replace `your_username_here` and `your_secure_password_here` with strong, unique credentials.
### Configuration Parameters Explained
| Parameter | Description | Recommended Value |
|-----------|-------------|-------------------|
| `txindex` | Maintains full transaction index | `1` (enabled) |
| `server` | Enables RPC server | `1` (enabled) |
| `listen` | Accept incoming connections | `1` (enabled) |
| `daemon` | Run in background mode | `1` (enabled) |
| `discover` | Enable peer discovery | `1` (enabled) |
| `maxconnections` | Maximum peer connections | `50` |
| `fallbackfee` | Default transaction fee | `0.0001` PLM/kB |
| `port` | P2P network port | `2333` |
| `rpcport` | RPC server port | `2332` |
**Complete Configuration Guide:**
For detailed configuration instructions, network-specific settings, security best practices, and complete configuration examples, please refer to our comprehensive configuration guide: **[Palladium Configuration File Documentation](doc/configuration-file.md)**
## Building from Source

View File

@@ -18,10 +18,10 @@
#define CLIENT_VERSION_MAJOR 1
/* Minor version */
#define CLIENT_VERSION_MINOR 4
#define CLIENT_VERSION_MINOR 5
/* Build revision */
#define CLIENT_VERSION_REVISION 0
#define CLIENT_VERSION_REVISION 2
/* Copyright holder(s) before %s replacement */
#define COPYRIGHT_HOLDERS "The %s developers"
@@ -265,7 +265,7 @@
#define PACKAGE_NAME "Palladium Core"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "Palladium Core 1.4.1"
#define PACKAGE_STRING "Palladium Core 1.5.0"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "palladium"
@@ -274,7 +274,7 @@
#define PACKAGE_URL "https://palladiumblockchain.net/"
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.4.1"
#define PACKAGE_VERSION "1.5.0"
/* Define to necessary symbol if this constant uses a non-standard name on
your system. */

View File

@@ -1,7 +1,7 @@
AC_PREREQ([2.69])
define(_CLIENT_VERSION_MAJOR, 1)
define(_CLIENT_VERSION_MINOR, 4)
define(_CLIENT_VERSION_REVISION, 1)
define(_CLIENT_VERSION_REVISION, 2)
define(_CLIENT_VERSION_BUILD, 0)
define(_CLIENT_VERSION_RC, 0)
define(_CLIENT_VERSION_IS_RELEASE, true)

View File

@@ -2,7 +2,7 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: Palladium
Upstream-Contact: Satoshi Nakamoto <satoshin@gmx.com>
irc://#palladium@freenode.net
Source: https://github.com/NotRin7/palladium
Source: https://github.com/palladium-coin/palladiumcore
Files: *
Copyright: 2009-2020, Bitcoin Core Developers

View File

@@ -8,7 +8,7 @@ with no central authority: managing transactions and issuing money are carried o
The software is a community-driven open source project, released under the MIT license.
See https://github.com/NotRin7/palladium and https://palladium-coin.com/ for further information about the project.
See https://github.com/palladium-coin/palladiumcore and https://palladium-coin.com/ for further information about the project.
\section Navigation
Use <a href="modules.html"><code>Modules</code></a>, <a href="namespaces.html"><code>Namespaces</code></a>, <a href="classes.html"><code>Classes</code></a>, or <a href="files.html"><code>Files</code></a> at the top of the page to start navigating the code.

View File

@@ -47,7 +47,7 @@ from the root of the repository.
1. Clone the Palladium Core source code:
```shell
git clone https://github.com/NotRin7/palladium.git
git clone https://github.com/palladium-coin/palladiumcore.git
cd palladium
```

384
doc/configuration-file.md Normal file
View File

@@ -0,0 +1,384 @@
# Palladium Configuration File Guide
## Overview
The `palladium.conf` file is the main configuration file for Palladium Core, controlling how your node operates, connects to the network, and provides services. This file allows you to customize various aspects of your Palladium Core installation without needing to use command-line arguments every time you start the application.
## What is palladium.conf?
`palladium.conf` is a plain text configuration file that contains key-value pairs to configure your Palladium Core node. It determines:
- Network connectivity settings
- RPC server configuration
- Security parameters
- Performance optimizations
- Logging and debugging options
- Network-specific settings (mainnet, testnet, regtest)
## Location by Operating System
The configuration file must be placed in the Palladium data directory, which varies by operating system:
### Windows
- **Path**: `%appdata%\Palladium\palladium.conf`
- **Example**: `C:\Users\[Username]\AppData\Roaming\Palladium\palladium.conf`
### Linux
- **Path**: `/home/[username]/.palladium/palladium.conf`
- **Example**: `/home/user/.palladium/palladium.conf`
### macOS
- **Path**: `~/Library/Application Support/Palladium/palladium.conf`
- **Example**: `/Users/[Username]/Library/Application Support/Palladium/palladium.conf`
## Network Configurations
Palladium Core supports three different networks, each with its own configuration requirements:
### 1. Mainnet (Production Network)
Mainnet is the live Palladium blockchain where real transactions occur and real PLM coins are used.
**Key Characteristics:**
- Uses default ports (2333 for P2P, 2332 for RPC)
- Connects to production network
- Real economic value
- Should be used for production deployments only
### 2. Testnet (Testing Network)
Testnet is a separate blockchain designed for testing purposes with no real economic value.
**Key Characteristics:**
- Uses different ports (12333 for P2P, 12332 for RPC)
- Separate blockchain from mainnet
- Test PLM coins have no value
- Safe for development and experimentation
- Faster block times for testing
### 3. Regtest (Regression Testing)
Regtest is a local testing environment where you can create blocks instantly.
**Key Characteristics:**
- Local blockchain only
- Instant block generation
- Complete control over network
- Ideal for development and automated testing
- No external network connections required
## Core Configuration Parameters
### Basic Node Settings
```conf
txindex=1 # Enable transaction index (required for getrawtransaction RPC)
server=1 # Enable RPC server (required for RPC commands)
listen=1 # Accept incoming connections (required for peer discovery)
daemon=1 # Run as daemon (background process)
discover=1 # Enable peer discovery (required for peer connections)
maxconnections=50 # Maximum number of connections
```
### RPC Configuration
```conf
rpcuser=your_secure_username # RPC username (required for RPC authentication)
rpcpassword=your_secure_password # RPC password (required for RPC authentication)
rpcallowip=127.0.0.1 # Allow RPC connections from specific IP ranges (localhost)
rpcallowip=192.168.1.0/24 # Allow RPC connections from specific IP ranges (local network)
rpcbind=127.0.0.1 # Bind RPC to specific interface
```
### Network Settings
```conf
port=2333 # P2P network port
rpcport=2332 # RPC server port
fallbackfee=0.0001 # Default transaction fee (PLM per kB)
minrelaytxfee=0.00001 # Minimum relay fee
```
### Security Settings
```conf
# Wallet encryption (set at runtime, not in config file)
# Use encryptwallet RPC command instead
disablewallet=1 # Disable wallet functionality (for full nodes without wallet)
# Node Connection Methods (choose one approach):
# addnode - Adds node to connection list, still allows other connections
addnode=trusted.node.ip:2333 # Add trusted node to connection pool
# connect - ONLY connects to specified nodes, blocks all other connections
connect=trusted.node.ip:2333 # Connect ONLY to this node (maximum security)
```
### Performance Tuning
```conf
dbcache=512 # Database cache size in MB (increase for better performance)
maxorphantx=100 # Maximum number of orphan transactions
maxmempool=300 # Maximum size of mempool in MB
mempoolexpiry=72 # Mempool memory expiration time in hours
```
### Privacy Settings
```conf
dnsseed=0 # Disable DNS seeding for privacy
bind=127.0.0.1 # Bind to specific interface only (localhost)
```
### Mining Configuration (for mining pools)
```conf
mine=1 # Enable block generation
miningaddress=your_palladium_address # Mining address to receive block rewards
blockmaxsize=1000000 # Maximum block size in bytes (default: 1000000)
blockprioritysize=50000 # Block priority size in bytes (default: 50000)
```
## Complete Configuration Examples
### Mainnet Configuration
```conf
# Core Settings
txindex=1
server=1
listen=1
daemon=1
discover=1
# RPC Configuration
rpcuser=your_secure_username
rpcpassword=your_very_secure_password
rpcallowip=127.0.0.1
rpcallowip=192.168.1.0/24
rpcbind=127.0.0.1
# Network Settings (Mainnet defaults)
port=2333
rpcport=2332
maxconnections=50
fallbackfee=0.0001
minrelaytxfee=0.00001
# Trusted Nodes
addnode=89.117.149.130:2333
addnode=66.94.115.80:2333
addnode=173.212.224.67:2333
# Advanced Settings
zmqpubrawblock=tcp://0.0.0.0:28334
zmqpubrawtx=tcp://0.0.0.0:28335
zmqpubhashblock=tcp://0.0.0.0:28332
# Logging
debug=net
debug=rpc
debug=coindb
```
### Testnet Configuration
```conf
# Network Selection
testnet=1
[test]
# Core Settings
txindex=1
server=1
listen=1
daemon=1
discover=1
# RPC Configuration
rpcuser=testnet_user
rpcpassword=testnet_password
rpcallowip=127.0.0.1
rpcbind=127.0.0.1
# Network Settings (Testnet)
port=12333
rpcport=12332
maxconnections=25
fallbackfee=0.0001
minrelaytxfee=0.00001
# Faster block time for testing
blockmintxfee=0.00001
```
### Regtest Configuration
```conf
# Network Selection
regtest=1
[regtest]
# Core Settings
txindex=1
server=1
listen=1
daemon=1
# RPC Configuration
rpcuser=regtest_user
rpcpassword=regtest_password
rpcallowip=127.0.0.1
rpcbind=127.0.0.1
# Network Settings (Regtest)
port=23444
rpcport=23443
maxconnections=1 # No external connections needed
# Development Settings
fallbackfee=0.00001
minrelaytxfee=0.000001
blockmintxfee=0.000001
# Enable all debugging for development
debug=1
```
## Unified Configuration File with Network Sections
You can also create a single configuration file that works for all networks using section headers. This approach allows you to switch between networks without changing the entire configuration file.
```conf
# Palladium Core Unified Configuration
# By default, if neither testnet nor regtest is specified, the node runs on mainnet.
# Uncomment ONLY ONE of the following lines to switch network:
# testnet=1 # Enable testnet mode (disables mainnet and regtest)
# regtest=1 # Enable regtest mode (disables mainnet and testnet)
# Mainnet settings (default - no section header needed)
# These settings apply to mainnet by default
txindex=1
server=1
listen=1
daemon=1
discover=1
rpcuser=your_secure_username
rpcpassword=your_very_secure_password
rpcallowip=127.0.0.1
rpcbind=127.0.0.1
port=2333
rpcport=2332
maxconnections=50
fallbackfee=0.0001
minrelaytxfee=0.00001
# Mainnet trusted nodes
addnode=89.117.149.130:2333
addnode=66.94.115.80:2333
addnode=173.212.224.67:2333
[test]
# Testnet specific settings
# These override mainnet settings when using testnet
# Testnet ports
port=12333
rpcport=12332
maxconnections=25
# Testnet RPC (different credentials recommended)
rpcuser=testnet_user
rpcpassword=testnet_password
# Testnet nodes
addnode=<ip-address1>:12333
addnode=<ip-address2>:12333
[regtest]
# Regression test network settings
# These override mainnet settings when using regtest
# Regtest ports
port=28444
rpcport=28443
maxconnections=1
# Regtest RPC (development credentials)
rpcuser=regtest_user
rpcpassword=regtest_password
# Run in foreground for development
daemon=0
# Lower fees for testing
fallbackfee=0.00001
minrelaytxfee=0.000001
blockmintxfee=0.000001
# Enable all debugging for development
debug=1
```
### How Network Selection Works
- **Mainnet**: Used by default when no network is specified (no section header needed)
- **Testnet**: Activated when starting with `-testnet` flag or `testnet=1` in main section
- **Regtest**: Activated when starting with `-regtest` flag or `regtest=1` in main section
When using section headers:
- Settings in `[test]` section only apply when using testnet
- Settings in `[regtest]` section only apply when using regtest
- Mainnet uses settings outside any section or in main section
- Network-specific sections override main settings for that network
## Security Best Practices
1. **Strong RPC Credentials**: Always use strong, unique usernames and passwords for RPC access
2. **Network Restrictions**: Limit `rpcallowip` to only necessary IP ranges
3. **Firewall Configuration**: Configure your firewall to only allow necessary ports
4. **Regular Updates**: Keep your Palladium Core software updated
5. **Backup Configuration**: Keep backups of your configuration file
6. **Testnet First**: Always test configuration changes on testnet before mainnet
## Troubleshooting
### Common Issues
1. **Port Already in Use**: Ensure no other services are using ports 2333/2332
2. **RPC Connection Failed**: Check firewall settings and RPC credentials
3. **Sync Issues**: Verify network connectivity and add trusted nodes
4. **Permission Errors**: Ensure proper file permissions on configuration file
### Debug Options
```conf
# Enable specific debugging categories
debug=net # Network activity
debug=rpc # RPC requests
debug=coindb # Database operations
debug=qt # GUI operations
debug=mempool # Memory pool operations
```
## Additional Resources
- [Palladium Core RPC Documentation](JSON-RPC-interface.md)
- [Network Configuration Guide](reduce-traffic.md)
- [Performance Optimization](reduce-memory.md)
- [Developer Documentation](developer-notes.md)
For the most up-to-date information, always refer to the official Palladium Core documentation and release notes.

View File

@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH PALLADIUM-CLI "1" "April 2024" "palladium-cli v1.4.1" "User Commands"
.TH PALLADIUM-CLI "1" "April 2024" "palladium-cli v1.4.2" "User Commands"
.SH NAME
palladium-cli \- manual page for palladium-cli v1.4.1
palladium-cli \- manual page for palladium-cli v1.4.2
.SH SYNOPSIS
.B palladium-cli
[\fI\,options\/\fR] \fI\,<command> \/\fR[\fI\,params\/\fR] \fI\,Send command to Palladium Core\/\fR
@@ -15,7 +15,7 @@ palladium-cli \- manual page for palladium-cli v1.4.1
.B palladium-cli
[\fI\,options\/\fR] \fI\,help <command> Get help for a command\/\fR
.SH DESCRIPTION
Palladium Core RPC client version v1.4.1
Palladium Core RPC client version v1.4.2
.SH OPTIONS
.HP
\-?
@@ -124,4 +124,4 @@ Copyright (C) 2024 The Palladium Core developers
Please contribute if you find Palladium Core useful. Visit
<https://palladium-coin.com/> for further information about the software.
The source code is available from <https://github.com/NotRin7/palladium>.
The source code is available from <https://github.com/palladium-coin/palladiumcore>.

View File

@@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH PALLADIUM-QT "1" "April 2024" "palladium-qt v1.4.1" "User Commands"
.TH PALLADIUM-QT "1" "April 2024" "palladium-qt v1.4.2" "User Commands"
.SH NAME
palladium-qt \- manual page for palladium-qt v1.4.1
palladium-qt \- manual page for palladium-qt v1.4.2
.SH SYNOPSIS
.B palladium-qt
[\fI\,command-line options\/\fR]
.SH DESCRIPTION
Palladium Core version v1.4.1
Palladium Core version v1.4.2
.SH OPTIONS
.HP
\-?
@@ -682,7 +682,7 @@ Copyright (C) 2024 The Palladium Core developers
Please contribute if you find Palladium Core useful. Visit
<https://palladium-coin.com/> for further information about the software.
The source code is available from <https://github.com/NotRin7/palladium>.
The source code is available from <https://github.com/palladium-coin/palladiumcore>.
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING

View File

@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH PALLADIUM-TX "1" "April 2024" "palladium-tx v1.4.1" "User Commands"
.TH PALLADIUM-TX "1" "April 2024" "palladium-tx v1.4.2" "User Commands"
.SH NAME
palladium-tx \- manual page for palladium-tx v1.4.1
palladium-tx \- manual page for palladium-tx v1.4.2
.SH SYNOPSIS
.B palladium-tx
[\fI\,options\/\fR] \fI\,<hex-tx> \/\fR[\fI\,commands\/\fR] \fI\,Update hex-encoded palladium transaction\/\fR
@@ -9,7 +9,7 @@ palladium-tx \- manual page for palladium-tx v1.4.1
.B palladium-tx
[\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] \fI\,Create hex-encoded palladium transaction\/\fR
.SH DESCRIPTION
Palladium Core palladium\-tx utility version v1.4.1
Palladium Core palladium\-tx utility version v1.4.2
.SH OPTIONS
.HP
\-?
@@ -117,4 +117,4 @@ Copyright (C) 2024 The Palladium Core developers
Please contribute if you find Palladium Core useful. Visit
<https://palladium-coin.com/> for further information about the software.
The source code is available from <https://github.com/NotRin7/palladium>.
The source code is available from <https://github.com/palladium-coin/palladiumcore>.

View File

@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH PALLADIUM-WALLET "1" "April 2024" "palladium-wallet v1.4.1" "User Commands"
.TH PALLADIUM-WALLET "1" "April 2024" "palladium-wallet v1.4.2" "User Commands"
.SH NAME
palladium-wallet \- manual page for palladium-wallet v1.4.1
palladium-wallet \- manual page for palladium-wallet v1.4.2
.SH DESCRIPTION
Palladium Core palladium\-wallet version v1.4.1
Palladium Core palladium\-wallet version v1.4.2
.PP
palladium\-wallet is an offline tool for creating and interacting with Palladium Core wallet files.
By default palladium\-wallet will act on wallets in the default mainnet wallet directory in the datadir.
@@ -62,4 +62,4 @@ Copyright (C) 2024 The Palladium Core developers
Please contribute if you find Palladium Core useful. Visit
<https://palladium-coin.com/> for further information about the software.
The source code is available from <https://github.com/NotRin7/palladium>.
The source code is available from <https://github.com/palladium-coin/palladiumcore>.

View File

@@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH PALLADIUMD "1" "April 2024" "palladiumd v1.4.1" "User Commands"
.TH PALLADIUMD "1" "April 2024" "palladiumd v1.4.2" "User Commands"
.SH NAME
palladiumd \- manual page for palladiumd v1.4.1
palladiumd \- manual page for palladiumd v1.4.2
.SH SYNOPSIS
.B palladiumd
[\fI\,options\/\fR] \fI\,Start Palladium Core\/\fR
.SH DESCRIPTION
Palladium Core version v1.4.1
Palladium Core version v1.4.2
.SH OPTIONS
.HP
\-?
@@ -660,7 +660,7 @@ Copyright (C) 2024 The Palladium Core developers
Please contribute if you find Palladium Core useful. Visit
<https://palladium-coin.com/> for further information about the software.
The source code is available from <https://github.com/NotRin7/palladium>.
The source code is available from <https://github.com/palladium-coin/palladiumcore>.
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING

View File

@@ -10,7 +10,7 @@ improvements, as well as updated translations.
Please report bugs using the issue tracker at GitHub:
<https://github.com/NotRin7/palladium/issues>
<https://github.com/palladium-coin/palladiumcore/issues>
To receive security and update notifications, please subscribe to:

View File

@@ -14,7 +14,6 @@ Creates native Linux 64-bit binaries using a Docker container based on Ubuntu 20
```bash
cd docker-build # Navigate to the docker-build directory
chmod +x build-linux-x86_64.sh # Make the build script executable
./build-linux-x86_64.sh # Run the build script
```
@@ -35,7 +34,6 @@ Creates ARM64 binaries for devices like Raspberry Pi 4+ through cross-compilatio
```bash
cd docker-build # Navigate to the docker-build directory
chmod +x build-linux-aarch64.sh # Make the build script executable
./build-linux-aarch64.sh # Run the cross-compilation build script
```
@@ -56,7 +54,6 @@ Creates ARM 32-bit binaries for older devices like Raspberry Pi 2/3 and Pi Zero.
```bash
cd docker-build # Navigate to the docker-build directory
chmod +x build-linux-armv7l.sh # Make the build script executable
./build-linux-armv7l.sh # Run the ARMv7l cross-compilation build script
```
@@ -77,7 +74,6 @@ Creates Windows executables through cross-compilation with MinGW-w64.
```bash
cd docker-build # Navigate to the docker-build directory
chmod +x build-windows.sh # Make the build script executable
./build-windows.sh # Run the Windows cross-compilation build script
```
@@ -89,3 +85,10 @@ Executables will be available in `../build/windows/`:
- `palladium-tx.exe` - Transaction utility
- `palladium-wallet.exe` - Wallet utility
- `palladium-qt.exe` - GUI application
### Troubleshooting
```bash
cd docker-build
chmod +x *.sh
```

0
docker-build/build-linux-aarch64.sh Normal file → Executable file
View File

0
docker-build/build-linux-armv7l.sh Normal file → Executable file
View File

0
docker-build/build-linux-x86_64.sh Normal file → Executable file
View File

0
docker-build/build-windows.sh Normal file → Executable file
View File

View File

@@ -177,7 +177,7 @@ public:
};
/**
* Testnet (v3)
* Testnet
*/
class CTestNetParams : public CChainParams {
public:
@@ -185,7 +185,8 @@ public:
strNetworkID = CBaseChainParams::TESTNET;
consensus.nSubsidyHalvingInterval = 210000;
consensus.BIP34Height = 0;
consensus.BIP34Height = 1700;
consensus.BIP34Hash = uint256();
consensus.BIP65Height = 0;
consensus.BIP66Height = 0;
consensus.CSVHeight = 0;
@@ -195,19 +196,20 @@ public:
// The best chain should have at least this much work.
consensus.nMinimumChainWork = uint256S("0x00");
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000000000003077e5d4c957"); // Current testnet chainwork
// By default assume that the signatures in ancestors of this block are valid.
consensus.defaultAssumeValid = uint256S("0x00");
consensus.defaultAssumeValid = uint256S("0x0000000000f8470a0cc0f6210b23bbeba248bf937205e34588aa84596b72c3bd"); // Current best block hash
consensus.powLimit = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
consensus.nPowTargetTimespan = 24 * 60 * 60;
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60;
consensus.nPowTargetSpacing = 2 * 60;
consensus.fPowAllowMinDifficultyBlocks = true;
consensus.nPowTargetSpacingV2 = 2 * 60;
consensus.fPowAllowMinDifficultyBlocks = true; // Enable minimum difficulty after 20 minutes of inactivity
consensus.fPowNoRetargeting = false;
consensus.nRuleChangeActivationThreshold = 720;
consensus.nMinerConfirmationWindow = 540;
consensus.nRuleChangeActivationThreshold = 540;
consensus.nMinerConfirmationWindow = 720;
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28;
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 0;
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
@@ -229,9 +231,10 @@ public:
assert(consensus.hashGenesisBlock == uint256S("0x000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"));
assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"));
vFixedSeeds.clear();
vSeeds.clear();
// Note: vFixedSeeds is not cleared for testnet to allow peer discovery
vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,127);
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,115);

View File

@@ -16,6 +16,7 @@ static SeedSpec6 pnSeed6_main[] = {
};
static SeedSpec6 pnSeed6_test[] = {
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0xd8,0xca,0x87}, 12335}, // 188.216.202.135:12335
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x54,0xf7,0xa9,0xf8}, 12333}, // 84.247.169.248:12333
};
#endif // PALLADIUM_CHAINPARAMSSEEDS_H

View File

@@ -81,8 +81,8 @@ std::string FormatFullVersion()
{
// Display a simplified semantic version: omit trailing ".0" and git suffix
// by reusing FormatVersion on the aggregated CLIENT_VERSION.
// This yields e.g. "v1.4.1" when CLIENT_VERSION_BUILD == 0,
// or "v1.4.1.1" if a non-zero build number is used.
// This yields e.g. "v1.4.2" when CLIENT_VERSION_BUILD == 0,
// or "v1.4.2.1" if a non-zero build number is used.
return std::string("v") + FormatVersion(CLIENT_VERSION);
}

View File

@@ -579,7 +579,7 @@ void SetupServerArgs()
std::string LicenseInfo()
{
const std::string URL_SOURCE_CODE = "<https://github.com/NotRin7/palladium>";
const std::string URL_SOURCE_CODE = "<https://github.com/palladium-coin/palladiumcore>";
return CopyrightHolders(strprintf(_("Copyright (C) %i-%i").translated, 2024, COPYRIGHT_YEAR) + " ") + "\n" +
"Copyright (C) 2009-2024 The Bitcoin Core developers" + "\n" +

View File

@@ -19,6 +19,15 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
if ((pindexLast->nHeight >= 28930) && (pindexLast->nHeight <= 28999))
return nProofOfWorkLimit;
// Special difficulty rule for testnet: If the new block's timestamp is more than 20 minutes
// then allow mining of a min-difficulty block. This rule has priority over LWMA.
if (params.fPowAllowMinDifficultyBlocks && pblock->GetBlockTime() > pindexLast->GetBlockTime() + 20 * 60)
return nProofOfWorkLimit;
// For testnet, use LWMA from beginning to recalculate every block like mainnet
if (params.fPowAllowMinDifficultyBlocks && pindexLast->nHeight >= 0)
return LwmaCalculateNextWorkRequired(pindexLast, params);
if (pindexLast->nHeight >= 29000)
return LwmaCalculateNextWorkRequired(pindexLast, params);
@@ -27,19 +36,11 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
{
if (params.fPowAllowMinDifficultyBlocks)
{
// Special difficulty rule for testnet:
// If the new block's timestamp is more than 2* 10 minutes
// then allow mining of a min-difficulty block.
if (pblock->GetBlockTime() > pindexLast->GetBlockTime() + params.nPowTargetSpacing*2)
return nProofOfWorkLimit;
else
{
// Return the last non-special-min-difficulty-rules-block
const CBlockIndex* pindex = pindexLast;
while (pindex->pprev && pindex->nHeight % params.DifficultyAdjustmentInterval() != 0 && pindex->nBits == nProofOfWorkLimit)
pindex = pindex->pprev;
return pindex->nBits;
}
// Return the last non-special-min-difficulty-rules-block
const CBlockIndex* pindex = pindexLast;
while (pindex->pprev && pindex->nHeight % params.DifficultyAdjustmentInterval() != 0 && pindex->nBits == nProofOfWorkLimit)
pindex = pindex->pprev;
return pindex->nBits;
}
return pindexLast->nBits;
}

View File

@@ -132,9 +132,9 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
// not syncing
return;
// estimate the number of headers left based on nPowTargetSpacing
// estimate the number of headers left based on nPowTargetSpacingV2
// and check if the gui is not aware of the best header (happens rarely)
int estimateNumHeadersLeft = bestHeaderDate.secsTo(currentDate) / Params().GetConsensus().nPowTargetSpacing;
int estimateNumHeadersLeft = bestHeaderDate.secsTo(currentDate) / Params().GetConsensus().nPowTargetSpacingV2;
bool hasBestHeader = bestHeaderHeight >= count;
// show remaining number of blocks
@@ -147,7 +147,7 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
}
void ModalOverlay::UpdateHeaderSyncLabel() {
int est_headers_left = bestHeaderDate.secsTo(QDateTime::currentDateTime()) / Params().GetConsensus().nPowTargetSpacing;
int est_headers_left = bestHeaderDate.secsTo(QDateTime::currentDateTime()) / Params().GetConsensus().nPowTargetSpacingV2;
ui->numberOfBlocksLeft->setText(tr("Unknown. Syncing Headers (%1, %2%)...").arg(bestHeaderHeight).arg(QString::number(100.0 / (bestHeaderHeight + est_headers_left) * bestHeaderHeight, 'f', 1)));
}

View File

@@ -83,4 +83,8 @@
<file alias="spinner-034">res/movies/spinner-034.png</file>
<file alias="spinner-035">res/movies/spinner-035.png</file>
</qresource>
<qresource prefix="/">
<file>res/styles/dark.qss</file>
</qresource>
</RCC>

View File

@@ -61,6 +61,8 @@
#include <QVBoxLayout>
#include <QWindow>
#include <QFile>
#include <QTextStream>
const std::string PalladiumGUI::DEFAULT_UIPLATFORM =
#if defined(Q_OS_MAC)
@@ -79,7 +81,25 @@ PalladiumGUI::PalladiumGUI(interfaces::Node& node, const PlatformStyle *_platfor
platformStyle(_platformStyle),
m_network_style(networkStyle)
{
// --- DARK MODE AUTO-LOAD ---
QSettings settings;
bool isDark = settings.value("darkModeEnabled", false).toBool();
if (isDark) {
// Stylesheet laden
QFile f(":/res/styles/dark.qss");
if (f.open(QFile::ReadOnly | QFile::Text)) {
QTextStream ts(&f);
qApp->setStyleSheet(ts.readAll());
f.close();
}
// Wichtig: Den Haken im Menü setzen!
if(themeAction) {
themeAction->setChecked(true);
}
}
//QSettings settings;
if (!restoreGeometry(settings.value("MainWindowGeometry").toByteArray())) {
// Restore failed (perhaps missing setting), center the window
move(QGuiApplication::primaryScreen()->availableGeometry().center() - frameGeometry().center());
@@ -414,6 +434,10 @@ void PalladiumGUI::createActions()
connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_C), this), &QShortcut::activated, this, &PalladiumGUI::showDebugWindowActivateConsole);
connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_D), this), &QShortcut::activated, this, &PalladiumGUI::showDebugWindow);
themeAction = new QAction(tr("&Dark Mode"), this);
themeAction->setCheckable(true);
connect(themeAction, SIGNAL(triggered()), this, SLOT(toggleTheme()));
}
void PalladiumGUI::createMenuBar()
@@ -506,6 +530,8 @@ void PalladiumGUI::createMenuBar()
help->addSeparator();
help->addAction(aboutAction);
help->addAction(aboutQtAction);
settings->addAction(themeAction);
}
void PalladiumGUI::createToolBars()
@@ -899,7 +925,7 @@ void PalladiumGUI::updateHeadersSyncProgressLabel()
{
int64_t headersTipTime = clientModel->getHeaderTipTime();
int headersTipHeight = clientModel->getHeaderTipHeight();
int estHeadersLeft = (GetTime() - headersTipTime) / Params().GetConsensus().nPowTargetSpacing;
int estHeadersLeft = (GetTime() - headersTipTime) / Params().GetConsensus().nPowTargetSpacingV2;
if (estHeadersLeft > HEADER_HEIGHT_DELTA_SYNC)
progressBarLabel->setText(tr("Syncing Headers (%1%)...").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight, 'f', 1)));
}
@@ -1463,3 +1489,23 @@ void UnitDisplayStatusBarControl::onMenuSelection(QAction* action)
optionsModel->setDisplayUnit(action->data());
}
}
void PalladiumGUI::toggleTheme()
{
QSettings settings;
if (themeAction->isChecked()) {
// 1. Dark Mode laden
QFile f(":/res/styles/dark.qss");
if (f.open(QFile::ReadOnly | QFile::Text)) {
QTextStream ts(&f);
qApp->setStyleSheet(ts.readAll());
f.close();
}
// 2. Speichern, dass er an ist
settings.setValue("darkModeEnabled", true);
} else {
// 1. Standard Theme (Weiß)
qApp->setStyleSheet("");
// 2. Speichern, dass er aus ist
settings.setValue("darkModeEnabled", false);
}
}

View File

@@ -153,7 +153,7 @@ private:
QAction* m_close_wallet_action{nullptr};
QAction* m_wallet_selector_label_action = nullptr;
QAction* m_wallet_selector_action = nullptr;
QAction *themeAction;
QLabel *m_wallet_selector_label = nullptr;
QComboBox* m_wallet_selector = nullptr;
@@ -308,6 +308,8 @@ public Q_SLOTS:
void setTrayIconVisible(bool);
void showModalOverlay();
void toggleTheme();
};
class UnitDisplayStatusBarControl : public QLabel

146
src/qt/res/styles/dark.qss Normal file
View File

@@ -0,0 +1,146 @@
/* =======================================================
PALLADIUM CORE DARK THEME (dark.qss)
======================================================= */
/* --- GRUNDLAGEN --- */
QWidget {
background-color: #2D2D2D;
color: #E0E0E0;
selection-background-color: #007BFF;
selection-color: #FFFFFF;
outline: none;
}
/* --- MENÜLEISTE (Oben: File, Settings...) --- */
QMenuBar {
background-color: #2D2D2D;
color: #E0E0E0;
border-bottom: 1px solid #3A3A3A;
}
QMenuBar::item {
background-color: transparent;
padding: 6px 10px;
}
QMenuBar::item:selected {
background-color: #3A3A3A;
}
QMenu {
background-color: #2D2D2D;
border: 1px solid #555;
}
QMenu::item {
padding: 5px 20px;
}
QMenu::item:selected {
background-color: #007BFF;
color: white;
}
/* --- TOOLBAR (Die Icons oben) --- */
/* Wir machen sie etwas heller, damit schwarze Icons sichtbar bleiben */
QToolBar {
background-color: #3D3D3D;
border-bottom: 1px solid #3A3A3A;
padding: 2px;
spacing: 5px;
}
QToolButton {
background-color: transparent;
border: 1px solid transparent;
border-radius: 4px;
padding: 4px;
color: #E0E0E0;
}
QToolButton:hover {
background-color: #4D4D4D;
border: 1px solid #555;
}
QToolButton:checked {
background-color: #007BFF;
color: white;
}
/* --- TABS (Overview, Send, Receive) --- */
QTabWidget::pane {
border: 1px solid #3A3A3A;
}
QTabBar::tab {
background: #1E1E1E;
color: #AAAAAA;
padding: 8px 20px;
border: 1px solid #3A3A3A;
border-bottom: none;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
margin-right: 2px;
}
QTabBar::tab:selected {
background: #2D2D2D; /* Gleiche Farbe wie Hintergrund */
color: #FFFFFF;
border-bottom: 1px solid #2D2D2D; /* "Verbindet" den Tab mit dem Inhalt */
font-weight: bold;
}
/* --- EINGABEFELDER --- */
QLineEdit, QTextEdit, QPlainTextEdit, QSpinBox, QDoubleSpinBox {
background-color: #1E1E1E;
color: #FFFFFF;
border: 1px solid #3A3A3A;
border-radius: 3px;
padding: 4px;
}
QLineEdit:focus {
border: 1px solid #007BFF;
}
/* --- LISTEN & TABELLEN (Transaktionen) --- */
QTableView, QListView, QTreeWidget {
background-color: #1E1E1E;
alternate-background-color: #252525;
color: #E0E0E0;
gridline-color: #333;
border: 1px solid #3A3A3A;
}
QHeaderView::section {
background-color: #333;
color: #E0E0E0;
padding: 4px;
border: 1px solid #444;
}
/* --- BUTTONS --- */
QPushButton {
background-color: #444;
border: 1px solid #555;
border-radius: 4px;
padding: 5px 15px;
color: white;
}
QPushButton:hover {
background-color: #555;
}
QPushButton:pressed {
background-color: #007BFF;
border-color: #007BFF;
}
/* --- STATUSBAR (Unten) --- */
QStatusBar {
background-color: #2D2D2D;
color: #888;
border-top: 1px solid #3A3A3A;
}

View File

@@ -167,7 +167,7 @@ void SendCoinsDialog::setModel(WalletModel *_model)
// fee section
for (const int n : confTargets) {
ui->confTargetSelector->addItem(tr("%1 (%2 blocks)").arg(GUIUtil::formatNiceTimeOffset(n*Params().GetConsensus().nPowTargetSpacing)).arg(n));
ui->confTargetSelector->addItem(tr("%1 (%2 blocks)").arg(GUIUtil::formatNiceTimeOffset(n*Params().GetConsensus().nPowTargetSpacingV2)).arg(n));
}
connect(ui->confTargetSelector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::updateSmartFeeLabel);
connect(ui->confTargetSelector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::coinControlUpdateLabels);

View File

@@ -491,8 +491,10 @@ static UniValue getblocktemplate(const JSONRPCRequest& request)
if (g_rpc_node->connman->GetNodeCount(CConnman::CONNECTIONS_ALL) == 0)
throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, PACKAGE_NAME " is not connected!");
if (::ChainstateActive().IsInitialBlockDownload())
// Block getblocktemplate during initial block download for security
if (::ChainstateActive().IsInitialBlockDownload()) {
throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, PACKAGE_NAME " is in initial sync and waiting for blocks...");
}
static unsigned int nTransactionsUpdatedLast;
const CTxMemPool& mempool = EnsureMemPool();

View File

@@ -3437,7 +3437,16 @@ static bool ContextualCheckBlockHeader(const CBlockHeader& block, BlockValidatio
// Check proof of work
const Consensus::Params& consensusParams = params.GetConsensus();
if (block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams))
// For testnet, allow min difficulty blocks after 20 minutes of inactivity
bool skipPowCheck = false;
if (params.NetworkIDString() == "test" && consensusParams.fPowAllowMinDifficultyBlocks) {
if (pindexPrev && block.GetBlockTime() > pindexPrev->GetBlockTime() + consensusParams.nPowTargetSpacing * 2) {
skipPowCheck = true; // Allow min difficulty after 20 min inactivity
}
}
if (!skipPowCheck && block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams))
return state.Invalid(BlockValidationResult::BLOCK_INVALID_HEADER, "bad-diffbits", "incorrect proof of work");
// Check against checkpoints