Storer ノードを運用する。
Storer は、あらゆるマシンを Pixelmine ノードに変える軽量なコマンドラインアプリケーションです。本ガイドでは、インストール方法、初回起動、設定、そして起動後にノードが行うすべての処理について説明します。
概要
ノードは、ネットワークの公開データの完全なコピーを保持し、それを Pixelmine アプリに提供しながら、他のノードとの間でそのコピーを継続的に整合させます。単体で完結する 1 つのプログラムとして動作し、セットアップが必要なデータベースも、つなぎ合わせる必要のある部品もありません。一度起動すれば、あとはネットワーク全体と自動的に同期を保ち続けます。
ノードを運用するとネットワークが強化され、その働きに応じて報酬を獲得できます(詳しくは ネットワークインセンティブをご覧ください)。独立したノードが多いほど、ネットワークはより強靭になります。
要件
- 64 ビットの Windows、macOS、または Linux マシン。
- 保存するデータ用のディスク容量(ネットワークとともに増加します。まずは数 GB の空き容量から始めてください)。
- 稼働時間もノードの収益源の 1 つであるため、常時接続のインターネット環境を推奨します。
- 他のノードやアプリが自分のノードに直接接続できるようにするには、受信用のポートを 1 つ開放してください(既定は 8001)。開放しなくても、ノードは送信方向での同期を続けます。
インストールと実行
お使いのプラットフォーム向けのビルドを ダウンロードページから入手し、展開してください。次に、ターミナルから実行します。
# macOS / Linux
./storer
# Windows
storer.exe初回起動
初めて実行したとき、ノードは自己紹介を行います。名前 と短い説明の入力を求め、独自の暗号学的なアイデンティティを生成し、プログラムと同じ場所に設定ファイルを書き出します。必要な操作はこれだけです。
Node name: tokyo-node-1
Description: A Pixelmine node run from Tokyoそれ以降は、ヘッドレスで起動します。起動のたびにネットワークへ登録し、ポート 8001でインターフェースを開き、ピアを探索して、同期を開始します。それ以上の入力は不要です。
設定
設定は、初回実行時に作成されるプレーンな config.json ファイルに保存され、自由にカスタマイズできます。ノードの表示のされ方、使用するディスク容量、そしてコミュニティに分配する報酬の割合などを、いつでも編集して変更できます。重要なフィールドは次のとおりです。
{
"id": "…node id…",
"name": "tokyo-node-1",
"description": "A Pixelmine node run from Tokyo",
"app_port": 8001,
"public_key": "…",
"private_key": "…keep secret…",
"storage": { "max_storage_mb": 1024 },
"points": { "user_share_percent": 60, "min_withdrawal": 500 }
}- name / description — ネットワーク上でノードがどのように表示されるか。
- app_port — ノードがサービスを提供するポート(既定は 8001)。
- public_key / private_key — ノードのアイデンティティ。秘密鍵は必ず非公開にしてください。
- storage — 保存ファイルにノードが使用できるディスク容量。
- points.user_share_percent — ノードが得た報酬のうち、コミュニティの人々にどれだけ分配するか。あなた次第です。
- points.min_withdrawal — メンバーがポイントを交換できるようになるまでに必要な残高。
config.json を編集し、ノードを再起動すると変更が反映されます。ノードが自己紹介をやり直しても、詳細が更新されるだけで、重複が作られることはありません。
機能
起動すると、ノードは 6 つの処理を自動的に、静かに実行します。
アプリへの提供
ノードは、Pixelmine アプリが接続するインターフェースを公開します。アプリはこれを通じて、フィードやプロフィールを読み込んだり、メディアをアップロード・取得したりします。プライベートなコンテンツはノードに届く前にデバイス上で暗号化されるため、ノードが扱うのは常に封をされたデータだけです。
ピアの探索
ノードは数分ごとに、知っているピアへ自分の存在を通知し、その見返りとして、まだ知らなかったノードの情報を得ます。こうして、ネットワークに関する知識はひとりでに広がっていきます。手作業で登録する中央のリストは存在しません。
ネットワークの同期
およそ 1 分に一度、ノードは自分のデータのフィンガープリントをピアと比較し、異なる部分だけを取得します。ほとんどが既に一致している場合でも比較の負荷は小さいため、ノードは大量のデータをやり取りすることなく最新の状態を保てます。
すべての検証
ノードが受け取るすべてのレコードは、保存される前に作成者の署名と照合されます。不正な、あるいは悪意のあるピアが偽造データを送り込むことはできません。各レコードがそれ自身の作成者を証明するからこそ、ノードは誰からのデータでも受け入れられるのです。
メディアの保存と提供
公開ファイルはディスク上に保持され、要求に応じて提供されます。プライベートなメディアは暗号化して保存され、鍵がなければ意味を持ちません。ダウンロードしたファイルは、ノードが信頼する前に署名と再照合されます。
ポイントの獲得
稼働する中で、ノードは自らの貢献を 4 つのカテゴリーにわたって報告します。ピアへのデータ提供、ファイルの保存、接続可能な状態の維持、そしてそれを安定して行うこと、の 4 つです。報告には署名が付くため、偽ることはできません。詳しくは下記の報酬をご覧ください。
運用を続ける
ノードはフォアグラウンドで動作し、ターミナルにリアルタイムのステータス表示を出力します。再起動や切断をまたいで稼働し続けるには(これが稼働時間の獲得につながります)、システムのサービスマネージャーの下で実行してください。Linux では、最小構成のサービスは次のようになります。
# /etc/systemd/system/storer.service
[Unit]
Description=Pixelmine Storer
After=network-online.target
[Service]
WorkingDirectory=/opt/storer
ExecStart=/opt/storer/storer
Restart=always
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now storer
sudo systemctl status storer最新の状態を保つ
Storer は、自分自身を最新の状態に保つことができます。ノードと並行してアップデーターモードで実行すると、署名済みのリリースを自動的に取得します。
./storer --updaterポイントの獲得
稼働中のノードは、その働きに応じてポイントを獲得します。ノードが行うすべての報告は自身の鍵で署名されるため、貢献を偽造したり、他のノードになりすまして主張したりすることはできません。カテゴリーは 4 つあります。
| カテゴリー | 獲得の条件 | 不正を防ぐ仕組み |
|---|---|---|
| 提供 | 他のノードがあなたのノードからデータを取得したとき。ネットワークが最も依存している働きです。 | データを受け取ったノードによって報告されます。ノードが自分自身に加点することはできません。 |
| 保存 | 本当に新しいファイルを保持したとき。 | 重複ではなく、実際に保存されたバイト数を計上します。新規性の判定期間と、1 回の報告ごとのサイズ上限により、水増しを防ぎます。 |
| 稼働時間 | 定期的なハートビートにより、接続可能な状態を維持したとき。 | 加点は 1 間隔につき 1 回に制限されるため、ハートビートを乱発することはできません。 |
| 品質 | 同期が成功し、適切な時間内に完了したとき。 | 同期の相手方によって報告され、自己申告ではありません。 |
ポイントの集計はノード自体から切り離して管理されるため、自分のマシンを完全に制御できる運用者であっても、自分のスコアをこっそり書き換えることはできません。
ポイントの分配
ポイントは、ネットワークの収益をどのように分け合うかを決めます。この仕組みは、2 段階の分配と 1 つの選択で成り立っています。
1 · ネットワーク全体で
ある期間の収益は、各ノードが獲得したポイントに比例して、ノード間で分配されます。あなたのノードの取り分は、ネットワーク全体のポイントに占めるそのノードの割合です。
node slice = node points ÷ all network points × revenue2 · コミュニティ内で
次に各ノードは、自分の取り分のどれだけをコミュニティのメンバーに還元するかを決めます。この割合は運用者が選びます。メンバー用のプールは、各メンバーがそのコミュニティで獲得したポイントに応じて分配されます。
members pool = node slice × the share the node chose具体例
きりのよい数字で、ある収益期間の例を示します。
Network revenue (period) ¥5,000,000
All nodes' points 10,000
Your node's points 2,000 → 20% of the network
Your node's slice ¥1,000,000 (20% of the revenue)
Member share (you set 60%) ¥600,000 → shared among your members
Operator keep (40%) ¥400,000 → yoursより多くのポイントを獲得すれば、同じ収益に対するあなたの取り分は大きくなります。逆に、獲得量が同じでも周囲でネットワークが成長すれば、取り分は小さくなります。取り分は常に、他のすべての参加者との相対で決まるからです。メンバーは、残高がネットワークの定める最低額を超えると引き出せます。