見出し画像

渋谷でPythonでブロックチェーンを実装

こんばんは。以前からAidemyさん(もはや説明不要の、10秒で始めるプログラミング学習サービスがキャッチフレーズのオンライン学習サービス)を活用させて頂いてましたが、今回、Aidemyのサービスの一つであるエヴァンジェリストの名刺が届いたので、私なりのAidemyの使い方をまとめてみようと思います。

まず、オススメのコースですが、

Python入門と、https://aidemy.net/courses/3010

ブロックチェーン基礎コースです。https://aidemy.net/courses/7000

どちらも無料ということもありますが、プログラミングを始めて体験される方にとっては、やりやすいコースとなっています。Progateと合わせて学習することで理解が深まることもあるでしょう。Pythoh自体はWebアプリだけでなく、Beautiful SoupとPython3スクレイピングや機械学習でKerasなどのフレームワークを用いた時に活用するなど、使用シーンは増えています。

今回は、ブロックチェーンのブロックの生成でPythonを活用したコードがAidemyのコースで実行できたりします(環境構築不要)*ただ、実際の環境では Solidity というプログラミング言語によって簡単に実装されているのがほとんどです。

ブロックチェーン基礎では大まかに、

①マイニングにより新しいブロックを作成する。
②トランザクション(取引情報)をブロックに追加する。
③現在のチェーンを確認する。
④チェーンが正しいかどうか検証する。
⑤コンセンサスアルゴリズムによりブロックを承認する。
この5つを実装します。

そしてさらにブロックチェーンの型となるブロックチェーンクラスを作成していきます。クラスには6つの関数を用意しており、それぞれの関数は

__init__: ブロックチェーンの初期設定を行います。
create_block : 新しいブロックを追加します。
create_transaction : 新しい取引を追加します。
create_node : P2Pで通信する他のノードを追加します。
valid_chain : チェーンが正しいかどうか確認する。
resolve_conflicts : コンセンサスアルゴリズムを実行します。
となっています。

class Blockchain:
    def __init__(self):
        # ここに初期値を定義してください
        self.chain = []
        self.current_transactions = []
        self.transaction_index = 0
              
    # マイニングにより新しいブロックを作成する
    def create_block(self, nonce, previous_hash):
        pass
    
    # トランザクション(取引情報)をブロックに追加する
    def create_transaction(self, sender, recipient, amount):
        pass
    
    # 現在のチェーンを確認する
    def create_node(self, node):
        pass

    # チェーンが正しいかどうか検証する
    def valid_chain(self, chain):
        pass
    
    # コンセンサスアルゴリズムによりブロックを承認する
    def resolve_conflicts(self, block_list):
        pass

blockchain = Blockchain()
blockchain.chain

上記をPython上で実行すると①マイニングにより新しいブロックを作成するまでが実装できます。

次に、コントラクトの話に移ります。コントラクトは、ブロックチェーンでルールを作るものらしいです。主にSolidityで実装されていますが、こちらは、また別の記事で触れていきたいと思います。

今回は、上記の2つのコースに触れましたが、AidemyはAI+Academyが語源となっており、他にもネットワーク分析やディープラーニング、機械学習など、これから発展いきそうな技術も多く扱っているのでオススメです。



この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

1

kaji_____

渋谷界隈のブロガー
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。