Python

【Python】第9章第13回:ブロックチェーンとスマートコントラクト

本記事では、Pythonを使ってブロックチェーンの仕組みとスマートコントラクトの基本を学びます。さらに、簡単なブロックチェーンの実装例を通じて技術を実践的に理解します。

0. 記事の概要

この記事を読むメリット

  • ブロックチェーンの基礎を理解:仕組みや活用例を学べます。
  • スマートコントラクトの基本を習得:プログラムによる契約自動化の実装方法を知ることができます。
  • 実践的スキルを身につける:Pythonを使ったブロックチェーン構築に挑戦できます。

この記事で学べること

  • ブロックチェーンとスマートコントラクトの仕組み
  • Pythonでの簡単なブロックチェーンの実装
  • スマートコントラクトの構造と動作

1. ブロックチェーンとスマートコントラクトの基本

1.1 ブロックチェーンの仕組み

ブロックチェーンは、データを分散型ネットワーク上で管理する仕組みで、以下の特徴があります。

  • 分散型: 中央管理者が不要で、全ノードがデータを共有します。
  • 改ざん耐性: 各ブロックが暗号化されており、チェーン全体の整合性が保たれます。
  • 透明性: 取引記録が公開され、全ての参加者が確認可能です。

1.2 スマートコントラクトとは?

スマートコントラクトは、条件が満たされたときに自動的に実行されるプログラムで、主に以下の用途で使用されます。

  • 契約の自動化(例: 支払い条件の実行)
  • 分散型アプリケーション(DApps)の構築
  • 供給チェーンのトラッキング

2. Pythonを使ったブロックチェーンの簡単な実装例

2.1 ブロックのデータ構造

# ブロックのクラスを定義
import hashlib  # ハッシュ値生成用
import time  # タイムスタンプ用

class Block:
    def __init__(self, index, timestamp, data, previous_hash):
        self.index = index  # ブロック番号
        self.timestamp = timestamp  # タイムスタンプ
        self.data = data  # ブロックに含まれるデータ
        self.previous_hash = previous_hash  # 前のブロックのハッシュ値
        self.hash = self.calculate_hash()  # このブロックのハッシュ値

    def calculate_hash(self):
        # ハッシュ値を計算する
        data_to_hash = f"{self.index}{self.timestamp}{self.data}{self.previous_hash}"
        return hashlib.sha256(data_to_hash.encode()).hexdigest()

# ブロックの動作確認
genesis_block = Block(0, time.time(), "最初のブロック", "0")
print(f"ブロック1のハッシュ: {genesis_block.hash}")

2.2 チェーンの構築

# ブロックチェーンクラスを定義
class Blockchain:
    def __init__(self):
        self.chain = [self.create_genesis_block()]  # 初期ブロックをチェーンに追加

    def create_genesis_block(self):
        return Block(0, time.time(), "Genesis Block", "0")  # ジェネシスブロックの生成

    def get_latest_block(self):
        return self.chain[-1]  # 最後のブロックを取得

    def add_block(self, data):
        previous_block = self.get_latest_block()
        new_block = Block(len(self.chain), time.time(), data, previous_block.hash)
        self.chain.append(new_block)  # チェーンに新しいブロックを追加
        print(f"ブロック {new_block.index} がチェーンに追加されました。")
動作解説
  • Blockクラス: 各ブロックのデータ構造を定義します。
  • Blockchainクラス: ブロックチェーン全体の管理を担当します。
  • calculate_hash: 各ブロックのハッシュ値を計算し、改ざんを防ぎます。

3. スマートコントラクトの基本構造

3.1 簡単なスマートコントラクト例

スマートコントラクトは、条件が満たされた際に特定のアクションを実行するプログラムです。以下はEthereumのスマートコントラクトの基本例です。

# Solidity言語で書かれたスマートコントラクト例
pragma solidity ^0.8.0;

contract SimpleContract {
    string public message;

    constructor(string memory initMessage) {
        message = initMessage;  # 初期メッセージを設定
    }

    function updateMessage(string memory newMessage) public {
        message = newMessage;  # メッセージを更新
    }
}

4. 練習問題

以下の課題に挑戦してください。

  1. ブロックチェーンに複数のブロックを追加し、チェーン全体を出力してください。
  2. スマートコントラクトに新しい関数を追加して、条件付きでメッセージを更新する機能を実装してください。

5. 練習問題の解答と解説

問1の解答例

# ブロックチェーンに複数のブロックを追加
blockchain = Blockchain()
blockchain.add_block("2番目のブロック")
blockchain.add_block("3番目のブロック")

for block in blockchain.chain:
    print(f"ブロック {block.index}: {block.data}, ハッシュ: {block.hash}")

6. まとめ

本記事では、ブロックチェーンとスマートコントラクトの基礎を学びました。Pythonを使った簡単な実装例を通じて、ブロックチェーン技術の基本を理解できたと思います。次はこれを応用して、より高度なプロジェクトに挑戦してみましょう。