Skip to content

Latest commit

 

History

History
506 lines (312 loc) · 15.4 KB

File metadata and controls

506 lines (312 loc) · 15.4 KB

Don't Trust, Verify!

Get the data

The Bitcoin Blockchain is openly verifiable, anyone without the need for any kind of permission can look at it.

A simple way that requires nothing more than an Internet connection is to query some API.

Blockstream explorer, for example, offers a nice set of API that you can use over Tor with an onion service (recommended).

Example API request over onion service: http://explorerzydxu5ecjrkwceayqybizmpjjznk5izmitf2modhcusuqlid.onion/api/address/bc1qa24tsgchvuxsaccp8vrnkfd85hrcpafg20kmjw

Or if you don't want to use Tor.

Example API request over https: https://blockstream.info/api/address/bc1qa24tsgchvuxsaccp8vrnkfd85hrcpafg20kmjw

Blockstream API documentation: https://github.com/Blockstream/esplora/blob/master/API.md

There are many different Blockchain explorers that offer API, pick the one that works best for you.

Another way of getting the data is to use your own full node.

Useful links:

Analyze the data

A Bitcoin transaction is counted as a Wasabi "CoinJoin round" if it satisfies the following criteria:

  • Number of equal value outputs >2, only the most frequent equal value output denomination is counted
  • The most frequent equal value output denomination has to be between 0.0899 and 0.1101 or between 0.1798 and 0.2202
  • All the inputs and outputs have to be bech32 addresses (Starting with "bc1")
  • One of the output has to be lower than 0.05 (Coordinator fee)
  • Number of inputs >= Number of equal value outputs, only the most frequent equal value output denomination is counted

Keep in mind that if you use different criteria, you may end up with different results.

Once you have the data you are interested in, you can work on it using your favorite programming language. Here there is the complete list of stats used and their exact calculation. If you find any error, or something doesn't add up, please let me know so I can fix it.


  • CoinJoin per day

The green line is the number of CoinJoin per day.

The blue line is the average number of CoinJoin per day.

  • Partecipants per CoinJoin

The green dots are the distribution of the number of partecipants per each CoinJoin. The number of partecipants is equal to the number of equal value outputs, only the most frequent equal value output denomination is counted.

The blu line is the average of the distribution.

  • Average input size per CoinJoin

The green dots are the distribution of the average input sizes for each CoinJoin.

Average input size per CoinJoin = sum(CoinJoin inputs) / number(CoinJoin inputs)

The blue line is the average of the distribution.

Example:

CoinJoin round 1
inputs > amounts

A > 1
B > 2
C > 3
D > 4
E > 5

average per CoinJoin = (1+2+3+4+5)/5 = 3

average overall = 3/1 = 3

CoinJoin round 2
inputs > amounts

F > 2
G > 5
H > 6
I > 8
J > 1

average per CoinJoin = (2+5+6+8+1) / 5 = 4.4

average overall = (3+4.4)/2 = 3.7

  • Total volume

The green line is the total input volume.

The blue line is the total equal output volume.

Example:

CoinJoin round 1
inputs > amounts |  | amounts

A > 1 |  | 1
B > 2 |  | 1
C > 3 |  | 1
D > 4 |  | 1
E > 5 |  | 1
         | 2
         | 2
         | change
         | change
         | ...

total input volume = 1+2+3+4+5 = 15

total mixed volume = 1+1+1+1+1+2+2 = 9

  • Total number of addresses

The green line is the total number of addresses that partecipate as input in a CoinJoin.

The blue line is the total number of inputs.

Ideally, green and blue should be equal, each input should be a separate address. In practice people reuse addresses multiple times.

The light blue line is the total number of remixers. An input address is counted as a remixer if it spends a previous equal value output and if it appears as input not more than once and as equal value output not more than once (either in the same CoinJoin or in different ones).

The orange line is the total number of addresses reused. An input address is counted as reused if it appears as input in a CoinJoin more than once (either in the same CoinJoin or in different ones).

The red line is the total number of inputs that belong to reused addresses.

Example:

CoinJoin round 1
inputs > amounts |  | amounts > outputs

A > 1 |  | 1 > Z
B > 2 |  | 1 > Y
C > 3 |  | 1 > X
         | change
         | ...

total number input addresses = A,B,C = 3

total number inputs = A,B,C = 3

total number remixers = 0

total number input addresses reused = 0

total number inputs reused = 0

