mm-sol 0.5.0__tar.gz → 0.5.2__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 (50) hide show
  1. {mm_sol-0.5.0 → mm_sol-0.5.2}/PKG-INFO +3 -2
  2. {mm_sol-0.5.0 → mm_sol-0.5.2}/pyproject.toml +3 -2
  3. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/balance.py +20 -32
  4. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cmd/example_cmd.py +2 -2
  5. mm_sol-0.5.2/src/mm_sol/cli/cmd/node_cmd.py +11 -0
  6. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/test_token.py +1 -13
  7. {mm_sol-0.5.0 → mm_sol-0.5.2}/uv.lock +35 -29
  8. mm_sol-0.5.0/src/mm_sol/cli/cmd/node_cmd.py +0 -9
  9. {mm_sol-0.5.0 → mm_sol-0.5.2}/.env.example +0 -0
  10. {mm_sol-0.5.0 → mm_sol-0.5.2}/.gitignore +0 -0
  11. {mm_sol-0.5.0 → mm_sol-0.5.2}/README.md +0 -0
  12. {mm_sol-0.5.0 → mm_sol-0.5.2}/dict.dic +0 -0
  13. {mm_sol-0.5.0 → mm_sol-0.5.2}/justfile +0 -0
  14. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/__init__.py +0 -0
  15. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/account.py +0 -0
  16. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/block.py +0 -0
  17. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/__init__.py +0 -0
  18. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/calcs.py +0 -0
  19. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cli.py +0 -0
  20. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cli_utils.py +0 -0
  21. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cmd/__init__.py +0 -0
  22. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cmd/balance_cmd.py +0 -0
  23. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cmd/balances_cmd.py +0 -0
  24. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cmd/transfer_cmd.py +0 -0
  25. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cmd/wallet/__init__.py +0 -0
  26. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cmd/wallet/keypair_cmd.py +0 -0
  27. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/cmd/wallet/mnemonic_cmd.py +0 -0
  28. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/examples/balances.toml +0 -0
  29. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/examples/transfer.toml +0 -0
  30. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/cli/validators.py +0 -0
  31. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/constants.py +0 -0
  32. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/converters.py +0 -0
  33. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/py.typed +0 -0
  34. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/rpc.py +0 -0
  35. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/solana_cli.py +0 -0
  36. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/token.py +0 -0
  37. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/transfer.py +0 -0
  38. {mm_sol-0.5.0 → mm_sol-0.5.2}/src/mm_sol/utils.py +0 -0
  39. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/__init__.py +0 -0
  40. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/cli/__init__.py +0 -0
  41. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/cli/cmd/__init__.py +0 -0
  42. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/cli/cmd/wallet/__init__.py +0 -0
  43. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/cli/cmd/wallet/test_keypair_cmd.py +0 -0
  44. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/cli/cmd/wallet/test_mnemonic_cmd.py +0 -0
  45. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/conftest.py +0 -0
  46. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/test_account.py +0 -0
  47. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/test_balance.py +0 -0
  48. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/test_client.py +0 -0
  49. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/test_converters.py +0 -0
  50. {mm_sol-0.5.0 → mm_sol-0.5.2}/tests/test_rpc.py +0 -0
@@ -1,10 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mm-sol
3
- Version: 0.5.0
3
+ Version: 0.5.2
4
4
  Requires-Python: >=3.12
5
5
  Requires-Dist: base58~=2.1.1
6
6
  Requires-Dist: jinja2>=3.1.5
7
- Requires-Dist: mm-crypto-utils>=0.2.3
7
+ Requires-Dist: mm-crypto-utils>=0.2.6
8
8
  Requires-Dist: mnemonic==0.21
9
9
  Requires-Dist: solana~=0.36.5
10
+ Requires-Dist: solders~=0.23.0
10
11
  Requires-Dist: typer>=0.15.1
@@ -1,11 +1,12 @@
1
1
  [project]
2
2
  name = "mm-sol"
3
- version = "0.5.0"
3
+ version = "0.5.2"
4
4
  description = ""
