33import os
44import pprint
55import sys
6+ import ast
67from decimal import Decimal
78
89from ConfigParser import NoSectionError
1314from joinmarket .blockchaininterface import BitcoinCoreInterface
1415from joinmarket .configure import jm_single , get_network , get_p2pk_vbyte
1516
16- from joinmarket .support import get_log , select_gradual , select_greedy , \
17- select_greediest
17+ from joinmarket .support import get_log , utxo_selector
1818
1919log = get_log ()
2020
@@ -38,19 +38,27 @@ class AbstractWallet(object):
3838
3939 def __init__ (self ):
4040 self .max_mix_depth = 0
41- self .utxo_selector = btc .select # default fallback: upstream
4241 try :
43- config = jm_single ().config
44- if config .get ("POLICY" , "merge_algorithm" ) == "gradual" :
45- self .utxo_selector = select_gradual
46- elif config .get ("POLICY" , "merge_algorithm" ) == "greedy" :
47- self .utxo_selector = select_greedy
48- elif config .get ("POLICY" , "merge_algorithm" ) == "greediest" :
49- self .utxo_selector = select_greediest
50- elif config .get ("POLICY" , "merge_algorithm" ) != "default" :
51- raise Exception ("Unknown merge algorithm" )
42+ policy = jm_single ().config .get ("POLICY" , "merge_algorithm" )
5243 except NoSectionError :
53- pass
44+ policy = "default" # maintain backwards compatibility!
45+ if policy == "default" :
46+ self .merge_policy = [42 ] # well, almost (python lacks infinites)
47+ elif policy == "gradual" :
48+ self .merge_policy = [6 ] # never goes beyond gradual
49+ elif policy == "greedy" :
50+ self .merge_policy = [7 , 7 ] # skip gradual, go greedy
51+ elif policy == "greediest" :
52+ self .merge_policy = [8 , 8 , 8 ] # straight to greediest
53+ else :
54+ try : # stop supporting word configs, someday...
55+ self .merge_policy = ast .literal_eval (policy )
56+ if ((type (self .merge_policy ) is not list ) or
57+ any (type (level ) is not int for level in self .merge_policy )):
58+ raise Exception ("Merge policy must be a list of ints" )
59+ except ValueError :
60+ raise Exception ("Unparseable merge policy: " + policy )
61+ self .utxo_selector = utxo_selector (self .merge_policy )
5462
5563 def get_key_from_addr (self , addr ):
5664 return None
0 commit comments