You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
4.0 KiB
101 lines
4.0 KiB
from ubinascii import unhexlify
|
|
|
|
from common import *
|
|
|
|
from apps.common import HARDENED
|
|
from trezor.crypto import bip32
|
|
from trezor.messages import CardanoAddressType
|
|
from trezor.messages.CardanoAddressParametersType import CardanoAddressParametersType
|
|
from trezor.messages.CardanoBlockchainPointerType import CardanoBlockchainPointerType
|
|
|
|
|
|
if not utils.BITCOIN_ONLY:
|
|
from apps.cardano.helpers import staking_use_cases
|
|
from apps.cardano.seed import Keychain
|
|
|
|
|
|
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
|
|
class TestCardanoStakingUseCases(unittest.TestCase):
|
|
def test_get(self):
|
|
mnemonic = (
|
|
"test walk nut penalty hip pave soap entry language right filter choice"
|
|
)
|
|
passphrase = ""
|
|
node = bip32.from_mnemonic_cardano(mnemonic, passphrase)
|
|
keychain = Keychain(node)
|
|
|
|
expected_staking_use_cases = [
|
|
# address parameters, expected staking use case
|
|
(
|
|
CardanoAddressParametersType(
|
|
address_type=CardanoAddressType.BASE,
|
|
address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0],
|
|
address_n_staking=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0],
|
|
),
|
|
staking_use_cases.MATCH,
|
|
),
|
|
(
|
|
CardanoAddressParametersType(
|
|
address_type=CardanoAddressType.BASE,
|
|
address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0],
|
|
address_n_staking=[1852 | HARDENED, 1815 | HARDENED, 2 | HARDENED, 2, 0],
|
|
),
|
|
staking_use_cases.MISMATCH,
|
|
),
|
|
(
|
|
CardanoAddressParametersType(
|
|
address_type=CardanoAddressType.BASE,
|
|
address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0],
|
|
staking_key_hash=unhexlify("32c728d3861e164cab28cb8f006448139c8f1740ffb8e7aa9e5232dc"),
|
|
),
|
|
staking_use_cases.MATCH,
|
|
),
|
|
(
|
|
CardanoAddressParametersType(
|
|
address_type=CardanoAddressType.BASE,
|
|
address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0],
|
|
staking_key_hash=unhexlify("122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277"),
|
|
),
|
|
staking_use_cases.MISMATCH,
|
|
),
|
|
(
|
|
CardanoAddressParametersType(
|
|
address_type=CardanoAddressType.POINTER,
|
|
address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0],
|
|
certificate_pointer=CardanoBlockchainPointerType(
|
|
block_index=1, tx_index=2, certificate_index=3
|
|
),
|
|
),
|
|
staking_use_cases.POINTER_ADDRESS,
|
|
),
|
|
(
|
|
CardanoAddressParametersType(
|
|
address_type=CardanoAddressType.REWARD,
|
|
address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0],
|
|
),
|
|
staking_use_cases.MATCH,
|
|
),
|
|
(
|
|
CardanoAddressParametersType(
|
|
address_type=CardanoAddressType.ENTERPRISE,
|
|
address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0],
|
|
),
|
|
staking_use_cases.NO_STAKING,
|
|
),
|
|
(
|
|
CardanoAddressParametersType(
|
|
address_type=CardanoAddressType.BYRON,
|
|
address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0],
|
|
),
|
|
staking_use_cases.NO_STAKING,
|
|
),
|
|
]
|
|
|
|
for address_parameters, expected_staking_use_case in expected_staking_use_cases:
|
|
actual_staking_use_case = staking_use_cases.get(keychain, address_parameters)
|
|
self.assertEqual(actual_staking_use_case, expected_staking_use_case)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|