大事なのはロマン。
仮想通貨って素敵よね。ということで作ってみました。以下の本を参考にしました。
入門 仮想通貨の作り方 プログラミングで学ぶブロックチェーン技術・ハッシュ・P2Pのしくみ
- 作者: 松浦健一郎,司ゆき
- 出版社/メーカー: 秀和システム
- 発売日: 2018/12/18
- メディア: 単行本
- この商品を含むブログを見る
ブロックチェーン、暗号技術、p2p通信と一通り必要なことを初心者にもわかりやすくかみ砕いて述べた良著でした。実務レベルのプロにとっては恐らく物足りないんでしょうが。
仮想通貨の軸となるブロックチェーン技術に関しては今回実装を見送りました。明らかに初心者には難しすぎる。原理はなんとなく理解したけど無理無理。
ということで以下の三点の性質をもった通貨的存在を作ります。
1、コンピュータを用いてマイニングが可能
2、ユーザー間での送金が可能
3、流通量のコントロールが可能
1、コンピュータを用いてマイニングが可能
マイニングとはコンピュータの演算によりある問題の解決にたいして報酬として仮想通貨をを支払うことです。本当の仮想通貨ならばこの行為そのものが仮想通貨の存在を支えることになるのですが、今回はブロックチェーンを実装していないのでただ単に計算の報酬として通貨を与えます。
ただし、根本的考えはBitCoinよりヒントを得ます。暗号学的ハッシュ関数の一つであるSHA-256を利用します。まずランダムに生成した英単語を用意します。ここではそれをhogehogeとします。このときある正の整数nについて文字列str(n)+"hogehoge"が存在して、そのSHA256ハッシュの先頭m文字がすべて0となるはずです。(このmが後述する「難易度」)このようなnをキーとしてサーバーにリクエストを送ると1DEFを得ます。(DEFはDefinedCoinの最低単位)たとえばm=4のとき、文字列"35208hogehoge"のSHA256ハッシュは"000075e8701c2e51beb59ec322cfa8ee896b5734c6af39d0b6711dff0931f789"となるのでn=35208がキーです。
このnは容易に予測できません。ハッシュから元データの予測はほぼ不可能だし、nのわずかな変化もハッシュを大幅に変化させるからです。ゆえにn=1から小さい順に1つ1つ探索せざるを得ません。そこでそれなりの計算資源を要求します。
2、ユーザー間での送金が可能
これは大したことではありません。適当なjsonファイルを作って、利用者のユーザーネームと所持数を結びつけます。slackでこのjsonファイルを呼び出して編集することであたかも送金している感を出します。
これじゃあ暗号通貨を所有しているというよりjsonファイル上で数字が動いているだけだと思われるかもしれませんが、これは銀行口座も同じです。(暴論)違うのは引き出しが事実上不可能なことですが。100DEF=1ドクターペッパーとかで信用創造すればワンチャン。
3、流通量のコントロールが可能
ユーザーがもし増加して盛んにマイニングが行われた場合1で述べたmの値を増やすことでマイニングの難度を上げ、価値を一定に保ちます。具体的には発行済み通貨の数を記録したテキストファイルを作っておいてこの値をもとにmの値を決定します。
ただこれは通貨として成立していません。2で述べたjsonファイルが誰でも編集可能だからです。"someone":5000000000000000 とか書かれたら詰み。
まあルールを守ってくれる集団の中でネタとして使うぐらいなら十分使えます。麻雀の点数として使うもよし、感謝の気持ちとして使うもよし。
作るほうは案外楽しかった。