6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cisco Systems JapanAdvent Calendar 2024

Day 24

Bitcoin Coreノードの立ち上げ(2024年クリスマスバージョン)

Last updated at Posted at 2024-12-22

はじめに

前々置き

Adventカレンダー用に以前書いた記事を丁寧に書き直していたら、登録する際に、11月以前に書いた記事は載せられません!だと言われ、困った末、恥を捨てて、クリスマスバージョンとして再掲します。

FinanceとEngineeringが融合したテクノロジーとしての新しいお金の形は、今までの相場師=山師的な投機とも政府の言いなりにコツコツ貯めながら悶々と不満を積もらせる地道な守銭奴とも全く違う世界だと思います。自分たちのお金にならない暗号資産のお話は一時の話題作りのために取り上げるだけという一貫した姿勢のマスコミに頼ることはできず自分で掘り下げる以外に道がないこの世界、Rabbit Holeとも言われますが、備忘録の意味も込めて書き直したものです。4年後の次の半減期までに、目標とする相模湾を眺めながら自分の好きなことに時間を十分使える経済的自立を夢見て。もし少しでも興味がわきましたら読み進めてください。
IMG_2314.jpeg

前置き

これを書いているのは2024年12月の年末も押し迫ったさなかですが、今年は本当にいろいろなことがBreak Neckスピードで起きた年でした。今年(2024年)の漢字も「金」と言うことでお金にまつわる話題が多かったことは確かですね。減税、年金、NISA、政治資金、新紙幣などなど。その中でも暗号資産がまた何度か取り上げられていましたが本稿ではDigital Goldとも呼ばれるビットコインをネタに取り上げてみたいと思います。

そもそもなぜビットコイン?

私がビットコインに再び興味を持ったのは3回目の半減期の後、米国のマネジドファンド市場でBTCのETFが認可されて投資家コミュニティーがざわつき始めた2024年前半です。その前にも何度かその名前を聞いたことはあったり、実際に買ってみたりしたのですが、結局株式やFXなどの一種としてしか認識できず、すぐに忘れてしまっていました。でも今回は年金問題、NISAやIDECOなど老後の蓄えに対する関する不安をあおる様なマスコミの影響もあり少し真面目に見てみると、ぼんやりと少しずつなぜこの$0からスタートした発行団体の存在しないトークンが時価総額で今や2兆ドルを超えるか超えないか(2024年12月末現在)にまで成長した理由がわかるような気がしてきました。(何冊も書籍を購入し、YouTubeやXを見まくった結果ですが、投資アドバイスではありませんし、仮想通貨BTCの値動き予想ではありませんのでその点はあしからずご了承ください。)

本投稿では、その過程で私が学んだ中で、「あ、ひょっとしてそういうことだったのね!」と最もその理由についての理解を深め実感するのに役立った経験を共有したいと思います。

やりたいこと

Sound Money(最も健全なお金)と言われるBitcoinで本当の意味での経済的自立(インフレ圧力を強めるFiat Moneyに対する自衛)を目指してBitcoin Coreノードを自宅のPC環境に構築します。

Miningではありません

10年以上前であれば別ですが、今や700ExaHashを超える途方もないCPUパワーを必要するBTCのMiningは、一般の人はもちろんデータセンタ業者の中でも気弱な者は卒倒するぐらいの熾烈な競争で勝ち続けるモノだけがTokenを手にすることが出来ると言う正にWild-Wild-Westの世界です。従って我々庶民は、日本でも最近数々運営されている取引所を通じてお金を払ってBTCトークンを購入する事になります。

なぜBitcoin Core Nodeを立ち上げることが必要なのか?

