takeda_san’s blog

JavaFXと機械学習を頑張る方向。

自分コインで採掘ごっこをしよう

やりたいこと

暗号通貨の採掘をしたい!!!
でも、今更採掘しても報酬が少ないらしい。
ゴールドラッシュを体験したい!!!
よし、自分でコインを作って、ザックザック掘ってやるぞ。

f:id:takeda_san:20180102224957p:plain

コードはここ。
github.com

あそびかた

注意事項

  • 採掘して得たコインは使い道がありません(!)
  • 採掘中はハッシュ探索の処理をしているのでCPUに負荷がかかります(!!)
  • アカウント管理をしていないのでリフレッシュすると残高がなくなります(!!!)
  • ほぼテストしてないので、バグがあるかもしれないです(!!!!)

遊び方(シングルプレイ)

Java 8以上で動かしてください。

  1. Jarファイルを落としてくる
    ↓からtsuramichain-0.0.1-SNAPSHOT.jarをダウンロードする。
    Release 0.0.1 · takedasan/tsuramichain · GitHub

  2. 起動する
    tsuramichain-0.0.1-SNAPSHOT.jarがおいてあるディレクトリまで移動して、↓のコマンドを実行する。
    java -jar tsuramichain-0.0.1-SNAPSHOT.jar

  3. Webページを開く
    http://localhost:HOGE/で開きます。
    HOGE→ログの中にポートがあるので、それを入れる。
    2018-01-02 22:47:02.186 INFO 7496 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 51095 (http)
    ↑こんなの、このログ場合はhttp://localhost:51095/で開く。

  4. 採掘開始!
    赤枠のスイッチをonにすると採掘開始で、コインがザックザックです。
    f:id:takeda_san:20180102225538p:plain

遊び方(マルチプレイ)

(本来、こっちがブロックチェーン的には正しい遊び方よね)

  1. サービスを複数起動する
    シングルプレイと同じようにJarから起動する。
    マルチプレイなので2つ以上やっておく。
    (ポートはランダムで振られるので多分衝突しないはず…)

  2. Webページをそれぞれひらいて、ノードを登録する
    一方のページでもう一方のサービスのホスト:ポートを入れて、Registボタンを押す。
    f:id:takeda_san:20180102230012p:plain もう一方のほうも同じくノードを登録しておく。

  3. 採掘開始!
    スイッチonで採掘開始。
    掘りまくってライバルに差を付けろ。

使ったもの

今回、この記事を参考にKotlinで作っています。
個人的には、実際に作るって本を読むよりもはるかに勉強になるので、こういうシンプルで、わかりやすいプログラム例があるのはほんとありがたい。
https://hackernoon.com/learn-blockchains-by-building-one-117428612f46

ワタクシ英語が苦手なので実際はこちらの翻訳版記事を読んでおりました。
ありがたや。
動作の中身はここを見たほうが早いと思うので割愛…

qiita.com

  • Spring Boot/Spring MVC/Vue.js
    だんだん、使い慣れてきて実家のような安心感。
    REST APIでクライアントとやりとりします。
    あと参考にしたプログラムに加えて、使いやすいようにWeb上で使えるGUIを付けました。

  • Kotlin
    今回、Kotlinのお勉強も兼ねております。
    まずは、Javaっぽく書いて→Kotlinっぽく書き直せるところは直すって感じでやっておりました。
    初めからガチガチにKotlinっぽいコードとは何か!!とやってると、いつまでたっても機能ができあがらんのでこっちのほうが性にあってます。

苦労したところ

KotlinでSpring MVCのコードを書いていてハマったのが、これ。
qiita.com

同じところでまる一日悩んでいました。
あとは、おもったよりスイスイ書けて、動いてしまってびっくり。