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