【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 力がたりなかった。
  • ソースコード公開はしばしお待ち下さい。。。

mkdir・cd とまじめに向き合う

まとめ

  1. 深い階層にディレクトリを作成する alias mkdir="mkdir -p"
  2. 複数ディレクトリを1行で作成する: mkdir {a,b,c}
  3. 特定のパーミッションでディレクトリを作成する: mkdir -m 700 ~/.ssh
  4. さっき作ったディレクトリに移動する: cd !$
  5. さっきいたディレクトリに移動する: cd -

番外編

ひとつ前のコマンドを実行する: !?(いわゆる、特攻の拓コマンド)

【仮想通貨まとめ】NEM

仮想通貨 NEM の情報まとめです。随時更新していきます。

【mac】SSH鍵認証でサーバに接続する(初級編)

サーバにSSH鍵認証でアクセスする方法です。

秘密鍵は大事なものなので、決して第三者に漏らさないように厳重に管理してください。

SSH鍵生成準備

Finderを起動し、「アプリケーション」→「ユーティリティ」にアクセスし、「ターミナル」を起動します。

ターミナルを起動するとプロンプト($)が表示され、コマンド入力待ち状態になります。

以下のコマンド(mkdir -m 700 ~/.ssh)で、SSH鍵保存場所のディレクトリを作成します。

$ mkdir -m 700 ~/.ssh

ssh鍵を生成する

mac にて以下のコマンド( ssh-keygen -t rsa ) を実行します。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa):  ← 作成される場所。問題なければEnter。
Enter passphrase (empty for no passphrase):  ← パスフレーズの入力。省略する場合はそのままEnter。
Enter same passphrase again:  ← パスフレーズの再入力。省略した場合はそのままEnter。

秘密鍵 (id_rsa) と公開鍵 (id_rsa.pub)が~/.ssh/ディレクトリ以下に作成されました。

$ ls ~/.ssh/
id_rsa      id_rsa.pub

おまじないを掛けます。

$ chmod 600 ~/.ssh/id_rsa

このうち、公開鍵をサーバにコピペします。(秘密鍵はmac にて使います。詳細はあとで)

サーバに公開鍵を設置する準備

以下のコマンド (cat ~/.ssh/id_rsa.pub | pbcopy) で公開鍵がコピーされます。

$ cat ~/.ssh/id_rsa.pub | pbcopy

サーバにログインする

サーバにログインしてください。

サーバに公開鍵を設置する

サーバにログイン後、公開鍵を設置します。

( 公開鍵のディレクトリを作成します)
$ mkdir -m 700 ~/.ssh

( ~/.ssh/authorized_keys に公開鍵をペーストします)
$ vi ~/.ssh/authorized_keys
(公開鍵の内容をペーストする)

おまじない。

$ chmod 600 ~/.ssh/authorized_keys

mac からサーバにssh できることを確認します。

サーバのIPを 123.45.67.89、ログインユーザを server_user とします。(ご自身のIPに変更してください)

$ ssh 123.45.67.89 -l server_user -i ~/.ssh/id_rsa

無事にログインできればOKです。

簡単にログインできるようにする。

簡単にログインできるようにします。

~/.ssh/config に以下の内容を記載します。

$ vi ~/.ssh/config
host server-001
  hostname 123.45.67.89
  user server_user
  IdentityFile ~/.ssh/id_rsa

おまじない。

$ chmod 600 ~/.ssh/config

これで ssh server-001 でSSH鍵でログインできるようになります。

鍵ログイン成功後は、サーバ側でパスワードログインを無効化してください。

【参考サイト】

www.task-notes.com

webkaru.net

NEM beta 0.6.83 リリースノート和訳

本記事は NEM beta 0.6.83 のリリースノートの和訳・意訳です。

掲載に問題がある場合は速やかに取り下げますので、ご連絡ください。

また、訳に関する修正・誤りなどありましたらご指摘いただけると幸いです。

forum.nem.io

NEM 0.6.83 リリースノート

変更点

  • NIS のバグ修正
    • ネームスペースが期限切れの場合に保有しているネームスペース・モザイクがナノウォレットで正しく表示されないバグ

注意点

  • インストーラーを用いる際には、NCCとNISが停止していることを確認してから、インストールを開始してください。
  • NEM には Java8 が必要です。
  • 下記リンクにあるインストーラーを使ってNCCとNIS をダウンロードすることができます。

CoinCheck からログアウトする方法

ビットコイン取引所のCoinCheck ( コインチェック )からログアウトする方法を紹介します。

次のリンクをクリックすることでログアウトすることができます。

https://coincheck.com/ja/sessions/signout

ログアウトボタンが深い階層のところにあるため、見つけるのは結構困難でした。

ありがとうございます。

【ビットコインとか勉強会】で発表してきました

ビットコインとか勉強会#4 - connpass にて登壇の機会をいただきましたので、色んな暗号通貨を送信すると言う内容で発表してきました。

参加者の方にどんな暗号通貨を持ってるかきいてみたところ

ビットコイン: 80% NEM : 50% Zcash : 5%

くらい割合でした。(複数解答可)

NEM が想像より多かったですし、Zcash が思った以上に少なかったですね。

NEMに関する発表は結構珍しいこともあり、質疑応答はNEMのことが多かった印象です。 幾つか抜粋すると以下のような感じ。

  • スーパーノード報酬ってなんですか
  • PoI で悪意のあるノードを排除できる理屈はなにか
  • 委任ハーベスティングは自身でハーベスティングしてないのに報酬がもらえるのはなぜか
  • 各コミュニティの盛り上がり具合はどんなかんじか(参加人数やコミュニケーション密度)
  • ビットコインの半減期と価格

コアな質問ばかりで、勉強不足がモロバレでした笑

当日の会場の様子。mixi さん、会場提供ありがとうございました!

近いうちに、(zcash含めて) リベンジの発表をしたいです。

では!