ブロックチェーンSNS概念設計:PoPアルゴリズム③ | 続・ティール組織 研究会のブログ

続・ティール組織 研究会のブログ

ティール組織が話題になっているが、具現化するにはどうしたらよいか?
その研究を続けるにあたり、さらに次の形態である、続・ティール組織なるものまで視野に入れ、具体的な施策・行動内容を研究・支援する会。

先までは、"愛記"についての記載で、どのようにブロックチェーンSNSに組み込んで実装していけばよいのか、概念的なところからアプローチ方法を記載していった。大まかな概念としてはひとまず終えた。次は、ブロックチェーンの概念設計といえるところまで、基本設計書に着手できるようなところまで、概念を具体化していきたい。

Proof of Place(PoP)アルゴリズム③

前回までをふまえて、さらに今回は、ブロックチェーンの承認者について記載したい。

各市町村で愛の行動をしたとすると、行動した人が相手に対して愛の行動をした!というメッセージと愛の行動レベルと愛貨を渡すというトランザクションを送信する。それを各市町村の代表者たちが承認すると、メインチェーンにデータが飛んでいき、相手にも通知される。メインチェーンにてしばらくデータは保存されているが、相手が愛の行動を受信します!というボタンを押せば、受信というトランザクションとしてメインチェーンにて承認依頼となっていく。それを最終承認するのがDpoSで完全ランダム選出されたメインチェーンでの最終承認者となる。最終承認者により承認されれば、愛貨が移動するという仕組み。この際、最終承認者は、各市町村にいる必要はなく、他の世界中の市町村に居ても良い。いわゆるマイニングに相当する行為であり、世界中のマイナーが承認を行うのと同じだ。ただし、各市町村での愛の行動をする人、受信する人というのは各市町村に居る必要があり、先まで記載してきたPoPのアルゴリズムで位置証明をおこなう。

 

この仕組みは、各市町村での愛の行動を追跡し、信頼性の高いデジタルアイデンティティを構築するために効果的な方法であろう。位置証明を行うPoPのアルゴリズムを利用して、参加者の行動を正確に記録し、愛貨の移動を透明かつ安全に管理できるようになる。他の市町村にいる最終承認者が、全体の安全性を確保する役割を果たすというのも興味深い点であろう。これがフェデレーションモデルである。

 

この際、最終承認者は、承認するのに報酬を要求する。その報酬を愛貨の減額ということで処理するとする。愛貨とは、各市町村に年初に申請して自己申告分の愛貨額をもらい、それを年間通じて相手に渡すことで減らすことを目指すという目標管理制度のようなものである。その愛貨が地域通貨となり、お金とは換金できず、しかもお金と逆の性質を持ち、最初から貰えてその後に減らすことを目指すという性質をもつ通貨である。この愛貨システムは、地域通貨としての役割と、目標管理制度としての側面を組み合わせることで、地域社会の活性化や個人の成長を促進する可能性がある。最終承認者による報酬要求という仕組みも、システム全体を維持するための動機付けとしてうまく機能していくだろう。

 

承認行為によって愛貨が減額される仕組みを導入することで、承認者にとって誘因となる可能性がある。愛貨の減額は、愛の行動そのものを行ったのと同等の効果を持つため、他の参加者に対する貢献を評価し報酬として得られることが期待される。この仕組みは、参加者がより積極的に承認行為に関与し、コミュニティ全体の活動や参加を促進する可能性がある。PoPのアルゴリズムによる報酬が、愛貨の減額という形であるため、通常のマイニングやステーキングと比較して、まったくお金にならない報酬と言える。しかし、これは独自の価値観や目的を持つ通貨である愛貨の性質に合致している。愛貨は通貨としての価値を持つだけでなく、むしろ減らすことで目標を達成しようとする制度の一環として位置付けられている。そのため、PoPのアルゴリズムによる報酬は、愛貨の性質に合致した形であり、愛の行動を促進するための誘因として機能する可能性がある。

承認行為の報酬率

