なんとなく雑記
FBから転載した。
個人的な感覚は、ブロックチェーンはコンピュータサイエンスじゃなくて工学。 エッセンスを抽象化して、アプリケーションを考えたりすることはできるけど、安全性考える時は工学的なアプローチが必須。
VitalikのFinalityの議論があったけど、そういうの以前にソフトウェアが動いている半導体自体が設計・製造メーカーから確率的な信頼性で出荷されてる。コンピューターサイエンス的な思考だと確率的な動作は違和感あるけど、工学的な思考だと当たり前のことに感じる。
デバイスの出荷基準はFIT値で保証したりしてる。チップ内部で一方向にしか電流流れない配線はエレクトロマイグレーションで劣化していくし、ゲート電圧なんて少し高く与えると簡単に壊れる。 配線についてはテストデバイスを作って実験しまくってどれぐらい大丈夫か測定して上限を示し、チップレイアウトを設計している人たちがその値を守るように設計する。チップ全体でそれが守られているかチェックするソフトウェアもある。
新しいプロセスができる時に、トランジスタのプロファイル(不純物濃度をどうするとか)はエンジニアが物理制約の中で自由に決めれる。けど変なバランスで設計するとあっという間に壊れるので、なるべく面積小さく速度早く要求される年月で壊れないように設計される。それも全部統計的なデータ取って、ある確率で大丈夫なように設計してる。 いろんな設計レイヤーで徹底的な実験や研究をしてすごく高い信頼性のLSIが出荷されている。それでも100%保証じゃない。(アレニウスの式とか色々その分野だけで一つ教科書ができるぐらい研究されている) 100%保証じゃなくてもマーケットのニーズがあれば売れていく。
昔々、不揮発メモリのニーズはすごく強かったが実現してなかった。ある物理現象で実現できることを天才が示したけど、その現象使うと劣化しやすかった。それでもマーケットニーズが強かったので書き換え回数に制限をつけて出荷してる。
なので、ブロックチェーンのファイナリティが決定論的ではなくいつまで経っても100%にならないというのは"工学"的には特に問題なことじゃない(コンピュータサイエンス的には気持ち悪いかもしれないけど、むしろその方が狭い分野からの見方)。そもそもソフトウェアが動いている半導体の動作が確率に支配されてるんだよね。
誰かが最初に飛行機飛ばした時に、何故空を飛ぶのか良く分からなかったけど、後から色んな人が飛行機を作ったと思う。けど、人を乗せて旅客機事業をやるとなったら色んな安全性の議論は起きたはず。多分ブロックチェーンは今そのフェーズ(飛行機と違って、本当は空飛んでないんじゃないかって説もあるのでさらに難しい)。 まあけど、間違った理屈で「飛行機なんか詐欺だ」というのもすごく変。
ビットコインのブロックチェーンはブロックタイムが10分だけど、世界中にproof of workのパズルの解答を広めるのにおおよそ12秒かかるらしく、ブロックタイムをどんどん縮めていくと多分あるところからフォークして収束しなくなる確率がどんどん上がる。
その他にもcryptcurrencyはinternet of moneyなのでinternetがきちんと動くことに当然依存している。
ここら辺の安全性はコンピュータサイエンスじゃなくて"工学"なんだよ。コンピューターサイエンス的な議論も一杯必要だけど最終的に議論として残るのはコンピューターサイエンス的なところじゃなくて、実証論的な工学的な信頼性。だからビットコインは数学屋の世界からじゃなくてオープンソースの世界から生まれてきた。(もちろんコンピューターサイエンスは実証論てきな部分の追い込みには役に立つと思うけど)
マーケットニーズがあるなら、今ある部品を使ってどんどん新しいものを作ればいい。エンジニアなんだから。 それと同時に、単なる一部の人の投機ゲームから、産業の基盤にしようとするなら、どんなリスクがあるのかきちんと調べ上げて説明しないと受け入れられない。完全じゃなかったとしても、半導体みたいに調べ上げてマーケットが納得する仕様上の制約を作ればいいだけ。
どうも仮想通貨やブロックチェーンは、
・なんでもかんでも肯定してリスク評価せずに「理解できない人は遅れている」という人や
・なんでもかんでも否定して、「あんなものは使えない」という人
が多くて、本当に変な感じだ。
もうそういうフェーズは脱して、産業基盤に使えるものをエンジニアが作り出すフェーズに入りたいものですね。
翻訳:Satoshi Clientブロック交換
次はこれ。
https://en.bitcoin.it/wiki/Satoshi_Client_Block_Exchange
大事な部分の英語が分からない。。。
誰か偉い人教えて。
The code attempts to limit redundant requests to every 2 minutes for the same block by using a map called mapAlreadyAskedFor to delay the message if necessary.[6]
While it is debatable what the bottleneck is early in the download process, it is clear from the processing of recent blocks that the network is not the bottleneck for all but the slowest internet connections.
(??????????)翻訳:Satoshi Client Transaction交換
次はこれ。
Satoshi Client Transaction Exchange - Bitcoin Wiki
分からない部分あり。
Satoshi Client Transaction交換
1 概要 2 walletの送信 3 定期的なアドバタイズメント 4 リレー 5 他の参照 6 脚注
1 概要 Satoshiクライアントはローカルで生成されたトランザクションをアドバタイズし、他のノードからのトランザクションをリレーします。この記事はトランザクションの交換を取り扱う操作について説明します。 トランザクション交換は、トランザクションが標準で有効の場合のみ行われます。
2 walletの送信 クライアントは定期的にmain.cppのSendMessages()を呼び出します。それはResendWalletTransactionsを呼び出し、ローカルに生成されたトランザクションを送信します。 このルーチンは前回から新しいブロックがあるか確認し、もし存在しているならローカルのトランザクションがまだブロックに入ってないか確認し、トランザクションを全てのノードに送信します。これは30分毎に行われます。 トランザクションは最後の受信したブロックより少なくとも5分以上古い場合再ブロードキャストされます。ソートされ古いものから順に送られます。
3 定期的なアドバタイズメント クライアントは定期的にmain.cppのSendMessages()を呼び出します。そこではメッセージがリモートのノードに送られるべきか決定します。それぞれのメッセージの処理の繰り返しにおいて、一つのノードが”trickle node”として選ばれます。このノードは適切であれば”addr"メッセージ受信する唯一つのノードとなります。 inventoryのセクションでは、クライアントはtrickleノードでなければランダムに決められた1/4のトランザクションのinventoryを送信します。この場合、全てのトランザクションを受信します。 ???????
4 リレー クライアントがトランザクションを”tx”メッセージで受け取った時、RelayMessageを呼び出し、それがRelayInventoryを呼び出して、他の全てのノードに送るinventoryをキューにいれます。
5 他の参照 transation broadcasting
翻訳:Satoshiクライアントのノード接続性
次はこれ。
Satoshi Client Node Connectivity - Bitcoin Wiki
同じく適当。
// <1 hour 10 min
// 1 hour 1 hour
// 4 hours 2 hours
// 24 hours 5 hours
// 48 hours 7 hours
// 7 days 13 hours
// 30 days 27 hours
// 90 days 46 hours
// 365 days 93 hours
翻訳:Satoshiクライアントの初期化とスタートアップ
- StartNode()
- サーバーとして動作する場合:ThreadRPCServer()
翻訳: Network
翻訳:Satoshiクライアントのノード発見
- “addr”メッセージは10個、もしくはそれ以下のアドレスを含む
- fGetAddrがノードにセットされていない。fGetAddrはfalseからスタートし、ノードにアドレスをリクエストした時にtrueにセットされます。そして、1000以下のアドレスをノードから受け取ったときにクリアされます
- アドレスはルーティング可能でないといけない
- 他の参照