Example #1
0
    def do_send(self, tx: Union[Transaction, PartialTransaction]):
        def on_success(result):
            window.show_message(_("Your transaction was sent to the cosigning pool.") + '\n' +
                                _("Open your cosigner wallet to retrieve it."))
        def on_failure(exc_info):
            e = exc_info[1]
            try: self.logger.error("on_failure", exc_info=exc_info)
            except OSError: pass
            window.show_error(_("Failed to send transaction to cosigning pool") + ':\n' + repr(e))

        buffer = []
        some_window = None
        # construct messages
        for window, xpub, K, _hash in self.cosigner_list:
            if not self.cosigner_can_sign(tx, xpub):
                continue
            some_window = window
            raw_tx_bytes = tx.serialize_as_bytes()
            public_key = ecc.ECPubkey(K)
            message = public_key.encrypt_message(raw_tx_bytes).decode('ascii')
            buffer.append((_hash, message))
        if not buffer:
            return

        # send messages
        # note: we send all messages sequentially on the same thread
        def send_messages_task():
            for _hash, message in buffer:
                server.put(_hash, message)
        msg = _('Sending transaction to cosigning pool...')
        WaitingDialog(some_window, msg, send_messages_task, on_success, on_failure)
Example #2
0
    def do_send(self, tx: Union[Transaction, PartialTransaction]):
        def on_success(result):
            window.show_message(
                _("Your transaction was sent to the cosigning pool.") + '\n' +
                _("Open your cosigner wallet to retrieve it."))

        def on_failure(exc_info):
            e = exc_info[1]
            try:
                self.logger.error("on_failure", exc_info=exc_info)
            except OSError:
                pass
            window.show_error(
                _("Failed to send transaction to cosigning pool") + ':\n' +
                repr(e))

        for window, xpub, K, _hash in self.cosigner_list:
            if not self.cosigner_can_sign(tx, xpub):
                continue
            # construct message
            raw_tx_bytes = tx.serialize_as_bytes()
            public_key = ecc.ECPubkey(K)
            message = public_key.encrypt_message(raw_tx_bytes).decode('ascii')
            # send message
            task = lambda: server.put(_hash, message)
            msg = _('Sending transaction to cosigning pool...')
            WaitingDialog(window, msg, task, on_success, on_failure)
Example #3
0
    def _send(self, parent, blob):
        def sender_thread():
            with self._audio_interface() as interface:
                src = BytesIO(blob)
                dst = interface.player()
                amodem.main.send(config=self.modem_config, src=src, dst=dst)

        _logger.info(f'Sending: {repr(blob)}')
        blob = zlib.compress(blob.encode('ascii'))

        kbps = self.modem_config.modem_bps / 1e3
        msg = 'Sending to Audio MODEM ({0:.1f} kbps)...'.format(kbps)
        WaitingDialog(parent, msg, sender_thread)
Example #4
0
 def waiting_dialog_for_billing_info(self, window, *, on_finished=None):
     def task():
         return self.request_billing_info(window.wallet, suppress_connection_error=False)
     def on_error(exc_info):
         e = exc_info[1]
         window.show_error("{header}\n{exc}\n\n{tor}"
                           .format(header=_('Error getting TrustedCoin account info.'),
                                   exc=repr(e),
                                   tor=_('If you keep experiencing network problems, try using a Tor proxy.')))
     return WaitingDialog(parent=window,
                          message=_('Requesting account info from TrustedCoin server...'),
                          task=task,
                          on_success=on_finished,
                          on_error=on_error)
Example #5
0
 def prompt_user_for_otp(self, wallet, tx, on_success, on_failure):
     if not isinstance(wallet, self.plugin.wallet_class):
         return
     if wallet.can_sign_without_server():
         return
     if not wallet.keystores['x3/'].can_sign(tx, ignore_watching_only=True):
         self.logger.info("twofactor: xpub3 not needed")
         return
     window = self.window.top_level_window()
     auth_code = self.plugin.auth_dialog(window)
     WaitingDialog(parent=window,
                   message=_('Waiting for TrustedCoin server to sign transaction...'),
                   task=lambda: wallet.on_otp(tx, auth_code),
                   on_success=lambda *args: on_success(tx),
                   on_error=on_failure)
Example #6
0
    def _recv(self, parent):
        def receiver_thread():
            with self._audio_interface() as interface:
                src = interface.recorder()
                dst = BytesIO()
                amodem.main.recv(config=self.modem_config, src=src, dst=dst)
                return dst.getvalue()

        def on_finished(blob):
            if blob:
                blob = zlib.decompress(blob).decode('ascii')
                _logger.info(f'Received: {repr(blob)}')
                parent.setText(blob)

        kbps = self.modem_config.modem_bps / 1e3
        msg = 'Receiving from Audio MODEM ({0:.1f} kbps)...'.format(kbps)
        WaitingDialog(parent, msg, receiver_thread, on_finished)
Example #7
0
 def waiting_dialog(self, window, on_finished=None):
     task = partial(self.request_billing_info, window.wallet)
     return WaitingDialog(window, 'Getting billing information...', task,
                          on_finished)