Skip to content

Instantly share code, notes, and snippets.

@Rucknium
Last active January 15, 2025 17:36
Show Gist options
  • Save Rucknium/784b243d75184333144a92b3258788f6 to your computer and use it in GitHub Desktop.
Save Rucknium/784b243d75184333144a92b3258788f6 to your computer and use it in GitHub Desktop.
Monero FCMP MAX_INPUTS/MAX_OUTPUTS empirical analysis

Monero FCMP MAX_INPUTS/MAX_OUTPUTS empirical analysis

Limiting the number of inputs and outputs allowed in a transaction may reduce the storage space and verification computation costs of Full-Chain Membership Proof (FCMP) Monero transactions. See here for initial discussion. This note is a preliminary attempt to measure the likely cost of different values for the proposed MAX_INPUTS and MAX_OUTPUTS blockchain consensus rule parameters. The analysis uses empirical blockchain data from here, estimated cost per input/output cardinality based on modified Python code (see below) here, and the results of an output consolidation algorithm.

TODO: MAX_OUTPUTS analysis

The output consolidation algorithm attempts to consolidate outputs in the fewest number of "rounds". A round is the period of time it takes for a set of unrelated transactions to be confirmed and spendable, i.e. about 10 blocks.

Below is a visualization of consolidation steps. The maximum number of outputs is 4. The initial outputs to consolidate is 19. Each row in the plot is a set of outputs that exist at a specific point in time. The first row has all 19 inputs. The arrows pointing to circles in the next row show consolidation transactions. When an arrow connects a single circle to another single circle, there is no actual transaction. Instead, the arrow represents a visual accounting action that just carries the unspent output into the next time period.

output-consolidation-MAX_INPUTS-4-initial-outputs-19

If users are required to consolidate their outputs with MAX_INPUTS or fewer inputs, the distribution of transaction inputs will change. Below are tables that show the change in the distribution and the new size and computational cost. The units are not yet interpretable, but the relative values can be compared between different MAX_INPUTS rules. The size and compute costs are based on this gist. The numbers for the compute factor of 4 are used. No batching is assumed, so a single transaction's compute cost is the sum of Proof 1 Base Cost, Proof 2 Base Cost, and Commitments. The compute cost for BP+ outputs is the sum of Base Cost and Commitments.

  • input.size.cost is a metric of the aggregate FCMP input size of transactions that have n.inputs.
  • input.compute.cost is a metric of the aggregate FCMP verification computational cost of transactions that have n.inputs.
  • additional.outputs.size.cost is a metric of the aggregate size of the additional outputs that the consolidation transactions produce.
  • additional.outputs.compute.cost is a metric of the aggregate verification computational cost of the additional outputs that the consolidation transactions produce.
  • total.size.cost is the sum of input.size.cost and additional.outputs.size.cost
  • total.compute.cost is the sum of input.compute.cost and additional.outputs.compute.cost

The most relevant numbers are the total.size.cost and total.compute.cost in the final row, which is the sum total of the columns. The values in these cells can be compared between different MAX_INPUTS values. The size cost metric is 5471, 4795, 4542, and 4405 for MAX_INPUTS = 4, 8, 16, and 128 respectively. The computational cost metric is 3904, 3706, 3692, and 3857 for MAX_INPUTS = 4, 8, 16, and 128 respectively.

MAX_INPUTS = 4

n.inputs share input.size.cost input.compute.cost additional.outputs.size.cost additional.outputs.compute.cost total.size.cost total.compute.cost
1 44.725 1937.770 885.621 0.000 0.000 1937.770 885.621
2 33.462 1747.517 1293.244 20.667 4.316 1768.185 1297.559
3 3.155 185.512 239.747 26.745 5.584 212.257 245.331
4 18.657 1306.333 1424.291 246.678 51.508 1553.012 1475.799
Sum NA 100.000 5177.133 3842.903 294.090 61.408 5471.223 3904.311

MAX_INPUTS = 8

n.inputs share input.size.cost input.compute.cost additional.outputs.size.cost additional.outputs.compute.cost total.size.cost total.compute.cost
1 50.270 1937.770 885.621 0.000 0.000 1937.770 885.621
2 36.587 1699.933 1258.029 5.159 1.077 1705.092 1259.107
3 2.177 113.905 147.206 6.016 1.256 119.922 148.462
4 1.273 79.297 86.457 5.578 1.165 84.875 87.622
5 0.917 62.464 122.996 5.120 1.069 67.584 124.065
6 0.784 59.641 105.409 5.388 1.125 65.029 106.534
7 0.683 58.802 92.083 5.329 1.113 64.131 93.196
8 7.309 676.720 986.385 73.773 15.404 750.493 1001.789
Sum NA 100.000 4688.532 3684.187 106.362 22.209 4794.894 3706.396

MAX_INPUTS = 16

n.inputs share input.size.cost input.compute.cost additional.outputs.size.cost additional.outputs.compute.cost total.size.cost total.compute.cost
1 52.661 1937.770 885.621 0.000 0.000 1937.770 885.621
2 38.063 1688.213 1249.356 1.339 0.280 1689.551 1249.635
3 1.958 97.802 126.395 1.355 0.283 99.157 126.678
4 1.039 61.801 67.382 1.325 0.277 63.126 67.658
5 0.693 45.084 88.774 1.258 0.263 46.342 89.037
6 0.526 38.176 67.472 1.114 0.233 39.290 67.705
7 0.416 34.190 53.541 0.998 0.208 35.187 53.749
8 0.351 31.037 45.239 0.931 0.194 31.968 45.434
9 0.303 28.503 77.399 0.912 0.190 29.415 77.590
10 0.296 30.000 75.471 0.869 0.181 30.869 75.652
11 0.263 28.309 67.142 1.256 0.262 29.564 67.404
12 0.204 23.474 52.074 0.822 0.172 24.295 52.246
13 0.179 22.372 45.896 0.760 0.159 23.132 46.054
14 0.186 24.392 47.693 1.081 0.226 25.473 47.919
15 0.162 22.441 41.525 0.899 0.188 23.340 41.713
16 2.699 391.101 693.046 22.668 4.733 413.770 697.780
Sum NA 100.000 4504.665 3684.026 37.586 7.848 4542.251 3691.874

MAX_INPUTS = 128

