diff --git a/docs/protocol-changes.rst b/docs/protocol-changes.rst index 54b8d10..fc0a4fe 100644 --- a/docs/protocol-changes.rst +++ b/docs/protocol-changes.rst @@ -127,16 +127,19 @@ This version removes all support for :ref:`deserialized headers Changes ------- - * The argument *raw* removed from :func:`blockchain.headers.subscribe`, - only raw headers can be subscribed to. + * Deserialized headers are no longer available, so removed argument + *raw* from :func:`blockchain.headers.subscribe`. * Only the first :func:`server.version` message is accepted. * Optional *cp_height* argument added to :func:`blockchain.block.header` and :func:`blockchain.block.headers` + to return merkle proofs of the header to a given checkpoint. New methods ----------- - * :func:`blockchain.transaction.id_from_pos` + * :func:`blockchain.transaction.id_from_pos` to return a transaction + hash, and optionally a merkle proof, given a block height and + position in the block. Removed methods --------------- diff --git a/docs/protocol-methods.rst b/docs/protocol-methods.rst index c1cc056..96e6666 100644 --- a/docs/protocol-methods.rst +++ b/docs/protocol-methods.rst @@ -679,12 +679,13 @@ given a block height and a position in the block. **Signature** - .. function:: blockchain.transaction.id_from_pos(height, tx_pos, merkle=False) + .. function:: blockchain.transaction.id_from_pos(height, tx_pos, + merkle=False) .. versionadded:: 1.4 *height* - A block height in the main chain, an integer. + The main chain block height, a non-negative integer. *tx_pos* diff --git a/electrumx/server/session.py b/electrumx/server/session.py index 4412697..3267b8b 100644 --- a/electrumx/server/session.py +++ b/electrumx/server/session.py @@ -1055,7 +1055,7 @@ class ElectrumX(SessionBase): return await self.daemon_request('getrawtransaction', tx_hash, verbose) - async def block_hash_and_tx_hashes(self, height): + async def _block_hash_and_tx_hashes(self, height): '''Returns a pair (block_hash, tx_hashes) for the main chain block at the given height. @@ -1080,14 +1080,14 @@ class ElectrumX(SessionBase): return branch async def transaction_merkle(self, tx_hash, height): - '''Return the markle tree to a confirmed transaction given its hash + '''Return the markle branch to a confirmed transaction given its hash and height. tx_hash: the transaction hash as a hexadecimal string height: the height of the block it is in ''' assert_tx_hash(tx_hash) - block_hash, tx_hashes = await self.block_hash_and_tx_hashes(height) + block_hash, tx_hashes = await self._block_hash_and_tx_hashes(height) try: pos = tx_hashes.index(tx_hash) except ValueError: @@ -1104,15 +1104,15 @@ class ElectrumX(SessionBase): if merkle not in (True, False): raise RPCError(BAD_REQUEST, f'"merkle" must be a boolean') - block_hash, tx_hashes = await self.block_hash_and_tx_hashes(height) + block_hash, tx_hashes = await self._block_hash_and_tx_hashes(height) try: tx_hash = tx_hashes[tx_pos] except IndexError: raise RPCError(BAD_REQUEST, f'no tx at position {tx_pos:,d} in ' f'block {block_hash} at height {height:,d}') - branch = self._get_merkle_branch(tx_hashes, tx_pos) if merkle: + branch = self._get_merkle_branch(tx_hashes, tx_pos) return {"tx_hash": tx_hash, "merkle": branch} else: return tx_hash