愛記システムの基本設計:DApps側である愛記システム 要件定義について④ | 続・ティール組織 研究会のブログ

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

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

先までは、"愛記"についての記載で、どのようにブロックチェーンSNSに組み込んで実装していけばよいのか、概念的なところからアプローチ方法を記載していった。概念設計としてはひとまず終えた。次は、フェデレーションモデル全体の基本設計といえるところまで、基本設計書に着手できるようなところまで、概念を具体化していきたい。そして、それにつながるDApps側である「愛記システム」を、Pythonプログラムで開発していきたい。

 

愛の行動のPL,BSを決算書として、個人単位、市町村単位、で公表するような愛記システムというものを考えている。愛の行動のデータベースはブロックチェーンのプログラムであり、日々の愛の行動による愛貨の移動を決算書にまとめていきたい。なお、市町村のブロックチェーンのプログラムは以前にも記載している。その市町村のブロックチェーンのプログラムにつながる愛記システムを、DApps側であるPythonプログラムとして設計したい。その場合、基本設計をどのような手順で進めていけばよいか、詳しく見ていこう。

 

愛記システムを設計するための基本手順を以下に示す。このシステムは、Pythonを用いて市町村のブロックチェーンと連携し、個人および市町村単位での愛の行動のデータを収集、記録し、決算書(PL、BS)として公表するものである。

基本設計のステップ

  1. 要件定義
  2. アーキテクチャ設計
  3. データベース設計
  4. API設計
  5. ブロックチェーンインターフェース
  6. 決算書の生成
  7. フロントエンド開発
  8. テストとデプロイ

基本設計の各ステップを順番に進めることで、ブロックチェーンとDAppsとして繋がる「愛記システム」の詳細な設計が可能になる。各ステップでは、関係者との協議やレビューを通じて設計内容を確定していくことが重要である。

1.要件定義

まず、基本設計の最初のステップである要件定義をしていきたい。どのような機能が必要か、どのような問題を解決するのかを洗い出したい。要件定義はシステム設計の最初の重要なステップであり、システムが解決するべき問題と、必要な機能を明確に定義するプロセスである。以下に、愛記システムのプログラムに必要な機能と解決すべき問題を列挙してみよう。

機能要件

  1. 愛の行動の記録

  2. 愛貨の移動の記録

  3. 決算書の生成

  4. 個人および市町村単位でのデータの集約

  5. データのブロックチェーンへの記録と取得

  6. 愛貨の管理

  7. ユーザー管理

  8. 通知機能

  9. レポート機能

  10. ダッシュボード

非機能要件

  1. セキュリティ

  2. 可用性

  3. パフォーマンス

  4. スケーラビリティ

  5. ユーザビリティ

  6. コンプライアンス

解決すべき問題

  1. 透明性と信頼性の確保

  2. データの一元管理

  3. 愛の行動の促進

  4. 評価制度の確率

  5. データのセキュリティとプライバシーの保護

これらの要件を基に、愛記システムの基本設計を進めていくことが重要である。次のステップでは、これらの要件を具体的なアーキテクチャ設計に反映していくことになる。まずは、要件定義の解決すべき問題を一つずつクリアにしていきたい。

透明性と信頼性の確保

愛貨の取引と愛の行動の記録を透明にし、信頼性を確保することが重要だ。以下に、具体的な項目とその決定プロセスを記載する。

・透明性と信頼性の確保に必要な項目と決定プロセス

1. データの完全性と一貫性の保証

  • データの完全性すべての取引と愛の行動記録が正確かつ改ざんされていないことを保証する。

  • データの一貫性: システム全体でデータが統一されていることを確認する。

2. 取引の透明性の確保

  • 公開取引データ: 取引データを公開し、誰でも確認できるようにする。

  • 監査ログ: 取引や行動のすべての変更履歴を保持し、監査可能にする。

3. データのセキュリティとプライバシー保護

  • 暗号化: データの送受信時および保存時に暗号化を行い、データの安全性を確保。

  • アクセス制御: データへのアクセスを制御し、必要な権限を持つユーザーのみに限定。

4. 取引の正当性の確認

  • 署名の生成と検証: 取引データの署名を生成し、取引の正当性を検証。

  • 取引の検証: 各取引を検証し、不正行為や二重支出を防止。

これらの項目を詳細に決定し、実装することで、愛記システムの透明性と信頼性を確保することができる。各項目については、具体的な技術要件や設計仕様を定義し、システム開発の各フェーズで反映させることが重要である。

 

