DM Decomposition Analysis
-
Compile the Rust binaries by running
cargo build --release
(if not already done). -
Run the Dulmage-Mendelsohn decomposition program as follows.
cargo run --release --bin dmdec fork-nonringct-csparse-edges-2530000.txt fork-nonringct-rings-before-dm-2530000.txt fork-nonringct-rings-after-dm-2530000.txt fork-nonringct-blocksizes-2530000.txt fork-nonringct-fine-decomp-2530000.txt
Note: The significance of the arguments to
dmdec
can be understood by runningcargo run -r --bin dmdec -- --help
or./target/release/dmdec --help
.The output should look like the following.
Edge file read in 5.675253986s Num keyimages = 19443292, Num public keys = 20800067 Matched 19443292 out of 20800067 rows (public keys) Number of unreachable pubkeys and keyimages = 16526396 16526396 Number of blocks in fine decomposition: 16521000 Singletons (traceable keyimages): 16517926 Closed set size histogram: {1: 16517926, 2: 2301, 3: 600, 4: 48, 5: 22, 6: 8, 7: 15, 8: 11, 9: 8, 10: 5, 11: 5, 12: 4, 13: 6, 14: 4, 15: 6, 16: 5, 17: 5, 18: 4, 20: 3, 21: 2, 22: 1, 24: 1, 26: 1, 27: 1, 40: 1, 43: 1, 50: 1, 55: 1, 103: 1, 106: 1, 119: 1, 122: 1}
The above output says that out of the 19443292 non-RingCT transaction rings in the data set, 16517926 are traceable, i.e. the true output being spent in these transactions can be identified. Furthermore, Furthermore, there are 2301 closed sets of size 2, 600 closed sets of size 3, and so on.
-
To calculate statistics related to the DM decomposition analysis, run the following command.
cargo run --release --bin stats_dm fork-nonringct-csparse-edges-2530000.txt fork-nonringct-rings-before-dm-2530000.txt fork-nonringct-rings-after-dm-2530000.txt
Note: The significance of the arguments to
stats_dm
can be understood by runningcargo run -r --bin stats_dm -- --help
or./target/release/stats_dm --help
.The output should look like the following.
Edge file read in 8.158130482s Num keyimages = 19443292, Num public keys = 20800067 Pre DM decomposition rings file read in 8.336915518s Pre DM decomposition mixin histogram: [12305154, 707819, 2941534, 1345577, 974689, 143811, 406889, 12399, 9523, 6703, 589194] Post DM decomposition rings file read in 5.167356902s Post DM decomposition mixin histogram: [16517926, 1408040, 836524, 165293, 122570, 33646, 38653, 47624, 73866, 80811, 118339] DM decomposition traceable ring mixin histogram: [12305154, 628547, 1800799, 965797, 465084, 76061, 219040, 4484, 3706, 2362, 46892]
The above output can be interpreted as follows.
- Out of the 16517926 traceable non-RingCT rings, 12305154 had zero mixins (there were already traceable) before the DM decomposition, 628547 had one mixin before the DM decomposition, 1800799 had two mixins, and so on.
- In the above histograms, we combine all mixin counts of 10 or more. So 589194 corresponds to the number of non-RingCT transaction rings with 10 or more mixins before the DM decomposition and 118339 is the same number after the DM decomposition.