がっちゃんのぶろぐ

仮想通貨について調べた。マイニングとは?なんで価格変動するの?

この記事はITC Advent Calendar(1) 8日目の記事です

その一
https://adventar.org/calendars/2563

その二
https://adventar.org/calendars/2640

 

初めまして、がっちゃんです。
本年度のITCの部長やってます。

今回は最近ハマってる仮想通貨について書きます。
ブロックチェーンとか、マイニングとか、なんで価値が上下するのかとか書きます。

 

そもそも仮想通貨とは?

Bitcoinに代表される、 ブロックチェーン技術を使った決済システム のこと。
そのシステムの上で扱われる通貨の単位もBTC(ビットコイン)と呼ばれるため、混同されることが多いのですが、(Bitcoinにおいては)実は技術的には決済システムが存在するだけなのです。

 

記事の中では、システムや総称を Bitcoin システム内の仮想通貨の単位を BTC と表記します。

 

ブロックチェーンとは?

決済記録を(DB)をみんなで鎖型に繋いで管理しましょうっていう考え方です。

 

みんなが決済記録を持っていて、みんなの取引を見れるようにしておくことで、
不正を行った場合、多数決の要領で「この取引は不正だ!」と見抜くことができるようになっています。

 

f:id:ahaha0807-alg:20171208012344j:plain

↓ 不正な取引記録がある台帳を連結しようとすると…

f:id:ahaha0807-alg:20171208012346j:plain

↓ 不正であることがすぐにわかるため、チェーンから除外することができる

f:id:ahaha0807-alg:20171208012348j:plain

 

このような形のシステムのため、 送金(の反映)にある程度の時間がかかってしまう のです。

 

伝言ゲームのように送金情報が伝搬し、それが不正ではないかを確認します(合意を取る)。

f:id:ahaha0807-alg:20171208013433j:plain

 

ブロックとは

ブロックチェーンとはその名の通り、鎖のように繋げて管理すると先に書きましたが、
チェインするもの、ブロックとは何なのかを書いていきます。

まず、ブロックとは以下の3つをまとめた概念で、 マイニングによって生成 されます

 

- 前のブロックのハッシュ値
- 取引の情報
- Nonce(ノンス)

 

ブロックの中に前のブロックのハッシュ値が入っていることから、ブロックチェーンしている状態と扱われるようになりました。

f:id:ahaha0807-alg:20171208012848p:plain

引用: http://www.nttdata.com/jp/ja/services/sp/blockchain/mechanism/ 

 

ブロックの中の取引の情報

取引の情報はブロックに挿入してブロックチェーンのネットワークに上げないと、取引が成立したと言えず、また、そのブロック自体は平均10分に一度しか作成(発掘)されないために送金処理に時間がかかってしまうのです。

 

Nonce(ノンス)

後述のマイニングで変動させる数値で、変動させた結果。マイニングの項で解説を行います。

 

前のブロックのハッシュ値

ハッシュ値はブロックの中にある3つの情報をまとめてハッシュ関数にかけて求めます。
このため、 もしも前の取引の情報の一つが改ざんされていた場合、全く違うハッシュ値が出てくるため次のブロックが本来のハッシュ値と違う!と気づく ことができます。

ブロックチェーンではこの機構を分散型で行うことによって、信頼性が担保され、通貨として担保できるという仕組みです。

 

マイニングとは?

先に記述した、ブロックを作ることです。

しかし、ただデータをひとまとめにしてハッシュ値を求めてブロックを作るだけでは誰でもすぐにできてしまうので、ルールが決められています。

Bitcoinをはじめとした仮想通貨ではそのルールによって 難易度調整 が行われます。

 

最も汎用的なルール

出力されるハッシュ値の最初のn文字分が0であること

これが最もよく使われるルールで、それ以外のハッシュ値が出るブロックはブロックチェーンのブロックとして認められません。

 

 

どうやってルール通りのハッシュ値を出す?

先の文章の Nonce(ノンス) を使用します。

ブロックチェーンのブロックの仕組みとして、

 

- 前のブロックのハッシュ値
- 取引情報

 

は与えられたものを使うしかありません。(改変したりしたらブロックチェーンの原則が崩壊する)

 

その為、ブロックの中にある、唯一の可変な値 Nonce(ノンス) を調整(という名の総当り)して、出力されるハッシュ値をルールに則る形に調整します。

 

