aboutsummaryrefslogtreecommitdiff
path: root/contrib/tracing/log_utxos.bt
blob: 0d47f3d62bc96d5e7cca0c41711d3252a94b195a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env bpftrace

/*

  USAGE:

  bpftrace contrib/tracing/log_utxos.bt

  This script requires a 'bitcoind' binary compiled with eBPF support and the
  'utxochache' tracepoints. By default, it's assumed that 'bitcoind' is
  located in './src/bitcoind'. This can be modified in the script below.

  NOTE: requires bpftrace v0.12.0 or above.
*/

BEGIN
{
    printf("%-7s %-71s %16s %7s %8s\n",
          "OP", "Outpoint", "Value", "Height", "Coinbase");
}

/*
  Attaches to the 'utxocache:add' tracepoint and prints additions to the UTXO set cache.
*/
usdt:./src/bitcoind:utxocache:add
{
  $txid = arg0;
  $index = (uint32)arg1;
  $height = (uint32)arg2;
  $value = (int64)arg3;
  $isCoinbase = arg4;

  printf("Added   ");
  $p = $txid + 31;
  unroll(32) {
    $b = *(uint8*)$p;
    printf("%02x", $b);
    $p-=1;
  }

  printf(":%-6d %16ld %7d %s\n", $index, $value, $height, ($isCoinbase ? "Yes" : "No" ));
}

/*
  Attaches to the 'utxocache:spent' tracepoint and prints spents from the UTXO set cache.
*/
usdt:./src/bitcoind:utxocache:spent
{
  $txid = arg0;
  $index = (uint32)arg1;
  $height = (uint32)arg2;
  $value = (int64)arg3;
  $isCoinbase = arg4;

  printf("Spent   ");
  $p = $txid + 31;
  unroll(32) {
    $b = *(uint8*)$p;
    printf("%02x", $b);
    $p-=1;
  }

  printf(":%-6d %16ld %7d %s\n", $index, $value, $height, ($isCoinbase ? "Yes" : "No" ));
}

/*
  Attaches to the 'utxocache:uncache' tracepoint and uncache UTXOs from the UTXO set cache.
*/
usdt:./src/bitcoind:utxocache:uncache
{
  $txid = arg0;
  $index = (uint32)arg1;
  $height = (uint32)arg2;
  $value = (int64)arg3;
  $isCoinbase = arg4;

  printf("Uncache ");
  $p = $txid + 31;
  unroll(32) {
    $b = *(uint8*)$p;
    printf("%02x", $b);
    $p-=1;
  }

  printf(":%-6d %16ld %7d %s\n", $index, $value, $height, ($isCoinbase ? "Yes" : "No" ));
}