strideutils 0.8.7__tar.gz → 0.8.8__tar.gz

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.
Files changed (70) hide show
  1. {strideutils-0.8.7 → strideutils-0.8.8}/.bumpversion.cfg +1 -1
  2. {strideutils-0.8.7 → strideutils-0.8.8}/PKG-INFO +2 -1
  3. {strideutils-0.8.7 → strideutils-0.8.8}/pyproject.toml +2 -1
  4. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/stride_requests.py +27 -6
  5. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/stride_requests.pyi +2 -1
  6. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/stride_requests.pyi +2 -1
  7. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils.egg-info/PKG-INFO +2 -1
  8. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils.egg-info/requires.txt +1 -0
  9. {strideutils-0.8.7 → strideutils-0.8.8}/.github/workflows/lint.yml +0 -0
  10. {strideutils-0.8.7 → strideutils-0.8.8}/.github/workflows/publish.yml +0 -0
  11. {strideutils-0.8.7 → strideutils-0.8.8}/.github/workflows/test.yml +0 -0
  12. {strideutils-0.8.7 → strideutils-0.8.8}/.github/workflows/version.yaml +0 -0
  13. {strideutils-0.8.7 → strideutils-0.8.8}/.gitignore +0 -0
  14. {strideutils-0.8.7 → strideutils-0.8.8}/LICENSE +0 -0
  15. {strideutils-0.8.7 → strideutils-0.8.8}/MANIFEST.in +0 -0
  16. {strideutils-0.8.7 → strideutils-0.8.8}/Makefile +0 -0
  17. {strideutils-0.8.7 → strideutils-0.8.8}/README.md +0 -0
  18. {strideutils-0.8.7 → strideutils-0.8.8}/example-config.yaml +0 -0
  19. {strideutils-0.8.7 → strideutils-0.8.8}/setup.cfg +0 -0
  20. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/Makefile +0 -0
  21. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/__init__.py +0 -0
  22. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/__init__.pyi +0 -0
  23. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/coingecko.py +0 -0
  24. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/coingecko.pyi +0 -0
  25. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/config_examples/env.local.example +0 -0
  26. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/config_examples/strideutils_config.yaml.example +0 -0
  27. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/cryptography.py +0 -0
  28. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/cryptography.pyi +0 -0
  29. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/exec_tx.py +0 -0
  30. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/exec_tx.pyi +0 -0
  31. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/py.typed +0 -0
  32. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/redis_connector.py +0 -0
  33. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/redis_connector.pyi +0 -0
  34. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/run_safely.py +0 -0
  35. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/run_safely.pyi +0 -0
  36. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/sheets_connector.py +0 -0
  37. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/sheets_connector.pyi +0 -0
  38. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/slack_connector.py +0 -0
  39. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/slack_connector.pyi +0 -0
  40. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/stride_alerts.py +0 -0
  41. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/stride_alerts.pyi +0 -0
  42. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/stride_config.py +0 -0
  43. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/stride_config.pyi +0 -0
  44. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/twilio_connector.py +0 -0
  45. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/twilio_connector.pyi +0 -0
  46. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/types.py +0 -0
  47. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils/types.pyi +0 -0
  48. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/__init__.pyi +0 -0
  49. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/coingecko.pyi +0 -0
  50. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/cryptography.pyi +0 -0
  51. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/exec_tx.pyi +0 -0
  52. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/redis_connector.pyi +0 -0
  53. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/run_safely.pyi +0 -0
  54. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/sheets_connector.pyi +0 -0
  55. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/slack_connector.pyi +0 -0
  56. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/stride_alerts.pyi +0 -0
  57. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/stride_config.pyi +0 -0
  58. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/twilio_connector.pyi +0 -0
  59. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils-stubs/types.pyi +0 -0
  60. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils.egg-info/SOURCES.txt +0 -0
  61. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils.egg-info/dependency_links.txt +0 -0
  62. {strideutils-0.8.7 → strideutils-0.8.8}/strideutils.egg-info/top_level.txt +0 -0
  63. {strideutils-0.8.7 → strideutils-0.8.8}/tests/test_coingecko.py +0 -0
  64. {strideutils-0.8.7 → strideutils-0.8.8}/tests/test_config.py +0 -0
  65. {strideutils-0.8.7 → strideutils-0.8.8}/tests/test_encryption.py +0 -0
  66. {strideutils-0.8.7 → strideutils-0.8.8}/tests/test_redis_connector.py +0 -0
  67. {strideutils-0.8.7 → strideutils-0.8.8}/tests/test_sheets_connector.py +0 -0
  68. {strideutils-0.8.7 → strideutils-0.8.8}/tests/test_slack_connector.py +0 -0
  69. {strideutils-0.8.7 → strideutils-0.8.8}/tests/test_stride_requests.py +0 -0
  70. {strideutils-0.8.7 → strideutils-0.8.8}/tests/test_twilio_connector.py +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 0.8.7
2
+ current_version = 0.8.8
3
3
  commit = False
4
4
  tag = False
5
5
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strideutils
3
- Version: 0.8.7
3
+ Version: 0.8.8
4
4
  Summary: Utility functions for monitoring the Stride blockchain
5
5
  Author-email: Stride Labs <hello@stridelabs.co>
6
6
  License: MIT License
@@ -44,6 +44,7 @@ Requires-Dist: python-dotenv==1.0.1
44
44
  Requires-Dist: pyyaml>=6.0.1
45
45
  Requires-Dist: requests>=2.32.3
46
46
  Requires-Dist: pycryptodome>=3.20.0
47
+ Requires-Dist: web3==7.6.1
47
48
  Provides-Extra: dev
48
49
  Requires-Dist: pytest>=8.1.1; extra == "dev"
49
50
  Requires-Dist: mypy>=1.10.0; extra == "dev"
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "strideutils"
7
- version = "0.8.7"
7
+ version = "0.8.8"
8
8
  authors = [
9
9
  {name = "Stride Labs", email = "hello@stridelabs.co"},
10
10
  ]
@@ -32,6 +32,7 @@ dependencies = [
32
32
  "pyyaml>=6.0.1",
33
33
  "requests>=2.32.3",
34
34
  "pycryptodome>=3.20.0",
35
+ "web3==7.6.1"
35
36
  ]
36
37
 
37
38
  [project.optional-dependencies]
@@ -11,6 +11,7 @@ import pandas as pd
11
11
  import pytz
12
12
  import requests
13
13
  from requests.adapters import HTTPAdapter, Retry
14
+ from web3 import Web3
14
15
 
15
16
  from strideutils import types
16
17
  from strideutils.stride_config import config
@@ -58,6 +59,16 @@ COSMWASM_CONTRACT_QUERY = "cosmwasm/wasm/v1/contract/{contract_address}/smart/{q
58
59
  CHANNELS_SUMMARY_QUERY_BY_HOST = "https://channels.main.stridenet.co/api/data/{chain_id}"
59
60
  CHANNELS_SUMMARY_QUERY = "https://channels.main.stridenet.co/api/data"
60
61
 
62
+ ERC20_ABI = [
63
+ {
64
+ "constant": True,
65
+ "inputs": [{"name": "_owner", "type": "address"}],
66
+ "name": "balanceOf",
67
+ "outputs": [{"name": "balance", "type": "uint256"}],
68
+ "type": "function",
69
+ }
70
+ ]
71
+
61
72
  requests_session = requests.Session()
62
73
 
63
74
  retries = Retry(total=5, backoff_factor=0.5, status_forcelist=[400, 403, 404, 500, 502, 503, 504])
@@ -1351,12 +1362,22 @@ def query_evm_method(method: str, params: list[str], rpc_endpoint: str) -> str:
1351
1362
  return response["result"]
1352
1363
 
1353
1364
 
1354
- def get_evm_balance(address: str, rpc_endpoint: str) -> int:
1365
+ def get_evm_balance(address: str, rpc_endpoint: str, token_address: str | None = None, decimals: int = 16) -> int:
1355
1366
  """
1356
- Queries the native token balance of an evm address
1367
+ Queries the native or ERC20 token balance of an evm address
1357
1368
  Address should be a hex address with an 0x prefix
1358
1369
  """
