All notable changes to this project will be documented in this file. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Unreleased
- 1.0.11 - 2025-11-23
- 1.0.10 - 2025-10-30
- 1.0.9 - 2025-09-30
- 1.0.8 - 2025-08-13
- 1.0.7.1- 2025-07-28
- 1.0.7- 2025-07-28
- 1.0.6.1- 2025-07-03
- 1.0.6- 2025-06-30
- 1.0.5- 2025-05-30
- 1.0.4- 2025-04-28
- 1.0.3 - 2025-03-26
- 1.0.2 - 2025-02-28
- 1.0.1 - 2025-01-09
- 1.0.1 - 2025-01-09
- 1.0.0 - 2024-12-23
- 0.5.2 - 2024-09-02
- 0.1.0 - 2024-04-09
- OpCat Script Template: Added new
OpCatclass for creating and spending outputs locked with OP_CAT scripts- Supports flexible data concatenation:
OP_CAT <expected_data> OP_EQUALlocking scripts - Template-based unlocking with two data pieces that concatenate to match the expected result
- Includes comprehensive tests and example script demonstrating OP_CAT functionality
- Supports flexible data concatenation:
- (Detail modifications that are non-breaking but relevant to the end-users.)
- (List features that are in the process of being phased out or replaced.)
- (Indicate features or capabilities that were taken out of the project.)
- (Document bugs that were fixed since the last release.)
- (Notify of any improvements related to security vulnerabilities or potential risks.)
- Converted
LivePolicyfee model from asynchronous to synchronous implementation - Replaced
default_http_client()(async) withdefault_sync_http_client()(sync) inLivePolicy Transaction.fee()can now be called from both synchronous and asynchronous functions without any special handling- Removed unused
asyncioandinspectimports fromtransaction.py - Simplified
Transaction.fee()implementation by removing async helper methods
- Updated all
LivePolicytests to use synchronous mocks instead ofAsyncMock - Fixed
test_transaction_fee_with_default_rateto use explicit fee model for deterministic testing - Removed
asyncio.run()calls fromLivePolicytest suite
- This change is transparent to users -
tx.fee()works seamlessly in both sync and async contexts without any API changes - You can call
tx.fee()insideasync deffunctions or regulardeffunctions - it works the same way - All existing code and documentation remain compatible with no modifications required
- Updated Script ASM output to use BRC-106 compliant format (outputs
OP_FALSEinstead ofOP_0for better human readability) - Converted
test_arc_ef_or_rawhex.pyfrom unittest.TestCase to pytest style for better async test handling
- Added missing test dependencies to requirements.txt:
ecdsa~=0.19.0andpytest-cov~=6.0.0 - Fixed pytest configuration by adding
asyncio_default_fixture_loop_scopeto eliminate deprecation warnings - Updated test expectations in
test_scripts.pyto match BRC-106 compliant ASM output - Resolved all pytest warnings for a clean test output (154 tests passing with zero warnings)
- Integrated
LivePolicyfor dynamic fee computations with caching and fallback mechanisms. ts-sdk#343.
- Applied measures for vulnerability reported on ts-sdk#334.
- Incremented version in
__init__.pyto 1.0.7.1.
- Updated
aiohttpandsetuptoolsdependencies to use minimum version constraints. - Redacted private key in threshold signature example for security.
- Implemented default broadcasters for GorillaPool mainnet and testnet.
-
- Updated examples to use new broadcaster functions.
- Introduced
default_broadcasterwith configurable options for testnet and custom ARC configurations. - Added function to set API key from constant.py for Taal mainnet and testnet (
taal_broadcaster,taal_testnet_broadcaster).
Bug Fix default_http_client and add async ARC broadcasting example
- Replaced
default_sync_http_clientwithDefaultHttpClientindefault_http_client. - Introduced a new
test_async_arc.pyexample demonstrating asynchronous ARC broadcasting and transaction status checking.
- Introduced
SyncHttpClientfor synchronous HTTP operations - Extended ARC broadcaster with synchronous methods:
sync_broadcast,check_transaction_status, andcategorize_transaction_status - Updated ARC configuration to include optional
SyncHttpClientsupport - Added examples, tests, and utilities for synchronous transactions
- Updated
SyncHttpClientto inherit fromHttpClientfor consistency - Refactored
fetchinto higher-level HTTP methods:getandpost - Simplified ARC broadcaster by using
getandpostmethods for sync operations - Enhanced error handling and response processing in ARC transactions
- Updated tests and examples to align with refactored
SyncHttpClient
Introducing an implementation of Shamir's Secret Sharing scheme for securely splitting and recovering private keys.
The update includes the following:
-
KeyShares, Polynomial, and PointInFiniteField classes to manage key splitting logic
-
Integrity verification for share validation
-
Robust error handling during reconstruction
-
Comprehensive unit tests
-
Examples demonstrating the use and behavior of the implemented methods
The implementation is designed to follow the functionality and interface of the existing TypeScript SDK. Compatibility has been verified.
Remove debug print statement from MerklePath.trim() method and unnecessary import statement
add step-by-step guide for sending BSV & minting NFTs
Adds a beginner-friendly tutorial that covers:
- environment setup and dependency installation
- key / address generation
- sending BSV transactions
- creating & broadcasting 1Sat Ordinals NFTs
- explanation of inputs, outputs and key terms
Enable regular hex format broadcasting when source transactions are unavailable Enhance the ARC broadcaster to dynamically select between EF and regular hex formats based on the availability of source transactions. This update addresses scenarios such as receiving raw hex via P2P payment destination Paymail capabilities. Additionally, unit tests have been added to cover this feature.
Previously, the default fee rate was hardcoded to 10 satoshis per kilobyte. This update allows users to configure the default fee rate via the TRANSACTION_FEE_RATE variable in constants.py or through the environment file.
A test for the default fee rate has also been added.
Optimized transaction preimage calculation by refactoring the tx_preimage function to directly compute the preimage for a specified input, avoiding unnecessary computation for all inputs Achieved a 3× performance improvement in scenarios with 250 inputs, based on benchmarking
- BIP32_DERIVATION_PATH environment variable for customizing default derivation paths
- Dedicated BIP32 derivation functions with clearer interface
- BIP44-specific functions that build on the BIP32 foundation
- Comprehensive tests for HD wallet key derivation consistency
- Enhanced error messages for hardened key derivation attempts from xpub keys
- PUSHDATA opcode length parsing now uses unsigned integer reading methods (read_uint8, read_uint16_le, read_uint32_le) instead of signed integer methods to prevent incorrect chunk parsing with large data lengths
- Proper handling of edge cases in Script parsing including length 0 and incomplete length specifications
- Serialization/deserialization consistency for various PUSHDATA operations
- Refined HD wallet key derivation interface while maintaining backward compatibility
- Improved error messages for invalid derivation attempts
- Marked legacy derivation functions as deprecated while maintaining compatibility
- Enhanced WhatsOnChainBroadcaster network handling:
- Added support for Network enum initialization (Network.MAINNET/Network.TESTNET)
- Added robust backward compatibility for string network parameters ('main'/'test'/'mainnet'/'testnet')
- Added input validation and clear error messages for invalid network parameters
- Added type hints and docstrings for better code clarity
- Added comprehensive test suite for WhatsOnChainBroadcaster:
- Added test cases for Network enum initialization
- Added test cases for string-based network parameters
- Added validation tests for invalid network inputs
- Added URL construction validation tests
- Fixed miner-related bugs.
- Improved documentation and updated the PyPI version.
- Implemented bug fixes and improvements based on feedback from the Yenpoint user test.
- Basic functions developed by the Script team.
- Initial release.
Replace X.X.X with the new version number and YYYY-MM-DD with the release date: