from micropython import const from apps.common import HARDENED NEM_NETWORK_MAINNET = const(0x68) NEM_NETWORK_TESTNET = const(0x98) NEM_NETWORK_MIJIN = const(0x60) NEM_TRANSACTION_TYPE_TRANSFER = const(0x0101) NEM_TRANSACTION_TYPE_IMPORTANCE_TRANSFER = const(0x0801) NEM_TRANSACTION_TYPE_AGGREGATE_MODIFICATION = const(0x1001) NEM_TRANSACTION_TYPE_MULTISIG_SIGNATURE = const(0x1002) NEM_TRANSACTION_TYPE_MULTISIG = const(0x1004) NEM_TRANSACTION_TYPE_PROVISION_NAMESPACE = const(0x2001) NEM_TRANSACTION_TYPE_MOSAIC_CREATION = const(0x4001) NEM_TRANSACTION_TYPE_MOSAIC_SUPPLY_CHANGE = const(0x4002) NEM_MAX_DIVISIBILITY = const(6) NEM_MAX_SUPPLY = const(9000000000) NEM_SALT_SIZE = const(32) AES_BLOCK_SIZE = const(16) NEM_HASH_ALG = "keccak" NEM_PUBLIC_KEY_SIZE = const(32) # ed25519 public key NEM_LEVY_PERCENTILE_DIVISOR_ABSOLUTE = const(10000) NEM_MOSAIC_AMOUNT_DIVISOR = const(1000000) NEM_MAX_PLAIN_PAYLOAD_SIZE = const(1024) NEM_MAX_ENCRYPTED_PAYLOAD_SIZE = const(960) def get_network_str(network: int) -> str: if network == NEM_NETWORK_MAINNET: return "Mainnet" elif network == NEM_NETWORK_TESTNET: return "Testnet" elif network == NEM_NETWORK_MIJIN: return "Mijin" def check_path(path: list, network=None) -> bool: """ Validates derivation path to fit 44'/43'/a' or 44'/43'/a'/0'/0', where `a` is an account number. We believe the path should be 44'/43'/a', but for compatibility reasons with NEM's NanoWallet we allow 44'/43'/a'/0'/0' as well. Testnet is also allowed: 44'/1'/a'{/0'/0'} """ length = len(path) if length != 3 and length != 5: return False if path[0] != 44 | HARDENED: return False if not ( path[1] == 43 | HARDENED or (network == NEM_NETWORK_TESTNET and path[1] == 1 | HARDENED) ): return False if path[2] < HARDENED or path[2] > 1000000 | HARDENED: return False if length == 5 and (path[3] != 0 | HARDENED or path[4] != 0 | HARDENED): return False return True