n.inputs share input.size.cost input.compute.cost additional.outputs.size.cost additional.outputs.compute.cost total.size.cost total.compute.cost
1 54.019 1937.770 885.621 0.000 0.000 1937.770 885.621
2 38.950 1684.132 1246.335 0.008 0.002 1684.140 1246.337
3 1.913 93.149 120.382 0.008 0.002 93.158 120.384
4 0.973 56.385 61.477 0.008 0.002 56.393 61.478
5 0.622 39.459 77.697 0.008 0.002 39.466 77.698
6 0.461 32.622 57.657 0.008 0.002 32.631 57.658
7 0.357 28.568 44.737 0.008 0.002 28.576 44.739
8 0.295 25.389 37.007 0.008 0.002 25.397 37.009
9 0.247 22.618 61.419 0.007 0.001 22.625 61.421
10 0.242 23.957 60.267 0.008 0.002 23.965 60.269
11 0.181 19.005 45.076 0.008 0.002 19.013 45.077
12 0.151 16.978 37.665 0.007 0.002 16.986 37.666
13 0.130 15.871 32.560 0.007 0.001 15.878 32.561
14 0.115 14.646 28.637 0.006 0.001 14.652 28.639
15 0.103 13.888 25.698 0.007 0.001 13.895 25.699
16 0.097 13.658 24.202 0.009 0.002 13.667 24.204
17 0.079 11.537 39.129 0.008 0.002 11.545 39.130
18 0.069 10.637 34.294 0.011 0.002 10.648 34.297
19 0.099 15.797 49.012 0.512 0.107 16.308 49.118
20 0.060 10.117 30.022 0.023 0.005 10.140 30.027
21 0.050 8.750 25.066 0.014 0.003 8.764 25.068
22 0.043 7.868 21.632 0.011 0.002 7.880 21.635
23 0.039 7.350 19.557 0.012 0.003 7.362 19.560
24 0.036 7.035 18.019 0.011 0.002 7.046 18.021
25 0.035 6.976 17.197 0.009 0.002 6.985 17.198
26 0.029 6.001 14.257 0.006 0.001 6.006 14.258
27 0.026 5.582 12.819 0.003 0.001 5.585 12.819
28 0.024 5.364 11.986 0.003 0.001 5.367 11.987
29 0.022 5.032 10.890 0.003 0.001 5.034 10.890
30 0.023 5.328 11.238 0.003 0.001 5.331 11.239
31 0.037 8.988 18.395 0.003 0.001 8.991 18.395
32 0.017 4.234 8.457 0.003 0.001 4.237 8.458
33 0.015 3.902 15.161 0.002 0.000 3.905 15.161
34 0.015 3.849 14.540 0.002 0.000 3.851 14.540
35 0.013 3.610 13.314 0.002 0.000 3.612 13.314
36 0.013 3.546 12.732 0.003 0.001 3.549 12.732
37 0.011 3.229 11.346 0.003 0.001 3.232 11.346
38 0.011 3.084 10.565 0.002 0.000 3.087 10.565
39 0.010 2.992 10.041 0.003 0.001 2.995 10.041
40 0.010 3.109 10.182 0.003 0.001 3.112 10.183
41 0.009 2.859 9.182 0.002 0.000 2.862 9.182
42 0.008 2.652 8.320 0.002 0.000 2.654 8.320
43 0.008 2.580 7.944 0.002 0.000 2.583 7.945
44 0.008 2.517 7.578 0.002 0.000 2.520 7.579
45 0.007 2.483 7.342 0.003 0.001 2.486 7.342
46 0.007 2.431 7.035 0.003 0.001 2.434 7.036
47 0.007 2.331 6.629 0.003 0.001 2.333 6.630
48 0.006 2.294 6.392 0.002 0.000 2.296 6.392
49 0.006 2.300 6.274 0.003 0.001 2.302 6.275
50 0.007 2.731 7.330 0.003 0.001 2.734 7.330
51 0.006 2.094 5.511 0.002 0.000 2.096 5.511
52 0.005 2.048 5.283 0.003 0.001 2.050 5.284
53 0.005 2.028 5.135 0.002 0.000 2.030 5.136
54 0.005 1.915 4.778 0.002 0.000 1.918 4.778
55 0.004 1.821 4.460 0.002 0.000 1.823 4.461
56 0.004 1.794 4.332 0.002 0.000 1.797 4.332
57 0.004 1.780 4.223 0.002 0.000 1.783 4.224
58 0.006 2.538 5.938 0.025 0.005 2.564 5.943
59 0.004 1.768 4.066 0.002 0.000 1.770 4.066
60 0.006 2.702 6.130 0.001 0.000 2.703 6.130
61 0.004 1.863 4.157 0.002 0.000 1.865 4.157
62 0.004 1.703 3.749 0.002 0.000 1.704 3.749
63 0.008 3.792 8.218 0.066 0.014 3.858 8.232
64 0.004 1.814 3.880 0.002 0.000 1.816 3.881
65 0.003 1.626 6.833 0.003 0.001 1.629 6.834
66 0.007 3.222 13.332 0.047 0.010 3.269 13.342
67 0.022 10.452 42.713 0.261 0.055 10.713 42.768
68 0.004 1.732 6.974 0.004 0.001 1.737 6.975
69 0.003 1.635 6.500 0.002 0.000 1.637 6.500
70 0.004 2.175 8.522 0.001 0.000 2.176 8.522
71 0.003 1.459 5.649 0.001 0.000 1.460 5.649
72 0.003 1.522 5.808 0.001 0.000 1.523 5.808
73 0.003 1.655 6.245 0.001 0.000 1.656 6.245
74 0.003 1.481 5.512 0.001 0.000 1.482 5.512
75 0.002 0.997 3.668 0.001 0.000 0.998 3.668
76 0.002 0.929 3.371 0.001 0.000 0.929 3.371
77 0.002 0.939 3.372 0.001 0.000 0.940 3.372
78 0.002 0.968 3.431 0.000 0.000 0.969 3.431
79 0.002 0.945 3.313 0.000 0.000 0.945 3.313
80 0.002 0.986 3.412 0.000 0.000 0.986 3.412
81 0.002 0.967 3.313 0.001 0.000 0.968 3.314
82 0.002 0.921 3.115 0.000 0.000 0.921 3.115
83 0.002 0.930 3.116 0.000 0.000 0.931 3.116
84 0.002 0.984 3.255 0.001 0.000 0.985 3.255
85 0.001 0.897 2.938 0.001 0.000 0.898 2.938
86 0.001 0.914 2.958 0.001 0.000 0.915 2.958
87 0.002 0.973 3.117 0.000 0.000 0.973 3.117
88 0.002 0.953 3.018 0.000 0.000 0.953 3.018
89 0.001 0.937 2.939 0.000 0.000 0.937 2.939
90 0.001 0.890 2.761 0.000 0.000 0.890 2.761
91 0.001 0.924 2.840 0.000 0.000 0.925 2.840
92 0.001 0.843 2.562 0.000 0.000 0.843 2.562
93 0.001 0.911 2.742 0.000 0.000 0.911 2.742
94 0.001 0.847 2.523 0.000 0.000 0.847 2.523
95 0.001 0.869 2.563 0.000 0.000 0.869 2.563
96 0.001 0.803 2.345 0.000 0.000 0.803 2.345
97 0.001 0.792 2.286 0.000 0.000 0.792 2.286
98 0.001 0.875 2.504 0.000 0.000 0.875 2.505
99 0.001 0.877 2.485 0.000 0.000 0.877 2.485
100 0.001 0.941 2.644 0.000 0.000 0.942 2.644
101 0.001 0.851 2.366 0.000 0.000 0.851 2.366
102 0.001 0.808 2.227 0.000 0.000 0.808 2.227
103 0.001 0.774 2.108 0.000 0.000 0.774 2.108
104 0.001 0.729 1.969 0.000 0.000 0.729 1.969
105 0.001 0.803 2.148 0.000 0.000 0.803 2.148
106 0.001 0.802 2.129 0.000 0.000 0.802 2.129
107 0.001 0.734 1.930 0.000 0.000 0.735 1.930
108 0.001 0.695 1.811 0.000 0.000 0.695 1.811
109 0.001 0.740 1.910 0.000 0.000 0.740 1.910
110 0.001 0.722 1.851 0.000 0.000 0.722 1.851
111 0.001 0.808 2.050 0.000 0.000 0.808 2.050
112 0.001 0.711 1.792 0.000 0.000 0.711 1.792
113 0.001 0.766 1.911 0.000 0.000 0.766 1.911
114 0.001 0.691 1.712 0.000 0.000 0.691 1.712
115 0.001 0.641 1.573 0.000 0.000 0.641 1.573
116 0.001 0.727 1.772 0.000 0.000 0.727 1.772
117 0.001 0.750 1.812 0.000 0.000 0.750 1.813
118 0.001 0.756 1.813 0.000 0.000 0.756 1.813
119 0.004 3.535 8.407 0.000 0.000 3.535 8.407
120 0.006 5.046 11.914 0.000 0.000 5.046 11.914
121 0.001 0.655 1.534 0.000 0.000 0.656 1.534
122 0.001 0.566 1.315 0.000 0.000 0.566 1.315
123 0.001 0.501 1.156 0.000 0.000 0.502 1.156
124 0.001 0.505 1.156 0.000 0.000 0.505 1.156
125 0.001 0.606 1.375 0.000 0.000 0.606 1.375
126 0.001 0.504 1.136 0.000 0.000 0.504 1.136
127 0.001 0.544 1.216 0.000 0.000 0.544 1.216
128 0.089 80.021 177.768 0.001 0.000 80.022 177.768
Sum NA 100.000 4403.615 3856.714 1.247 0.260 4404.862 3856.975

R code to reproduce the above analysis is:

# Uncomment to install packages:
# install.packages(c("knitr", "igraph"))

input.consolidation <- function(MAX_INPUTS, input.table, example = NULL) {
  
  input.table <- input.table[input.table$n.inputs > MAX_INPUTS, , drop = FALSE]
  
  result <- vector("list", nrow(input.table))
  example.graph <- NULL
  
  for (i in seq_len(nrow(input.table))) {
    
    n.inputs <- input.table$n.inputs[i]
    
    log.inputs <- logb(n.inputs, base = MAX_INPUTS)
    rounds.final <- ceiling(log.inputs)
    
    rounds <- 0
    n.MAX_INPUTS.txs <- 0
    remainder.tx.n.inputs <- NULL
    inputs.edgelist <- data.frame(source = NULL, destination = NULL)
    
    inputs <- paste0(letters[1], seq_len(n.inputs))
    
    while (length(inputs) > 1) {
      current.length <- length(inputs)
      rounds <- rounds + 1
      
      tail.factor <- rep("A", current.length %% MAX_INPUTS)
      
      split.factor.consolidate.tail <-
        c(rep(seq_len(floor(current.length / MAX_INPUTS)), each = MAX_INPUTS), tail.factor)
      
      split.consolidate.tail <- split(inputs, split.factor.consolidate.tail)
      
      tail.length <- current.length %% MAX_INPUTS
      tail.factor <- paste0(rep("A", tail.length), seq_len(tail.length) )
      
      split.factor.dont.consolidate.tail <-
        c(rep(seq_len(floor(current.length / MAX_INPUTS)), each = MAX_INPUTS), tail.factor)
      
      split.dont.consolidate.tail <- split(inputs, split.factor.dont.consolidate.tail)
      
      if ( length(inputs) <= MAX_INPUTS | 
          (
            ceiling(length(split.consolidate.tail) / MAX_INPUTS) <
              ceiling(length(split.dont.consolidate.tail) / MAX_INPUTS)
          )
      ) {
        split.factor <- split.factor.consolidate.tail
      } else {
        split.factor <- split.factor.dont.consolidate.tail
      }
      
      n.MAX_INPUTS.txs <- n.MAX_INPUTS.txs + floor(current.length / MAX_INPUTS)
      if ( sum(split.factor == "A") > 1 ) {
        remainder.tx.n.inputs <- paste0(remainder.tx.n.inputs, " ", sum(split.factor == "A"))
      }
      inputs <- split(inputs, split.factor)
      names(inputs) <- paste0(letters[rounds + 1], seq_along(inputs))
      inputs.edgelist <- rbind(inputs.edgelist, 
        data.frame(source = unlist(inputs), destination = rep(names(inputs), times = lengths(inputs))))
      inputs <- names(inputs)
    }
    
    stopifnot(rounds == rounds.final)
    
    if (length(remainder.tx.n.inputs) == 0) { remainder.tx.n.inputs <- NA }
    
    if (length(example) == 1 && example == n.inputs) {
      example.graph <- igraph::graph_from_edgelist(as.matrix(inputs.edgelist), directed = TRUE)
    }
    
    result[[i]] <- data.frame(
      n.inputs = n.inputs,
      rounds = rounds,
      n.MAX_INPUTS.txs = n.MAX_INPUTS.txs,
      remainder.tx.n.inputs = gsub("^ ", "", remainder.tx.n.inputs)
    )
    
  }
  
  result <- do.call(rbind, result)
  
  return(list(table = result, example.graph = example.graph))
  
}





# From https://gist.github.com/Rucknium/d2c02f51a2d9f103a28caa8f51be7dbf/raw/9962ab99421254706eba041735230cb1a0f08199/monero-in-out-height-1784324-3097764.md

