見出し画像

Lisk SDK を使ってブロックチェーンアプリを作りたい ~作った編~

というわけで
前回のこのシリーズの投稿から2ヶ月が経っていますが作りました。
というのが今回の内容です。

まず最初に

作ったアプリは以下

アプリ名:LQuiz (https://lquiz.ysdev.work/)
ソースコード:Github (https://github.com/lisknonanika/LQuiz)

何をするアプリかというと、問題を出してそれに答えるとLSKがもらえるという簡単なゲームです。

作業期間

投稿から2ヶ月経過していますが、実際の作業期間は8時間を1人日、20日を1人月とすると0.5人月程度でしょうか。
週末数時間ずつやってるくらいです。

構成

使用言語・ライブラリ

Node.js + Express + EJS + Nginx

Node.jsにあまり触れたことがない人でも触れるEJSを使ってブラウザに表示する部分を作ってます。

VPS

このはVPS 1GB (https://www.conoha.jp/vps/?btn_id=header_vps)

美雲このはちゃんをすこれ

プロジェクトの構成

client : WEBブラウザに表示するもの (js, css, htmlなど)
config : 設定いろいろ
http_api : ブラウザとサーバーの間で情報を受け渡ししたりしてるもの
transaction : LiskSDKのカスタムトランザクション
utility : ユーティリティ
index.js : このアプリの起動用ファイル

この中で実際にLiskSDKを使って作っているものはtransactionフォルダ内のファイルとindex.jsのみです。
ルールに従って書くだけなので非常に簡単ですね!

http_apiフォルダ内のファイルはブラウザの入力内容をサーバーへ、サーバーの値をブラウザへということをしている便利屋さんです。
「Lisk CoreのAPIを公開したくないけど非同期通信で情報を取得したい」などの場合に作ることになるかと思います。
ちなみにこのAPIは以下のようにブラウザからアクセス出来ます。
https://lquizapi.ysdev.work/api/open-question

LQuizができること・してること

Login画面

スクリーンショット 2020-02-24 17.15.31

Login:パスフレーズを入力してログインができます
Guest Login:パスフレーズの入力がなくてもログインができます
Create Account:アカウントの作成ができます

Liskメインで使用しているパスフレーズは使わず、Create Accountで新たに作って下さい。
万博おじは資産を盗む気はまったくありませんが(ほぼ確実に捕まるので)何があるかわからないのがインターネットです。
十分ご注意下さい。

OpenQuestion画面

スクリーンショット 2020-02-24 17.20.53

Send Answer:解答できます。
※解答可能な問題が一覧表示されます。自分の投稿した質問は表示しません。

トランザクションの署名をサーバー側で行っているため、パスフレーズと解答がサーバーへ飛びます。
なぜこのような作りなのかというと、経験者でなくてもこれくらいは作れるんだよというのを知ってほしいためシンプルな作りにしています。
本来であれば、署名を行うのはクライアント側で行うべきですが、Node.jsで書いたカスタムトランザクションをクライアント側で使用するようにするのにはひと手間かかります。
実際はEJSではなくReactなどを使って作って行くことになるかと思いますが、社内インフラとして限られた規模の中でのみ動くアプリであればこのような作りでも良いかもしれません。

CloseQuestion画面

OpenQuestionと同じ構成で解答が出来ない(報酬が払い終わった)問題が一覧表示されます。(同じ構成なので画像省略)

CreateQuestion画面

スクリーンショット 2020-02-24 17.29.55

Send Question:作成した問題を登録します。
※色んな入力チェックを行うのは既存のWEBシステムと同じです。

ブロックチェーンアプリについて、すごく難しく考える人がいますが、万博おじ的には(言い方は乱暴ですが)既存WEBシステムの代替品程度と思っています。ので、作りたいと思ったら既存の知識で出来ることをまずやってみてはいかがでしょうか?

信頼性等色々議論されていますし、そういった有識者の方には怒られてしまうかもしれませんが、「Why Blockchain ?」の万博おじの答えは「ブロックチェーンで出来るんだからブロックチェーンでやってもいいでしょ」です。
今、これは駄目、あれは駄目と縛ってしまえば発展はないと考えるのが理由です。とりあえず何でも作ってみればいい。作るのは識者であっても、使うのは識者とは限らないのだから。

その他

MyQuestion画面、MyAnswer画面などがあります。
アクセス方法は右上のアドレス表示されているところをクリック。

スクリーンショット 2020-02-24 17.37.11

これもOpenQuestion画面と同じ構成です。(なので画像省略)
自分の出した問題を見る画面と、自分が解答した問題を見る画面です。

LQuizの問題点

トランザクションの署名をサーバー側で行っている点
→限定的な環境でない限りはクライアント側で作成すべき

上記でも記載してますが、パスフレーズも飛ぶのでLiskで使用しているパスフレーズは使わないで下さいね

解答のハッシュ値がわかるのでノード管理者はハッシュ値を使用してトランザクションを作成することで、解答自体がわからなくても報酬が受け取れてしまう点
→なんらかの署名方法や判明時の罰則を検討する必要あり

いくらlocalhostでのみLisk Core の APIが使用できるようにしてもノード管理者には関係ありません。。
トランザクションには登録されないけど、署名したassetをサーバー側で検証できる仕組みがあればいいのだけど。

おわりに

というところで、今回のアプリについては以上です。
Lisk SDKにはカスタムトランザクション以外にもカスタムモジュールという考えがあります。
今回これは使用していませんが、他のPoCプロジェクトでは使用していたりするので興味があればLisk公式のAppsページをご覧下さい。

また、なぜ万博おじがこんなことをしているかというのを最後に書いておきます。
・Liskを広めたい

は建前で

・万博おじの趣味
・お金がほしいから
ブロックチェーンに触れておけば本職でブロックチェーン絡みの仕事が舞い込んだときに単価上げれそうでしょ?(笑)

以上、お疲れさまでした。
読んでいただきありがとうございました😁


万博おじについて

万博記念公園と新しいものが好きなプログラムやさん
以下で連絡が取れます。
Twitter:@ys_mdmg
github:lisknonanika
Discord:@mdmg

その他加入している非公式コミュニティ
Lisk Japan
・Lisk 情報システム部 (Twitter内グループ)
・Lisk ゲーム部 (Twitter内グループ)

寄付はnoteの機能または以下へ
Lisk:mdmg(5380827711560203827L)

この記事が気に入ったらサポートをしてみませんか?