|
3 | 3 | import os |
4 | 4 | import pprint |
5 | 5 | import sys |
| 6 | +import ast |
6 | 7 | from decimal import Decimal |
7 | 8 |
|
8 | 9 | from ConfigParser import NoSectionError |
|
13 | 14 | from joinmarket.blockchaininterface import BitcoinCoreInterface, RegtestBitcoinCoreInterface |
14 | 15 | from joinmarket.configure import jm_single, get_network, get_p2pk_vbyte |
15 | 16 |
|
16 | | -from joinmarket.support import get_log, select_gradual, select_greedy, \ |
17 | | - select_greediest |
| 17 | +from joinmarket.support import get_log, utxo_selector |
18 | 18 |
|
19 | 19 | log = get_log() |
20 | 20 |
|
@@ -46,19 +46,27 @@ def __init__(self): |
46 | 46 | #some consumer scripts don't use an unspent, this marks it |
47 | 47 | #as specifically absent (rather than just empty). |
48 | 48 | self.unspent = None |
49 | | - self.utxo_selector = btc.select # default fallback: upstream |
50 | 49 | try: |
51 | | - config = jm_single().config |
52 | | - if config.get("POLICY", "merge_algorithm") == "gradual": |
53 | | - self.utxo_selector = select_gradual |
54 | | - elif config.get("POLICY", "merge_algorithm") == "greedy": |
55 | | - self.utxo_selector = select_greedy |
56 | | - elif config.get("POLICY", "merge_algorithm") == "greediest": |
57 | | - self.utxo_selector = select_greediest |
58 | | - elif config.get("POLICY", "merge_algorithm") != "default": |
59 | | - raise Exception("Unknown merge algorithm") |
| 50 | + policy = jm_single().config.get("POLICY", "merge_algorithm") |
60 | 51 | except NoSectionError: |
61 | | - pass |
| 52 | + policy = "default" # maintain backwards compatibility! |
| 53 | + if policy == "default": |
| 54 | + self.merge_policy = [42] # well, almost (python lacks infinites) |
| 55 | + elif policy == "gradual": |
| 56 | + self.merge_policy = [60] # never goes beyond gradual |
| 57 | + elif policy == "greedy": |
| 58 | + self.merge_policy = [70, 70] # skip gradual, go greedy |
| 59 | + elif policy == "greediest": |
| 60 | + self.merge_policy = [80, 80, 80] # straight to greediest |
| 61 | + else: |
| 62 | + try: # stop supporting word configs, someday... |
| 63 | + self.merge_policy = ast.literal_eval(policy) |
| 64 | + if ((type(self.merge_policy) is not list) or |
| 65 | + any(type(level) is not int for level in self.merge_policy)): |
| 66 | + raise Exception("Merge policy must be a list of ints") |
| 67 | + except ValueError: |
| 68 | + raise Exception("Unparseable merge policy: "+policy) |
| 69 | + self.utxo_selector = utxo_selector(self.merge_policy) |
62 | 70 |
|
63 | 71 | def get_key_from_addr(self, addr): |
64 | 72 | return None |
|
0 commit comments