inputs.md <- 
"|1                |           54.06724|         54.06724|
|2                |           38.98393|         93.05116|
|3                |            1.91450|         94.96566|
|4                |            0.97294|         95.93861|
|5                |            0.62223|         96.56084|
|6                |            0.46069|         97.02153|
|7                |            0.35652|         97.37805|
|8                |            0.29441|         97.67246|
|9                |            0.24665|         97.91911|
|10               |            0.24168|         98.16079|
|11               |            0.18053|         98.34133|
|12               |            0.15063|         98.49196|
|13               |            0.13002|         98.62198|
|14               |            0.11427|         98.73625|
|15               |            0.10234|         98.83859|
|16               |            0.09614|         98.93473|
|17               |            0.07834|         99.01306|
|18               |            0.06833|         99.08139|
|19               |            0.06239|         99.14378|
|20               |            0.05884|         99.20263|
|21               |            0.04949|         99.25212|
|22               |            0.04272|         99.29484|
|23               |            0.03846|         99.33330|
|24               |            0.03545|         99.36875|
|25               |            0.03390|         99.40265|
|26               |            0.02823|         99.43088|
|27               |            0.02553|         99.45641|
|28               |            0.02386|         99.48027|
|29               |            0.02166|         99.50193|
|30               |            0.02229|         99.52422|
|31               |            0.03664|         99.56086|
|32               |            0.01672|         99.57758|
|33               |            0.01513|         99.59271|
|34               |            0.01453|         99.60724|
|35               |            0.01326|         99.62051|
|36               |            0.01264|         99.63315|
|37               |            0.01123|         99.64438|
|38               |            0.01048|         99.65485|
|39               |            0.00992|         99.66478|
|40               |            0.01008|         99.67485|
|41               |            0.00909|         99.68395|
|42               |            0.00821|         99.69215|
|43               |            0.00784|         99.69999|
|44               |            0.00746|         99.70745|
|45               |            0.00718|         99.71463|
|46               |            0.00687|         99.72150|
|47               |            0.00649|         99.72798|
|48               |            0.00627|         99.73425|
|49               |            0.00613|         99.74038|
|50               |            0.00717|         99.74755|
|51               |            0.00541|         99.75296|
|52               |            0.00510|         99.75806|
|53               |            0.00502|         99.76308|
|54               |            0.00465|         99.76773|
|55               |            0.00435|         99.77208|
|56               |            0.00418|         99.77626|
|57               |            0.00407|         99.78033|
|58               |            0.00417|         99.78450|
|59               |            0.00393|         99.78843|
|60               |            0.00606|         99.79449|
|61               |            0.00404|         99.79853|
|62               |            0.00363|         99.80215|
|63               |            0.00356|         99.80571|
|64               |            0.00373|         99.80945|
|65               |            0.00326|         99.81271|
|66               |            0.00337|         99.81608|
|67               |            0.00302|         99.81910|
|68               |            0.00321|         99.82230|
|69               |            0.00315|         99.82545|
|70               |            0.00425|         99.82970|
|71               |            0.00278|         99.83248|
|72               |            0.00287|         99.83535|
|73               |            0.00309|         99.83844|
|74               |            0.00272|         99.84116|
|75               |            0.00180|         99.84296|
|76               |            0.00166|         99.84463|
|77               |            0.00165|         99.84628|
|78               |            0.00170|         99.84798|
|79               |            0.00164|         99.84962|
|80               |            0.00169|         99.85131|
|81               |            0.00162|         99.85293|
|82               |            0.00155|         99.85448|
|83               |            0.00154|         99.85602|
|84               |            0.00160|         99.85761|
|85               |            0.00144|         99.85905|
|86               |            0.00144|         99.86050|
|87               |            0.00154|         99.86204|
|88               |            0.00150|         99.86354|
|89               |            0.00146|         99.86499|
|90               |            0.00138|         99.86638|
|91               |            0.00141|         99.86778|
|92               |            0.00128|         99.86907|
|93               |            0.00137|         99.87044|
|94               |            0.00126|         99.87169|
|95               |            0.00128|         99.87297|
|96               |            0.00116|         99.87413|
|97               |            0.00114|         99.87527|
|98               |            0.00125|         99.87652|
|99               |            0.00124|         99.87776|
|100              |            0.00131|         99.87907|
|101              |            0.00117|         99.88024|
|102              |            0.00111|         99.88135|
|103              |            0.00104|         99.88239|
|104              |            0.00097|         99.88336|
|105              |            0.00106|         99.88442|
|106              |            0.00107|         99.88549|
|107              |            0.00096|         99.88646|
|108              |            0.00090|         99.88736|
|109              |            0.00095|         99.88831|
|110              |            0.00092|         99.88923|
|111              |            0.00101|         99.89024|
|112              |            0.00088|         99.89112|
|113              |            0.00094|         99.89206|
|114              |            0.00085|         99.89292|
|115              |            0.00078|         99.89369|
|116              |            0.00089|         99.89459|
|117              |            0.00089|         99.89548|
|118              |            0.00090|         99.89638|
|119              |            0.00422|         99.90060|
|120              |            0.00596|         99.90656|
|121              |            0.00076|         99.90733|
|122              |            0.00064|         99.90797|
|123              |            0.00057|         99.90853|
|124              |            0.00057|         99.90910|
|125              |            0.00068|         99.90978|
|126              |            0.00056|         99.91034|
|127              |            0.00059|         99.91092|
|128              |            0.00055|         99.91148|
|129              |            0.00060|         99.91207|
|130              |            0.00058|         99.91265|
|131              |            0.00056|         99.91321|
|132              |            0.00053|         99.91375|
|133              |            0.00060|         99.91434|
|134              |            0.00058|         99.91493|
|135              |            0.00054|         99.91547|
|136              |            0.00049|         99.91596|
|137              |            0.00059|         99.91655|
|138              |            0.00054|         99.91709|
|139              |            0.00052|         99.91762|
|140              |            0.00050|         99.91812|
|141              |            0.00044|         99.91855|
|142              |            0.00050|         99.91905|
|143              |            0.00064|         99.91970|
|144              |            0.00055|         99.92025|
|145              |            0.00078|         99.92102|
|146              |            0.03634|         99.95736|
|147              |            0.00160|         99.95896|
|148              |            0.00096|         99.95992|
|149              |            0.00080|         99.96072|
|150              |            0.00087|         99.96160|
|151              |            0.00077|         99.96237|
|152              |            0.00065|         99.96302|
|153              |            0.00040|         99.96342|
|154              |            0.00020|         99.96362|
|155              |            0.00019|         99.96382|
|156              |            0.00018|         99.96400|
|157              |            0.00024|         99.96424|
|158              |            0.00022|         99.96445|
|159              |            0.00022|         99.96467|
|160              |            0.00017|         99.96485|
|161              |            0.00014|         99.96499|
|162              |            0.00017|         99.96517|
|163              |            0.00020|         99.96537|
|164              |            0.00021|         99.96558|
|165              |            0.00017|         99.96575|
|166              |            0.00020|         99.96595|
|167              |            0.00018|         99.96613|
|168              |            0.00016|         99.96629|
|169              |            0.00017|         99.96646|
|170              |            0.00016|         99.96663|
|171              |            0.00017|         99.96679|
|172              |            0.00021|         99.96701|
|173              |            0.00021|         99.96721|
|174              |            0.00018|         99.96739|
|175              |            0.00016|         99.96755|
|176              |            0.00018|         99.96773|
|177              |            0.00020|         99.96793|
|178              |            0.00013|         99.96805|
|179              |            0.00021|         99.96826|
|180              |            0.00014|         99.96841|
|181              |            0.00015|         99.96856|
|182              |            0.00013|         99.96869|
|183              |            0.00017|         99.96885|
|184              |            0.00017|         99.96902|
|185              |            0.00179|         99.97081|
|186              |            0.00015|         99.97096|
|187              |            0.00009|         99.97105|
|188              |            0.00013|         99.97118|
|189              |            0.00013|         99.97132|
|190              |            0.00468|         99.97600|
|191              |            0.00016|         99.97615|
|192              |            0.00019|         99.97634|
|193              |            0.00336|         99.97971|
|194              |            0.01854|         99.99824|
|195              |            0.00031|         99.99855|
|196              |            0.00013|         99.99869|
|197              |            0.00005|         99.99873|
|198              |            0.00007|         99.99880|
|199              |            0.00006|         99.99887|
|200              |            0.00006|         99.99893|
|201              |            0.00006|         99.99899|
|202              |            0.00005|         99.99903|
|203              |            0.00004|         99.99907|
|204              |            0.00005|         99.99912|
|205              |            0.00003|         99.99915|
|206              |            0.00003|         99.99919|
|207              |            0.00003|         99.99922|
|208              |            0.00005|         99.99927|
|209              |            0.00002|         99.99930|
|210              |            0.00003|         99.99933|
|211              |            0.00004|         99.99937|
|212              |            0.00004|         99.99941|
|213              |            0.00005|         99.99945|
|214              |            0.00003|         99.99948|
|215              |            0.00002|         99.99951|
|216              |            0.00002|         99.99952|
|217              |            0.00001|         99.99953|
|218              |            0.00002|         99.99954|
|219              |            0.00001|         99.99955|
|220              |            0.00001|         99.99956|
|221              |            0.00001|         99.99957|
|222              |            0.00001|         99.99958|
|223              |            0.00002|         99.99960|
|224              |            0.00001|         99.99961|
|225              |            0.00001|         99.99961|
|226              |            0.00001|         99.99962|
|227              |            0.00002|         99.99965|
|228              |            0.00002|         99.99966|
|229              |            0.00001|         99.99967|
|230              |            0.00002|         99.99968|
|231              |            0.00002|         99.99970|
|232              |            0.00002|         99.99972|
|233              |            0.00000|         99.99973|
|234              |            0.00001|         99.99973|
|235              |            0.00001|         99.99974|
|236              |            0.00001|         99.99975|
|237              |            0.00001|         99.99976|
|238              |            0.00002|         99.99977|
|239              |            0.00002|         99.99979|
|240              |            0.00002|         99.99981|
|241              |            0.00001|         99.99982|
|242              |            0.00001|         99.99983|
|243              |            0.00000|         99.99983|
|244              |            0.00002|         99.99984|
|245              |            0.00001|         99.99985|
|247              |            0.00002|         99.99987|
|248              |            0.00001|         99.99987|
|249              |            0.00002|         99.99989|
|250              |            0.00001|         99.99990|
|251              |            0.00001|         99.99991|
|252              |            0.00001|         99.99991|
|253              |            0.00001|         99.99993|
|254              |            0.00002|         99.99994|
|255              |            0.00001|         99.99995|
|259              |            0.00001|         99.99995|
|261              |            0.00000|         99.99996|
|264              |            0.00001|         99.99996|
|265              |            0.00000|         99.99997|
|266              |            0.00001|         99.99997|
|267              |            0.00000|         99.99998|
|268              |            0.00000|         99.99998|
|270              |            0.00000|         99.99998|
|272              |            0.00000|         99.99998|
|273              |            0.00000|         99.99999|
|274              |            0.00001|         99.99999|
|277              |            0.00000|        100.00000|
|282              |            0.00000|        100.00000|
"

