【django,vuejs】スーパーノード報酬の仕組み応用した、小規模な報酬システムを作る

はじめに

https://www.masternodebank.com/ という、仮想通貨をレンディングして共同でPoSのノードを立てて報酬をもらうサービスを提供しています。
売買予定のないXEM, 他社にレンディングしているけど全然貸し付けてもらえないXEMなどありましたら、最大年利2% でお預かり致します (露骨な宣伝)。

また、このサイトのロゴのコンペを絶賛開催中です。(2017年12月25日迄)
優勝賞金 1500xem の他に、参加賞 10xem もありますので、奮ってご応募頂ければと思います。

prtimes.jp

作るもの

今回は、NEM のノード報酬である スーパーノード報酬の仕組みを応用して、小規模な報酬システム( マイクロ報酬 )を作ります。
対象は NEM を利用したWEBサービス(アプリ含む) です。 

作るもの: PicoReward

使い方

1. メッセージ送信

宛先アドレス: ncns5e-oyh2vx-7dnzyf-kcwaq4-dpoxvv-t3r26h-kjnw
メッセージ: enroll ドメイン

で送信します(実例

2.サービス管理者であることの表示

対象ドメインの/meta.json に ドメインと送信アドレスを記載して送信者が管理しているサービスであることを明記します。

{ 
    "meta": 
        {
            "domain": "www.masternodebank.com",
            "twitter": "@masternodebank"
        },
    "currency":
        { 
            "nem": "NCVKXMEI4UAN3UYXU5EBYKAXR3TB2T3JALMUNH6T"
        }
}

実例

3. サービスの監視と報酬付与

定期的にチェックが行われ、チェックにパスすると報酬がもらえます。

ちなみに、現状1までしかできてません。
2018年1月から稼働予定ですが、サービスをご登録頂ければ幸いです。

なぜ作るのか

このツールを作るモチベーションはこんな感じです。

  • NEMを使ったツール・アプリ・店舗がまだまだ少なく、トランザクション数も微々たるものなので活性化させたい
  • 作った人に一時的に報酬が入ることがあるが、継続するためのプラスのインセンティブが少ない
  • 一定の品質以下(セキュリティ対策されてないとか、レスポンスが激重とか)のものを無くしたい
  • 沢山の人に寄付するのは面倒なため、寄付を受ける人が偏ってしまいがち

スーパーノード報酬の仕組み

そもそもスーパーノード報酬とは何なのか、説明したほうが良いかもしれません。
スーパーノード報酬とは、安定して提供しているNEMのノードに対して、NEM 財団のプールからノードに対して支払われる報酬です。
ハーベスティングとは別に、多くても1日1回支払われます。

スーパーノード報酬は次のようなフローで構成されています。

  1. NEMノードを立てる
  2. NEM のメッセージを利用してスーパーノード報酬の申請をする
  3. スーパーノードとしての1日4回のテストに合格する
    • テスト内容は 残高, ブロック長, 応答速度, ネットワーク帯域,パッケージのバージョン
    • テストに1度でも失敗すると翌日の報酬は無し。
  4. 翌日にノード報酬が財源から送信される
    • 報酬総額は1日あたり全体で 140,000xem .
    • テストに合格したスーパーノードに平等にに支払われる.
  5. 3 から繰り返し
  6. もしSNを辞める時は, NEM のメッセージを利用して辞める旨を申請をする
  7. あるいは, 定期的にスーパーノードの棚卸しが行われる。

平たくいうと、ちゃんとサーバ管理やってたら、報酬あげるよ、ということですね。
こうしたスーパーノード報酬はノード運営者が適正なスペックのサーバで遅延のないネットワークを維持するための動機付けになっています。

マイクロ報酬の仕組み

マイクロ報酬のフローを考えてみます。

  1. サービスを作る
  2. NEM のメッセージを利用して,マイクロ報酬の申請をする.
  3. マイクロ報酬としてのテストに合格する.
    • 所有者と報酬先が一致しているか
    • 応答速度
    • セキュリティ対策
    • パッケージのバージョン
  4. 翌日にノード報酬が財源から送信される
  5. から繰り返し
  6. もしマイクロ報酬を辞める時は, NEM のメッセージを利用して辞める旨を申請をする
  7. あるいは, 定期的にスーパーノードの棚卸しが行われる。

作ってみて

  • 送金部分は秘密鍵を触るので、サーバ有りきで構築するほうがシンプル。
  • python の nem パッケージがない(古い)ので、作り直さねばならない。
  • ドメインの状態が変わるようなサービスなのでステートをもってくれたら、個別のDBを用意しなくて良い。
  • websocket を使って即時に登録確認したかったが、5分に一度の定期処理で済ませています。
  • js 力がたりなかった。
  • ソースコード公開はしばしお待ち下さい。。。