CoinJoin round 2
inputs > amounts |  | amounts > outputs

A > 1 |  | 1 > W
Z > 1 |  | 1 > V
E > 3 |  | 1 > U
         | change
         | ...

total number input addresses = A,B,C,Z,E = 5

total number inputs = A,B,C,A,Z,E = 6

total number remixers = Z = 1

total number input addresses reused = A = 1

total number inputs reused = A,A = 2

  • Percentage remixers per CoinJoin

The green dots are the distribution of the remixers percentage for each CoinJoin. An input address is counted as a remixer if it spends a previous equal value output and if it appears as input not more than once and as equal value output not more than once (either in the same CoinJoin or in different ones).

remixers percentage per CoinJoin = number(CoinJoin remixers) / number(CoinJoin inputs)

The blue line is the average of the distribution.

Example:

CoinJoin round 1
inputs > amounts |  | amounts > outputs

A > 1 |  | 1 > Z
B > 2 |  | 1 > Y
C > 3 |  | 1 > X
         | change
         | ...

remixers percentage per CoinJoin = 0%

average percentage = 0%

CoinJoin round 2
inputs > amounts |  | amounts > outputs

A > 1 |  | 1 > W
Z > 1 |  | 1 > V
E > 3 |  | 1 > U
         | change
         | ...

remixers percentage per CoinJoin = 1/3 = 33%

average percentage = (0+33)/2 = 16.5%

  • Total percentage remixers

The green line is the percentage of remixers on the total number of addresses that partecipated as input in a CoinJoin. An input address is counted as a remixer if it spends a previous equal value output and if it appears as input not more than once and as equal value output not more than once (either in the same CoinJoin or in different ones).

percentage input addresses = number(total remixers) / number(total input addresses)

The blue line is the percentage of remixers on the total number of inputs.

percentage inputs = number(total remixers) / number(total inputs)

Example:

CoinJoin round 1
inputs > amounts |  | amounts > outputs

A > 1 |  | 1 > Z
B > 2 |  | 1 > Y
C > 3 |  | 1 > X
         | change
         | ...

percentage input addresses = 0%

percentage inputs = 0%

CoinJoin round 2
inputs > amounts |  | amounts > outputs

A > 1 |  | 1 > W
Z > 1 |  | 1 > V
E > 3 |  | 1 > U
         | change
         | ...

percentage input addresses = (Z)/(A,B,C,Z,E) = 1/5 = 20%

percentage inputs = (Z)/(A,B,C,A,Z,E) = 1/6 = 16%

  • Percentage address reuse per CoinJoin

The orange dots are the distribution of the percentage of addresses reused for each CoinJoin. An input address is counted as reused if it appears as input in a CoinJoin more than once (either in the same CoinJoin or in different ones).

percentage input addresses reuse per CoinJoin = number(CoinJoin input addresses reused) / number(CoinJoin input addresses)

The red dots are the distribution of the percentage of inputs that belong to reused addresses.

percentage inputs reused per CoinJoin = number(CoinJoin inputs reused) / number(CoinJoin inputs)

The red and orange lines are the average of the respective distribution.

Example:

CoinJoin round 1
inputs

A,A,B,B,C,D,E

n° input addresses reused = A,B = 2

n° inputs reused = A,A,B,B = 4

tot n° input addresses = A,B,C,D,E = 5

tot n° inputs = A,A,B,B,C,D,E = 7

percentage input addresses reused per CoinJoin = n° input addresses reused / n° input addresses = 2/5 = 40%

percentage inputs reused per CoinJoin = n° inputs reused / n° inputs = 4/7 = 57%

average % input address reused per CoinJoin = 40/1 = 40%

average % inputs reused per CoinJoin = 57/1 = 57%

CoinJoin round 2
inputs

F,C,G,H,I,I

n° input addresses reused = C,I = 2

n° inputs reused = C,I,I = 3

tot n° input addresses = F,C,G,H,I = 5

tot n° inputs = F,C,G,H,I,I = 6

percentage input addresses reused per CoinJoin = n° input addresses reused / n° input addresses = 2/5 = 40%

percentage inputs reused per CoinJoin = n° inputs reused / n° inputs = 3/6 = 50%

average % input addresses reused per CoinJoin = (40+40)/2 = 40%

average % inputs reused per CoinJoin = (57+50)/2 = 53.5%

  • Total percentage address reuse

