ブロックチェーンについておべんきょする
暗号化通貨、NFT、DAO、スマートコントラクト、などなど。
ブロックチェーンから派生した技術・話題があちこちで聞こえてくるなーという印象。
また、ブロックチェーンは銀の弾丸ではない!という記事が出たり、
その記事に対して指摘が微妙だー!って記事が出たり、
目にする機会がどんどん増えているなーと。
ってことで、具体的にブロックチェーンって何なの?
技術的にどんなかんじなの?ってのをおべんきょしていく。
ブロックチェーンって何? | G.金融経済を学ぶ | 一般社団法人 全国銀行協会
取引履歴を暗号技術によって過去から1本の鎖のようにつなげ、正確な取引履歴を維持しようとする技術
データの破壊・改ざんが極めて困難なこと、障害によって停止する可能性が低いシステムが容易に実現可能等の特徴を持つ
取引履歴の維持 = データの破壊・改ざんが難しい ってことかな?
障害によって停止する可能性が低いについてはこの後の記事の中身に期待
取引履歴(ブロック)が暗号技術によって過去から1本の鎖のようにつなげるかたちで記録され、一つのブロックは、合意された取引記録の集合体と、各ブロックを接続させるための情報(前のブロックの情報など)で構成されます。
ブロックチェーンとは、このブロックが複数連結されたものを指します。
ある取引について改ざんを行うためには、それより新しい取引についてすべて改ざんしていく必要がある仕組みとなっているため、データの破壊・改ざんが極めて難しくなっています。
新しい取引情報だけを持つのではなく、他の取引情報もまとめてくっつけて管理するため、
過去の取引を改ざんしようとすると他の取引情報が持っている改ざんしたい情報もすべて変更していくっていうコストが、
実質支払えないほどの計算量になるので、データの改ざんが困難ってことみたい。
ブロックチェーン化された取引記録は、特定の管理主体が存在する通常の集中管理型システムと異なり、複数のシステムがそれぞれ情報を保有し、常に同期が取られる「分散型台帳」という仕組みで管理されているため、一部のシステムが停止・故障しても、システム全体の運行・稼働に与える影響を抑制することが可能
分散型台帳であるため、とある一つの台帳が不調をきたしても他の台帳が動いているからシステム全体がダウンすることはないっぽい。ってことで、対象外性が高いシステムといえるのかも。
集中管理型システムと比較して運用・管理の当事者が増加するため運用・ガバナンスが複雑となること、改ざんが困難なことに起因して一度ブロックチェーン上に配置したプログラムは変更できないこと、高いセキュリティを維持しながら大量のデータを高速で処理することが現状では困難なこと等、現在のブロックチェーン技術においては考慮が必要な事項が存在します
運用の複雑化、プログラムの変更の困難さ、セキュリティの担保、計算量の多さ
前半二つが技術者としては怖い
あー、こうしたらよかったなぁ。みたいなのが起きたときにすぐにできないのはつらい
ブロックチェーン - Wikipedia
暗号技術を使ってリンクされたブロックと呼ばれるレコードの増大するリストである
レコードのことをブロックと呼ぶらしい
各ブロックには、前のブロックの暗号化ハッシュ 、タイムスタンプ、トランザクションデータ(一般的にはマークルツリーで表される)が含まれている
前のブロックの暗号化ハッシュってことは、前のブロックの情報は確認できひん感じなんかな?
ちょっとその辺が分からんけど、他のブロックを織り込んで新たにブロックを作るってのを繰り返すことは分かった。
ブロックチェーンは、「2つの当事者間の取引を効率的かつ検証可能で恒久的な方法で記録することができるオープンな分散型台帳」である
通常、ピアツーピアのネットワークによって管理され、ノード間通信と新しいブロックの検証のためのプロトコルに準拠している。
P2Pネットワークで台帳同士が通信使、新しいブロックを検証するという役割を持っているっぽい。
一度記録されたブロックのデータは、後続のすべてのブロックを変更しない限り、遡及的に変更することはできない。
ブロックに前のブロックのハッシュを織り込む理由はこの一点にあるように思う。
ブロックチェーンの発明により、ビットコインは信頼できる当局や中央サーバーを必要とせず、二重取引問題を解決する最初のデジタル通貨となった。
ブロックチェーンといえばビットコイン。ってところはあるよね。
中央サーバを必要としない二重取引問題を解決する最初のデジタル通貨ってことで、
ブロックに前のブロックを織り込むことと、二重取引問題が解決されることの間に少し溝がある気がする。
各々のブロックは、その一つ前のブロックのハッシュ値を持っており、そのハッシュ値を遡ってたどることで、ブロックが、どのようにつながっているかをたどることができる。
ハッシュ値が主キーになるっぽいな。
ルートになるブロックはどうなるのか気にはなる。
主鎖は、起源ブロックから現在のブロックまでの最長の一連のブロックとすると定義されている。
その他のものは孤児ブロック(紫色)として、主鎖の外側に存在する。
主鎖以外が孤児として扱われるのは分かったけど、それって伸びないブロックやし、捨てられてるってことにならん?
計算に時間のかかる値を最初に計算した者が、次のブロックを生成することができる
何のために計算しているのかは良くわからないけど、計算が早かった人がブロックを伸ばせることは分かった。
ビットコインにおいて「お金の帳簿」であったブロックチェーンは、イーサリアムにおいて拡張され、任意のプログラムを帳簿として載せる機能(スマート・コントラクト)が実装された
スマートコントラクトはイーサリアムで初めて実装されたっぽいね。
任意のプログラムを帳簿に載せられるのはすごいけど、分散台帳たちは処理能力が求められるってことかな?
分散型金融(DeFi)分野の急成長によりイーサリアムにおける取引量が増加した結果、同ブロックチェーンではトランザクションが円滑に処理されずに遅延したり、取引手数料(GAS代)が高騰したりといった問題(いわゆるスケーラビリティ問題)が顕在化した
あ、やっぱそうよな。
台帳にかかる負荷高そうやもん。
イーサリアム・プロジェクトではコンセンサスアルゴリズムをPoWからPoSに変更すると同時に、全部で5つのマイルストーンによってスケーラビリティ問題の解決を図ろうとしているが、それらがすべて達成されるのは計画通りに進んだとしても2028年頃になると見られる
かなりハードそう。
PoWとPoSの違いも後で確認したい。
プルーフ・オブ・ワークシステム - Wikipedia
プルーフ・オブ・ワーク (proof-of-work、POW) システム (またはプロトコルかファンクション) はサービスのリクエスターに一部の作業を要求(通常はコンピュータによる処理時間を意味する)することでDoS攻撃やネットワーク上のスパムなどの他のサービスの濫用を抑止する経済的手段。
ビットコインのマイニングやHashcashで使われているこの有名なシステムは電子メールを送信するための信用トークンとして作業の完了を証明する部分的なハッシュの逆算を利用している。
計算自体には意味がなくて、そこそこ高いコストを支払わないとやりたいことが出来ない。
コストを支払う価値があれば実行するけど、ただ愉快的ないたずらのためには高いコストなのが良い感じなのかなー。
プルーフ・オブ・ステーク - Wikipedia
プルーフ・オブ・ステーク(Proof-of-stake、PoS)は暗号通貨のブロックチェーンネットワークによる分散型コンセンサスの達成を目的とするアルゴリズムの一種。PoSベースの暗号通貨では次のブロックの作成者はランダム選択と資産または年齢(例:ステーク〈掛け金〉)の様々な組み合わせを通して選ばれる。対照的にプルーフ・オブ・ワーク(PoW)ベースの暗号通貨(ビットコインなど)のアルゴリズムはトランザクションの検証と新たなブロックを作成(例:マイニング)するために複雑な暗号パズルを解読した参加者に報酬を与える。
貢献度の高い人に権限を与えるという感じかな?
アカウント残高による選択は最もリッチなメンバー1人が恒久的なアドバンテージを得ることから、望ましくない集権化をもたらす。
そりゃそうやんな。
利点
批判
計算機の計算量という一点に依存しているPoWに比べてエネルギー効率が格段に良い。
が、コストが下がるということはいたずらしやすい環境になっているということ。
ここまで読んで感じたのは、
ブロックチェーンの中には単純にブロックをチェーンしていくだけの機能と、
分散台帳としての機能に大別できそう。
ブロックをチェーンする機能はかなり単純やけど、
P2Pなりで通信しながら矛盾なく維持する分散台帳が複雑で高機能。
【保存版】超わかりやすいブロックチェーンの基礎知識|ビジネスブログ|ソフトバンク
4章 ブロックチェーンの仕組み
これまでは信頼できるサービス提供者の存在を前提としなければ、インターネット上で通貨などの取引を安全に行うことはできなかった。例えば仮想通貨では、「なりすましや改ざんをどう防ぐか」「二重支払いをどう防ぐか」という2つの問題があった。この問題を解決したのがビットコインであり、それを支えるブロックチェーン技術だ。ブロックチェーンは「P2Pネットワーク」「ハッシュ」「電子署名」「コンセンサスアルゴリズム」の4つの技術を応用することで、
信頼できないサービス提供者が混ざっても大丈夫なように、
ブロックチェーンにはいくつかの仕組みが入っているっぽい。
P2Pネットワーク
P2P(Peer to Peer)とは、複数の同等なコンピュータが1対1で直接通信を行う接続方式
P2Pネットワークで接続されたコンピュータは、等しく同等の機能を持つ
一部のコンピュータがダウンしたとしてもシステム全体は動き続ける性質を持つ
これは障害体制であって、信頼できないサービス提供者がいても問題ないというのとは違いそう。
P2P自体はゲームのISOデータを流したりで使われてたなーって記憶。
データがコピーされるという点でも、それぞれのノードは同じ機能・同じデータを持つ。
なので、ブロックチェーンを利用したプラットフォーム上でサービスを提供したいとき、
他の大多数のサービス提供者が撤退しても、自前のノードを持っていれば、
ブロックチェーンのプラットフォームは維持できる。
データも仕組みも、誰のものでもなく、みんなのものであるってのが、
サービス含め、継続性が高いと言えそう。
気になる点としては、どのようにしてP2Pネットワークに参加するのか。
それぞれのノードは新たに追加されたノードをどのように検知するのか。
ハッシュ
ハッシュ値は入力したデータを特定するIDとして機能する
どんなデータを入力しても必ず一定の桁数の値となる
ハッシュ値から元のデータを特定することはできない
入力データが同じならば、誰がいつどこでハッシュ関数にかけても、同じハッシュ値が得られる
言葉の通りぐちゃぐちゃにつぶすハッシュ化。
バックエンドエンジニアだったり、Webアプリエンジニアなら常に関わっていると思う。
重要なのは非可逆ってことと、ユニークってこと。
元のデータが変わればハッシュ値も変わるからデータの変化を検知・矛盾を検知できるし、
非可逆やからハッシュ値から元のデータを特定することができない。
電子署名
電子署名とは、デジタル文書の作成者を証明する電子的な署名
次の2つの妥当性を証明することができる。
・データが署名者により作成されたこと
・データが改ざんされていないこと
「公開鍵」と「秘密鍵」と呼ばれるペアとなるキーが作成される
電子署名を利用することで、なりすましや改ざんを防いでいる
たぶんP2Pでの信頼できるノードからの通信かって点とか、
傍受を防ぐための目的で使われている仕組みだと予想。
ブロック作成者が重要になる場合は、そこでも活用されるかも?
HTTPSとかのTSL関連で利用されてるってことなんじゃないかなー?
詳しくは分からなかった。
コンセンサスアルゴリズム
不特定多数の参加者の間で正しく合意形成を得るための仕組み
不特定多数の参加者から成るブロックチェーンにおいては、ビザンチン障害を引き起こす取引時に不正を働く者や正常に動作しない者が含まれる可能性がある
取引情報に食い違いが出ないよう、各リクエストが正しいのか検証するためのルールがコンセンサスアルゴリズム
ビットコインではProof of Workと呼ばれるコンセンサスアルゴリズムが採用されている
膨大な計算処理を伴う改ざんや二重取引の検証作業を競争形式で行わせ、競争の勝者にビットコインを新規発行する
この方法が生み出される以前は、不特定多数の参加者に自ら進んで正しい選択をさせることは不可能だった
証作業にインセンティブを与えたことで相対的に不正をするメリットがなくなり、この問題は解決された
不正を行うコストよりも、正しい行いをした報酬のほうが上回るのであれば、そっちのほうが良いよねー。って話。
んでもこれって合意してるのは誰?
P2Pネットワークに接続している各ノードが合意しているかと、
報酬を得るために計算だけしている人は同一なの?
Bplus53_小特集_解説1_三久.indd
pdfやけど合意についての情報量がかなり多い。
各ノードがそれぞれの判断でブロックにトランザクションを取り込むと、ノードによって異なるトランザクションが保持され、トランザクションの履歴の分岐が発生する。
一方のチェーンに取り込まれたトランザクションが他方では取り込まれないという状況が発生する。
一貫性のある履歴を維持するためには、どちらの分岐を正しい履歴とするかを、全ノードで合意できる仕組みが必要となる。
大前提として、トランザクションはすべてのノードに共有されることはないってことは分かった。
なので、ノードによってブロックを形成するための基礎情報が違う。
親となるブロックのハッシュ値と、チェーンにつなぎたいブロックの各種情報から新しいブロックを作ることができる。
ってことで、ブロックを作るノードごとに作るブロックに差異がでるはず。
その差異を認められるかが合意形成になる。
ビサンチン将軍問題の文脈でブロックチェーンの合意形成問題を考えると、忠実な副官がブロックチェーンのプロトコルに従う正常なノードであり、そして、裏切者がブロックチェーンのプロトコルに従わない不正なノードとなる。
公平な選択を行うには、忠実な将軍の数が重要となる。
多数決をとるために将軍の数は既知でなければならない。
「パブリック型」のブロックチェーンシステムは、利用者が任意に参加・離脱できる形態であるので、ノードの数が既知でない。
ビットコインを代表とするパブリック型の合意形成の仕組みを考えると、全参加者数が分からないことから多数決そのものが難しい。
何かしらの工夫か、多数決の代わりになる別の方法がないことには、ビサンチン将軍問題を解決するのは難しそう。
各マイナーは、報酬の獲得権を得るために、マイニングを競争的に行なう。
暗号パズルとは、ブロックのハッシュ値がTargetよりも小さくなるようなNoceを探すパズルである。安全な暗号的ハッシュ関数が利用されていると、Targetより小さなハッシュ値を狙って計算することが困難である。つまり、マイナーはいろいろなNonceで実際にハッシュ計算を行ない、Targetよりも小さなハッシュ値となるNonceを見つけ出すしかない。
これがPoWの困難さ。ある条件に合致するハッシュ値を手あたり次第に探すという困難な問題に向き合うしかない。
んで、その解決法はひたすら手数。早い者勝ちでなりたつのは運要素が強いからかもね。
マイニングの競争の勝者が発見したNonceを含むブロックが新たにブロックチェーンに接続される。各マイナーが競争的にブロックの接続を試みるので、互いが知らないところで別々のNonceが発見されることがある。
これは、トランザクションの履歴の分岐を意味するが、一時的な分岐は許容されている。
分岐発生後も各マイナーは任意の分岐を選んでマイニングを継続する。結果的に、最も長くなったチェーンを正当なチェーンとして扱う。
マイニングの勝者に経済的インセンティブとなる報酬を与えて、多数のノードがマイナーになる動機づけを行っている。
残念ながら正当なチェーンに含まれない短いチェーンに格納されていたトランザクションやそのときのマイニングの報酬はなかったこととされる。これにより、マイニングが徒労に終わることを避けたいマイナーが長いチェーンをマイニングするように誘引される。
競争に負けたらブロックが作れないうえに、インセンティブがもらえない
トランザクションも認められない。
取引所を開設しているようなところは、PoW競争で負けるわけにはいかないよなぁ。
失われたブロック、取り込まれなかったトランザクションはどうなるのか。なかったことになる?
ブロックチェーンのトランザクション手数料とは? | Binance Academy
取引手数料が必要な理由
トランザクション手数料はユーザーが、トランザクションを検証し、承認に貢献することへのインセンティブとして機能
大規模なスパム攻撃のコストを上げ、実現させるための費用を上げます
トランザクション手数料を支払うことで参入するマイナーが増え、
ブロックチェーン全体の計算量が増え、攻撃的なマイニングにかかるコストをあげることができる。
手数料として支払う額によって、次の ブロックに追加される優先順位が決まります。支払った手数料が高ければ高いほど、承認プロセスは早くなります。
マイナーは手数料が高いトランザクションを優先的に取り込むことで、
得られるインセンティブを多くすることができる。
ってことで、トランザクション手数料が高いトランザクションから優先的にブロックに取り込まれることになる。
未承認トランザクションのプールはメモリープール(もしくは、mempool)と呼ばれています。当然ながら、マイナーは保有しているBTCを別のビットコインウォレットに送金する時に、より高い手数料を支払うことに合意したユーザーのトランザクションを優先します。
マイナーはトランザクションをメモリ上にプールしていて、
その中から手数料の高いトランザクションを優先的に選択してブロック生成を始めるってこと。
意のある攻撃者は、トランザクション毎に手数料を支払う必要があります。手数料を低く設定した場合は、マイナーはそのトランザクションを無視するでしょう。適切なレベルの手数料を設定した場合は、高い経済的なコストを負うことになります
単純にマイナーが増えるからだけじゃなくて、攻撃時のトランザクション手数料が高くなるってことで、
攻撃を抑止することができてるってことか。
ビットコインメンプール–初心者向けの説明
無理矢理翻訳されたような記事で読みづらいけど、mempoolについて書かれているので。
ノードによる検証に合格すると、「Mempool」(メモリプールの略)と呼ばれるそのノードの「未確認トランザクション」領域内に配置されます。
取引者は任意のノードにトランザクションを送信する。
ノードは受け取ったトランザクションを検証し、問題ないと判断出来たらmempoolに配置する。
Mempoolはの一部です BIP 35 (ビットコイン改善提案No.35)。アイデアは、外部ノードが他のノードのMempoolにアクセスできるようにするというものでした。これは、いくつかの場合に役立ちます。
他のノードのmempoolにアクセスすることで、ノードが直接受け取ったわけじゃないトランザクションを取れる。
なぜ他所のノードからトランザクションを取りたいかというと、手数料を高く設定されているトランザクションを処理したいから。
この機能によって、ノード間で手数料の高いトランザクションを集め、本当に手数料の高いトランザクションは処理されやすくなる。
ノードは、マイナーから最新のマイニングされたブロックを受信すると、このブロックに含まれるすべてのトランザクションをそのmempoolから削除します。これにより、Mempoolサイズが急激に減少します.
1ブロックに含まれるトランザクションは1MB~2MB分なので、
約10分に1回ブロックが作られることから、メインチェーンに含まれるトランザクションは、
mempoolからガツンと消されることになる。
ブロックチェーンの中身を読んでみよう - @mizumotokのブログ
Blockchain.infoというウェブサイトではブロックチェーンを読みやすい形式で公開してくれています。Blockchain.info上でをブロックチェーンの中身を見ることで、ブロックチェーンの仕組みについての理解を深めましょう。
実データが持っている情報や、実データに関わる処理について知りたかったから、こういうの助かる。
各端末で共有しているデータはビットコインの取引の履歴であり、ブロックチェーンそのものです。
共有しているのはブロックチェーンそのものと、取引履歴の2点に集約できそう。
ビットコイン送金ではP2Pネットワーク上に取引データ(トランザクション)を送ります。
マイナーが約10分かかるマイニング処理をしてブロックをつくり、各端末にブロックを送信します。
各端末ではブロックを受けったら内容をチェックして、その端末で保持しているブロックチェーンに追加していきます。
取引したい人は、どこからどこにどのくらいのBTCを送るかをP2P上のノードに送ると、
マイナーが取り込むトランザクションを取捨選択してブロックを作り上げる。
作られたブロックは他の端末で検証されて、問題がなければ自分のチェーンにも追加する。
TransactionsはInputsとOutputsから成り立っています。
Outputsには送金額とScriptPubKeyが複数含まれます。ScriptPubKeyはこのアウトプットを使用する条件です。通常は送信先アドレスを入れることで、そのアドレスのみがこのアウトプットを使用できるようになります。
Outputsは受け取る側のことみたい。
ってことは、主語はノードなり、ブロックチェーンシステムなりになるのかな。
Outputsは複数になることもあるみたい。
Inputsにはこのトランザクションのハッシュ値、このトランザクションを生成するのに使用したトランザクション(UXTO)とScriptSigが複数含まれます。ScriptSigはUXTOをトランザクションとして使用する証拠を指定します。送信元の電子署名と公開鍵を入れておきます。電子署名はこの公開鍵で開けるのでこの公開鍵と対になる秘密鍵を持っていることを証明できます。また公開鍵からアドレスを作れますので、UXTOのアウトプットにのScriptPubKeyにあるアドレスはこの公開鍵の所有者、すなわち秘密鍵の所有者=送信者であることを証明することができるのです。
Inputsは送る側のことみたい。
トランザクションの生成にも何かしらのルールがあるみたいやけど、
詳細はここからじゃ掴み切れない。
とりあえずUXTOってのと、ScriptSig、公開鍵が絡んでて、公開鍵からウォレットのアドレスに到達でき、
送信者であることを証明できるってことみたい。
つまり、鍵情報がないとウォレットのアドレスの持ち主であることが分からないってことだろうから、
送金はノードが勝手にできるとか、誰でも勝手にできるってことはないと分かる。
詳しくは調べないとやなー。
Inputs and Outputsの表にFee(手数料)という項目があります。手数料は明示的には指定せず、Inputs(UXTOのOutputs)に含まれる金額の合計とOutputsに含まれる合計の差が手数料となり、報酬に上乗せしてこのブロックをマイニングしたマイナーに支払われます。
マイナーにInputsとして入って、Outputsとしてマイナーから出るってことなんだろう。
ってことで、入金と出金が不一致でもOKで、その差額がマイナーの取り分になる。
入金 < 出金でもトランザクションは生めるかも。マイナーが損する取引ってことで、たぶん採用されないけど。
ブロックのトランザクションにはInputsのないものが一つ含まれます。これはCoinBaseと呼ばれるトランザクションで、マイニングの報酬にあたるものです。決まった額の報酬に各トランザクションの手数料を上乗せしてマイナーのアドレスを指定して送金します。
手数料とは別に、マイニングの成功者に支払われる報酬はブロックのトランザクションに含まれるっぽいな。
inputがないから鍵などもなく、他のノードが認めればOKって感じか。
アドレスはブロックチェーン内の各ブロックのトランザクション内に入っていますが、Blockchainのウェブサイトでは逆にアドレスが使われているトランザクションのリストを表示することができます。
ウォレットの持ち主を知ることができれば、その人がどんな取引をしてるか丸わかり。
オープンな台帳としての仕組みだなーという感じ。
それより驚くのは、過去のトランザクションに簡単にさかのぼって確認できる仕組みがあるってことだと思う。
これまでブロックは何十万と積み上げられてきて、各ブロックに数百から数千ものトランザクションがあるのに、
そのトランザクションを一覧でぱーっとみることができるなんて。
ブロックHeightが0である最初のブロックをGenesis blockと言います。
Genesis blockはマイニングされたものでなく、プログラムにハードコードされています。
最初のブロックはこうして生まれるのか。
んで、新しくP2Pネットワークに参加したノードは、手元に最初のブロックを生成したうえで、
他のノードからブロックチェーンを取ってきて、長さが違うなーってことで更新するのか。
わかりやすくブロックチェーンを説明してみる(第5回):トランザクション(送金情報)の検証 | PDT(プロファウンド・デザイン・テクノロジー)
トランザクションTx(送金情報)を受け取ったコンピュータBは①と②について検証し、問題なければマイニング対象としているブロックの一部として取り込むと同時に、隣接するコンピュータCにそのトランザクションTxを転送します。
もしトランザクションTxに問題があればコンピュータBはコンピュータCには転送はしません。この結果、問題のある送金情報はブロックチェーンに書かれることはなく破棄されることになります。
有効なトランザクションかどうかをチェックする仕組みがノードにはある。
トランザクション情報を受け取ったノードは、検証後に別のノードにトランザクション情報を共有する。
もし、悪意あるノードが悪意あるトランザクションを許可しても、他のノードはOKとは言わないだろうから、
結果的に無視されるブロックになるってことか。
残高情報はどこに記録されているのでしょうか?実はビットコインでは残高情報は取引台帳には記録されません。
残高情報はビットコイン・ネットワークに接続している各コンピュータが個別に記録しています。
残高データベースは各コンピュータが責任を持って管理、他のコンピュータと共有はしません。
残高情報データベースはUTXOセット(Unspent Transaction Output)と呼ばれています。
他の記事でUXTOってなってたのは、たぶんUTXOの間違いちゃうかな。
使われていないトランザクションの出力ってことは、保有しているって意味ととらえて差し支えなさそう。
UTXOデータベースは各コンピュータがローカルに管理しており、ブロックチェーンのようにみんなで共有しているわけではありません。
イーサリアムという暗号資産は、ブロックチェーン(取引台帳)に残高情報を持っています。
UTXOの情報がオープンじゃないと、トランザクションの検証できなくない?
時間をかければ可能って意味なら可能なのは可能やろうけど。
UTXOデータベースには各ビットコインアドレス(アカウント)の残高情報が記載されています。本人確認とは、その残高を使う権利のある人かどうか(ビットコインの所有者かどうか)を確認することです。
気になってた。
どうやって全員がBさんの秘密鍵を使ってチェックするのでしょうか?非常に簡単にいってしまうとBさんの秘密鍵を使ってチェックするのではなく、Bさんが秘密鍵を使って生成した「デジタル署名」を用いて全員が「Bさんにはこのビットコインを使う権利があるのか?」をチェックします
詳細な説明はないから後で調べる。
秘密鍵(銀行でいう暗証番号)から公開鍵(銀行でいう口座番号、ビットコインアドレス)が生成され、取引台帳(ブロックチェーン)には取引情報の一部として公開鍵が書き込まれます(繰り返しになりますが、厳密にいうと公開鍵とビットコインアドレスは同じではありません)。
分かりやすい例があるね。
12個のパスフレーズから秘密鍵を自動で生成し、ビットコインアドレスを使用するものがあります。そしてパスフレーズさえ保管しておけば、そのパスフレーズから秘密鍵を復元することができます。またこの場合、複数(無限個)の秘密鍵を生成します。したがって複数(無限個)のビットコインアドレスが使用できることになります。
ビットコインを受け取るときに毎回自分のビットコインアドレスを変更します。変更はウォレットが勝手にしてくれます。これでも自分が使ったすべてのビットコインアドレスが他人にすべてわかってしまうと自分の残高はバレてしまいます。しかし、毎回変更しているビットコインアドレスが他人に全部わかってしまう、ということはまずないかと思います。
秘密鍵を大量に作るのも、大量の秘密鍵を使って都度受け取ることでプライバシーを守るのも分かった。
が、公開台帳的にそれはいいの?
UTXOの検証が実質不可能ってことじゃない?
って思ったけど、トランザクションは別々の秘密鍵に対して発生するだけか。
結果的に手数料が高くなりそうやけど、不可能な話ではない。
つまり、Aさんの秘密鍵が3つあり、それぞれに1BTCずつ入っているような状況で、
3BTC移動させたいってなると、トランザクションも秘密鍵の数だけ発生させればいい。
bitcoin_jp.pdf
結局これを読まないことには、やんなー。
本システムは、善意のノードが攻撃者グループのノードを上回るCPUパワーをコントロールしている限り安全である。
重要なのは取引が正しく行われることとか、大量に処理できることとか、手数料が安くできることではなく、
第三者の機関に依存することなく、攻撃的なアクションに対して耐性をもったシステムを作ること。
自分のトランザクションと次の所有者の公開鍵をハッシュ化したものに電子署名を行い、これらを電子通貨の末尾に加えることによって、次の所有者にコインを転送する。
前提として、公開鍵方式、電子署名を理解していないと、実装は出来ない。
トランザクション成立毎にコインが造幣局に返却されて新たなコインが発行され、造幣局が直接発行したコインであることが、二重支払いが行われてない事の信用となる。この解決策では、全トランザクションが造幣局経由で行われるため、銀行と同様、造幣局の運営組織に金融システムの運命が左右される問題がある。
んー難しい。
造幣局ってのがブロックチェーンシステムで、一度返却されるってのがトランザクションのinput、新たに発行するというのがoutputということかな?
ただそれを第三者の組織に任せてしまうと、その組織に左右されることになる。
信用の置ける第三者機関を介さず行うには、トランザクションが公開され、参加者達が受け取った順番通りのトランザクション履歴に合意できるシステムが必要となる。
これがブロックチェーンですべてのトランザクションが公開される理由。
各タイムスタンプはハッシュ内にその一つ前のタイムスタンプを含み、ブロックチェーンを形成する。
これがブロックチェーンのイメージとして広まっている部分だと思う。
タイムスタンプを含んだハッシュは後からは書き換えられないよう、次のブロックにハッシュを含んでおくってことでしょう。
Proof-of-Work の役割としては、数値が SHA-256 等によりハッシュ化された際、最初の n ビットが全て 0 で始まる値を発見する事が挙げられる。
マイニングと呼ばれている作業。
やってることは特定の条件を満たすハッシュを生み出せるnoceを見つける作業。
Proof-of-Work は集団の意思決定において、誰が代表かを決定する問題を解決する。多数決方式の様に各 IP アドレスに 1 票ずつを割り当てる方法では、誰かが IP アドレスを大量に確保した時点でシステムを乗っ取ることが可能となる。Proof-of-Work における本人確認は原則として 1CPU1 票である。
IPはもちろん、アカウントもそうやけど、
安価に手に入るものを利用すると金持ちが勝つ。
それはCPUでも同じやけど、論理的な存在ではなく物理的な存在になるので、
無制限に生み出すことができない。
= 取得にコストのかかる存在証明になるって感じか。
年月の経過に伴うハードウェア能力の増加と実行中のノードの関心の変化に伴う影響を考慮し、Proof-of-Work の難易度は、1 時間あたりの平均ブロック数を基にした移動平均により定められる。各ブロックがあまりにも速く生成された場合、難易度が増加するのである。
ハードウェアの成長と同時にnoceの発見難易度が上がっていくことがルールとして決まっている。
この条件を守らない一部のノードがあっても、他のノードはルールを守っていないブロックだと認識して取り込まれない。
ネットワークの作動手順は以下の通りである。
1) 新しいトランザクションは全ノードに送信される。
2) 各ノードが新しいトランザクションをあるブロックに取り入れる。
3) 各ノードがそのブロックに対する Proof-of-Work を算出する。
4) Proof-of-Work を見つけ次第、ノードはそのブロックを全ノードにブロードキャストする。
5) 各ノードは、そのブロック内の全トランザクションが有効かつ未使用の場合のみ、承認を行う。
6) 各ノードは、承認したブロックのハッシュを直前のハッシュとして使用し、次のブロックの作成を開始することで、ブロックの承認を表明する。
ぱっとみ単純そうで、その実かなり複雑なブロックチェーンは、ステップとして書き出すとたったこれだけ。
トランザクションが共有され、トランザクションを含んだブロックに対してnoceを計算し、他のノードに生成したブロックを共有、もしくは共有されたブロックの妥当性をチェックして取り込む。
新しいトランザクションのブロードキャストは全ノードに届く必要はない。多数のノードにブロードキャストされる限り、いつかはブロックに組み込まれるのである。
すべてではなくてもOK。ただ、多数である必要はある。
確率的にみれば「いつか」は必ず来る。
ブロック内の最初のトランザクションは、新しいコインを生成し始める上で特別なものであり、そのコインはブロック作成者のものとなる。これは各ノードがネットワークを支持するインセンティブになると同時に、コインを発行する中央機関が不在の中、最初にコインを発行する方法としても機能する。
ブロックを作り始めるのに、トランザクションがないということは絶対にない。
なぜなら、ブロックを作った際に得られる報酬が最初のトランザクションになるから。っておはなし。
コインの流通量が既定値に達すると、インセンティブは完全にトランザクション手数料のみとなり、インフレから完全に解放される。
最終的にはインセンティブがなくなるのか!
新たにコインが増えなくなると、コイン価値が上がり続けるのではないか?とか気になるけど、
CPUと電力コストは変わらないのにインセンティブが減っていくってのもまたコインの価値をあげる要因になりそう。
ブロックのハッシュを壊さずにこの作業を行うため、トランザクションはそのブロックにルートハッシュのみ含み、マークル・ツリー(Merkle Tree)を用いてハッシュ化される。
マークルツリーとは。
あとで調べよう。
完全にネットワークノードを実行していなくとも、支払いの検証は可能である。つまり、ユーザーは、ネットワークノードに要求する事により得られる、最長のチェーンの各ブロック・ヘッダーのコピーを保存しておくだけで良い。これにより、タイムスタンプが行われたブロックにリンクしているマークル・ブランチを得られるためである。
各ブロックヘッダーのコピーを保存しておくだけで検証可能。
マークルツリーが分からないと分からなさそう。マークルブランチも同様にわからない。
とりあえず、すべてのトランザクションを持っていなくても、検証のための処理は可能ということ。
価値の分割や結合を可能にするため、トランザクションには複数のインプットとアウトプットが含まれる。通常、インプットは、価値のより大きな前トランザクションからの 1 つのものか、小額のものを組み合わせた複数のものに分別される。一方、アウトプットは、支払い目的のものと、もし釣銭があればそれを支払い元に返還するものに分別される。
トランザクションの前のトランザクションというのが何なのか。
当たり前やけど、支払いをするためには手元にコインが必要になる。
そのコインを得たトランザクションが前のトランザクションになる。
そのため、細かく得たコインをまとめて送金したいときには、トランザクションのinputが複数になりえるし、
まとめて得たコインを細かく送金するときには、inputが一つになる。
outputもケースバイケース。
1 つのトランザクションが複数トランザクションに依存し、それらが更に多数のトランザクションに依存するのは問題でない事に留意する必要がある。これは、あるトランザクション履歴から完全に独立したコピーを抽出する必要性はないためである。
これが何を意味しているのか分からない。
先に出てきた、マークルブランチによって存在チェックが簡単にできるよーってのと関連してる?
トランザクションの詳細が必要なのではなく、その部分的ハッシュが得られれば、検証は十分可能ってこと?
とにかく、前のトランザクションの受け取りアドレスは自分のアドレスで、新しく作るトランザクションの送り元アドレスも自分のアドレスになり、一致する。
このことだけ検証できていれば、保有金額なんて関係ないのかもしれない。
誰かが誰かにどれだけのコインを送付したかは公開されるが、そのトランザクション情報は誰にもリンクされていない。これは証券取引で公表されるものと同等の情報レベルであり、個別のトランザクションの時間、数量およびティッカーシンボルは公開されたとしても、そのトランザクションの当事者自体は公開されないのである。
ティック情報が公開されても、プライバシーとは無関係。
ただ、いつ買っていつ売ったが分かるし、同時に買って同時に売ったも分かるから、
個人を特定できないまでも、個人の特定のヒントにはなりうるから気を付ける必要がある。
参考
更新履歴