ブロックチェーンに詳しいフリーのエンジニアのIT備忘録

ブロックチェーンに魅了されフリーのITエンジニアに転身した元暗号理論研究者のブログです。

電子マネーは分裂しないのにビットコインは分裂する理由

何周も周回遅れの
超初心者向け記事です。
 
ビットコイン分裂騒動、
ある程度落ち着いていて、
 
 
興味が薄くなっておりますが、
いまだになぜ分裂するん?と
聞かれるので、
 
 
いつも説明している内容を
ここに備忘録かねて書きます。
 
 
ちなみに、すでに色々な方が、
多少の専門用語込で、
分裂騒動書いてるので、
超絶初心者向けに書きます。
 
 
物足りない方は、
他の方の記事参照で!
 
 
さて、
ビットコインが分裂することは、
初学者にとって意味不明です。
 
 
電子マネーは分裂しないのに、
ビットコインは分裂するのですよ。
やっかいなことに。
 
 
これは根本的に
構造が違うからです。
 
 
そしてその構造の違いのため、
「システムアップデートが
 極めて難しい」
という特性を持っています。
 
 
これが分裂騒動の
一番の根本といえるでしょう。
 
 
じゃあ構造の違いというのは
何か?
 
 
電子マネーというのは、
発行している会社が、
システムを管理していますが、
 
 
ビットコインというのは、
特定の管理者が存在せず、
 
 
参加者がインストールした
ソフトウェアによって、
参加者全員で管理しています。
 
 
ビットコインの新規発行も
送金のチェックも、
参加者全員で実施しています。
特定のリーダーがいません。
 
 
かめはめ波(悟空1人の力)なのか、
元気玉(全世界の力)なのか、
そんな違いです(?)
 
 
不特定多数の
世界中のコンピューターで
ネットワークを運営している
 
 
ある程度順調に進んでましたが、
人気になっていくにつれて、
1つの課題にぶち当たりました。
 
 
それは、ユーザの送金需要に対して、
ビットコインの処理能力が
追いつかなくなってきたのです。
 
 
もともとの仕様で
「約10分に1MB分の送金を処理できる」
というものがあります。
 
 
わかりづらいので言い換えると
「約10分に約2000送金処理できる」
ということになります。
 
 
この処理速度が追いつかず、
だんだんネットワークが
パンクしはじめたんです。
 
 
じゃあそんな仕様を捨てて、
パワーアップして、
処理速度あげようぜ!
 
 
という話になるのですが、、、
そう簡単にはいかないのです。
 
 
バージョンアップする時の事を
想像してみてください。
 
 
世界中の不特定多数の
コンピュータが専用ソフトウェアを
インストールして管理してます。
 
 
バージョンアップするよ!
ってなったら、
 
 
みんな一斉に
バージョンアップしなければ
いけません。
 
 
だってみんなで管理してるから、
みんな同じバージョンじゃないと
整合性とれないでしょ?
 
 
世界中の数万のコンピュータが
同時にアップデートしないと、
大変な事になるんです。
 
 
例えばWindows10の
アップデートの時のことを
思い出してみてください。
 
 
強制的にWindows10のアップデートを
行う形で進めてましたが、
 
 
やれまだWin8がいいとか、
 
 
アップデートすると不具合がでるとか、
 
 
様子見たいとか、
 
 
いろんな理由で、
アップデートなかなかしませんでした。
 
 
これってね、
Microsoft社は良かれてと思って
やってるはずですよね。
 
 
なのにみんな、
色々な憶測を含めて、
なかなかやらないんです。。。
 
 
世界の多数のコンピュータユーザーの
意思統一というのは、
極めて難しいことが、
この例を見ただけで分かると思います。
 
 
Windowsの場合は、
まだ皆がコンピュータを別々に使ってるから
なんとかなるのですが、
 
 
皆で一緒にネットワークを
管理しているんです。
 
 
方やWindows10で
方やWindows8でとか、
新、旧で別の仕様で動くと
とんでもないことが起こります。。。
 
 
どうなるか?
 
 
新バージョンと
旧バージョンで通信できなくなって、
 
 
新バージョンネットワークと
旧バージョンネットワークに
綺麗に分離してしまうのです。。。
 
 
これがビットコインの分裂
というものです。
 
 
アップデートにともなって、
旧バージョンと新バージョンに
別れてしまう。。。
 
 
こういうことです。
 
 
分裂した後どうなるの?
 
 
これは誰も結果が分からず、
未知数なのです。
 
 
このような事情から、
ビットコインの世界では、
2つの派が喧嘩してます。
 
 
革新派と保守派です。
 
 
革新派は、
ネットワークがパンクするから、
分裂のリスクを負ってでも、
無理やりバージョンアップすべきだ!!!
という考えをもつ人達です。
 
 
保守派は、
そんな強硬に分裂させちゃうと、
ビットコインに甚大な被害をもたらすから
もっとゆっくりやろうや!!
 
 
ということです。
 
 
革新派と保守派が度々喧嘩をして、
 
 
エンジニアや投資家は、
「あわわ、、ビットコイン分裂するかも、、」
ということで価格が乱高下したりします。
たまに。
 
 
私がよく覚えてるのは、
2015年の8月です。
 
 
ギリシャEU離脱が騒がれて、
その直後に上海発世界同時株安が
起こりました。
 
 
金のようにリスク回避資産と
言われるビットコインですが、
 
 
世界同時株安など、
世界経済全体があかん場合は、
円>>>>>>>ビットコインなので、
ビットコインは暴落します。
 
 
そんな最中にさらに、
革新派と保守派の喧嘩が
ヒートアップしまして、
 
 
革新派(BitcoinTX)vs 保守派で、
はじめてビットコインが大規模分裂する!!
となって、
 
 
上海同時株安からの
ビットコイン分裂危機で、
二段階暴落が起こりました。
 
 
2017年7月現在ビットコイン
2500$を越えてますが、
 
 
二段階暴落の時は、
180$を切ったんですね。
さすがにビビりました^^;
 
 
その分裂騒動は収まって、
徐々に価格伸びたのですけど、
 
 
度々喧嘩する中で、
今回UASFというまた
大きな喧嘩が勃発して、
分裂!分裂!と騒がれた、、、
というのが最近の騒動です。
 
 
細かいこと言うと、
今回は、Unlimited派という派閥が
ASIC BOOSTという裏技を使いたいがために、
Segwitというバージョンアップを
拒否していたなんて話もあって、
 
 
より入り組んでるのですが、
その辺の細かいことは、
多くの方々が既に書いているので、
そちらに譲ります。
 
 
昔から
仮想通貨業界にいるものとして、
 
 
ビットコインはバージョンアップむずい
・ネットワークがパンクしてる
・革新派と保守派の喧嘩
 
 
という背景を
知って頂ければと思います。
 
 
8月1日は落ち着きそうですが、
この問題はまだまだ、
本質的に解決できてないので、
ずるずる続きますね。
 
 
以上、
「がの」がお送りしました(^o^)/

