暗号通貨ジーキャッシュ(Zcash)について②くりぷと知っ得情報11月19日号

クリプトスタディ(クリスタ)の水野です。
シリーズでプライバシー重視の暗号通貨、「ジーキャッシュ(Zcash)」について書いてます。
プライバシーと匿名性に焦点を当てた分散型の暗号通貨で、第2のビットコイン(BTC)と言われるほど共通した特徴を持っています。
🔶ジーキャッシュ(Zcash)の概要くりぷと知っ得情報11月12日号
前号では、ジーキャッシュ(Zcash)の概要について書きましたが、今回は、ビットコイン(BTC)との共通点について、書いていこうと思います。
ジーキャッシュ(Zcash)とビットコイン(BTC)の共通点
取引データはネットワーク全体に共有され、誰でもノードを立てて参加可能な点は、ビットコイン(BTC)もジーキャッシュ(Zcash)も同様ですが、それだけではなく‥‥
①最大供給量が同じ
どちらも希少性を重視した設計で、最大供給量は2,100万枚で、インフレしない仕組みになっていいます。
②マイニング(PoW)で動く
ブロックチェーンのブロックは、「取引の台帳」のことですが、誰が誰に何をどれだけ送ったか、記録をする必要があります。
ブロックを作るために大量の計算をしてブロックを作り、報酬をもらう仕事をマイニングと言い、ブロックを作る人を、マイナー(採掘者)と呼びます。(参考)
世界中のマイナーが一斉に計算式を解き始め、一番早く解けた人がそのブロックを記録できる仕組みになっていて、難しい大量の計算を行うことでネットワークが安全になる仕組み(PoW:Proof of Work)ですが、ジーキャッシュ(Zcash)のブロック承認方法もビットコイン(BTC)同様、マイニング(PoW:Proof of Work)です。
③ノードソフトウェア/フルノードが複数存在
難しい言葉が出てきました💦💦
整理しましょう💪
まず、「ノード」とは、ビットコイン(BTC)などの
ネットワークに参加している、コンピューター端末
のことです。
そして、「ノードソフトウェア」とは、
ブロックチェーンを動かすためのアプリ
のことです。
ブロックチェーンは世界中のコンピュータが協力して動かしています。
そのコンピュータに入っているのが、「ノードソフトウェア」です。
そして、「フルノード」という言葉が出てきました。
これは、ネットワークを安全に保つ最重要役のことで、
ブロックチェーンの“正義の見張り役”
みたいなものになります。
「フルノード」というと、具体的には、
- すべての取引が正しいか自分で検証する
- ブロックチェーンの全履歴を保存する
- 間違ったデータを拒否する
- 他のノードへデータを伝える
といった、信頼の根っこの部分を担っています。
ビットコイン(BTC)のフルノード
それでは、ここからは、複数のフルノードがあるビットコイン(BTC)とジーキャッシュ(Zcash)について書いていきましょう。
まずは、ビットコイン(BTC)のフルノードから。
ビットコイン(BTC)の仕組み(ルール・ブロック・取引)を正しく動かし、検証し、保存する中心的なソフトウェアで、一番大きなフルノードは、BitCoin Coreで、このお陰でビットコイン(BTC)は世界中で正しく、安全に動いています。
BitCoin Core(ビットコイン・コア)の役割
BitCoin Coreは、ビットコインの心臓部となる公式アプリで、その役割はというと、
🔹ビットコイン(BTC)の送金が正しいかチェックする
🔹新しいブロックを受け取り保存して
🔹不正な取引やルール違反を弾く
🔹他のノードと情報を共有して、全体を同期する
🔹ウォレット機能も内蔵し、ビットコイン(BTC)を管理・送金できる
といった、過程を経てビットコイン(BTC)の台帳を正しく保つ役割を果たしています。
他にも、ビットコイン(BTC)のフルノードは、多数存在しています。
ブロックチェーンを「車両」に例えると、フルノードソフトは車を動かす「エンジン」のようなものなので、1つのエンジン(公式ノード)だけだと、壊れたときに車が動かなくなるリスクを回避するために、複数のフルノードがあります。
btcd(ビーティーシーディー)
BitCoin Coreが、「C++」言語(※1)で書かれた標準的なノードソフトなのに対し、btcdは、Go言語(Golang)(※2)で書かれたフルノード実装になります。
ビットコイン(BTC)のルール(コンセンサス、ブロック受け入れなど)を忠実に再実装していて、誤って別チェーンを作ることを避けるように設計されています。
Go言語(Golang)の特性(軽量性、高速な並列処理・メモリ管理)を活かした実装を好む開発者や運用者、Lightning Network(※3)関連の開発者に向いています。
(※1)「C言語(C programming language)」は、1972年に開発された汎用プログラミング言語で、「C++」は、C言語を機能拡張したプログラミング言語で、「シープラスプラス」「シープラ」とも呼ばれます。
C言語の高速性と汎用性を引き継ぎつつ、オブジェクト指向機能が追加された上位互換の言語です。
(※2)「Go言語」は、Googleが開発した、シンプルで速い、開発しやすい言語です。
(※3)Lightning Networkは、ブロックチェーンの外部で取引を処理する技術。
その他
その他にも、
🔹Libbitcoin‥‥「C++」で書かれた開発者向けフレームワーク
🔹Bcoin‥‥「JavaScript(Node.js)」(※)で動くフルノード
🔹Knots(Bitcoin Knots)‥‥Bitcoin Coreを改善・拡張した派生版
🔹Rust Bitcoin‥‥ビットコイン(BTC)を「Rust」という安全で速い言語で扱えるようにした、公式レベルの開発プロジェクトで、「Rust」言語の特徴(安全・速い・バグが起きにくい)を活かして、ビットコイン(BTC)関連のアプリを作りやすくするためのプロジェクト。
(Rust言語については、こちら)
(※)JavaScript(ジャバスクリプト)は、もともと“Webサイトを動かすため”に作られたプログミング言語。
「地図が動く」等の「動くWeb」を作るのが得意な言語です。
一方、Node.js(ノードジェイエス)は、JavaScriptを“パソコンの外側(サーバー側)でも使えるようにした仕組み”で、Node.jsのおかげで、JavaScriptでWebサーバーの構築やファイルの読み書きといった、サーバーサイドの処理が可能になりました。
このように、複数のフルノードを実装することで、ネットワークの分散性が高まり、どれか1つにバグがあっても他が支えたり、実装ごとの性能や特徴を選ぶことで、ビットコイン(BTC)は「多様な実装が存在しても互換性を持つ」ように設計されているわけですね。
ジーキャッシュ(Zcash)のフルノード
フルノードは、ブロックチェーンの全データを保存し、取引が正しいがどうかを自力でチェックするソフトですが、ジーキャッシュ(Zcash)のフルノードについて、ビットコイン(BTC)と比較してみてみましょう。
ジーキャッシュ(Zcash)には主に2つのフルノードがあります。
zcashd(ゼットキャッシュディー)
zcashdは、ジーキャッシュ(Zcash)の取引を自分でチェックして、ブロックチェーンを正しく保つソフトで、ジーキャッシュ(Zcash)の公式フルノードソフトです。
開発・特徴
ジーキャッシュ(Zcash)の開発を担うElectric Coin Company(ECC)が開発しています。
BitCoin Coreをベースに、「C++」で作られています。
ビットコイン(BTC)とジーキャッシュ(Zcash)を「街」に例えると‥‥
ビットコイン(BTC)の街
ビットコイン(BTC)の街は、郵便物(トランザクション)は透明な封筒で届きます。
ジーキャッシュ(Zcash)の街
一方、ジーキャッシュ(Zcash)という街では、透明な封筒の他に、中身が見えない“特別な暗号封筒”(匿名トランザクション)があって、それをzcashd(ゼットキャッシュディー)いう役所が、両方正しいかチェックする仕事をしています。
zcashdは、街の「役所」みたいな存在!
ジーキャッシュ(Zcash)という街には、zcashd(ゼットキャッシュディー)いう役所があるとイメージします。
この役所(zcashd)がする業務は次のとおりです。
① 封筒(トランザクション)を全部チェック
中身が見える封筒(トランザクションが見える)と中身が見えない暗号封筒、これら両方が正しいことを確認します。
「誰がいくら送ったは見えないけど、この封筒の中身は偽装がないよ」って、役所が確認してくれるみたいな。
この、中身が見えない暗号封筒を「zk-SNARKs」と言います。(次回以降書きます。)
② 街の全記録(ブロックチェーン)を保管
zcashdという役所は、透明な封筒と暗号封筒の中身の履歴を全部持っています。
つまり、 zcashdはブロックチェーンの全データを保存します。
③他の役所(他ノード)と連絡を取り合う
「この届け出、正しい?」「その記録合ってる?」と役所同士で常に確認し合う。
つまり、ネットワークの安全性を保つことができます。
まとめると
ビットコイン(BTC)の街の役所、BitCoin Coreは、透明封筒しか扱わない役所。
ジーキャッシュ(Zcash)という街のzcashdという役所は、透明の取引も、秘密の取引も、全部正しいかチェックして、街全体の記録を安全に保つ上級役所です。
Zebra Client(ゼブラクライアント)
ジーキャッシュ(Zcash)のもう一つのフルノードは、Zebra Client(ゼブラクライアント)です。
Zebra Clientは、Zcash Foundationが開発している、「RUST」言語で作られた公式の代替フルノード(=同じブロックチェーンを動かせる、もう一つの公式エンジン)で、
先ほどの役所の例でいうと‥‥、
Zebra Clientは、新庁舎
「RUST」言語とは、安全で高速なプログラミングができる次世代の言語で、高速で多くの処理を同時にこなせすことができる「新しい安心安全なシステム向け言語」で、「Rust」で新しく作られているということは、さらに安全性が高い、軽くて動きが速い、設計が現代的でバグに強いといった点で言うと、Zebra Clientは、効率化を高めた“新庁舎”みたいなものです。
なぜ二つある?
本庁だけだと、何かあった時に街が止まるので、新庁舎Zebra Clientがあることで、安全管理が徹底されておりミスが少なく、「RUST」採用で軽量で動きが速い。
役所としての基本業務は全部できる。(ただしマイニングは担当外で、zcashdが担当)
(Rust言語については、こちら)
おわりに
今回はここまでです。
次回は、ジーキャッシュ(Zcash)の「中身が見えない封筒?」「中身が見えないのに、どうして確認できる?」点について書いていきます。
お読みいただいありがとうございました。