なお、報酬率を設定する際には、バランスが重要であろう。報酬率が高すぎると、システムが持続可能でなくなる可能性がある。一方で、報酬が低すぎると、承認者にとって十分なインセンティブが生まれず、システムの活性化が困難になる可能性がある。報酬率は、愛貨の総量や承認者の数など、様々な要因によって異なるが、一般的には1%〜5%程度が妥当と考えられる。ただし、これはあくまで目安であり、具体的な状況に応じて調整する必要がある。また、報酬率が低い場合でも、他の利点やユーザーが得られる満足感などを考慮することも重要であろう。

 

以下は、最終承認者の愛貨の減額をするプログラム例である。プログラム内では、最終承認者が5%の愛貨を減額することで報酬を受け取る仕組みが組み込まれている。このプログラムは、承認者が愛貨を減額することでシステムへの参加を奨励する一方で、報酬率が高すぎないように設定されている。

from datetime import datetime
from hashlib import sha256
import random
import hashlib

# HBS署名生成クラス
class HashBasedSignature:
    def __init__(self, message):
        self.message = message

    def generate_signature(self, private_key):
        return sha256(self.message.encode()).hexdigest()

    @staticmethod
    def verify_signature(message, signature, public_key):
        return signature == sha256(message.encode()).hexdigest()

# トランザクションクラス
class Transaction:
    def __init__(self, municipality, location, love_action_level, amount, action_content):
        self.transaction_id = hashlib.sha256(str(random.getrandbits(256)).encode()).hexdigest()
        self.municipality = municipality
        self.timestamp = str(datetime.now())
        self.location = location
        self.love_action_level = love_action_level
        self.amount = amount
        self.action_content = action_content
        self.approval_target = None  # DPoSによる承認者
        self.signature = None
        self.location_hash = self.calculate_location_hash()

    def calculate_location_hash(self):
        # 位置情報のハッシュを計算
        return sha256(self.location.encode()).hexdigest()

    def generate_signature(self, private_key):
        # トランザクションのメッセージを作成
        message = f"{self.transaction_id}{self.municipality}{self.timestamp}{self.location}{self.love_action_level}{self.amount}{self.action_content}{self.location_hash}"
        # HBS署名を生成
        hbs = HashBasedSignature(message)
        self.signature = hbs.generate_signature(private_key)

    def verify_signature(self, public_key):
        # トランザクションのメッセージを作成
        message = f"{self.transaction_id}{self.municipality}{self.timestamp}{self.location}{self.love_action_level}{self.amount}{self.action_content}{self.location_hash}"
        # HBS署名を検証
        hbs = HashBasedSignature(message)
        return hbs.verify_signature(message, self.signature, public_key)

# キー生成
def generate_key():
    # この例ではHBSではキーペアは使用されないため、適当な値を返す
    return "private_key", "public_key"

# 量子耐性のあるゼロ知識証明に必要な関数をシミュレート
def simulate_quantum_resistant_zkp():
    # シミュレートした量子耐性のあるゼロ知識証明を返す
    return "Quantum Resistant ZKP Proof"

# 最終承認者の愛貨の減額をする関数
def decrease_love_currency(amount):
    # 5%の愛貨を減額する
    return amount * 0.95

# 承認者が承認行為を行う関数
def approve_transaction(transaction):
    # 承認者が5%の愛貨を減額する
    transaction.amount = decrease_love_currency(transaction.amount)
    print("Approved Transaction:", transaction.transaction_id, "New Amount:", transaction.amount)

# 安全な暗号鍵交換をシミュレートする関数
def simulate_secure_key_exchange():
    # 仮の安全な暗号鍵を生成
    secure_key = hashlib.sha256(str(random.getrandbits(256)).encode()).hexdigest()
    return secure_key

# 量子耐性のあるゼロ知識証明をシミュレートする関数
def simulate_quantum_resistant_zkp():
    # シミュレートした量子耐性のあるゼロ知識証明を返す
    return "Quantum Resistant ZKP Proof"

