diff --git a/build_msvc/palladium_config.h b/build_msvc/palladium_config.h index 7d64e6c..bd18ca8 100644 --- a/build_msvc/palladium_config.h +++ b/build_msvc/palladium_config.h @@ -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 3 +#define CLIENT_VERSION_REVISION 0 /* Copyright holder(s) before %s replacement */ #define COPYRIGHT_HOLDERS "The %s developers" diff --git a/configure.ac b/configure.ac index 16a7d8b..b5d07ee 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ AC_PREREQ([2.69]) define(_CLIENT_VERSION_MAJOR, 1) -define(_CLIENT_VERSION_MINOR, 4) -define(_CLIENT_VERSION_REVISION, 3) +define(_CLIENT_VERSION_MINOR, 5) +define(_CLIENT_VERSION_REVISION, 0) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_RC, 0) define(_CLIENT_VERSION_IS_RELEASE, true) diff --git a/doc/man/palladium-cli.1 b/doc/man/palladium-cli.1 index 28b1515..f71f8aa 100644 --- a/doc/man/palladium-cli.1 +++ b/doc/man/palladium-cli.1 @@ -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.3" "User Commands" +.TH PALLADIUM-CLI "1" "April 2024" "palladium-cli v1.5.0" "User Commands" .SH NAME -palladium-cli \\- manual page for palladium-cli v1.4.3 +palladium-cli \\- manual page for palladium-cli v1.5.0 .SH SYNOPSIS .B palladium-cli [\fI\,options\/\fR] \fI\, \/\fR[\fI\,params\/\fR] \fI\,Send command to Palladium Core\/\fR @@ -15,7 +15,7 @@ palladium-cli \\- manual page for palladium-cli v1.4.3 .B palladium-cli [\fI\,options\/\fR] \fI\,help Get help for a command\/\fR .SH DESCRIPTION -Palladium Core RPC client version v1.4.3 +Palladium Core RPC client version v1.5.0 .SH OPTIONS .HP \-? diff --git a/doc/man/palladium-qt.1 b/doc/man/palladium-qt.1 index fb40a35..9406714 100644 --- a/doc/man/palladium-qt.1 +++ b/doc/man/palladium-qt.1 @@ -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.3" "User Commands" +.TH PALLADIUM-QT "1" "April 2024" "palladium-qt v1.5.0" "User Commands" .SH NAME -palladium-qt \\- manual page for palladium-qt v1.4.3 +palladium-qt \\- manual page for palladium-qt v1.5.0 .SH SYNOPSIS .B palladium-qt [\fI\,command-line options\/\fR] .SH DESCRIPTION -Palladium Core version v1.4.3 +Palladium Core version v1.5.0 .SH OPTIONS .HP \-? diff --git a/doc/man/palladium-tx.1 b/doc/man/palladium-tx.1 index a426277..4b3988f 100644 --- a/doc/man/palladium-tx.1 +++ b/doc/man/palladium-tx.1 @@ -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.3" "User Commands" +.TH PALLADIUM-TX "1" "April 2024" "palladium-tx v1.5.0" "User Commands" .SH NAME -palladium-tx \\- manual page for palladium-tx v1.4.3 +palladium-tx \\- manual page for palladium-tx v1.5.0 .SH SYNOPSIS .B palladium-tx [\fI\,options\/\fR] \fI\, \/\fR[\fI\,commands\/\fR] \fI\,Update hex-encoded palladium transaction\/\fR @@ -9,7 +9,7 @@ palladium-tx \\- manual page for palladium-tx v1.4.3 .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.3 +Palladium Core palladium\-tx utility version v1.5.0 .SH OPTIONS .HP \-? diff --git a/doc/man/palladium-wallet.1 b/doc/man/palladium-wallet.1 index 76a508b..b05b860 100644 --- a/doc/man/palladium-wallet.1 +++ b/doc/man/palladium-wallet.1 @@ -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.3" "User Commands" +.TH PALLADIUM-WALLET "1" "April 2024" "palladium-wallet v1.5.0" "User Commands" .SH NAME -palladium-wallet \\- manual page for palladium-wallet v1.4.3 +palladium-wallet \\- manual page for palladium-wallet v1.5.0 .SH DESCRIPTION -Palladium Core palladium\-wallet version v1.4.3 +Palladium Core palladium\-wallet version v1.5.0 .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. diff --git a/doc/man/palladiumd.1 b/doc/man/palladiumd.1 index f61b46a..8003cbc 100644 --- a/doc/man/palladiumd.1 +++ b/doc/man/palladiumd.1 @@ -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.3" "User Commands" +.TH PALLADIUMD "1" "April 2024" "palladiumd v1.5.0" "User Commands" .SH NAME -palladiumd \\- manual page for palladiumd v1.4.3 +palladiumd \\- manual page for palladiumd v1.5.0 .SH SYNOPSIS .B palladiumd [\fI\,options\/\fR] \fI\,Start Palladium Core\/\fR .SH DESCRIPTION -Palladium Core version v1.4.3 +Palladium Core version v1.5.0 .SH OPTIONS .HP \-? diff --git a/src/clientversion.cpp b/src/clientversion.cpp index 6b94d48..6034a85 100644 --- a/src/clientversion.cpp +++ b/src/clientversion.cpp @@ -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.3" when CLIENT_VERSION_BUILD == 0, - // or "v1.4.3.1" if a non-zero build number is used. + // This yields e.g. "v1.5.0" when CLIENT_VERSION_BUILD == 0, + // or "v1.5.0.1" if a non-zero build number is used. return std::string("v") + FormatVersion(CLIENT_VERSION); } diff --git a/src/pow.cpp b/src/pow.cpp index cd01e1e..6a4e2a0 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -28,6 +28,20 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead if (params.fPowAllowMinDifficultyBlocks && pindexLast->nHeight >= 0) return LwmaCalculateNextWorkRequired(pindexLast, params); + // Palladium: Hard Fork at 350,000 for fast difficulty adjustment + if (pindexLast->nHeight + 1 >= 340000) { + int64_t nIntervalNew = 60; + if ((pindexLast->nHeight + 1) % nIntervalNew != 0) + return pindexLast->nBits; + + int nHeightFirst = pindexLast->nHeight - (nIntervalNew - 1); + assert(nHeightFirst >= 0); + const CBlockIndex* pindexFirst = pindexLast->GetAncestor(nHeightFirst); + assert(pindexFirst); + + return CalculateNextWorkRequired(pindexLast, pindexFirst->GetBlockTime(), params); + } + if (pindexLast->nHeight >= 29000) return LwmaCalculateNextWorkRequired(pindexLast, params); @@ -110,19 +124,25 @@ unsigned int CalculateNextWorkRequired(const CBlockIndex* pindexLast, int64_t nF if (params.fPowNoRetargeting) return pindexLast->nBits; + // Palladium: Hard Fork at 350,000 for fast difficulty adjustment + int64_t nTargetTimespan = params.nPowTargetTimespan; + if (pindexLast->nHeight + 1 >= 340000) { + nTargetTimespan = 7200; // 60 blocks * 120 seconds + } + // Limit adjustment step int64_t nActualTimespan = pindexLast->GetBlockTime() - nFirstBlockTime; - if (nActualTimespan < params.nPowTargetTimespan/4) - nActualTimespan = params.nPowTargetTimespan/4; - if (nActualTimespan > params.nPowTargetTimespan*4) - nActualTimespan = params.nPowTargetTimespan*4; + if (nActualTimespan < nTargetTimespan/4) + nActualTimespan = nTargetTimespan/4; + if (nActualTimespan > nTargetTimespan*4) + nActualTimespan = nTargetTimespan*4; // Retarget const arith_uint256 bnPowLimit = UintToArith256(params.powLimit); arith_uint256 bnNew; bnNew.SetCompact(pindexLast->nBits); bnNew *= nActualTimespan; - bnNew /= params.nPowTargetTimespan; + bnNew /= nTargetTimespan; if (bnNew > bnPowLimit) bnNew = bnPowLimit; diff --git a/src/script/standard.h b/src/script/standard.h index a710990..2d4b61f 100644 --- a/src/script/standard.h +++ b/src/script/standard.h @@ -30,7 +30,7 @@ public: * Default setting for nMaxDatacarrierBytes. 80 bytes of data, +1 for OP_RETURN, * +2 for the pushdata opcodes. */ -static const unsigned int MAX_OP_RETURN_RELAY = 83; +static const unsigned int MAX_OP_RETURN_RELAY = 520; /** * A data carrying output is an unspendable output containing data. The script diff --git a/src/validation.cpp b/src/validation.cpp index 879ffe0..8ef53d4 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -563,6 +563,15 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) if (fRequireStandard && !IsStandardTx(tx, reason)) return state.Invalid(TxValidationResult::TX_NOT_STANDARD, reason); + // Check OP_RETURN size based on activation height + if (ChainActive().Height() < 340000) { + for (const CTxOut& txout : tx.vout) { + if (txout.scriptPubKey.IsUnspendable() && txout.scriptPubKey.size() > 83) { + return state.Invalid(TxValidationResult::TX_NOT_STANDARD, "bad-txns-oversize-opreturn-prefork"); + } + } + } + // Do not work on transactions that are too small. // A transaction with 1 segwit input and 1 P2WPHK output has non-witness size of 82 bytes. // Transactions smaller than this are not relayed to mitigate CVE-2017-12842 by not relaying diff --git a/update_version.sh b/update_version.sh new file mode 100755 index 0000000..22faf6d --- /dev/null +++ b/update_version.sh @@ -0,0 +1,67 @@ +#!/bin/bash +set -e + +echo "========================================================" +echo " Palladium Core - Master Version Updater" +echo "========================================================" + +# 1. Get Inputs +read -p "Enter CURRENT version string (e.g. 1.4.3): " OLD_VERSION +read -p "Enter NEW version string (e.g. 1.5.0): " NEW_VERSION + +if [ -z "$OLD_VERSION" ] || [ -z "$NEW_VERSION" ]; then + echo "Error: Version strings cannot be empty." + exit 1 +fi + +# Parse the NEW version into parts (Major.Minor.Revision) +IFS='.' read -r -a V_PARTS <<< "$NEW_VERSION" +MAJOR="${V_PARTS[0]}" +MINOR="${V_PARTS[1]}" +REV="${V_PARTS[2]}" + +# Default to 0 if revision is missing (e.g. 1.5 becomes 1.5.0) +if [ -z "$REV" ]; then REV="0"; fi + +echo "--------------------------------------------------------" +echo "Targeting: $MAJOR.$MINOR.$REV" +echo "--------------------------------------------------------" + +# 2. Global Text Replacement (Docs, Manpages, Comments) +echo "[1/3] Performing global search & replace ($OLD_VERSION -> $NEW_VERSION)..." +# We exclude .git directory and binaries to avoid corruption +grep -rIl "$OLD_VERSION" . | grep -v "^./.git" | grep -v "update_version.sh" | while read -r file ; do + sed -i "s/$OLD_VERSION/$NEW_VERSION/g" "$file" +done +echo "Global text replacement done." + +# 3. Update configure.ac (The Linux/Unix Build System) +echo "[2/3] Updating configure.ac..." +if [ -f "configure.ac" ]; then + sed -i "s/define(_CLIENT_VERSION_MAJOR, [0-9]*)/define(_CLIENT_VERSION_MAJOR, $MAJOR)/g" configure.ac + sed -i "s/define(_CLIENT_VERSION_MINOR, [0-9]*)/define(_CLIENT_VERSION_MINOR, $MINOR)/g" configure.ac + sed -i "s/define(_CLIENT_VERSION_REVISION, [0-9]*)/define(_CLIENT_VERSION_REVISION, $REV)/g" configure.ac + echo "✔ configure.ac updated." +else + echo "❌ Warning: configure.ac not found." +fi + +# 4. Update Windows MSVC Config (The Windows Build System) +echo "[3/3] Updating build_msvc/palladium_config.h..." +MSVC_FILE="build_msvc/palladium_config.h" +if [ -f "$MSVC_FILE" ]; then + sed -i "s/#define CLIENT_VERSION_MAJOR [0-9]*/#define CLIENT_VERSION_MAJOR $MAJOR/g" "$MSVC_FILE" + sed -i "s/#define CLIENT_VERSION_MINOR [0-9]*/#define CLIENT_VERSION_MINOR $MINOR/g" "$MSVC_FILE" + sed -i "s/#define CLIENT_VERSION_REVISION [0-9]*/#define CLIENT_VERSION_REVISION $REV/g" "$MSVC_FILE" + echo "✔ $MSVC_FILE updated." +else + echo "❌ Warning: $MSVC_FILE not found." +fi + +echo "========================================================" +echo "Update Complete! Please run:" +echo "1. make clean" +echo "2. ./autogen.sh" +echo "3. ./configure" +echo "4. make" +echo "========================================================"