Browse Source

maintain INTERNAL flag for tweaks, remove wallet sync between runs

master
Adam Gibson 10 years ago
parent
commit
2ea1b27f43
No known key found for this signature in database
GPG Key ID: B3AE09F1E9A3197A
  1. 4
      jmclient/jmclient/schedule.py
  2. 4
      jmclient/jmclient/taker.py
  3. 4
      jmclient/jmclient/tumble_support.py
  4. 14
      scripts/joinmarket-qt.py
  5. 7
      scripts/qtsupport.py
  6. 3
      scripts/tumbler.py

4
jmclient/jmclient/schedule.py

@ -134,7 +134,7 @@ def get_tumble_schedule(options, destaddrs):
t['makercount'], t['destination'], t['wait'], 0]) t['makercount'], t['destination'], t['wait'], 0])
return schedule return schedule
def tweak_tumble_schedule(options, schedule, last_completed): def tweak_tumble_schedule(options, schedule, last_completed, destaddrs=[]):
"""If a tx in a schedule failed for some reason, and we want """If a tx in a schedule failed for some reason, and we want
to make a best effort to complete the schedule, we can tweak to make a best effort to complete the schedule, we can tweak
the failed entry to improve the odds of success on re-try. the failed entry to improve the odds of success on re-try.
@ -145,6 +145,8 @@ def tweak_tumble_schedule(options, schedule, last_completed):
""" """
new_schedule = copy.deepcopy(schedule) new_schedule = copy.deepcopy(schedule)
altered = new_schedule[last_completed + 1] altered = new_schedule[last_completed + 1]
if not altered[3] in destaddrs:
altered[3] = "INTERNAL"
#For sweeps, we'll try with a lower number of counterparties if we can. #For sweeps, we'll try with a lower number of counterparties if we can.
#Note that this is usually counterproductive for non-sweeps, which fall #Note that this is usually counterproductive for non-sweeps, which fall
#back and so benefit in reliability from *higher* counterparty numbers. #back and so benefit in reliability from *higher* counterparty numbers.

4
jmclient/jmclient/taker.py

@ -29,7 +29,8 @@ class Taker(object):
schedule, schedule,
order_chooser=weighted_order_choose, order_chooser=weighted_order_choose,
sign_method=None, sign_method=None,
callbacks=None): callbacks=None,
tdestaddrs=[]):
"""Schedule must be a list of tuples: (see sample_schedule_for_testnet """Schedule must be a list of tuples: (see sample_schedule_for_testnet
for explanation of syntax, also schedule.py module in this directory), for explanation of syntax, also schedule.py module in this directory),
which will be a sequence of joins to do. which will be a sequence of joins to do.
@ -79,6 +80,7 @@ class Taker(object):
self.waiting_for_conf = False self.waiting_for_conf = False
self.txid = None self.txid = None
self.schedule_index = -1 self.schedule_index = -1
self.tdestaddrs = tdestaddrs
#allow custom wallet-based clients to use their own signing code; #allow custom wallet-based clients to use their own signing code;
#currently only setting "wallet" is allowed, calls wallet.sign_tx(tx) #currently only setting "wallet" is allowed, calls wallet.sign_tx(tx)
self.sign_method = sign_method self.sign_method = sign_method

4
jmclient/jmclient/tumble_support.py

@ -118,6 +118,7 @@ def tumbler_taker_finished_update(taker, schedulefile, tumble_log, options,
'Address ' + destaddr + ' invalid. ' + errormsg + ' try again') 'Address ' + destaddr + ' invalid. ' + errormsg + ' try again')
jm_single().debug_silence[0] = False jm_single().debug_silence[0] = False
taker.schedule[taker.schedule_index+1][3] = destaddr taker.schedule[taker.schedule_index+1][3] = destaddr
taker.tdestaddrs.append(destaddr)
waiting_message = "Waiting for: " + str(waittime) + " minutes." waiting_message = "Waiting for: " + str(waittime) + " minutes."
tumble_log.info(waiting_message) tumble_log.info(waiting_message)
@ -138,7 +139,8 @@ def tumbler_taker_finished_update(taker, schedulefile, tumble_log, options,
" failed after timeout, trying again") " failed after timeout, trying again")
taker.schedule_index -= 1 taker.schedule_index -= 1
taker.schedule = tweak_tumble_schedule(options, taker.schedule, taker.schedule = tweak_tumble_schedule(options, taker.schedule,
taker.schedule_index) taker.schedule_index,
taker.tdestaddrs)
tumble_log.info("We tweaked the schedule, the new schedule is:") tumble_log.info("We tweaked the schedule, the new schedule is:")
tumble_log.info(pprint.pformat(taker.schedule)) tumble_log.info(pprint.pformat(taker.schedule))
else: else:

14
scripts/joinmarket-qt.py

