Browse Source

Merge #808: New Yield Generator: the perfect private cycler

993003e Change mixdepth selection of yg-privacyenhanced (Pantamis)
master
Adam Gibson 5 years ago
parent
commit
89fa0109a6
No known key found for this signature in database
GPG Key ID: 141001A1AF77F20B
  1. 24
      scripts/yg-privacyenhanced.py

24
scripts/yg-privacyenhanced.py

@ -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;

Loading…
Cancel
Save