Skip to content

Instantly share code, notes, and snippets.

@knaccc
Last active September 3, 2020 14:02
Show Gist options
  • Save knaccc/78c691aa1c1e0710bb8264ef17b56768 to your computer and use it in GitHub Desktop.
Save knaccc/78c691aa1c1e0710bb8264ef17b56768 to your computer and use it in GitHub Desktop.
Tx2OutMergeProbability
----------------------
pick a random 2-out tx from the blockchain during month of July 2020
search for direct or indirect merges
repeat n times, report how many of the pairs had >=1 merges detected
result:
[1, 72, 100] of 100 iterations
meaning:
direct merges: 1 of 100
1 churn merges: 72 of 100
2 churn merges: 100 of 100
experiment repeated, this time with 2 entirely random outputs chosen from month of July 2020
result:
merges: [0, 30, 100] of 100 iterations
MergeAnonymitySetSize
---------------------
key question: if you send me two poisoned outputs, and I intend to merge them (i.e. spend them together in the same transaction),
how many other ways will the blockchain also report that they might have been merged by chance?
procedure:
pick two random outputs on the blockchain created during month of July 2020
count the number of direct or indirect merges observed
repeat for several pairs of two random poisoned outputs
result:
(churn window means: for each output, the observation window during which all successive churns of that ouput collectively occur)
(direct means spent together directly in a transaction, level 1 means each output churned at most once prior to merge tx.
level 1 can thus include situations where the first output was never churned at all, but the second output was churned once)
====================================================
Possible merges of 2 random outputs, detected with churn window = 2 hours
====================================================
Direct | Level 1 | Level 2 | Level 3 | Level 4
--------|----------|----------|----------|----------
0 | 0 | 0 | 0 | 0
0 | 0 | 0 | 0 | 0
0 | 0 | 0 | 1 | 3
0 | 0 | 1 | 1 | 1
0 | 0 | 0 | 0 | 0
====================================================
====================================================
Possible merges of 2 random outputs, detected with churn window = 4 hours
====================================================
Direct | Level 1 | Level 2 | Level 3 | Level 4
--------|----------|----------|----------|----------
0 | 0 | 2 | 8 | 25
0 | 0 | 0 | 0 | 4
0 | 0 | 0 | 0 | 4
0 | 0 | 0 | 1 | 1
0 | 0 | 1 | 9 | 42
====================================================
====================================================
Possible merges of 2 random outputs, detected with churn window = 24 hours
====================================================
Direct | Level 1 | Level 2 | Level 3 | Level 4
--------|----------|----------|----------|----------
0 | 0 | 0 | 27 | 358
0 | 0 | 0 | 69 | 562
0 | 0 | 2 | 51 | 267
0 | 0 | 6 | 80 | 642
0 | 1 | 5 | 378 | 2730
====================================================
====================================================
Possible merges of 2 random outputs, detected with churn window = 48 hours
====================================================
Direct | Level 1 | Level 2 | Level 3 | Level 4
--------|----------|----------|----------|----------
0 | 0 | 90 | 1902 | 13584
0 | 0 | 42 | 1036 | 6775
0 | 0 | 1 | 76 | 1191
0 | 0 | 5 | 294 | 2740
0 | 0 | 1 | 111 | 1110
===================================================
====================================================
Possible merges of 2 random outputs, detected with churn window = 96 hours
====================================================
Direct | Level 1 | Level 2 | Level 3 | Level 4
--------|----------|----------|----------|----------
0 | 0 | 6 | 192 | 2776
0 | 0 | 29 | 1256 | 11102
0 | 0 | 5 | 257 | 3314
0 | 0 | 7 | 420 | 3465
0 | 0 | 64 | 2987 | 24700
====================================================
Conclusion: Churn incoming inputs at least 3 times, and do not merge churned outputs within 24 hours of receipt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment