mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-05-01 22:49:04 +00:00
135 lines
4.4 KiB
Python
135 lines
4.4 KiB
Python
from micropython import const
|
|
from trezor import ui
|
|
from trezor.messages import (NEMMosaicCreation, NEMMosaicDefinition,
|
|
NEMMosaicLevy, NEMMosaicSupplyChange,
|
|
NEMSupplyChangeType, NEMTransactionCommon)
|
|
from trezor.ui.confirm import ConfirmDialog
|
|
from trezor.ui.scroll import Scrollpage, animate_swipe, paginate
|
|
from trezor.ui.text import Text
|
|
from trezor.utils import split_words
|
|
|
|
from ..layout import (require_confirm_content, require_confirm_fee,
|
|
require_confirm_final, require_confirm_text,
|
|
split_address, trim)
|
|
|
|
|
|
async def ask_mosaic_creation(ctx, common: NEMTransactionCommon, creation: NEMMosaicCreation):
|
|
await require_confirm_content(ctx, 'Create mosaic', _creation_message(creation))
|
|
await _require_confirm_properties(ctx, creation.definition)
|
|
await require_confirm_fee(ctx, 'Confirm creation fee', creation.fee)
|
|
|
|
await require_confirm_final(ctx, common.fee)
|
|
|
|
|
|
async def ask_supply_change(ctx, common: NEMTransactionCommon, change: NEMMosaicSupplyChange):
|
|
await require_confirm_content(ctx, 'Supply change', _supply_message(change))
|
|
if change.type == NEMSupplyChangeType.SupplyChange_Decrease:
|
|
msg = 'Decrease supply by ' + str(change.delta) + ' whole units?'
|
|
elif change.type == NEMSupplyChangeType.SupplyChange_Increase:
|
|
msg = 'Increase supply by ' + str(change.delta) + ' whole units?'
|
|
else:
|
|
raise ValueError('Invalid supply change type')
|
|
await require_confirm_text(ctx, msg)
|
|
|
|
await require_confirm_final(ctx, common.fee)
|
|
|
|
|
|
def _creation_message(mosaic_creation):
|
|
return [ui.NORMAL, 'Create mosaic',
|
|
ui.BOLD, mosaic_creation.definition.mosaic,
|
|
ui.NORMAL, 'under namespace',
|
|
ui.BOLD, mosaic_creation.definition.namespace]
|
|
|
|
|
|
def _supply_message(supply_change):
|
|
return [ui.NORMAL, 'Modify supply for',
|
|
ui.BOLD, supply_change.mosaic,
|
|
ui.NORMAL, 'under namespace',
|
|
ui.BOLD, supply_change.namespace]
|
|
|
|
|
|
async def _require_confirm_properties(ctx, definition: NEMMosaicDefinition):
|
|
properties = _get_mosaic_properties(definition)
|
|
first_page = const(0)
|
|
paginator = paginate(_show_page, len(properties), first_page, properties)
|
|
await ctx.wait(paginator)
|
|
|
|
|
|
@ui.layout
|
|
async def _show_page(page: int, page_count: int, content):
|
|
content = Scrollpage(content[page], page, page_count)
|
|
if page + 1 == page_count:
|
|
await ConfirmDialog(content)
|
|
else:
|
|
content.render()
|
|
await animate_swipe()
|
|
|
|
|
|
def _get_mosaic_properties(definition: NEMMosaicDefinition):
|
|
properties = []
|
|
|
|
# description
|
|
if definition.description:
|
|
t = Text('Confirm properties', ui.ICON_SEND)
|
|
t.bold('Description:')
|
|
t.type(*split_words(trim(definition.description, 70), 22))
|
|
properties.append(t)
|
|
|
|
# transferable
|
|
if definition.transferable:
|
|
transferable = 'Yes'
|
|
else:
|
|
transferable = 'No'
|
|
t = Text('Confirm properties', ui.ICON_SEND)
|
|
t.bold('Transferable?')
|
|
t.type(transferable)
|
|
properties.append(t)
|
|
|
|
# mutable_supply
|
|
if definition.mutable_supply:
|
|
imm = 'mutable'
|
|
else:
|
|
imm = 'immutable'
|
|
if definition.supply:
|
|
t = Text('Confirm properties', ui.ICON_SEND)
|
|
t.bold('Initial supply:')
|
|
t.type(str(definition.supply), imm)
|
|
else:
|
|
t = Text('Confirm properties', ui.ICON_SEND)
|
|
t.bold('Initial supply:')
|
|
t.type(imm)
|
|
properties.append(t)
|
|
|
|
# levy
|
|
if definition.levy:
|
|
|
|
t = Text('Confirm properties', ui.ICON_SEND)
|
|
t.bold('Levy recipient:')
|
|
t.mono(*split_address(definition.levy_address))
|
|
properties.append(t)
|
|
|
|
t = Text('Confirm properties', ui.ICON_SEND)
|
|
t.bold('Levy fee:')
|
|
t.type(str(definition.fee))
|
|
t.bold('Levy divisibility:')
|
|
t.type(str(definition.divisibility))
|
|
properties.append(t)
|
|
|
|
t = Text('Confirm properties', ui.ICON_SEND)
|
|
t.bold('Levy namespace:')
|
|
t.type(definition.levy_namespace)
|
|
t.bold('Levy mosaic:')
|
|
t.type(definition.levy_mosaic)
|
|
properties.append(t)
|
|
|
|
if definition.levy == NEMMosaicLevy.MosaicLevy_Absolute:
|
|
levy_type = 'absolute'
|
|
else:
|
|
levy_type = 'percentile'
|
|
t = Text('Confirm properties', ui.ICON_SEND)
|
|
t.bold('Levy type:')
|
|
t.type(levy_type)
|
|
properties.append(t)
|
|
|
|
return properties
|