でもSelf-custodyという形で自分のWalletにそのBTC(もしくはその1億分の1のSat)をTransferしない限り、折角お金を出して取引所で買ったBTCトークンもビットコインのブロックチェーンに存在することがありません。取引所がハッキングされてトークンが流失したと言う記事を最近を目にした方も多くいらっしゃると思いますが、ビットコインを買っても自分のWalletに「出庫」しなければ、あなたのものだと思っているビットコインもその取引所が発行する「預かり書」に過ぎません。じゃあ自分のWalletに「出庫」すれば安全かというと、今度は別の不安が頭を持ち上げます。「出庫」は自分のPublic Keyがさらされるだけだからいいけど、今後自分のWalletからさらにTransferするときには自分のSignature情報がIPアドレスと一緒にどこかに記録されることによりハッキングのターゲットになったり、または当局の取り調べ対象にならないかなどなど・・・

立ち上げればあなたもBitcoinネットワークの立派な一員!

そこで一般的に推奨されているのが自分でBitcoin Core Nodeを立ち上げて匿名ネットワークを通じて他の多数のノードとつながることにより、自分のIdentifyの秘匿性を保ちながらBitcoinのRobustnessを担保するネットワークの一端をささやかでも担っていこうという試みです。
因みに日本は世界中にある2万以上のノード(2024年12月末現在)の内12番目でしたが、これはReachableなノードということで外からのコネクションを受け入れているオープンなノードですね。私のノードも含め匿名でTORを経由してつながるノードは含まれていないのではと推測します。
https://bitnodes.io/

Hardware Wallet(私の場合は今回Sparrow Walletを使いました)を自宅のBitcoin Core Node経由で接続、Hardware Walletにセキュアに保存し運用できる環境を作りたいと思います。
本編ではBitcoin Core Nodeの立ち上げとTORによるPeeringネットワークの設定までを行います。

利用環境

Ubuntu 24.04 を中古で買ったFujitsu Esprimo(FMVD27002 + SSD 2T + Mem 16G)にインストール
※この中で一番高価だったのは2TのSSDで1.5万円。PC本体はメモリ込みで1万円ちょいでした。(2024年7月現在)

参考にした動画サイト(Ministry of Node)

UNB22 - 04 - Bitcoin Core
こちらの動画は2年前に作成されたBitcoin Node構築運用シリーズ物で、未だに多くのViewerを集める人気サイトであります。
今回は、2024年時点でのUbuntuとBitcoin Node最新バージョンで立ち上げを行いましたが、基本的な流れはサイト通りで完了することができました。

その他Bitcoin Coreに関する情報はこちら

https://bitcoin.org/en/full-node
フルノードの立ち上げについて
https://github.com/bitcoin/bitcoin/blob/master
自動起動の為のコンフィグやRPCの設定を作るスクリプトなど

手順

Bitcoin Node用専用ユーザの作成

Bitcoin Nodeを事項するユーザはSUDO特権を持たないユーザであることがセキュリティーの観点から望ましいので、専用のユーザを作ります。

~$ sudo adduser satoshi
info: Adding user `satoshi' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `satoshi' (1001) ...
info: Adding new user `satoshi' (1001) with group `satoshi (1001)' ...
info: Creating home directory `/home/satoshi' ...
info: Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for satoshi
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y
info: Adding new user `satoshi' to supplemental / extra groups `users' ...
info: Adding user `satoshi' to group `users' ...
hiro@BTCNODE:~$ 

Bitcoin Coreのダウンロード

ダウンロードするソフトウェアの正当性を確認することは常に大事ですが、ことBitcoinに関してはお金の関わることなので特に気をつけたいところです。
信頼できるソース:
https://bitcoin.org/en/bitcoin-core/

Ubuntu24.04

$cat /etc/issue
Ubuntu 24.04 LTS \n \l
$ cd Downloads/
hiro@BTCNODE:~/Downloads$ ls
hiro@BTCNODE:~/Downloads$ 
hiro@BTCNODE:~/Downloads$ wget https://bitcoin.org/bin/bitcoin-core-27.0/bitcoin-27.0-x86_64-linux-gnu.tar.gz
--2024-07-15 02:56:34--  https://bitcoin.org/bin/bitcoin-core-27.0/bitcoin-27.0-x86_64-linux-gnu.tar.gz
Resolving bitcoin.org (bitcoin.org)... 2606:4700:10::ac43:289a, 2606:4700:10::6816:44b0, 2606:4700:10::6816:45b0, ...
Connecting to bitcoin.org (bitcoin.org)|2606:4700:10::ac43:289a|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 48849225 (47M) [application/octet-stream]
Saving to: bitcoin-27.0-x86_64-linux-gnu.tar.gz