inputs.md <- read.delim(text = inputs.md, header = FALSE, sep = "|")

inputs.md <- inputs.md[, - c(1, ncol(inputs.md))]
# colnames(inputs.md) <- c("Number of inputs", "Share (percentage)", "Cumulative share")
colnames(inputs.md) <- c("n.inputs", "share", "cumulative.share")

# From https://gist.github.com/kayabaNerve/c42aeae1ae9434f2678943c3b8da7898

fcmp.input.cost <-
"Compute Factor: 4 , Inputs: 1 , Proof 1 Base Cost: 1024 , Proof 2 Base Cost: 512 , Commitments: 102 (p1vcs: 4 , p2vcs: 4 ) , Size: 3584
Compute Factor: 4 , Inputs: 2 , Proof 1 Base Cost: 2048 , Proof 2 Base Cost: 1024 , Commitments: 125 (p1vcs: 4 , p2vcs: 4 ) , Size: 4320
Compute Factor: 4 , Inputs: 3 , Proof 1 Base Cost: 4096 , Proof 2 Base Cost: 2048 , Commitments: 142 (p1vcs: 3 , p2vcs: 3 ) , Size: 4864
Compute Factor: 4 , Inputs: 4 , Proof 1 Base Cost: 4096 , Proof 2 Base Cost: 2048 , Commitments: 171 (p1vcs: 4 , p2vcs: 4 ) , Size: 5792
Compute Factor: 4 , Inputs: 5 , Proof 1 Base Cost: 8192 , Proof 2 Base Cost: 4096 , Commitments: 188 (p1vcs: 3 , p2vcs: 3 ) , Size: 6336
Compute Factor: 4 , Inputs: 6 , Proof 1 Base Cost: 8192 , Proof 2 Base Cost: 4096 , Commitments: 211 (p1vcs: 3 , p2vcs: 3 ) , Size: 7072
Compute Factor: 4 , Inputs: 7 , Proof 1 Base Cost: 8192 , Proof 2 Base Cost: 4096 , Commitments: 240 (p1vcs: 4 , p2vcs: 4 ) , Size: 8000
Compute Factor: 4 , Inputs: 8 , Proof 1 Base Cost: 8192 , Proof 2 Base Cost: 4096 , Commitments: 259 (p1vcs: 4 , p2vcs: 4 ) , Size: 8608
Compute Factor: 4 , Inputs: 9 , Proof 1 Base Cost: 16384 , Proof 2 Base Cost: 8192 , Commitments: 276 (p1vcs: 3 , p2vcs: 3 ) , Size: 9152
Compute Factor: 4 , Inputs: 10 , Proof 1 Base Cost: 16384 , Proof 2 Base Cost: 8192 , Commitments: 299 (p1vcs: 3 , p2vcs: 3 ) , Size: 9888
Compute Factor: 4 , Inputs: 11 , Proof 1 Base Cost: 16384 , Proof 2 Base Cost: 8192 , Commitments: 318 (p1vcs: 3 , p2vcs: 3 ) , Size: 10496
Compute Factor: 4 , Inputs: 12 , Proof 1 Base Cost: 16384 , Proof 2 Base Cost: 8192 , Commitments: 341 (p1vcs: 3 , p2vcs: 3 ) , Size: 11232
Compute Factor: 4 , Inputs: 13 , Proof 1 Base Cost: 16384 , Proof 2 Base Cost: 8192 , Commitments: 370 (p1vcs: 4 , p2vcs: 4 ) , Size: 12160
Compute Factor: 4 , Inputs: 14 , Proof 1 Base Cost: 16384 , Proof 2 Base Cost: 8192 , Commitments: 389 (p1vcs: 4 , p2vcs: 4 ) , Size: 12768
Compute Factor: 4 , Inputs: 15 , Proof 1 Base Cost: 16384 , Proof 2 Base Cost: 8192 , Commitments: 412 (p1vcs: 4 , p2vcs: 4 ) , Size: 13504
Compute Factor: 4 , Inputs: 16 , Proof 1 Base Cost: 16384 , Proof 2 Base Cost: 8192 , Commitments: 431 (p1vcs: 4 , p2vcs: 4 ) , Size: 14112
Compute Factor: 4 , Inputs: 17 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 447 (p1vcs: 2 , p2vcs: 3 ) , Size: 14624
Compute Factor: 4 , Inputs: 18 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 471 (p1vcs: 3 , p2vcs: 3 ) , Size: 15392
Compute Factor: 4 , Inputs: 19 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 490 (p1vcs: 3 , p2vcs: 3 ) , Size: 16000
Compute Factor: 4 , Inputs: 20 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 513 (p1vcs: 3 , p2vcs: 3 ) , Size: 16736
Compute Factor: 4 , Inputs: 21 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 532 (p1vcs: 3 , p2vcs: 3 ) , Size: 17344
Compute Factor: 4 , Inputs: 22 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 555 (p1vcs: 3 , p2vcs: 3 ) , Size: 18080
Compute Factor: 4 , Inputs: 23 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 574 (p1vcs: 3 , p2vcs: 3 ) , Size: 18688
Compute Factor: 4 , Inputs: 24 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 597 (p1vcs: 3 , p2vcs: 3 ) , Size: 19424
Compute Factor: 4 , Inputs: 25 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 621 (p1vcs: 3 , p2vcs: 4 ) , Size: 20192
Compute Factor: 4 , Inputs: 26 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 645 (p1vcs: 4 , p2vcs: 4 ) , Size: 20960
Compute Factor: 4 , Inputs: 27 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 668 (p1vcs: 4 , p2vcs: 4 ) , Size: 21696
Compute Factor: 4 , Inputs: 28 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 687 (p1vcs: 4 , p2vcs: 4 ) , Size: 22304
Compute Factor: 4 , Inputs: 29 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 710 (p1vcs: 4 , p2vcs: 4 ) , Size: 23040
Compute Factor: 4 , Inputs: 30 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 729 (p1vcs: 4 , p2vcs: 4 ) , Size: 23648
Compute Factor: 4 , Inputs: 31 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 752 (p1vcs: 4 , p2vcs: 4 ) , Size: 24384
Compute Factor: 4 , Inputs: 32 , Proof 1 Base Cost: 32768 , Proof 2 Base Cost: 16384 , Commitments: 771 (p1vcs: 4 , p2vcs: 4 ) , Size: 24992
Compute Factor: 4 , Inputs: 33 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 787 (p1vcs: 2 , p2vcs: 3 ) , Size: 25504
Compute Factor: 4 , Inputs: 34 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 810 (p1vcs: 2 , p2vcs: 3 ) , Size: 26240
Compute Factor: 4 , Inputs: 35 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 830 (p1vcs: 3 , p2vcs: 3 ) , Size: 26880
Compute Factor: 4 , Inputs: 36 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 853 (p1vcs: 3 , p2vcs: 3 ) , Size: 27616
Compute Factor: 4 , Inputs: 37 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 872 (p1vcs: 3 , p2vcs: 3 ) , Size: 28224
Compute Factor: 4 , Inputs: 38 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 895 (p1vcs: 3 , p2vcs: 3 ) , Size: 28960
Compute Factor: 4 , Inputs: 39 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 914 (p1vcs: 3 , p2vcs: 3 ) , Size: 29568
Compute Factor: 4 , Inputs: 40 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 937 (p1vcs: 3 , p2vcs: 3 ) , Size: 30304
Compute Factor: 4 , Inputs: 41 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 956 (p1vcs: 3 , p2vcs: 3 ) , Size: 30912
Compute Factor: 4 , Inputs: 42 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 979 (p1vcs: 3 , p2vcs: 3 ) , Size: 31648
Compute Factor: 4 , Inputs: 43 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 998 (p1vcs: 3 , p2vcs: 3 ) , Size: 32256
Compute Factor: 4 , Inputs: 44 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1021 (p1vcs: 3 , p2vcs: 3 ) , Size: 32992
Compute Factor: 4 , Inputs: 45 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1040 (p1vcs: 3 , p2vcs: 3 ) , Size: 33600
Compute Factor: 4 , Inputs: 46 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1063 (p1vcs: 3 , p2vcs: 3 ) , Size: 34336
Compute Factor: 4 , Inputs: 47 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1082 (p1vcs: 3 , p2vcs: 3 ) , Size: 34944
Compute Factor: 4 , Inputs: 48 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1105 (p1vcs: 3 , p2vcs: 3 ) , Size: 35680
Compute Factor: 4 , Inputs: 49 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1129 (p1vcs: 3 , p2vcs: 4 ) , Size: 36448
Compute Factor: 4 , Inputs: 50 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1148 (p1vcs: 3 , p2vcs: 4 ) , Size: 37056
Compute Factor: 4 , Inputs: 51 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1171 (p1vcs: 3 , p2vcs: 4 ) , Size: 37792
Compute Factor: 4 , Inputs: 52 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1195 (p1vcs: 4 , p2vcs: 4 ) , Size: 38560
Compute Factor: 4 , Inputs: 53 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1218 (p1vcs: 4 , p2vcs: 4 ) , Size: 39296
Compute Factor: 4 , Inputs: 54 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1237 (p1vcs: 4 , p2vcs: 4 ) , Size: 39904
Compute Factor: 4 , Inputs: 55 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1260 (p1vcs: 4 , p2vcs: 4 ) , Size: 40640
Compute Factor: 4 , Inputs: 56 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1279 (p1vcs: 4 , p2vcs: 4 ) , Size: 41248
Compute Factor: 4 , Inputs: 57 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1302 (p1vcs: 4 , p2vcs: 4 ) , Size: 41984
Compute Factor: 4 , Inputs: 58 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1321 (p1vcs: 4 , p2vcs: 4 ) , Size: 42592
Compute Factor: 4 , Inputs: 59 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1344 (p1vcs: 4 , p2vcs: 4 ) , Size: 43328
Compute Factor: 4 , Inputs: 60 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1363 (p1vcs: 4 , p2vcs: 4 ) , Size: 43936
Compute Factor: 4 , Inputs: 61 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1386 (p1vcs: 4 , p2vcs: 4 ) , Size: 44672
Compute Factor: 4 , Inputs: 62 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1405 (p1vcs: 4 , p2vcs: 4 ) , Size: 45280
Compute Factor: 4 , Inputs: 63 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1428 (p1vcs: 4 , p2vcs: 4 ) , Size: 46016
Compute Factor: 4 , Inputs: 64 , Proof 1 Base Cost: 65536 , Proof 2 Base Cost: 32768 , Commitments: 1447 (p1vcs: 4 , p2vcs: 4 ) , Size: 46624
Compute Factor: 4 , Inputs: 65 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1463 (p1vcs: 2 , p2vcs: 3 ) , Size: 47136
Compute Factor: 4 , Inputs: 66 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1486 (p1vcs: 2 , p2vcs: 3 ) , Size: 47872
Compute Factor: 4 , Inputs: 67 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1505 (p1vcs: 2 , p2vcs: 3 ) , Size: 48480
Compute Factor: 4 , Inputs: 68 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1528 (p1vcs: 2 , p2vcs: 3 ) , Size: 49216
Compute Factor: 4 , Inputs: 69 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1548 (p1vcs: 3 , p2vcs: 3 ) , Size: 49856
Compute Factor: 4 , Inputs: 70 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1571 (p1vcs: 3 , p2vcs: 3 ) , Size: 50592
Compute Factor: 4 , Inputs: 71 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1590 (p1vcs: 3 , p2vcs: 3 ) , Size: 51200
Compute Factor: 4 , Inputs: 72 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1613 (p1vcs: 3 , p2vcs: 3 ) , Size: 51936
Compute Factor: 4 , Inputs: 73 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1632 (p1vcs: 3 , p2vcs: 3 ) , Size: 52544
Compute Factor: 4 , Inputs: 74 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1655 (p1vcs: 3 , p2vcs: 3 ) , Size: 53280
Compute Factor: 4 , Inputs: 75 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1674 (p1vcs: 3 , p2vcs: 3 ) , Size: 53888
Compute Factor: 4 , Inputs: 76 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1697 (p1vcs: 3 , p2vcs: 3 ) , Size: 54624
Compute Factor: 4 , Inputs: 77 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1716 (p1vcs: 3 , p2vcs: 3 ) , Size: 55232
Compute Factor: 4 , Inputs: 78 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1739 (p1vcs: 3 , p2vcs: 3 ) , Size: 55968
Compute Factor: 4 , Inputs: 79 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1758 (p1vcs: 3 , p2vcs: 3 ) , Size: 56576
Compute Factor: 4 , Inputs: 80 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1781 (p1vcs: 3 , p2vcs: 3 ) , Size: 57312
Compute Factor: 4 , Inputs: 81 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1800 (p1vcs: 3 , p2vcs: 3 ) , Size: 57920
Compute Factor: 4 , Inputs: 82 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1823 (p1vcs: 3 , p2vcs: 3 ) , Size: 58656
Compute Factor: 4 , Inputs: 83 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1842 (p1vcs: 3 , p2vcs: 3 ) , Size: 59264
Compute Factor: 4 , Inputs: 84 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1865 (p1vcs: 3 , p2vcs: 3 ) , Size: 60000
Compute Factor: 4 , Inputs: 85 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1884 (p1vcs: 3 , p2vcs: 3 ) , Size: 60608
Compute Factor: 4 , Inputs: 86 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1907 (p1vcs: 3 , p2vcs: 3 ) , Size: 61344
Compute Factor: 4 , Inputs: 87 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1926 (p1vcs: 3 , p2vcs: 3 ) , Size: 61952
Compute Factor: 4 , Inputs: 88 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1949 (p1vcs: 3 , p2vcs: 3 ) , Size: 62688
Compute Factor: 4 , Inputs: 89 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1968 (p1vcs: 3 , p2vcs: 3 ) , Size: 63296
Compute Factor: 4 , Inputs: 90 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 1991 (p1vcs: 3 , p2vcs: 3 ) , Size: 64032
Compute Factor: 4 , Inputs: 91 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2010 (p1vcs: 3 , p2vcs: 3 ) , Size: 64640
Compute Factor: 4 , Inputs: 92 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2033 (p1vcs: 3 , p2vcs: 3 ) , Size: 65376
Compute Factor: 4 , Inputs: 93 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2052 (p1vcs: 3 , p2vcs: 3 ) , Size: 65984
Compute Factor: 4 , Inputs: 94 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2075 (p1vcs: 3 , p2vcs: 3 ) , Size: 66720
Compute Factor: 4 , Inputs: 95 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2094 (p1vcs: 3 , p2vcs: 3 ) , Size: 67328
Compute Factor: 4 , Inputs: 96 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2117 (p1vcs: 3 , p2vcs: 3 ) , Size: 68064
Compute Factor: 4 , Inputs: 97 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2141 (p1vcs: 3 , p2vcs: 4 ) , Size: 68832
Compute Factor: 4 , Inputs: 98 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2160 (p1vcs: 3 , p2vcs: 4 ) , Size: 69440
Compute Factor: 4 , Inputs: 99 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2183 (p1vcs: 3 , p2vcs: 4 ) , Size: 70176
Compute Factor: 4 , Inputs: 100 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2202 (p1vcs: 3 , p2vcs: 4 ) , Size: 70784
Compute Factor: 4 , Inputs: 101 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2225 (p1vcs: 3 , p2vcs: 4 ) , Size: 71520
Compute Factor: 4 , Inputs: 102 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2244 (p1vcs: 3 , p2vcs: 4 ) , Size: 72128
Compute Factor: 4 , Inputs: 103 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2272 (p1vcs: 4 , p2vcs: 4 ) , Size: 73024
Compute Factor: 4 , Inputs: 104 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2291 (p1vcs: 4 , p2vcs: 4 ) , Size: 73632
Compute Factor: 4 , Inputs: 105 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2314 (p1vcs: 4 , p2vcs: 4 ) , Size: 74368
Compute Factor: 4 , Inputs: 106 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2333 (p1vcs: 4 , p2vcs: 4 ) , Size: 74976
Compute Factor: 4 , Inputs: 107 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2356 (p1vcs: 4 , p2vcs: 4 ) , Size: 75712
Compute Factor: 4 , Inputs: 108 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2375 (p1vcs: 4 , p2vcs: 4 ) , Size: 76320
Compute Factor: 4 , Inputs: 109 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2398 (p1vcs: 4 , p2vcs: 4 ) , Size: 77056
Compute Factor: 4 , Inputs: 110 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2417 (p1vcs: 4 , p2vcs: 4 ) , Size: 77664
Compute Factor: 4 , Inputs: 111 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2440 (p1vcs: 4 , p2vcs: 4 ) , Size: 78400
Compute Factor: 4 , Inputs: 112 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2459 (p1vcs: 4 , p2vcs: 4 ) , Size: 79008
Compute Factor: 4 , Inputs: 113 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2482 (p1vcs: 4 , p2vcs: 4 ) , Size: 79744
Compute Factor: 4 , Inputs: 114 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2501 (p1vcs: 4 , p2vcs: 4 ) , Size: 80352
Compute Factor: 4 , Inputs: 115 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2524 (p1vcs: 4 , p2vcs: 4 ) , Size: 81088
Compute Factor: 4 , Inputs: 116 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2543 (p1vcs: 4 , p2vcs: 4 ) , Size: 81696
Compute Factor: 4 , Inputs: 117 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2566 (p1vcs: 4 , p2vcs: 4 ) , Size: 82432
Compute Factor: 4 , Inputs: 118 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2585 (p1vcs: 4 , p2vcs: 4 ) , Size: 83040
Compute Factor: 4 , Inputs: 119 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2608 (p1vcs: 4 , p2vcs: 4 ) , Size: 83776
Compute Factor: 4 , Inputs: 120 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2627 (p1vcs: 4 , p2vcs: 4 ) , Size: 84384
Compute Factor: 4 , Inputs: 121 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2650 (p1vcs: 4 , p2vcs: 4 ) , Size: 85120
Compute Factor: 4 , Inputs: 122 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2669 (p1vcs: 4 , p2vcs: 4 ) , Size: 85728
Compute Factor: 4 , Inputs: 123 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2692 (p1vcs: 4 , p2vcs: 4 ) , Size: 86464
Compute Factor: 4 , Inputs: 124 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2711 (p1vcs: 4 , p2vcs: 4 ) , Size: 87072
Compute Factor: 4 , Inputs: 125 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2734 (p1vcs: 4 , p2vcs: 4 ) , Size: 87808
Compute Factor: 4 , Inputs: 126 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2753 (p1vcs: 4 , p2vcs: 4 ) , Size: 88416
Compute Factor: 4 , Inputs: 127 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2776 (p1vcs: 4 , p2vcs: 4 ) , Size: 89152
Compute Factor: 4 , Inputs: 128 , Proof 1 Base Cost: 131072 , Proof 2 Base Cost: 65536 , Commitments: 2795 (p1vcs: 4 , p2vcs: 4 ) , Size: 89760
Compute Factor: 4 , Inputs: 129 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2811 (p1vcs: 2 , p2vcs: 3 ) , Size: 90272
Compute Factor: 4 , Inputs: 130 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2834 (p1vcs: 2 , p2vcs: 3 ) , Size: 91008
Compute Factor: 4 , Inputs: 131 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2853 (p1vcs: 2 , p2vcs: 3 ) , Size: 91616
Compute Factor: 4 , Inputs: 132 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2876 (p1vcs: 2 , p2vcs: 3 ) , Size: 92352
Compute Factor: 4 , Inputs: 133 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2895 (p1vcs: 2 , p2vcs: 3 ) , Size: 92960
Compute Factor: 4 , Inputs: 134 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2918 (p1vcs: 2 , p2vcs: 3 ) , Size: 93696
Compute Factor: 4 , Inputs: 135 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2937 (p1vcs: 2 , p2vcs: 3 ) , Size: 94304
Compute Factor: 4 , Inputs: 136 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2960 (p1vcs: 2 , p2vcs: 3 ) , Size: 95040
Compute Factor: 4 , Inputs: 137 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 2980 (p1vcs: 3 , p2vcs: 3 ) , Size: 95680
Compute Factor: 4 , Inputs: 138 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3003 (p1vcs: 3 , p2vcs: 3 ) , Size: 96416
Compute Factor: 4 , Inputs: 139 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3022 (p1vcs: 3 , p2vcs: 3 ) , Size: 97024
Compute Factor: 4 , Inputs: 140 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3045 (p1vcs: 3 , p2vcs: 3 ) , Size: 97760
Compute Factor: 4 , Inputs: 141 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3064 (p1vcs: 3 , p2vcs: 3 ) , Size: 98368
Compute Factor: 4 , Inputs: 142 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3087 (p1vcs: 3 , p2vcs: 3 ) , Size: 99104
Compute Factor: 4 , Inputs: 143 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3106 (p1vcs: 3 , p2vcs: 3 ) , Size: 99712
Compute Factor: 4 , Inputs: 144 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3129 (p1vcs: 3 , p2vcs: 3 ) , Size: 100448
Compute Factor: 4 , Inputs: 145 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3148 (p1vcs: 3 , p2vcs: 3 ) , Size: 101056
Compute Factor: 4 , Inputs: 146 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3171 (p1vcs: 3 , p2vcs: 3 ) , Size: 101792
Compute Factor: 4 , Inputs: 147 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3190 (p1vcs: 3 , p2vcs: 3 ) , Size: 102400
Compute Factor: 4 , Inputs: 148 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3213 (p1vcs: 3 , p2vcs: 3 ) , Size: 103136
Compute Factor: 4 , Inputs: 149 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3232 (p1vcs: 3 , p2vcs: 3 ) , Size: 103744
Compute Factor: 4 , Inputs: 150 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3255 (p1vcs: 3 , p2vcs: 3 ) , Size: 104480
Compute Factor: 4 , Inputs: 151 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3274 (p1vcs: 3 , p2vcs: 3 ) , Size: 105088
Compute Factor: 4 , Inputs: 152 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3297 (p1vcs: 3 , p2vcs: 3 ) , Size: 105824
Compute Factor: 4 , Inputs: 153 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3316 (p1vcs: 3 , p2vcs: 3 ) , Size: 106432
Compute Factor: 4 , Inputs: 154 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3339 (p1vcs: 3 , p2vcs: 3 ) , Size: 107168
Compute Factor: 4 , Inputs: 155 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3358 (p1vcs: 3 , p2vcs: 3 ) , Size: 107776
Compute Factor: 4 , Inputs: 156 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3381 (p1vcs: 3 , p2vcs: 3 ) , Size: 108512
Compute Factor: 4 , Inputs: 157 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3400 (p1vcs: 3 , p2vcs: 3 ) , Size: 109120
Compute Factor: 4 , Inputs: 158 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3423 (p1vcs: 3 , p2vcs: 3 ) , Size: 109856
Compute Factor: 4 , Inputs: 159 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3442 (p1vcs: 3 , p2vcs: 3 ) , Size: 110464
Compute Factor: 4 , Inputs: 160 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3465 (p1vcs: 3 , p2vcs: 3 ) , Size: 111200
Compute Factor: 4 , Inputs: 161 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3484 (p1vcs: 3 , p2vcs: 3 ) , Size: 111808
Compute Factor: 4 , Inputs: 162 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3507 (p1vcs: 3 , p2vcs: 3 ) , Size: 112544
Compute Factor: 4 , Inputs: 163 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3526 (p1vcs: 3 , p2vcs: 3 ) , Size: 113152
Compute Factor: 4 , Inputs: 164 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3549 (p1vcs: 3 , p2vcs: 3 ) , Size: 113888
Compute Factor: 4 , Inputs: 165 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3568 (p1vcs: 3 , p2vcs: 3 ) , Size: 114496
Compute Factor: 4 , Inputs: 166 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3591 (p1vcs: 3 , p2vcs: 3 ) , Size: 115232
Compute Factor: 4 , Inputs: 167 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3610 (p1vcs: 3 , p2vcs: 3 ) , Size: 115840
Compute Factor: 4 , Inputs: 168 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3633 (p1vcs: 3 , p2vcs: 3 ) , Size: 116576
Compute Factor: 4 , Inputs: 169 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3652 (p1vcs: 3 , p2vcs: 3 ) , Size: 117184
Compute Factor: 4 , Inputs: 170 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3675 (p1vcs: 3 , p2vcs: 3 ) , Size: 117920
Compute Factor: 4 , Inputs: 171 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3694 (p1vcs: 3 , p2vcs: 3 ) , Size: 118528
Compute Factor: 4 , Inputs: 172 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3717 (p1vcs: 3 , p2vcs: 3 ) , Size: 119264
Compute Factor: 4 , Inputs: 173 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3736 (p1vcs: 3 , p2vcs: 3 ) , Size: 119872
Compute Factor: 4 , Inputs: 174 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3759 (p1vcs: 3 , p2vcs: 3 ) , Size: 120608
Compute Factor: 4 , Inputs: 175 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3778 (p1vcs: 3 , p2vcs: 3 ) , Size: 121216
Compute Factor: 4 , Inputs: 176 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3801 (p1vcs: 3 , p2vcs: 3 ) , Size: 121952
Compute Factor: 4 , Inputs: 177 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3820 (p1vcs: 3 , p2vcs: 3 ) , Size: 122560
Compute Factor: 4 , Inputs: 178 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3843 (p1vcs: 3 , p2vcs: 3 ) , Size: 123296
Compute Factor: 4 , Inputs: 179 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3862 (p1vcs: 3 , p2vcs: 3 ) , Size: 123904
Compute Factor: 4 , Inputs: 180 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3885 (p1vcs: 3 , p2vcs: 3 ) , Size: 124640
Compute Factor: 4 , Inputs: 181 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3904 (p1vcs: 3 , p2vcs: 3 ) , Size: 125248
Compute Factor: 4 , Inputs: 182 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3927 (p1vcs: 3 , p2vcs: 3 ) , Size: 125984
Compute Factor: 4 , Inputs: 183 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3946 (p1vcs: 3 , p2vcs: 3 ) , Size: 126592
Compute Factor: 4 , Inputs: 184 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3969 (p1vcs: 3 , p2vcs: 3 ) , Size: 127328
Compute Factor: 4 , Inputs: 185 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 3988 (p1vcs: 3 , p2vcs: 3 ) , Size: 127936
Compute Factor: 4 , Inputs: 186 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4011 (p1vcs: 3 , p2vcs: 3 ) , Size: 128672
Compute Factor: 4 , Inputs: 187 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4030 (p1vcs: 3 , p2vcs: 3 ) , Size: 129280
Compute Factor: 4 , Inputs: 188 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4053 (p1vcs: 3 , p2vcs: 3 ) , Size: 130016
Compute Factor: 4 , Inputs: 189 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4072 (p1vcs: 3 , p2vcs: 3 ) , Size: 130624
Compute Factor: 4 , Inputs: 190 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4095 (p1vcs: 3 , p2vcs: 3 ) , Size: 131360
Compute Factor: 4 , Inputs: 191 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4114 (p1vcs: 3 , p2vcs: 3 ) , Size: 131968
Compute Factor: 4 , Inputs: 192 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4137 (p1vcs: 3 , p2vcs: 3 ) , Size: 132704
Compute Factor: 4 , Inputs: 193 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4161 (p1vcs: 3 , p2vcs: 4 ) , Size: 133472
Compute Factor: 4 , Inputs: 194 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4180 (p1vcs: 3 , p2vcs: 4 ) , Size: 134080
Compute Factor: 4 , Inputs: 195 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4203 (p1vcs: 3 , p2vcs: 4 ) , Size: 134816
Compute Factor: 4 , Inputs: 196 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4222 (p1vcs: 3 , p2vcs: 4 ) , Size: 135424
Compute Factor: 4 , Inputs: 197 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4245 (p1vcs: 3 , p2vcs: 4 ) , Size: 136160
Compute Factor: 4 , Inputs: 198 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4264 (p1vcs: 3 , p2vcs: 4 ) , Size: 136768
Compute Factor: 4 , Inputs: 199 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4287 (p1vcs: 3 , p2vcs: 4 ) , Size: 137504
Compute Factor: 4 , Inputs: 200 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4306 (p1vcs: 3 , p2vcs: 4 ) , Size: 138112
Compute Factor: 4 , Inputs: 201 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4329 (p1vcs: 3 , p2vcs: 4 ) , Size: 138848
Compute Factor: 4 , Inputs: 202 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4348 (p1vcs: 3 , p2vcs: 4 ) , Size: 139456
Compute Factor: 4 , Inputs: 203 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4371 (p1vcs: 3 , p2vcs: 4 ) , Size: 140192
Compute Factor: 4 , Inputs: 204 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4390 (p1vcs: 3 , p2vcs: 4 ) , Size: 140800
Compute Factor: 4 , Inputs: 205 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4418 (p1vcs: 4 , p2vcs: 4 ) , Size: 141696
Compute Factor: 4 , Inputs: 206 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4437 (p1vcs: 4 , p2vcs: 4 ) , Size: 142304
Compute Factor: 4 , Inputs: 207 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4460 (p1vcs: 4 , p2vcs: 4 ) , Size: 143040
Compute Factor: 4 , Inputs: 208 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4479 (p1vcs: 4 , p2vcs: 4 ) , Size: 143648
Compute Factor: 4 , Inputs: 209 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4502 (p1vcs: 4 , p2vcs: 4 ) , Size: 144384
Compute Factor: 4 , Inputs: 210 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4521 (p1vcs: 4 , p2vcs: 4 ) , Size: 144992
Compute Factor: 4 , Inputs: 211 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4544 (p1vcs: 4 , p2vcs: 4 ) , Size: 145728
Compute Factor: 4 , Inputs: 212 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4563 (p1vcs: 4 , p2vcs: 4 ) , Size: 146336
Compute Factor: 4 , Inputs: 213 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4586 (p1vcs: 4 , p2vcs: 4 ) , Size: 147072
Compute Factor: 4 , Inputs: 214 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4605 (p1vcs: 4 , p2vcs: 4 ) , Size: 147680
Compute Factor: 4 , Inputs: 215 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4628 (p1vcs: 4 , p2vcs: 4 ) , Size: 148416
Compute Factor: 4 , Inputs: 216 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4647 (p1vcs: 4 , p2vcs: 4 ) , Size: 149024
Compute Factor: 4 , Inputs: 217 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4670 (p1vcs: 4 , p2vcs: 4 ) , Size: 149760
Compute Factor: 4 , Inputs: 218 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4689 (p1vcs: 4 , p2vcs: 4 ) , Size: 150368
Compute Factor: 4 , Inputs: 219 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4712 (p1vcs: 4 , p2vcs: 4 ) , Size: 151104
Compute Factor: 4 , Inputs: 220 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4731 (p1vcs: 4 , p2vcs: 4 ) , Size: 151712
Compute Factor: 4 , Inputs: 221 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4754 (p1vcs: 4 , p2vcs: 4 ) , Size: 152448
Compute Factor: 4 , Inputs: 222 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4773 (p1vcs: 4 , p2vcs: 4 ) , Size: 153056
Compute Factor: 4 , Inputs: 223 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4796 (p1vcs: 4 , p2vcs: 4 ) , Size: 153792
Compute Factor: 4 , Inputs: 224 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4815 (p1vcs: 4 , p2vcs: 4 ) , Size: 154400
Compute Factor: 4 , Inputs: 225 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4838 (p1vcs: 4 , p2vcs: 4 ) , Size: 155136
Compute Factor: 4 , Inputs: 226 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4857 (p1vcs: 4 , p2vcs: 4 ) , Size: 155744
Compute Factor: 4 , Inputs: 227 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4880 (p1vcs: 4 , p2vcs: 4 ) , Size: 156480
Compute Factor: 4 , Inputs: 228 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4899 (p1vcs: 4 , p2vcs: 4 ) , Size: 157088
Compute Factor: 4 , Inputs: 229 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4922 (p1vcs: 4 , p2vcs: 4 ) , Size: 157824
Compute Factor: 4 , Inputs: 230 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4941 (p1vcs: 4 , p2vcs: 4 ) , Size: 158432
Compute Factor: 4 , Inputs: 231 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4964 (p1vcs: 4 , p2vcs: 4 ) , Size: 159168
Compute Factor: 4 , Inputs: 232 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 4983 (p1vcs: 4 , p2vcs: 4 ) , Size: 159776
Compute Factor: 4 , Inputs: 233 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5006 (p1vcs: 4 , p2vcs: 4 ) , Size: 160512
Compute Factor: 4 , Inputs: 234 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5025 (p1vcs: 4 , p2vcs: 4 ) , Size: 161120
Compute Factor: 4 , Inputs: 235 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5048 (p1vcs: 4 , p2vcs: 4 ) , Size: 161856
Compute Factor: 4 , Inputs: 236 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5067 (p1vcs: 4 , p2vcs: 4 ) , Size: 162464
Compute Factor: 4 , Inputs: 237 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5090 (p1vcs: 4 , p2vcs: 4 ) , Size: 163200
Compute Factor: 4 , Inputs: 238 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5109 (p1vcs: 4 , p2vcs: 4 ) , Size: 163808
Compute Factor: 4 , Inputs: 239 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5132 (p1vcs: 4 , p2vcs: 4 ) , Size: 164544
Compute Factor: 4 , Inputs: 240 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5151 (p1vcs: 4 , p2vcs: 4 ) , Size: 165152
Compute Factor: 4 , Inputs: 241 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5174 (p1vcs: 4 , p2vcs: 4 ) , Size: 165888
Compute Factor: 4 , Inputs: 242 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5193 (p1vcs: 4 , p2vcs: 4 ) , Size: 166496
Compute Factor: 4 , Inputs: 243 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5216 (p1vcs: 4 , p2vcs: 4 ) , Size: 167232
Compute Factor: 4 , Inputs: 244 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5235 (p1vcs: 4 , p2vcs: 4 ) , Size: 167840
Compute Factor: 4 , Inputs: 245 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5258 (p1vcs: 4 , p2vcs: 4 ) , Size: 168576
Compute Factor: 4 , Inputs: 246 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5277 (p1vcs: 4 , p2vcs: 4 ) , Size: 169184
Compute Factor: 4 , Inputs: 247 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5300 (p1vcs: 4 , p2vcs: 4 ) , Size: 169920
Compute Factor: 4 , Inputs: 248 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5319 (p1vcs: 4 , p2vcs: 4 ) , Size: 170528
Compute Factor: 4 , Inputs: 249 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5342 (p1vcs: 4 , p2vcs: 4 ) , Size: 171264
Compute Factor: 4 , Inputs: 250 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5361 (p1vcs: 4 , p2vcs: 4 ) , Size: 171872
Compute Factor: 4 , Inputs: 251 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5384 (p1vcs: 4 , p2vcs: 4 ) , Size: 172608
Compute Factor: 4 , Inputs: 252 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5403 (p1vcs: 4 , p2vcs: 4 ) , Size: 173216
Compute Factor: 4 , Inputs: 253 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5426 (p1vcs: 4 , p2vcs: 4 ) , Size: 173952
Compute Factor: 4 , Inputs: 254 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5445 (p1vcs: 4 , p2vcs: 4 ) , Size: 174560
Compute Factor: 4 , Inputs: 255 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5468 (p1vcs: 4 , p2vcs: 4 ) , Size: 175296
Compute Factor: 4 , Inputs: 256 , Proof 1 Base Cost: 262144 , Proof 2 Base Cost: 131072 , Commitments: 5487 (p1vcs: 4 , p2vcs: 4 ) , Size: 175904
Compute Factor: 4 , Inputs: 257 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5503 (p1vcs: 2 , p2vcs: 3 ) , Size: 176416
Compute Factor: 4 , Inputs: 258 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5526 (p1vcs: 2 , p2vcs: 3 ) , Size: 177152
Compute Factor: 4 , Inputs: 259 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5545 (p1vcs: 2 , p2vcs: 3 ) , Size: 177760
Compute Factor: 4 , Inputs: 260 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5568 (p1vcs: 2 , p2vcs: 3 ) , Size: 178496
Compute Factor: 4 , Inputs: 261 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5587 (p1vcs: 2 , p2vcs: 3 ) , Size: 179104
Compute Factor: 4 , Inputs: 262 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5610 (p1vcs: 2 , p2vcs: 3 ) , Size: 179840
Compute Factor: 4 , Inputs: 263 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5629 (p1vcs: 2 , p2vcs: 3 ) , Size: 180448
Compute Factor: 4 , Inputs: 264 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5652 (p1vcs: 2 , p2vcs: 3 ) , Size: 181184
Compute Factor: 4 , Inputs: 265 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5671 (p1vcs: 2 , p2vcs: 3 ) , Size: 181792
Compute Factor: 4 , Inputs: 266 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5694 (p1vcs: 2 , p2vcs: 3 ) , Size: 182528
Compute Factor: 4 , Inputs: 267 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5713 (p1vcs: 2 , p2vcs: 3 ) , Size: 183136
Compute Factor: 4 , Inputs: 268 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5736 (p1vcs: 2 , p2vcs: 3 ) , Size: 183872
Compute Factor: 4 , Inputs: 269 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5755 (p1vcs: 2 , p2vcs: 3 ) , Size: 184480
Compute Factor: 4 , Inputs: 270 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5778 (p1vcs: 2 , p2vcs: 3 ) , Size: 185216
Compute Factor: 4 , Inputs: 271 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5797 (p1vcs: 2 , p2vcs: 3 ) , Size: 185824
Compute Factor: 4 , Inputs: 272 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5820 (p1vcs: 2 , p2vcs: 3 ) , Size: 186560
Compute Factor: 4 , Inputs: 273 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5839 (p1vcs: 2 , p2vcs: 3 ) , Size: 187168
Compute Factor: 4 , Inputs: 274 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5863 (p1vcs: 3 , p2vcs: 3 ) , Size: 187936
Compute Factor: 4 , Inputs: 275 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5882 (p1vcs: 3 , p2vcs: 3 ) , Size: 188544
Compute Factor: 4 , Inputs: 276 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5905 (p1vcs: 3 , p2vcs: 3 ) , Size: 189280
Compute Factor: 4 , Inputs: 277 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5924 (p1vcs: 3 , p2vcs: 3 ) , Size: 189888
Compute Factor: 4 , Inputs: 278 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5947 (p1vcs: 3 , p2vcs: 3 ) , Size: 190624
Compute Factor: 4 , Inputs: 279 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5966 (p1vcs: 3 , p2vcs: 3 ) , Size: 191232
Compute Factor: 4 , Inputs: 280 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 5989 (p1vcs: 3 , p2vcs: 3 ) , Size: 191968
Compute Factor: 4 , Inputs: 281 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 6008 (p1vcs: 3 , p2vcs: 3 ) , Size: 192576
Compute Factor: 4 , Inputs: 282 , Proof 1 Base Cost: 524288 , Proof 2 Base Cost: 262144 , Commitments: 6031 (p1vcs: 3 , p2vcs: 3 ) , Size: 193312
"

