async def confirm_sending(ctx, amount, to): to_lines = list(chunks(to, 17)) t1 = Text("Confirm transaction", ui.ICON_SEND, icon_color=ui.GREEN) t1.normal("Confirm sending:") t1.bold(format_coin_amount(amount)) t1.normal("to:") t1.bold(to_lines[0]) pages = [t1] LINES_PER_PAGE = 4 if len(to_lines) > 1: to_pages = list(chunks(to_lines[1:], LINES_PER_PAGE)) for page in to_pages: t = Text("Confirm transaction", ui.ICON_SEND, icon_color=ui.GREEN) for line in page: t.bold(line) pages.append(t) await ctx.call(ButtonRequest(code=ButtonRequestType.Other), MessageType.ButtonAck) paginator = paginate(create_renderer(ConfirmDialog), len(pages), const(0), pages) return await ctx.wait(paginator) == CONFIRMED
async def confirm_action_voteproducer(ctx, msg: EosActionVoteProducer): if msg.proxy and not msg.producers: # PROXY text = Text("Vote for proxy", ui.ICON_CONFIRM, icon_color=ui.GREEN) text.normal("Voter:") text.normal(helpers.eos_name_to_string(msg.voter)) text.normal("Proxy:") text.normal(helpers.eos_name_to_string(msg.proxy)) await require_confirm(ctx, text, ButtonRequestType.ConfirmOutput) elif msg.producers: # PRODUCERS await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) producers = list(enumerate(msg.producers)) pages = list(chunks(producers, _FIVE_FIELDS_PER_PAGE)) paginator = paginate(show_voter_page, len(pages), _FIRST_PAGE, pages) await ctx.wait(paginator) else: # Cancel vote text = Text("Cancel vote", ui.ICON_CONFIRM, icon_color=ui.GREEN) text.normal("Voter:") text.normal(helpers.eos_name_to_string(msg.voter)) await require_confirm(ctx, text, ButtonRequestType.ConfirmOutput)
async def confirm_action_delegate(ctx, msg: EosActionDelegate): await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) text = "Delegate" fields = [] fields.append("Sender:") fields.append(helpers.eos_name_to_string(msg.sender)) fields.append("Receiver:") fields.append(helpers.eos_name_to_string(msg.receiver)) fields.append("CPU:") fields.append(helpers.eos_asset_to_string(msg.cpu_quantity)) fields.append("NET:") fields.append(helpers.eos_asset_to_string(msg.net_quantity)) if msg.transfer: fields.append("Transfer: Yes") fields.append("Receiver:") fields.append(helpers.eos_name_to_string(msg.receiver)) else: fields.append("Transfer: No") pages = list(chunks(fields, _FOUR_FIELDS_PER_PAGE)) paginator = paginate(show_lines_page, len(pages), _FIRST_PAGE, pages, text) await ctx.wait(paginator)
async def require_confirm_proposals(ctx, proposals): await ctx.call(ButtonRequest(code=ButtonRequestType.SignTx), MessageType.ButtonAck) first_page = const(0) pages = proposals title = "Submit proposals" if len(proposals) > 1 else "Submit proposal" paginator = paginate(show_proposal_page, len(pages), first_page, pages, title) return await ctx.wait(paginator)
async def show_mnemonic(ctx, mnemonic: str): await ctx.call(ButtonRequest(code=ButtonRequestType.ResetDevice), MessageType.ButtonAck) first_page = const(0) words_per_page = const(4) words = list(enumerate(mnemonic.split())) pages = list(chunks(words, words_per_page)) paginator = paginate(show_mnemonic_page, len(pages), first_page, pages) await ctx.wait(paginator)
async def confirm_action_sellram(ctx, msg: EosActionSellRam): await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) text = "Sell RAM" fields = [] fields.append("Receiver:") fields.append(helpers.eos_name_to_string(msg.account)) fields.append("Bytes:") fields.append(str(msg.bytes)) pages = list(chunks(fields, _TWO_FIELDS_PER_PAGE)) paginator = paginate(show_lines_page, len(pages), _FIRST_PAGE, pages, text) await ctx.wait(paginator)
async def confirm_action_buyrambytes(ctx, msg: EosActionBuyRamBytes): await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) text = "Buy RAM" fields = [] fields.append("Payer:") fields.append(helpers.eos_name_to_string(msg.payer)) fields.append("Receiver:") fields.append(helpers.eos_name_to_string(msg.receiver)) fields.append("Bytes:") fields.append(str(msg.bytes)) pages = list(chunks(fields, _FOUR_FIELDS_PER_PAGE)) paginator = paginate(show_lines_page, len(pages), _FIRST_PAGE, pages, text) await ctx.wait(paginator)
async def confirm_action_unknown(ctx, action, checksum): await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) text = "Arbitrary data" fields = [] fields.append("Contract:") fields.append(helpers.eos_name_to_string(action.account)) fields.append("Action Name:") fields.append(helpers.eos_name_to_string(action.name)) fields.append("Checksum: ") fields += split_data(hexlify(checksum).decode("ascii")) pages = list(chunks(fields, _FIVE_FIELDS_PER_PAGE)) paginator = paginate(show_lines_page, len(pages), _FIRST_PAGE, pages, text) await ctx.wait(paginator)
async def confirm_action_newaccount(ctx, msg: EosActionNewAccount): await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) text = "New Account" fields = [] fields.append("Creator:") fields.append(helpers.eos_name_to_string(msg.creator)) fields.append("Name:") fields.append(helpers.eos_name_to_string(msg.name)) fields += authorization_fields(msg.owner) fields += authorization_fields(msg.active) pages = list(chunks(fields, _FOUR_FIELDS_PER_PAGE)) paginator = paginate(show_lines_page, len(pages), _FIRST_PAGE, pages, text) await ctx.wait(paginator)
async def confirm_action_unlinkauth(ctx, msg: EosActionUnlinkAuth): await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) text = "Unlink Auth" fields = [] fields.append("Account:") fields.append(helpers.eos_name_to_string(msg.account)) fields.append("Code:") fields.append(helpers.eos_name_to_string(msg.code)) fields.append("Type:") fields.append(helpers.eos_name_to_string(msg.type)) pages = list(chunks(fields, _FOUR_FIELDS_PER_PAGE)) paginator = paginate(show_lines_page, len(pages), _FIRST_PAGE, pages, text) await ctx.wait(paginator)
async def show_swipable_with_confirmation( ctx, content, title: str, icon=ui.ICON_RESET, icon_color=ui.ORANGE ): first_page = const(0) lines_per_page = const(4) if isinstance(content, (list, tuple)): lines = content else: lines = list(chunks(content, 17)) pages = list(chunks(lines, lines_per_page)) await ctx.call(ButtonRequest(code=ButtonRequestType.Other), MessageType.ButtonAck) paginator = paginate( show_text_page, len(pages), first_page, pages, title, icon, icon_color ) return await ctx.wait(paginator) == CONFIRMED
async def confirm_action_updateauth(ctx, msg: EosActionUpdateAuth): await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) text = "Update Auth" fields = [] fields.append("Account:") fields.append(helpers.eos_name_to_string(msg.account)) fields.append("Permission:") fields.append(helpers.eos_name_to_string(msg.permission)) fields.append("Parent:") fields.append(helpers.eos_name_to_string(msg.parent)) fields += authorization_fields(msg.auth) pages = list(chunks(fields, _FOUR_FIELDS_PER_PAGE)) paginator = paginate(show_lines_page, len(pages), _FIRST_PAGE, pages, text) await ctx.wait(paginator)
async def confirm_transaction(ctx, amount, fee, network_name): t1 = Text("Confirm transaction", ui.ICON_SEND, icon_color=ui.GREEN) t1.normal("Total amount:") t1.bold(format_coin_amount(amount)) t1.normal("including fee:") t1.bold(format_coin_amount(fee)) t2 = Text("Confirm transaction", ui.ICON_SEND, icon_color=ui.GREEN) t2.normal("Network:") t2.bold(network_name) pages = [t1, t2] await ctx.call(ButtonRequest(code=ButtonRequestType.Other), MessageType.ButtonAck) paginator = paginate(create_renderer(HoldToConfirmDialog), len(pages), const(0), pages) return await ctx.wait(paginator) == CONFIRMED
async def confirm_action_transfer(ctx, msg: EosActionTransfer, account: str): await ctx.call(ButtonRequest(code=ButtonRequestType.ConfirmOutput), MessageType.ButtonAck) text = "Transfer" fields = [] fields.append("From:") fields.append(helpers.eos_name_to_string(msg.sender)) fields.append("To:") fields.append(helpers.eos_name_to_string(msg.receiver)) fields.append("Amount:") fields.append(helpers.eos_asset_to_string(msg.quantity)) fields.append("Contract:") fields.append(account) if msg.memo is not None: fields.append("Memo:") fields += split_data(msg.memo[:512]) pages = list(chunks(fields, _FOUR_FIELDS_PER_PAGE)) paginator = paginate(show_lines_page, len(pages), _FIRST_PAGE, pages, text) await ctx.wait(paginator)
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)
async def _require_confirm_properties(ctx, definition: NEMMosaicDefinition): # TODO: we should send a button request here properties = _get_mosaic_properties(definition) first_page = const(0) paginator = paginate(_show_page, len(properties), first_page, properties) await ctx.wait(paginator)