bitcoin-27.0-x86_64 100%[===================>]  46.59M  11.0MB/s    in 4.2s    

2024-07-15 02:56:39 (11.0 MB/s) - bitcoin-27.0-x86_64-linux-gnu.tar.gz saved [48849225/48849225]

hiro@BTCNODE:~/Downloads$ 

チェックサムでファイルの正当性を確認する

YouTubeの動画でも強調されていますが、ことお金に関わることなのでセキュリティー要件は十分に気をつけたいところですね、特にBitcoin Coreは基本24−365放置する運用の場合。

$ wget https://bitcoin.org/bin/bitcoin-core-27.0/SHA256SUMS.asc
--2024-07-15 02:59:47--  https://bitcoin.org/bin/bitcoin-core-27.0/SHA256SUMS.asc
Resolving bitcoin.org (bitcoin.org)... 2606:4700:10::ac43:289a, 2606:4700:10::6816:44b0, 2606:4700:10::6816:45b0, ...
Connecting to bitcoin.org (bitcoin.org)|2606:4700:10::ac43:289a|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7590 (7.4K) [application/octet-stream]
Saving to: ‘SHA256SUMS.asc’

SHA256SUMS.asc      100%[===================>]   7.41K  --.-KB/s    in 0s      

2024-07-15 02:59:47 (19.8 MB/s) - ‘SHA256SUMS.asc’ saved [7590/7590]

hiro@BTCNODE:~/Downloads$ wget https://bitcoin.org/bin/bitcoin-core-27.0/SHA256SUMS
--2024-07-15 03:05:29--  https://bitcoin.org/bin/bitcoin-core-27.0/SHA256SUMS
Resolving bitcoin.org (bitcoin.org)... 2606:4700:10::6816:45b0, 2606:4700:10::ac43:289a, 2606:4700:10::6816:44b0, ...
Connecting to bitcoin.org (bitcoin.org)|2606:4700:10::6816:45b0|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2842 (2.8K) [application/octet-stream]
Saving to: ‘SHA256SUMS’

SHA256SUMS          100%[===================>]   2.78K  --.-KB/s    in 0s      

2024-07-15 03:05:29 (11.1 MB/s) - ‘SHA256SUMS’ saved [2842/2842]

hiro@BTCNODE:~/Downloads$ ls
bitcoin-27.0-x86_64-linux-gnu.tar.gz  SHA256SUMS  SHA256SUMS.asc

