Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新(準備中)

Feb 22, 2021 - コメント - 日記

BitcoinのUTXOの残高を調べる

先日、ビットコインのUTXOの一覧から残高を調べたい用途に簡単なスクリプトを書きました。

unspentという名前で以下のように使います

unspent tx_id index

$ ./unspent 41d09f53fc812c0762085e2af87ae99f1d6f58241bc209d7ebcc97abee59bfd4 0 69417 unspent

ソースは以下の通りです

 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
#!/bin/bash
# UTXO checker for Bitcoin mainnet
api=https://blockstream.info/api

function usage()
{
  cat <<-EOF
  usage: $(basename $0) tx_id index
EOF
}

commands='jq curl'
for c in $commands; do
  hash $c || { echo "install $c"; exit 255; }
done

tx=$1
index=$2

[ -n "$tx" ] || { usage; exit 255; }
[ -n "$index" ] || { usage; exit 255; }

result=$(curl -s "${api}/tx/$tx/outspends" | jq ".[${index}].spent")

[ "$result" = "null" ] && { echo 'invalid'; exit 255; }

value=$(curl -s "${api}/tx/$tx" | jq ".vout[${index}].value")

[ "$result" = "false" ] && { echo "$value unspent"; exit 0; }
[ "$result" = "true" ] && { echo "$value spent"; exit 1; }

Blockstream のAPIを利用させてもらっています。