前提知識
・ハッシュ関数
・暗号化の仕組み
■ブロックチェーンとは
ブロックチェーン(Block Chain)とは分散型台帳ともいい、分散型ネットワーク上で暗号化技術 を使用して取引情報(トランザクション)などのデータを記録する手法です。
ブロックチェーン特徴は、①データの改ざんが難しい ②大規模なシステムは必要ない ③ システムがダウンしにくい といったことが挙げられます。詳細はこちら でも説明しております。
■ブロックチェーンの構造
ブロックチェーンは以下のような構造になっております。一つのブロックの中にはヘッダと数千件のトランザクションの情報(ビットコインの場合、1ブロックは1MBで約4000件のトランザクション)が入っており、ヘッダは以下3つの情報を合わせた情報のハッシュ値 となります。
① 前のブロックのヘッダのハッシュ値 (暗号化されたもの)
② トランザクションのハッシュ値
③ ナンス
ナンスというのはNumber used once(一度だけ使用される数字)の略で、ヘッダのハッシュ値の上何桁かは0であることが決められているため、①と②と③を合わせて上何桁かが0になる様に調整する役割を持っているのがナンスで、
ナンスを見つけ出す行為がマイニング と呼ばれます(ナンスは総当たりで探し出します)。0の桁数が多いほどナンスを見つけるのが難しくなります(これをdifficultyという)ので、一つのブロックを作成するのに10分程度かかるように桁数が定期的に調整されます。
従ってコンピュータの性能が高くなるほど桁数が大きくなっていきます。
この様に、前ブロックの情報を受け取り、そこから自分のブロックのハッシュを作成して次のブロックに受け渡す事で、情報がチェーンの様に繋がっていることからブロックチェーンと言われいます。
また情報を受け渡す過程で、仮に改ざんを行おうとしたとしてもハッシュ値の上桁が0にならなくなる為、改ざんは難しいとされています。
■コンセンサスアルゴリズムとは
コンセンサスアルゴリズムとは、ナンスが正しいかどうかを皆で確認する手法のことです。コンセンサスアルゴリズムには複数の種類があり、
ビットコインでも用いられているのが「Proof of work」といって、一つのブロックのナンスを求めるのに世界中の人が同時に計算を行い、最も早く計算し終えた人が報酬を貰える仕組みになっています。
ただしこれはたくさんの人が同時に計算を行うので、電力の無駄であるという指摘もあります。
その他の手法としてイーサリアムがとっているのは「Proof of Stake」といって、資金額が大きい人が報酬を貰えるという仕組みもあります。
■pythonによる実装例
動作イメージを持つためのサンプルコードです。
import json
import hashlib
import time
chain = []
transactions = []
transaction_index = 0
# トランザクション生成
transactions.append({
'transaction_index': transaction_index,
'sender' : 'nobunaga',
'recipient' : "hideyoshi",
'amount' : 1,})
transaction_index += 1
# proof_of_work実行
nonce = 0
while True:
# ブロック生成
block = {
'index' : len(chain),
'timestamp' : time.time(),
'transactions' : transactions,
'nonce' : nonce,
'previous_hash': "00006147ea34b20e9a34f1",} # 前のブロックのハッシュ,桁数省略
# ハッシュ演算
block_string = json.dumps(block).encode()
current_hash = hashlib.sha256(block_string).hexdigest() # ハッシュ値,次のブロックに引き渡す
if current_hash[:4] == "0000":break # 生成したハッシュの上四桁が0になるまで実行
nonce += 1
chain.append(block) # ブロック追加
print(block) # ブロック出力
サブチャンネルあります。⇒ 何かのお役に立てればと