bitcoinwatcher 2.3__py3-none-any.whl → 2.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,7 @@ class AbstractAddressListener(AbstractTxListener, ABC):
18
18
  base_url = f"http://{host}:3006/api"
19
19
  mempool = Mempool(base_url=base_url)
20
20
  default_tx_extractor = DefaultTxAddressDataExtractor()
21
- mempool_tx_extractor = BitcoinRPCAddressDataExtractor()
21
+ rpc_tx_extractor = BitcoinRPCAddressDataExtractor()
22
22
 
23
23
  def __init__(self, addresses_to_listen: {str}):
24
24
  self.addresses_to_listen = addresses_to_listen
@@ -44,9 +44,9 @@ class AbstractAddressListener(AbstractTxListener, ABC):
44
44
  return
45
45
  # get the address tx data from mempool for full details if any address matches
46
46
  try:
47
- address_tx_data = self.mempool_tx_extractor.extract(tx)
47
+ address_tx_data = self.rpc_tx_extractor.extract(tx)
48
48
  except Exception as e:
49
- print(f"Error in getting mempool tx data, taking defaults: {e}")
49
+ print(f"Error in getting rpc tx data, taking defaults: {e}")
50
50
  address_tx_data = address_tx_data
51
51
 
52
52
  for address in addresses_for_events:
@@ -24,7 +24,7 @@ class AddressTxData:
24
24
  type: AddressTxType
25
25
  # figure out the way to get amount in vin
26
26
  _amount: int = 0
27
- tx_status: str = "unconfirmed"
27
+ is_confirmed: bool = False
28
28
  is_reveal_tx: bool = False
29
29
 
30
30
  def get_amount(self):
@@ -28,7 +28,7 @@ class BitcoinRPCAddressDataExtractor(AbstractTxAddressDataExtractor):
28
28
  def get_address_tx_from_inputdata(self, tx_id, tx_status, input_data):
29
29
  address = input_data["scriptPubKey"]["address"]
30
30
  amount = int(input_data.get("value", 0).real * 100000000)
31
- return AddressTxData(tx_id=tx_id, tx_status=tx_status, address=address, _amount=amount,
31
+ return AddressTxData(tx_id=tx_id, is_confirmed=tx_status, address=address, _amount=amount,
32
32
  type=AddressTxType.INPUT)
33
33
 
34
34
  def extract(self, tx: Transaction) -> [AddressTxData]:
@@ -38,23 +38,23 @@ class BitcoinRPCAddressDataExtractor(AbstractTxAddressDataExtractor):
38
38
  inputs = tx.inputs
39
39
  # bulk get all the inputs from BitcoinRPC using thread pool
40
40
  inputs_data = self.fetch_all_inputs(inputs)
41
- tx_status = tx.status
41
+ is_confirmed = self.bitcoinrpc.is_confirmed(tx_id)
42
42
  for input in inputs:
43
43
  address = input.address
44
44
  amount = 0
45
45
  if len(inputs_data) > 0:
46
46
  input_data = inputs_data.pop(0)
47
- input_tx_data = self.get_address_tx_from_inputdata(tx_id, tx_status, input_data)
47
+ input_tx_data = self.get_address_tx_from_inputdata(tx_id, is_confirmed, input_data)
48
48
  address_tx_data.append(input_tx_data)
49
49
  else:
50
- address_tx_data.append(AddressTxData(tx_status=tx_status,
50
+ address_tx_data.append(AddressTxData(is_confirmed=is_confirmed,
51
51
  address=address,
52
52
  type=AddressTxType.INPUT,
53
53
  _amount=amount,
54
54
  tx_id=tx.txid))
55
55
  for output in outputs:
56
56
  amount = output.value
57
- address_tx_data.append(AddressTxData(tx_status=tx_status,
57
+ address_tx_data.append(AddressTxData(is_confirmed=is_confirmed,
58
58
  address=output.address,
59
59
  _amount=amount,
60
60
  type=AddressTxType.OUTPUT,
@@ -10,18 +10,18 @@ class DefaultTxAddressDataExtractor(AbstractTxAddressDataExtractor):
10
10
  outputs = tx.outputs
11
11
  address_tx_data = []
12
12
  inputs = tx.inputs
13
- tx_status = tx.status
13
+ is_confirmed = tx.status == "confirmed"
14
14
  for input in inputs:
15
15
  address = input.address
16
16
  amount = 0
17
- address_tx_data.append(AddressTxData(tx_status=tx_status,
17
+ address_tx_data.append(AddressTxData(is_confirmed=is_confirmed,
18
18
  address=address,
19
19
  type=AddressTxType.INPUT,
20
20
  _amount=amount,
21
21
  tx_id=tx.txid))
22
22
  for output in outputs:
23
23
  amount = output.value
24
- address_tx_data.append(AddressTxData(tx_status=tx_status,
24
+ address_tx_data.append(AddressTxData(is_confirmed=is_confirmed,
25
25
  address=output.address,
26
26
  _amount=amount,
27
27
  type=AddressTxType.OUTPUT,
@@ -18,12 +18,19 @@ class BitcoinRPC:
18
18
  def get_transaction(self, txid: str) -> dict:
19
19
  return self.rpc_connection.getrawtransaction(txid, True)
20
20
 
21
+ def is_confirmed(self, txid: str) -> bool:
22
+ try:
23
+ self.rpc_connection.getmempoolentry(txid)
24
+ return False
25
+ except JSONRPCException as e:
26
+ return True
27
+
21
28
 
22
29
  if __name__ == '__main__':
23
30
  rpc = BitcoinRPC()
24
- txid = '8dc035d6816cf61074d12148777b28d28aa2f76b0f45ceafd310a85b1518aab8'
31
+ txid = '686d025f16d9f20353665a9d865e575e3e4d14214f6f7045149a17dd6bf0fac6'
25
32
  try:
26
- transaction = rpc.get_transaction(txid)
33
+ transaction = rpc.is_confirmed(txid)
27
34
  print(transaction)
28
35
  except JSONRPCException as e:
29
- print(f"An error occurred: {e}")
36
+ print(f"An error occurred: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bitcoinwatcher
3
- Version: 2.3
3
+ Version: 2.5
4
4
  Summary: bitcoinwatcher is a Python library that implements a ZMQ subscriber and provides abstractions to build custom address watchers. This library is designed to make it easy for developers to monitor Bitcoin addresses and react to changes in their state.
5
5
  Author: twosatsmaxi
6
6
  License: Apache License
@@ -217,17 +217,17 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
217
217
  Requires-Python: >=3.10
218
218
  Description-Content-Type: text/markdown
219
219
  License-File: LICENSE
220
- Requires-Dist: requests ~=2.31.0
221
- Requires-Dist: certifi ==2024.2.2
222
- Requires-Dist: charset-normalizer ==3.3.2
223
- Requires-Dist: idna ==3.6
224
- Requires-Dist: pyzmq ==25.1.2
225
- Requires-Dist: requests ==2.31.0
226
- Requires-Dist: six ==1.16.0
227
- Requires-Dist: urllib3 ==2.2.1
228
- Requires-Dist: bitcoinlib ==0.6.14
229
- Requires-Dist: ordipool ==1.2.0
230
- Requires-Dist: python-bitcoinrpc ==1.0
220
+ Requires-Dist: requests~=2.31.0
221
+ Requires-Dist: certifi==2024.2.2
222
+ Requires-Dist: charset-normalizer==3.3.2
223
+ Requires-Dist: idna==3.7
224
+ Requires-Dist: pyzmq==25.1.2
225
+ Requires-Dist: requests==2.31.0
226
+ Requires-Dist: six==1.16.0
227
+ Requires-Dist: urllib3==2.2.1
228
+ Requires-Dist: bitcoinlib==0.6.14
229
+ Requires-Dist: ordipool==1.2.0
230
+ Requires-Dist: python-bitcoinrpc==1.0
231
231
 
232
232
  # bitcoinwatcher
233
233
 
@@ -1,9 +1,9 @@
1
1
  bitcoin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  bitcoin/address_listener/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- bitcoin/address_listener/address_listener.py,sha256=32gDEYpYTv53nD0TKLYyrIzHpImYBzzT3XdCoGUD1fI,2354
3
+ bitcoin/address_listener/address_listener.py,sha256=Vnti0KIPJVt1vSOM0EawhFvrYeDhThhMbcBhAHaDy1Q,2342
4
4
  bitcoin/address_listener/simple_address_listener.py,sha256=WG8eTrd3AdkrIs1TAGRsXe_erAtE_Ep8hidZDksGk8g,1625
5
5
  bitcoin/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- bitcoin/models/address_tx_data.py,sha256=0zIleuEHern42zk1Pp7IteR5jQqVdAM1l4Gvy6YzGe0,754
6
+ bitcoin/models/address_tx_data.py,sha256=KSSCzAjYxLEgXIELVSsnSEhgY65xi0K3HUjoamVV_LQ,750
7
7
  bitcoin/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  bitcoin/tests/test_address_listener.py,sha256=USK3BMGnRsTBmCXcbnC9WkX6kF-W_sHt7RKARv39IDg,3125
9
9
  bitcoin/tests/test_bitcoin_rpc.py,sha256=Xt9Mh71YQqE_gskgLMfPLs0J0YcCT7z5UimT42LOris,4137
@@ -12,20 +12,20 @@ bitcoin/tests/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
12
12
  bitcoin/tests/data/transactions.py,sha256=qIX9seGYguQ1lvLOCF8oe3NQhMJZP0SsBmz1iFbszhg,396279
13
13
  bitcoin/tx_extractors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  bitcoin/tx_extractors/abstract_extractor.py,sha256=YLnuqc3jva15NpOX8xV4oB5PEXc6rXbG8Lx0cBXW66s,291
15
- bitcoin/tx_extractors/bitcoin_rpc.py,sha256=PFyX5DfJspj9AM3KCVJG91dYxTtb73PW10JKzHDljww,2800
16
- bitcoin/tx_extractors/default.py,sha256=ZW9bJjq4-gvp-jJzNTrTFRRTReb4mOO0OmpTnDenhBQ,1377
15
+ bitcoin/tx_extractors/bitcoin_rpc.py,sha256=ebw_oEhgi22Oj6mtjBNLnxl_NIF_u63d05u3nHkUt_U,2847
16
+ bitcoin/tx_extractors/default.py,sha256=Xd09vldoFIlZo2g25KQeWbPKw7Cyj6vp40AKeDn3nJM,1407
17
17
  bitcoin/tx_extractors/mempool.py,sha256=mPPY1GOvBmZWn7UVP2sUaXtfcyeTCj-LmRDl2F4WhC8,2090
18
18
  bitcoin/tx_listener/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  bitcoin/tx_listener/abstract_tx_listener.py,sha256=rGp9na-aOSl_aPaIqf44RTZaFF3SvrxIhZBujTnWqao,189
20
20
  bitcoin/tx_listener/zmq_listener.py,sha256=V4-WIt5PYJaYoipn0rYhcFfg1BBYxqqQGucKhGXTmkg,1110
21
21
  bitcoin/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  bitcoin/utils/benchmark.py,sha256=kaTTlo6k_5uDVIt8FMeY4nH7ZxxsoWUiMsZgHfpWsMo,894
23
- bitcoin/utils/bitcoin_rpc.py,sha256=yEHS8BPI_Y4uLFL1ygUti8OI68JW67d_c1vshjEfQbA,932
23
+ bitcoin/utils/bitcoin_rpc.py,sha256=tsDwSeklp_oDZ3Bd7aUC2tpUQ2kUGwhnMr1NzACIK34,1132
24
24
  bitcoin/utils/bitcoin_utils.py,sha256=mrnRPqUa2U2EMKu7rrPV_bW1sL2CJUfbAom0Zdamydk,631
25
25
  bitcoin/utils/constants.py,sha256=irZLlArgica2VckyckEYxH5D5KjvdF52dtBMWswqw8k,52
26
26
  bitcoin/utils/inscription_utils.py,sha256=8QbOJ1o1n1bMFsPREGLzwFjnGzfuARgJCPr6ORhP44o,193
27
- bitcoinwatcher-2.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
28
- bitcoinwatcher-2.3.dist-info/METADATA,sha256=6dlhp29bUJsGG38h9gRRhR-OMDhDayLFMRJyyJs-eec,14938
29
- bitcoinwatcher-2.3.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
30
- bitcoinwatcher-2.3.dist-info/top_level.txt,sha256=YdUgzLdCiMlrwaKyDqHA1acEd23QFko5bv7D6nBANJ0,8
31
- bitcoinwatcher-2.3.dist-info/RECORD,,
27
+ bitcoinwatcher-2.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
28
+ bitcoinwatcher-2.5.dist-info/METADATA,sha256=AGb2LvceN2_Jz-OSzmXpVrk8BALp2S2VZ8TKMhKyh-0,14927
29
+ bitcoinwatcher-2.5.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
30
+ bitcoinwatcher-2.5.dist-info/top_level.txt,sha256=YdUgzLdCiMlrwaKyDqHA1acEd23QFko5bv7D6nBANJ0,8
31
+ bitcoinwatcher-2.5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.2.0)
2
+ Generator: setuptools (72.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5