Bitcoinから派生して誕生したSugarchainは、Bitcoinと同様に、「フルノード」(Full Node)と呼ばれる多数のコンピューター同士の結びつきによってネットワークが形成され、ブロックチェーンが維持されています。
フルノードを運用するために特別なコンピューターは必要ありません。自宅や会社のパソコンや安価なレンタルサーバー(VPS)で十分です。
今回のブログでは、レンタルサーバー(VPS)を借りてSugarchainのフルノードを構築、運用するための手順をご紹介します。
目次
フルノードとは?
フルノードの簡単な説明が bitwallet.com にあるので引用します。
ノードにはマイニング・ウォレット・ルーティング・フルブロックチェーンデータという4種類があります。この4種類の機能を全て兼ね備えているノードがフルノードです。また、単にフルブロックチェーンデータを保有しているノードのことをフルノードと呼ぶこともあります。
フルブロックチェーンとは全ての取引情報を保有・管理・共有している状態のことです。基本的に公式ウォレットは全ての取引情報をダウンロード(同期)するので、フルノードと呼べます。Electrumなどの軽量型ウォレットではブロックチェーンの同期は必要ないので、フルノードではありません。
…と言われても何のことだかさっぱりわからなかった私は、ネット上の色々な資料を読んで次のように理解ができました。(間違いがあったら指摘してください)
- フルノードとは、すべてのブロックチェーン情報を保有しているコンピューター(のプログラム)のこと。
- フルノード同士が繋がってブロックチェーン情報を共有することでBitcoinやSugarchainのネットワークができている。
- Bitcoinのパソコン版の公式ウォレット「Bitcoin Core」は、すべてのブロックチェーン情報を他のフルノードからダウンロードして保有するので、フルノードになれる。
- 「Bitcoin Core」から派生したSugarchainのウォレット「Yumekawa」も同様である。
- これらのウォレットは、ブロックチェーン情報をダウンロードするので、同期に時間がかかる。また、ブロックチェーン情報を保存するための、ある程度のストレージを消費する。
- これらのウォレットを自宅や会社のコンピューターで動作させても、通常はファイアーウォールの中に置かれていて外部のフルノードから接続できないから、フルノードとしての運用はできない。
- ファイアーウォールの設定を変更して外部のフルノードからの接続を許可すれば、フルノードになる。
- スマホのウォレットアプリなどはブロックチェーン情報を保有しない(ダウンロードしない)のでフルノードではない。
- これらのアプリは、自分でブロックチェーン情報を保有していないので、例えばウォレット運用企業のコンピューターに保有されているブロックチェーンを参照する必要がある。
要するに、ブロックチェーンの全情報を保有するウォレットプログラムを動作させ、他のものとお互いに接続し合えるようにすれば、フルノードとしてネットワークに参加できますよ、ということです。
なお、フルノードはマイニングではありませんので、フルノードを運用してネットワークの維持に貢献しても報酬はありません。完全なボランティアになります。
レンタルサーバー(VPS)を利用
今回も、定評のあるLinodeを使ってみることにします。
自宅のパソコンでも良いのですが、24時間電源を入れっぱなしにしたりファイアーウォールの設定を変更するのはどうも面倒で、VPSを借りた方が楽ですし、安心です。
Linodeは、米国ペンシルベニア州で設立された海外VPS企業です。東京にもデータセンターがあり、国内VPSと同じようなレスポンス速度で利用できます。
世界中のどのデータセンターのVPSを利用しても値段は変わりませんが、支払いはUSDになります。
ここからアカウント作成すると60日間 $100 ドル分の無料体験ができます。
Linodeでマイニングする手順については別記事を参照してください。