fcmp.input.cost <- gsub("[A-Za-z0-9 ]*: ", "", fcmp.input.cost)
fcmp.input.cost <- gsub("[(][0-9]* ,[0-9]* [)]", "", fcmp.input.cost)
fcmp.input.cost <- read.csv(text = fcmp.input.cost, header = FALSE)

colnames(fcmp.input.cost) <- c("compute.factor", "n.inputs", "proof.1.base", "proof.2.base", "commitments", "size.cost")

fcmp.input.cost$compute.cost <- fcmp.input.cost$proof.1.base +
  fcmp.input.cost$proof.2.base + fcmp.input.cost$commitments

# From https://gist.github.com/kayabaNerve/c42aeae1ae9434f2678943c3b8da7898

bp.plus.output.cost <- 
"Outputs: 1 , Base Cost: 64 , Commitments: 16 , Size: 608
Outputs: 2 , Base Cost: 128 , Commitments: 19 , Size: 704
Outputs: 3 , Base Cost: 192 , Commitments: 22 , Size: 800
Outputs: 4 , Base Cost: 256 , Commitments: 23 , Size: 832
Outputs: 5 , Base Cost: 320 , Commitments: 26 , Size: 928
Outputs: 6 , Base Cost: 384 , Commitments: 27 , Size: 960
Outputs: 7 , Base Cost: 448 , Commitments: 28 , Size: 992
Outputs: 8 , Base Cost: 512 , Commitments: 29 , Size: 1024
Outputs: 9 , Base Cost: 576 , Commitments: 32 , Size: 1120
Outputs: 10 , Base Cost: 640 , Commitments: 33 , Size: 1152
Outputs: 11 , Base Cost: 704 , Commitments: 34 , Size: 1184
Outputs: 12 , Base Cost: 768 , Commitments: 35 , Size: 1216
Outputs: 13 , Base Cost: 832 , Commitments: 36 , Size: 1248
Outputs: 14 , Base Cost: 896 , Commitments: 37 , Size: 1280
Outputs: 15 , Base Cost: 960 , Commitments: 38 , Size: 1312
Outputs: 16 , Base Cost: 1024 , Commitments: 39 , Size: 1344
"