この、狙い通りのハッシュ値が出るまでNonce(ノンス)をガチャる行為を マイニング と呼びます。

 

基本的にノンスガチャには莫大なCPU・GPUリソースがかかる(毎回ハッシュ化の計算をする)ため、ルールに則ったブロックを見つけた人には、報酬が支払われます(一定量のBTCの権利をもらえる)

(めちゃめちゃ運が良ければ、数回の計算でブロックを発掘できて12.5BTC(1600万円)が転がり込むことも?※ほぼ不可能です)

 

 

なんで価格が上下するの?

これに関しては現実世界の需要と供給による値動きと理由は一緒で、
金の価値が上下したり、株価が上下したり、日本円が上下するのと一緒です。

要するに、 需要が高まれば(沢山の人がほしいと思って買えば)値が上がるし、供給のほうが多くなれば(ほしいと思う人が減って売りが進めば)値が下がる のです。

 

Bitcoinにおいては、

 

BTCはマイニングでしか手に入らない

= 電気とCPU/GPUリソースを消費してBTCを得る形(ソロマイニングの場合は等価交換にはなりにくい)

 

です。

 

そのため、ブロックが発掘されるたびにBTCが市場に増えていきます。

しかしながら、マイニングの難易度調整機能によってブロック生成の時間が調整され、一気に市場に出回らないようにしているので、Bitcoin側のインフレにはなりにくいと言われています。

 

代わりに、ここ最近(2017/12/08)では、需要が恐ろしく高まってマイニングで生まれる報酬ビットコインの量の増加よりもほしいと思う人・額の増加が高まっていることによってビットコインの価格が急上昇しているということです。(もちろん、多分に個人的見解が含まれています。)


まとめ

いかがだったでしょうか?
自分も勉強不足でこの記事を書くにあたって勘違いに気づいたりしたのですが、この技術おもしろいです。

 

そして、技術的に面白いし実用性が見いだせることによって、沢山の人が興味を持っていて、それによって価値が上がり、その波に乗って利益を得たりもできるのです。

 

まだまだ自分も勉強不足ですが、めっちゃ面白い領域なので、これからも調べていこうと思います。

直近ではこのホワイトペーパー読むところから始めようかな。

- http://kogarashi.net/pitchblende/wp-content/uploads/2014/03/BitcoinWhitepaperJapanese.pdf

 

では、長々と書きましたが、読んでいただきありがとうございました!

もし、間違いや何か疑問に思うことがありましたらご連絡くださいませ…!

まだまだ自分も勉強中のため、勘違いしているところがあるかもしれませんので、よろしくお願いします! 

 

ここから仮想通貨を一緒にはじめましょう!

 

bitFlyer ビットコインを始めるなら安心・安全な取引所で

 

bitFlyerは(手数料が比較的が高いですが)免許証とかなしで学生証とかでも登録できて、新規参入しやすいです!

 

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin


coincheckはBitcoin以外の銘柄が色々おいていたり、比較的手数料が安いです!

 

このURLから飛んでもらえるとアフェリエイトが入ったりするので…始めるならぜひここからはいってくれると…嬉しいなぁ…(/ω・\)チラッ

 

そして、ためになったのであれば…

投げ銭とかお願いします☆(めっちゃモナ推しです☆)

BTC: 3MdLmRkXorA1yHqecJy2HToHyVLLE5PJjy

BCH: 3MdLmRkXorA1yHqecJy2HToHyVLLE5PJjy

MONA: MSdhAey4fUEoZEAvfnQBkCaPHHLttkx4Gk

 

モナゲリンク:

 

と使い方 => http://dhpkww12.hatenablog.com/entry/2017/06/14/123425

Minecraftおもろい

この記事はITC Advent Calendar(2) 2日目の記事です

その一
https://adventar.org/calendars/2563

 

その二

https://adventar.org/calendars/2640

 

初めまして、がっちゃんです。
本年度のITCの部長やってます。

 

第二までできてしまってるのに途中で途切れるのも面白くないので技術全く関係ない記事ですが書きます。

 

皆さんはMinecraftを知ってますか?
割と有名なゲームなので、きっと皆さん知ってると思いますが、私は体の半分が優しさでできているので知らない人のためにURLだけは貼っておきますね。

 

https://minecraft.net/ja-jp/?ref=m

 

ちなみに、PC版のMinecraftJavaで出来てます。
そして、PE(モバイル)版はC++で書かれてたらしいです(今は知らん)

