どうも、月見(@Suzuka14144156)です。
私は、ブロックチェーンに関する研究をしており、本ブログでは仮想通貨/暗号資産の情報を整理して発信しています。
今回は、Pythonでブロックチェーンを実際に実装していきたいと思います。
参考にした講座は以下のUdemyの講座です。
こちらの講座は、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で前のブロックが生成したハッシュを持つことで、鎖のように連結する技術と言えます。
コメント