Block Chain Python

【Python】ブロックチェーンの実装_1 クラスの定義

Block Chain

どうも、月見(@Suzuka14144156)です。

私は、ブロックチェーンに関する研究をしており、本ブログでは仮想通貨/暗号資産の情報を整理して発信しています。

今回は、Pythonでブロックチェーンを実際に実装していきたいと思います。

参考にした講座は以下のUdemyの講座です。

現役シリコンバレーエンジニアが教えるPythonで始めるスクラッチからのブロックチェーン開発入門
Facebookの仮想通貨LibraによりAmazon、Microsfot、IBMなどがブロックチェーン事業に参入し、その技術が再び脚光を浴びています。IoT、医療、不動産の分野でも期待される次世代の技術を学びましょう。

こちらの講座は、Pythonでスクラッチでブロックチェーンを実装するというものです。

Pythonの中級者以上の向けの講座となっています。

ブロックチェーンだけでなく、クラスを使ったコーディングを覚えたい方にもオススメの講座だと思います。

では早速ブロックチェーンを実装したいと思います。

ブロックチェーンの概要

ブロックチェーンとは、「取引履歴を暗号技術によって過去から1本の鎖のようにつなげ、正確な取引履歴を維持しようとする技術」です。

この技術の基礎となるのが、以下4つです。

  • timestamp
  • transactions
  • nonce
  • prev hash

prev hashに前回のブロックが生成したハッシュと格納することで、鎖のように連結していきます。

transaction には、送金履歴が記述されます。

time stampはブロックが生成された時間が記述されています。

nonceは、暗号通信で用いられる、使い捨てのランダムな値のことです。

ただ、文章だとわかりにくいので、実際にコードを書いてみます。

コード

import logging
import sys
import time


logging.basicConfig(level=logging.INFO, stream=sys.stdout)


class BlockChain(object):

    def __init__(self):
        self.transaction_pool = []
        self.chain = []
        self.create_block(0, 'init hash')

    def create_block(self, nonce, previous_hash):
        block = {
            'timestamp': time.time(),
            'transactions': self.transaction_pool,
            'nonce': nonce,
            'previous_hash': previous_hash
        }
        self.chain.append(block)
        self.transaction_pool = []
        return block

def pprint(chains):
    for i, chain in enumerate(chains):
        print(f'{"="*25} Chain {i} {"="*25}')
        for k, v in chain.items():
            print(f'{k:15}{v}')
    print(f'{"*"*25}')


if __name__ == '__main__':
    block_chain = BlockChain()
    pprint(block_chain.chain)
    block_chain.create_block(5, 'hash 1')
    pprint(block_chain.chain)
    block_chain.create_block(2, 'hash 2')
    pprint(block_chain.chain)

logging は、あるソフトウェアが実行されているときに起こったイベントを追跡するための手段です。

class BlockChain(object)を作成します。

その中に、以下四つをディクショナリーでもたせます。

  • timestamp
  • transactions
  • nonce
  • prev hash

timestampには、time()を使用します。

nonceとprev hashは引数で持ってきます。

transactionsは、self.transaction_poolの中身を持ってきます。

ブロックチェーンは、基本この四つの要素を持って、それをprev hashで前のブロックが生成したハッシュを持つことで、鎖のように連結する技術と言えます。

コメント

タイトルとURLをコピーしました