https://twitter.com/jeb_/status/122350670648066049


あとは、Windows10版とかVRで遊べるバージョンとかRasPiで遊べるバージョンもあります。

MS傘下に入ってから色々出て来たイメージありますね。

 

楽しい

そして、ここからが言いたかったことなんですが、MinecraftにはMOD(Modification: 改変、変更)と呼ばれる、改造データを組み込む機構がありまして、それを突っ込んで遊ぶのもまた楽しいんですよ。

 

https://www.pcgamesn.com/minecraft/twenty-best-minecraft-mods

 

銃火器を追加するものや、ダンジョンを追加するもの、新しい鉱石や敵を追加するものなどなど、、、色々あるので、やりたくなった人は探してみるといいです。

 

また、Minecraftのmodの面白いところは、modをつくる環境が長年かけて整備されているところです。
Minecraft Forge( https://files.minecraftforge.net/ )さえ入れておけば、modを入れるのに苦労しない。と言えるほどのものです。

 

これは俗に言う前提modと言うものなのですが、前提modを入れておけばいろんな種類のmodを入れていても、コンフリクトとかを起きないように忖度してくれます。

 

また、これを使ってmod開発をすれば、本体との連携周りとかややこしいところをラップしてくれてるみたいです。

あ。開発言語は基本的にJavaです。悪しからず。
(でもJVM言語なんやし、KotlinとかScalaで書いたりできひんのかな…

 

あと、コーディングスタイル的には スペース2つのインデント 派らしいので、お気をつけください。

https://mcforge.readthedocs.io/en/latest/styleguide/#formatting

 

自分もそのうちテレポートできるmodとか作って遊ぼうと思ってるので、一緒に作ってくれるプログラマ友達探してます。
よろしくお願いします。

 

本題


で、別に開発関係の話をしたかったわけではなく、2年ぐらい前にめっちゃハマってたmodが知らない間に最新バージョンに対応するようになってて、
それを入れて遊んだのがめっちゃ楽しかったので紹介したかっただけです。

 

自分が大好きなmodは

- Industrial Craft2 (IC2)

- Build Craft(BC)

 

と言う、俗に言う電気・工業系modです。
めちゃ楽しいです。

Inderstrial Craft2とは

電気modと言われるmodで、Minecraftに電気の概念を持ち込むmodです。
これ使って効率のいい環境作るのめっちゃ楽しいです。

https://www.industrial-craft.net/

 

電気で動く道具や機械を用意し、Minecraftの生活を効率よく快適にするのも楽しいですし、炭やマグマを燃やす火力発電から、水力、太陽光、風力発電に発展し、もっと発展すると原子力発電をすることもできます。

楽しい。


Build Craftとは

工業modと言われるmodで、自動建築や自動採掘、アイテム移動用のパイプなどなどが追加されて、工場を作ることができます。
楽しい。

http://www.9minecraft.net/buildcraft-mod/

 

自動で採掘して、それをパイプで移動させて、IC2の機械にぶっこんでたくさんのアイテムを作り出す。
それを使ってさらに快適な生活を手に入れる。
たのしぃぃぃぃぃ!!

ので、是非とも一緒にMinecraftしましょう。

 

できれば、modを入れて一緒に遊んでくれる人募集してるので遊びましょう。よろしくお願いします。

技術的な知見とか発見とかは一切ありませんが、最後まで読んでくださってありがとうございました。
もしかしたらまたこんな記事書くかもです。

あと Twitter フォローお願いします❤️ => https://twitter.com/ahaha0807_alg

KanJavaParty に参加してきました!(初投稿)

ご挨拶

初めまして、がっちゃん(Twitter: @ahaha0807_alg)です!

初投稿は今日(2017/06/24)、参加した KanJavaPartyに参加した記録を書こうと思います!

これまでQiitaだったり、Twitterだったり、GitHubだったり、FaceBookだったりをやってきているので、まだこのはてブロの使い道に関しては定まってないのですが、とりあえず勉強会の参加記録とかに使おうかなぁとかは考えております!

ちなみに、なんで突然使おうかと思ったのかと言いますと、このイベントではてなさんのエンジニアの方の発表を聞いたり、懇親会中のエンジニアの方とのお話の中でインターンの話題があって、思い出したからであったります←

参加したセッションの感想とかとか!

※朝思いっきり寝坊してお昼からの参加だったので、午前中のセッションは1つも見れてないです…←

1つめ : 「Introduction to JShell: Official REPL Tool for Java Platform」

Java9で追加される待望のJavaのREPLツール「JShell」のお話でした!

備忘録

  • JShellではfinal・publicが無視される!(そもそもJShellの使い道とは異なってるから)
  • 宣言したメソッドとかを更新しながら試行錯誤するためのツール!
  • Java9からは _ (アンダースコア)1文字では変数名・関数名とかの識別子には使えない!
  • JShell は最新の Java の構文をサポートする
  • コマンドが使えて、/list -all を使うと、これまでに書いてきたコード全体が見れる!
  • デフォルトのプリセットが有り、 PRINTINGを使えば System.out.println が println だけで使えるようになる!
  • JShell のタブ補完めっちゃ優秀。ドキュメントとかも見れる!
  • /debug on を使うと中でどう実行されてるのかも表示できる
  • 前方参照っていうやつがあるらしい。メソッドとかを先に宣言しておいて、あとから処理部分を書くことで使えるようにする機能!(いまいちわかってない)
  • Java勉強会開くときとかに使いたいから早くJava9来い来い

「Microservicesアーキテクチャに取り組んでみえたこと」

マイクロサービスでやるときに使った手法や注意点などについてのお話でした!


備忘録

  • モノシリック(一枚岩)なシステムだと影響調査が辛い
  • DDDは最初っから完璧を目指さない!コアドメインに着目する!
  • 認識がずれると困るところはきちんとユビキタス言語として定義しておく!
  • ムービングモチベーターズのワークショップでモチベーションを可視化するの良さげ
  • ブランチの運用はチームにお任せする方があれこれ言うよりも良さそう
  • Conwayの法則。設計はチームに似る!設計が変われば合うチームも変わるし、チームが変われば合う設計も異なる
  • 下記のコメントすっごいなるほどって思った

 

  • マイクロサービスではリアクティブ宣言が重要(らしいので今度ちゃんと調べる)
  • akkaはいいぞ
  • LambdaはJVM言語で書くとウェイクアップに時間がかかるので、継続的に使われるところでやるように!それかどーーーしても必要ならCloudWatchでcron使って叩き起こす

公開されたスライド!

https://speakerdeck.com/yoshiyoshifujii/microservices-architectureniqu-rizu-ndemietakoto

「関西Java女子部ショートセッション大会」

きの子さんからの関西Java女子部の紹介

  • JavaのWebアプリケーション入門とかやってるらしくて行きたくなった…w
  • 是非男性も周りの女性に関西Java女子部のこと教えてあげてください!

非エンジニアの人に向けて勉強会を開いた話

  • 非エンジニアでも知りたがってる人も結構いる!
  • ターゲットを絞って勉強会をしたほうが難しくない

リファクタリングの話

  • 人生のリファクタリング(名言)
  • エビ(ネスト深すぎ)
  • 君の名は(変数名わけわからん)
  • マトリョーシカ(ごめんなさい覚えてないです…)
  • 詰め放題セール(1メソッドに5000行はアカン)
  • 名家の家系図(あなたの親(クラス)誰…)
  • 覚えられない呪文(長過ぎるメソッド名)

speakerdeck.com

 

ハンズオンの話(こっちの印象がすごい強い)

  • 長めのハンズオンだと完成させることを目標に、資料とかを準備して持って帰ってまた触ってもらえるように!
  • 短めのハンズオンだと体験版にするのを目標に、ツールとかを使って詰まりどころを減らす形に!

はてなブックマークAndroidアプリへのKotlinの導入について』

Javaで出来たAndroidアプリをどうKotlinに載せ替えるか?とKotlinがどんなものなのかってお話でした!

  • KotlinはSwiftライクな記法
  • JavaをKotlinの文法に一気に変換できる
  • でもKotlinの文法になるだけでモダンな書き方になるわけではない
  • Kotlinの後ろに型を書く書き方、初期化の時に違和感感じる…w
  • data class 使うといろいろ便利なメソッドデフォで用意されるよ!便利!

 

各セッションの参加記録はこんな感じです!

 

あとは、懇親会に参加したのですが、Twitterでよく見る人と実際にお話出来たり、寺田さんのアツいお話聞けたり実り多い懇親会でした…(*´∀`*)

まとめ

めっちゃ楽しかった!!

Javaはいいぞ!

ITCreate部でもJavaの勉強会せねばね(*´∀`*)