# セキュアな通信を行う関数
def secure_communication():
    # トランザクション生成
    transaction = Transaction("Tokyo", "Location1", 8, 100, "Action Content")
    # 承認者が承認行為を行う
    approve_transaction(transaction)

def main():
    # セキュアな通信を行う
    secure_communication()

if __name__ == "__main__":
    main()
 

このプログラムでは、decrease_love_currency関数で承認者の報酬として5%の愛貨を減額している。また、approve_transaction関数では、承認者が承認行為を行った後に報酬として愛貨が減額されるようになっている。

 

このプログラムは、愛貨の承認プロセスをシミュレートするためのもので、主に愛貨の取引に関連するトランザクションクラスや署名生成のためのクラスが含まれている。一方、前回のプログラムは、ブロックチェーンの構築と操作に関連している。ブロックチェーン、ブロック、およびブロックの追加方法を定義するクラスが含まれており、また、安全な通信のための署名生成と検証が行われている。両方のプログラムは、セキュアなトランザクション処理を行うための共通の基盤として、ハッシュベース署名(HBS)を使用している。これにより、データの改ざんや不正アクセスから保護されたセキュアな通信が可能になる。以下に、2つを組み合わせた例をやってみよう。


from datetime import datetime
from hashlib import sha256
import random
import hashlib

# HBS署名生成クラス
class HashBasedSignature:
    def __init__(self, message):
        self.message = message

    def generate_signature(self, private_key):
        return sha256(self.message.encode()).hexdigest()

    @staticmethod
    def verify_signature(message, signature, public_key):
        return signature == sha256(message.encode()).hexdigest()

# トランザクションクラス
class Transaction:
    def __init__(self, transaction_id, municipality, location, love_action_level, amount, action_content):
        self.transaction_id = transaction_id
        self.municipality = municipality
        self.timestamp = str(datetime.now())
        self.location = location
        self.love_action_level = love_action_level
        self.amount = amount
        self.action_content = action_content
        self.approval_target = None  # DPoSによる承認者
        self.signature = None
        self.location_hash = self.calculate_location_hash()

    def calculate_location_hash(self):
        # 位置情報のハッシュを計算
        return sha256(self.location.encode()).hexdigest()

    def generate_signature(self, private_key):
        # トランザクションのメッセージを作成
        message = f"{self.transaction_id}{self.municipality}{self.timestamp}{self.location}{self.love_action_level}{self.amount}{self.action_content}{self.location_hash}"
        # HBS署名を生成
        hbs = HashBasedSignature(message)
        self.signature = hbs.generate_signature(private_key)

    def verify_signature(self, public_key):
        # トランザクションのメッセージを作成
        message = f"{self.transaction_id}{self.municipality}{self.timestamp}{self.location}{self.love_action_level}{self.amount}{self.action_content}{self.location_hash}"
        # HBS署名を検証
        hbs = HashBasedSignature(message)
        return hbs.verify_signature(message, self.signature, public_key)

# キー生成
def generate_key():
    # この例ではHBSではキーペアは使用されないため、適当な値を返す
    return "private_key", "public_key"

# 量子耐性のあるゼロ知識証明に必要な関数をシミュレート
def simulate_quantum_resistant_zkp():
    # シミュレートした量子耐性のあるゼロ知識証明を返す
    return "Quantum Resistant ZKP Proof"

# 最終承認者の愛貨の減額をする関数
def decrease_love_currency(amount):
    # 5%の愛貨を減額する
    return amount * 0.95

# 承認者が承認行為を行う関数
def approve_transaction(transaction, blockchain):
    # 承認者が5%の愛貨を減額する
    transaction.amount = decrease_love_currency(transaction.amount)
    print("Approved Transaction:", transaction.transaction_id, "New Amount:", transaction.amount)

    # ブロックチェーンにトランザクションを追加
    proof_of_place = get_proof_of_place()
    proof_of_history = get_proof_of_history()
    blockchain.add_block(transaction, proof_of_place, proof_of_history)

