Skip to content

Commit 80fb748

Browse files
committed
session: broadcast_package: followup #288
Removes the incorrect and unnecessary txid calculation in `ElectrumX.package_broadcast()`, the daemon will complain anyways if the transactions are invalid.
1 parent b9d5bd9 commit 80fb748

File tree

1 file changed

+25
-32
lines changed

1 file changed

+25
-32
lines changed

src/electrumx/server/session.py

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from collections import defaultdict
1919
from functools import partial
2020
from ipaddress import IPv4Address, IPv6Address, IPv4Network, IPv6Network
21-
from typing import Iterable, Optional, TYPE_CHECKING, Sequence
21+
from typing import Iterable, Optional, TYPE_CHECKING, Sequence, Union
2222

2323
import attr
2424
from aiorpcx import (Event, JSONRPCAutoDetect, JSONRPCConnection,
@@ -1546,43 +1546,36 @@ async def package_broadcast(self, tx_package: Sequence[str], verbose: bool = Fal
15461546
15471547
raw_txs: a list of raw transactions as hexadecimal strings"""
15481548
self.bump_cost(0.25 + sum(len(tx) / 5000 for tx in tx_package))
1549-
try:
1550-
txids = [double_sha256(bytes.fromhex(tx)).hex() for tx in tx_package]
1551-
except ValueError:
1552-
self.logger.info(f"error calculating txids", exc_info=True)
1553-
raise RPCError(
1554-
BAD_REQUEST,
1555-
f'not a valid hex encoded transaction package: {tx_package}')
15561549
try:
15571550
daemon_result = await self.session_mgr.broadcast_package(tx_package)
15581551
except DaemonError as e:
15591552
error, = e.args
15601553
message = error['message']
15611554
self.logger.info(f"error submitting package: {message}")
1562-
raise RPCError(BAD_REQUEST, 'the tx package was rejected by '
1563-
f'network rules.\n\n{message}. Package txids: {txids}')
1564-
else:
1565-
self.txs_sent += len(tx_package)
1566-
self.logger.info(f'broadcasted package: {txids}')
1567-
if verbose:
1568-
return daemon_result
1569-
errors = []
1570-
for tx in daemon_result.get('tx-results', {}).values():
1571-
if tx.get('error'):
1572-
error_msg = {
1573-
'txid': tx.get('txid'),
1574-
'error': tx['error']
1575-
}
1576-
errors.append(error_msg)
1577-
# check both, package_msg and package-msg due to ongoing discussion to change rpc
1578-
# https://github.com/bitcoin/bitcoin/pull/31900
1579-
package_msg = daemon_result.get('package_msg', daemon_result.get('package-msg'))
1580-
electrumx_result = {
1581-
'success': True if package_msg == 'success' else False
1582-
}
1583-
if errors:
1584-
electrumx_result['errors'] = errors
1585-
return electrumx_result
1555+
raise RPCError(
1556+
BAD_REQUEST,
1557+
f'the tx package was rejected by network rules.\n\n{message}.',
1558+
)
1559+
1560+
self.txs_sent += len(tx_package)
1561+
self.logger.info(f'broadcasted package: {len(tx_package)=}')
1562+
if verbose:
1563+
return daemon_result
1564+
1565+
response: dict[str, Union[bool, list]] = {
1566+
'success': daemon_result['package_msg'] == 'success',
1567+
}
1568+
errors = []
1569+
for tx in daemon_result.get('tx-results', {}).values():
1570+
if tx.get('error'):
1571+
error_msg = {
1572+
'txid': tx.get('txid'),
1573+
'error': tx['error']
1574+
}
1575+
errors.append(error_msg)
1576+
if errors:
1577+
response['errors'] = errors
1578+
return response
15861579

15871580
async def transaction_get(self, tx_hash, verbose=False):
15881581
'''Return the serialized raw transaction given its hash

0 commit comments

Comments
 (0)