cakephp3でフォームに確認画面を用意する(どのようにしてvalidationを適用するか?)

こんばんは。「がの」です。

 

最近cakephp3を触ってます。

 

今回の記事は

validationについてです。

 

確認画面を要するフォーム作成時に

validationで少し躓いたので、

その備忘録を書きます。

 

ーーーー【達成したかったこと】ーーーー

(1)フォームに入力した項目を

TableのvalidationDefaultでチェックしたい。

 

(2)入力後、確認画面を表示した上で、

データを保存する。

 

(3)bakeで生成されるaddアクションを

見ると $this->Table->save($entity)で

validationDefaultが発動しているが、

saveの手前の「確認画面表示」の時に、

validationを行いたい。

ーーーーーーーーーーーーーーーーーーー

 

cakephp2での記述の仕方は

ググれば色々書いてあるのですが、

cakephp3は記事が少なく、

最初よく分かりませんでした。

 

 

調べていて分かったことは、

”cakephp3では、INSERTを行う際に、

  2度validationをかけている"

ということです。

 

2回というのは、

それぞれ以下になります。

 

ーーーーーーーーーーーーーーーーーーー

[1回目]

$entity = $this->Table->newEntity($postParams)

で、newEntityを作る時。

 

[2回目] 前述の通り

$this->Table->save($entity) の時

ーーーーーーーーーーーーーーーーーーー

 

通常どおり、プログラムを実行すると、

newEntityの時にvalidationをかけていることは

気づきません。。。

 

エラーが発生しても、

何の反応やメッセージもなく、

そのままコードを実行するからです。

 

達成したい内容は、

newEntityの時のvalidationの結果を踏まえて、

 

エラーが無ければ確認画面へ、、、

エラーが有れば入力画面でエラー表示

 

とすれば良いでしょう。

 

肝心のnewEntityの時のvalidation結果は、

$entity->errors()で取得可能です。

 

errors()が空であれば

確認画面に飛ばせば良いでしょう。

 

また、validationで指定した

エラーメッセージがerrors()の中に

格納されているので、

 

errors()が空ではない場合は、

そのままTemplateに渡して、

メッセージを表示させればよいでしょう。

 

書いたコードは

気が向いたら載せます^^;

 

 

以上、

「がの」がお送りしました(^o^)/

 

 

 

 

 

 

 

ビットコイン決済の現場の実体をメモしておく(2017.06.07)

こんにちは。「がの」です。

 

ブログとして文章を書くの

1年ぶりでしょうか。

 

 

最近少しずつ

書きたいことが増えてきたので、

ブログ書きます。

 

 

以前、私の文章お読みだった方。。。

 

 

ごめんなさいm(_ _)m

 

 

以前の投資・金融系の話とはうって変わって

IT系の事を書きます。

 

 

しかも、前のブログでは、

「素人でも分かりやすい」

ということで

 

 

一定数の評価を

頂いておりましたが、

 

 

今回のブログは専門用語を

1から説明するということはしません。

ご容赦願います。

 

 

継続するかは不明ですが、

ブログ再開のリハビリ的な記事として、

ビットコイン決済の実体をメモします。

 

 

ビットコイン決済システムを

某企業に納品しまして、今朝、稼働しました。

 

 

早速入金があったようで、

担当者から問い合わせが来ました。

 

 

その問い合わせの内容を

ちょっとブログにメモします。

 

 

問い合わせの内容と

私の回答を読んでいただくと

今のビットコイン支払いの現状が

多少分かるかなー

 

 

ということと、

備忘録として記録です。

 

 

以下の感じです。

 

(担当者)

ーーーーーーー

16時と17時に来た2件の支払が

 

19時現在でシステム上

「承認待ち」

となっています。

 

着金にならないのですが、調べて頂けますか?

ーーーーーーー

 

(私)

ーーーーーーー

調べてみたところ、

両方とも「未承認トランザクション」ですね。

◯◯と△△のURLで送金状況確認できます。

 

解決策としては、待つしかないです。

クレーム来たら少し対処考えます^^;

ーーーーーーー

(担当者)

ーーーーーーー

あ、この前、価格高騰していて、

ネットワークが混んでると仰ってましたね。

 

今、「1確認」になりましたね。

この「1確認」が

6になったらいいんでしたっけ?

ーーーーーーー

(私)

ーーーーーーー

そうですね。6確認になったところで

完全な着金とみなされる仕様です。

 

約10分に1確認ずつ増えます。

ーーーーーーー

(担当者)

ーーーーーーー

ちなみに、

「未承認トランザクション

というのは何ですか?

ーーーーーーー

(私)

ーーーーーーー

ブロックチェーン(帳簿)に

登録されていない送金という意味です。

 

1確認というのは、

ブロックチェーン

登録されたということで、

 

最新のブロックに

登録されている事を意味します。

 

2確認は、

最新のブロックの1つ前のブロックに

その送金が登録されている状態です。

 

6確認まで行くと、

5つブロックが前に生成されていて、

 

 

着金を理論上、

ほぼ100%確定とみなせる

安全圏になっています。

ーーーーーー

(私)

ーーーーーー

補足です。

 

ビットコイン

約10分に1ブロック増えます。

 

送金1つ1つは250Bくらいで、

1ブロックには合計1MBの情報量しか

詰め込めない仕様になっています。

 

1MBに入れない場合は、

次のブロックへ入る予定になりますが、

ネットワークが混むと、

どんどん後ろ回しになります。

 

後ろ回しになり続けると

ずっと「未承認」というステータスです。

ーーーーーー

(担当者)

ーーーーーーー

もう1つ質問です。

16時の送金と17時の送金の2送金のうち、

16時の方は、まだ未承認で、

17時の方は、1承認です。

 

意外と先に送金した方が

未承認なんですね?

ーーーーーーー

(私)

ーーーーーー

前述の通り、

送金情報がブロックチェーン

含まれるかというのは、

 

「次の新しいブロックに含まれるか否か?」

がポイントになります。

 

ブロックチェーンに含まれるか否かは?

実は、送金によって優先順位があります。

 

時間が早い送金の方が

含まれやすいことは確かですが、

 

優先順位のパラメータは

それだけではないため、

 

 

一概に、先に送った方が

先に着金という事にはなりません。

 

優先順位は、

送金自体のデータ容量や手数料に依存します。

ーーーーーーー

(担当者)

ーーーーーーー

丁寧なご説明ありがとうございます。

理解できました。

ーーーーーーー

 

 

以上!

 

 

さてここから分かることは、

 

(1)ビットコインの送金確定に

   3時間以上かかってるよ。

 

(2)ブロックチェーン難しいので、

   企業担当者はほとんど

   何も分からないよ。

   (その状態で決済導入するの大変!)

 

(3)最近仮想通貨語る人

   増えてるけど、、、

   分かってない人

   多いような気がしてます。

   

   上記やり取りは

   基礎中の基礎なので、、、 

   これくらいは非IT系でも

   理解してほしいっす。。。

 

 

ここまでお読み頂きまして

ありがとうございました。

 

 

なんか値上がり、

暴落予測の記事が多すぎるので、

こういう淡々とした記事も必要かなと

最近思いますよね。

 

 

がの