async def require_confirm_tx(ctx, to, value): text = Text("Confirm sending", ui.ICON_SEND, ui.GREEN) text.bold(format_amount(value, helpers.DECIMALS) + " XRP") text.normal("to") text.mono(*split_address(to)) return await require_hold_to_confirm(ctx, text, ButtonRequestType.SignTx)
async def require_confirm_final(ctx, fee: int): text = Text("Final confirm", ui.ICON_SEND, icon_color=ui.GREEN) text.normal("Sign this transaction") text.bold("and pay %s XEM" % format_amount(fee, NEM_MAX_DIVISIBILITY)) text.normal("for network fee?") # we use SignTx, not ConfirmOutput, for compatibility with T1 await require_hold_to_confirm(ctx, text, ButtonRequestType.SignTx)
async def require_confirm_fee(ctx, action: str, fee: int): content = ( ui.NORMAL, action, ui.BOLD, '%s XEM' % format_amount(fee, NEM_MAX_DIVISIBILITY), ) await require_confirm_content(ctx, 'Confirm fee', content)
def test_format_amount(self): VECTORS = [ (123456, 3, "123.456"), (4242, 7, "0.0004242"), (-123456, 3, "-123.456"), (-4242, 7, "-0.0004242"), ] for v in VECTORS: self.assertEqual(utils.format_amount(v[0], v[1]), v[2])
def _get_levy_msg(mosaic_definition, quantity: int, network: int) -> str: levy_definition = get_mosaic_definition( mosaic_definition['levy_namespace'], mosaic_definition['levy_mosaic'], network) if mosaic_definition['levy'] == NEMMosaicLevy.MosaicLevy_Absolute: levy_fee = mosaic_definition['fee'] else: levy_fee = quantity * mosaic_definition[ 'fee'] / NEM_LEVY_PERCENTILE_DIVISOR_ABSOLUTE return format_amount( levy_fee, levy_definition['divisibility']) + levy_definition['ticker']
def format_icon_amount(value: int, token, nid: int, tx_type=None): if token: if token is tokens.UNKNOWN_TOKEN: return "Unknown token value" suffix = token[2] decimals = token[3] else: suffix = networks.shortcut_by_nid(nid, tx_type) decimals = 18 return "%s %s" % (format_amount(value, decimals), suffix)
def _get_levy_msg(mosaic_definition, quantity: int, network: int) -> str: levy_definition = get_mosaic_definition( mosaic_definition["levy_namespace"], mosaic_definition["levy_mosaic"], network) if mosaic_definition["levy"] == NEMMosaicLevy.MosaicLevy_Absolute: levy_fee = mosaic_definition["fee"] else: levy_fee = (quantity * mosaic_definition["fee"] / NEM_LEVY_PERCENTILE_DIVISOR_ABSOLUTE) return (format_amount(levy_fee, levy_definition["divisibility"]) + levy_definition["ticker"])
async def _require_confirm_transfer(ctx, recipient, value): content = Text('Confirm transfer', ui.ICON_SEND, ui.BOLD, 'Send %s XEM' % format_amount(value, NEM_MAX_DIVISIBILITY), ui.NORMAL, 'to', ui.MONO, *split_address(recipient), icon_color=ui.GREEN) await require_confirm(ctx, content, ButtonRequestType.ConfirmOutput)
async def require_confirm_final(ctx, fee: int): content = Text('Final confirm', ui.ICON_SEND, ui.NORMAL, 'Sign this transaction', ui.BOLD, 'and pay %s XEM' % format_amount(fee, NEM_MAX_DIVISIBILITY), ui.NORMAL, 'for network fee?', icon_color=ui.GREEN) # we use SignTx, not ConfirmOutput, for compatibility with T1 await require_hold_to_confirm(ctx, content, ButtonRequestType.SignTx)
async def require_confirm_order(ctx, msg: BinanceOrderMsg): page1 = Text("Confirm order 1/3", ui.ICON_SEND, icon_color=ui.GREEN) page1.normal("Sender address:") page1.bold(msg.sender) page2 = Text("Confirm order 2/3", ui.ICON_SEND, icon_color=ui.GREEN) page2.normal("Pair:") page2.bold(msg.symbol) page2.normal("Side:") if msg.side == BinanceOrderSide.BUY: page2.bold("Buy") elif msg.side == BinanceOrderSide.SELL: page2.bold("Sell") page3 = Text("Confirm order 3/3", ui.ICON_SEND, icon_color=ui.GREEN) page3.normal("Quantity:") page3.bold(format_amount(msg.quantity, helpers.DECIMALS)) page3.normal("Price:") page3.bold(format_amount(msg.price, helpers.DECIMALS)) return await hold_to_confirm(ctx, Paginated([page1, page2, page3]), ButtonRequestType.SignTx)
def format_ethereum_amount(value, token, chain_id): value = int.from_bytes(value, 'big') if token: suffix = token['symbol'] decimals = token['decimal'] elif value < 1e18: suffix = 'Wei' decimals = 0 else: decimals = 18 suffix = networks.suffix_by_chain_id(chain_id) return '%s %s' % (format_amount(value, decimals), suffix)
def parse(data: bytes) -> bool: if not is_valid(data): return None 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"
def make_input_output_pages(msg: BinanceInputOutput, direction): pages = [] for coin in msg.coins: coin_page = Text("Confirm " + direction, ui.ICON_SEND, icon_color=ui.GREEN) coin_page.bold( format_amount(coin.amount, helpers.DECIMALS) + " " + coin.denom) coin_page.normal("to") coin_page.mono(*split_address(msg.address)) pages.append(coin_page) return pages
def format_ethereum_amount(value: int, token, chain_id: int, tx_type=None): if token: if token is tokens.UNKNOWN_TOKEN: return "Unknown token value" suffix = token[2] decimals = token[3] else: suffix = networks.shortcut_by_chain_id(chain_id, tx_type) decimals = 18 if value <= 1e9: suffix = "Wei " + suffix decimals = 0 return "%s %s" % (format_amount(value, decimals), suffix)
def format_ethereum_amount(value: int, token, chain_id: int, tx_type=None): if token: if token is tokens.UNKNOWN_TOKEN: return "Unknown token value" suffix = token[2] decimals = token[3] else: suffix = networks.shortcut_by_chain_id(chain_id, tx_type) decimals = 18 # Don't want to display wei values for tokens with small decimal numbers if decimals > 9 and value < 10 ** (decimals - 9): suffix = "Wei " + suffix decimals = 0 return "%s %s" % (format_amount(value, decimals), suffix)
async def ask_transfer_mosaic(ctx, common: NEMTransactionCommon, transfer: NEMTransfer, mosaic: NEMMosaic): if is_nem_xem_mosaic(mosaic.namespace, mosaic.mosaic): return definition = get_mosaic_definition(mosaic.namespace, mosaic.mosaic, common.network) mosaic_quantity = mosaic.quantity * transfer.amount / NEM_MOSAIC_AMOUNT_DIVISOR if definition: msg = Text("Confirm mosaic", ui.ICON_SEND, ui.GREEN) msg.normal("Confirm transfer of") msg.bold( format_amount(mosaic_quantity, definition["divisibility"]) + definition["ticker"]) msg.normal("of") msg.bold(definition["name"]) await require_confirm(ctx, msg, ButtonRequestType.ConfirmOutput) if "levy" in definition and "fee" in definition: levy_msg = _get_levy_msg(definition, mosaic_quantity, common.network) msg = Text("Confirm mosaic", ui.ICON_SEND, ui.GREEN) msg.normal("Confirm mosaic", "levy fee of") msg.bold(levy_msg) await require_confirm(ctx, msg, ButtonRequestType.ConfirmOutput) else: msg = Text("Confirm mosaic", ui.ICON_SEND, ui.RED) msg.bold("Unknown mosaic!") msg.normal("Divisibility and levy") msg.normal("cannot be shown for") msg.normal("unknown mosaics") await require_confirm(ctx, msg, ButtonRequestType.ConfirmOutput) msg = Text("Confirm mosaic", ui.ICON_SEND, ui.GREEN) msg.normal("Confirm transfer of") msg.bold("%s raw units" % mosaic_quantity) msg.normal("of") msg.bold("%s.%s" % (mosaic.namespace, mosaic.mosaic)) await require_confirm(ctx, msg, ButtonRequestType.ConfirmOutput)
async def ask_transfer_mosaic(ctx, common: NEMTransactionCommon, transfer: NEMTransfer, mosaic: NEMMosaic): if is_nem_xem_mosaic(mosaic.namespace, mosaic.mosaic): return definition = get_mosaic_definition(mosaic.namespace, mosaic.mosaic, common.network) mosaic_quantity = mosaic.quantity * transfer.amount / NEM_MOSAIC_AMOUNT_DIVISOR if definition: msg = Text('Confirm mosaic', ui.ICON_SEND, icon_color=ui.GREEN) msg.normal('Confirm transfer of') msg.bold( format_amount(mosaic_quantity, definition['divisibility']) + definition['ticker']) msg.normal('of') msg.bold(definition['name']) await require_confirm(ctx, msg, ButtonRequestType.ConfirmOutput) if 'levy' in definition and 'fee' in definition: levy_msg = _get_levy_msg(definition, mosaic_quantity, common.network) msg = Text('Confirm mosaic', ui.ICON_SEND, icon_color=ui.GREEN) msg.normal('Confirm mosaic', 'levy fee of') msg.bold(levy_msg) await require_confirm(ctx, msg, ButtonRequestType.ConfirmOutput) else: msg = Text('Confirm mosaic', ui.ICON_SEND, icon_color=ui.RED) msg.bold('Unknown mosaic!') msg.normal(*split_words( 'Divisibility and levy cannot be shown for unknown mosaics', 22)) await require_confirm(ctx, msg, ButtonRequestType.ConfirmOutput) msg = Text('Confirm mosaic', ui.ICON_SEND, icon_color=ui.GREEN) msg.normal('Confirm transfer of') msg.bold('%s raw units' % mosaic_quantity) msg.normal('of') msg.bold('%s.%s' % (mosaic.namespace, mosaic.mosaic)) await require_confirm(ctx, msg, ButtonRequestType.ConfirmOutput)
def format_amount(value): return "%s XMR" % utils.format_amount(value, 12)
def format_amount(amount: int, ticker=True) -> str: t = "" if ticker: t = " XLM" return utils.format_amount(amount, consts.AMOUNT_DECIMALS) + t
def format_coin_amount(amount, coin): return "%s %s" % (format_amount(amount, coin.decimals), coin.coin_shortcut)
def format_coin_amount(amount, coin): return "%s %s" % (format_amount(amount, coin.divisibility), coin.coin_shortcut)
def format_amount(value): return "%s BCN" % utils.format_amount(value, 8)
def format_amount(amount: int, ticker=True) -> str: t = "" if ticker: t = " XLM" return utils.format_amount(amount, consts.AMOUNT_DIVISIBILITY) + t
def format_coin_amount(amount, coin): return '%s %s' % (format_amount(amount, 8), coin.coin_shortcut)
def format_coin_amount(value): return "%s LSK" % format_amount(value, 8)
def format_tezos_amount(value): formatted_value = format_amount(value, TEZOS_AMOUNT_DIVISIBILITY) return formatted_value + " XTZ"
def format_coin_amount(amount): return "%s %s" % (format_amount(amount, 6), "ADA")
async def _require_confirm_transfer(ctx, recipient, value): text = Text("Confirm transfer", ui.ICON_SEND, ui.GREEN) text.bold("Send %s XEM" % format_amount(value, NEM_MAX_DIVISIBILITY)) text.normal("to") text.mono(*split_address(recipient)) await require_confirm(ctx, text, ButtonRequestType.ConfirmOutput)
async def require_confirm_fee(ctx, fee): text = Text("Confirm fee", ui.ICON_SEND, ui.GREEN) text.normal("Transaction fee:") text.bold(format_amount(fee, helpers.DECIMALS) + " XRP") await require_confirm(ctx, text, ButtonRequestType.ConfirmOutput)
def format_tezos_amount(value): formatted_value = format_amount(value, TEZOS_AMOUNT_DECIMALS) return formatted_value + " XTZ"