墨汁の暗号通貨速報

主にETC、BTCを中心に海外で手に入れた情報を最速?で掲載してます

The DAOの失態とプログラムのバグの確率

*この記事は元記事の翻訳となります

 

コードパス

まず、乗算除算をする簡単なアプリケーションA(図1)があると仮定する。

 

f:id:bokujyuumai:20160912073746p:plain

図1.アプリケーションA

 

それでは今からこのアプリケーションで起こりうるバグについて話ていきます。

あるいはアプリケーションコードを検索する方法か、コードパスの数を考えます

 

多分この記事を読んでるあなたは、乗算を選択するかもう一方の除算をするという2つのシナリオしかないと言うでしょう。でも続いてアプリケーションは両方のオペレーションを完ぺきに一度テストし終わった後、完ぺきに実行し続けると必ず言うでしょう。でも必ずそうである必要性はなく、xに4 yに5にという数字を入力した場合予想通りの実行結果を示すことになるが、もし数字が5と0だった場合は除算はエラーを起こす(プログラマーの方には有名だと思いますがDivison by Zeroってエラー)

コードにおいては0で除算はNGということですね。

 

この例においては、もしxとyが8bitの数字だった場合131,072通りのコードパスがあるか256回繰り返すかです。理論的に言うとこのコードには欠陥があることがわかります。

 

f:id:bokujyuumai:20160912073841p:plain

 アプリケーションにおけるコードバグの確率

 

 アプリケーションにおいてバグの確率を以下にの式として求めることができる

 

       f:id:bokujyuumai:20160912075724j:plain

 P(F)は確率、Uはテストされていないコードパスの数、Cは考えられるコードパスの数、P(Fu)はテストしていないコードパスによるバグの起こりうる確率

 P(Fu)は理論的にはテストされていないため50%の確率、でも実際はディベロッパーのチームの実力に大きな影響を受ける(The DAOしょぼいって言いたいんですね)

 

もしくは式は、特定の数字のコードパスを実行した時の確率を示している

 

f:id:bokujyuumai:20160912171436j:plain

P(Fe)は実行後にもたらされる確率と実行する数

この式は実行した際に同じ可能性をを持つコードパスに適応されるもので、アプリケーションAのような場合である。

 

さてこの指揮を使用した結果、アプリケーションAは下グラフのようなものとなった。

 

f:id:bokujyuumai:20160912173511j:plain

図3.アプリケーションAのバグの可能性

 

 黄色の線はテストしていないコードパスが実行された時にバグが見つかる確率を表し、青と緑の線は実行後に見つかってないバグが起こる確率を示しP(Fu)はそれぞれ10%と50%です。

 

とても興味深いことに、もし90%の正しいコードを(平均P(Fu) = 10%)書くディベロッパーがアプリケーションAを書いたとすると、80,000回のアプリケーションの実行後をしたものの、5%のチャンスでバグが見つかるかあるいは、300,000回の実行で1%のチャンスとなる。

もし1,000人の人が1日に利用したとすると、80日で5%に到達し、1年で1%になりますね。

 

さらに具体的に言えば、Division by zeroはアプリケーションがリリースされるまで見つからず、350回の実行でバグが現れるのは50%、そして1,500回後は5%

そしてまだとてもシンプルなアプリケーションについての話です(笑)

 

スマートコントラクトとThe DAO

さてここで、明確にしておきたいのはテストをしてバグを発見することこそがもっとも肝要であり、新しいコントラクトを発表する前に多くのテストをすべきでした。限界までテストをするということが全てであり、上記で見たように可能なコードパスの数はアプリケーションの変数に依存しコードブロックユーザーは(スマートコントラクトはブロックチェーン上で動くプログラム)

 すなわち変数の値によるということです

この変数をブロック変数、アプリケーションの変数または外部変数とすると、同じコードで非同期型プログラムの場合でさえ全く違うコードパスを考える必要がある

 

 実際には、各種テストし全てのコードパスをテスト出来るわけではないのはご存知だが、変数に入力する数値と組み合わせ選びを慎重に行うことにより限りなく100%に近づけられる

 

The DAOのコントラクトは安全だと判断されるまで時間をかけてテストを行うことができず、実力を発揮できなかった。通常、どれほどの時間がかかるかはコードの複雑さに依存する。

 

The DAOのコードはリリースの時点で問題があるコントラクトであり、短期間で多くの資金を集めたにもかかわらずハック待ちの状態、そしてその問題を残したまま長くは続かず、VB達によるハードフォークにより助けられたがスマートコントラクトのと本質を示すことができなかった。

 

インジケーターとともに用意されたコントラクトはユーザーに対していかに安全か、以下にスマートかを伝えることができ、大きな障害を乗り越えることが出来るかもしれない。

 

Donate with IndieSquare

 

記事更新には多大な時間がかかり、モチベーション維持が大変です。役に立った、早くしれてよかったなどありましたら気持ちほど寄付していただければ幸いです!

 

Indie Squareなどのカウンターパーティーウォレットをご準備ください。すでにお持ちの方は上記Tip Meから行っていただいた方が自動なので早く(1日〜2日)お返しできます。QRコードの方は手動確認となりますので少々(3-4日)お時間がかかります

 

寄付者には現在1.5円=1BKJにてお返ししております。

BKJトークンでできること

 ・不定期ですが配当をBTCにてお配りします。(第一回は配当済み)

・500BKJ以上保持している方は秘密基地(XCP)の方をアクセスできます!投稿内容はトレード手法の全公開、自分が見つけた極秘?サイトなど公開、ソーシャルネットワークRedditでまだ未公開の情報の先行公開などいろいろ更新しています。

・特定条件を満たした際、イベントを行い投票専用SUMIトークン(XSM$)による抽選を行い景品配布などを行います(手数料や送料など一切かかりません)

  

1LsGWycRiMxdfkUpQGT9AUsbe4Kcp4xYiT

f:id:bokujyuumai:20160826064956p:plain            

Bitcoin寄付アドレス              

0x790B488e4b65471BB302fE4Bc2CE19B55Bf23052

f:id:bokujyuumai:20160919045325p:plain

ETC寄付アドレス

 

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

 記事の拡散は下から!