|
|
|
|
@ -21,7 +21,29 @@ class YieldGeneratorPrivacyEnhanced(YieldGeneratorBasic):
|
|
|
|
|
|
|
|
|
|
def __init__(self, wallet_service, offerconfig): |
|
|
|
|
super().__init__(wallet_service, offerconfig) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def select_input_mixdepth(self, available, offer, amount): |
|
|
|
|
"""Mixdepths are in cyclic order and we select the mixdepth to |
|
|
|
|
maximize the largest interval of non-available mixdepths by choosing |
|
|
|
|
the first mixdepth available after the largest such interval. |
|
|
|
|
This forces the biggest UTXOs to stay in a bulk of few mixdepths so |
|
|
|
|
that the maker can always maximize the size of his orders even when |
|
|
|
|
some coins are sent from the last to the first mixdepth""" |
|
|
|
|
# We sort the available depths for linear scaling of the interval search |
|
|
|
|
available = sorted(available.keys()) |
|
|
|
|
# For an available mixdepth, the smallest interval starting from this mixdepth |
|
|
|
|
# containing all the other available mixdepths necessarily ends at the previous |
|
|
|
|
# available mixdepth in the cyclic order. The successive difference of sorted |
|
|
|
|
# depths is then the length of the largest interval ending at the same mixdepth |
|
|
|
|
# without any available mixdepths, modulo the number of mixdepths if 0 is in it |
|
|
|
|
# which is only the case for the first (in linear order) available mixdepth case |
|
|
|
|
intervals = ([self.wallet_service.mixdepth + 1 + available[0] - available[-1]] + \ |
|
|
|
|
[(available[i+1] - available[i]) for i in range(len(available)-1)]) |
|
|
|
|
# We return the mixdepth value at which the largest interval without |
|
|
|
|
# available mixdepths ends. Selecting this mixdepth will send the CoinJoin |
|
|
|
|
# outputs closer to the others available mixdepths which are after in cyclical order |
|
|
|
|
return available[max(range(len(available)), key = intervals.__getitem__)] |
|
|
|
|
|
|
|
|
|
def create_my_orders(self): |
|
|
|
|
mix_balance = self.get_available_mixdepths() |
|
|
|
|
# We publish ONLY the maximum amount and use minsize for lower bound; |
|
|
|
|
|