愛記システム概念設計:愛の行動レベル | 続・ティール組織 研究会のブログ

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

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

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

愛の行動レベル

まず、愛記によって愛の行動が見える化できる。具体的には、どの次元で、どのレベルの行動をどれだけして、どの行動が相手に受け取ってもらえて、どの行動が受け取ってもらえずだったかというのも見える。それにより、相手に愛を届けるための行動がより洗練されてくる。どうすれば愛が届けられるかが分かってくると言うことだ。どれだけ各次元の役割を担えているかが、見える化できるということだ。これらによって、愛の行動が見える化できて、結局は、アリペイがやってきたようなその人のスコアが算出されることになるのかもしれない。どれほどの美徳を積み上げてきたか、そして社会に貢献したか。それらがもし公開されれば、アリペイがやった姿に近しいものになるのかもしれない。

 

このように、”愛”とは1つ1つの行動に分解できうるのだ。だから、自分が今出来るレベルの愛の行動をしていけば良いだけなのだ。愛の行動レベル1~10までを下記に記す。このように、各レベルに愛の行動を細かく分けるところからスタートする。

 

これを概念設計するならば、どうすれば良いか?結局は、自分が今どのレベルに居るのか?ということが分からないと、どのレベルの行動を重点的にしていけば良いのかが分からなくなるということだ。これが”愛”とは良く分からない崇高なモノとして見られてしまう原因なのであろう。そう、自分の今のレベルが分かれば、そのレベルと同じかもしくは1つ上のレベルの行動を重点的にしていけば良いだけなのだ。

 

現時点では、何か愛の行動をしたとしよう。それがどのレベルの愛の行動なのかを、AIで自動認識してレベル分けし、相手に愛貨トークンを送るというのは難しい。まずもって、どのレベルの愛の行動なのかを見分けられない。この見分ける作業は、人間の感受性によるのだろう。それしか方法がないので、各自で愛の行動をするたびに、このレベルかな?と感覚値でレベル分けするしかない。それを相手に送付して、相手が納得して受け取るかどうか、それだけだ。そのようなやり取りをブロックチェーンSNS上でやりたい。

 

上記の要件に基づいて、愛貨トークンをやりとりするブロックチェーンSNSを設計するには、以下の概念を考慮できる。

  1. レベル付きトークン:

    • 愛貨トークンは、各取引において愛の行動レベルを示すプロパティを持つことができる。これにより、特定のトークンがどのような愛の行動に関連しているかが透明になる。
       
  2. スマートコントラクト:

    • 愛貨トークンの発行や転送を制御するスマートコントラクトを設計する。
    • 各レベルに対応するスマートコントラクトが存在し、そのコントラクトが特定の愛の行動に対応する。
       
  3. トークンの発行:

    • ユーザーが特定の行動を行った場合、それに基づいて対応するレベルの愛貨トークンが発行される。
    • レベルが高いほど、トークンに付与される価値や特権が増加する。
       
  4. トークンの転送:

    • ユーザーは発行された愛貨トークンを他のユーザーと転送できる。
    • トークンが転送されると、それが表す愛の行動がトークンに引き継がれる。
       
  5. 分散型台帳:

    • ブロックチェーン上で分散型台帳を維持し、トークンの取引履歴や所有権が透明かつ改ざんできない形で保存する。
       
  6. エスクローサービス:

    • トークンの発行や転送に際してエスクローサービスを導入し、信頼性を確保する。エスクローサービスは、トランザクションの信頼性やセキュリティを向上させるために利用される。以下はエスクローサービスの具体例である。
    • オンライン取引:

      • ユーザーがオンラインで商品を愛貨トークンにより取引する場合、エスクローサービスは購入者が支払いを行ったことと、出品者が商品を発送したことを確認する。商品が届いて購入者が満足した場合に、エスクローサービスが支払いを出品者に転送する。
    • フリーランスプロジェクト:

      • フリーランスプロジェクトにおいて、エスクローサービスはクライアントが愛貨トークンによる支払いを行い、フリーランサーがプロジェクトを完了することを確認する。プロジェクトが完了しクライアントが満足した場合、エスクローサービスが支払いをフリーランサーに転送する。
    • これらのエスクローサービスの例は、異なる取引やプロジェクトにおいて信頼性を確保し、当事者間の信頼関係を築くのに役立つ。
       

  7. プライバシー保護:

    • ユーザーのプライバシーを考慮し、必要に応じて匿名性を確保する手段を導入する。
       
  8. ウォレット機能:

    • ユーザーが所有する愛貨トークンを管理するためのウォレット機能を提供する。
    • 保管と安全性:

      • ウォレット機能は、ユーザーが所有する愛貨トークンを安全に保管するための手段を提供する。これは、プライベートキーの安全な保存やセキュアなトランザクション処理を含む。
    • 転送と交換:

      • ユーザーは愛貨トークンを他のユーザーと転送したり、必要に応じて交換したりすることができる。ウォレット機能は、これらのトークンの転送や交換を容易に行えるようにする。
    • 履歴と透明性:

      • ウォレット機能は、ユーザーの愛貨トークンの履歴を追跡し、透明性を提供する。ユーザーはどれだけのトークンを所有し、どのような取引が行われたかを確認できる。
    • トークンの受け入れと利用:

      • ウォレット機能は、愛貨トークンを受け入れるための手段や、トークンを使用して報酬を得るための機能を提供する。これにより、ユーザーはトークンを自身の目標やプロジェクトに活用できる。
    • 自動化とスマートコントラクト:

      • ウォレット機能がスマートコントラクトと統合されることで、特定の条件や目標達成時に自動的にトークンの処理が行われるようになる。これにより、愛貨の目標管理がより効率的になる。

