From c83b62ef500f4d40288b49bf31807214c78adc04 Mon Sep 17 00:00:00 2001 From: Salim Bk Date: Sun, 18 Jan 2026 01:33:50 +0300 Subject: [PATCH 1/2] =?UTF-8?q?Fixes=20broken=20.send()=20=E2=80=93=20Broa?= =?UTF-8?q?dcast=20Transactions=20Working=20Again?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix malformed HTTP payload in BlockstreamAPI.broadcast_tx() - Fix malformed HTTP payload in BlockstreamAPI.broadcast_tx_testnet() - Remove defunct third-party API services from dispatcher lists - Per Blockstream API specification, transaction hex should be sent as raw request body - Fixes #110 and #170 --- bit/network/services.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/bit/network/services.py b/bit/network/services.py index 9578c63..c2a8d30 100644 --- a/bit/network/services.py +++ b/bit/network/services.py @@ -500,12 +500,12 @@ def get_unspent_testnet(cls, address): @classmethod def broadcast_tx(cls, tx_hex): # pragma: no cover - r = requests.post(cls.MAIN_TX_PUSH_API, data={cls.TX_PUSH_PARAM: tx_hex}, timeout=DEFAULT_TIMEOUT) + r = requests.post(cls.MAIN_TX_PUSH_API, data=tx_hex, timeout=DEFAULT_TIMEOUT) return True if r.status_code == 200 else False @classmethod def broadcast_tx_testnet(cls, tx_hex): # pragma: no cover - r = requests.post(cls.TEST_TX_PUSH_API, data={cls.TX_PUSH_PARAM: tx_hex}, timeout=DEFAULT_TIMEOUT) + r = requests.post(cls.TEST_TX_PUSH_API, data= tx_hex, timeout=DEFAULT_TIMEOUT) return True if r.status_code == 200 else False @@ -980,10 +980,7 @@ class NetworkAPI: BitcoreAPI.get_unspent, # No limit ] BROADCAST_TX_MAIN = [ - BlockchairAPI.broadcast_tx, BlockstreamAPI.broadcast_tx, - BitcoreAPI.broadcast_tx, - SmartbitAPI.broadcast_tx, # Limit 5/minute BlockchainAPI.broadcast_tx, ] @@ -1010,10 +1007,7 @@ class NetworkAPI: BitcoreAPI.get_unspent_testnet, # No limit ] BROADCAST_TX_TEST = [ - BlockchairAPI.broadcast_tx_testnet, BlockstreamAPI.broadcast_tx_testnet, - BitcoreAPI.broadcast_tx_testnet, - SmartbitAPI.broadcast_tx_testnet, # Limit 5/minute ] @classmethod From 0d3cd1278a335c11198c49d04aff51b73ee1c8ca Mon Sep 17 00:00:00 2001 From: Salim Bk Date: Mon, 19 Jan 2026 10:09:58 +0300 Subject: [PATCH 2/2] Fix Blockstream broadcast body + cleanup providers --- bit/network/services.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bit/network/services.py b/bit/network/services.py index c2a8d30..4e8d34e 100644 --- a/bit/network/services.py +++ b/bit/network/services.py @@ -505,7 +505,7 @@ def broadcast_tx(cls, tx_hex): # pragma: no cover @classmethod def broadcast_tx_testnet(cls, tx_hex): # pragma: no cover - r = requests.post(cls.TEST_TX_PUSH_API, data= tx_hex, timeout=DEFAULT_TIMEOUT) + r = requests.post(cls.TEST_TX_PUSH_API, data=tx_hex, timeout=DEFAULT_TIMEOUT) return True if r.status_code == 200 else False @@ -981,7 +981,6 @@ class NetworkAPI: ] BROADCAST_TX_MAIN = [ BlockstreamAPI.broadcast_tx, - BlockchainAPI.broadcast_tx, ] GET_BALANCE_TEST = [