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
866 B

from ustruct import unpack
from trezor.strings import format_amount
currencies = {
1: ("OMNI", True),
2: ("tOMNI", True),
3: ("MAID", False),
31: ("USDT", True),
}
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, divisible = currencies.get(currency, ("UNKN", False))
return "Simple send of %s %s" % (
format_amount(amount, 8 if divisible else 0),
suffix,
)
else:
# unknown OMNI transaction
return "Unknown transaction"