serverless フレームワークを使って Cosmos のステーキングバランス変動をチェックしてみる

flada
flada
Aug 2 · 8 min read

HashHub に 7 月からエンジニアとしてジョインしています flada です。

HashHub では Sanka Network としてバリデータノードの運用とステーキングを事業として展開しています。取り扱っているブロックチェーンは現在のところ 3 種類(Cosmos, Tezos, IOST)で、すべてユーザ自身の資産自体を送金することなくデリゲートしてステーキングできるタイプの、いわゆる DPoS と呼ばれるものになります。

そのうちの Cosmos について、各バリデータ候補のステーキングバランス変動を定期的にまとめて通知するするプログラムを serverless フレームワークを利用して動作させてみました。

それほど難しい話はしませんが、ブロックチェーンやステーキング、あるいはプログラミング言語(Ruby を使います)と AWS について、簡単な知識を前提とします。

また、ここに出てくるプログラムはサンプルとして実装したものであり、そのまま本番利用されているものではありません。

https://serverless.com/

なぜ必要なのか

まず、どのようなものを作ったのかの前に背景から説明します。Cosmos ではバリデータノードを動作させているバリデータ候補のうちステーキングバランスが 100 位までのバリデータ候補が、実際のバリデータとして選出され報酬が発生するという決まりになっています。101 位以降のバリデータ候補には報酬が発生しない、つまりそのバリデータ候補にデリゲートした ATOM ホルダーにも報酬の分配が発生しないため、この順位を意識することは ATOM ホルダーがデリゲート先を選ぶにあたり重要であると考えられます。

そこで、各バリデータの順位やステーキングバランスの変動を可視化してみようという訳です。

serverless を使ってやってみた

やりたいことをまとめると「ある時点の各バリデータ候補のステーキングバランスと順位を記録しその変動を通知する」です。

実現の方法はそれこそ色々と考えられる訳ですが、今回はできる限り自分で管理するコンポーネントを増やさずにサクッと動かすというのを重視して serverless フレームワークを使ってみました。

serverless フレームワークは AWS や GCP などのクラウドサービスを透過的に扱えて、とにかくサーバーの存在を考えなくてよいという意味でのサーバーレスを実現するフレームワークです。AWS lambda などのコードを書けば動作環境はクラウドサービスがなんとかしてくれる Function as a Service と呼ばれるものをいい感じに使えるようにしてくれます。ちょっとしたスニペットのようなコードを動かしたいときにわざわざ web サーバや DB の動作環境を管理しなければならないといった煩わしさから解放してくれるものです。特にスケジュール実行で cron つかうために環境どこかに用意する、の…?みたいな気持ちになったら検討すべきかもしれません。

以下が serverless フレームワークで雛形のプロジェクト作成に必要な手順です。

sls create で作成されたファイルは handler.rb と serverless.yml という二つのファイルだけですが、すでにレスポンスを返せています。

serverless.yml に AWS のサービスに関するセットアップを記述し、実際の処理は handler.rb が AWS lambda 上で実行されることで行われるという流れになっていることが分かると思います。

serverless の導入について簡単に紹介しましたが、実際のコードは こちら です。全部は追いきれないので、ここではいくつかポイントを要約するだけにします。

bundler の使い方

bundler は普通にそのまま使えてしまいます。bundle init などで Gemfile を用意し、bundle install --path vendor/bundle でインストールしておけばよいです。ただし native extension を使っていて C のコンパイル環境が必要な gem については AWS lambda 側に同様の環境をセットアップする必要があると思います。また、初回のインストール以降は bundle instal --deployment を実行するべきです。

テストしやすい構成にする

serverless の aws-ruby template に限った話でもないですが、serverless フレームワークの定義するインタフェースを満たす形の handler.rb のメソッドに直接ロジックを書いてはテストしづらくなってしまいます。別に適切な粒度のクラスを用意してロジックはそこに集め、handler.rb はそのメソッドを叩くだけにするとローカルでも部分的に実行したりテストが書きやすくなったりするはずです。

簡単にするために

RDS や DynamoDB などの AWS サービスとしての DB を利用しても良かったのですが、それでは簡単に試そうという当初の目論見にそぐわないので今回は記録先に S3 だけを利用しています。”実行時間をキーに実行記録を json 形式で持っているオブジェクト” と、”last_updated_at というキーの前回実行時間を unixtime で記録するオブジェクト” の二種類のオブジェクトを用意すれば、前回の記録を参照するのにまず last_updated_at オブジェクトを取得してそこに記録された unixtime をキーに前回記録のオブジェクトを取得できるという算段です。

S3 などの別の AWS のサービスを利用するには

serverless.yml に IAM ロールを記述することができるので、そこで S3 への get/put を許す記述をしました。S3 以外のサービスを利用したい時も https://github.com/serverless/examples/ に大量のサンプルがあるので何かしら見つけられると思います。

実行結果

Slack 通知まで出来てはいるのですが現状はこの json をそのまま通知しており全く見栄えが良くないのでこの json ファイルをお見せします。本当は 200 弱のバリデータ候補が存在しているのでもう少しデータも大きいのですが上位の方だけ抜粋したものです。

どのバリデータがどれだけの額の ATOM をステーキングしていて何位にいるのか、またそれが前回の記録からどれだけ変動したかをデータとして持っていることが分かるでしょうか。

まとめ

このままではあまりに見辛いので、このデータを元に見せ方を整える HTML を S3 でホスティングするとか、通知のテキストとしていい感じにするとかまでやりたいと思っています。

serverless フレームワークはちょっとしたスニペットのようなコードを動かしたいときにわざわざ web サーバや DB の動作環境を管理しなければならないといった煩わしさから解放してくれるものだと書きましたが、実際に動かしてみると今回程度のタスクであれば非常に便利だなと思いました。皆さんも試してみてはいかがでしょうか。

お知らせ

■ステーキング事業の提供を始めました!
7月からHashHubでは、Cosmos,Tezos,IOSTの3つのトークンをステーキング出来るサービス「Sanka Network」を提供し始めました。本サービスのご利用をご検討の方は、下記のWEBサイトからお問い合わせください。

Sanke Network:https://www.sanka.network/

■HashHubでは下記のポジションを積極採用中です!
・コミュニティマネージャー
・ブロックチェーン技術者・開発者
・ビジネスディベロップメント
詳細は下記Wantedlyのページをご覧ください。

Wantedly:https://www.wantedly.com/companies/hashhub/projects

■HashHubでは入居者募集中です!
HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。

HashHub:https://hashhub.tokyo/
Twitter:https://twitter.com/HashHub_Tokyo

Blockchain Engineer Blog

This Blog is for all Blockchain Engineer

flada

Written by

flada

Blockchain Engineer Blog

This Blog is for all Blockchain Engineer

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade