From 986b935955ec7a738dedb0106bd31ada8bfd0909 Mon Sep 17 00:00:00 2001
From: Petr Svenda <petr@svenda.com>
Date: Mon, 19 Aug 2024 08:02:16 +0200
Subject: [PATCH] minor text updates and fixes

---
 Scripts/cj_analysis.py     |  4 ++--
 Scripts/parse_dumplings.py | 24 ++++++++++++++++--------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/Scripts/cj_analysis.py b/Scripts/cj_analysis.py
index 3c7901a..3077a56 100644
--- a/Scripts/cj_analysis.py
+++ b/Scripts/cj_analysis.py
@@ -328,8 +328,8 @@ def plot_mix_liquidity(mix_id: str, data: dict, initial_liquidity, time_liqiudit
     assert len(mix_enter) == len(mix_leave) == len(mix_remixfriend) == len(mix_remixfriend_ww1) == len(mix_stay), logging.error(f'Mismatch in length of input/out sum arrays: {len(mix_enter)} vs. {len(mix_leave)}')
     # Change in liquidity as observed by each coinjoin (increase directly when mix_enter, decrease directly even when mix_leave happens later)
     for index in range(0, len(mix_enter)):
-        curr_liquidity = curr_liquidity + mix_enter[index] + mix_remixfriend[index] + mix_remixfriend_ww1[index] - mix_leave[index]
         liquidity_step = mix_enter[index] + mix_remixfriend[index] + mix_remixfriend_ww1[index] - mix_leave[index]
+        # Print significant changes in liquidity for easier debugging
         if mix_enter[index] > 100 * SATS_IN_BTC:
             print(f'Fresh input jump    of {round(mix_enter[index] / SATS_IN_BTC, 1)} at {index}: {sorted_cj_time[index]}')
         if liquidity_step > 100 * SATS_IN_BTC:
@@ -587,7 +587,7 @@ def analyze_input_out_liquidity(coinjoins, postmix_spend, premix_spend, mix_prot
         else:
             coinjoins[tx['txid']]['broadcast_time_virtual'] = precomp_datetime.strftime(min_broadcast_time)[:-3]  # Use corrected time
 
-            # Print summary results
+    # Print summary results
     SM.print(f'  {get_ratio_string(total_mix_entering, total_inputs)} Inputs entering mix / total inputs used by mix transactions')
     SM.print(f'  {get_ratio_string(total_mix_friends, total_inputs)} Friends inputs re-entering mix / total inputs used by mix transactions')
     SM.print(f'  {get_ratio_string(total_mix_leaving, total_outputs)} Outputs leaving mix / total outputs by mix transactions')
diff --git a/Scripts/parse_dumplings.py b/Scripts/parse_dumplings.py
index 454bede..14b1d40 100644
--- a/Scripts/parse_dumplings.py
+++ b/Scripts/parse_dumplings.py
@@ -2479,15 +2479,19 @@ if __name__ == "__main__":
         wasabi_plot_remixes('wasabi2_select', os.path.join(target_path, 'wasabi2_select'), 'coinjoin_tx_info.json', True, True)
 
     if PROCESS_NOTABLE_INTERVALS:
+        def process_joint_interval(mix_origin_name, interval_name, all_data, mix_type, target_path, start_date: str,
+                                   end_date: str):
+            process_and_save_single_interval(interval_name, all_data, mix_type, target_path, start_date, end_date)
+            shutil.copyfile(os.path.join(target_path, mix_origin_name, 'fee_rates.json'),
+                            os.path.join(target_path, interval_name, 'fee_rates.json'))
+            shutil.copyfile(os.path.join(target_path, mix_origin_name, 'false_cjtxs.json'),
+                            os.path.join(target_path, interval_name, 'false_cjtxs.json'))
+            wasabi_plot_remixes(interval_name, MIX_PROTOCOL.WASABI1, os.path.join(target_path, interval_name),
+                                'coinjoin_tx_info.json', True, False)
+
         if CONSIDER_WW1:
             target_load_path = os.path.join(target_path, 'wasabi1')
-            all_data = als.load_json_from_file(os.path.join(target_load_path, f'coinjoin_tx_info.json'))
-
-            def process_joint_interval(mix_origin_name, interval_name, all_data, mix_type, target_path, start_date: str, end_date: str):
-                process_and_save_single_interval(interval_name, all_data, mix_type, target_path, start_date,end_date)
-                shutil.copyfile(os.path.join(target_path, mix_origin_name, 'fee_rates.json'), os.path.join(target_path, interval_name, 'fee_rates.json'))
-                shutil.copyfile(os.path.join(target_path, mix_origin_name, 'false_cjtxs.json'), os.path.join(target_path, interval_name, 'false_cjtxs.json'))
-                wasabi_plot_remixes(interval_name, MIX_PROTOCOL.WASABI1, os.path.join(target_path, interval_name), 'coinjoin_tx_info.json', True, False)
+            all_data = als.load_coinjoins_from_file(os.path.join(target_load_path, f'coinjoin_tx_info.json'), None, True)
 
             # Large inflows into WW1 in 2019-08-09, mixed and the all taken out
             process_joint_interval('wasabi1', 'wasabi1__2019_08-09', all_data, MIX_PROTOCOL.WASABI1, target_path, '2019-08-01 00:00:07.000', '2019-09-30 23:59:59.000')
@@ -2539,7 +2543,7 @@ if __name__ == "__main__":
             process_and_save_intervals_filter('wasabi2', MIX_PROTOCOL.WASABI2, target_path, '2022-06-01 00:00:07.000', interval_stop_date,
                                        'Wasabi2CoinJoins.txt', 'Wasabi2PostMixTxs.txt', None, SAVE_BASE_FILES_JSON, False)
             # WW2 needs additional treatment - detect and fix origin of WW1 inflows as friends
-            fix_ww2_for_fdnp_ww1(mix_id, target_path)
+            fix_ww2_for_fdnp_ww1('wasabi2', target_path)
 
     if VISUALIZE_ALL_COINJOINS_INTERVALS:
         if CONSIDER_WHIRLPOOL:
@@ -2662,6 +2666,8 @@ if __name__ == "__main__":
     #     process_and_save_intervals_filter('wasabi2false', target_path, '2022-06-18 01:38:07.000', '2024-02-15 01:38:07.000',
     #                                'Wasabi2CoinJoins_false.txt', 'Wasabi2PostMixTxs.txt', None, SAVE_BASE_FILES_JSON)
 
+    # TODO: Analyze difference of unmoved and dynamic liquidity for Whirlpool between 2024-04-24 and 2024-08-24 (impact of knowledge of whirlpool seizure). Show last 1 year.
+
     print('### SUMMARY #############################')
     SM.print_summary()
     print('### END SUMMARY #########################')
@@ -2702,3 +2708,5 @@ if __name__ == "__main__":
 
     # TODO: Filter overall smaller and bigger cjtxs and plot separately
 
+    # TODO: Plot graph of remix rates (values, num_inputs) as line plot for all months into single graph
+
-- 
GitLab