bp.plus.output.cost <- gsub("[A-Za-z0-9 ]*: ", "", bp.plus.output.cost)
bp.plus.output.cost <- gsub("[(][0-9]* ,[0-9]* [)]", "", bp.plus.output.cost)
bp.plus.output.cost <- read.csv(text = bp.plus.output.cost, header = FALSE)

colnames(bp.plus.output.cost) <- c("n.outputs", "proof.base", "commitments", "size.cost")

bp.plus.output.cost$compute.cost <- bp.plus.output.cost$proof.base +
  bp.plus.output.cost$commitments



input.footprint <- function(MAX_INPUTS, compute.factor, inputs.md, fcmp.input.cost, bp.plus.output.cost) {
  
  old.share <- inputs.md[inputs.md$n.inputs <= MAX_INPUTS, c("n.inputs", "share")]
  
  input.consolidation.table <- 
    input.consolidation(MAX_INPUTS = MAX_INPUTS, input.table = data.frame(n.inputs = inputs.md[, 1]))$table
  
  input.consolidation.table <- merge(input.consolidation.table, inputs.md)
  
  share.MAX_INPUTS.txs <- 0
  
  sub.maximal.txs <- rep(0, MAX_INPUTS)
  additional.outputs <- rep(0, MAX_INPUTS)
  
  for (i in seq_len(nrow(input.consolidation.table))) {
    
    share.MAX_INPUTS.txs <- share.MAX_INPUTS.txs + 
      input.consolidation.table$n.MAX_INPUTS.txs[i] *
      input.consolidation.table$share[i]
    
    additional.outputs[MAX_INPUTS] <- additional.outputs[MAX_INPUTS] + 2 *
      (input.consolidation.table$n.MAX_INPUTS.txs[i] - 1) *
      input.consolidation.table$share[i]
    # Subtract 1 to subtract the outputs of the "original" tx
    
    if ( ! is.na(input.consolidation.table$remainder.tx.n.inputs[i])) {
      remainder.tx.n.inputs <- strsplit(input.consolidation.table$remainder.tx.n.inputs[i], " ")
      for (j in remainder.tx.n.inputs[[1]]) {
        sub.maximal.txs[as.numeric(j)] <- sub.maximal.txs[as.numeric(j)] + input.consolidation.table$share[i]
        additional.outputs[as.numeric(j)] <- additional.outputs[as.numeric(j)] + 2 * input.consolidation.table$share[i]
      }
    }
    
  }
  
  share.MAX_INPUTS.txs <- c(rep(0, MAX_INPUTS - 1), share.MAX_INPUTS.txs)
  
  old.share.total <- sum(old.share$share)
  new.share <- old.share
  
  new.share$share <- new.share$share + sub.maximal.txs + share.MAX_INPUTS.txs
  
  fcmp.input.cost <- fcmp.input.cost[fcmp.input.cost$compute.factor == compute.factor, 
    c("n.inputs", "size.cost", "compute.cost")]
  
  colnames(fcmp.input.cost) <- c("n.inputs", "input.size.cost", "input.compute.cost")
  
  new.share <- merge(new.share, fcmp.input.cost)
  
  new.share$input.size.cost <- new.share$share * new.share$input.size.cost
  new.share$input.compute.cost <- new.share$share * new.share$input.compute.cost
  
  additional.outputs <- data.frame(n.inputs = seq_len(MAX_INPUTS), 
    additional.outputs.size.cost = additional.outputs *
      bp.plus.output.cost[bp.plus.output.cost$n.outputs == 2, "size.cost"],
    additional.outputs.compute.cost = additional.outputs *
      bp.plus.output.cost[bp.plus.output.cost$n.outputs == 2, "compute.cost"]
  )
  
  new.share <- merge(new.share, additional.outputs)
  
  new.share$total.size.cost <- new.share$input.size.cost + new.share$additional.outputs.size.cost
  new.share$total.compute.cost <- new.share$input.compute.cost + new.share$additional.outputs.compute.cost
  
  n.tx.total.increase <- 100 * (sum(new.share$share)/sum(old.share$share) - 1)
  
  new.share$share <- 100 * (new.share$share / sum(new.share$share))
  
  new.share <- addmargins(as.matrix(new.share), margin = 1)
  new.share[nrow(new.share), "n.inputs"] <- NA
  
  new.share[, grepl(".cost", colnames(new.share))] <-
    new.share[, grepl(".cost", colnames(new.share))] / 100
  
  new.share
  
}



