//tips
//unityblockchain導入
ブロックチェーンの仕組み理解の継続。
ブロックの改ざんは、改ざん箇所の後続に続くブロック全てを改ざんすれば可能であることは前回触れたが、改ざん箇所とその後続すべてを改竄している間に他の参加者が次のブロックを作成しており、複数ブロック作成vs次の一つのブロックの作成という競争になる。
プルーフオブワークの仕組みにより、一つのブロック作成にかかる時間は調整されており、他の参加者の数倍の計算能力を保有していない限り(全ブロックチェーン参加者の合計計算能力の51%)は改ざんは難しい。
テスト用の仮想通貨を無償で配布するサービスをfaucetと呼び、そこに自分用のアドレスを教えることで支払いを受けることができる。
この自分用のアドレスがwalletにあたり、毎回この支払い先アドレスは変わることになる。metamaskではその機能を代行してくれているよう。
Metamaskのアカウント番号は変わっていなさそうなので、こちらが公開鍵で、これにハッシュ関数をかけたものがアドレスとして使われていそう。
Walletで作成したアドレスをfaucetに渡すことで簡単にテスト通貨を受け取ることができる。私のオリジナル通貨PIPOもfaucetから出してもらっている。
Faucetに送金依頼したコインが自分のwalletで確認できるようになるには時間がかかり、この時間というのはtransactionとしてブロックに組み込まれ、ブロック生成競争が終了するまでの時間とそのブロックに後続のいくつかのブロックが追加されて改変される可能性が低くなるまでは確認できないよう。
ビットコインの送金の際にはtransaction fee がかかり、これはブロック生成者への報酬として渡される。このtransaction feeが高いものから早くブロックに組み込まれ処理されていくことになる。
ビットコインの支払いには先のように時間がかかることもあり、少額の日常的な利用には向いていなさそうに思えるが、その問題を解決するのが、ライトニングネットワークというもので、これは先にブロックチェーンとは異なる通信路を利用して、利用者間で通信を行い支払いを管理するもの。
コミットメントトランザクションとして管理される。これはブロックチェーンを用いないのでオフチェーンと呼ばれる。コミットメントトランザクションは最初にペイメントチャネルを開くときと閉じるときにブロックチェーンに登録する。
このようにブロックチェーンをベースにその上層にもう一つ別に構築されたシステムも存在する。一般的な利用を行う際にはこちらがメインになりそう。
トランザクションの詳細な情報は実際にブロックチェーンを管理するソフトウェア(Bitcoin Coreなど)が提供するRPCを用いて他のプログラムから呼び出せるようにしている。
Unityに組み込まれているのはこのソフトウェアから提供されているRPCを利用するプログラムであることが推測される。
また、RPCだけではなく、REST(representational state transfer)でWEBで使われる通信形態のHTTPを使って管理ソフトから様々な機能を呼び出すことができるよう。
RESTの場合、設定が必要であるが、各種プログラムだけでなく、WEBブラウザから管理ソフトの機能を呼び出せるという点でRPCと同じように活躍している。
ブロックチェーンの保有コイン残高の捉え方は独特で、UTXO「トランザクションにおける自分への支払いのうちまだ自分から他の人への支払いに使われていないもの」という自他支払いベースの差額という形で残高を捉える。
管理ソフトにRPCコマンドを入力するとjsonのような形式で情報が表示される。XMLだとXML構文を解析する必要がでてきて、プログラムのパフォーマンスが低下するのでjsonが使われていそう。
管理ソフトにコマンドを渡すプログラムを書き、連動させることができればプログラムからjsonデータ内容を受け取ることも、プログラムで作成したデータをjsonに置き換えて管理ソフト経由でブロックチェーンに反映させることもできる。
これが先のunityとinfuraの関係になりそう。
Jsonの形としては名前:値の連続を{}で囲んだものが一つのオブジェクトの塊となり、その塊を[]で囲んだものが配列処理内容となる。{}で一つのtransactionを表し、[]で一つのブロックを表すことができる。
このjsonの値の中に承認数confirmationsというものがあるが、これはブロックチェーンの末尾から数えて何番目のブロックに当たるかを表し、常に更新されるものとなっている。
このconfirmationsの値を参照して一定の値以上になったらtransactionは承認される仕組みがとられている。ビットコインの場合は6で承認となり、実際に送金処理が行われる。6ブロック分ということなので約1時間が送金にかかる時間とも言える。
pythonにて、秘密鍵と公開鍵のペアを記録するファイル、トランザクションを記録するファイル、ブロックチェーンを記録するファイルを作成できるようなので概要を確認する。
基本的にはpythonに取り込むモジュール機能を使用するよう。作ってみる。