@ -328,6 +328,7 @@ class SpendTab(QWidget):
self.spendstate.schedule_name = wizard.get_name() self.spendstate.schedule_name = wizard.get_name()
self.updateSchedView() self.updateSchedView()
self.tumbler_options = wizard.opts self.tumbler_options = wizard.opts
self.tumbler_destaddrs = wizard.get_destaddrs()
self.sch_startButton.setEnabled(True) self.sch_startButton.setEnabled(True)
def selectSchedule(self): def selectSchedule(self):
@ -556,8 +557,9 @@ class SpendTab(QWidget):
log.debug('starting coinjoin ..') log.debug('starting coinjoin ..')
w.statusBar().showMessage("Syncing wallet ...") #DON'T sync wallet since unless cache is updated, will forget index
sync_wallet(w.wallet, fast=True) #w.statusBar().showMessage("Syncing wallet ...")
#sync_wallet(w.wallet, fast=True)
#Decide whether to interrupt processing to sanity check the fees #Decide whether to interrupt processing to sanity check the fees
if jm_single().config.get("GUI", "checktx") == "true": if jm_single().config.get("GUI", "checktx") == "true":
@ -565,12 +567,14 @@ class SpendTab(QWidget):
else: else:
check_offers_callback = None check_offers_callback = None
destaddrs = self.tumbler_destaddrs if self.tumbler_options else []
self.taker = Taker(w.wallet, self.taker = Taker(w.wallet,
self.spendstate.loaded_schedule, self.spendstate.loaded_schedule,
order_chooser=weighted_order_choose, order_chooser=weighted_order_choose,
callbacks=[check_offers_callback, callbacks=[check_offers_callback,
self.callback_takerInfo, self.callback_takerInfo,
self.callback_takerFinished]) self.callback_takerFinished],
tdestaddrs=destaddrs)
if ignored_makers: if ignored_makers:
self.taker.ignored_makers.extend(ignored_makers) self.taker.ignored_makers.extend(ignored_makers)
if not self.clientfactory: if not self.clientfactory:
@ -708,7 +712,7 @@ class SpendTab(QWidget):
self.giveUp() self.giveUp()
def startNextTransaction(self): def startNextTransaction(self):
sync_wallet(w.wallet, fast=True) #sync_wallet(w.wallet, fast=True)
self.clientfactory.getClient().clientStart() self.clientfactory.getClient().clientStart()
def takerFinished(self): def takerFinished(self):
@ -810,6 +814,7 @@ class SpendTab(QWidget):
self.qtw.setTabEnabled(1, True) self.qtw.setTabEnabled(1, True)
self.spendstate.reset() self.spendstate.reset()
self.tumbler_options = None self.tumbler_options = None
self.tumbler_destaddrs = None
w.statusBar().showMessage("Transaction aborted.") w.statusBar().showMessage("Transaction aborted.")
def cleanUp(self): def cleanUp(self):
@ -844,6 +849,7 @@ class SpendTab(QWidget):
self.qtw.setTabEnabled(1, True) self.qtw.setTabEnabled(1, True)
self.spendstate.reset() self.spendstate.reset()
self.tumbler_options = None self.tumbler_options = None
self.tumbler_destaddrs = None
def validateSettings(self): def validateSettings(self):
valid, errmsg = validate_address(self.widgets[0][1].text()) valid, errmsg = validate_address(self.widgets[0][1].text())

7
scripts/qtsupport.py

@ -659,8 +659,11 @@ class ScheduleWizard(QWizard):
return "TUMBLE.schedule" return "TUMBLE.schedule"
#return self.field("schedfilename").toString() #return self.field("schedfilename").toString()
def get_destaddrs(self):
return self.destaddrs
def get_schedule(self): def get_schedule(self):
destaddrs = [str(x) for x in [self.field("destaddr0").toString(), self.destaddrs = [str(x) for x in [self.field("destaddr0").toString(),
self.field("destaddr1").toString(), self.field("destaddr1").toString(),
self.field("destaddr2").toString()]] self.field("destaddr2").toString()]]
self.opts = {} self.opts = {}
@ -680,4 +683,4 @@ class ScheduleWizard(QWizard):
self.opts['mincjamount'] = int(self.field("mincjamount").toString()) self.opts['mincjamount'] = int(self.field("mincjamount").toString())
#needed for Taker to check: #needed for Taker to check:
jm_single().mincjamount = self.opts['mincjamount'] jm_single().mincjamount = self.opts['mincjamount']
return get_tumble_schedule(self.opts, destaddrs) return get_tumble_schedule(self.opts, self.destaddrs)

3
scripts/tumbler.py

@ -138,7 +138,8 @@ def main():
taker = Taker(wallet, taker = Taker(wallet,
schedule, schedule,
order_chooser=weighted_order_choose, order_chooser=weighted_order_choose,
callbacks=(filter_orders_callback, None, taker_finished)) callbacks=(filter_orders_callback, None, taker_finished),
tdestaddrs=destaddrs)
clientfactory = JMTakerClientProtocolFactory(taker) clientfactory = JMTakerClientProtocolFactory(taker)
nodaemon = jm_single().config.getint("DAEMON", "no_daemon") nodaemon = jm_single().config.getint("DAEMON", "no_daemon")
daemon = True if nodaemon == 1 else False daemon = True if nodaemon == 1 else False

Loading…
Cancel
Save