・データの完全性について

まずはデータの完全性についてから順番に見ていこう。

項目: 取引ID、日時、送信者、受信者、愛貨の量、取引の内容、署名、ハッシュ値というが、いままで概念設計で記載してきた愛記システム、愛貨のやりとり、愛記の決算書を振り返ってみて、取引データは、取引ID、日時、送信者、受信者、愛貨の量、取引の内容、署名、ハッシュ値だけでいいのか、もっとたくさんあるのではと思ったので、今一度、取引データを検証してみる。前回の続きを記載する。

・取引データの完全性を保証するための詳細な項目

  1. 取引ID (Transaction ID)

  2. 日時 (Timestamp)

  3. 送信者 (Sender)

  4. 受信者 (Receiver)

  5. 愛貨の量 (Amount of Love Tokens)

  6. 取引の内容 (Transaction Content

  7. 署名 (Signature)

  8. ハッシュ値 (Hash Value

  9. 取引ステータス (Transaction Status)

    • 取引が完了しているか、保留中か、取り消されているかなどのステータス情報。
    • 例: 「完了」「保留」「取り消し」。

      以下に、取引ステータスを含む取引システムの設計とプログラム例を示す。DApps側であるPythonプログラムと市町村のブロックチェーンプログラムの連携を具体的に進め、取引ステータスを含めることで、取引の状態を管理しやすくなる。

      ・DApps側のPythonプログラム

      取引データを受信し、取引ステータスを管理するPythonプログラムの例である。
      from flask import Flask, request, jsonify
      import hashlib
      import json
      from enum import Enum
      from ecdsa import VerifyingKey, NIST384p

      app = Flask(__name__)

      # 取引ステータスの定義
      class TransactionStatus(Enum):
          COMPLETED = "completed"
          PENDING = "pending"
          CANCELLED = "cancelled"

      # 取引のリスト
      transactions = []

      # トランザクションクラス
      class Transaction:
          def __init__(self, transaction_id, sender_id, recipient_id, amount, action_content, timestamp, signature, status):
              self.transaction_id = transaction_id
              self.sender_id = sender_id
              self.recipient_id = recipient_id
              self.amount = amount
              self.action_content = action_content
              self.timestamp = timestamp
              self.signature = signature
              self.status = status

          def to_dict(self):
              return {
                  "transaction_id": self.transaction_id,
                  "sender_id": self.sender_id,
                  "recipient_id": self.recipient_id,
                  "amount": self.amount,
                  "action_content": self.action_content,
                  "timestamp": self.timestamp,
                  "signature": self.signature,
                  "status": self.status.value
              }

          @staticmethod
          def from_dict(data):
              return Transaction(
                  transaction_id=data["transaction_id"],
                  sender_id=data["sender_id"],
                  recipient_id=data["recipient_id"],
                  amount=data["amount"],
                  action_content=data["action_content"],
                  timestamp=data["timestamp"],
                  signature=data["signature"],
                  status=TransactionStatus(data["status"])
              )

      # 取引の受信
      @app.route('/transactions', methods=['POST'])
      def receive_transaction():
          transaction_data = request.json

          # 署名の検証
          transaction = {key: transaction_data[key] for key in transaction_data if key != 'signature'}
          transaction_str = json.dumps(transaction, sort_keys=True).encode('utf-8')
          transaction_hash = hashlib.sha256(transaction_str).hexdigest()
          signature = bytes.fromhex(transaction_data['signature'])
          public_key_hex = transaction_data['sender_id']
          public_key = VerifyingKey.from_string(bytes.fromhex(public_key_hex), curve=NIST384p)

          if public_key.verify(signature, transaction_hash.encode('utf-8')):
              new_transaction = Transaction.from_dict(transaction_data)
              transactions.append(new_transaction)
              return jsonify({"status": "Transaction recorded", "transaction": new_transaction.to_dict()}), 201
          else:
              return jsonify({"status": "Invalid signature"}), 400

      # 取引の取得
      @app.route('/transactions', methods=['GET'])
      def get_transactions():
          return jsonify([t.to_dict() for t in transactions]), 200

      if __name__ == '__main__':
          app.run(port=5000)
       

      ・市町村のブロックチェーンプログラム

      市町村のブロックチェーンプログラムに取引データを保存し、取引ステータスを管理するRustの例である。
      use actix_web::{web, App, HttpServer, Responder, HttpResponse};
      use serde::{Deserialize, Serialize};
      use std::sync::{Arc, Mutex};

      #[derive(Serialize, Deserialize, Clone)]
      enum TransactionStatus {
          Completed,
          Pending,
          Cancelled,
      }

      #[derive(Serialize, Deserialize, Clone)]
      struct Transaction {
          transaction_id: String,
          sender_id: String,
          recipient_id: String,
          amount: f64,
          action_content: String,
          timestamp: String,
          signature: String,
          status: TransactionStatus,
      }

      struct AppState {
          transactions: Arc<Mutex<Vec<Transaction>>>,
      }

      async fn add_transaction(data: web::Data<AppState>, transaction: web::Json<Transaction>) -> impl Responder {
          let mut transactions = data.transactions.lock().unwrap();
          transactions.push(transaction.into_inner());
          HttpResponse::Created().json("Transaction added")
      }

      async fn get_transactions(data: web::Data<AppState>) -> impl Responder {
          let transactions = data.transactions.lock().unwrap();
          HttpResponse::Ok().json(&*transactions)
      }

      #[actix_web::main]
      async fn main() -> std::io::Result<()> {
          let transactions = Arc::new(Mutex::new(Vec::new()));
          let data = web::Data::new(AppState {
              transactions: transactions.clone(),
          });

          HttpServer::new(move || {
              App::new()
                  .app_data(data.clone())
                  .route("/transactions", web::post().to(add_transaction))
                  .route("/transactions", web::get().to(get_transactions))
          })
          .bind("127.0.0.1:8080")?
          .run()
          .await
      }

      この設計により、取引ステータスを含む愛記システムをDApps側のPythonプログラムと市町村のブロックチェーンプログラムで統合し、取引データの透明性と信頼性を確保することができる。

       

  10. 取引のカテゴリ (Transaction Category)

    • 取引の種類やカテゴリ。
    • 例: 「地域貢献」「家庭支援」「環境保護」。

      愛記の科目を具体的な行動や取引に関連付けて、レベル別に分類することで、より具体的で理解しやすいシステムを構築することができる。例えば、寄付や環境保護活動などの具体的な行動を、レベル1からレベル10までのレベルに分類することで、その行動の重要度や影響力を明確化し、より効果的な分析や評価が可能になる。このアプローチは、各部位の役割や行動の評価を明確化し、組織全体の機能性や効率性を向上させるのに役立つと考えられる。これにより、各部位や個人がどのような行動を行っているかを把握しやすくなり、必要に応じて改善や補強を行うことができる。
       

      愛記の決算書は、各生命体毎に作成する。ということは、第1次元:個人の決算書もあれば、第2次元:○○部署の決算書もあれば、第3次元:会社の決算書もあれば、第4次元:○○地域の決算書もあれば、第5次元:○○産業界の決算書もあり、結局は、第3次元:会社という生命体に属する従業員のそれぞれが、多次元で活動するのであり、多次元でそれぞれの生命体は様々な会社の従業員が集まっているのである。こう考えると、決算書の公表は、第3次元:会社という生命体の決算書のみだが、その際の愛記の集計する数字は、全従業員が多次元で活動しているそのすべてを会社として再集計することになるから、損益計算書の科目は、波動レベル1~10というレベル毎の科目となる。この理解を整理し、愛記の決算書の構造について具体化してみよう。

      ・決算書の多次元構造

      第1次元:Aさん個人の決算書

    • 対象: 個人の行動とその愛貨のやり取り。
    • 記録する項目:
      • 受取愛貨(各レベル別)
      • 減少愛貨(各レベル別)
      • 純資産(自己評価による)
      • 負債(申告愛貨)
         
    • 第2次元:△△部署の決算書

    • 対象: 部署単位での愛貨のやり取り。
    • 記録する項目:
      • 受取愛貨(各レベル別)
      • 減少愛貨(各レベル別)
      • 部署純資産(評価)
      • 部署負債(申告愛貨)
         
    • 第3次元:会社の決算書

    • 対象: ○○会社全体の愛貨のやり取り。
    • 記録する項目:
      • 受取愛貨(各レベル別)
      • 減少愛貨(各レベル別)
      • 会社純資産(評価)
      • 会社負債(申告愛貨)
         
    • 第4次元:△△地域の決算書

    • 対象: 地域単位での愛貨のやり取り。
    • 記録する項目:
      • 受取愛貨(各レベル別)
      • 減少愛貨(各レベル別)
      • 地域純資産(評価)
      • 地域負債(申告愛貨)
         
    • 第5次元:○○産業界の決算書

    • 対象: 産業界全体の愛貨のやり取り。
    • 記録する項目:
      • 受取愛貨(各レベル別)
      • 減少愛貨(各レベル別)
      • 産業界純資産(評価)
      • 産業界負債(申告愛貨)
    • ・愛記の決算書で使用する波動レベル

      波動レベル1~10

      各波動レベルでの具体的な行動や取引は次のように分類するとする:

    • Lv1:AIR(Root): 基本的言動の支援(例:ごみ出し、荷をもってあげる、簡単な手伝い)。
    • Lv2:AIS(Sacral): 自律協調の支援(例:時間厳守、美しいパス回し、傾聴する)。
    • Lv3:AIP(Solar Plexus): 自主性の支援(例:マネジメントする、全体計画を立てる、盛り上げる)。
    • Lv4:AIH(Heart): 勤勉性の支援(例:組織のための自己犠牲、不正をなくす、感情コントロールする)。
    • Lv5:AIT(Throat): 自己成長の支援(例:本音で話す、意義を与える、真理を追究する)。
    • Lv6:AII(Third Eye): 仲間平等意識の支援(例:心から愛し合う、カルマを知る、木火土金水のバランスをとる)。
    • Lv7:AIC(Crown): 伝承性の支援(例:次世代へ伝承、チャネリングする、運気に合わせる)。
    • Lv8:AIU(Universal): 統合性の支援(例:アカシックで繋がる、あらゆるものを許す、過去世を知る)。
    • Lv9:AIE(Earth Star): 超越性の支援(例:エゴの脱却、世界平和の追求、全なるものとの一体を求める)。
    • Lv10:AIM(Solar Matrix): 宇宙的な支援(例:物質性の脱却、テレポーテーション、神の領域に向かう)。
    • ・決算書の項目

      損益計算書(PL)

    • 収益(愛貨の減少を示す):
      • Lv1~Lv10の各レベルの愛貨の減少額
    • 費用(愛貨の受領を示す):
      • Lv1~Lv10の各レベルの愛貨の受領額
    • 純利益(収益 - 費用):
      • 各レベルの収益と費用の差分
         
    • 貸借対照表(BS)

    • 資産(未使用愛貨を示す):
      • 各レベルの未使用愛貨
    • 負債(申告愛貨を示す):
      • 各レベルの申告愛貨
    • 純資産(自己評価による純資産):
      • 各レベルの純資産
         
    • この構造に基づいて、愛記システムの決算書を作成することで、各次元の生命体がどのように愛貨をやり取りしているかを明確に把握できる。各次元ごとに異なる生命体が存在し、それぞれの活動が集約されて最終的に決算書に反映されることで、全体の動きを把握しやすくなる。

      そうすると、第3次元:会社として集約する愛貨の数字はどうなるのだろうか?各従業員は公私かからわず、自由に愛の行動をするのだから、どこまでが会社で、どこからプライベートでというのがわからないから、結局はすべて会社として集計するのだろうか。少し複雑になってきたので、整理してみよう。

      ・基本的な考え方

    • 個人の愛貨の行動: 個人が行うすべての愛の行動は、基本的には個人のものであり、個人の決算書に集計される。これにはプライベートな行動も含まれる。

    • 会社としての愛貨の行動: 会社の活動として行われる愛の行動は、会社の決算書に集計される。会社としての行動には、業務時間中の行動や会社主導のプロジェクトが含まれる。

    • 集計の範囲: 会社の決算書には、従業員が会社の名のもとに行った各次元の生命体での愛の行動のみが集計されるべきである。プライベートな各次元の生命体での行動は個人の決算書に集計される。これは公私フラグで各次元の生命体を分けて管理することで可能となる。

    • 具体的な集計方法

    • 個人の行動の記録:

      • 個人が行ったすべての愛の行動を記録する。
      • 各行動には、愛の行動のレベル、具体的な内容、取引ID、日時、送信者、受信者、愛貨の量、署名、取引ステータス、公私フラグなどが含まれる。
    • 会社としての行動の記録:

      • 会社として行った行動やプロジェクトを記録する。
      • 従業員が会社の名のもとに行った行動を集計する。(公のフラグの生命体活動のみ)
    • 実例での考察

      例えば、従業員が以下のような行動を行った場合を考える。

    • Aさんが「会社の業務時間中に地域の清掃活動に参加し、会社名義で10愛貨を受け取った」(公フラグ)。
    • Bさんが「休日に友人Cの引っ越しを手伝い、個人名義で8愛貨を受け取った」(私フラグ)。
    • この場合、

    • Aさんの行動は、会社の活動として記録され、会社の決算書に集計される。
    • Bさんの行動は、個人の活動として記録され、Bさんの個人決算書に集計される。
    • 集計例

      Aさんの行動(会社の決算書に集計)

    • 収益(愛貨の減少を示す)
      • Lv3:地域清掃活動:-10愛貨
    • 費用(愛貨の目標値を示す)
      • 省略
    • 純利益(収益 - 費用)
      • -10愛貨
    • 資産(未使用愛貨を示す)
      • なし
    • 負債(申告愛貨を示す)
      • 10愛貨
    • 純資産(自己評価による純資産)
      • -10愛貨
         
    • Bさんの行動(個人の決算書に集計)

    • 収益(愛貨の減少を示す)
      • Lv2:引っ越し手伝い:-8愛貨
    • 費用(愛貨の目標値を示す)
      • 省略
    • 純利益(収益 - 費用)
      • -8愛貨
    • 資産(未使用愛貨を示す)
      • なし
    • 負債(申告愛貨を示す)
      • 8愛貨
    • 純資産(自己評価による純資産)
      • -8愛貨
    • このようにして、個人と会社の行動を分けて記録し、それぞれの決算書に反映することで、愛貨のやり取りの透明性と正確性を保つことができる。

      ・基本設計の考え方

    • 多次元活動の記録:

      • 個人の行動は個人の愛記に記録される。
      • 会社としての行動は会社の愛記に記録される。
      • 第9次元の生命体(例:白浜海岸清掃プロジェクト・公フラグ)としての行動は、プロジェクトの愛記に記録されつつ、会社の愛記にも集約される。
    • 重複カウントの防止:

      • 同一行動を複数の決算書にカウントする際の重複を避けるため、各行動に一意の識別子を付与する。
      • これにより、同一行動が異なる次元でどのように評価されているかを追跡できる。
    • 集計の方法:

      • 個人、会社、プロジェクトの決算書には、それぞれの行動がどのように寄与しているかを示す。
      • 各決算書はその生命体の行動のみに焦点を当てるが、関連する行動が他の決算書にも反映される。
    • 設計手順

    • 各次元の生命体ごとにフラグをDApps側であるPythonプログラムに持たせておく。そして、各次元の生命体のメンバーとしてAさんが行動したとする。しかし、Aさんは会社の従業員としてその生命体のメンバーに入っていたので、公私フラグは公の方で立てる。こうして、各次元の各生命体ごとにフラグを持たせておけば、会社として全従業員の多次元の行動を集計できる。この設計をPythonプログラムで実装する方法を以下に示す。
       

      1. 要件定義

    • 各次元の各生命体ごとにフラグを持たせる
    • 行動の公私を区別する
    • 各次元ごとに愛記を集計し、会社としての集計も可能にする
       
    • 2. データモデルの設計

      以下のデータモデルを使って、各次元の各生命体ごとにフラグを持たせ、行動の公私を区別する。
      from datetime import datetime
      from typing import List, Dict

      class Action:
          def __init__(self, description: str, level: int, category: str):
              self.description = description
              self.level = level
              self.category = category

      class Transaction:
          def __init__(self, transaction_id: str, timestamp: datetime, sender: str, receiver: str, amount: float, action: Action, signature: str, dimension_flags: Dict[str, bool]):
              self.transaction_id = transaction_id
              self.timestamp = timestamp
              self.sender = sender
              self.receiver = receiver
              self.amount = amount
              self.action = action
              self.signature = signature
              self.dimension_flags = dimension_flags  # 各次元のフラグ(公私の区別を含む)

      class FinancialStatement:
          def __init__(self):
              self.transactions: List[Transaction] = []

          def add_transaction(self, transaction: Transaction):
              self.transactions.append(transaction)

          def generate_report(self):
              level_income = {level: 0 for level in range(1, 11)}
              level_expenses = {level: 0 for level in range(1, 11)}
              for tx in self.transactions:
                  if tx.receiver == "Company":
                      level_income[tx.action.level] += tx.amount
                  if tx.sender == "Company":
                      level_expenses[tx.action.level] += tx.amount
              total_income = sum(level_income.values())
              total_expenses = sum(level_expenses.values())
              net_income = total_income - total_expenses

              report = {
                  "total_income": total_income,
                  "total_expenses": total_expenses,
                  "net_income": net_income,
                  "level_income": level_income,
                  "level_expenses": level_expenses,
                  "transactions": [tx.__dict__ for tx in self.transactions]
              }
              return report
       

      3. フロントエンドの実装

      ユーザーが取引を入力するフォームを提供し、各次元の生命体ごとにフラグを立てられるようにする。

      from flask import Flask, request, jsonify
      import json
      from datetime import datetime

      app = Flask(__name__)

      transactions = []
      financial_statements = {
          "company": FinancialStatement(),
          "global_eco_activity": FinancialStatement(),
          "community_service": FinancialStatement(),
          "industry_contribution": FinancialStatement(),
          # 必要に応じて他の次元の生命体も追加
      }

      @app.route('/transactions', methods=['POST'])
      def receive_transaction():
          data = request.json
          action = Action(description=data['action']['description'], level=data['action']['level'], category=data['action']['category'])
          transaction = Transaction(
              transaction_id=data['transaction_id'],
              timestamp=datetime.fromisoformat(data['timestamp']),
              sender=data['sender'],
              receiver=data['receiver'],
              amount=data['amount'],
              action=action,
              signature=data['signature'],
              dimension_flags=data['dimension_flags']
          )
          
          transactions.append(transaction)
          for dimension, is_active in transaction.dimension_flags.items():
              if is_active:
                  financial_statements[dimension].add_transaction(transaction)
              if dimension == "company":
                  financial_statements["company"].add_transaction(transaction)

          return jsonify({"status": "Transaction recorded"}), 201

      @app.route('/reports/<dimension>', methods=['GET'])
      def get_report(dimension):
          if dimension in financial_statements:
              report = financial_statements[dimension].generate_report()
              return jsonify(report), 200
          else:
              return jsonify({"status": "Dimension not found"}), 404

      if __name__ == '__main__':
          app.run(port=5000)
       

      4. API仕様

    • エンドポイント:
      • POST /transactions: 取引の記録
      • GET /reports/<dimension>: 各次元の決算書の取得
    • リクエストボディ:
      {
        "transaction_id": "txn123",
        "timestamp": "2023-06-12T15:30:00",
        "sender": "UserA",
        "receiver": "Company",
        "amount": 10.0,
        "action": {
          "description": "ゴミ出しの手伝い",
          "level": 1,
          "category": "community_service"
        },
        "signature": "abc123",
        "dimension_flags": {
          "company": true,
          "global_eco_activity": false,
          "community_service": true,
          "industry_contribution": false
        }
      }
       
    • レスポンス:
      {
        "status": "Transaction recorded"
      }
       
    • 5. テストとデプロイ

    • 単体テスト: 各コンポーネントの機能テスト
    • 結合テスト: コンポーネント間の連携テスト
    • システムテスト: 全体の動作確認
    • デプロイ: サーバーへのデプロイと運用開始
    • これにより、各次元ごとの愛の行動をフラグで区別し、会社としての集計を行いやすくすることができる。各従業員が多次元で活動する際に、どの行動が会社として集計されるべきかを明確にし、公私の区別を行うことが可能である。
       

  11. 証拠データ (Proof Data)

    • 取引内容の証拠として提出される追加データ。
    • 例: 画像、動画、証明書。

      証拠データをブロックチェーンシステムに統合するために、以下のステップを踏んでDApps側のPythonプログラムで証拠データを処理し、トランザクションを生成・送信する。ここでは、取引内容の証拠として画像データを扱う。画像データをバイナリデータとして保存し、取引に関連付ける例を示す。

      ステップ 1: 証拠データの構造を定義する

      まず、証拠データの構造を定義する。ここでは、画像データのバイナリ形式とそのメタデータを含む構造体を定義する。
      from datetime import datetime
      import base64

      class ProofData:
          def __init__(self, file_name, file_type, file_data):
              self.file_name = file_name
              self.file_type = file_type
              self.file_data = file_data
              self.timestamp = datetime.utcnow()

          def to_dict(self):
              return {
                  "file_name": self.file_name,
                  "file_type": self.file_type,
                  "file_data": base64.b64encode(self.file_data).decode('utf-8'),
                  "timestamp": self.timestamp.isoformat()
              }

      ステップ 2: トランザクションに証拠データを追加する

      次に、トランザクション構造体に証拠データのフィールドを追加する。
      class Transaction:
          def __init__(self, transaction_id, sender, receiver, amount, proof_data=None):
              self.transaction_id = transaction_id
              self.sender = sender
              self.receiver = receiver
              self.amount = amount
              self.timestamp = datetime.utcnow()
              self.proof_data = proof_data

          def to_dict(self):
              return {
                  "transaction_id": self.transaction_id,
                  "sender": self.sender,
                  "receiver": self.receiver,
                  "amount": self.amount,
                  "timestamp": self.timestamp.isoformat(),
                  "proof_data": self.proof_data.to_dict() if self.proof_data else None
              }

      ステップ 3: 証拠データを含むトランザクションの生成

      証拠データを含むトランザクションを生成する。ここでは、画像ファイルを読み込み、トランザクションに含める例を示す。
      def create_transaction_with_proof(transaction_id, sender, receiver, amount, file_path):
          with open(file_path, "rb") as file:
              file_data = file.read()

          proof_data = ProofData(file_path, "image/png", file_data)
          transaction = Transaction(transaction_id, sender, receiver, amount, proof_data)
          return transaction

      if __name__ == "__main__":
          transaction = create_transaction_with_proof(
              "txn_123",
              "Alice",
              "Bob",
              100.0,
              "path/to/image.png"
          )

          # トランザクションを表示
          print(transaction.to_dict())

      ステップ 4: トランザクションの送信

      DApps側で生成されたトランザクションをブロックチェーンに送信する方法を示す。ここでは、HTTPリクエストを使用してトランザクションを送信する。
      import requests

      def send_transaction(transaction, signature):
          url = "https://secure-blockchain-node.example.com/transaction"
          headers = {"Content-Type": "application/json"}
          data = {
              "transaction": transaction.to_dict(),
              "signature": signature
          }

          response = requests.post(url, headers=headers, data=json.dumps(data))
          return response.json()

      if __name__ == "__main__":
          transaction, signature = create_transaction_with_proof(
              "txn_123",
              "Alice",
              "Bob",
              100.0,
              "path/to/image.png"
          )

          response = send_transaction(transaction, signature)
          print(response)


      この設計では、DApps側のPythonプログラムで証拠データを処理し、トランザクションを生成・送信する方法を示した。証拠データは画像データとして扱われ、トランザクションに関連付けられている。HTTPリクエストを使用してトランザクションをブロックチェーンに送信する。このアプローチにより、ブロックチェーンのスマートコントラクトはシンプルに保たれ、複雑なデータ処理はDApps側で行われる。

       

  12. ジオロケーションデータ (Geolocation Data)

    • 取引が行われた場所の地理情報。
    • 例: 緯度と経度のデータ。
  13. 関連取引ID (Related Transaction ID)

    • 関連する他の取引のID。
    • 例: チェーン取引や複数段階の取引における関連ID。
  14. メタデータ (Metadata)

    • 取引に関連する追加情報。
    • 例: 取引の優先度、取引のコメント。
  15. ゼロ知識証明 (Zero-Knowledge Proof)

    • 取引の正当性を第三者に証明するためのゼロ知識証明データ。
    • 例: zk-SNARKsやzk-STARKsの証明データ。
  16. 関連アクションID (Related Action ID)

    • 取引に関連する愛の行動の識別情報。
    • 例: アクションID。
  17. 取引費用 (Transaction Fee)

    • 取引にかかる手数料。
    • 例: 愛貨の量。
  18. 承認者情報 (Approver Information)

    • 取引を承認した個人または組織の情報。
    • 例: ユーザーID、公開鍵。
  19. 愛の行動レベル (Love Action Level)

    • 取引に関連する愛の行動のレベル。
    • 例: レベル1~10。
  20. 受信日時 (Received Timestamp)

    • 取引が受信者によって確認された日時。
    • 例: ISO 8601形式で記録された日時。

これらの項目を包括的に管理することで、愛記システムの透明性と信頼性を確保し、すべての取引と愛の行動が正確かつ改ざんされていないことを保証できる。各項目について詳細な仕様を定義し、システム全体で統一的に管理することが重要である。

 

 

いかがであろうか、まだ項目の途中だが、次回に続きを記載したい。