input.footprint(MAX_INPUTS = 8, compute.factor = 4, inputs.md, fcmp.input.cost, bp.plus.output.cost)
input.footprint(MAX_INPUTS = 16, compute.factor = 4, inputs.md, fcmp.input.cost, bp.plus.output.cost)



knitr::kable(input.footprint(MAX_INPUTS = 4, compute.factor = 4, inputs.md, fcmp.input.cost, bp.plus.output.cost),
  format = "pipe", row.names = TRUE, digits = 3)

knitr::kable(input.footprint(MAX_INPUTS = 8, compute.factor = 4, inputs.md, fcmp.input.cost, bp.plus.output.cost),
  format = "pipe", row.names = TRUE, digits = 3)

knitr::kable(input.footprint(MAX_INPUTS = 16, compute.factor = 4, inputs.md, fcmp.input.cost, bp.plus.output.cost),
  format = "pipe", row.names = TRUE, digits = 3)
  
knitr::kable(input.footprint(MAX_INPUTS = 128, compute.factor = 4, inputs.md, fcmp.input.cost, bp.plus.output.cost),
  format = "pipe", row.names = TRUE, digits = 3)




input.consolidation.graph <- input.consolidation(MAX_INPUTS = 4, input.table = inputs.md, example = 19)

png("output-consolidation-MAX_INPUTS-4-initial-outputs-19.png")

