mm-btc 0.1.2__tar.gz → 0.2.0__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.
- mm_btc-0.2.0/PKG-INFO +9 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/pyproject.toml +10 -12
- mm_btc-0.2.0/src/mm_btc/wallet.py +85 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/tests/test_wallet.py +5 -4
- {mm_btc-0.1.2 → mm_btc-0.2.0}/uv.lock +185 -157
- mm_btc-0.1.2/PKG-INFO +0 -9
- mm_btc-0.1.2/src/mm_btc/cli/cli.py +0 -76
- mm_btc-0.1.2/src/mm_btc/cli/cli_utils.py +0 -5
- mm_btc-0.1.2/src/mm_btc/cli/cmd/__init__.py +0 -0
- mm_btc-0.1.2/src/mm_btc/cli/cmd/address_cmd.py +0 -10
- mm_btc-0.1.2/src/mm_btc/cli/cmd/create_tx_cmd.py +0 -27
- mm_btc-0.1.2/src/mm_btc/cli/cmd/decode_tx_cmd.py +0 -8
- mm_btc-0.1.2/src/mm_btc/cli/cmd/mnemonic_cmd.py +0 -48
- mm_btc-0.1.2/src/mm_btc/cli/cmd/utxo_cmd.py +0 -11
- mm_btc-0.1.2/src/mm_btc/wallet.py +0 -66
- mm_btc-0.1.2/tests/__init__.py +0 -0
- mm_btc-0.1.2/tests/cli/cmd/test_mnemonic_cmd.py +0 -22
- {mm_btc-0.1.2 → mm_btc-0.2.0}/.env.example +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/.gitignore +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/README.txt +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/justfile +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/src/mm_btc/__init__.py +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/src/mm_btc/blockstream.py +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/src/mm_btc/py.typed +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/src/mm_btc/tx.py +0 -0
- {mm_btc-0.1.2/src/mm_btc/cli → mm_btc-0.2.0/tests}/__init__.py +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/tests/conftest.py +0 -0
- {mm_btc-0.1.2 → mm_btc-0.2.0}/tests/test_blockstream.py +0 -0
mm_btc-0.2.0/PKG-INFO
ADDED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mm-btc"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.2.0"
|
|
4
4
|
description = ""
|
|
5
5
|
requires-python = ">=3.12"
|
|
6
6
|
dependencies = [
|
|
7
|
-
"mm-std~=0.1.
|
|
8
|
-
"hdwallet~=
|
|
7
|
+
"mm-std~=0.1.9",
|
|
8
|
+
"hdwallet~=3.2.0",
|
|
9
9
|
"bit~=0.8.0",
|
|
10
|
-
"bitcoinlib~=0.7.
|
|
11
|
-
"
|
|
10
|
+
"bitcoinlib~=0.7.1",
|
|
11
|
+
"mnemonic>=0.21",
|
|
12
12
|
]
|
|
13
|
-
[project.scripts]
|
|
14
|
-
mm-btc = "mm_btc.cli.cli:app"
|
|
15
13
|
|
|
16
14
|
[build-system]
|
|
17
15
|
requires = ["hatchling"]
|
|
@@ -19,13 +17,13 @@ build-backend = "hatchling.build"
|
|
|
19
17
|
|
|
20
18
|
[tool.uv]
|
|
21
19
|
dev-dependencies = [
|
|
22
|
-
"pytest~=8.3.
|
|
20
|
+
"pytest~=8.3.4",
|
|
23
21
|
"pytest-xdist~=3.6.1",
|
|
24
|
-
"ruff~=0.
|
|
22
|
+
"ruff~=0.8.4",
|
|
25
23
|
"pip-audit~=2.7.3",
|
|
26
|
-
"bandit~=1.
|
|
27
|
-
"mypy~=1.
|
|
28
|
-
"types-PyYAML~=6.0.12.
|
|
24
|
+
"bandit~=1.8.0",
|
|
25
|
+
"mypy~=1.14.0",
|
|
26
|
+
"types-PyYAML~=6.0.12.20241221",
|
|
29
27
|
]
|
|
30
28
|
|
|
31
29
|
[tool.mypy]
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from enum import Enum, unique
|
|
3
|
+
|
|
4
|
+
from hdwallet import HDWallet
|
|
5
|
+
from hdwallet.cryptocurrencies import Bitcoin
|
|
6
|
+
from hdwallet.derivations import CustomDerivation
|
|
7
|
+
from hdwallet.hds import BIP32HD
|
|
8
|
+
from hdwallet.mnemonics import BIP39Mnemonic
|
|
9
|
+
from mnemonic import Mnemonic
|
|
10
|
+
|
|
11
|
+
BIP44_MAINNET_PATH = "m/44'/0'/0'/0"
|
|
12
|
+
BIP44_TESTNET_PATH = "m/44'/1'/0'/0"
|
|
13
|
+
BIP84_MAINNET_PATH = "m/84'/0'/0'/0"
|
|
14
|
+
BIP84_TESTNET_PATH = "m/84'/1'/0'/0"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass
|
|
18
|
+
class Account:
|
|
19
|
+
address: str
|
|
20
|
+
private: str
|
|
21
|
+
wif: str
|
|
22
|
+
path: str
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@unique
|
|
26
|
+
class AddressType(str, Enum):
|
|
27
|
+
P2PKH = "P2PKH" # Pay to Public Key Hash
|
|
28
|
+
P2SH = "P2SH" # Pay to Script Hash
|
|
29
|
+
P2TR = "P2TR" # Taproot
|
|
30
|
+
P2WPKH = "P2WPKH" # Native SegWit
|
|
31
|
+
P2WPKH_IN_P2SH = "P2WPKH-In-P2SH"
|
|
32
|
+
P2WSH = "P2WSH" # Native SegWit
|
|
33
|
+
P2WSH_IN_P2SH = "P2WSH-In-P2SH"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def generate_mnemonic(language: str = "english", words: int = 12) -> str:
|
|
37
|
+
return Mnemonic(language).generate(strength=mnemonic_words_to_strenght(words))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def derive_accounts(mnemonic: str, passphrase: str, path_prefix: str, address_type: AddressType, limit: int) -> list[Account]:
|
|
41
|
+
coin = Bitcoin
|
|
42
|
+
if path_prefix.startswith("m/84'/1'"):
|
|
43
|
+
network = coin.NETWORKS.TESTNET
|
|
44
|
+
elif path_prefix.startswith("m/44'/1'"):
|
|
45
|
+
network = coin.NETWORKS.TESTNET
|
|
46
|
+
elif path_prefix.startswith("m/84'/0'"):
|
|
47
|
+
network = coin.NETWORKS.MAINNET
|
|
48
|
+
elif path_prefix.startswith("m/44'/0'"):
|
|
49
|
+
network = coin.NETWORKS.MAINNET
|
|
50
|
+
else:
|
|
51
|
+
raise ValueError("Invalid path")
|
|
52
|
+
|
|
53
|
+
wallet = HDWallet(cryptocurrency=coin, network=network, hd=BIP32HD, passphrase=passphrase).from_mnemonic(
|
|
54
|
+
BIP39Mnemonic(mnemonic)
|
|
55
|
+
)
|
|
56
|
+
wallet.clean_derivation()
|
|
57
|
+
|
|
58
|
+
accounts = []
|
|
59
|
+
for index_path in range(limit):
|
|
60
|
+
wallet.clean_derivation()
|
|
61
|
+
path = f"{path_prefix}/{index_path}"
|
|
62
|
+
w = wallet.from_derivation(derivation=CustomDerivation(path=path))
|
|
63
|
+
accounts.append(Account(address=w.address(address_type), private=w.private_key(), wif=w.wif(), path=path))
|
|
64
|
+
w.clean_derivation()
|
|
65
|
+
|
|
66
|
+
return accounts
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def mnemonic_words_to_strenght(words: int) -> int:
|
|
70
|
+
if words == 12:
|
|
71
|
+
return 128
|
|
72
|
+
if words == 15:
|
|
73
|
+
return 160
|
|
74
|
+
if words == 18:
|
|
75
|
+
return 192
|
|
76
|
+
if words == 21:
|
|
77
|
+
return 224
|
|
78
|
+
if words == 24:
|
|
79
|
+
return 256
|
|
80
|
+
|
|
81
|
+
raise ValueError("Invalid words")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def is_testnet_address(address: str) -> bool:
|
|
85
|
+
return address.startswith(("m", "n", "tb1"))
|
|
@@ -3,6 +3,7 @@ from mm_btc.wallet import (
|
|
|
3
3
|
BIP44_TESTNET_PATH,
|
|
4
4
|
BIP84_MAINNET_PATH,
|
|
5
5
|
BIP84_TESTNET_PATH,
|
|
6
|
+
AddressType,
|
|
6
7
|
derive_accounts,
|
|
7
8
|
generate_mnemonic,
|
|
8
9
|
)
|
|
@@ -17,28 +18,28 @@ def test_generate_mnemonic():
|
|
|
17
18
|
|
|
18
19
|
def test_derive_accounts(mnemonic, passphrase):
|
|
19
20
|
# mainnet bip44
|
|
20
|
-
accs = derive_accounts(mnemonic, passphrase, BIP44_MAINNET_PATH, 2)
|
|
21
|
+
accs = derive_accounts(mnemonic, passphrase, BIP44_MAINNET_PATH, AddressType.P2PKH, 2)
|
|
21
22
|
assert accs[1].path == "m/44'/0'/0'/0/1"
|
|
22
23
|
assert accs[1].address == "13MJrGQq8RwLcGfdnY58666kCsZqevsadE"
|
|
23
24
|
assert accs[1].private == "0d5feb50af849f2ebcc0c83a4446ddbceefd7b0ceba437a57161fa37702d096e"
|
|
24
25
|
assert accs[1].wif == "Kwfi75WxsuaKnmxRUQDoEZDzKXkMC8E9Pzk3vVjEdPsJu1DXCFPv"
|
|
25
26
|
|
|
26
27
|
# mainnet bip84
|
|
27
|
-
accs = derive_accounts(mnemonic, passphrase, BIP84_MAINNET_PATH, 2)
|
|
28
|
+
accs = derive_accounts(mnemonic, passphrase, BIP84_MAINNET_PATH, AddressType.P2WPKH, 2)
|
|
28
29
|
assert accs[1].path == "m/84'/0'/0'/0/1"
|
|
29
30
|
assert accs[1].address == "bc1qszqeg6gfcmt8zurkeayes2895urnea2m54rt3w"
|
|
30
31
|
assert accs[1].private == "1cc57553f9e3e1b863693be92ac753f682f61f1a2dede2ceff97262027635334"
|
|
31
32
|
assert accs[1].wif == "KxBdzQTQduYKoec1FWgwMDF9R1a4UdQp3ezyhjniw4W2k54Cb6gE"
|
|
32
33
|
|
|
33
34
|
# testnet bip44
|
|
34
|
-
accs = derive_accounts(mnemonic, passphrase, BIP44_TESTNET_PATH, 2)
|
|
35
|
+
accs = derive_accounts(mnemonic, passphrase, BIP44_TESTNET_PATH, AddressType.P2PKH, 2)
|
|
35
36
|
assert accs[1].path == "m/44'/1'/0'/0/1"
|
|
36
37
|
assert accs[1].address == "miRfXh2aH6pjhdo5EoBt4RRdAipR88dcV3"
|
|
37
38
|
assert accs[1].private == "3a2e8fc45c75ab8a7cdafacf7c77c941f8eebc813ee2f0e17ee86e7ac8584b3a"
|
|
38
39
|
assert accs[1].wif == "cPXoLA4cRKxeht4iH6ZsCDQxPspFi8SEieZNTKDzGgog94Zg5Y64"
|
|
39
40
|
|
|
40
41
|
# testnet bip84
|
|
41
|
-
accs = derive_accounts(mnemonic, passphrase, BIP84_TESTNET_PATH, 2)
|
|
42
|
+
accs = derive_accounts(mnemonic, passphrase, BIP84_TESTNET_PATH, AddressType.P2WPKH, 2)
|
|
42
43
|
assert accs[1].path == "m/84'/1'/0'/0/1"
|
|
43
44
|
assert accs[1].address == "tb1qp36pk9w408pgfpwn5myxwurr3fhzryn0lpyah2"
|
|
44
45
|
assert accs[1].private == "150fd20e4cb377ae57b43fed59ca2765a9f5d91a20640a4cfdf43ceb5403d48c"
|
|
@@ -38,17 +38,17 @@ wheels = [
|
|
|
38
38
|
|
|
39
39
|
[[package]]
|
|
40
40
|
name = "bandit"
|
|
41
|
-
version = "1.
|
|
41
|
+
version = "1.8.0"
|
|
42
42
|
source = { registry = "https://pypi.org/simple" }
|
|
43
43
|
dependencies = [
|
|
44
|
-
{ name = "colorama", marker = "
|
|
44
|
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
45
45
|
{ name = "pyyaml" },
|
|
46
46
|
{ name = "rich" },
|
|
47
47
|
{ name = "stevedore" },
|
|
48
48
|
]
|
|
49
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
49
|
+
sdist = { url = "https://files.pythonhosted.org/packages/57/c3/bea54f22cdc8224f0ace18b2cf86c6adf7010285d0ed51b703af9910c5b2/bandit-1.8.0.tar.gz", hash = "sha256:b5bfe55a095abd9fe20099178a7c6c060f844bfd4fe4c76d28e35e4c52b9d31e", size = 4228600 }
|
|
50
50
|
wheels = [
|
|
51
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
51
|
+
{ url = "https://files.pythonhosted.org/packages/24/6b/a9f0574d05d63e7d8125cd02a52732adb6720a9b9f13c921386cb9cdb53e/bandit-1.8.0-py3-none-any.whl", hash = "sha256:b1a61d829c0968aed625381e426aa378904b996529d048f8d908fa28f6b13e38", size = 127035 },
|
|
52
52
|
]
|
|
53
53
|
|
|
54
54
|
[[package]]
|
|
@@ -75,19 +75,19 @@ wheels = [
|
|
|
75
75
|
|
|
76
76
|
[[package]]
|
|
77
77
|
name = "bitcoinlib"
|
|
78
|
-
version = "0.7.
|
|
78
|
+
version = "0.7.1"
|
|
79
79
|
source = { registry = "https://pypi.org/simple" }
|
|
80
80
|
dependencies = [
|
|
81
|
-
{ name = "ecdsa", marker = "
|
|
82
|
-
{ name = "fastecdsa", marker = "
|
|
81
|
+
{ name = "ecdsa", marker = "sys_platform == 'win32'" },
|
|
82
|
+
{ name = "fastecdsa", marker = "sys_platform != 'win32'" },
|
|
83
83
|
{ name = "numpy" },
|
|
84
84
|
{ name = "pycryptodome" },
|
|
85
85
|
{ name = "requests" },
|
|
86
86
|
{ name = "sqlalchemy" },
|
|
87
87
|
]
|
|
88
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
88
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d1/57/8f4058a292bc0a4f6031589f072dbc686acb18ec3bc177393a58570c0f62/bitcoinlib-0.7.1.tar.gz", hash = "sha256:f8caa1388dc57f79050ccda21628b2927ad3d60d20433299e35fc44c8986a767", size = 4193286 }
|
|
89
89
|
wheels = [
|
|
90
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
90
|
+
{ url = "https://files.pythonhosted.org/packages/35/28/9fc3a78e6651781325772bc6bd56bbedb6ec487717288d103794c8e2d9cb/bitcoinlib-0.7.1-py3-none-any.whl", hash = "sha256:f1874ed5f7ce6abc95728301feeb445743cc529f36348d41831d793c6c6f10b7", size = 4252668 },
|
|
91
91
|
]
|
|
92
92
|
|
|
93
93
|
[[package]]
|
|
@@ -117,6 +117,29 @@ filecache = [
|
|
|
117
117
|
{ name = "filelock" },
|
|
118
118
|
]
|
|
119
119
|
|
|
120
|
+
[[package]]
|
|
121
|
+
name = "cbor2"
|
|
122
|
+
version = "5.6.5"
|
|
123
|
+
source = { registry = "https://pypi.org/simple" }
|
|
124
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e4/aa/ba55b47d51d27911981a18743b4d3cebfabccbb0598c09801b734cec4184/cbor2-5.6.5.tar.gz", hash = "sha256:b682820677ee1dbba45f7da11898d2720f92e06be36acec290867d5ebf3d7e09", size = 100886 }
|
|
125
|
+
wheels = [
|
|
126
|
+
{ url = "https://files.pythonhosted.org/packages/57/af/84ced14c541451696825b7b8ccbb7668f688372ad8ee74aaca4311e79672/cbor2-5.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e25c2aebc9db99af7190e2261168cdde8ed3d639ca06868e4f477cf3a228a8e9", size = 67553 },
|
|
127
|
+
{ url = "https://files.pythonhosted.org/packages/f2/d6/f63a840c68fed4de67d5441947af2dc695152cc488bb0e57312832fb923a/cbor2-5.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fde21ac1cf29336a31615a2c469a9cb03cf0add3ae480672d4d38cda467d07fc", size = 67569 },
|
|
128
|
+
{ url = "https://files.pythonhosted.org/packages/77/ac/5fb79db6e882ec29680f4a974d35c098020a1b4709cad077667a8c3f4676/cbor2-5.6.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8947c102cac79d049eadbd5e2ffb8189952890df7cbc3ee262bbc2f95b011a9", size = 276610 },
|
|
129
|
+
{ url = "https://files.pythonhosted.org/packages/cf/cb/70751377d94112001d46c311b5c40b45f34863dfa78a6bc71b71f40c8c7f/cbor2-5.6.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38886c41bebcd7dca57739439455bce759f1e4c551b511f618b8e9c1295b431b", size = 270004 },
|
|
130
|
+
{ url = "https://files.pythonhosted.org/packages/f1/90/08800367e920aef31b93bd7b0cd6fadcb3a3f2243f4ed77a0d1c76f22b99/cbor2-5.6.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae2b49226224e92851c333b91d83292ec62eba53a19c68a79890ce35f1230d70", size = 264913 },
|
|
131
|
+
{ url = "https://files.pythonhosted.org/packages/a8/9c/76b11a5ea7548bccb0dfef3e8fb3ede48bfeb39348f0c217519e0c40d33a/cbor2-5.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f2764804ffb6553283fc4afb10a280715905a4cea4d6dc7c90d3e89c4a93bc8d", size = 266751 },
|
|
132
|
+
{ url = "https://files.pythonhosted.org/packages/10/18/3866693a87c90cb12f7942e791d0f03a40ba44887dde7b7fc85319647efe/cbor2-5.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:a3ac50485cf67dfaab170a3e7b527630e93cb0a6af8cdaa403054215dff93adf", size = 66739 },
|
|
133
|
+
{ url = "https://files.pythonhosted.org/packages/2b/69/77e93caae71d1baee927c9762e702c464715d88073133052c74ecc9d37d4/cbor2-5.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f0d0a9c5aabd48ecb17acf56004a7542a0b8d8212be52f3102b8218284bd881e", size = 67647 },
|
|
134
|
+
{ url = "https://files.pythonhosted.org/packages/84/83/cb941d4fd10e4696b2c0f6fb2e3056d9a296e5765b2000a69e29a507f819/cbor2-5.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:61ceb77e6aa25c11c814d4fe8ec9e3bac0094a1f5bd8a2a8c95694596ea01e08", size = 67657 },
|
|
135
|
+
{ url = "https://files.pythonhosted.org/packages/5c/3f/e16a1e29994483c751b714cdf61d2956290b0b30e94690fa714a9f155c5c/cbor2-5.6.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97a7e409b864fecf68b2ace8978eb5df1738799a333ec3ea2b9597bfcdd6d7d2", size = 275863 },
|
|
136
|
+
{ url = "https://files.pythonhosted.org/packages/64/04/f64bda3eea649fe6644c59f13d0e1f4666d975ce305cadf13835233b2a26/cbor2-5.6.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f6d69f38f7d788b04c09ef2b06747536624b452b3c8b371ab78ad43b0296fab", size = 269131 },
|
|
137
|
+
{ url = "https://files.pythonhosted.org/packages/f4/8d/0d5ad3467f70578b032b3f52eb0f01f0327d5ae6b1f9e7d4d4e01a73aa95/cbor2-5.6.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f91e6d74fa6917df31f8757fdd0e154203b0dd0609ec53eb957016a2b474896a", size = 264728 },
|
|
138
|
+
{ url = "https://files.pythonhosted.org/packages/77/cb/9b4f7890325eaa374c21fcccfee61a099ccb9ea0bc0f606acf7495f9568c/cbor2-5.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5ce13a27ef8fddf643fc17a753fe34aa72b251d03c23da6a560c005dc171085b", size = 266314 },
|
|
139
|
+
{ url = "https://files.pythonhosted.org/packages/a8/cd/793dc041395609f5dd1edfdf0aecde504dc0fd35ed67eb3b2db79fb8ef4d/cbor2-5.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:54c72a3207bb2d4480c2c39dad12d7971ce0853a99e3f9b8d559ce6eac84f66f", size = 66792 },
|
|
140
|
+
{ url = "https://files.pythonhosted.org/packages/9b/ef/1c4698cac96d792005ef0611832f38eaee477c275ab4b02cbfc4daba7ad3/cbor2-5.6.5-py3-none-any.whl", hash = "sha256:3038523b8fc7de312bb9cdcbbbd599987e64307c4db357cd2030c472a6c7d468", size = 23752 },
|
|
141
|
+
]
|
|
142
|
+
|
|
120
143
|
[[package]]
|
|
121
144
|
name = "certifi"
|
|
122
145
|
version = "2024.8.30"
|
|
@@ -198,18 +221,6 @@ wheels = [
|
|
|
198
221
|
{ url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 },
|
|
199
222
|
]
|
|
200
223
|
|
|
201
|
-
[[package]]
|
|
202
|
-
name = "click"
|
|
203
|
-
version = "8.1.7"
|
|
204
|
-
source = { registry = "https://pypi.org/simple" }
|
|
205
|
-
dependencies = [
|
|
206
|
-
{ name = "colorama", marker = "platform_system == 'Windows'" },
|
|
207
|
-
]
|
|
208
|
-
sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 }
|
|
209
|
-
wheels = [
|
|
210
|
-
{ url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 },
|
|
211
|
-
]
|
|
212
|
-
|
|
213
224
|
[[package]]
|
|
214
225
|
name = "coincurve"
|
|
215
226
|
version = "20.0.0"
|
|
@@ -241,33 +252,41 @@ wheels = [
|
|
|
241
252
|
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
|
242
253
|
]
|
|
243
254
|
|
|
255
|
+
[[package]]
|
|
256
|
+
name = "crcmod"
|
|
257
|
+
version = "1.7"
|
|
258
|
+
source = { registry = "https://pypi.org/simple" }
|
|
259
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz", hash = "sha256:dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e", size = 89670 }
|
|
260
|
+
|
|
244
261
|
[[package]]
|
|
245
262
|
name = "cryptography"
|
|
246
|
-
version = "
|
|
263
|
+
version = "44.0.0"
|
|
247
264
|
source = { registry = "https://pypi.org/simple" }
|
|
248
265
|
dependencies = [
|
|
249
266
|
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
|
250
267
|
]
|
|
251
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
252
|
-
wheels = [
|
|
253
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
254
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
255
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
256
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
257
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
258
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
259
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
260
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
261
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
262
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
263
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
264
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
265
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
266
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
267
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
268
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
269
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
270
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
268
|
+
sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 }
|
|
269
|
+
wheels = [
|
|
270
|
+
{ 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 },
|
|
271
|
+
{ 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 },
|
|
272
|
+
{ 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 },
|
|
273
|
+
{ 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 },
|
|
274
|
+
{ 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 },
|
|
275
|
+
{ 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 },
|
|
276
|
+
{ 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 },
|
|
277
|
+
{ 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 },
|
|
278
|
+
{ url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 },
|
|
279
|
+
{ url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 },
|
|
280
|
+
{ 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 },
|
|
281
|
+
{ 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 },
|
|
282
|
+
{ 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 },
|
|
283
|
+
{ 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 },
|
|
284
|
+
{ 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 },
|
|
285
|
+
{ 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 },
|
|
286
|
+
{ 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 },
|
|
287
|
+
{ 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 },
|
|
288
|
+
{ url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 },
|
|
289
|
+
{ url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 },
|
|
271
290
|
]
|
|
272
291
|
|
|
273
292
|
[[package]]
|
|
@@ -306,6 +325,12 @@ wheels = [
|
|
|
306
325
|
{ url = "https://files.pythonhosted.org/packages/00/e7/ed3243b30d1bec41675b6394a1daae46349dc2b855cb83be846a5a918238/ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a", size = 149266 },
|
|
307
326
|
]
|
|
308
327
|
|
|
328
|
+
[[package]]
|
|
329
|
+
name = "ed25519-blake2b"
|
|
330
|
+
version = "1.4.1"
|
|
331
|
+
source = { registry = "https://pypi.org/simple" }
|
|
332
|
+
sdist = { url = "https://files.pythonhosted.org/packages/79/e5/03cc85b437e96c21ea705c0215b89e88a0802e72b4b07d452b5858b7a1d1/ed25519-blake2b-1.4.1.tar.gz", hash = "sha256:731e9f93cd1ac1a64649575f3519a99ffe0bb1e4cf7bf5f5f0be513a39df7363", size = 872471 }
|
|
333
|
+
|
|
309
334
|
[[package]]
|
|
310
335
|
name = "execnet"
|
|
311
336
|
version = "2.1.1"
|
|
@@ -390,17 +415,21 @@ wheels = [
|
|
|
390
415
|
|
|
391
416
|
[[package]]
|
|
392
417
|
name = "hdwallet"
|
|
393
|
-
version = "
|
|
418
|
+
version = "3.2.0"
|
|
394
419
|
source = { registry = "https://pypi.org/simple" }
|
|
395
420
|
dependencies = [
|
|
396
421
|
{ name = "base58" },
|
|
422
|
+
{ name = "cbor2" },
|
|
423
|
+
{ name = "coincurve" },
|
|
424
|
+
{ name = "crcmod" },
|
|
397
425
|
{ name = "ecdsa" },
|
|
398
|
-
{ name = "
|
|
426
|
+
{ name = "ed25519-blake2b" },
|
|
399
427
|
{ name = "pycryptodome" },
|
|
428
|
+
{ name = "pynacl" },
|
|
400
429
|
]
|
|
401
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
430
|
+
sdist = { url = "https://files.pythonhosted.org/packages/08/e7/68289fbde41b8fc6d34ee1d6f1c3fde00a9c9956c5bfc6e25fce53211a05/hdwallet-3.2.0.tar.gz", hash = "sha256:e0c39fc89a885d5f598279008837ee4d13f8188bf8adbcdc646c9502b08b487f", size = 398282 }
|
|
402
431
|
wheels = [
|
|
403
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
432
|
+
{ url = "https://files.pythonhosted.org/packages/bc/1d/8ae16efaf6a680bf44e41e9dff3de0d397c2e83263c5f9137f00a7b021aa/hdwallet-3.2.0-py3-none-any.whl", hash = "sha256:421d3927c217d7f9fc411b3ca51c43db1c92ac498011389762489538a117340c", size = 635335 },
|
|
404
433
|
]
|
|
405
434
|
|
|
406
435
|
[[package]]
|
|
@@ -440,18 +469,17 @@ wheels = [
|
|
|
440
469
|
|
|
441
470
|
[[package]]
|
|
442
471
|
name = "httpx"
|
|
443
|
-
version = "0.
|
|
472
|
+
version = "0.28.1"
|
|
444
473
|
source = { registry = "https://pypi.org/simple" }
|
|
445
474
|
dependencies = [
|
|
446
475
|
{ name = "anyio" },
|
|
447
476
|
{ name = "certifi" },
|
|
448
477
|
{ name = "httpcore" },
|
|
449
478
|
{ name = "idna" },
|
|
450
|
-
{ name = "sniffio" },
|
|
451
479
|
]
|
|
452
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
480
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
|
|
453
481
|
wheels = [
|
|
454
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
482
|
+
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
|
|
455
483
|
]
|
|
456
484
|
|
|
457
485
|
[package.optional-dependencies]
|
|
@@ -524,14 +552,14 @@ wheels = [
|
|
|
524
552
|
|
|
525
553
|
[[package]]
|
|
526
554
|
name = "mm-btc"
|
|
527
|
-
version = "0.
|
|
555
|
+
version = "0.2.0"
|
|
528
556
|
source = { editable = "." }
|
|
529
557
|
dependencies = [
|
|
530
558
|
{ name = "bit" },
|
|
531
559
|
{ name = "bitcoinlib" },
|
|
532
560
|
{ name = "hdwallet" },
|
|
533
561
|
{ name = "mm-std" },
|
|
534
|
-
{ name = "
|
|
562
|
+
{ name = "mnemonic" },
|
|
535
563
|
]
|
|
536
564
|
|
|
537
565
|
[package.dev-dependencies]
|
|
@@ -548,26 +576,26 @@ dev = [
|
|
|
548
576
|
[package.metadata]
|
|
549
577
|
requires-dist = [
|
|
550
578
|
{ name = "bit", specifier = "~=0.8.0" },
|
|
551
|
-
{ name = "bitcoinlib", specifier = "~=0.7.
|
|
552
|
-
{ name = "hdwallet", specifier = "~=
|
|
553
|
-
{ name = "mm-std", specifier = "~=0.1.
|
|
554
|
-
{ name = "
|
|
579
|
+
{ name = "bitcoinlib", specifier = "~=0.7.1" },
|
|
580
|
+
{ name = "hdwallet", specifier = "~=3.2.0" },
|
|
581
|
+
{ name = "mm-std", specifier = "~=0.1.9" },
|
|
582
|
+
{ name = "mnemonic", specifier = ">=0.21" },
|
|
555
583
|
]
|
|
556
584
|
|
|
557
585
|
[package.metadata.requires-dev]
|
|
558
586
|
dev = [
|
|
559
|
-
{ name = "bandit", specifier = "~=1.
|
|
560
|
-
{ name = "mypy", specifier = "~=1.
|
|
587
|
+
{ name = "bandit", specifier = "~=1.8.0" },
|
|
588
|
+
{ name = "mypy", specifier = "~=1.14.0" },
|
|
561
589
|
{ name = "pip-audit", specifier = "~=2.7.3" },
|
|
562
|
-
{ name = "pytest", specifier = "~=8.3.
|
|
590
|
+
{ name = "pytest", specifier = "~=8.3.4" },
|
|
563
591
|
{ name = "pytest-xdist", specifier = "~=3.6.1" },
|
|
564
|
-
{ name = "ruff", specifier = "~=0.
|
|
565
|
-
{ name = "types-pyyaml", specifier = "~=6.0.12.
|
|
592
|
+
{ name = "ruff", specifier = "~=0.8.4" },
|
|
593
|
+
{ name = "types-pyyaml", specifier = "~=6.0.12.20241221" },
|
|
566
594
|
]
|
|
567
595
|
|
|
568
596
|
[[package]]
|
|
569
597
|
name = "mm-std"
|
|
570
|
-
version = "0.1.
|
|
598
|
+
version = "0.1.9"
|
|
571
599
|
source = { registry = "https://pypi.org/simple" }
|
|
572
600
|
dependencies = [
|
|
573
601
|
{ name = "cryptography" },
|
|
@@ -579,7 +607,7 @@ dependencies = [
|
|
|
579
607
|
{ name = "rich" },
|
|
580
608
|
]
|
|
581
609
|
wheels = [
|
|
582
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
610
|
+
{ url = "https://files.pythonhosted.org/packages/96/68/05221e7d6f0411f380fdbb40d7bdceb2597554257a8a2ee0a74bf7dcd577/mm_std-0.1.9-py3-none-any.whl", hash = "sha256:8405d67d885be381d01492e72e5c0039dd893a95a1df65994bcb990a28ae04d1", size = 15130 },
|
|
583
611
|
]
|
|
584
612
|
|
|
585
613
|
[[package]]
|
|
@@ -623,25 +651,25 @@ wheels = [
|
|
|
623
651
|
|
|
624
652
|
[[package]]
|
|
625
653
|
name = "mypy"
|
|
626
|
-
version = "1.
|
|
654
|
+
version = "1.14.0"
|
|
627
655
|
source = { registry = "https://pypi.org/simple" }
|
|
628
656
|
dependencies = [
|
|
629
657
|
{ name = "mypy-extensions" },
|
|
630
658
|
{ name = "typing-extensions" },
|
|
631
659
|
]
|
|
632
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
660
|
+
sdist = { url = "https://files.pythonhosted.org/packages/8c/7b/08046ef9330735f536a09a2e31b00f42bccdb2795dcd979636ba43bb2d63/mypy-1.14.0.tar.gz", hash = "sha256:822dbd184d4a9804df5a7d5335a68cf7662930e70b8c1bc976645d1509f9a9d6", size = 3215684 }
|
|
633
661
|
wheels = [
|
|
634
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
635
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
636
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
637
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
638
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
639
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
640
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
641
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
642
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
643
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
644
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
662
|
+
{ url = "https://files.pythonhosted.org/packages/fe/d8/0e72175ee0253217f5c44524f5e95251c02e95ba9749fb87b0e2074d203a/mypy-1.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d5326ab70a6db8e856d59ad4cb72741124950cbbf32e7b70e30166ba7bbf61dd", size = 11269011 },
|
|
663
|
+
{ url = "https://files.pythonhosted.org/packages/e9/6d/4ea13839dabe5db588dc6a1b766da16f420d33cf118a7b7172cdf6c7fcb2/mypy-1.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bf4ec4980bec1e0e24e5075f449d014011527ae0055884c7e3abc6a99cd2c7f1", size = 10253076 },
|
|
664
|
+
{ url = "https://files.pythonhosted.org/packages/3e/38/7db2c5d0f4d290e998f7a52b2e2616c7bbad96b8e04278ab09d11978a29e/mypy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:390dfb898239c25289495500f12fa73aa7f24a4c6d90ccdc165762462b998d63", size = 12862786 },
|
|
665
|
+
{ url = "https://files.pythonhosted.org/packages/bf/4b/62d59c801b34141040989949c2b5c157d0408b45357335d3ec5b2845b0f6/mypy-1.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7e026d55ddcd76e29e87865c08cbe2d0104e2b3153a523c529de584759379d3d", size = 12971568 },
|
|
666
|
+
{ url = "https://files.pythonhosted.org/packages/f1/9c/e0f281b32d70c87b9e4d2939e302b1ff77ada4d7b0f2fb32890c144bc1d6/mypy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:585ed36031d0b3ee362e5107ef449a8b5dfd4e9c90ccbe36414ee405ee6b32ba", size = 9879477 },
|
|
667
|
+
{ url = "https://files.pythonhosted.org/packages/13/33/8380efd0ebdfdfac7fc0bf065f03a049800ca1e6c296ec1afc634340d992/mypy-1.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9f6f4c0b27401d14c483c622bc5105eff3911634d576bbdf6695b9a7c1ba741", size = 11251509 },
|
|
668
|
+
{ url = "https://files.pythonhosted.org/packages/15/6d/4e1c21c60fee11af7d8e4f2902a29886d1387d6a836be16229eb3982a963/mypy-1.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b2280cedcb312c7a79f5001ae5325582d0d339bce684e4a529069d0e7ca1e7", size = 10244282 },
|
|
669
|
+
{ url = "https://files.pythonhosted.org/packages/8b/cf/7a8ae5c0161edae15d25c2c67c68ce8b150cbdc45aefc13a8be271ee80b2/mypy-1.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:342de51c48bab326bfc77ce056ba08c076d82ce4f5a86621f972ed39970f94d8", size = 12867676 },
|
|
670
|
+
{ url = "https://files.pythonhosted.org/packages/9c/d0/71f7bbdcc7cfd0f2892db5b13b1e8857673f2cc9e0c30e3e4340523dc186/mypy-1.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00df23b42e533e02a6f0055e54de9a6ed491cd8b7ea738647364fd3a39ea7efc", size = 12964189 },
|
|
671
|
+
{ url = "https://files.pythonhosted.org/packages/a7/40/fb4ad65d6d5f8c51396ecf6305ec0269b66013a5bf02d0e9528053640b4a/mypy-1.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:e8c8387e5d9dff80e7daf961df357c80e694e942d9755f3ad77d69b0957b8e3f", size = 9888247 },
|
|
672
|
+
{ url = "https://files.pythonhosted.org/packages/39/32/0214608af400cdf8f5102144bb8af10d880675c65ed0b58f7e0e77175d50/mypy-1.14.0-py3-none-any.whl", hash = "sha256:2238d7f93fc4027ed1efc944507683df3ba406445a2b6c96e79666a045aadfab", size = 2752803 },
|
|
645
673
|
]
|
|
646
674
|
|
|
647
675
|
[[package]]
|
|
@@ -824,51 +852,55 @@ wheels = [
|
|
|
824
852
|
|
|
825
853
|
[[package]]
|
|
826
854
|
name = "pydantic"
|
|
827
|
-
version = "2.
|
|
855
|
+
version = "2.10.4"
|
|
828
856
|
source = { registry = "https://pypi.org/simple" }
|
|
829
857
|
dependencies = [
|
|
830
858
|
{ name = "annotated-types" },
|
|
831
859
|
{ name = "pydantic-core" },
|
|
832
860
|
{ name = "typing-extensions" },
|
|
833
861
|
]
|
|
834
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
862
|
+
sdist = { url = "https://files.pythonhosted.org/packages/70/7e/fb60e6fee04d0ef8f15e4e01ff187a196fa976eb0f0ab524af4599e5754c/pydantic-2.10.4.tar.gz", hash = "sha256:82f12e9723da6de4fe2ba888b5971157b3be7ad914267dea8f05f82b28254f06", size = 762094 }
|
|
835
863
|
wheels = [
|
|
836
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
864
|
+
{ url = "https://files.pythonhosted.org/packages/f3/26/3e1bbe954fde7ee22a6e7d31582c642aad9e84ffe4b5fb61e63b87cd326f/pydantic-2.10.4-py3-none-any.whl", hash = "sha256:597e135ea68be3a37552fb524bc7d0d66dcf93d395acd93a00682f1efcb8ee3d", size = 431765 },
|
|
837
865
|
]
|
|
838
866
|
|
|
839
867
|
[[package]]
|
|
840
868
|
name = "pydantic-core"
|
|
841
|
-
version = "2.
|
|
869
|
+
version = "2.27.2"
|
|
842
870
|
source = { registry = "https://pypi.org/simple" }
|
|
843
871
|
dependencies = [
|
|
844
872
|
{ name = "typing-extensions" },
|
|
845
873
|
]
|
|
846
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
847
|
-
wheels = [
|
|
848
|
-
{ url = "https://files.pythonhosted.org/packages/74/
|
|
849
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
850
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
851
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
852
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
853
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
854
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
855
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
856
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
857
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
858
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
859
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
860
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
861
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
862
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
863
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
864
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
865
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
866
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
867
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
868
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
869
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
870
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
871
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
874
|
+
sdist = { url = "https://files.pythonhosted.org/packages/fc/01/f3e5ac5e7c25833db5eb555f7b7ab24cd6f8c322d3a3ad2d67a952dc0abc/pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", size = 413443 }
|
|
875
|
+
wheels = [
|
|
876
|
+
{ url = "https://files.pythonhosted.org/packages/d6/74/51c8a5482ca447871c93e142d9d4a92ead74de6c8dc5e66733e22c9bba89/pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", size = 1893127 },
|
|
877
|
+
{ url = "https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", size = 1811340 },
|
|
878
|
+
{ url = "https://files.pythonhosted.org/packages/9e/91/840ec1375e686dbae1bd80a9e46c26a1e0083e1186abc610efa3d9a36180/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", size = 1822900 },
|
|
879
|
+
{ url = "https://files.pythonhosted.org/packages/f6/31/4240bc96025035500c18adc149aa6ffdf1a0062a4b525c932065ceb4d868/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", size = 1869177 },
|
|
880
|
+
{ url = "https://files.pythonhosted.org/packages/fa/20/02fbaadb7808be578317015c462655c317a77a7c8f0ef274bc016a784c54/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", size = 2038046 },
|
|
881
|
+
{ url = "https://files.pythonhosted.org/packages/06/86/7f306b904e6c9eccf0668248b3f272090e49c275bc488a7b88b0823444a4/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", size = 2685386 },
|
|
882
|
+
{ url = "https://files.pythonhosted.org/packages/8d/f0/49129b27c43396581a635d8710dae54a791b17dfc50c70164866bbf865e3/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", size = 1997060 },
|
|
883
|
+
{ url = "https://files.pythonhosted.org/packages/0d/0f/943b4af7cd416c477fd40b187036c4f89b416a33d3cc0ab7b82708a667aa/pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", size = 2004870 },
|
|
884
|
+
{ url = "https://files.pythonhosted.org/packages/35/40/aea70b5b1a63911c53a4c8117c0a828d6790483f858041f47bab0b779f44/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", size = 1999822 },
|
|
885
|
+
{ url = "https://files.pythonhosted.org/packages/f2/b3/807b94fd337d58effc5498fd1a7a4d9d59af4133e83e32ae39a96fddec9d/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", size = 2130364 },
|
|
886
|
+
{ url = "https://files.pythonhosted.org/packages/fc/df/791c827cd4ee6efd59248dca9369fb35e80a9484462c33c6649a8d02b565/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", size = 2158303 },
|
|
887
|
+
{ url = "https://files.pythonhosted.org/packages/9b/67/4e197c300976af185b7cef4c02203e175fb127e414125916bf1128b639a9/pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", size = 1834064 },
|
|
888
|
+
{ url = "https://files.pythonhosted.org/packages/1f/ea/cd7209a889163b8dcca139fe32b9687dd05249161a3edda62860430457a5/pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", size = 1989046 },
|
|
889
|
+
{ url = "https://files.pythonhosted.org/packages/bc/49/c54baab2f4658c26ac633d798dab66b4c3a9bbf47cff5284e9c182f4137a/pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", size = 1885092 },
|
|
890
|
+
{ url = "https://files.pythonhosted.org/packages/41/b1/9bc383f48f8002f99104e3acff6cba1231b29ef76cfa45d1506a5cad1f84/pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", size = 1892709 },
|
|
891
|
+
{ url = "https://files.pythonhosted.org/packages/10/6c/e62b8657b834f3eb2961b49ec8e301eb99946245e70bf42c8817350cbefc/pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", size = 1811273 },
|
|
892
|
+
{ url = "https://files.pythonhosted.org/packages/ba/15/52cfe49c8c986e081b863b102d6b859d9defc63446b642ccbbb3742bf371/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", size = 1823027 },
|
|
893
|
+
{ url = "https://files.pythonhosted.org/packages/b1/1c/b6f402cfc18ec0024120602bdbcebc7bdd5b856528c013bd4d13865ca473/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", size = 1868888 },
|
|
894
|
+
{ url = "https://files.pythonhosted.org/packages/bd/7b/8cb75b66ac37bc2975a3b7de99f3c6f355fcc4d89820b61dffa8f1e81677/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", size = 2037738 },
|
|
895
|
+
{ url = "https://files.pythonhosted.org/packages/c8/f1/786d8fe78970a06f61df22cba58e365ce304bf9b9f46cc71c8c424e0c334/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", size = 2685138 },
|
|
896
|
+
{ url = "https://files.pythonhosted.org/packages/a6/74/d12b2cd841d8724dc8ffb13fc5cef86566a53ed358103150209ecd5d1999/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", size = 1997025 },
|
|
897
|
+
{ url = "https://files.pythonhosted.org/packages/a0/6e/940bcd631bc4d9a06c9539b51f070b66e8f370ed0933f392db6ff350d873/pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", size = 2004633 },
|
|
898
|
+
{ url = "https://files.pythonhosted.org/packages/50/cc/a46b34f1708d82498c227d5d80ce615b2dd502ddcfd8376fc14a36655af1/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", size = 1999404 },
|
|
899
|
+
{ url = "https://files.pythonhosted.org/packages/ca/2d/c365cfa930ed23bc58c41463bae347d1005537dc8db79e998af8ba28d35e/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", size = 2130130 },
|
|
900
|
+
{ url = "https://files.pythonhosted.org/packages/f4/d7/eb64d015c350b7cdb371145b54d96c919d4db516817f31cd1c650cae3b21/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", size = 2157946 },
|
|
901
|
+
{ url = "https://files.pythonhosted.org/packages/a4/99/bddde3ddde76c03b65dfd5a66ab436c4e58ffc42927d4ff1198ffbf96f5f/pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", size = 1834387 },
|
|
902
|
+
{ url = "https://files.pythonhosted.org/packages/71/47/82b5e846e01b26ac6f1893d3c5f9f3a2eb6ba79be26eef0b759b4fe72946/pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", size = 1990453 },
|
|
903
|
+
{ url = "https://files.pythonhosted.org/packages/51/b2/b2b50d5ecf21acf870190ae5d093602d95f66c9c31f9d5de6062eb329ad1/pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", size = 1885186 },
|
|
872
904
|
]
|
|
873
905
|
|
|
874
906
|
[[package]]
|
|
@@ -892,6 +924,26 @@ wheels = [
|
|
|
892
924
|
{ url = "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", size = 1205513 },
|
|
893
925
|
]
|
|
894
926
|
|
|
927
|
+
[[package]]
|
|
928
|
+
name = "pynacl"
|
|
929
|
+
version = "1.5.0"
|
|
930
|
+
source = { registry = "https://pypi.org/simple" }
|
|
931
|
+
dependencies = [
|
|
932
|
+
{ name = "cffi" },
|
|
933
|
+
]
|
|
934
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", size = 3392854 }
|
|
935
|
+
wheels = [
|
|
936
|
+
{ url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", size = 349920 },
|
|
937
|
+
{ url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", size = 601722 },
|
|
938
|
+
{ url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", size = 680087 },
|
|
939
|
+
{ url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", size = 856678 },
|
|
940
|
+
{ url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", size = 1133660 },
|
|
941
|
+
{ url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", size = 663824 },
|
|
942
|
+
{ url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", size = 1117912 },
|
|
943
|
+
{ url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543", size = 204624 },
|
|
944
|
+
{ url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141 },
|
|
945
|
+
]
|
|
946
|
+
|
|
895
947
|
[[package]]
|
|
896
948
|
name = "pyparsing"
|
|
897
949
|
version = "3.2.0"
|
|
@@ -903,7 +955,7 @@ wheels = [
|
|
|
903
955
|
|
|
904
956
|
[[package]]
|
|
905
957
|
name = "pytest"
|
|
906
|
-
version = "8.3.
|
|
958
|
+
version = "8.3.4"
|
|
907
959
|
source = { registry = "https://pypi.org/simple" }
|
|
908
960
|
dependencies = [
|
|
909
961
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
@@ -911,9 +963,9 @@ dependencies = [
|
|
|
911
963
|
{ name = "packaging" },
|
|
912
964
|
{ name = "pluggy" },
|
|
913
965
|
]
|
|
914
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
966
|
+
sdist = { url = "https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 }
|
|
915
967
|
wheels = [
|
|
916
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
968
|
+
{ url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 },
|
|
917
969
|
]
|
|
918
970
|
|
|
919
971
|
[[package]]
|
|
@@ -994,36 +1046,27 @@ wheels = [
|
|
|
994
1046
|
|
|
995
1047
|
[[package]]
|
|
996
1048
|
name = "ruff"
|
|
997
|
-
version = "0.
|
|
998
|
-
source = { registry = "https://pypi.org/simple" }
|
|
999
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1000
|
-
wheels = [
|
|
1001
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1002
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1003
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1004
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1005
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1006
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1007
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1008
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1009
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1010
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1011
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1012
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1013
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1014
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1015
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1016
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1017
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1018
|
-
]
|
|
1019
|
-
|
|
1020
|
-
[[package]]
|
|
1021
|
-
name = "shellingham"
|
|
1022
|
-
version = "1.5.4"
|
|
1023
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1024
|
-
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 }
|
|
1025
|
-
wheels = [
|
|
1026
|
-
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 },
|
|
1049
|
+
version = "0.8.4"
|
|
1050
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1051
|
+
sdist = { url = "https://files.pythonhosted.org/packages/34/37/9c02181ef38d55b77d97c68b78e705fd14c0de0e5d085202bb2b52ce5be9/ruff-0.8.4.tar.gz", hash = "sha256:0d5f89f254836799af1615798caa5f80b7f935d7a670fad66c5007928e57ace8", size = 3402103 }
|
|
1052
|
+
wheels = [
|
|
1053
|
+
{ url = "https://files.pythonhosted.org/packages/05/67/f480bf2f2723b2e49af38ed2be75ccdb2798fca7d56279b585c8f553aaab/ruff-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:58072f0c06080276804c6a4e21a9045a706584a958e644353603d36ca1eb8a60", size = 10546415 },
|
|
1054
|
+
{ url = "https://files.pythonhosted.org/packages/eb/7a/5aba20312c73f1ce61814e520d1920edf68ca3b9c507bd84d8546a8ecaa8/ruff-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ffb60904651c00a1e0b8df594591770018a0f04587f7deeb3838344fe3adabac", size = 10346113 },
|
|
1055
|
+
{ url = "https://files.pythonhosted.org/packages/76/f4/c41de22b3728486f0aa95383a44c42657b2db4062f3234ca36fc8cf52d8b/ruff-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6ddf5d654ac0d44389f6bf05cee4caeefc3132a64b58ea46738111d687352296", size = 9943564 },
|
|
1056
|
+
{ url = "https://files.pythonhosted.org/packages/0e/f0/afa0d2191af495ac82d4cbbfd7a94e3df6f62a04ca412033e073b871fc6d/ruff-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e248b1f0fa2749edd3350a2a342b67b43a2627434c059a063418e3d375cfe643", size = 10805522 },
|
|
1057
|
+
{ url = "https://files.pythonhosted.org/packages/12/57/5d1e9a0fd0c228e663894e8e3a8e7063e5ee90f8e8e60cf2085f362bfa1a/ruff-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf197b98ed86e417412ee3b6c893f44c8864f816451441483253d5ff22c0e81e", size = 10306763 },
|
|
1058
|
+
{ url = "https://files.pythonhosted.org/packages/04/df/f069fdb02e408be8aac6853583572a2873f87f866fe8515de65873caf6b8/ruff-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c41319b85faa3aadd4d30cb1cffdd9ac6b89704ff79f7664b853785b48eccdf3", size = 11359574 },
|
|
1059
|
+
{ url = "https://files.pythonhosted.org/packages/d3/04/37c27494cd02e4a8315680debfc6dfabcb97e597c07cce0044db1f9dfbe2/ruff-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9f8402b7c4f96463f135e936d9ab77b65711fcd5d72e5d67597b543bbb43cf3f", size = 12094851 },
|
|
1060
|
+
{ url = "https://files.pythonhosted.org/packages/81/b1/c5d7fb68506cab9832d208d03ea4668da9a9887a4a392f4f328b1bf734ad/ruff-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e56b3baa9c23d324ead112a4fdf20db9a3f8f29eeabff1355114dd96014604", size = 11655539 },
|
|
1061
|
+
{ url = "https://files.pythonhosted.org/packages/ef/38/8f8f2c8898dc8a7a49bc340cf6f00226917f0f5cb489e37075bcb2ce3671/ruff-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:736272574e97157f7edbbb43b1d046125fce9e7d8d583d5d65d0c9bf2c15addf", size = 12912805 },
|
|
1062
|
+
{ url = "https://files.pythonhosted.org/packages/06/dd/fa6660c279f4eb320788876d0cff4ea18d9af7d9ed7216d7bd66877468d0/ruff-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fe710ab6061592521f902fca7ebcb9fabd27bc7c57c764298b1c1f15fff720", size = 11205976 },
|
|
1063
|
+
{ url = "https://files.pythonhosted.org/packages/a8/d7/de94cc89833b5de455750686c17c9e10f4e1ab7ccdc5521b8fe911d1477e/ruff-0.8.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:13e9ec6d6b55f6da412d59953d65d66e760d583dd3c1c72bf1f26435b5bfdbae", size = 10792039 },
|
|
1064
|
+
{ url = "https://files.pythonhosted.org/packages/6d/15/3e4906559248bdbb74854af684314608297a05b996062c9d72e0ef7c7097/ruff-0.8.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:97d9aefef725348ad77d6db98b726cfdb075a40b936c7984088804dfd38268a7", size = 10400088 },
|
|
1065
|
+
{ url = "https://files.pythonhosted.org/packages/a2/21/9ed4c0e8133cb4a87a18d470f534ad1a8a66d7bec493bcb8bda2d1a5d5be/ruff-0.8.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ab78e33325a6f5374e04c2ab924a3367d69a0da36f8c9cb6b894a62017506111", size = 10900814 },
|
|
1066
|
+
{ url = "https://files.pythonhosted.org/packages/0d/5d/122a65a18955bd9da2616b69bc839351f8baf23b2805b543aa2f0aed72b5/ruff-0.8.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8ef06f66f4a05c3ddbc9121a8b0cecccd92c5bf3dd43b5472ffe40b8ca10f0f8", size = 11268828 },
|
|
1067
|
+
{ url = "https://files.pythonhosted.org/packages/43/a9/1676ee9106995381e3d34bccac5bb28df70194167337ed4854c20f27c7ba/ruff-0.8.4-py3-none-win32.whl", hash = "sha256:552fb6d861320958ca5e15f28b20a3d071aa83b93caee33a87b471f99a6c0835", size = 8805621 },
|
|
1068
|
+
{ url = "https://files.pythonhosted.org/packages/10/98/ed6b56a30ee76771c193ff7ceeaf1d2acc98d33a1a27b8479cbdb5c17a23/ruff-0.8.4-py3-none-win_amd64.whl", hash = "sha256:f21a1143776f8656d7f364bd264a9d60f01b7f52243fbe90e7670c0dfe0cf65d", size = 9660086 },
|
|
1069
|
+
{ url = "https://files.pythonhosted.org/packages/13/9f/026e18ca7d7766783d779dae5e9c656746c6ede36ef73c6d934aaf4a6dec/ruff-0.8.4-py3-none-win_arm64.whl", hash = "sha256:9183dd615d8df50defa8b1d9a074053891ba39025cf5ae88e8bcb52edcc4bf08", size = 9074500 },
|
|
1027
1070
|
]
|
|
1028
1071
|
|
|
1029
1072
|
[[package]]
|
|
@@ -1112,28 +1155,13 @@ wheels = [
|
|
|
1112
1155
|
{ url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588 },
|
|
1113
1156
|
]
|
|
1114
1157
|
|
|
1115
|
-
[[package]]
|
|
1116
|
-
name = "typer"
|
|
1117
|
-
version = "0.13.1"
|
|
1118
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1119
|
-
dependencies = [
|
|
1120
|
-
{ name = "click" },
|
|
1121
|
-
{ name = "rich" },
|
|
1122
|
-
{ name = "shellingham" },
|
|
1123
|
-
{ name = "typing-extensions" },
|
|
1124
|
-
]
|
|
1125
|
-
sdist = { url = "https://files.pythonhosted.org/packages/76/41/49ead3ad3310545e767bcb917c759b026ca9eada5d5c150c2fb6fc555568/typer-0.13.1.tar.gz", hash = "sha256:9d444cb96cc268ce6f8b94e13b4335084cef4c079998a9f4851a90229a3bd25c", size = 98631 }
|
|
1126
|
-
wheels = [
|
|
1127
|
-
{ url = "https://files.pythonhosted.org/packages/22/69/e90a0b4d0c16e095901679216c8ecdc728110c7c54e7b5f43a623bc4c789/typer-0.13.1-py3-none-any.whl", hash = "sha256:5b59580fd925e89463a29d363e0a43245ec02765bde9fb77d39e5d0f29dd7157", size = 44723 },
|
|
1128
|
-
]
|
|
1129
|
-
|
|
1130
1158
|
[[package]]
|
|
1131
1159
|
name = "types-pyyaml"
|
|
1132
|
-
version = "6.0.12.
|
|
1160
|
+
version = "6.0.12.20241221"
|
|
1133
1161
|
source = { registry = "https://pypi.org/simple" }
|
|
1134
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1162
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f4/60/ba3f23024bdd406e65c359b9dbd9757f058986bd57d94f6639015f9a9fae/types_pyyaml-6.0.12.20241221.tar.gz", hash = "sha256:4f149aa893ff6a46889a30af4c794b23833014c469cc57cbc3ad77498a58996f", size = 17034 }
|
|
1135
1163
|
wheels = [
|
|
1136
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1164
|
+
{ url = "https://files.pythonhosted.org/packages/4b/04/1cc4fffeb4ace85c205e84cd48eb12cb37ec6ffb68245b7eef8f2086d490/types_PyYAML-6.0.12.20241221-py3-none-any.whl", hash = "sha256:0657a4ff8411a030a2116a196e8e008ea679696b5b1a8e1a6aa8ebb737b34688", size = 20023 },
|
|
1137
1165
|
]
|
|
1138
1166
|
|
|
1139
1167
|
[[package]]
|
mm_btc-0.1.2/PKG-INFO
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
from typing import Annotated
|
|
3
|
-
|
|
4
|
-
import typer
|
|
5
|
-
import typer.core
|
|
6
|
-
from mm_std import print_plain
|
|
7
|
-
|
|
8
|
-
from mm_btc.cli import cli_utils
|
|
9
|
-
from mm_btc.cli.cmd import address_cmd, create_tx_cmd, decode_tx_cmd, mnemonic_cmd, utxo_cmd
|
|
10
|
-
|
|
11
|
-
app = typer.Typer(no_args_is_help=True, pretty_exceptions_enable=False, add_completion=False)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@app.command("mnemonic")
|
|
15
|
-
@app.command(name="m", hidden=True)
|
|
16
|
-
def mnemonic_command( # nosec B107:hardcoded_password_default
|
|
17
|
-
mnemonic: Annotated[str, typer.Option("--mnemonic", "-m", help="")] = "",
|
|
18
|
-
passphrase: Annotated[str, typer.Option("--passphrase", "-p")] = "",
|
|
19
|
-
path: Annotated[str, typer.Option("--path", help="Derivation path. Examples: bip44, bip88, m/44'/0'/0'/0")] = "bip44",
|
|
20
|
-
hex_: Annotated[bool, typer.Option("--hex", help="Print private key in hex format instead of WIF")] = False,
|
|
21
|
-
words: int = typer.Option(12, "--words", "-w", help="Number of mnemonic words"),
|
|
22
|
-
limit: int = typer.Option(10, "--limit", "-l"),
|
|
23
|
-
testnet: bool = typer.Option(False, "--testnet", "-t", help="Testnet network"),
|
|
24
|
-
) -> None:
|
|
25
|
-
"""Generate keys based on a mnemonic"""
|
|
26
|
-
mnemonic_cmd.run(
|
|
27
|
-
mnemonic_cmd.Args(
|
|
28
|
-
mnemonic=mnemonic,
|
|
29
|
-
passphrase=passphrase,
|
|
30
|
-
words=words,
|
|
31
|
-
limit=limit,
|
|
32
|
-
path=path,
|
|
33
|
-
hex=hex_,
|
|
34
|
-
testnet=testnet,
|
|
35
|
-
)
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
@app.command(name="address")
|
|
40
|
-
@app.command(name="a", hidden=True)
|
|
41
|
-
def address_command(address: str) -> None:
|
|
42
|
-
"""Get address info from Blockstream API"""
|
|
43
|
-
address_cmd.run(address)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
@app.command("create-tx")
|
|
47
|
-
def create_tx_command(config_path: Annotated[Path, typer.Argument(exists=True)]) -> None:
|
|
48
|
-
"""Create a transaction"""
|
|
49
|
-
create_tx_cmd.run(config_path)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
@app.command("decode-tx")
|
|
53
|
-
def decode_tx_command(tx_hex: str, testnet: Annotated[bool, typer.Option("--testnet", "-t")] = False) -> None:
|
|
54
|
-
"""Decode a transaction"""
|
|
55
|
-
decode_tx_cmd.run(tx_hex, testnet)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
@app.command("utxo")
|
|
59
|
-
def utxo_command(address: str) -> None:
|
|
60
|
-
"""Get UTXOs from Blockstream API"""
|
|
61
|
-
utxo_cmd.run(address)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def version_callback(value: bool) -> None:
|
|
65
|
-
if value:
|
|
66
|
-
print_plain(f"mm-btc: v{cli_utils.get_version()}")
|
|
67
|
-
raise typer.Exit()
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
@app.callback()
|
|
71
|
-
def main(_version: bool = typer.Option(None, "--version", callback=version_callback, is_eager=True)) -> None:
|
|
72
|
-
pass
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if __name__ == "__main_":
|
|
76
|
-
app()
|
|
File without changes
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from mm_std import print_json
|
|
2
|
-
|
|
3
|
-
from mm_btc.blockstream import BlockstreamClient
|
|
4
|
-
from mm_btc.wallet import is_testnet_address
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def run(address: str) -> None:
|
|
8
|
-
client = BlockstreamClient(testnet=is_testnet_address(address))
|
|
9
|
-
res = client.get_address(address)
|
|
10
|
-
print_json(res)
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
|
-
from bit import PrivateKey, PrivateKeyTestnet
|
|
4
|
-
from mm_std import BaseConfig, print_console
|
|
5
|
-
|
|
6
|
-
from mm_btc.wallet import is_testnet_address
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class Config(BaseConfig):
|
|
10
|
-
class Output(BaseConfig):
|
|
11
|
-
address: str
|
|
12
|
-
amount: int
|
|
13
|
-
|
|
14
|
-
from_address: str
|
|
15
|
-
private: str
|
|
16
|
-
outputs: list[Output]
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def run(config_path: Path) -> None:
|
|
20
|
-
config = Config.read_config(config_path)
|
|
21
|
-
testnet = is_testnet_address(config.from_address)
|
|
22
|
-
key = PrivateKeyTestnet(config.private) if testnet else PrivateKey(config.private)
|
|
23
|
-
|
|
24
|
-
outputs = [(o.address, o.amount, "satoshi") for o in config.outputs]
|
|
25
|
-
|
|
26
|
-
tx = key.create_transaction(outputs)
|
|
27
|
-
print_console(tx)
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
|
-
from enum import Enum
|
|
3
|
-
|
|
4
|
-
from mm_std import print_plain
|
|
5
|
-
|
|
6
|
-
from mm_btc.wallet import derive_accounts, generate_mnemonic
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class PrivateType(str, Enum):
|
|
10
|
-
hex = "hex"
|
|
11
|
-
wif = "wif"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@dataclass
|
|
15
|
-
class Args:
|
|
16
|
-
mnemonic: str
|
|
17
|
-
passphrase: str
|
|
18
|
-
words: int
|
|
19
|
-
limit: int
|
|
20
|
-
hex: bool # Print private key in hex format instead of WIF
|
|
21
|
-
path: str
|
|
22
|
-
testnet: bool
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def run(args: Args) -> None:
|
|
26
|
-
mnemonic = args.mnemonic or generate_mnemonic()
|
|
27
|
-
passphrase = args.passphrase
|
|
28
|
-
path = get_derivation_path_prefix(args.path, args.testnet)
|
|
29
|
-
accounts = derive_accounts(mnemonic, passphrase, path, args.limit)
|
|
30
|
-
|
|
31
|
-
print_plain(f"{mnemonic}")
|
|
32
|
-
if passphrase:
|
|
33
|
-
print_plain(f"{passphrase}")
|
|
34
|
-
for acc in accounts:
|
|
35
|
-
private = acc.private if args.hex else acc.wif
|
|
36
|
-
print_plain(f"{acc.path} {acc.address} {private}")
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def get_derivation_path_prefix(path: str, testnet: bool) -> str:
|
|
40
|
-
if path.startswith("m/"):
|
|
41
|
-
return path
|
|
42
|
-
coin = "1" if testnet else "0"
|
|
43
|
-
if path == "bip44":
|
|
44
|
-
return f"m/44'/{coin}'/0'/0"
|
|
45
|
-
if path == "bip84":
|
|
46
|
-
return f"m/84'/{coin}'/0'/0"
|
|
47
|
-
|
|
48
|
-
raise ValueError("Invalid path")
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
from mm_std import print_json
|
|
2
|
-
|
|
3
|
-
from mm_btc.blockstream import BlockstreamClient
|
|
4
|
-
from mm_btc.wallet import is_testnet_address
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def run(address: str) -> None:
|
|
8
|
-
client = BlockstreamClient(testnet=is_testnet_address(address))
|
|
9
|
-
res = client.get_utxo(address)
|
|
10
|
-
|
|
11
|
-
print_json(res.ok_or_err())
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
|
-
|
|
3
|
-
from hdwallet import BIP44HDWallet, BIP84HDWallet
|
|
4
|
-
from hdwallet.symbols import BTC, BTCTEST
|
|
5
|
-
from hdwallet.utils import generate_mnemonic as new_mnemonic
|
|
6
|
-
|
|
7
|
-
BIP44_MAINNET_PATH = "m/44'/0'/0'/0"
|
|
8
|
-
BIP44_TESTNET_PATH = "m/44'/1'/0'/0"
|
|
9
|
-
BIP84_MAINNET_PATH = "m/84'/0'/0'/0"
|
|
10
|
-
BIP84_TESTNET_PATH = "m/84'/1'/0'/0"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@dataclass
|
|
14
|
-
class Account:
|
|
15
|
-
address: str
|
|
16
|
-
private: str
|
|
17
|
-
wif: str
|
|
18
|
-
path: str
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def generate_mnemonic(language: str = "english", words: int = 12) -> str:
|
|
22
|
-
strength = mnemonic_words_to_strenght(words)
|
|
23
|
-
return new_mnemonic(language=language, strength=strength) # type: ignore[no-any-return]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def derive_accounts(mnemonic: str, passphrase: str, path: str, limit: int) -> list[Account]:
|
|
27
|
-
if path.startswith("m/84'/1'"):
|
|
28
|
-
w = BIP84HDWallet(symbol=BTCTEST)
|
|
29
|
-
elif path.startswith("m/44'/1'"):
|
|
30
|
-
w = BIP44HDWallet(symbol=BTCTEST)
|
|
31
|
-
elif path.startswith("m/84'/0'"):
|
|
32
|
-
w = BIP84HDWallet(symbol=BTC)
|
|
33
|
-
elif path.startswith("m/44'/0'"):
|
|
34
|
-
w = BIP44HDWallet(symbol=BTC)
|
|
35
|
-
else:
|
|
36
|
-
raise ValueError("Invalid path")
|
|
37
|
-
|
|
38
|
-
w.from_mnemonic(mnemonic, passphrase=passphrase)
|
|
39
|
-
w.clean_derivation()
|
|
40
|
-
|
|
41
|
-
accounts = []
|
|
42
|
-
for index_path in range(limit):
|
|
43
|
-
w.from_path(path=f"{path}/{index_path}")
|
|
44
|
-
accounts.append(Account(address=w.address(), private=w.private_key(), wif=w.wif(), path=f"{path}/{index_path}"))
|
|
45
|
-
w.clean_derivation()
|
|
46
|
-
|
|
47
|
-
return accounts
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def mnemonic_words_to_strenght(words: int) -> int:
|
|
51
|
-
if words == 12:
|
|
52
|
-
return 128
|
|
53
|
-
if words == 15:
|
|
54
|
-
return 160
|
|
55
|
-
if words == 18:
|
|
56
|
-
return 192
|
|
57
|
-
if words == 21:
|
|
58
|
-
return 224
|
|
59
|
-
if words == 24:
|
|
60
|
-
return 256
|
|
61
|
-
|
|
62
|
-
raise ValueError("Invalid words")
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def is_testnet_address(address: str) -> bool:
|
|
66
|
-
return address.startswith(("m", "n", "tb1"))
|
mm_btc-0.1.2/tests/__init__.py
DELETED
|
File without changes
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import pytest
|
|
2
|
-
from mm_std import run_command
|
|
3
|
-
|
|
4
|
-
from mm_btc.cli.cmd.mnemonic_cmd import get_derivation_path_prefix
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def test_get_derivation_path_prefix():
|
|
8
|
-
assert get_derivation_path_prefix("m/11'/0'/0'/0", testnet=True) == "m/11'/0'/0'/0"
|
|
9
|
-
assert get_derivation_path_prefix("bip44", False) == "m/44'/0'/0'/0"
|
|
10
|
-
assert get_derivation_path_prefix("bip44", True) == "m/44'/1'/0'/0"
|
|
11
|
-
assert get_derivation_path_prefix("bip84", False) == "m/84'/0'/0'/0"
|
|
12
|
-
assert get_derivation_path_prefix("bip84", True) == "m/84'/1'/0'/0"
|
|
13
|
-
|
|
14
|
-
with pytest.raises(ValueError):
|
|
15
|
-
get_derivation_path_prefix("bip", True)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def test_mnemonic_cmd(mnemonic, passphrase):
|
|
19
|
-
cmd = f"mm-btc mnemonic -m '{mnemonic}' --passphrase '{passphrase}'"
|
|
20
|
-
res = run_command(cmd)
|
|
21
|
-
assert res.code == 0
|
|
22
|
-
assert "m/44'/0'/0'/0/7 1AJNF13C4xVvduE3D9pdtdDNFbL5Bm7T3u L3QF5FHUtX2a1ucGgVfrdhdvLHBSxsRQoGsv7tyY8P5Jt7UV9LZv"
|
|
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
|