5
5
  requires-python = ">=3.12"
6
6
  dependencies = [
7
- "mm-crypto-utils>=0.2.3",
7
+ "mm-crypto-utils>=0.2.6",
8
8
  "solana~=0.36.5",
9
+ "solders~=0.23.0",
9
10
  "base58~=2.1.1",
10
11
  "mnemonic==0.21",
11
12
  "typer>=0.15.1",
@@ -2,8 +2,10 @@ import httpx
2
2
  from mm_crypto_utils import Nodes, Proxies, random_node, random_proxy
3
3
  from mm_std import Err, Ok, Result
4
4
  from solana.exceptions import SolanaRpcException
5
- from solana.rpc.types import TokenAccountOpts
5
+ from solana.rpc.core import RPCException
6
6
  from solders.pubkey import Pubkey
7
+ from solders.rpc.errors import InvalidParamsMessage
8
+ from spl.token.instructions import get_associated_token_address
7
9
 
8
10
  from mm_sol import rpc
9
11
  from mm_sol.utils import get_client
@@ -31,42 +33,32 @@ def get_token_balance(
31
33
  token_account: str | None = None,
32
34
  timeout: float = 10,
33
35
  proxy: str | None = None,
34
- no_token_accounts_return_zero: bool = True,
35
36
  ) -> Result[int]:
36
- data: list[object] = []
37
37
  try:
38
38
  client = get_client(node, proxy=proxy, timeout=timeout)
39
- if token_account:
40
- res_balance = client.get_token_account_balance(Pubkey.from_string(token_account))
41
- data.append(res_balance)
42
- return Ok(int(res_balance.value.amount))
39
+ if not token_account:
40
+ token_account = str(
41
+ get_associated_token_address(Pubkey.from_string(owner_address), Pubkey.from_string(token_mint_address))
42
+ )
43
43
 
44
- res_accounts = client.get_token_accounts_by_owner(
45
- Pubkey.from_string(owner_address),
46
- TokenAccountOpts(mint=Pubkey.from_string(token_mint_address)),
47
- )
48
- data.append(res_accounts)
44
+ res = client.get_token_account_balance(Pubkey.from_string(token_account))
49
45
 
50
- if no_token_accounts_return_zero and not res_accounts.value:
46
+ # Sometimes it not raise an error, but it returns this :(
47
+ if isinstance(res, InvalidParamsMessage) and "could not find account" in res.message:
51
48
  return Ok(0)
52
- if not res_accounts.value:
53
- return Err("no_token_accounts")
54
-
55
- token_accounts = [a.pubkey for a in res_accounts.value]
56
- balances = []
57
- for token_account_ in token_accounts:
58
- res = client.get_token_account_balance(token_account_)
59
- data.append(res)
60
- if res.value: # type:ignore[truthy-bool]
61
- balances.append(int(res.value.amount))
62
-
63
- return Ok(sum(balances))
49
+ return Ok(int(res.value.amount), data=res)
50
+ except RPCException as e:
51
+ if len(e.args) > 1:
52
+ s = e.args[0]
53
+ if isinstance(s, InvalidParamsMessage) and "could not find account" in s.message:
54
+ return Ok(0)
55
+ return Err(e)
64
56
  except httpx.HTTPStatusError as e:
65
- return Err(f"http error: {e}", data=data)
57
+ return Err(f"http error: {e}")
66
58
  except SolanaRpcException as e:
67
- return Err(e.error_msg, data=data)
59
+ return Err(e.error_msg)
68
60
  except Exception as e:
69
- return Err(e, data=data)
61
+ return Err(e)
70
62
 
71
63
 
72
64
  def get_token_balance_with_retries(
@@ -77,7 +69,6 @@ def get_token_balance_with_retries(
77
69
  token_account: str | None = None,
78
70
  timeout: float = 10,
79
71
  proxies: Proxies = None,
80
- no_token_accounts_return_zero: bool = True,
81
72
  ) -> Result[int]:
82
73
  res: Result[int] = Err("not started yet")
83
74
  for _ in range(retries):
@@ -88,11 +79,8 @@ def get_token_balance_with_retries(
88
79
  token_account,
89
80
  timeout=timeout,
90
81
  proxy=random_proxy(proxies),
91
- no_token_accounts_return_zero=no_token_accounts_return_zero,
92
82
  )
93
83
  if res.is_ok():
94
84
  return res
95
- if isinstance(res, Err) and res.err == "no_token_accounts":
96
- return res
97
85
 
98
86
  return res
@@ -1,8 +1,8 @@
1
1
  from pathlib import Path
2
2
 
3
- from mm_std import print_plain
3
+ from mm_std import pretty_print_toml
4
4
 
5
5
 
6
6
  def run(module: str) -> None:
7
7
  example_file = Path(Path(__file__).parent.absolute(), "../examples", f"{module}.toml")
8
- print_plain(example_file.read_text())
8
+ pretty_print_toml(example_file.read_text())
@@ -0,0 +1,11 @@
1
+ from mm_std import print_json
2
+
3
+ from mm_sol import rpc
4
+ from mm_sol.cli import cli_utils
5
+
6
+
7
+ def run(urls: list[str], proxy: str | None) -> None:
8
+ result = {}
9
+ for url in [cli_utils.public_rpc_url(u) for u in urls]:
10
+ result[url] = rpc.get_block_height(url, proxy=proxy, timeout=10).ok_or_err()
11
+ print_json(data=result)
@@ -10,19 +10,7 @@ def test_get_balance(mainnet_node, usdt_token_address, usdt_owner_address, proxi
10
10
  assert res.unwrap() > 0
11
11
 
12
12
 
13
- def test_get_balance_no_tokens_account_1(mainnet_node, usdt_token_address, proxies):
14
- res = mm_sol.balance.get_token_balance_with_retries(
15
- mainnet_node,
16
- generate_account().public_key,
17
- usdt_token_address,
18
- proxies=proxies,
19
- no_token_accounts_return_zero=False,
20
- retries=5,
21
- )
22
- assert res.err == "no_token_accounts"
23
-
24
-
25
- def test_get_balance_no_tokens_account_2(mainnet_node, usdt_token_address, proxies):
13
+ def test_get_balance_no_tokens_account(mainnet_node, usdt_token_address, proxies):
26
14
  res = mm_sol.balance.get_token_balance_with_retries(
27
15
  mainnet_node, generate_account().public_key, usdt_token_address, proxies=proxies, retries=5
28
16
  )
@@ -196,33 +196,37 @@ wheels = [
196
196
 
197
197
  [[package]]
198
198
  name = "cryptography"
199
- version = "44.0.0"
199
+ version = "44.0.1"
200
200
  source = { registry = "https://pypi.org/simple" }
201
201
  dependencies = [
202
202
  { name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
203
203
  ]
204
- sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 }
205
- wheels = [
206
- { url = "https://files.pythonhosted.org/packages/55/09/8cc67f9b84730ad330b3b72cf867150744bf07ff113cda21a15a1c6d2c7c/cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", size = 6541833 },
207
- { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 },
208
- { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 },
209
- { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 },
210
- { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 },
211
- { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 },
212
- { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 },
213
- { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 },
214
- { url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 },
215
- { url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 },
216
- { url = "https://files.pythonhosted.org/packages/11/18/61e52a3d28fc1514a43b0ac291177acd1b4de00e9301aaf7ef867076ff8a/cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", size = 6542801 },
217
- { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 },
218
- { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 },
219
- { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 },
220
- { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 },
221
- { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 },
222
- { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 },
223
- { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 },
224
- { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 },
225
- { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 },
204
+ sdist = { url = "https://files.pythonhosted.org/packages/c7/67/545c79fe50f7af51dbad56d16b23fe33f63ee6a5d956b3cb68ea110cbe64/cryptography-44.0.1.tar.gz", hash = "sha256:f51f5705ab27898afda1aaa430f34ad90dc117421057782022edf0600bec5f14", size = 710819 }
205
+ wheels = [
206
+ { url = "https://files.pythonhosted.org/packages/72/27/5e3524053b4c8889da65cf7814a9d0d8514a05194a25e1e34f46852ee6eb/cryptography-44.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf688f615c29bfe9dfc44312ca470989279f0e94bb9f631f85e3459af8efc009", size = 6642022 },
207
+ { url = "https://files.pythonhosted.org/packages/34/b9/4d1fa8d73ae6ec350012f89c3abfbff19fc95fe5420cf972e12a8d182986/cryptography-44.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7c7e2d71d908dc0f8d2027e1604102140d84b155e658c20e8ad1304317691f", size = 3943865 },
208
+ { url = "https://files.pythonhosted.org/packages/6e/57/371a9f3f3a4500807b5fcd29fec77f418ba27ffc629d88597d0d1049696e/cryptography-44.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887143b9ff6bad2b7570da75a7fe8bbf5f65276365ac259a5d2d5147a73775f2", size = 4162562 },
209
+ { url = "https://files.pythonhosted.org/packages/c5/1d/5b77815e7d9cf1e3166988647f336f87d5634a5ccecec2ffbe08ef8dd481/cryptography-44.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:322eb03ecc62784536bc173f1483e76747aafeb69c8728df48537eb431cd1911", size = 3951923 },
210
+ { url = "https://files.pythonhosted.org/packages/28/01/604508cd34a4024467cd4105887cf27da128cba3edd435b54e2395064bfb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:21377472ca4ada2906bc313168c9dc7b1d7ca417b63c1c3011d0c74b7de9ae69", size = 3685194 },
211
+ { url = "https://files.pythonhosted.org/packages/c6/3d/d3c55d4f1d24580a236a6753902ef6d8aafd04da942a1ee9efb9dc8fd0cb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:df978682c1504fc93b3209de21aeabf2375cb1571d4e61907b3e7a2540e83026", size = 4187790 },
212
+ { url = "https://files.pythonhosted.org/packages/ea/a6/44d63950c8588bfa8594fd234d3d46e93c3841b8e84a066649c566afb972/cryptography-44.0.1-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:eb3889330f2a4a148abead555399ec9a32b13b7c8ba969b72d8e500eb7ef84cd", size = 3951343 },
213
+ { url = "https://files.pythonhosted.org/packages/c1/17/f5282661b57301204cbf188254c1a0267dbd8b18f76337f0a7ce1038888c/cryptography-44.0.1-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8e6a85a93d0642bd774460a86513c5d9d80b5c002ca9693e63f6e540f1815ed0", size = 4187127 },
214
+ { url = "https://files.pythonhosted.org/packages/f3/68/abbae29ed4f9d96596687f3ceea8e233f65c9645fbbec68adb7c756bb85a/cryptography-44.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6f76fdd6fd048576a04c5210d53aa04ca34d2ed63336d4abd306d0cbe298fddf", size = 4070666 },
215
+ { url = "https://files.pythonhosted.org/packages/0f/10/cf91691064a9e0a88ae27e31779200b1505d3aee877dbe1e4e0d73b4f155/cryptography-44.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6c8acf6f3d1f47acb2248ec3ea261171a671f3d9428e34ad0357148d492c7864", size = 4288811 },
216
+ { url = "https://files.pythonhosted.org/packages/38/78/74ea9eb547d13c34e984e07ec8a473eb55b19c1451fe7fc8077c6a4b0548/cryptography-44.0.1-cp37-abi3-win32.whl", hash = "sha256:24979e9f2040c953a94bf3c6782e67795a4c260734e5264dceea65c8f4bae64a", size = 2771882 },
217
+ { url = "https://files.pythonhosted.org/packages/cf/6c/3907271ee485679e15c9f5e93eac6aa318f859b0aed8d369afd636fafa87/cryptography-44.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:fd0ee90072861e276b0ff08bd627abec29e32a53b2be44e41dbcdf87cbee2b00", size = 3206989 },
218
+ { url = "https://files.pythonhosted.org/packages/9f/f1/676e69c56a9be9fd1bffa9bc3492366901f6e1f8f4079428b05f1414e65c/cryptography-44.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:a2d8a7045e1ab9b9f803f0d9531ead85f90c5f2859e653b61497228b18452008", size = 6643714 },
219
+ { url = "https://files.pythonhosted.org/packages/ba/9f/1775600eb69e72d8f9931a104120f2667107a0ee478f6ad4fe4001559345/cryptography-44.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8272f257cf1cbd3f2e120f14c68bff2b6bdfcc157fafdee84a1b795efd72862", size = 3943269 },
220
+ { url = "https://files.pythonhosted.org/packages/25/ba/e00d5ad6b58183829615be7f11f55a7b6baa5a06910faabdc9961527ba44/cryptography-44.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8d181e90a777b63f3f0caa836844a1182f1f265687fac2115fcf245f5fbec3", size = 4166461 },
221
+ { url = "https://files.pythonhosted.org/packages/b3/45/690a02c748d719a95ab08b6e4decb9d81e0ec1bac510358f61624c86e8a3/cryptography-44.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:436df4f203482f41aad60ed1813811ac4ab102765ecae7a2bbb1dbb66dcff5a7", size = 3950314 },
222
+ { url = "https://files.pythonhosted.org/packages/e6/50/bf8d090911347f9b75adc20f6f6569ed6ca9b9bff552e6e390f53c2a1233/cryptography-44.0.1-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4f422e8c6a28cf8b7f883eb790695d6d45b0c385a2583073f3cec434cc705e1a", size = 3686675 },
223
+ { url = "https://files.pythonhosted.org/packages/e1/e7/cfb18011821cc5f9b21efb3f94f3241e3a658d267a3bf3a0f45543858ed8/cryptography-44.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:72198e2b5925155497a5a3e8c216c7fb3e64c16ccee11f0e7da272fa93b35c4c", size = 4190429 },
224
+ { url = "https://files.pythonhosted.org/packages/07/ef/77c74d94a8bfc1a8a47b3cafe54af3db537f081742ee7a8a9bd982b62774/cryptography-44.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a46a89ad3e6176223b632056f321bc7de36b9f9b93b2cc1cccf935a3849dc62", size = 3950039 },
225
+ { url = "https://files.pythonhosted.org/packages/6d/b9/8be0ff57c4592382b77406269b1e15650c9f1a167f9e34941b8515b97159/cryptography-44.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:53f23339864b617a3dfc2b0ac8d5c432625c80014c25caac9082314e9de56f41", size = 4189713 },
226
+ { url = "https://files.pythonhosted.org/packages/78/e1/4b6ac5f4100545513b0847a4d276fe3c7ce0eacfa73e3b5ebd31776816ee/cryptography-44.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:888fcc3fce0c888785a4876ca55f9f43787f4c5c1cc1e2e0da71ad481ff82c5b", size = 4071193 },
227
+ { url = "https://files.pythonhosted.org/packages/3d/cb/afff48ceaed15531eab70445abe500f07f8f96af2bb35d98af6bfa89ebd4/cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00918d859aa4e57db8299607086f793fa7813ae2ff5a4637e318a25ef82730f7", size = 4289566 },
228
+ { url = "https://files.pythonhosted.org/packages/30/6f/4eca9e2e0f13ae459acd1ca7d9f0257ab86e68f44304847610afcb813dc9/cryptography-44.0.1-cp39-abi3-win32.whl", hash = "sha256:9b336599e2cb77b1008cb2ac264b290803ec5e8e89d618a5e978ff5eb6f715d9", size = 2772371 },
229
+ { url = "https://files.pythonhosted.org/packages/d2/05/5533d30f53f10239616a357f080892026db2d550a40c393d0a8a7af834a9/cryptography-44.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:e403f7f766ded778ecdb790da786b418a9f2394f36e8cc8b796cc056ab05f44f", size = 3207303 },
226
230
  ]
227
231
 
228
232
  [[package]]
@@ -468,19 +472,19 @@ wheels = [
468
472
 
469
473
  [[package]]
470
474
  name = "mm-crypto-utils"
471
- version = "0.2.3"
475
+ version = "0.2.6"
472
476
  source = { registry = "https://pypi.org/simple" }
473
477
  dependencies = [
474
478
  { name = "loguru" },
475
479
  { name = "mm-std" },
476
480
  ]
477
481
  wheels = [
478
- { url = "https://files.pythonhosted.org/packages/78/dd/3cb0ddc4ab14a78a0e828fd1f7ca97298be8eff67b53b6198853e2013976/mm_crypto_utils-0.2.3-py3-none-any.whl", hash = "sha256:33ca42ef22c847c6f92973d7c799460926ee5c5bd7c872d3c7d19f31377e8833", size = 8257 },
482
+ { url = "https://files.pythonhosted.org/packages/d2/2a/72236eb60cb007d472fa6be72a98abf6b8273df3158a218cc5f412f86497/mm_crypto_utils-0.2.6-py3-none-any.whl", hash = "sha256:ef738203e2863570308d0fc5fee8f05c469d3f7df905dcdfd092d84690b14c9c", size = 8269 },
479
483
  ]
480
484
 
481
485
  [[package]]
482
486
  name = "mm-sol"
483
- version = "0.5.0"
487
+ version = "0.5.2"
484
488
  source = { editable = "." }
485
489
  dependencies = [
486
490
  { name = "base58" },
@@ -488,6 +492,7 @@ dependencies = [
488
492
  { name = "mm-crypto-utils" },
489
493
  { name = "mnemonic" },
490
494
  { name = "solana" },
495
+ { name = "solders" },
491
496
  { name = "typer" },
492
497
  ]
493
498
 
@@ -505,9 +510,10 @@ dev = [
505
510
  requires-dist = [
506
511
  { name = "base58", specifier = "~=2.1.1" },
507
512
  { name = "jinja2", specifier = ">=3.1.5" },
508
- { name = "mm-crypto-utils", specifier = ">=0.2.3" },
513
+ { name = "mm-crypto-utils", specifier = ">=0.2.6" },
509
514
  { name = "mnemonic", specifier = "==0.21" },
510
515
  { name = "solana", specifier = "~=0.36.5" },
516
+ { name = "solders", specifier = "~=0.23.0" },
511
517
  { name = "typer", specifier = ">=0.15.1" },
512
518
  ]
513
519
 
@@ -523,7 +529,7 @@ dev = [
523
529
 
524
530
  [[package]]
525
531
  name = "mm-std"
526
- version = "0.2.1"
532
+ version = "0.3.2"
527
533
  source = { registry = "https://pypi.org/simple" }
528
534
  dependencies = [
529
535
  { name = "cryptography" },
@@ -535,7 +541,7 @@ dependencies = [
535
541
  { name = "rich" },
536
542
  ]
537
543
  wheels = [
538
- { url = "https://files.pythonhosted.org/packages/f3/ef/cb423cc357cc116313fcd97e9d0ff673234f5f1725f4a73929ced27b1d00/mm_std-0.2.1-py3-none-any.whl", hash = "sha256:71fa84f2fa897901c925614327123e8d0bc6ae61ff7873479dc9a53889442237", size = 14620 },
544
+ { url = "https://files.pythonhosted.org/packages/c0/9a/19f88e047426a52de2f8262d654ca8f20b6b9f15085db7dca6850b7d89d9/mm_std-0.3.2-py3-none-any.whl", hash = "sha256:bf479b1810c887b41aa8b4ad3b6d59d2002703a26b04499516af8e2d94351c86", size = 14709 },
539
545
  ]
540
546
 
541
547
  [[package]]
@@ -1,9 +0,0 @@
1
- from mm_std import print_json
2
-
3
- from mm_sol import rpc
4
-
5
-
6
- def run(urls: list[str], proxy: str | None) -> None:
7
- for url in urls:
8
- res = rpc.get_block_height(url, proxy=proxy, timeout=10)
9
- print_json({url: res.ok_or_err()})
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes