Skip to content

Commit f054d47

Browse files
Testing more types of HDWallet derived Cardano addresses (#103)
* ADD. adding enterprise & pointer address HDWallet derivation with 12 words mnemonic seeds * REFACTOR. relocating bip32 tests into a more suitable crypto test directory * REFACTOR. simplifying HDWallet.derive() method's doctest for conciseness * ADD. adding enterprise and pointer address tests for 15 words seed derivation * ADD. adding pointer and enterprise address tests for 24 words seed derivation
1 parent af63f0f commit f054d47

File tree

3 files changed

+130
-17
lines changed

3 files changed

+130
-17
lines changed

pycardano/crypto/bip32.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -311,11 +311,11 @@ def derive(
311311
Examples:
312312
>>> mnemonic_words = "test walk nut penalty hip pave soap entry language right filter choice"
313313
>>> hdwallet = HDWallet.from_mnemonic(mnemonic_words)
314-
>>> hdwallet = hdwallet.derive(index=1852, hardened=True)
315-
>>> hdwallet = hdwallet.derive(index=1815, hardened=True)
316-
>>> hdwallet = hdwallet.derive(index=0, hardened=True)
317-
>>> hdwallet = hdwallet.derive(index=0)
318-
>>> hdwallet = hdwallet.derive(index=0)
314+
>>> hdwallet = hdwallet.derive(1852, hardened=True)
315+
>>> hdwallet = hdwallet.derive(1815, hardened=True)
316+
>>> hdwallet = hdwallet.derive(0, hardened=True)
317+
>>> hdwallet = hdwallet.derive(0)
318+
>>> hdwallet = hdwallet.derive(0)
319319
>>> hdwallet.public_key.hex()
320320
'73fea80d424276ad0978d4fe5310e8bc2d485f5f6bb3bf87612989f112ad5a7d'
321321
"""

test/pycardano/crypto/__init__.py

Whitespace-only changes.

test/pycardano/backend/test_bip32.py renamed to test/pycardano/crypto/test_bip32.py

Lines changed: 125 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from pycardano.address import Address
3+
from pycardano.address import Address, PointerAddress
44
from pycardano.crypto.bip32 import HDWallet
55
from pycardano.key import PaymentVerificationKey
66
from pycardano.network import Network
@@ -88,11 +88,10 @@ def test_payment_address_12_reward():
8888
def test_payment_address_12_reward2_incorrect_index_value():
8989
wrong_index_type = "1815"
9090
with pytest.raises(ValueError):
91-
HDWallet.from_mnemonic(MNEMONIC_12)\
92-
.derive(wrong_index_type, hardened=True)
91+
HDWallet.from_mnemonic(MNEMONIC_12).derive(wrong_index_type, hardened=True)
9392

9493

95-
def test_payment_address_12_reward2():
94+
def test_payment_address_12_reward_full_public_derivation():
9695
hdwallet_stake = (
9796
HDWallet.from_mnemonic(MNEMONIC_12)
9897
.derive(1852, hardened=True)
@@ -132,17 +131,17 @@ def test_payment_address_12_reward2_full_private_derivation():
132131
stake_vk = PaymentVerificationKey.from_primitive(stake_public_key)
133132

134133
assert (
135-
Address(
136-
payment_part=None, staking_part=stake_vk.hash(), network=Network.TESTNET
137-
).encode()
138-
== "stake_test1uqevw2xnsc0pvn9t9r9c7qryfqfeerchgrlm3ea2nefr9hqp8n5xl"
134+
Address(
135+
payment_part=None, staking_part=stake_vk.hash(), network=Network.TESTNET
136+
).encode()
137+
== "stake_test1uqevw2xnsc0pvn9t9r9c7qryfqfeerchgrlm3ea2nefr9hqp8n5xl"
139138
)
140139

141140
assert (
142-
Address(
143-
payment_part=None, staking_part=stake_vk.hash(), network=Network.MAINNET
144-
).encode()
145-
== "stake1uyevw2xnsc0pvn9t9r9c7qryfqfeerchgrlm3ea2nefr9hqxdekzz"
141+
Address(
142+
payment_part=None, staking_part=stake_vk.hash(), network=Network.MAINNET
143+
).encode()
144+
== "stake1uyevw2xnsc0pvn9t9r9c7qryfqfeerchgrlm3ea2nefr9hqxdekzz"
146145
)
147146

148147

@@ -167,6 +166,44 @@ def test_payment_address_12_base():
167166
)
168167

169168

169+
def test_payment_address_12_enterprise():
170+
hdwallet = HDWallet.from_mnemonic(MNEMONIC_12)
171+
hdwallet_spend = hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")
172+
spend_public_key = hdwallet_spend.public_key
173+
spend_vk = PaymentVerificationKey.from_primitive(spend_public_key)
174+
175+
assert (
176+
Address(spend_vk.hash(), network=Network.TESTNET).encode()
177+
== "addr_test1vz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzerspjrlsz"
178+
)
179+
180+
assert (
181+
Address(spend_vk.hash(), network=Network.MAINNET).encode()
182+
== "addr1vx2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzers66hrl8"
183+
)
184+
185+
186+
def test_payment_address_12_pointer():
187+
hdwallet = HDWallet.from_mnemonic(MNEMONIC_12)
188+
hdwallet_spend = hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")
189+
spend_public_key = hdwallet_spend.public_key
190+
spend_vk = PaymentVerificationKey.from_primitive(spend_public_key)
191+
192+
assert (
193+
Address(
194+
spend_vk.hash(), PointerAddress(1, 2, 3), network=Network.TESTNET
195+
).encode()
196+
== "addr_test1gz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzerspqgpsqe70et"
197+
)
198+
199+
assert (
200+
Address(
201+
spend_vk.hash(), PointerAddress(24157, 177, 42), network=Network.MAINNET
202+
).encode()
203+
== "addr1gx2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer5ph3wczvf2w8lunk"
204+
)
205+
206+
170207
def test_payment_address_15_base():
171208
hdwallet = HDWallet.from_mnemonic(MNEMONIC_15)
172209
hdwallet_spend = hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")
@@ -188,6 +225,44 @@ def test_payment_address_15_base():
188225
)
189226

190227

228+
def test_payment_address_15_enterprise():
229+
hdwallet = HDWallet.from_mnemonic(MNEMONIC_15)
230+
hdwallet_spend = hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")
231+
spend_public_key = hdwallet_spend.public_key
232+
spend_vk = PaymentVerificationKey.from_primitive(spend_public_key)
233+
234+
assert (
235+
Address(spend_vk.hash(), network=Network.TESTNET).encode()
236+
== "addr_test1vpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg57c2qv"
237+
)
238+
239+
assert (
240+
Address(spend_vk.hash(), network=Network.MAINNET).encode()
241+
== "addr1v9u5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg0kvk0f"
242+
)
243+
244+
245+
def test_payment_address_15_pointer():
246+
hdwallet = HDWallet.from_mnemonic(MNEMONIC_15)
247+
hdwallet_spend = hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")
248+
spend_public_key = hdwallet_spend.public_key
249+
spend_vk = PaymentVerificationKey.from_primitive(spend_public_key)
250+
251+
assert (
252+
Address(
253+
spend_vk.hash(), PointerAddress(1, 2, 3), network=Network.TESTNET
254+
).encode()
255+
== "addr_test1gpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5egpqgpsdhdyc0"
256+
)
257+
258+
assert (
259+
Address(
260+
spend_vk.hash(), PointerAddress(24157, 177, 42), network=Network.MAINNET
261+
).encode()
262+
== "addr1g9u5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5evph3wczvf2kd5vam"
263+
)
264+
265+
191266
def test_payment_address_24_base():
192267
hdwallet = HDWallet.from_mnemonic(MNEMONIC_24)
193268
hdwallet_spend = hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")
@@ -209,6 +284,44 @@ def test_payment_address_24_base():
209284
)
210285

211286

287+
def test_payment_address_24_enterprise():
288+
hdwallet = HDWallet.from_mnemonic(MNEMONIC_24)
289+
hdwallet_spend = hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")
290+
spend_public_key = hdwallet_spend.public_key
291+
spend_vk = PaymentVerificationKey.from_primitive(spend_public_key)
292+
293+
assert (
294+
Address(spend_vk.hash(), network=Network.TESTNET).encode()
295+
== "addr_test1vqy6nhfyks7wdu3dudslys37v252w2nwhv0fw2nfawemmnqtjtf68"
296+
)
297+
298+
assert (
299+
Address(spend_vk.hash(), network=Network.MAINNET).encode()
300+
== "addr1vyy6nhfyks7wdu3dudslys37v252w2nwhv0fw2nfawemmnqs6l44z"
301+
)
302+
303+
304+
def test_payment_address_24_pointer():
305+
hdwallet = HDWallet.from_mnemonic(MNEMONIC_24)
306+
hdwallet_spend = hdwallet.derive_from_path("m/1852'/1815'/0'/0/0")
307+
spend_public_key = hdwallet_spend.public_key
308+
spend_vk = PaymentVerificationKey.from_primitive(spend_public_key)
309+
310+
assert (
311+
Address(
312+
spend_vk.hash(), PointerAddress(1, 2, 3), network=Network.TESTNET
313+
).encode()
314+
== "addr_test1gqy6nhfyks7wdu3dudslys37v252w2nwhv0fw2nfawemmnqpqgps5mee0p"
315+
)
316+
317+
assert (
318+
Address(
319+
spend_vk.hash(), PointerAddress(24157, 177, 42), network=Network.MAINNET
320+
).encode()
321+
== "addr1gyy6nhfyks7wdu3dudslys37v252w2nwhv0fw2nfawemmnyph3wczvf2dqflgt"
322+
)
323+
324+
212325
def test_payment_address_12_reward_from_entropy():
213326
hdwallet = HDWallet.from_entropy(MNEMONIC_12_ENTROPY)
214327
hdwallet_stake = hdwallet.derive_from_path("m/1852'/1815'/0'/2/0")

0 commit comments

Comments
 (0)