$ sha256sum --ignore-missing --check SHA256SUMS
bitcoin-27.0-x86_64-linux-gnu.tar.gz: OK
hiro@BTCNODE:~/Downloads$ 
hiro@BTCNODE:~/Downloads$ tar xzf bitcoin-27.0-x86_64-linux-gnu.tar.gz 
hiro@BTCNODE:~/Downloads$ ls -la
total 47736
drwxr-xr-x  3 hiro hiro     4096  7月 15 20:16 .
drwxr-xr-x 18 hiro hiro     4096  7月 15 02:56 ..
drwxr-xr-x  6 hiro hiro     4096  4月 16 01:28 bitcoin-27.0
-rw-rw-r--  1 hiro hiro 48849225  5月 24 02:40 bitcoin-27.0-x86_64-linux-gnu.tar.gz
hiro@BTCNODE:~/Downloads$ sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-27.0/bin/*

ここまではSUできるユーザで作業しましたが、ここからはBitcoin Coreを動かすユーザ(satoshi)で作業します。
CLIでBitcoin CoreをDaemonとしてバックグラウンドでスタートする場合のコマンド

> bitcoind -daemon
satoshi@FMVD27002:~/.bitcoin$ bitcoind -daemon
satoshi@FMVD27002:~/.bitcoin$ ls -la
total 78916
drwx------ 5 satoshi satoshi     4096 10月  4 22:50 .
drwxr-x--- 3 satoshi satoshi     4096 10月  4 22:45 ..
-rw------- 1 satoshi satoshi      221 10月  4 22:05 banlist.json
-rw------- 1 satoshi satoshi        6 10月  4 22:05 bitcoind.pid
drwx------ 3 satoshi satoshi    16384 10月  4 23:00 blocks
drwx------ 2 satoshi satoshi    16384 10月  4 22:58 chainstate
-rw------- 1 satoshi satoshi       75 10月  4 22:05 .cookie
-rw------- 1 satoshi satoshi 80206242 10月  4 23:00 debug.log
-rw------- 1 satoshi satoshi        0 10月  4 22:05 .lock
-rw------- 1 satoshi satoshi   530683 10月  4 22:50 peers.dat

Bitcoin Coreのコンフィグファイルを作成します。

satoshi@FMVD27002: cat bitcoin.conf
server=1
txindex=1
daemon=1
rpcport=8332
rpcbind=0.0.0.0
rpcallowip=127.0.0.1
rpcallowip=10.0.0.0/8
rpcallowip=172.0.0.0/8
rpcallowip=192.0.0.0/8
zmqpubrawblock=tcp://0.0.0.0:28332
zmqpubrawtx=tcp://0.0.0.0:28333
zmqpubhashblock=tcp://0.0.0.0:28334
whitelist=127.0.0.1

さらにRPCに関する内容を追加します。
追加する内容を生成するコマンドはGithubからダウンロード
https://github.com/bitcoin/bitcoin/blob/master/share/rpcauth/rpcauth.py

RPC情報のCONFファイルへの追加

後ほど立ち上げる暗号資産管理用お財布Sparrowとプライベートで通信を行うために必要な作業です。
スクリーンショット 2024-07-15 21.58.14.png
https://github.com/bitcoin/bitcoin/blob/master/share/rpcauth/rpcauth.py

satoshi@BTCNODE:~/.bitcoin$ ./rpcauth.py bitcoin bitcoin
String to be appended to bitcoin.conf:
rpcauth=bitcoin:aecb54d0956ee956c8553963c55f07cec08....bf788b89fa103fe41db0970e

ユーザ名(例:bitcoin)とパスワード(例:bitcoin)をここで指定します。
(本稿ではWalletでBitcoin Coreと通信する設定は省きますが基本ここでセットするRPCの情報が必要になります。)
ここのrpcauth=ではじまる1行をbitcoin.confに追加する
追加した後のファイル:bitcoin.conf
 ファイルの中身↓

satoshi@BTCNODE:~/.bitcoin$ cat bitcoin.conf
erver=1
txindex=1
daemon=1
rpcport=8332
rpcbind=0.0.0.0
rpcallowip=127.0.0.1
rpcallowip=10.0.0.0/8
rpcallowip=172.0.0.0/8
rpcallowip=192.0.0.0/8
zmqpubrawblock=tcp://0.0.0.0:28332
zmqpubrawtx=tcp://0.0.0.0:28333
zmqpubhashblock=tcp://0.0.0.0:28334
whitelist=127.0.0.1
rpcauth=bitcoin:aecb54d0956ee9・・・3fe41db0970e

Bitcoindの自動スタート

UbuntuのSystemctlで自動立ち上げするために必要なファイルをGITHUBからダウンロードする
以下のアドレスからファイルServiceファイルを取得して編集する

変更箇所一覧

$sudo vi /etc/systemd/system/bitcoind.service

# 以下bitcoind.serviceの中身
[Service]
#conf fileとData Dirの場所を変更する。bitcoindのパスは/usr/local/binとする。
ExecStart=/usr/local/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \
                            -conf=/home/satoshi/.bitcoin/bitcoin.conf \
                            -datadir=/home/satoshi/.bitcoin \
                            -startupnotify='systemd-notify --ready' \
                            -shutdownnotify='systemd-notify --stopping'

#コメントアウト
# Make sure the config directory is readable by the service user
PermissionsStartOnly=true
#ExecStartPre=/bin/chgrp bitcoin /etc/bitcoin

#ユーザとグループを変更
# Run as bitcoin:bitcoin
User=satoshi
Group=satoshi

#コメントアウト
# Deny access to /home, /root and /run/user
#ProtectHome=true

BOOTとともに自動スタートするように設定する

~$ sudo systemctl enable bitcoind.service
Created symlink /etc/systemd/system/multi-user.target.wants/bitcoind.service → /etc/systemd/system/bitcoind.service.

~$ sudo systemctl start bitcoind.service
hiro@BTCNODE:~$ sudo systemctl status bitcoind.service
● bitcoind.service - Bitcoin daemon
     Loaded: loaded (/etc/systemd/system/bitcoind.service; enabled; preset: enabled)
     Active: active (running) since Tue 2024-07-16 00:20:27 JST; 3s ago
       Docs: https://github.com/bitcoin/bitcoin/blob/master/doc/init.md
   Main PID: 4161 (bitcoind)
      Tasks: 19 (limit: 18916)
     Memory: 583.1M (peak: 681.0M)
        CPU: 7.599s
     CGroup: /system.slice/bitcoind.service
             └─4161 /usr/local/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid -conf=/home/satoshi/>

 7月 16 00:20:21 BTCNODE systemd[1]: Starting bitcoind.service - Bitcoin daemon...
 7月 16 00:20:21 BTCNODE bitcoind[4160]: Bitcoin Core starting
 7月 16 00:20:27 BTCNODE systemd[1]: Started bitcoind.service - Bitcoin daemon.

TIP: もしもスタートに失敗した場合は、bitcoind.serviceファイルの中身が間違えていないかもう一度チェック。bitcoindの絶対パスやCONFarahファイル、データディレクトリの場所など間違いやすいので注意

ネットワークの匿名性を確保するためにTORをインストールする

ここからはSUで作業します。

 $ sudo apt install tor

$ cat /etc/tor/torrc
## Configuration file for a typical Tor user
## Last updated 9 October 2013 for Tor 0.2.5.2-alpha.
## (may or may not work for much older or much newer versions of Tor.)
.....
## a private bridge, for example because you'll give out your bridge
## address manually to your friends, uncomment this line:
#PublishServerDescriptor 0

# THREE LINES ADDED
ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1
#END OF TORRC

 $ sudo systemctl status tor
● tor.service - Anonymizing overlay network for TCP (multi-instance-master)
     Loaded: loaded (/usr/lib/systemd/system/tor.service; enabled; preset: enabled)
     Active: active (exited) since Tue 2024-07-16 00:32:38 JST; 3s ago
    Process: 5272 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 5272 (code=exited, status=0/SUCCESS)
        CPU: 1ms

 7月 16 00:32:38 BTCNODE systemd[1]: Starting tor.service - Anonymizing overlay network for TCP >
 7月 16 00:32:38 BTCNODE systemd[1]: Finished tor.service - Anonymizing overlay network for TCP >
lines 1-9/9 (END)

TORを利用するためには
①bitcoin.confの最後に4ライン追加が必要

$ cat /home/satoshi/.bitcoin/bitcoin.conf
erver=1
txindex=1
daemon=1
rpcport=8332
rpcbind=0.0.0.0
rpcallowip=127.0.0.1
rpcallowip=10.0.0.0/8
rpcallowip=172.0.0.0/8
rpcallowip=192.0.0.0/8
zmqpubrawblock=tcp://0.0.0.0:28332
zmqpubrawtx=tcp://0.0.0.0:28333
zmqpubhashblock=tcp://0.0.0.0:28334
whitelist=127.0.0.1
rpcauth=bitcoin:b54d0956e・・・db0970e76c

# ADDING FOLLOWIING FOUR LINES
proxy=127.0.0.1:9050
listen=1
bind=127.0.0.1
onlynet=onion

②TORのサービスファイル(/etc/tor/torrc)にも以下の3ラインの追加が必要

ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1

torのユーザグループに satoshiを追加する

$ sudo usermod -a -G debian-tor satoshi

ここでBitcoin-Coreを再スタートする

$ sudo systemctl restart bitcoind.service

TOR NETWORKのみからアクセス可能であることを確認する。つまり、以下のコマンドで確認すると、IPV4やV6からはReachableがFaulseでOnion(TOR)からはReachableがTrueになっている。

$ bitcoin-cli getconnectioncount
9

$ bitcoin-cli getnetworkinfo
{
  "version": 270000,
  "networks": [
    {
      "name": "ipv4",
      "limited": true,
      "reachable": false,
    },
    {
      "name": "ipv6",
      "limited": true,
      "reachable": false,
    },
    {
      "name": "onion",
      "limited": false,
      "reachable": true,
    },

$ bitcoin-cli getconnectioncount
10

Bitcoin Nodeを再起動してTOR経由でPeerが確立されていることを確認する。

お疲れ様でした!

これでBitcoin Coreのノードが立ち上がりました。
SSDだとほぼ音もなく静かに動いていますが、HDDだとひっきりなしにガリガリ書き込みが行われているのがわかります。

$ bitcoin-cli -netinfo
Bitcoin Core client v27.0.0 - server 70016/Satoshi:27.0.0/

        onion   total   block
in          0       0
out        10      10       2
total      10      10

Local addresses: n/a

ここまでくれば、後はBlock HightがMempoolで見える高さと同じ(100%)になるまで辛抱強く待つだけです。私の非力な(5年くらい昔の)マシーンでは2〜3日かかりました。
ちなみにMempoolというのはPublicなブロックチェーンエクスプローラーで次々と新たなブロックが10分ごとに生成されているのがわかります。
https://mempool.space/

コアノードを立ち上げたホームディレクトリの下に.bitcoinというディレクトリが作られ、その下にすべてのファイルが格納されていますが、その中のdebug.logというファイルをTailすると今何が起きているのかわかります。

立ち上げ直後のDebug.log
ブロックの作られた日(2018-01-25)と進行状況(0.267654 = 26%)

:~/.bitcoin$ tail -f debug.log 

2024-10-05T00:59:20Z UpdateTip: new best=0000000000000000004c7fa4207e4161d2e85efeb5060eea25474c8617a08bfd 
height=506110 version=0x20000000 
log2_work=87.962944 tx=295411019 
date='2018-01-25T22:42:51Z' progress=0.267654 cache=136.2MiB(1258436txo)

最新のところまでキャッチアップしたところ
ブロックの作られた日(2024-12-22)と進行状況(1.000000 = 100%)

2024-12-22T13:49:16Z UpdateTip: new best=000000000000000000024f942a3e715887c5cea73f17f8ad6245590cbb4d3084 
height=875886 version=0x20e00000 log2_work=95.341768 tx=1134921191 
date='2024-12-22T13:49:01Z' progress=1.000000 cache=65.2MiB(560215txo)

まとめ

立ち上げて数ヶ月たちますが、その間リブートしたことはありますが、ほぼノートラブルで動き続けています。今回立ち上げたのはバリデータと呼ばれるノードでデータは800GB弱のサイズですが、これはVCトレードやCoinBaseなどの大手取引所が運用するのと内容は同一です。

:~/.bitcoin$ du . -h
55G	./indexes/txindex
55G	./indexes

200M	./blocks/index
662G	./blocks
12G	./chainstate
728G	.

14年の間にBTCトークンの価値は何十万倍になったにも関わらず、サトシ=ナカモトのGenesis Blockから綿々と続く鎖がすべて含まれていて、運用母体もないプログラムが黙々と、何の拘束力にも縛られない参加者のコンセンサスのみで動き続けているというのはちょっとロマンを感じませんか?
2025年はFintechが本格的に動く年と言われていますので、BCTの値動きにも期待したいですね。以上ご参考になれば幸いです。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?