1359
- params = [address, "latest"]
1360
- balance_raw = query_evm_method("eth_getBalance", params=params, rpc_endpoint=rpc_endpoint)
1361
- balance = int(balance_raw, 16)
1362
- return balance
1370
+ w3 = Web3(Web3.HTTPProvider(rpc_endpoint))
1371
+ assert w3.is_address(address), f"Invalid wallet address: {address}"
1372
+ assert not token_address or w3.is_address(token_address), f"Invalid token address: {token_address}"
1373
+
1374
+ wallet_address = Web3.to_checksum_address(address)
1375
+
1376
+ if not token_address:
1377
+ balance = w3.eth.get_balance(wallet_address)
1378
+ else:
1379
+ token_address = Web3.to_checksum_address(token_address)
1380
+ contract = w3.eth.contract(address=token_address, abi=ERC20_ABI)
1381
+ balance = contract.functions.balanceOf(wallet_address).call()
1382
+
1383
+ return balance / (10**decimals)
@@ -39,6 +39,7 @@ MULTISIG_REDEMPTION_RECORDS_QUERY: str
39
39
  COSMWASM_CONTRACT_QUERY: str
40
40
  CHANNELS_SUMMARY_QUERY_BY_HOST: str
41
41
  CHANNELS_SUMMARY_QUERY: str
42
+ ERC20_ABI: Incomplete
42
43
  requests_session: Incomplete
43
44
  retries: Incomplete
44
45
 
@@ -95,4 +96,4 @@ def get_host_zone_channels(chain_id: str) -> dict[str, Any]: ...
95
96
  def query_wasm_contract(contract_address: str, query_msg: dict, api_endpoint: str, block_height: int = 0) -> dict: ...
96
97
  def get_module_accounts(api_endpoint: str = ...) -> list[dict]: ...
97
98
  def query_evm_method(method: str, params: list[str], rpc_endpoint: str) -> str: ...
98
- def get_evm_balance(address: str, rpc_endpoint: str) -> int: ...
99
+ def get_evm_balance(address: str, rpc_endpoint: str, token_address: str | None = None, decimals: int = 16) -> int: ...
@@ -41,6 +41,7 @@ MULTISIG_REDEMPTION_RECORDS_QUERY: str
41
41
  COSMWASM_CONTRACT_QUERY: str
42
42
  CHANNELS_SUMMARY_QUERY_BY_HOST: str
43
43
  CHANNELS_SUMMARY_QUERY: str
44
+ ERC20_ABI: Incomplete
44
45
  requests_session: Incomplete
45
46
  retries: Incomplete
46
47
 
@@ -137,4 +138,4 @@ def get_host_zone_channels(chain_id: str) -> dict[str, Any]: ...
137
138
  def query_wasm_contract(contract_address: str, query_msg: dict, api_endpoint: str, block_height: int = 0) -> dict: ...
138
139
  def get_module_accounts(api_endpoint: str = ...) -> list[dict]: ...
139
140
  def query_evm_method(method: str, params: list[str], rpc_endpoint: str) -> str: ...
140
- def get_evm_balance(address: str, rpc_endpoint: str) -> int: ...
141
+ def get_evm_balance(address: str, rpc_endpoint: str, token_address: str | None = None, decimals: int = 16) -> int: ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strideutils
3
- Version: 0.8.7
3
+ Version: 0.8.8
4
4
  Summary: Utility functions for monitoring the Stride blockchain
5
5
  Author-email: Stride Labs <hello@stridelabs.co>
6
6
  License: MIT License
@@ -44,6 +44,7 @@ Requires-Dist: python-dotenv==1.0.1
44
44
  Requires-Dist: pyyaml>=6.0.1
45
45
  Requires-Dist: requests>=2.32.3
46
46
  Requires-Dist: pycryptodome>=3.20.0
47
+ Requires-Dist: web3==7.6.1
47
48
  Provides-Extra: dev
48
49
  Requires-Dist: pytest>=8.1.1; extra == "dev"
49
50
  Requires-Dist: mypy>=1.10.0; extra == "dev"
@@ -14,6 +14,7 @@ python-dotenv==1.0.1
14
14
  pyyaml>=6.0.1
15
15
  requests>=2.32.3
16
16
  pycryptodome>=3.20.0
17
+ web3==7.6.1
17
18
 
18
19
  [build]
19
20
  build>=1.2.2.post1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes