Oasysのバリデーター

こんにちは、インフラの橋本です。

2022/10/25にリリースされたOasysのバリデーターをはじめました。

はじめた目的と構築したものについて紹介します。

目的

グリー・BLRDではブロックチェーンゲーム開発を推進しています。Web3向けのゲームを作るにあたって、ブロックチェーンのコミュニティへの参加を加速しています。今回、Oasysというブロックチェーンのバリデーターをはじめました。Oasysはゲーム専用のブロックチェーンで、10/25にメインネットが出たばかりです。

バリデーターというのはブロックチェーンでの取引(トランザクション)の検証をして、ブロックチェーンのブロックを作るサーバーのことです。バリデーターはPoSのブロックチェーンでは掛け金(ステーク)に応じたブロックの検証および作成の機会が与えられます。検証と作成の対価としてブロックチェーンのトークンが得られます。

単に対価を入手するためではなく、ブロックチェーンゲーム開発において、バリデーターのサーバーはゲームの取引のAPI・RPCサーバーに類するものになるため、サーバーの運用ノウハウは重要です。そのためOasysの初期バリデーターとして参加しています。

ブロックチェーンの事業は、はじめたばかりですので、至らない点がございましたら、ご容赦願います。

デリゲーター(サーバーを持たずステークのみをするユーザー)を募集していますので、よろしければステークお願いします。

以降ではバリデーターの構築について説明します。

バリデーターの構築

前置きと構成

バリデーターの構築にあたって注意したいのは、動作環境、セキュリティ、障害対応です。次のものをそれぞれ採用しました。

  • 動作環境:AWSのEC2
    • コンテナでの運用が難しくオンプレで動作させることが前提のブロックチェーン(Solana)があるようなので、AWSのEC2で動かすことにしました。
    • オンプレで動作させる可能性があるためansibleで構成管理をしています。
    • チェーンによってはバリデーターが異なるIPで同じ鍵を使うと問題が起こるらしいのでサーバーにはEIP(global ip)を割り当てています。
  • セキュリティ:鍵の管理はAWSのKMSとハードウェアウォレット
    • バリデーターはブロックチェーンのブロックの電子署名をします。その署名用の鍵をサーバーのファイルに直接置く必要があります。障害対応のために鍵のバックアップが必要ですが、平文で置くことはできません。今回AWSのKMSで暗号化してファイルに保存することにしました。
    • ブロックの署名とは別に、掛け金(ステーク)や報酬管理用のウォレット(秘密鍵に対応する公開鍵をつかった口座番号のようなもの)も必要で、ハードウェアウォレットを採用しました。ハードウェアウォレットは秘密鍵をデバイスの外に一切取り出さずに、電子署名をする機能だけを備えているデバイスです。使用の際に毎回人が直接操作する必要があるのが難点です。
  • 障害対応:チェーンの情報の差分バックアップ(s3 sync)
    • ハードウェアの故障の場合にサーバーを迅速に復旧するにはバックアップが必要です。バックアップなしに復旧するのにチェーンによっては一週間以上かかります。
    • バックアップにはバリデーターのサーバーを一時停止する必要があります。停止時間はできるだけ短いほうが望ましいです。データは数TBに及ぶ可能性があり、毎回フルバックアップをとるのは困難です。差分バックアップができるものとしてEBSスナップショットとs3-syncコマンドがあります。それぞれのバックアップの時間を計測してs3-syncコマンドのほうが時間が短かったので、s3-syncコマンドでのバックアップを採用しました。

上記のものを踏まえて実際の構成は以下の図のようになっています。

構築手順

次の手順で構築しました。サーバーの構築手順はこちらを参考にしました。

  1. Owner Account(掛け金(ステーク)を扱う重要なアカウント)の作成
    1. ledger(ハードウェアウォレットのデバイス)のセットアップ
    2. metamaskのセットアップ
    3. oasysの設定をmetamaskに追加する。
      1. こちらのチェーンの情報を入力してセットアップします。
  2. サーバーの構築とOperator Account(チェーンの検証につかうアカウント)の作成
    1. こちらのサーバーの構築手順を実行するとサーバーだけでなくOperator Accountも作成できます。
    2. サーバーの構築で重要なのはバリデーターのプロセスをminingモードで動かすことです。gethプロセスに--mineがついていることを確認しましょう。
  3. Operator Accountをバリデーターとして登録
    1. Oasysの専用のWebページから登録ができます。(載せていいのかわからないので、リンクは貼りません。)
      1. コマンドから実行する場合はこちらの手順が使えますが、ledgerから接続できませんので注意してください。
  4. 稼働状況の確認
    1. 専用のgraphqlのAPI(あえてリンクは貼りません。)から1エポック==1日のバリデーターの稼働状況がとれます。
    2. また、https://explorer.oasys.games/からOperator Accountを検索すると検証したブロックのリストが確認できます。

まとめ

  • Oasysのバリデーターをはじめました。デリゲーターを募集しています。
  • バリデーターの動作環境、セキュリティ、障害対応の要求から、AWS/EC2で構築し、ハードウェアウォレットで鍵を管理し、S3に差分バックアップをとっています。
  • Oasysはサポートがよく、迅速に問題を解決してくれました。Oasysのretoさんありがとうございました。