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.
trezor-firmware/core/src/apps/bitcoin/sign_tx/omni.py

31 lines
890 B

from micropython import const
from ustruct import unpack
from trezor.strings import format_amount
_OMNI_DECIMALS = const(8)
currencies = {
1: ("OMNI", _OMNI_DECIMALS),
2: ("tOMNI", _OMNI_DECIMALS),
3: ("MAID", 0),
31: ("USDT", _OMNI_DECIMALS),
}
def is_valid(data: bytes) -> bool:
return len(data) >= 8 and data[:4] == b"omni"
def parse(data: bytes) -> str:
if not is_valid(data):
raise ValueError # tried to parse data that fails validation
tx_version, tx_type = unpack(">HH", data[4:8])
if tx_version == 0 and tx_type == 0 and len(data) == 20: # OMNI simple send
currency, amount = unpack(">IQ", data[8:20])
suffix, decimals = currencies.get(currency, ("UNKN", 0))
return f"Simple send of {format_amount(amount, decimals)} {suffix}"
else:
# unknown OMNI transaction
return "Unknown transaction"