VPSの構築手順
それでは、実際にLinodeでVPSを立ち上げて、ウォレットのプログラムをインストールし、フルノードとして運用する手順を紹介します。
VPSを立ち上げる
ログイン画面からログインし、VPSの一覧管理画面を表示します。
[Create] > [Linode] または [Create a Linode] を選択します。VPSのスペックを設定する画面が表示されます。
[Choose a Distribution] で、VPSにインストールするLinuxのディストリビューション(Linuxの種類)を選択します。Ubuntu 20.04 LTS か Ubuntu 18.04 LTS を選択すれば間違いないです。 [Region] は Tokyo か Singapore を選択しましょう。近い場所のほうがレスポンスが速くて使いやすいです。 [Linode Plan] では CPU やメモリ容量を選択します。ここでは一番小さなの「Nanode 1GB」を選ぶことにします。Sugarchainのマニュアルによると、フルノードの運用には1GBのメモリと3GBのスワップが必要です
参考 Running a Sugarchain Node on LinuxGitHub「Nanode 1GB」で利用できるメモリは1GB、スワップは0.5GBですが、後からスワップを追加できるので、問題ありません。
画面を下へスクロールします。
[Linode Label] 欄でVPSの名前を設定します。ここでは「tokyo2」としました。 [Root Password] には管理者ログイン用のパスワードを入力します。これを紛失するとVPSにログインできなくなるので注意しましょう。 [SSH Keys] では公開鍵暗号方式でログインするための公開鍵を登録できます。公開鍵暗号方式を使うことでセキュリティを高め、さらにログイン時にパスワードを入力する必要がなくなるのですが、説明が長くなるため、ここでは割愛します。 [Create] をクリックすると、指定したスペックや設定でVPSが作成されます。暫く待つと左上に緑色の丸と「RUNNING」が表示されます。これでVPSが作成と起動が完了です。
管理者「root」でVPSにログイン
Windows環境では「PowerShell」、Mac環境では「ターミナル」などのアプリを起動します。
上図の [SSH Access] 欄に表示されているコマンドをコピーし、アプリに貼り付け、Enter キーを押して実行します。
初回実行時、本当に接続してよいかどうかの確認メッセージが表示されるので、キーボードから「yes」と入力して Enter キーを押します。
パスワードを求められるので、キーボードから入力して Enter キーを押します。入力するパスワードは画面には表示されません。
認証に成功すると、WelcomeメッセージやVPSの情報が表示され、コマンドの入力待ちの状態になります。
以上で、VPSへ管理者「root」でSSHログインできることが確認できました。
一般ユーザーの作成
VPSに管理者のユーザー名「root」とパスワードでログインできましたが、「root」アカウントを多用することはセキュリティ上好ましくないとされています。
Linuxの管理者名は「root」だと広く知られており、残るパスワードを推測されたら簡単にハッキングされてしまうからです。
VPSのセキュリティを高めるには、一般的に次の方法があります。
- 「root」アカウントでのログインを禁止し、代わりに一般ユーザーでログインする。
- パスワード方式ログインを禁止し、公開鍵認証方式のみを許可する。
1の場合、ハッカーがログインするにはパスワードだけでなくユーザー名も知る必要があります。
2の場合、「鍵」を持つパソコンからしかログインできなくなります。パスワードが漏洩しても大丈夫です。
2の方が遥かに安全なのですが、比較的高度な(?)設定が必要なので、ここでは1の方法を採ることにします。ま、それほど重要なデータを管理運用するわけではないので。
ここでは、adduser
コマンドを使って「manabu」という名前の一般ユーザーを作成します。
adduser manabu
パスワード以外は何も入力しないで Enter キーを連打するだけでOKです。
ユーザー「manabu」が作成できたら、このユーザーを「sudo」と呼ばれる管理者グループに登録します。
usermod -G sudo manabu
次回からは、「root」の代わりに「manabu」でログインし、管理者用のコマンドは常に sudo
コマンドを付けて実行するようにします。
「manabu」でログインできるかどうか確認するため、一旦VPSからログアウトします。
exit
一般ユーザー「manabu」でVPSにログイン
次のように、「@」記号の前を一般ユーザー「manabu」に変更し、ログインできるかどうかを確認します。
ssh manabu@139.162.116.58
パスワードを入力して認証されれば、下図のようにWelcomeメッセージが表示されます。
LinodeのVPSでは、一般ユーザーのプロンプト(入力待ちを示すしるし)は緑色で表示されるようですね。
最新の状態に更新
今回VPSにインストールしたのは、Linuxの一種である「Ubuntu」というオペレーティング・システムです。
Windowsに「Windows Update」があるように、Ubuntuにもアプリを更新したりセキュリティを最新の状態に保ったりするための機能「apt」があります。
次のコマンドを実行して、Ubuntuを最新の状態に更新します。
sudo apt update && sudo apt -y upgrade
完了するまでにしばらく待ちましょう。
スワップファイルの増設
最小プランである「Nanode」で利用できるメモリの容量は1GBです。フルノードの運用には1GBのメモリと3GBのスワップが必要とされています。
参考 Running a Sugarchain Node on LinuxGitHubここでは余裕を持って6GBのスワップを追加することにします。
ルートディレクトリに6GBの空のファイルを swapfile という名前で作成し、それをスワップに適用します。
sudo fallocate -l 6G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
これでルートディレクトリに swapfile というスワップファイルが作成されました。
ただ、これだけだとVPSを再起動すると無効に戻ってしまいます。再起動しても有効にするには、この swapfile を /etc/fstab に登録します。
テキストエディタ「vi」を使って /etc/fstab ファイルを編集します。
sudo vi /etc/fstab
2行目に既存のスワップの記述があるので、これを3行目にコピーし、行頭を /swapfile に書き換え、ファイルを上書き保存します。
/dev/sda / ext4 defaults 0 0
/dev/sdb none swap defaults 0 0
/swapfile none swap defaults 0 0
下図はテキストエディタ「vi」で編集している場面です。
これで、VPSが起動するときに /swapfile がスワップとして使用されるようになります。
コマンド free -h
を実行し、スワップの容量が6.5GBになったことを確認します。
ホスト名(VPSの名称)設定
コマンドの入力待ちの部分には「manabu@localhost」と表示されていますが、これは「localhostという名前のサーバーにmanabuというユーザーでログイン中」という意味です。
複数のVPSを運用する場合、どのVPSにログインしても「manabu@localhost」と表示されるので、自分がどのVPSを操作しているのかわからなくなり、混乱しがちです。
そこで、VPSの名前「localhost」をわかりやすいものに変更しましょう。ここでは「tokyo2」という名前に変更します。
次のコマンドを実行すると、/etc/hostname ファイルに「tokyo2」という名前が記入されます。
echo "tokyo2" | sudo tee /etc/hostname
次のコマンドを実行してVPSを再起動します。実行した瞬間にSSHの接続が強制解除されます。
sudo shutdown -r now
VPSの再起動が完了するまでしばらく待ち、再び手元のPCから ssh コマンドを実行してVPSに接続します。
ssh manabu@139.162.116.58
下図のように、設定した名称が反映されていることを確認します。
SSHの設定
今回は、SSHが使用するポート番号も変更し、セキュリティを高めておきます。
SSHが標準で使用するポート番号が22番であることは、ネットワークの基本中の基本事項。ネットワークを学んだ人なら誰でも知っています。
ハッカーは、まずVPSの22番ポートを叩いて侵入を試みてきます。別のポート番号を使用することで、22番ポートが塞がり、ハッカーは開いているSSHポートを探さなければならなくなり、侵入する難易度が増します。
SSHの設定は /etc/ssh/sshd_config というファイルに記述されています。テキストエディタ「vi」で編集します。
sudo vi /etc/ssh/sshd_config
「Port」と書かれた行頭のシャープ記号を削除し、「22」番ポートを例えば「12222」番に変更します。
# Port 22
↓
Port 12222
また、「PermitRootLogin」の設定を「yes」から「no」に変更し、管理者「root」のログインを禁止します。
PermitRootLogin yes
↓
PermitRootLogin no
上書き保存して「vi」を終了したら、SSHのサーバープログラムを再起動します。
sudo systemctl restart sshd
一旦ログアウトします。
exit
SSHのポート番号を12222に変更したので、次のように -p 12222
として使用するポート番号を指定します。これでログインできることを確認します。
ssh -p 12222 manabu@139.162.116.58
また、ユーザー「root」のログインを許可しない設定に変更したので、次のようにユーザー「root」でログインを試みると「Permission denied」(権限が許可されていない)エラーとなってログインに失敗します。
manabu@marie ~ % ssh -p 12222 root@172.104.114.162
root@172.104.114.162's password:
Permission denied, please try again.
ファイアーウォール
デフォルトでは、ファイアウォール機能である「UFW」がインストールされています。UFWの状況は、以下の方法で確認できます。
sudo ufw status
デフォルトでは「Status: inactive」というメッセージが表示されます。これは、インストールされているが有効になっていない(無効状態)であることを表しています。
今回のVPSは、SSHとSugarchainのポートを開放します。SSHが使用するのはTCPの12222番、Sugarchainが使用するのは34230番なので、次のようにそれぞれの番号を指定して実行します。
sudo ufw allow 12222/tcp
sudo ufw allow 34230/tcp
sudo ufw enable
これで12222番と34230番ポートだけが開放されたファイアーウォールが設定されました。
再度 sudo ufw status
を実行して設定状況を確認します。
manabu@tokyo2:~$ sudo ufw status
Status: active
To Action From
-- ------ ----
12222/tcp ALLOW Anywhere
34230/tcp ALLOW Anywhere
12222/tcp (v6) ALLOW Anywhere (v6)
34230/tcp (v6) ALLOW Anywhere (v6)
ファイアーウォールが正しく設定されているか(自分のパソコンから12222番ポートでSSH接続できるかどうか)を確認します。
VPSから exit
でログアウトします。
exit
12222番ポートへのSSH接続が成功すればOKです。
ssh -p 12222 manabu@172.104.114.162
ウォレットのセットアップ手順
仮想通貨の「ウォレット」と言うと、「コインを貯める場所」というイメージがありますが、Sugarchainの「Yumekawa」やBitcoinの「Bitcoin Core」などには、お互いに接続してブロックチェーンの情報を共有し合い、分散型ネットワークを形成する役割があります。
通常、パソコンでウォレットを起動しても、外部からパソコンへのアクセスは防御されているので、「お互いに」ブロックチェーン情報を共有することはできません。
しかし、今回紹介する方法では、ファイアーウォールの34230番ポートを開放しているので、世界中のフルノード達と「お互いに」ブロックチェーン情報を共有します。つまり、自分のVPSがSugarchainのネットワークに参加し、分散化に貢献することになります。
それでは、Sugarchainのウォレット「Yumekawa」をセットアップしましょう。
ダウンロードとインストール
Sugarchainのウォレット「Yumekawa」をGitHubからダウンロードし、インストールします。
wget https://github.com/sugarchain-project/sugarchain/releases/download/v0.16.3.36-payapoya/sugarchain-0.16.3.36-payapoya-x86_64-linux-gnu.tar.gz
ダウンロードしたファイルを展開(解凍)します。
tar zvxf sugarchain-0.16.3.36-payapoya-x86_64-linux-gnu.tar.gz
ダウンロードしたファイルはもう不要なので削除します。
rm sugarchain-0.16.3.36-payapoya-x86_64-linux-gnu.tar.gz
展開して作成された sugarchain-0.16.3 というディレクトリ(フォルダ)の、サブディレクトリ bin へ cd
コマンドを使って移動します。
cd sugarchain-0.16.3/bin
ディレクトリに含まれているファイルを ls -l
コマンドを使って表示、確認します。
manabu@tokyo2:~/sugarchain-0.16.3/bin$ ls -l
total 62116
-rwxr-xr-x 1 manabu manabu 2817912 Jan 24 13:27 sugarchain-cli
-rwxr-xr-x 1 manabu manabu 35146800 Jan 24 13:27 sugarchain-qt
-rwxr-xr-x 1 manabu manabu 3145408 Jan 24 13:27 sugarchain-tx
-rwxr-xr-x 1 manabu manabu 9983768 Jan 24 13:27 sugarchaind
-rwxr-xr-x 1 manabu manabu 12507224 Jan 24 13:27 test_sugarchain
sugarchaind がウォレット本体、sugarchain-cli がウォレットに命令を出して操作するプログラムになります。
ウォレットの起動
sugarchaind をデーモンとして起動します。
./sugarchaind -daemon
無事に起動すると「Sugarchain server starting」というメッセージが表示されます。
ウォレットの終了
sugarchaind が無事に起動することを確認できたら、一旦終了します。
次のように pidof
コマンドを実行して、sugarchaind のPIDを調べます。PIDとは、プログラムの実行番号のようなものです。
pidof sugarchaind
表示されたPIDを指定して kill コマンドを実行します。例えば、PIDが1234の場合は次のようにします。
kill 1234
数秒待つと sugarchaind が終了します。
設定ファイルの編集
ユーザー「manabu」のhomeディレクトリに .sugarchain という隠しディレクトリが作成され、その中にウォレットのデータが格納されます。
その .sugarchain ディレクトリに sugarchain.conf というファイルを作成し、その中にウォレットの動作パラメーターを記述します。
vi ~/.sugarchain/sugarchain.conf
エディター「vi」の起動直後は閲覧モードになっているので、キーボードの i キーを押して編集モード(挿入モード)に変更します。
次の内容を記述します。
server=1
rpcuser=manabu
rpcpassword=manabuPW
rpsuser=
と rpcpassword=
は適当なものに変更してください。
記述したら、ESC キーを押して閲覧モードに戻り、大文字の Z キーを2回押して上書き保存+終了します。
CPU使用率の抑制
sugarchaindは、CPUパワーを大きく消費することがあり、それが長時間に及ぶとLinodeから警告のメールが届くことがあります💦
VPS会社から「CPU使用率100%を超えてるぞ」という警告メールが届いた💦
cpulimitを使って使用率を抑えたので、今後は大丈夫だと思う。多分。
デフォルトの設定だとこんなにCPUパワーを使うとは知らなんだ。#フルノード #fullnode #Sugarchain #vps pic.twitter.com/kBWzjin1dG— 初心者まなぶ (@altbtm) March 6, 2021
CPU使用率を制御するため cpulimit
を使います。
標準では cpulimit
はインストールされていないため、次のコマンドでインストールします。
sudo apt -y install cpulimit
ウォレットの sugarchaind が起動していない場合はまず起動し、次に -l
パラメーターで使用率(パーセント)を、-p
パラメーターで sugarchaind
のPIDを指定して cpulimit
を実行します。
./sugarchaind -daemon
cpulimit -z -l 10 -p `pidof sugarchaind` &
`pidof sugarchaind`
は、バッククォート内を実行した結果が反映されます。pidof
は指定したプログラムのPIDを調べるコマンドです。つまり、このコマンド全体は、pidof
コマンドで sugarchaind
のPIDを調べて、その結果があれば -p
パラメーターで cpulimit
コマンドに渡す、という動作になります。ログファイルの更新
sugarchaind の動作状況は、ユーザー「manabu」のhomeディレクトリにある .sugarchain という隠しディレクトリの中の debug.log というファイルにどんどん記録されていきます。
どんどん流れていくログの内容を確認するには tail -f
コマンドを使うと便利です。
tail -f ~/.sugarchain/debug.log
終了するには Ctrl + C キーを押します。
このファイルには sugarchaind の動作状況がどんどん書き込まれ、どんどん肥大化していきます。ファイルがストレージを圧迫する前に、ある程度大きくなった時点でリセット(更新)する必要があるでしょう。
それを実現するのが logrotate で、毎日、毎週、決められた間隔で特定のファイルをリセットしてくれます。
/etc/logrotate.d ディレクトリの中に「sugarchaind のログを毎日リセットし、4世代まで保存しなさい」という設定ファイル sugarchaind_log を設置します。
sudo vi /etc/logrotate.d/sugarchaind_log
次の内容を記述します。
/home/manabu/.sugarchain/debug.log
{
missingok
daily
copytruncate
rotate 4
maxage 4
notifempty
}
テキストエディタ「vi」の終了は、ESC キーを押して閲覧モードに戻り、大文字の Z キーを2回押す、ですね。
動作テストは次のコマンドで。
sudo logrotate -fv /etc/logrotate.conf
~/.sugarchain ディレクトリの中で、既存の debug.log が debug.log.1 debug.log.2 … という名前に変更されていくことを確認します。
フルノードの地図
世界中に設置されているフルノードのおおよその場所は、下記のページの地図に描かれています。
参考 Sugarchain Node Maphttps://map.okoto.xyz/sugarそれほど頻繁に更新されるわけではないようなので、自分の設置したVPSが出現するまで気長に待ちましょう。
2021/04/18 追記
ようやく地図が更新され、私のフルノードが地図に出現しました!皇居のど真ん中です!
まとめ
以上、海外VPSのLinodeにSugarchainのフルノードを立ち上げる手順を紹介しました。
マイニング用プログラム(マイナー)を設置して実行するだけで良かった前回に比べて、ウォレットの設置や設定の手間が増えるため、ちょっと難しく感じるかもしれませんね。
フルノードを設置してネットワークの維持に貢献しても金銭的なメリットはありませんので、Linodeの無料体験を利用するか、すでに別の用途で運用しているVPS(あれば)を使うなど、負担のかからないやり方で参加してみるのが良いと思います。
この記事がお役に立てば幸いです。