Add comprehensive documentation for v2.0.0 Taproot release
Documentation: - Add CHANGELOG.md following Keep a Changelog format with complete version history - Add doc/TAPROOT.md: comprehensive technical specification for BIP340/341/342/350 - Add doc/taproot-guide.md: user-friendly guide for wallet users and developers - Update README.md: add Taproot highlights, documentation links, and version history - Add doc/release-notes/release-notes-2.0.0.md - Update doc/bips.md with Taproot BIP entries (340, 341, 342, 350) - Remove standalone doc/release-notes.md (replaced by versioned directory) Documentation covers the complete Taproot implementation backported from Bitcoin Core v24.2, including Schnorr signatures, bech32m addresses, and BIP9 deployment timeline for mainnet activation (March 2026-2027). CHANGELOG.md contains detailed history from v1.1.0 to v2.0.0 with real commit information extracted from GitHub repository tags.
This commit is contained in:
266
CHANGELOG.md
Normal file
266
CHANGELOG.md
Normal file
@@ -0,0 +1,266 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to Palladium Core will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [2.0.0] - 2026-02-08
|
||||
|
||||
### Added
|
||||
- Full Taproot support implementing BIP340 (Schnorr Signatures), BIP341 (Taproot), BIP342 (Tapscript), and BIP350 (Bech32m)
|
||||
- Schnorr signature support via secp256k1 library upgrade to Bitcoin Core v24.2
|
||||
- Bech32m address format for Taproot outputs (addresses starting with `plm1p...`)
|
||||
- Address type dropdown in GUI Receive tab for selecting legacy/P2SH-SegWit/bech32/bech32m
|
||||
- `getnewaddress` RPC support for "bech32m" address type parameter
|
||||
- XOnlyPubKey class for 32-byte x-only public key representation
|
||||
- Taproot deployment via BIP9 soft fork (bit 2, mainnet activation March 2026-2027)
|
||||
- Functional test `feature_taproot.py` for end-to-end Taproot lifecycle validation
|
||||
- Comprehensive technical documentation in doc/TAPROOT.md
|
||||
- User-friendly Taproot guide in doc/taproot-guide.md
|
||||
|
||||
### Changed
|
||||
- Upgraded secp256k1 library to Bitcoin Core v24.2 with extrakeys and schnorrsig modules enabled
|
||||
- Updated script interpreter with full taproot/tapscript validation rules (+469 lines)
|
||||
- Default address type remains "bech32" for backward compatibility
|
||||
|
||||
### Documentation
|
||||
- Added doc/TAPROOT.md: comprehensive technical specification
|
||||
- Added doc/taproot-guide.md: user-friendly guide for wallet users
|
||||
- Updated doc/bips.md with BIP340/341/342/350 implementation details
|
||||
- Restructured release notes: doc/release-notes/release-notes-2.0.0.md
|
||||
- Updated man pages for all binaries to version 2.0.0
|
||||
|
||||
[Detailed release notes](doc/release-notes/release-notes-2.0.0.md)
|
||||
|
||||
## [1.5.1] - 2026-01-26
|
||||
|
||||
### Added
|
||||
- New Palladium logo and improved branding
|
||||
- Rebuild option in quick-build.sh script
|
||||
|
||||
### Changed
|
||||
- Improved splash screen text visibility with shadow effect and larger font
|
||||
- Updated copyright year to 2026
|
||||
- Widened transaction amount column header for better readability
|
||||
- Enhanced modal overlay UI with border and semi-transparent background
|
||||
|
||||
### Fixed
|
||||
- Dark mode input field heights now match light mode
|
||||
- Dark mode spinbox button visibility improved
|
||||
- Text clipping in modal overlay resolved
|
||||
- Window minimum size properly set
|
||||
- UI inconsistencies across light and dark themes
|
||||
- Compilation issues with modern GCC (Ubuntu 24.04+)
|
||||
- Missing argument handling in build-windows.sh
|
||||
- ccache handling in quick-build.sh
|
||||
|
||||
### Documentation
|
||||
- Added .gitignore for backup files
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.5.1)
|
||||
|
||||
## [1.5.0] - 2025-12-10
|
||||
|
||||
### Added
|
||||
- **Hard Fork Logic activated at block 340,000**: Chat and Difficulty Adjustment Algorithm (DAA)
|
||||
- Better difficulty adjustment at block 350,000
|
||||
- Update checker functionality
|
||||
- Combine script utility
|
||||
- Additional parameters to chainparams.cpp
|
||||
|
||||
### Changed
|
||||
- Improved difficulty adjustment algorithm for better network stability
|
||||
- Updated modal overlay and GUI files
|
||||
- Replaced deprecated `state.DoS` call with `state.Invalid`
|
||||
|
||||
### Fixed
|
||||
- Linker errors resolved
|
||||
- Various stability improvements and bug fixes
|
||||
- GUI component fixes
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.5.0)
|
||||
|
||||
## [1.4.4] - 2025-11-19
|
||||
|
||||
### Changed
|
||||
- Version bump to 1.4.4 with updates to configure.ac, MSVC config, clientversion.cpp, and man pages
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.4)
|
||||
|
||||
## [1.4.3] - 2025-11-18
|
||||
|
||||
### Added
|
||||
- **Dark Mode support** with toggle switch in Settings menu
|
||||
- Dark theme stylesheet (dark.qss)
|
||||
- Theme preference persistence using QSettings
|
||||
- Theme toggle functionality in GUI
|
||||
|
||||
### Changed
|
||||
- Settings menu enhanced with Dark Mode checkbox option
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.3)
|
||||
|
||||
## [1.4.2] - 2025-11-18
|
||||
|
||||
### Added
|
||||
- Testnet seed nodes for peer discovery
|
||||
- Allow minimum difficulty blocks after testnet inactivity
|
||||
|
||||
### Changed
|
||||
- Updated testnet consensus parameters
|
||||
- Simplified testnet difficulty adjustment logic
|
||||
- Updated BIP34 height and hash for testnet
|
||||
- Allow `getblocktemplate` during initial block download for testnet
|
||||
|
||||
### Fixed
|
||||
- Testnet chain parameters updated
|
||||
- Testnet difficulty calculation rules adjusted
|
||||
- Restored `getblocktemplate` security check
|
||||
- Wallet confirmation time corrected
|
||||
|
||||
### Documentation
|
||||
- Added troubleshooting section to README
|
||||
- Moved detailed configuration to separate document
|
||||
- Updated repository URLs throughout documentation
|
||||
- Removed outdated configuration details
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.2)
|
||||
|
||||
## [1.4.1] - 2025-11-11
|
||||
|
||||
### Added
|
||||
- **Docker build system** for cross-platform compilation
|
||||
- Linux x86_64 Docker build infrastructure
|
||||
- Windows cross-compilation support via Docker
|
||||
- ARM64 (aarch64) support for Raspberry Pi and similar devices
|
||||
- ARMv7l architecture support
|
||||
- Testnet and regtest support enabled with magic byte changes
|
||||
|
||||
### Changed
|
||||
- Simplified version string formatting using semantic versioning
|
||||
- Replaced CLIENT_BUILD with FormatVersion function
|
||||
- Testnet3 renamed to testnet across all references
|
||||
- Restructured Docker build system for better organization
|
||||
|
||||
### Fixed
|
||||
- **Critical: Node synchronization** - Fresh nodes can now fully synchronize from genesis
|
||||
- Chainwork parameter corrected in chainparams.cpp
|
||||
- Consensus parameters updated to enable initial blockchain sync
|
||||
|
||||
### Documentation
|
||||
- Build instructions reorganized into platform-specific documents
|
||||
- README restructured with Docker build emphasis
|
||||
- Simplified build instructions by linking to platform-specific docs
|
||||
- Updated repository URLs throughout documentation
|
||||
|
||||
### Removed
|
||||
- Inactive mainnet seed node removed from node list
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.1)
|
||||
|
||||
## [1.4.0] - 2025-10-23
|
||||
|
||||
### Added
|
||||
- **AuxPow (Auxiliary Proof of Work)** support
|
||||
- New seed nodes and DNS seeders
|
||||
- Comprehensive project documentation in README
|
||||
- LaTeX format whitepaper (converted from PDF)
|
||||
- New Palladium logo assets (128px and 250px)
|
||||
- Mining pool configuration support
|
||||
|
||||
### Changed
|
||||
- Major update to mining and work parameters
|
||||
- Easier compilation process
|
||||
- Updated palladium.conf with new defaults
|
||||
- Stability improvements across the codebase
|
||||
- Updated website information
|
||||
- Enhanced splash screen initialization messages
|
||||
|
||||
### Fixed
|
||||
- Build failure by including `<limits>` header in corelib
|
||||
- Various stability and performance fixes
|
||||
|
||||
### Documentation
|
||||
- Updated README with comprehensive installation instructions
|
||||
- Whitepaper converted to LaTeX format for better maintainability
|
||||
- Updated build instructions for macOS
|
||||
- Improved issue templates and bug report forms
|
||||
- Updated release notes structure
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.0)
|
||||
|
||||
## [1.3.0] - 2024-04-07
|
||||
|
||||
### Added
|
||||
- **LWMA (Lightweight Moving Average) difficulty adjustment algorithm**
|
||||
- Updated chain parameter seeds (chainparamsseeds.h)
|
||||
|
||||
### Changed
|
||||
- Mining logic modifications (mining.cpp)
|
||||
- Proof-of-work implementation updates (pow.cpp)
|
||||
- Chain parameters updated (chainparams.cpp)
|
||||
- Client version information updated
|
||||
- Configuration header changes (palladium_config.h)
|
||||
|
||||
### Fixed
|
||||
- macOS compilation issues resolved
|
||||
- Various bug fixes and stability improvements
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.3.0)
|
||||
|
||||
## [1.2.0] - 2024-04-04
|
||||
|
||||
### Added
|
||||
- DNS seeds and fixed seeds for network bootstrap
|
||||
- Built-in DNS seeder support
|
||||
- Checkpoints for blockchain validation
|
||||
|
||||
### Changed
|
||||
- Chain parameters updated across multiple commits (chainparams.cpp)
|
||||
- Soft fork block time and halving schedule adjustments
|
||||
- Validation logic updates (validation.cpp)
|
||||
- Wallet functionality improvements (wallet.cpp)
|
||||
- Database handling updates (db.cpp)
|
||||
- Message handling improvements (message.cpp)
|
||||
|
||||
### Fixed
|
||||
- SegWit functionality fixes
|
||||
|
||||
### Documentation
|
||||
- Updated README with DNS seeder information
|
||||
- Updated copyright notices
|
||||
- Man pages updated (palladium-cli.1, palladium-tx.1, palladium-wallet.1)
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.2.0)
|
||||
|
||||
## [1.1.0] - 2024-03-15
|
||||
|
||||
Initial public release of Palladium Core.
|
||||
|
||||
### Features
|
||||
- Bitcoin Core codebase foundation
|
||||
- SegWit support
|
||||
- Basic wallet functionality
|
||||
- P2P networking
|
||||
- Mining support
|
||||
- RPC interface
|
||||
|
||||
[Release on GitHub](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.1.0)
|
||||
|
||||
---
|
||||
|
||||
[Unreleased]: https://github.com/palladium-coin/palladiumcore/compare/v2.0.0...HEAD
|
||||
[2.0.0]: https://github.com/palladium-coin/palladiumcore/releases/tag/v2.0.0
|
||||
[1.5.1]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.5.1
|
||||
[1.5.0]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.5.0
|
||||
[1.4.4]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.4
|
||||
[1.4.3]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.3
|
||||
[1.4.2]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.2
|
||||
[1.4.1]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.1
|
||||
[1.4.0]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.0
|
||||
[1.3.0]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.3.0
|
||||
[1.2.0]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.2.0
|
||||
[1.1.0]: https://github.com/palladium-coin/palladiumcore/releases/tag/v1.1.0
|
||||
84
README.md
84
README.md
@@ -1,25 +1,61 @@
|
||||
# Palladium Core
|
||||
|
||||
**Official Websites:** [palladiumblockchain.net](https://palladiumblockchain.net) and [palladium-coin.com](https://palladium-coin.com)
|
||||
## Overview
|
||||
[](https://github.com/palladium-coin/palladiumcore/releases)
|
||||
[](COPYING)
|
||||
|
||||
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.
|
||||
**Official Websites:** [palladiumblockchain.net](https://palladiumblockchain.net) | [palladium-coin.com](https://palladium-coin.com)
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [What is Palladium Core?](#what-is-palladium-core)
|
||||
- [Quick Start](#quick-start)
|
||||
- [Building from Source](#building-from-source)
|
||||
- [Documentation](#documentation)
|
||||
- [Contributing](#contributing)
|
||||
- [Version History](#version-history)
|
||||
- [Support](#support)
|
||||
- [License](#license)
|
||||
|
||||
## What is Palladium Core?
|
||||
|
||||
Palladium Core is a decentralized cryptocurrency built on Bitcoin's proven codebase, enhanced with modern features including **Taproot support** (BIP340/341/342/350). Designed for the palladium market ecosystem, it delivers enterprise-grade security, efficiency, and privacy for digital transactions.
|
||||
|
||||
### Key Features
|
||||
|
||||
- **Taproot Support (v2.0.0)**: Enhanced privacy with Schnorr signatures and bech32m addresses
|
||||
- **Security**: Advanced cryptographic techniques ensure transaction security and fund protection
|
||||
- **Efficiency**: Optimized blockchain parameters provide fast and reliable transaction processing
|
||||
- **Transparency**: Open-source architecture enables community inspection and contribution
|
||||
- **Market-Focused**: Tailored features specifically designed for palladium industry requirements
|
||||
- **Decentralized**: Peer-to-peer network with no central authority
|
||||
|
||||
### What's New in v2.0.0
|
||||
|
||||
Palladium Core 2.0.0 introduces **full Taproot support**, bringing cutting-edge privacy and efficiency improvements:
|
||||
|
||||
- **Schnorr Signatures**: More efficient and secure than traditional ECDSA signatures
|
||||
- **Bech32m Addresses**: New address format (`plm1p...`) for Taproot outputs
|
||||
- **Enhanced Privacy**: Complex smart contracts appear as simple transactions on-chain
|
||||
- **Smaller Transactions**: Lower fees through more efficient signature schemes
|
||||
|
||||
**Learn More**: [Taproot User Guide](doc/taproot-guide.md) | [Technical Specification](doc/TAPROOT.md) | [Release Notes](doc/release-notes/release-notes-2.0.0.md)
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Installation
|
||||
### Pre-built Binaries
|
||||
|
||||
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](#configuration) section below)
|
||||
3. **Launch the Core**: Start the Palladium Core application (includes automatic network synchronization)
|
||||
Download the latest Palladium Core release:
|
||||
|
||||
**[Download Latest Release (v2.0.0)](https://github.com/palladium-coin/palladiumcore/releases/latest)**
|
||||
|
||||
**Installation Steps:**
|
||||
|
||||
1. **Download**: Get the appropriate binary for your operating system
|
||||
2. **Install**: Extract and run the installer
|
||||
3. **Configure**: Create `palladium.conf` (see [Configuration](#configuration) below)
|
||||
4. **Launch**: Start Palladium Core and sync with the network
|
||||
|
||||
**First-time users?** Check out the [Taproot User Guide](doc/taproot-guide.md) to learn about creating modern Taproot addresses with enhanced privacy.
|
||||
|
||||
### Configuration
|
||||
|
||||
@@ -158,6 +194,26 @@ Security is paramount in cryptocurrency development. Please report security vuln
|
||||
|
||||
Palladium Core is released under the terms of the MIT license. See [COPYING](COPYING) for more information.
|
||||
|
||||
## Documentation
|
||||
|
||||
### Core Documentation
|
||||
- **[CHANGELOG](CHANGELOG.md)** - Complete version history and release notes
|
||||
- **[Taproot User Guide](doc/taproot-guide.md)** - How to use Taproot addresses (v2.0.0)
|
||||
- **[Taproot Technical Specification](doc/TAPROOT.md)** - Deep dive into Taproot implementation
|
||||
- **[Release Notes](doc/release-notes/)** - Detailed release notes for each version
|
||||
- **[Configuration Guide](doc/configuration-file.md)** - Complete configuration reference
|
||||
- **[BIP Implementation Status](doc/bips.md)** - Bitcoin Improvement Proposals implemented
|
||||
|
||||
### Build Documentation
|
||||
- **[Build Instructions](doc/)** - Platform-specific build guides
|
||||
- **[Dependencies](doc/dependencies.md)** - Complete dependency list
|
||||
- **[Developer Notes](doc/developer-notes.md)** - Advanced development setup
|
||||
|
||||
### API Documentation
|
||||
- **[JSON-RPC API](doc/JSON-RPC-interface.md)** - Complete RPC command reference
|
||||
- **[REST Interface](doc/REST-interface.md)** - RESTful API documentation
|
||||
- **[ZMQ Interface](doc/zmq.md)** - ZeroMQ notification interface
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation**: [Wiki](https://github.com/palladium-coin/palladium/wiki)
|
||||
@@ -165,10 +221,24 @@ Palladium Core is released under the terms of the MIT license. See [COPYING](COP
|
||||
- **Community**: [Discord](https://discord.gg/palladium) | [Telegram](https://t.me/palladiumcoin)
|
||||
- **Website**: [palladiumblockchain.net](https://palladiumblockchain.net/)
|
||||
|
||||
## Version History
|
||||
|
||||
For a complete history of changes, improvements, and bug fixes across all versions, see the **[CHANGELOG](CHANGELOG.md)**.
|
||||
|
||||
**Recent Releases:**
|
||||
- **[v2.0.0](doc/release-notes/release-notes-2.0.0.md)** (2026-02-08) - Taproot support (BIP340/341/342/350)
|
||||
- **[v1.5.1](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.5.1)** (2026-01-26) - UI improvements and bug fixes
|
||||
- **[v1.5.0](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.5.0)** (2025-12-10) - Hard fork with DAA improvements
|
||||
- **[v1.4.1](https://github.com/palladium-coin/palladiumcore/releases/tag/v1.4.1)** (2025-11-11) - Docker build system and sync fixes
|
||||
|
||||
[View all releases →](https://github.com/palladium-coin/palladiumcore/releases)
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
Palladium Core is built upon the Bitcoin Core codebase. We thank the Bitcoin Core developers and the broader cryptocurrency community for their foundational work.
|
||||
|
||||
**Taproot Implementation**: The Taproot implementation (v2.0.0) is based on Bitcoin Core v24.2, adapted for Palladium's chain parameters and consensus rules.
|
||||
|
||||
---
|
||||
|
||||
**Disclaimer**: Cryptocurrency investments carry risk. Please do your own research and invest responsibly.
|
||||
|
||||
478
doc/TAPROOT.md
Normal file
478
doc/TAPROOT.md
Normal file
@@ -0,0 +1,478 @@
|
||||
# Taproot Implementation in Palladium Core
|
||||
|
||||
## Introduction
|
||||
|
||||
Taproot is a major protocol upgrade to Palladium Core that enhances privacy, improves efficiency, and enables more flexible smart contract development. Introduced in version 2.0.0, this implementation brings the benefits of Bitcoin's Taproot upgrade to the Palladium blockchain through a complete backport from Bitcoin Core v24.2.
|
||||
|
||||
Taproot combines three key innovations:
|
||||
- **Schnorr signatures** (BIP340) for more efficient and private transactions
|
||||
- **Taproot outputs** (BIP341) enabling key-path and script-path spending
|
||||
- **Tapscript** (BIP342) with updated validation rules and new opcodes
|
||||
- **Bech32m addresses** (BIP350) for encoding Taproot outputs
|
||||
|
||||
## BIP Implementation Reference
|
||||
|
||||
### BIP340: Schnorr Signatures for secp256k1
|
||||
|
||||
**Status**: Fully implemented in v2.0.0
|
||||
**Specification**: https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
|
||||
|
||||
BIP340 defines the Schnorr signature scheme for secp256k1, replacing ECDSA for witness version 1 outputs. Key features:
|
||||
|
||||
- **64-byte signatures**: More compact than DER-encoded ECDSA (71-72 bytes)
|
||||
- **X-only public keys**: 32-byte representation (only x-coordinate)
|
||||
- **Linearity**: Enables key and signature aggregation (foundation for future multisig improvements)
|
||||
- **Provable security**: Based on discrete logarithm assumption
|
||||
- **Batch verification**: Multiple signatures can be verified more efficiently together
|
||||
|
||||
**Implementation components**:
|
||||
- `XOnlyPubKey` class: 32-byte x-only public key representation
|
||||
- `CKey::SignSchnorr()`: BIP340-compliant signature generation
|
||||
- `XOnlyPubKey::VerifySchnorr()`: Signature verification
|
||||
- `CPubKey::GetXOnlyPubKey()`: Extraction of x-only key from compressed pubkey
|
||||
- Integration with libsecp256k1's `extrakeys` and `schnorrsig` modules
|
||||
|
||||
### BIP341: Taproot: SegWit version 1 spending rules
|
||||
|
||||
**Status**: Fully implemented in v2.0.0
|
||||
**Specification**: https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki
|
||||
|
||||
BIP341 introduces Taproot outputs (witness version 1), enabling two spending paths:
|
||||
|
||||
1. **Key-path spending**: Direct signature verification (default, most efficient)
|
||||
2. **Script-path spending**: Reveal and execute a script from a Merkle tree
|
||||
|
||||
**Key innovations**:
|
||||
- **Unified spending**: Key-path and script-path spends are indistinguishable until spent
|
||||
- **MAST (Merkelized Alternative Script Trees)**: Only reveal executed script branch
|
||||
- **TapTweak**: Output key is internal key tweaked with script tree commitment
|
||||
- **Parity bit**: Even/odd y-coordinate handled implicitly
|
||||
|
||||
**Implementation components**:
|
||||
- `SigVersion::TAPROOT`: New signature version for key-path spending
|
||||
- `CKey::SignSchnorrTaproot()`: Key-path signature with BIP341 tweaking
|
||||
- `XOnlyPubKey::ComputeTapTweak()`: Taproot tweak calculation
|
||||
- `XOnlyPubKey::CreatePayToTaprootPubKey()`: Output key derivation with parity handling
|
||||
- Control block validation: 33-4129 bytes, 32-byte node increments
|
||||
- Taproot signature hash with SHA256 tagged hashing
|
||||
|
||||
### BIP342: Validation of Taproot Scripts
|
||||
|
||||
**Status**: Fully implemented in v2.0.0
|
||||
**Specification**: https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki
|
||||
|
||||
BIP342 defines validation rules for scripts revealed via script-path spending:
|
||||
|
||||
**New features**:
|
||||
- **OP_CHECKSIGADD**: Replaces OP_CHECKMULTISIG with better semantics
|
||||
- **Validation weight limits**: Prevent DoS attacks in script validation
|
||||
- **OP_SUCCESS opcodes**: Reserved for future soft-fork upgrades (80, 98, 126-129, 131-134, 137-138, 141-142, 149-153)
|
||||
- **Signature opcodes**: Use Schnorr instead of ECDSA
|
||||
- **Taproot leaf version**: 0xc0 (extensible to 0xc1-0xfe)
|
||||
|
||||
**Implementation components**:
|
||||
- `SigVersion::TAPSCRIPT`: New signature version for script-path
|
||||
- `ScriptExecutionData`: Tracks tapleaf hash, codeseparator position, annex, validation weight
|
||||
- Validation weight constraints:
|
||||
- `VALIDATION_WEIGHT_PER_SIGOP_PASSED` = 50 units
|
||||
- `VALIDATION_WEIGHT_OFFSET` = 50 units
|
||||
- Annex support with tag 0x50
|
||||
- Minimal-if requirement for tapscript conditionals
|
||||
- CHECKMULTISIG disabled in tapscript (use OP_CHECKSIGADD instead)
|
||||
|
||||
### BIP350: Bech32m format for v1+ witness addresses
|
||||
|
||||
**Status**: Fully implemented in v2.0.0
|
||||
**Specification**: https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
|
||||
|
||||
BIP350 introduces Bech32m, a modified version of Bech32 for witness version 1+ addresses:
|
||||
|
||||
**Key differences from Bech32**:
|
||||
- **Different constant**: Polymod check uses 0x2bc830a3 (vs 1 for Bech32)
|
||||
- **Witness version**: v0 uses Bech32, v1+ uses Bech32m
|
||||
- **Length mutation protection**: Better resistance to certain error patterns
|
||||
|
||||
**Address format**:
|
||||
- Taproot addresses: `plm1p...` (witness v1)
|
||||
- SegWit v0 addresses: `plm1q...` (witness v0, uses Bech32)
|
||||
|
||||
**Implementation components**:
|
||||
- `bech32::Encoding` enum: `BECH32` and `BECH32M`
|
||||
- Dual-constant checksum creation/verification
|
||||
- Automatic encoding selection based on witness version
|
||||
- Palladium-specific HRP (Human Readable Part): "plm"
|
||||
|
||||
## Source Attribution
|
||||
|
||||
This implementation is a backport of Taproot functionality from **Bitcoin Core v24.2** with appropriate adaptations for Palladium's chain parameters, consensus rules, and testing infrastructure.
|
||||
|
||||
**Bitcoin Core components**:
|
||||
- secp256k1 library upgraded to Bitcoin Core v24.2 tag
|
||||
- Schnorr signature implementation from Bitcoin Core
|
||||
- Taproot consensus rules from Bitcoin Core
|
||||
- Bech32m encoding logic from Bitcoin Core
|
||||
|
||||
**Palladium-specific adaptations**:
|
||||
- Chain parameters (deployment timing, genesis blocks, maturity rules)
|
||||
- Address prefixes (HRP: "plm" for mainnet)
|
||||
- Test vector alignment to Palladium's consensus
|
||||
- Wallet infrastructure integration
|
||||
- Deployment schedule for Palladium mainnet/testnet
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
### Crypto Layer
|
||||
|
||||
**Files**: `src/key.cpp`, `src/key.h`, `src/pubkey.cpp`, `src/pubkey.h`
|
||||
|
||||
**Classes and methods**:
|
||||
- `XOnlyPubKey`: 32-byte x-only public key
|
||||
- `VerifySchnorr(msg, sig)`: BIP340 signature verification
|
||||
- `ComputeTapTweak(merkle_root)`: Calculate BIP341 taproot tweak
|
||||
- `CreatePayToTaprootPubKey(merkle_root, &output_key)`: Derive output key
|
||||
- `CheckTapTweak(internal_key, merkle_root, parity)`: Verify taproot tweak
|
||||
|
||||
- `CKey`: Private key operations
|
||||
- `SignSchnorr(msg, &sig)`: Basic Schnorr signature (BIP340)
|
||||
- `SignSchnorrTaproot(msg, merkle_root, &sig)`: Taproot key-path signature (BIP341)
|
||||
|
||||
- `CPubKey`: Compressed public key (33 bytes)
|
||||
- `GetXOnlyPubKey()`: Extract x-only representation
|
||||
|
||||
**Statistics**:
|
||||
- `key.cpp`: +26 lines
|
||||
- `key.h`: +11 lines
|
||||
- `pubkey.cpp`: +49 lines
|
||||
- `pubkey.h`: +66 lines
|
||||
- `test/key_tests.cpp`: +60 lines (Schnorr test coverage)
|
||||
|
||||
### Encoding Layer
|
||||
|
||||
**Files**: `src/bech32.cpp`, `src/bech32.h`, `src/key_io.cpp`
|
||||
|
||||
**Key changes**:
|
||||
- `bech32::Encoding` enum for dual-mode operation
|
||||
- `Encode(encoding, hrp, values)`: Supports both BECH32 and BECH32M
|
||||
- `Decode(str)`: Auto-detects encoding based on witness version
|
||||
- Address encoding/decoding logic updated for automatic selection
|
||||
|
||||
**Statistics**:
|
||||
- `bech32.cpp`: +67/-48 lines
|
||||
- `bech32.h`: +15/-1 lines
|
||||
- `key_io.cpp`: +22/-9 lines
|
||||
|
||||
### Script Layer
|
||||
|
||||
**Files**: `src/script/interpreter.cpp`, `src/script/interpreter.h`, `src/script/script.h`, `src/script/script_error.cpp`, `src/script/script_error.h`, `src/script/standard.cpp`, `src/script/standard.h`
|
||||
|
||||
**Major additions**:
|
||||
- `SigVersion::TAPROOT`: Key-path spending
|
||||
- `SigVersion::TAPSCRIPT`: Script-path spending
|
||||
- `EvalScript()`: Taproot/tapscript execution paths
|
||||
- `BaseSignatureChecker::CheckSchnorrSignature()`: Schnorr verification hook
|
||||
- Taproot signature hash computation with precomputed data
|
||||
- Control block parsing and validation
|
||||
- OP_CHECKSIGADD implementation
|
||||
- Validation weight tracking
|
||||
|
||||
**New error codes**:
|
||||
- `SCRIPT_ERR_SCHNORR_SIG_SIZE`
|
||||
- `SCRIPT_ERR_SCHNORR_SIG_HASHTYPE`
|
||||
- `SCRIPT_ERR_SCHNORR_SIG`
|
||||
- `SCRIPT_ERR_TAPROOT_WRONG_CONTROL_SIZE`
|
||||
- `SCRIPT_ERR_TAPSCRIPT_VALIDATION_WEIGHT`
|
||||
- `SCRIPT_ERR_TAPSCRIPT_CHECKMULTISIG`
|
||||
- `SCRIPT_ERR_TAPSCRIPT_MINIMALIF`
|
||||
|
||||
**Statistics**:
|
||||
- `interpreter.cpp`: +469/-36 lines
|
||||
- `interpreter.h`: +69/-1 lines
|
||||
- `script.h`: +22/-1 lines
|
||||
- `script_error.cpp`: +20 lines
|
||||
- `script_error.h`: +12 lines
|
||||
- `standard.cpp`: +12 lines
|
||||
- `standard.h`: +1 line
|
||||
|
||||
### Consensus Layer
|
||||
|
||||
**Files**: `src/chainparams.cpp`, `src/consensus/params.h`, `src/versionbitsinfo.cpp`
|
||||
|
||||
**Deployment parameters**:
|
||||
|
||||
**Mainnet**:
|
||||
- Deployment: BIP9 soft fork
|
||||
- Bit: 2
|
||||
- Start time: 1772323200 (March 1, 2026 00:00:00 UTC)
|
||||
- Timeout: 1803859200 (March 1, 2027 00:00:00 UTC)
|
||||
- Min activation height: Not specified (activation determined by signaling threshold)
|
||||
|
||||
**Testnet**:
|
||||
- Same parameters as mainnet
|
||||
|
||||
**Regtest**:
|
||||
- Status: ALWAYS_ACTIVE (immediate activation for testing)
|
||||
|
||||
**Statistics**:
|
||||
- `chainparams.cpp`: +9 lines
|
||||
- `consensus/params.h`: +3/-1 lines
|
||||
- `versionbitsinfo.cpp`: +4 lines
|
||||
|
||||
### Wallet Layer
|
||||
|
||||
**Files**: `src/outputtype.cpp`, `src/outputtype.h`, `src/script/descriptor.cpp`, `src/script/sign.cpp`, `src/script/signingprovider.cpp`, `src/wallet/scriptpubkeyman.cpp`, `src/wallet/rpcwallet.cpp`
|
||||
|
||||
**Key additions**:
|
||||
- `OutputType::BECH32M`: New output type for Taproot
|
||||
- `GetDestinationForTaprootKey()`: Create witness v1 destination
|
||||
- `CreateSig()`: Updated for Schnorr signature generation
|
||||
- Key-path: Uses `SignSchnorrTaproot()` with empty scriptCode
|
||||
- Script-path: Uses `SignSchnorr()` for tapscript validation
|
||||
- Taproot internal key storage: `m_taproot_internal_keys` map
|
||||
- `GetTaprootInternalKey()`: Lookup internal key from output key
|
||||
|
||||
**RPC changes**:
|
||||
- `getnewaddress` supports "bech32m" address type
|
||||
- `createmultisig` extended for bech32m (with taproot limitations)
|
||||
- `getaddressinfo` reports address type correctly for taproot
|
||||
|
||||
**Statistics**:
|
||||
- `outputtype.cpp`: +35/-1 lines
|
||||
- `outputtype.h`: +3/-1 lines
|
||||
- `descriptor.cpp`: +72/-2 lines
|
||||
- `sign.cpp`: +90/-27 lines
|
||||
- `signingprovider.cpp`: +17 lines
|
||||
- `scriptpubkeyman.cpp`: +36 lines
|
||||
- `rpcwallet.cpp`: +12/-3 lines
|
||||
|
||||
### Policy Layer
|
||||
|
||||
**Files**: `src/policy/policy.cpp`, `src/policy/policy.h`, `src/validation.cpp`
|
||||
|
||||
**Script verification flags**:
|
||||
- `SCRIPT_VERIFY_TAPROOT` (bit 17): Enable taproot/tapscript consensus
|
||||
- `SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION` (bit 18): Reject unknown taproot versions
|
||||
- `SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS` (bit 19): Reject OP_SUCCESS opcodes
|
||||
- `SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE` (bit 20): Reject unknown pubkey types
|
||||
|
||||
**Standardness limits**:
|
||||
- `MAX_STANDARD_TAPSCRIPT_STACK_ITEMS` = 100
|
||||
- `MAX_STANDARD_TAPSCRIPT_STACK_ITEM_SIZE` = 80 bytes
|
||||
- `MAX_STANDARD_TAPSCRIPT_SCRIPT_SIZE` = 3600 bytes
|
||||
- `TAPROOT_CONTROL_BASE_SIZE` = 33 bytes (control block minimum)
|
||||
- `TAPROOT_CONTROL_NODE_SIZE` = 32 bytes (each merkle node)
|
||||
- `TAPROOT_CONTROL_MAX_SIZE` = 4129 bytes (max control block)
|
||||
|
||||
**Statistics**:
|
||||
- `policy/policy.cpp`: +46/-1 lines
|
||||
- `policy/policy.h`: +12/-1 lines
|
||||
- `validation.cpp`: +10 lines
|
||||
|
||||
## Consensus Rules
|
||||
|
||||
### Deployment Activation
|
||||
|
||||
Taproot activates via BIP9 signaling:
|
||||
1. Miners signal readiness by setting bit 2 in block version
|
||||
2. When 1815 of 2016 blocks in a retarget period signal (90% threshold), deployment is LOCKED_IN
|
||||
3. After LOCKED_IN period ends, deployment becomes ACTIVE for all subsequent blocks
|
||||
4. Timeout on March 1, 2027 if insufficient signaling
|
||||
|
||||
### Script Verification Flags
|
||||
|
||||
**Standard transaction validation** (mempool/relay):
|
||||
```
|
||||
SCRIPT_VERIFY_TAPROOT |
|
||||
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION |
|
||||
SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS |
|
||||
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE
|
||||
```
|
||||
|
||||
**Consensus validation** (blocks):
|
||||
```
|
||||
SCRIPT_VERIFY_TAPROOT
|
||||
```
|
||||
|
||||
### Taproot Spending Rules
|
||||
|
||||
**Key-path spending** (witness v1 with single witness element):
|
||||
1. Witness must contain exactly 1 element (signature, or 65 bytes after annex removal)
|
||||
2. Signature must be 64 or 65 bytes (65 = 64-byte sig + SIGHASH byte)
|
||||
3. Extract internal key from output key using BIP341 taproot tweak
|
||||
4. Verify Schnorr signature against tweaked pubkey
|
||||
5. Empty scriptCode per BIP341
|
||||
|
||||
**Script-path spending** (witness v1 with multiple elements):
|
||||
1. Last witness element is control block (33-4129 bytes, 33 + 32n)
|
||||
2. Second-to-last element is tapscript (max 3600 bytes for standard)
|
||||
3. Control block format: `[leaf_version || internal_key_parity || internal_key[1:] || merkle_proof]`
|
||||
4. Verify control block reconstructs output key
|
||||
5. Execute tapscript with TAPSCRIPT signature version
|
||||
6. Track validation weight (max 1650 units)
|
||||
|
||||
**Annex handling**:
|
||||
- If first witness stack element starts with 0x50, it's the annex
|
||||
- Annex is removed before script validation
|
||||
- Annex hash is committed in signature hash
|
||||
|
||||
### Validation Weight
|
||||
|
||||
Tapscript execution tracks validation weight to prevent DoS:
|
||||
- Each signature operation: 50 weight units (if signature validates)
|
||||
- Initial offset: 50 weight units
|
||||
- Maximum: 1650 units per script-path spend
|
||||
- Formula: `weight = 50 + 50 * num_successful_checksigs`
|
||||
- Limit: `num_successful_checksigs <= 32` (1650 / 50 - 1)
|
||||
|
||||
### Standardness Policy
|
||||
|
||||
**Tapscript stack limits**:
|
||||
- Max stack items: 100
|
||||
- Max stack item size: 80 bytes
|
||||
- Max script size: 3600 bytes
|
||||
|
||||
**Control block validation**:
|
||||
- Minimum size: 33 bytes (version + internal key)
|
||||
- Maximum size: 4129 bytes (33 + 32 * 128 merkle nodes)
|
||||
- Size must be 33 + 32n for integer n
|
||||
|
||||
**Leaf version**:
|
||||
- Standard: 0xc0 (tapscript)
|
||||
- Non-standard: 0xc1-0xfe (reserved for future soft forks)
|
||||
- Invalid: 0x00-0xbf, 0xff
|
||||
|
||||
## Key Files Modified
|
||||
|
||||
### Summary by Layer
|
||||
|
||||
| Layer | Files Modified | Lines Added | Lines Removed |
|
||||
|-------|----------------|-------------|---------------|
|
||||
| Crypto | 5 | 212 | 6 |
|
||||
| Encoding | 3 | 104 | 58 |
|
||||
| Script | 7 | 604 | 38 |
|
||||
| Consensus | 3 | 16 | 1 |
|
||||
| Wallet | 9 | 265 | 37 |
|
||||
| Policy | 3 | 68 | 2 |
|
||||
| Testing | Multiple | Extensive | - |
|
||||
| **Total** | **30+** | **~1269** | **~142** |
|
||||
|
||||
### Critical Implementation Files
|
||||
|
||||
**Cryptographic primitives**:
|
||||
- `src/key.cpp`, `src/key.h`: Schnorr signing with BIP340/BIP341
|
||||
- `src/pubkey.cpp`, `src/pubkey.h`: XOnlyPubKey, signature verification, taproot tweaking
|
||||
- `src/secp256k1/`: Upgraded to Bitcoin Core v24.2 with extrakeys and schnorrsig modules
|
||||
|
||||
**Consensus rules**:
|
||||
- `src/script/interpreter.cpp`: Taproot/tapscript validation logic (469 lines added)
|
||||
- `src/script/script_error.h`: New error codes for taproot
|
||||
- `src/chainparams.cpp`: BIP9 deployment parameters
|
||||
|
||||
**Address encoding**:
|
||||
- `src/bech32.cpp`: Bech32m implementation
|
||||
- `src/key_io.cpp`: Address encoding/decoding with automatic format selection
|
||||
|
||||
**Wallet integration**:
|
||||
- `src/outputtype.cpp`: BECH32M output type
|
||||
- `src/script/sign.cpp`: Schnorr signature generation for transactions
|
||||
- `src/wallet/scriptpubkeyman.cpp`: Internal key tracking for taproot
|
||||
|
||||
**Testing**:
|
||||
- `test/functional/feature_taproot.py`: End-to-end taproot functional test
|
||||
- `src/test/key_tests.cpp`: Schnorr signature unit tests
|
||||
- `src/test/data/`: Bech32m test vectors aligned to Palladium
|
||||
|
||||
## Testing
|
||||
|
||||
### Functional Tests
|
||||
|
||||
**Feature test**: `test/functional/feature_taproot.py`
|
||||
|
||||
Test coverage:
|
||||
1. Wallet creation with default bech32m support
|
||||
2. Taproot address generation: `getnewaddress("", "bech32m")`
|
||||
3. Funding test: Send to P2TR address
|
||||
4. Balance verification
|
||||
5. Spending test: Send from P2TR address
|
||||
6. Transaction confirmation
|
||||
7. End-to-end P2TR lifecycle validation
|
||||
|
||||
**Test framework**:
|
||||
- Python segwit_addr module updated for Bech32m
|
||||
- Address validation for Palladium HRP ("plm")
|
||||
- Consensus rule alignment to Palladium parameters
|
||||
|
||||
### Unit Tests
|
||||
|
||||
**Schnorr signatures**: `src/test/key_tests.cpp`
|
||||
|
||||
Test coverage:
|
||||
- XOnlyPubKey construction and validation
|
||||
- Schnorr signature round-trip (sign + verify)
|
||||
- Signature size validation (64 bytes)
|
||||
- XOnlyPubKey invariants (negation property)
|
||||
- ECDSA interoperability (same key, both signatures valid)
|
||||
- BIP340 test vectors
|
||||
|
||||
**Bech32m encoding**: `src/test/bech32_tests.cpp`
|
||||
|
||||
Test coverage:
|
||||
- Bech32m encoding/decoding
|
||||
- Checksum validation
|
||||
- Witness version detection
|
||||
- Error detection (insertions, deletions, substitutions)
|
||||
- Palladium-specific test vectors
|
||||
|
||||
### Integration Tests
|
||||
|
||||
**RPC interface**:
|
||||
- `getnewaddress` with "bech32m" type
|
||||
- `getaddressinfo` for taproot addresses
|
||||
- `sendtoaddress` to/from taproot outputs
|
||||
- `createmultisig` taproot limitations
|
||||
- `getblockchaininfo` taproot deployment status
|
||||
|
||||
**Wallet operations**:
|
||||
- Create taproot receive address
|
||||
- Send to taproot address
|
||||
- Spend from taproot address (key-path)
|
||||
- Fee estimation for taproot transactions
|
||||
- UTXO selection with taproot inputs
|
||||
|
||||
## References
|
||||
|
||||
### BIP Specifications
|
||||
|
||||
- **BIP340**: Schnorr Signatures for secp256k1
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
|
||||
|
||||
- **BIP341**: Taproot: SegWit version 1 spending rules
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki
|
||||
|
||||
- **BIP342**: Validation of Taproot Scripts
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki
|
||||
|
||||
- **BIP350**: Bech32m format for v1+ witness addresses
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
|
||||
|
||||
### Additional Resources
|
||||
|
||||
- **Bitcoin Core v24.2 release**: Source for Taproot backport
|
||||
https://github.com/bitcoin/bitcoin/releases/tag/v24.2
|
||||
|
||||
- **secp256k1 library**: Cryptographic primitives
|
||||
https://github.com/bitcoin-core/secp256k1
|
||||
|
||||
- **Taproot Workshop**: Technical deep-dive (Bitcoin-focused but applicable)
|
||||
https://github.com/bitcoinops/taproot-workshop
|
||||
|
||||
### Palladium-Specific Documentation
|
||||
|
||||
- **User guide**: `doc/taproot-guide.md`
|
||||
- **Release notes**: `doc/release-notes.md` (v2.0.0)
|
||||
- **BIP implementation list**: `doc/bips.md`
|
||||
|
||||
---
|
||||
|
||||
**Version**: Palladium Core 2.0.0
|
||||
**Last Updated**: February 2026
|
||||
**Status**: Production-ready, mainnet deployment March 2026
|
||||
@@ -42,3 +42,7 @@ BIPs that are implemented by Palladium Core (up-to-date up to **v0.19.0**):
|
||||
* [`BIP 173`](https://github.com/palladium/bips/blob/master/bip-0173.mediawiki): Bech32 addresses for native Segregated Witness outputs are supported as of **v0.16.0** ([PR 11167](https://github.com/palladium/palladium/pull/11167)). Bech32 addresses are generated by default as of **v0.20.0** ([PR 16884](https://github.com/palladium/palladium/pull/16884)).
|
||||
* [`BIP 174`](https://github.com/palladium/bips/blob/master/bip-0174.mediawiki): RPCs to operate on Partially Signed Palladium Transactions (PSBT) are present as of **v0.17.0** ([PR 13557](https://github.com/palladium/palladium/pull/13557)).
|
||||
* [`BIP 176`](https://github.com/palladium/bips/blob/master/bip-0176.mediawiki): Bits Denomination [QT only] is supported as of **v0.16.0** ([PR 12035](https://github.com/palladium/palladium/pull/12035)).
|
||||
* [`BIP 340`](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki): Schnorr Signatures for secp256k1 have been implemented as of **v2.0.0**. XOnlyPubKey class and SignSchnorr/VerifySchnorr methods integrated with secp256k1 extrakeys and schnorrsig modules from Bitcoin Core v24.2.
|
||||
* [`BIP 341`](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki): Taproot: SegWit version 1 spending rules have been implemented as of **v2.0.0**. Deployment via BIP9 on mainnet (bit 2, start: March 1 2026, timeout: March 1 2027), always active on regtest for testing.
|
||||
* [`BIP 342`](https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki): Tapscript: SegWit version 1 script validation rules have been implemented as of **v2.0.0**, including OP_CHECKSIGADD and validation weight constraints.
|
||||
* [`BIP 350`](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki): Bech32m format for v1+ witness addresses has been implemented as of **v2.0.0**. Taproot addresses use bech32m encoding with HRP "plm" and witness version 1.
|
||||
|
||||
@@ -1,148 +0,0 @@
|
||||
1.3.0 Release Notes
|
||||
====================
|
||||
|
||||
Palladium Core version 1.3.0 is now available from:
|
||||
|
||||
<https://github.com/NotRin7/Palladium/releases/tag/v1.3.0>
|
||||
|
||||
This minor 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/palladium-coin/palladiumcore/issues>
|
||||
|
||||
To receive security and update notifications, please subscribe to:
|
||||
|
||||
<https://palladium-coin.com/>
|
||||
|
||||
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/Palladium-Qt` (on Mac)
|
||||
or `palladiumd`/`palladium-qt` (on Linux).
|
||||
|
||||
Upgrading directly from a version of Palladium 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 Palladium Core are generally supported.
|
||||
|
||||
Compatibility
|
||||
==============
|
||||
|
||||
Palladium Core is supported and extensively tested on operating systems
|
||||
using the Linux kernel, macOS 10.12+, and Windows 7 and newer. Palladium
|
||||
Core should also work on most other Unix-like systems but is not as
|
||||
frequently tested on them. It is not recommended to use Palladium Core on
|
||||
unsupported systems.
|
||||
|
||||
From Palladium Core 0.20.0 onwards, macOS versions earlier than 10.12 are no
|
||||
longer supported. Additionally, Palladium Core does not yet change appearance
|
||||
when macOS "dark mode" is activated.
|
||||
|
||||
Known Bugs
|
||||
==========
|
||||
|
||||
The process for generating the source code release ("tarball") has changed in an
|
||||
effort to make it more complete, however, there are a few regressions in
|
||||
this release:
|
||||
|
||||
- The generated `configure` script is currently missing, and you will need to
|
||||
install autotools and run `./autogen.sh` before you can run
|
||||
`./configure`. This is the same as when checking out from git.
|
||||
|
||||
- Instead of running `make` simply, you should instead run
|
||||
`PALLADIUM_GENBUILD_NO_GIT=1 make`.
|
||||
|
||||
Notable changes
|
||||
===============
|
||||
|
||||
Changes regarding misbehaving peers
|
||||
-----------------------------------
|
||||
|
||||
Peers that misbehave (e.g. send us invalid blocks) are now referred to as
|
||||
discouraged nodes in log output, as they're not (and weren't) strictly banned:
|
||||
incoming connections are still allowed from them, but they're preferred for
|
||||
eviction.
|
||||
|
||||
Furthermore, a few additional changes are introduced to how discouraged
|
||||
addresses are treated:
|
||||
|
||||
- Discouraging an address does not time out automatically after 24 hours
|
||||
(or the `-bantime` setting). Depending on traffic from other peers,
|
||||
discouragement may time out at an indeterminate time.
|
||||
|
||||
- Discouragement is not persisted over restarts.
|
||||
|
||||
- There is no method to list discouraged addresses. They are not returned by
|
||||
the `listbanned` RPC. That RPC also no longer reports the `ban_reason`
|
||||
field, as `"manually added"` is the only remaining option.
|
||||
|
||||
- Discouragement cannot be removed with the `setban remove` RPC command.
|
||||
If you need to remove a discouragement, you can remove all discouragements by
|
||||
stop-starting your node.
|
||||
|
||||
Notification changes
|
||||
--------------------
|
||||
|
||||
`-walletnotify` notifications are now sent for wallet transactions that are
|
||||
removed from the mempool because they conflict with a new block. These
|
||||
notifications were sent previously before the v0.19 release, but had been
|
||||
broken since that release (bug
|
||||
[#18325](https://github.com/palladium/palladium/issues/18325)).
|
||||
|
||||
0.20.1 change log
|
||||
=================
|
||||
|
||||
### Mining
|
||||
- #19019 Fix GBT: Restore "!segwit" and "csv" to "rules" key (luke-jr)
|
||||
|
||||
### P2P protocol and network code
|
||||
- #19219 Replace automatic bans with discouragement filter (sipa)
|
||||
|
||||
### Wallet
|
||||
- #19300 Handle concurrent wallet loading (promag)
|
||||
- #18982 Minimal fix to restore conflicted transaction notifications (ryanofsky)
|
||||
|
||||
### RPC and other APIs
|
||||
- #19524 Increment input value sum only once per UTXO in decodepsbt (fanquake)
|
||||
- #19517 psbt: Increment input value sum only once per UTXO in decodepsbt (achow101)
|
||||
|
||||
### GUI
|
||||
- #19097 Add missing QPainterPath include (achow101)
|
||||
- #19059 update Qt base translations for macOS release (fanquake)
|
||||
|
||||
### Build system
|
||||
- #19152 improve build OS configure output (skmcontrib)
|
||||
- #19536 qt, build: Fix QFileDialog for static builds (hebasto)
|
||||
|
||||
### Tests and QA
|
||||
- #19444 Remove cached directories and associated script blocks from appveyor config (sipsorcery)
|
||||
- #18640 appveyor: Remove clcache (MarcoFalke)
|
||||
|
||||
### Miscellaneous
|
||||
- #19194 util: Don't reference errno when pthread fails (miztake)
|
||||
- #18700 Fix locking on WSL using flock instead of fcntl (meshcollider)
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Thanks to everyone who directly contributed to this release:
|
||||
|
||||
- Aaron Clauson
|
||||
- Andrew Chow
|
||||
- fanquake
|
||||
- Hennadii Stepanov
|
||||
- João Barbosa
|
||||
- Luke Dashjr
|
||||
- MarcoFalke
|
||||
- MIZUTA Takeshi
|
||||
- Pieter Wuille
|
||||
- Russell Yanofsky
|
||||
- sachinkm77
|
||||
- Samuel Dobson
|
||||
- Wladimir J. van der Laan
|
||||
|
||||
As well as to everyone that helped with translations on
|
||||
[Transifex](https://www.transifex.com/palladium/palladium/).
|
||||
434
doc/release-notes/release-notes-2.0.0.md
Normal file
434
doc/release-notes/release-notes-2.0.0.md
Normal file
@@ -0,0 +1,434 @@
|
||||
2.0.0 Release Notes
|
||||
====================
|
||||
|
||||
Palladium Core version 2.0.0 is now available from:
|
||||
|
||||
<https://github.com/palladium-coin/palladiumcore/releases/tag/v2.0.0>
|
||||
|
||||
This is a major release introducing Taproot support (BIP340/341/342/350), representing
|
||||
the most significant protocol upgrade since Segregated Witness.
|
||||
|
||||
Please report bugs using the issue tracker at GitHub:
|
||||
|
||||
<https://github.com/palladium-coin/palladiumcore/issues>
|
||||
|
||||
To receive security and update notifications, please visit:
|
||||
|
||||
<https://palladiumblockchain.net/>
|
||||
|
||||
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/Palladium-Qt` (on Mac)
|
||||
or `palladiumd`/`palladium-qt` (on Linux).
|
||||
|
||||
Upgrading directly from a version of Palladium 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 Palladium Core are generally supported.
|
||||
|
||||
**Important**: First startup after upgrading may take several minutes as the wallet
|
||||
rescans for Taproot-related transactions (if applicable).
|
||||
|
||||
Compatibility
|
||||
==============
|
||||
|
||||
Palladium Core is supported and extensively tested on operating systems
|
||||
using the Linux kernel, macOS 10.12+, and Windows 7 and newer. Palladium
|
||||
Core should also work on most other Unix-like systems but is not as
|
||||
frequently tested on them. It is not recommended to use Palladium Core on
|
||||
unsupported systems.
|
||||
|
||||
From Palladium Core 0.20.0 onwards, macOS versions earlier than 10.12 are no
|
||||
longer supported. Additionally, Palladium Core does not yet change appearance
|
||||
when macOS "dark mode" is activated.
|
||||
|
||||
Notable Changes
|
||||
===============
|
||||
|
||||
Taproot Support (BIP340/341/342/350)
|
||||
------------------------------------
|
||||
|
||||
Palladium Core 2.0.0 introduces full Taproot support, implementing Bitcoin Improvement
|
||||
Proposals 340, 341, 342, and 350. This represents the most significant protocol upgrade
|
||||
since Segregated Witness and brings substantial improvements to privacy, efficiency, and
|
||||
smart contract capabilities.
|
||||
|
||||
### What is Taproot?
|
||||
|
||||
Taproot improves privacy, efficiency, and smart contract flexibility on the Palladium
|
||||
blockchain through:
|
||||
|
||||
- **Schnorr Signatures (BIP340)**: More efficient signature scheme replacing ECDSA for
|
||||
witness v1 outputs. Schnorr signatures are 64 bytes (vs 71-72 for ECDSA) and enable
|
||||
future signature aggregation improvements.
|
||||
|
||||
- **Taproot Spending Rules (BIP341)**: New output type (witness version 1) enabling more
|
||||
private and flexible scripts. Taproot outputs can be spent via key-path (single signature,
|
||||
most efficient) or script-path (reveal only the executed script from a Merkle tree).
|
||||
|
||||
- **Tapscript (BIP342)**: Updated script validation rules with new opcodes including
|
||||
OP_CHECKSIGADD for efficient threshold signatures. Tapscript introduces validation weight
|
||||
limits and reserves OP_SUCCESS opcodes for future soft-fork upgrades.
|
||||
|
||||
- **Bech32m Addresses (BIP350)**: New address format for Taproot (starting with `plm1p...`).
|
||||
Bech32m uses a different checksum constant (0x2bc830a3) specifically designed for witness
|
||||
version 1 and higher addresses.
|
||||
|
||||
### Deployment Timeline
|
||||
|
||||
Taproot will activate via BIP9 miner signaling:
|
||||
|
||||
- **Mainnet**: BIP9 soft fork activation using bit 2
|
||||
- Signaling starts: March 1, 2026 00:00:00 UTC (block time 1772323200)
|
||||
- Signaling timeout: March 1, 2027 00:00:00 UTC (block time 1803859200)
|
||||
- Activation threshold: 1815 of 2016 blocks (90%) must signal readiness
|
||||
- Status: Once locked in, Taproot activates in the next period
|
||||
|
||||
- **Testnet**: Same parameters as mainnet for realistic testing
|
||||
|
||||
- **Regtest**: Always active for immediate developer testing
|
||||
|
||||
**Checking activation status**:
|
||||
```bash
|
||||
palladium-cli getblockchaininfo
|
||||
```
|
||||
|
||||
Look for the "softforks" section and find the "taproot" deployment. Possible states:
|
||||
- `defined`: Deployment defined but signaling hasn't started
|
||||
- `started`: Signaling period active, miners can signal readiness
|
||||
- `locked_in`: Activation threshold reached, grace period before activation
|
||||
- `active`: Taproot consensus rules enforced
|
||||
- `failed`: Timeout reached without sufficient signaling
|
||||
|
||||
### Wallet Changes
|
||||
|
||||
New "bech32m" address type is now available for Taproot outputs:
|
||||
|
||||
**GUI (palladium-qt)**:
|
||||
- Receive tab now has a dropdown to select address type:
|
||||
- "Legacy" - Traditional P2PKH addresses (1...)
|
||||
- "P2SH-SegWit" - SegWit wrapped in P2SH (3...)
|
||||
- "Bech32" - Native SegWit v0 addresses (plm1q...)
|
||||
- "Bech32m" - Taproot addresses (plm1p...) ← NEW
|
||||
|
||||
- Default address type remains "bech32" for backward compatibility
|
||||
- Users can switch to "bech32m" for enhanced privacy and efficiency
|
||||
|
||||
**RPC Interface**:
|
||||
- `getnewaddress "label" "bech32m"` generates Taproot addresses
|
||||
- `getaddressinfo` reports witness version 1 for Taproot addresses
|
||||
- All existing RPCs work seamlessly with Taproot addresses
|
||||
|
||||
**Example**:
|
||||
```bash
|
||||
# Generate a Taproot address
|
||||
$ palladium-cli getnewaddress "savings" "bech32m"
|
||||
plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr
|
||||
|
||||
# Get information about the address
|
||||
$ palladium-cli getaddressinfo "plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr"
|
||||
{
|
||||
"address": "plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr",
|
||||
"iswitness": true,
|
||||
"witness_version": 1,
|
||||
"witness_program": "...",
|
||||
...
|
||||
}
|
||||
|
||||
# Send to a Taproot address (works like any other address)
|
||||
$ palladium-cli sendtoaddress "plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr" 1.5
|
||||
```
|
||||
|
||||
**Configuration**:
|
||||
To make bech32m the default address type, add to `palladium.conf`:
|
||||
```conf
|
||||
addresstype=bech32m
|
||||
changetype=bech32m
|
||||
```
|
||||
|
||||
Both receiving to and spending from Taproot addresses are fully supported once the
|
||||
soft fork activates on mainnet.
|
||||
|
||||
### Transaction Behavior
|
||||
|
||||
**Sending**:
|
||||
- Taproot UTXOs are automatically included in coin selection
|
||||
- Spending from Taproot uses key-path by default (most efficient)
|
||||
- Schnorr signatures are generated automatically for Taproot inputs
|
||||
- Slightly lower transaction fees due to smaller signature size
|
||||
|
||||
**Receiving**:
|
||||
- Any wallet can send to your Taproot address (if they support bech32m)
|
||||
- Taproot outputs are tracked and displayed in transaction history
|
||||
- Balance calculations include Taproot UTXOs
|
||||
|
||||
**Privacy**:
|
||||
- Key-path spends look identical to single-signature payments
|
||||
- Complex scripts remain hidden unless script-path is used
|
||||
- No way to distinguish multisig from single-sig on-chain (key-path)
|
||||
|
||||
### Technical Implementation
|
||||
|
||||
This release backports Taproot implementation from Bitcoin Core v24.2 with appropriate
|
||||
adaptations for Palladium's chain parameters and consensus rules.
|
||||
|
||||
**Key components**:
|
||||
|
||||
1. **Cryptographic Layer**:
|
||||
- secp256k1 library upgraded to Bitcoin Core v24.2
|
||||
- Enabled `extrakeys` module for x-only public keys
|
||||
- Enabled `schnorrsig` module for BIP340 Schnorr signatures
|
||||
- XOnlyPubKey class for 32-byte public key representation
|
||||
|
||||
2. **Consensus Layer**:
|
||||
- Full taproot/tapscript validation in script interpreter (469 lines added)
|
||||
- Taproot signature hash computation with tagged SHA256
|
||||
- Control block parsing and Merkle proof verification
|
||||
- Validation weight tracking for tapscript execution
|
||||
|
||||
3. **Encoding Layer**:
|
||||
- Bech32m encoding/decoding with dual-constant checksum
|
||||
- Automatic format selection based on witness version
|
||||
- Palladium-specific HRP: "plm" for mainnet
|
||||
|
||||
4. **Wallet Layer**:
|
||||
- BECH32M output type for address generation
|
||||
- Schnorr signature generation for Taproot inputs
|
||||
- Internal key tracking for Taproot outputs
|
||||
- Output descriptors extended for Taproot
|
||||
|
||||
5. **Policy Layer**:
|
||||
- Script verification flags: SCRIPT_VERIFY_TAPROOT and related
|
||||
- Standardness limits for tapscript (stack size, script size, validation weight)
|
||||
- Control block size validation (33-4129 bytes)
|
||||
|
||||
**Testing**:
|
||||
- Functional test: `test/functional/feature_taproot.py` (end-to-end P2TR lifecycle)
|
||||
- Unit tests: Schnorr signature generation/verification in `test/key_tests.cpp`
|
||||
- Bech32m encoding tests with Palladium-specific test vectors
|
||||
- Integration tests for RPC interface and wallet operations
|
||||
|
||||
For detailed technical information, see [TAPROOT.md](../TAPROOT.md).
|
||||
|
||||
For user-friendly guide, see [doc/taproot-guide.md](../taproot-guide.md).
|
||||
|
||||
### Upgrading to Taproot
|
||||
|
||||
**Do I need to upgrade my addresses?**
|
||||
No. Using Taproot is completely optional. All existing address types (legacy, P2SH, bech32)
|
||||
continue to work indefinitely.
|
||||
|
||||
**When should I use Taproot?**
|
||||
- For enhanced privacy (key-path spending hides script complexity)
|
||||
- For slightly lower fees (Schnorr signatures are smaller)
|
||||
- For future-proof wallet infrastructure
|
||||
|
||||
**Compatibility concerns?**
|
||||
- Ensure recipient wallets support bech32m before sending to Taproot addresses
|
||||
- Most modern wallets will add support after mainnet activation
|
||||
- Provide a bech32 fallback address for maximum compatibility
|
||||
|
||||
**Migration path**:
|
||||
1. Upgrade to Palladium Core 2.0.0
|
||||
2. Wait for Taproot activation on mainnet (March 2026 expected)
|
||||
3. Start generating bech32m addresses for new payments
|
||||
4. Existing funds in old addresses can be spent to Taproot addresses over time
|
||||
|
||||
Build System Changes
|
||||
--------------------
|
||||
|
||||
### secp256k1 Library Update
|
||||
|
||||
The secp256k1 library has been upgraded to Bitcoin Core v24.2 tag, enabling:
|
||||
- BIP340 Schnorr signature support
|
||||
- X-only public key operations
|
||||
- Optimized signature verification
|
||||
- Precomputed tables for ecmult operations
|
||||
|
||||
This upgrade is essential for Taproot functionality and brings performance improvements
|
||||
to all signature operations.
|
||||
|
||||
GUI Improvements
|
||||
----------------
|
||||
|
||||
### Address Type Selection
|
||||
|
||||
The Receive tab now features a dropdown menu for address type selection:
|
||||
- Visual indication of address type (Legacy / P2SH-SegWit / Bech32 / Bech32m)
|
||||
- Tooltip explanations for each address type
|
||||
- Remembers last selected type for user convenience
|
||||
|
||||
This makes it easy for users to generate Taproot addresses without using the command line.
|
||||
|
||||
RPC Changes
|
||||
-----------
|
||||
|
||||
### New Features
|
||||
|
||||
- `getnewaddress` now accepts "bech32m" as address type parameter
|
||||
- `getaddressinfo` correctly identifies Taproot addresses with `witness_version: 1`
|
||||
- `createmultisig` supports "bech32m" type (with limitations)
|
||||
|
||||
### Modified Behavior
|
||||
|
||||
- `getblockchaininfo` includes "taproot" deployment status in "softforks" section
|
||||
- `validateaddress` validates bech32m address format
|
||||
- `decodescript` recognizes witness v1 outputs
|
||||
|
||||
### Deprecated Features
|
||||
|
||||
None in this release.
|
||||
|
||||
For full RPC documentation, run `palladium-cli help` or see [JSON-RPC-interface.md](JSON-RPC-interface.md).
|
||||
|
||||
Testing Improvements
|
||||
--------------------
|
||||
|
||||
### Functional Tests
|
||||
|
||||
New functional test `feature_taproot.py` validates:
|
||||
- Taproot address generation
|
||||
- Sending to Taproot addresses
|
||||
- Spending from Taproot addresses (key-path)
|
||||
- Transaction confirmation and UTXO tracking
|
||||
|
||||
### Test Framework Updates
|
||||
|
||||
- Python test framework updated with bech32m encoding support
|
||||
- Segwit_addr module aligned to Palladium chain parameters
|
||||
- Test vectors adapted from Bitcoin to Palladium HRP and consensus rules
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
### New Documentation
|
||||
|
||||
- `doc/TAPROOT.md`: Comprehensive technical specification
|
||||
- `doc/taproot-guide.md`: User-friendly guide for wallet users
|
||||
- `doc/release-notes/release-notes-2.0.0.md`: Detailed release notes for v2.0.0
|
||||
- `CHANGELOG.md`: Changelog with history of all releases
|
||||
|
||||
### Updated Documentation
|
||||
|
||||
- `doc/bips.md`: Updated with BIP340/341/342/350 implementation details
|
||||
- `README.md`: References to Taproot support
|
||||
|
||||
Known Issues
|
||||
============
|
||||
|
||||
### Taproot Before Activation
|
||||
|
||||
- Taproot addresses can be generated before mainnet activation
|
||||
- Funds sent to Taproot addresses before activation will be unspendable until activation
|
||||
- **Recommendation**: Wait for activation on mainnet before using Taproot addresses for real funds
|
||||
|
||||
### Wallet Compatibility
|
||||
|
||||
- Very old wallet software may not recognize bech32m addresses
|
||||
- Some exchanges may not support deposits to bech32m addresses initially
|
||||
- **Recommendation**: Verify recipient support before sending to Taproot addresses
|
||||
|
||||
### Script-Path Spending
|
||||
|
||||
- Advanced script-path spending features require manual descriptor/PSBT construction
|
||||
- GUI does not yet support creating complex taproot scripts
|
||||
- **Workaround**: Use RPC/CLI for advanced Taproot features or wait for future GUI improvements
|
||||
|
||||
2.0.0 Change Log
|
||||
================
|
||||
|
||||
### Consensus
|
||||
|
||||
- Add BIP340 Schnorr signature validation
|
||||
- Add BIP341 Taproot spending rules
|
||||
- Add BIP342 Tapscript validation
|
||||
- Implement BIP9 deployment for Taproot (bit 2)
|
||||
- Add script verification flags for Taproot
|
||||
|
||||
### Crypto
|
||||
|
||||
- Upgrade secp256k1 to Bitcoin Core v24.2
|
||||
- Add XOnlyPubKey class for 32-byte public keys
|
||||
- Add CKey::SignSchnorr() for BIP340 signatures
|
||||
- Add CKey::SignSchnorrTaproot() for BIP341 key-path spending
|
||||
- Add XOnlyPubKey::VerifySchnorr() for signature verification
|
||||
|
||||
### Encoding
|
||||
|
||||
- Implement BIP350 bech32m format
|
||||
- Add dual-mode bech32/bech32m encoding
|
||||
- Update key_io for automatic address format selection
|
||||
|
||||
### Script
|
||||
|
||||
- Add SigVersion::TAPROOT and SigVersion::TAPSCRIPT
|
||||
- Implement Taproot signature hash computation
|
||||
- Add control block validation
|
||||
- Add validation weight tracking for tapscript
|
||||
- Add OP_CHECKSIGADD support
|
||||
- Add new script error codes for Taproot
|
||||
|
||||
### Wallet
|
||||
|
||||
- Add OutputType::BECH32M for Taproot addresses
|
||||
- Add bech32m address generation in GUI and RPC
|
||||
- Add Schnorr signature creation for Taproot spending
|
||||
- Add internal key tracking for Taproot outputs
|
||||
- Update output descriptors for Taproot
|
||||
|
||||
### RPC
|
||||
|
||||
- Add "bech32m" address type to getnewaddress
|
||||
- Add Taproot deployment status to getblockchaininfo
|
||||
- Update getaddressinfo for witness v1 addresses
|
||||
- Extend createmultisig with bech32m support
|
||||
|
||||
### GUI
|
||||
|
||||
- Add address type dropdown to Receive tab
|
||||
- Add "bech32m" option for Taproot addresses
|
||||
- Update tooltips and UI labels for clarity
|
||||
|
||||
### Tests
|
||||
|
||||
- Add feature_taproot.py functional test
|
||||
- Add Schnorr signature unit tests
|
||||
- Add bech32m encoding tests
|
||||
- Adapt test framework to Palladium parameters
|
||||
|
||||
### Build
|
||||
|
||||
- Update secp256k1 to Bitcoin Core v24.2
|
||||
- Enable extrakeys and schnorrsig modules
|
||||
- Update build scripts for new dependencies
|
||||
|
||||
### Documentation
|
||||
|
||||
- Add doc/TAPROOT.md technical specification
|
||||
- Add doc/taproot-guide.md user guide
|
||||
- Update doc/bips.md with BIP340/341/342/350
|
||||
- Add doc/release-notes/release-notes-2.0.0.md (this file)
|
||||
- Add CHANGELOG.md with complete release history
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Thanks to the Bitcoin Core developers for the original Taproot implementation in
|
||||
Bitcoin Core v24.2, which formed the basis for this backport to Palladium Core.
|
||||
|
||||
Special thanks to everyone who directly contributed to this release:
|
||||
|
||||
- davide3011 (Taproot backport and implementation)
|
||||
|
||||
As well as to the broader Bitcoin development community whose work on Taproot
|
||||
made this upgrade possible.
|
||||
|
||||
And to everyone that helped with translations, testing, and community support.
|
||||
|
||||
---
|
||||
|
||||
For user guide, see [doc/taproot-guide.md](../taproot-guide.md).
|
||||
For technical details, see [TAPROOT.md](../TAPROOT.md).
|
||||
For BIP specifications, see [doc/bips.md](../bips.md).
|
||||
381
doc/taproot-guide.md
Normal file
381
doc/taproot-guide.md
Normal file
@@ -0,0 +1,381 @@
|
||||
# Taproot User Guide
|
||||
|
||||
## What is Taproot?
|
||||
|
||||
Taproot is a major upgrade to the Palladium protocol that makes transactions more private, efficient, and flexible. Introduced in Palladium Core 2.0.0, Taproot brings several important improvements:
|
||||
|
||||
### Key Benefits
|
||||
|
||||
**Enhanced Privacy**
|
||||
- Complex smart contracts look identical to simple payments on the blockchain
|
||||
- Only the spending conditions actually used are revealed
|
||||
- Multi-signature setups can appear as single-signature transactions
|
||||
|
||||
**Improved Efficiency**
|
||||
- Smaller transaction sizes using Schnorr signatures
|
||||
- Lower fees for complex transactions
|
||||
- Batch signature verification speeds up validation
|
||||
|
||||
**Greater Flexibility**
|
||||
- More powerful smart contract capabilities
|
||||
- Support for complex spending conditions without revealing them upfront
|
||||
- Foundation for future protocol improvements
|
||||
|
||||
### How is Taproot Different from SegWit?
|
||||
|
||||
Taproot builds on Segregated Witness (SegWit) with these improvements:
|
||||
|
||||
| Feature | SegWit (v0) | Taproot (v1) |
|
||||
|---------|-------------|--------------|
|
||||
| **Address prefix** | plm1q... | plm1p... |
|
||||
| **Signature type** | ECDSA | Schnorr |
|
||||
| **Address format** | Bech32 | Bech32m |
|
||||
| **Privacy** | Script visible | Script hidden (unless used) |
|
||||
| **Multisig efficiency** | Linear cost | Constant cost (key-path) |
|
||||
|
||||
## Address Types in Palladium
|
||||
|
||||
Palladium supports four address types. You can use any of them, and they all work together:
|
||||
|
||||
### 1. Legacy (P2PKH)
|
||||
- **Starts with**: `1...`
|
||||
- **Example**: `1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa`
|
||||
- **Features**: Original address format, widely compatible
|
||||
- **Use case**: Maximum compatibility with older wallets
|
||||
|
||||
### 2. P2SH-SegWit
|
||||
- **Starts with**: `3...`
|
||||
- **Example**: `3J98t1WpEZ73CNmYviecrnyiWrnqRhWNLy`
|
||||
- **Features**: SegWit wrapped in P2SH for compatibility
|
||||
- **Use case**: SegWit benefits with broader compatibility
|
||||
|
||||
### 3. Native SegWit - Bech32 (witness v0)
|
||||
- **Starts with**: `plm1q...`
|
||||
- **Example**: `plm1qw508d6qejxtdg4y5r3zarvary0c5xw7kg3g4ty`
|
||||
- **Features**: Lower fees, error detection, all lowercase
|
||||
- **Use case**: Modern default for efficient transactions
|
||||
|
||||
### 4. Taproot - Bech32m (witness v1) ← NEW in v2.0.0
|
||||
- **Starts with**: `plm1p...`
|
||||
- **Example**: `plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr`
|
||||
- **Features**: Enhanced privacy, Schnorr signatures, flexible scripts
|
||||
- **Use case**: Maximum privacy and efficiency for new wallets
|
||||
|
||||
**Note**: All address types can send to and receive from each other. Taproot is completely optional.
|
||||
|
||||
## How to Use Taproot Addresses
|
||||
|
||||
### Using the GUI Wallet (palladium-qt)
|
||||
|
||||
#### Receiving to a Taproot Address
|
||||
|
||||
1. Open Palladium Core wallet
|
||||
2. Click on the **"Receive"** tab
|
||||
3. In the "Address type" dropdown, select **"bech32m"**
|
||||
4. (Optional) Enter a label for the address
|
||||
5. Click **"Create new receiving address"**
|
||||
6. You'll get an address starting with `plm1p...`
|
||||
7. Share this address to receive payments
|
||||
|
||||
**Screenshot placeholder**: [Receive tab showing bech32m dropdown selection]
|
||||
|
||||
#### Sending from a Taproot Address
|
||||
|
||||
Sending works exactly the same as with any other address type:
|
||||
|
||||
1. Click on the **"Send"** tab
|
||||
2. Enter the recipient's address (any type: legacy, P2SH, bech32, or bech32m)
|
||||
3. Enter the amount
|
||||
4. Click **"Send"**
|
||||
|
||||
The wallet automatically selects the best UTXOs (including Taproot ones) for your transaction.
|
||||
|
||||
### Using the CLI/RPC Interface
|
||||
|
||||
#### Generate a Taproot Address
|
||||
|
||||
```bash
|
||||
palladium-cli getnewaddress "my-taproot-label" "bech32m"
|
||||
```
|
||||
|
||||
**Example output**:
|
||||
```
|
||||
plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr
|
||||
```
|
||||
|
||||
#### Get Address Information
|
||||
|
||||
```bash
|
||||
palladium-cli getaddressinfo "plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr"
|
||||
```
|
||||
|
||||
**Example output**:
|
||||
```json
|
||||
{
|
||||
"address": "plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr",
|
||||
"scriptPubKey": "5120...",
|
||||
"ismine": true,
|
||||
"solvable": true,
|
||||
"desc": "wpkh(...)#...",
|
||||
"iswatchonly": false,
|
||||
"isscript": false,
|
||||
"iswitness": true,
|
||||
"witness_version": 1,
|
||||
"witness_program": "...",
|
||||
"pubkey": "...",
|
||||
"ischange": false,
|
||||
"timestamp": 1234567890,
|
||||
"labels": ["my-taproot-label"]
|
||||
}
|
||||
```
|
||||
|
||||
#### Send to a Taproot Address
|
||||
|
||||
```bash
|
||||
palladium-cli sendtoaddress "plm1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr" 1.5
|
||||
```
|
||||
|
||||
#### List All Address Types in Wallet
|
||||
|
||||
```bash
|
||||
palladium-cli listreceivedbyaddress 0 true
|
||||
```
|
||||
|
||||
This shows all addresses including Taproot ones.
|
||||
|
||||
### Configuration for Default Address Type
|
||||
|
||||
To make bech32m (Taproot) the default for new addresses, add to your `palladium.conf`:
|
||||
|
||||
```conf
|
||||
addresstype=bech32m
|
||||
changetype=bech32m
|
||||
```
|
||||
|
||||
After restart, `getnewaddress` without parameters will generate Taproot addresses by default.
|
||||
|
||||
## Compatibility
|
||||
|
||||
### Can Everyone Send to Taproot Addresses?
|
||||
|
||||
**Yes**, if their wallet supports bech32m addresses. This includes:
|
||||
- Palladium Core 2.0.0 and later
|
||||
- Most modern wallet software (after Taproot support is added)
|
||||
- Exchanges that have upgraded for Taproot support
|
||||
|
||||
**No**, if they're using:
|
||||
- Very old wallet software (pre-SegWit era)
|
||||
- Wallets that haven't added bech32m support yet
|
||||
|
||||
**Recommendation**: Provide a bech32 (plm1q...) or legacy address as a fallback for maximum compatibility.
|
||||
|
||||
### Backward Compatibility
|
||||
|
||||
- **Existing wallets**: All your existing addresses (legacy, P2SH, bech32) continue to work
|
||||
- **No forced upgrade**: Using Taproot is completely optional
|
||||
- **Interoperability**: Taproot addresses can send to any address type and vice versa
|
||||
|
||||
### Exchange Support
|
||||
|
||||
Before depositing to an exchange, verify they support bech32m addresses. Most major exchanges will add support after Taproot activates on mainnet.
|
||||
|
||||
If an exchange doesn't support bech32m yet, generate a bech32 (plm1q...) address instead.
|
||||
|
||||
## Advanced Features
|
||||
|
||||
Taproot enables powerful features that most users won't interact with directly, but developers can build on:
|
||||
|
||||
### Key-Path Spending (Default)
|
||||
|
||||
When you spend from a Taproot address normally, you're using "key-path spending":
|
||||
- Most efficient way to spend
|
||||
- Looks like a simple signature verification
|
||||
- No scripts revealed on-chain
|
||||
- **This is what happens automatically when you send from a Taproot address**
|
||||
|
||||
### Script-Path Spending
|
||||
|
||||
Advanced users and contracts can attach complex scripts to a Taproot address:
|
||||
- Scripts organized in a Merkle tree (MAST)
|
||||
- Only the script actually used is revealed
|
||||
- Unused alternative conditions stay private
|
||||
- Enables complex smart contracts with minimal on-chain footprint
|
||||
|
||||
**Example use cases**:
|
||||
- Multi-signature with timelock fallback
|
||||
- Lightning Network channels
|
||||
- Discreet Log Contracts (DLCs)
|
||||
- Vaults with recovery paths
|
||||
|
||||
### Schnorr Signatures
|
||||
|
||||
Taproot uses Schnorr signatures instead of ECDSA:
|
||||
- **Smaller**: 64 bytes vs 71-72 bytes for ECDSA
|
||||
- **Provably secure**: Based on discrete logarithm assumption
|
||||
- **Linear**: Enables key and signature aggregation
|
||||
- **Batch verification**: Multiple signatures verified faster together
|
||||
|
||||
**Benefits for users**:
|
||||
- Slightly lower transaction fees
|
||||
- Foundation for future multisig improvements (e.g., MuSig2)
|
||||
|
||||
## Activation and Timeline
|
||||
|
||||
### Mainnet Deployment
|
||||
|
||||
Taproot activates via miner signaling (BIP9):
|
||||
- **Signaling period**: March 1, 2026 - March 1, 2027
|
||||
- **Activation threshold**: 90% of blocks in a 2016-block period (1815 blocks)
|
||||
- **Activation method**: BIP9 soft fork using bit 2
|
||||
|
||||
**What this means**:
|
||||
- Once 90% of miners signal readiness, Taproot will "lock in"
|
||||
- After lock-in, there's a grace period before activation
|
||||
- Once activated, everyone must follow Taproot consensus rules
|
||||
|
||||
**Checking activation status**:
|
||||
```bash
|
||||
palladium-cli getblockchaininfo
|
||||
```
|
||||
|
||||
Look for the "taproot" deployment status: `defined`, `started`, `locked_in`, `active`, or `failed`.
|
||||
|
||||
### Testnet and Regtest
|
||||
|
||||
- **Testnet**: Same deployment parameters as mainnet (for realistic testing)
|
||||
- **Regtest**: Always active (for immediate developer testing)
|
||||
|
||||
## Frequently Asked Questions
|
||||
|
||||
### Do I need to upgrade my existing addresses to Taproot?
|
||||
|
||||
**No**. Upgrading to Taproot is completely optional. Your existing addresses will continue to work indefinitely. Use Taproot for new addresses if you want the benefits (privacy, efficiency).
|
||||
|
||||
### Are Taproot addresses more expensive to create?
|
||||
|
||||
**No**. Creating a Taproot address is free (it's just generating a public key). The wallet does this instantly.
|
||||
|
||||
### Are Taproot transactions cheaper?
|
||||
|
||||
**Slightly**. Taproot transactions are usually a bit smaller (especially for key-path spending), resulting in slightly lower fees. The difference is more noticeable for complex scripts.
|
||||
|
||||
### Can I use Taproot on mainnet right now?
|
||||
|
||||
**Yes**, once Taproot activates (expected March 2026 after miner signaling). Before activation, you can create Taproot addresses but cannot spend from them on mainnet.
|
||||
|
||||
You can test immediately on:
|
||||
- **Testnet**: Realistic test environment with same activation timeline
|
||||
- **Regtest**: Local testing environment (Taproot always active)
|
||||
|
||||
### What happens if I send to a Taproot address before activation?
|
||||
|
||||
- **Before activation**: The funds will be locked until Taproot activates
|
||||
- **After activation**: The funds become spendable normally
|
||||
|
||||
**Recommendation**: Wait until Taproot is active on mainnet before using Taproot addresses for real funds.
|
||||
|
||||
### Is Taproot safe?
|
||||
|
||||
**Yes**. Taproot has been:
|
||||
- Extensively reviewed by cryptographers and Bitcoin developers
|
||||
- Tested in Bitcoin Core for years
|
||||
- Activated on Bitcoin mainnet since November 2021
|
||||
- Successfully backported to Palladium Core with comprehensive testing
|
||||
|
||||
Taproot is a soft fork, meaning it doesn't break compatibility with existing nodes.
|
||||
|
||||
### Can I revert back to bech32 or legacy addresses?
|
||||
|
||||
**Yes**, anytime. Just select a different address type when generating new addresses:
|
||||
- GUI: Choose "bech32", "p2sh-segwit", or "legacy" in the dropdown
|
||||
- CLI: Use `getnewaddress "label" "bech32"` or `getnewaddress "label" "legacy"`
|
||||
|
||||
### Do Taproot addresses support multisig?
|
||||
|
||||
**Yes**, but in a different way:
|
||||
- Traditional multisig: Revealed on-chain with script-path spending
|
||||
- Future: Aggregated signatures (MuSig2) will look like single signatures
|
||||
|
||||
For now, use script-path spending for multisig or wait for MuSig2 development.
|
||||
|
||||
### What wallet software supports Taproot?
|
||||
|
||||
- **Palladium Core 2.0.0+**: Full support (GUI and CLI)
|
||||
- **Other wallets**: Support depends on individual wallet developers
|
||||
|
||||
Check with your wallet provider for Taproot/bech32m support.
|
||||
|
||||
### Can I receive Taproot payments in an older Palladium Core version?
|
||||
|
||||
**No**. You need Palladium Core 2.0.0 or later to:
|
||||
- Generate Taproot addresses
|
||||
- Spend from Taproot addresses
|
||||
- Validate Taproot transactions
|
||||
|
||||
However, older nodes can still relay Taproot transactions (after activation) even if they can't create or spend them.
|
||||
|
||||
### Where can I learn more?
|
||||
|
||||
- **Technical specification**: See `TAPROOT.md` in the repository root
|
||||
- **Release notes**: See `doc/release-notes.md` for version 2.0.0
|
||||
- **BIP specifications**:
|
||||
- [BIP340: Schnorr Signatures](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki)
|
||||
- [BIP341: Taproot](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki)
|
||||
- [BIP342: Tapscript](https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki)
|
||||
- [BIP350: Bech32m](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki)
|
||||
- **Community**: Ask questions in Palladium community forums or GitHub discussions
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "Invalid address" error when sending to plm1p... address
|
||||
|
||||
**Cause**: The recipient's wallet doesn't support bech32m addresses yet.
|
||||
|
||||
**Solution**:
|
||||
1. Ask them to upgrade to Taproot-compatible wallet software
|
||||
2. Or use a bech32 (plm1q...) address instead for compatibility
|
||||
|
||||
### Taproot address shows as "not mine" in getaddressinfo
|
||||
|
||||
**Cause**: The address was generated by a different wallet or seed.
|
||||
|
||||
**Solution**:
|
||||
1. Verify you're using the correct wallet.dat file
|
||||
2. If you restored from seed, ensure the derivation path includes Taproot addresses
|
||||
3. Check if the wallet was watching-only mode
|
||||
|
||||
### Cannot spend from Taproot address (insufficient funds)
|
||||
|
||||
**Cause**: The funds may not have confirmed yet, or you don't have enough balance.
|
||||
|
||||
**Solution**:
|
||||
1. Check confirmations: `palladium-cli listunspent 0 9999999 '["<your_taproot_address>"]'`
|
||||
2. Wait for at least 1 confirmation
|
||||
3. Verify the balance with `palladium-cli getbalance`
|
||||
|
||||
### Taproot transactions not confirming
|
||||
|
||||
**Cause**: Same as any transaction (too low fee, network congestion, etc.).
|
||||
|
||||
**Solution**:
|
||||
1. Check fee rate: Use `estimatesmartfee` to get recommended fees
|
||||
2. Consider Replace-By-Fee (RBF) if enabled
|
||||
3. Wait for less network congestion
|
||||
|
||||
Taproot transactions are treated the same as any other transaction by miners.
|
||||
|
||||
## Summary
|
||||
|
||||
Taproot brings important privacy and efficiency improvements to Palladium:
|
||||
- **Use bech32m (plm1p...) addresses** for maximum privacy and efficiency
|
||||
- **Sending and receiving** work the same as with other address types
|
||||
- **Completely optional**: Your existing addresses continue to work
|
||||
- **Compatible** with modern wallets after they add bech32m support
|
||||
- **Activated via miner signaling**: Expected March 2026 on mainnet
|
||||
|
||||
Enjoy the enhanced privacy and efficiency of Taproot!
|
||||
|
||||
---
|
||||
|
||||
**For technical details**, see [TAPROOT.md](TAPROOT.md)
|
||||
**For release information**, see [Release Notes v2.0.0](release-notes/release-notes-2.0.0.md)
|
||||
Reference in New Issue
Block a user