このような設計により、愛貨トークンは異なる愛の行動レベルを表し、ユーザー間でそれらのトークンがやりとりされることで、愛の行動がブロックチェーン上で透明かつ奨励される仕組みが構築される。上記のことをふまえて、DApps側であるブロックチェーンSNSの設計例をやってみた。

from datetime import datetime
import hashlib
import json
import random

class Transaction:
    def __init__(self, sender, receiver, amount):
        self.sender = sender
        self.receiver = receiver
        self.amount = amount
        self.timestamp = datetime.now()

    def to_dict(self):
        return {
            'sender': self.sender,
            'receiver': self.receiver,
            'amount': self.amount,
            'timestamp': str(self.timestamp)
        }

    def __repr__(self):
        return f"Transaction(sender={self.sender}, receiver={self.receiver}, amount={self.amount}, timestamp={self.timestamp})"

class Block:
    def __init__(self, index, previous_hash, transactions, proof, timestamp=None):
        self.index = index
        self.previous_hash = previous_hash
        self.transactions = transactions
        self.proof = proof
        self.timestamp = timestamp or datetime.now()

    def to_dict(self):
        return {
            'index': self.index,
            'previous_hash': self.previous_hash,
            'transactions': [t.to_dict() for t in self.transactions],
            'proof': self.proof,
            'timestamp': str(self.timestamp)
        }

    def __repr__(self):
        return f"Block(index={self.index}, previous_hash={self.previous_hash}, transactions={self.transactions}, proof={self.proof}, timestamp={self.timestamp})"

class Blockchain:
    def __init__(self):
        self.chain = []
        self.pending_transactions = []
        self.create_block(proof=0, previous_hash='0')

    def create_block(self, proof, previous_hash=None):
        block = Block(index=len(self.chain) + 1, proof=proof, previous_hash=previous_hash or self.chain[-1].hash if self.chain else '0', transactions=self.pending_transactions)
        self.chain.append(block)
        self.pending_transactions = []
        return block

    def add_transaction(self, sender, receiver, amount):
        self.pending_transactions.append(Transaction(sender, receiver, amount))
        return self.last_block.index + 1

    @property
    def last_block(self):
        return self.chain[-1]

    def hash(self, block):
        block_string = json.dumps(block.to_dict(), sort_keys=True).encode()
        return hashlib.sha256(block_string).hexdigest()

    def is_chain_valid(self, chain):
        previous_block = chain[0]
        current_index = 1

        while current_index < len(chain):
            block = chain[current_index]

            if block.previous_hash != self.hash(previous_block):
                return False

            previous_block = block
            current_index += 1

        return True

class Wallet:
    def __init__(self, blockchain, user_id):
        self.blockchain = blockchain
        self.user_id = user_id

    def send_tokens(self, receiver_id, amount):
        sender_balance = self.get_balance()
        if sender_balance < amount:
            return False, "Insufficient balance"

        block_index = self.blockchain.add_transaction(self.user_id, receiver_id, amount)
        return True, f"Transaction will be added to Block {block_index}"

    def get_balance(self):
        balance = 0
        for block in self.blockchain.chain:
            for tx in block.transactions:
                if tx.receiver == self.user_id:
                    balance += tx.amount
                if tx.sender == self.user_id:
                    balance -= tx.amount
        return balance

    def transaction_history(self):
        history = []
        for block in self.blockchain.chain:
            for tx in block.transactions:
                if tx.sender == self.user_id or tx.receiver == self.user_id:
                    history.append(tx)
        return history

# テスト用のデモ
blockchain = Blockchain()
alice_wallet = Wallet(blockchain, "Alice")
bob_wallet = Wallet(blockchain, "Bob")

# トークンの送受信
alice_wallet.send_tokens("Bob", 50)
alice_wallet.send_tokens("Bob", 20)
bob_wallet.send_tokens("Alice", 30)

# 残高と取引履歴の表示
print(f"Alice's balance: {alice_wallet.get_balance()}")
print(f"Bob's balance: {bob_wallet.get_balance()}")
print("Alice's transaction history:")
for tx in alice_wallet.transaction_history():
    print(tx)
print("Bob's transaction history:")
for tx in bob_wallet.transaction_history():
    print(tx)
 

この例では、Blockchainクラスがブロックチェーンを管理し、Walletクラスがウォレット機能を提供している。ウォレットを使ってトークンの送受信が行われ、ブロックチェーンにトランザクションが追加される。また、残高や取引履歴を確認することもできる。

 

なお、このプログラムはブロックチェーン上でトランザクションを管理し、ウォレット機能を提供するバックエンド部分を担当している。フロントエンドでは、このバックエンドと通信してトランザクションを表示したり、ユーザーインターフェースを提供したりする必要があるが、フロントエンドはJavaScriptなどの言語を使用して実装されるのだろう。

 

 

いかがであろうか、まずは愛の行動レベルについて記載した。ここは、どうしても人間の感受性でしかレベル分けができない。それを加味した設計にせざるを得ないのだろう。