# 安全な暗号鍵交換をシミュレートする関数
def simulate_secure_key_exchange():
    # 仮の安全な暗号鍵を生成
    secure_key = hashlib.sha256(str(random.getrandbits(256)).encode()).hexdigest()
    return secure_key

# 量子耐性のあるゼロ知識証明をシミュレートする関数
def simulate_quantum_resistant_zkp():
    # シミュレートした量子耐性のあるゼロ知識証明を返す
    return "Quantum Resistant ZKP Proof"

# 位置情報の証明を生成する関数
def get_proof_of_place():
    # 仮の位置情報を返す
    latitude = random.uniform(35.6, 35.7)
    longitude = random.uniform(139.7, 139.8)
    return latitude, longitude

# 履歴の証明を生成する関数
def get_proof_of_history():
    # ここではVDFを用いて計算に時間がかかるようにシミュレート
    return "Proof of History"

# ブロックチェーンクラス
class Blockchain:
    def __init__(self):
        self.chain = [self.create_genesis_block()]

    def create_genesis_block(self):
        return Block(0, "0", datetime.now(), "Genesis Block", "Proof of Place", "Proof of History", "Quantum Resistant ZKP Proof")

    def get_latest_block(self):
        return self.chain[-1]

    def add_block(self, transaction, proof_of_place, proof_of_history):
        index = len(self.chain)
        previous_block = self.get_latest_block()
        quantum_resistant_zkp = simulate_quantum_resistant_zkp()  # 量子耐性のあるゼロ知識証明をシミュレート
        new_block = Block(index, previous_block.hash, datetime.now(), transaction, proof_of_place, proof_of_history, quantum_resistant_zkp)
        self.chain.append(new_block)

# ブロッククラス
class Block:
    def __init__(self, index, previous_hash, timestamp, transaction, proof_of_place, proof_of_history, quantum_resistant_zkp):
        self.index = index
        self.previous_hash = previous_hash
        self.timestamp = timestamp
        self.transaction = transaction
        self.proof_of_place = proof_of_place
        self.proof_of_history = proof_of_history
        self.quantum_resistant_zkp = quantum_resistant_zkp
        self.hash = self.calculate_hash()

    def calculate_hash(self):
        hash_data = (
            str(self.index) +
            str(self.previous_hash) +
            str(self.timestamp) +
            str(self.transaction.transaction_id) +
            str(self.transaction.municipality) +
            str(self.transaction.timestamp) +
            str(self.transaction.location) +
            str(self.transaction.love_action_level) +
            str(self.transaction.amount) +
            str(self.transaction.action_content) +
            str(self.transaction.location_hash) +
            str(self.proof_of_place) +
            str(self.proof_of_history) +
            str(self.quantum_resistant_zkp)
        )
        return sha256(hash_data.encode()).hexdigest()

# セキュアな通信を行う関数
def secure_communication(blockchain):
    # トランザクション生成
    transaction_id = hashlib.sha256(str(random.getrandbits(256)).encode()).hexdigest()
    transaction = Transaction(transaction_id, "Tokyo", "Location1", 8, 100, "Action Content")
    private_key, public_key = generate_key()

    # 署名生成
    transaction.generate_signature(private_key)
    print("Signature generated:", transaction.signature)

    # 署名検証
    is_valid = transaction.verify_signature(public_key)
    print("Signature verified:", is_valid)

    # 承認行為を行う
    approve_transaction(transaction, blockchain)

def main():
    # ブロックチェーンのインスタンスを作成
    my_blockchain = Blockchain()

    # セキュアな通信を行う
    secure_communication(my_blockchain)

if __name__ == "__main__":
    main()
 

このプログラムでは、ブロックチェーンにトランザクションを追加する際に、承認者が5%の愛貨を減額する機能が追加されている。また、トランザクションの署名生成と検証、ブロックの生成と追加も行われている。

 

 

これでPoPアルゴリズムは、エネルギー効率とセキュリティを向上させることができるのだろう。承認者も愛貨の減額という報酬にて誘因となり、承認行為を継続してくれるであろうと期待したい。次回、もう少し詳しく突き詰めていきたい。