The orange line is the percentage of address reuse on the total number of addresses that partecipated as input in a CoinJoin. An input address is counted as reused if it appears as input in a CoinJoin more than once (either in the same CoinJoin or in different ones).

percentage input addresses reused = number(total input addresses reused) / number(total input addresses)

The red line is the percentage of inputs that belong to reused addresses on the total number of inputs.

percentage inputs reused = number(total inputs reused) / number(total inputs)

Example:

CoinJoin round 1
inputs

A,A,B,B,C,D,E

n° input addresses reused = A,B = 2

n° inputs reused = A,A,B,B = 4

tot n° input addresses = A,B,C,D,E = 5

tot n° inputs = A,A,B,B,C,D,E = 7

percentage input addresses reused = n° input addresses reused / tot n° input addresses = 2/5 = 40%

percentage inputs reused = n° inputs reused / tot n° inputs = 4/7 = 57%

CoinJoin round 2
inputs

F,C,G,H,I,I

n° input addresses reused = A,B,C,I = 4

n° inputs reused = A,A,B,B,C,C,I,I = 8

tot n° input addresses = A,B,C,D,E,F,G,H,I = 9

tot n° inputs = A,A,B,B,C,D,E,F,C,G,H,I,I = 13

percentage input addresses reused = n° input addresses reused / tot n° input addresses = 4/9 = 44%

percentage inputs reused = n° inputs reused / tot n° inputs = 8/13 = 61%

  • Total number equal outputs

The green line is the total number of equal value outputs addresses.

The blue line is the total number of equal value outputs.

Ideally, green and blue should be the same, each equal value output should be a separate address. In practice some addresses are reused multiple times. This is either intentional or a bug (more here and here).

The orange line is the total number of equal value outputs addresses reused. An equal value output address is counted as reused if it appears as equal value output in a CoinJoin more than once (either in the same CoinJoin or in different ones).

The red line is the total number of equal value outputs that belong to equal value outputs addresses reused.

  • Percentage equal outputs reused per CoinJoin

The red dots are the distribution of the percentage of equal value outputs that belong to output addresses reused for each CoinJoin. An equal value output address is counted as reused if it appears as equal value output in a CoinJoin more than once (either in the same CoinJoin or in different ones).

percentage equal value outputs reused per CoinJoin = number(CoinJoin equal outputs reused) / number(CoinJoin equal outputs)

The red line is the average of the distribution.

Example:

CoinJoin round 1
inputs > amounts |  | amounts > outputs

A > 1 |  | 1 > Z
B > 2 |  | 1 > Y
C > 3 |  | 1 > X
         | change
         | ...

percentage outputs reused per CoinJoin = 0%

average percentage = 0%

CoinJoin round 2
inputs > amounts |  | amounts > outputs

D > 1 |  | 1 > Z
E > 1 |  | 1 > W
F > 3 |  | 1 > V
         | change
         | ...

percentage outputs reused per CoinJoin = (Z)/(Z,W,V) = 1/3 = 33%

average percentage = (0+33)/2 = 16.5%

  • Total percentage equal outputs reused

The orange line is the percentage of equal value outputs addresses reused on the total number of equal value outputs addresses. An equal value output address is counted as reused if it appears as equal value output in a CoinJoin more than once (either in the same CoinJoin or in different ones).

The red line is the percentage of equal value outputs that belong to equal value outputs addresses reused on the total number of equal value outputs.

Example:

CoinJoin round 1
inputs > amounts |  | amounts > outputs

A > 1 |  | 1 > Z
B > 2 |  | 1 > Y
C > 3 |  | 1 > X
         | change
         | ...

percentage equal value outputs addresses reused = 0%

percentage equal value outputs reused = 0%

CoinJoin round 2
inputs > amounts |  | amounts > outputs

D > 1 |  | 1 > Z
E > 1 |  | 1 > W
F > 3 |  | 1 > V
         | change
         | ...

percentage equal value outputs addresses reused = (Z)/(Z,Y,X,W,V) = 1/5 = 20%

percentage equal value outputs reused = (Z,Z)/(Z,Y,X,Z,W,V) = 2/6 = 33%

  • Coordinator fees per CoinJoin

The green dots are the distribution of the coordinator fees for each CoinJoin, the fees are calculate based on the values of the Coordinator address outputs.

The blue line is the average of the distribution.

  • Total coordinator fees

The green line is the comulative sum of the coordinator fees, the fees are calculate based on the values of the Coordinator address outputs.