[electrum] fix signature updating in fusion code
This is a bugfix follow-up to D14472.
tx.inputs() now builds the coin dicts on demand, and changing the returned coin dicts no longer affects the transaction in any way. The code needs to operate on tx.txinputs() which returns a list of references to the actual coin stored in the transaction.
Check that there are no other signatures updating in coin dicts left in the codebase (except for some coin dict serialization code for legacy IO):
grep -r '\["signatures"\] =' . grep -r '\["signatures"\]\[' .
Patch the server code to allow for testing with two wallets:
diff --git a/electrum/electrumabc_plugins/fusion/server.py b/electrum/electrumabc_plugins/fusion/server.py index 8242a2686a..ac85a86ea7 100644 --- a/electrum/electrumabc_plugins/fusion/server.py +++ b/electrum/electrumabc_plugins/fusion/server.py @@ -113,12 +113,12 @@ class Params: ] # How many clients do we want before starting a fusion? - min_clients = 8 + min_clients = 2 # If all clients submitted largest possible component (uncompressed p2pkh input), how many could we take until the result would exceed 100 kB standard tx size limitation? max_clients = (100000 - 12) // (num_components * 173) # Every round, clients leave ... How many clients do we need as an absolute minimum (for privacy)? - min_safe_clients = 6 + min_safe_clients = 2 # Choose the minimum excess fee based on dividing the overhead amongst players, in the smallest fusion # (these overhead numbers assume op_return script size of 1 + 5 (lokad) + 33 (session hash) ) @@ -137,17 +137,17 @@ class Params: max_tier_client_tags = 100 # For a given IP, how many players can they represent in the same fuse? - ip_max_simul_fuse = 3 + ip_max_simul_fuse = 6 # Guaranteed time to launch a fusion if the pool has stayed at or above min_clients for this long. - start_time_max = 1200 + start_time_max = 60 # Inter-fusion delay -- after starting any fusion, wait this long before starting the next one (unless hit max time or pool is full). - start_time_spacing = 120 + start_time_spacing = 20 # But don't start a fusion if it has only been above min_clients for a short time (unless pool is full). - start_time_min = 400 + start_time_min = 20 # whether to print a lot of logs - noisy = False + noisy = True # How long covert connections are allowed to stay open without activity.
Start the server:
./electrum-abc -v daemon start ./electrum-abc daemon fusion_server_start
Start two wallets on another computer and change the fusion server IP and port to the test server. Check that it fuses successfully.
Reviewers: #bitcoin_abc, Fabien
Reviewed By: #bitcoin_abc, Fabien
Differential Revision: https://reviews.bitcoinabc.org/D14810