plot(input.consolidation.graph$example.graph, layout = igraph::layout_as_tree,
  main = "Output consolidation sequence\nMAX_INPUTS = 4. Initial outputs = 19.")

dev.off()


Modified python code for estimated cost per input/output cardinality

Based on https://gist.github.com/kayabaNerve/c42aeae1ae9434f2678943c3b8da7898

import math

print("-- FCMPs --")
for extraneous_compute in range(4,5):
  if pow(2, math.ceil(math.log2(extraneous_compute))) != extraneous_compute:
    continue

  for i in range(1, 282 + 1):
    target_layers = 8
    proof_1_target_layers = math.floor(target_layers / 2) + (target_layers % 2)
    proof_2_target_layers = math.floor(target_layers / 2)

    proof_1_gates_for_target_layers = extraneous_compute * 256
    proof_2_gates_for_target_layers = extraneous_compute * 128

    proof_commitments = 3
    proof_1_ip_commitments = 2 * math.ceil(math.log2(i * proof_1_gates_for_target_layers))
    proof_2_ip_commitments = 2 * math.ceil(math.log2(i * proof_2_gates_for_target_layers))

    proof_1_branches = i * proof_1_target_layers
    # The root for 8 layers is on the second proof, and it's shared for all inputs
    # Accordingly, it's only committed to once
    proof_2_branches = (i * (proof_2_target_layers - 1)) + 1

    claimed_point_variables = 2 * 256
    divisor_variables = 256
    # Proof 1 has 4 claimed points, 1 append divisor, and (proof_1_target_layers - 1) claimed points
    proof_1_variables_committed_to_per_input_for_target_layers = (4 * claimed_point_variables) + divisor_variables + ((proof_1_target_layers - 1) * claimed_point_variables)
    # Proof 2 has proof_2_target_layers claimed points
    proof_2_variables_committed_to_per_input_for_target_layers = proof_2_target_layers * claimed_point_variables

    circuit_1_width = pow(2, math.ceil(math.log2(i * proof_1_gates_for_target_layers)))
    circuit_2_width = pow(2, math.ceil(math.log2(i * proof_2_gates_for_target_layers)))
    proof_1_variable_commitments = math.ceil((i * proof_1_variables_committed_to_per_input_for_target_layers) / circuit_1_width)
    proof_2_variable_commitments = math.ceil((i * proof_2_variables_committed_to_per_input_for_target_layers) / circuit_2_width)

    proof_1_vector_commitments = proof_1_branches + proof_1_variable_commitments
    proof_2_vector_commitments = proof_2_branches + proof_2_variable_commitments

    # n'
    n__1 = 2 * (math.floor(proof_1_vector_commitments / 2) + 1)
    n__2 = 2 * (math.floor(proof_2_vector_commitments / 2) + 1)
    # i == n' isn't sent
    proof_1_t_commitments = (2 * (n__1 + 1)) - 1
    proof_2_t_commitments = (2 * (n__2 + 1)) - 1

    all_proof_commitments = proof_commitments + proof_1_t_commitments + proof_1_ip_commitments + proof_1_vector_commitments + proof_commitments + proof_2_t_commitments + proof_2_ip_commitments + proof_2_vector_commitments
    all_proof_scalars = 2 * 5
    full_proof_size = (all_proof_commitments + all_proof_scalars) * 32

    print(
      "Compute Factor:", extraneous_compute,
      ", Inputs:", i,
      ", Proof 1 Base Cost:", circuit_1_width,
      ", Proof 2 Base Cost:", circuit_2_width,
      ", Commitments:", proof_commitments + proof_1_t_commitments + proof_1_ip_commitments + proof_1_vector_commitments + proof_commitments + proof_2_t_commitments + proof_2_ip_commitments + proof_2_vector_commitments,
      "(p1vcs:", proof_1_variable_commitments, ", p2vcs:", proof_2_variable_commitments, ")",
      ", Size:", full_proof_size
    )

print()
@Rucknium
Copy link
Author

NOTE: There was a mistake in a previous version of this Gist. There was a mistaken multiplication by MAX_INPUTS here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment