先までは、"愛記"についての記載で、どのようにブロックチェーンSNSに組み込んで実装していけばよいのか、概念的なところからアプローチ方法を記載していった。大まかな概念としてはひとまず終えた。次は、ブロックチェーンの概念設計といえるところまで、基本設計書に着手できるようなところまで、概念を具体化していきたい。
愛記システムのシステム評価について
システム評価とは、つまりは、このシステムを導入して成功だったか失敗だったかという効果検証という意味だ。概念設計をする上で必ず抑えておくべきポイントということだ。それには各項目があり、それぞれの項目を見ていくことで、その結果が得られる。そのシステム評価項目を1つずつ見ていきたい。
システム構築の品質評価のポイント1:理解可能性(Understandability)
システム構築の品質評価のポイント2:完全性(Completeness)
システム構築の品質評価のポイント3:簡潔性(Conciseness)
システム構築の品質評価のポイント4:移植性(Portability)
システム構築の品質評価のポイント5:一貫性(Consistency)と構造化の度合い
システム構築の品質評価のポイント6:保守性(Maintainability)
システム構築の品質評価のポイント7:試験性(Testability)
システム構築の品質評価のポイント8:ユーザビリティ(Usability)
システム構築の品質評価のポイント9:効率性(Efficiency)
システム構築の品質評価のポイント10:セキュリティ(Security)
システム構築の品質評価のポイント6:保守性③(Maintainability)
システム構築の評価に繋がる保守性であるが、当方は、ブロックチェーンSNSとDapps側の愛記システムを、”愛貨”というトークンで創っていくということを考えている。そのために、APIによる通信ではなく、フェデレーションモデルを検討したい。
最初は一つの市町村における所得税減税や法人税減税サービスにつながるブロックチェーンSNSを考慮しているのだが、ゆくゆくは、他の市町村も同様に”愛貨”をやり取りするブロックチェーンSNSを導入したい!という声があがるだろう。さらには、世界中の各都市が同様に手をあげるかもしれない。そうなると、各市町村のブロックチェーンSNSが群雄割拠することになり、それらブロックチェーン間をブリッジして情報をやりとりすることも出てくるだろう。そうなると、各市町村のブロックチェーンを跨いで承認行為を行うようなフェデレーションモデルが必要になってくるということだ。
そして、フェデレーションが承認を行う際に、データやトランザクションにアクセスして必要な合意形成を行うことで、各市町村のブロックチェーンが提供する様々なサービスや機能を統合し、連携させる。このような仕組みを設けておけば、ある市町村のブロックチェーンSNSと、別の市町村のブロックチェーンSNSとを選択しながらユーザーは行動していけるということも可能となる。
スケーラビリティの改善としては、例えば、シャーディングは、ネットワークを複数の小さな区画(シャード)に分割し、各シャードで並行してトランザクションを処理することでスケーラビリティを向上させる。各シャードは独自の状態を保持し、トランザクションを処理する。他には、ガスフィーはトランザクションの手数料を管理する仕組みであり、最適化されることでトランザクションの処理が効率的に行われる。ガスの計算方法や使用方法を最適化することが考えられる。
具体的な例として、各市町村のブロックチェーンが自身のレイヤー1で独立して運用し、フェデレーションがメインチェーンでトランザクションの承認を行う場合の簡単なプログラム例を示す。
# メインチェーン(フェデレーションが存在する場所)
class MainChain:
def __init__(self):
self.city_blockchains = []
def add_city_blockchain(self, city_blockchain):
self.city_blockchains.append(city_blockchain)
def process_transaction(self, transaction):
# トランザクションの処理を行う(フェデレーションによる承認)
print(f"Transaction processed by the federation: {transaction}")
# 各市町村のブロックチェーン
class LocalBlockchain:
def __init__(self, city_name):
self.city_name = city_name
self.transactions = []
def add_transaction(self, transaction):
self.transactions.append(transaction)
# メインプログラム
if __name__ == "__main__":
# メインチェーンの作成
main_chain = MainChain()
# 各市町村のブロックチェーンの作成
city_a_blockchain = LocalBlockchain("City A")
city_b_blockchain = LocalBlockchain("City B")
# メインチェーンに各市町村のブロックチェーンを追加
main_chain.add_city_blockchain(city_a_blockchain)
main_chain.add_city_blockchain(city_b_blockchain)
# トランザクションの追加
city_a_blockchain.add_transaction("Transaction from City A")
city_b_blockchain.add_transaction("Transaction from City B")
# メインチェーンでトランザクションの処理(フェデレーションによる承認)
for city_blockchain in main_chain.city_blockchains:
for transaction in city_blockchain.transactions:
main_chain.process_transaction(transaction)
このプログラム例では、各市町村のブロックチェーンが自身のトランザクションを処理し、その後、フェデレーションがメインチェーンでこれらのトランザクションを承認する流れを示している。
Solana Blockchainについて
Solanaは独自のコンセンサスアルゴリズム「PoH(プルーフ・オブ・ヒストリー)」を採用することにより、トランザクションの高速化を実現している。その処理速度の速さから「世界で初めてのウェブスケール・ブロックチェーン」を謳っている。
Solanaの特徴
Solanaは標準的なビザンチン将軍問題の解決を目指すProof of Stakeブロックチェーンだが、特筆すべきトランザクション処理能力を持っており、およそ200のノードで一秒あたり5万のトランザクションを行えるとしている。これは現CEOのAnatoly Yakovenko氏が2017年に提唱したProof of Historyという、信頼なきノード同士で時間を同期する手法の採用など、8つのイノベーションにより実現したものである。
8つのイノベーション
- Proof of History (POH) — コンセンサスにおける時間同期。
- Tower BFT — POHに最適化されたビザンチン将軍問題解決
- Turbine — ブロックの伝搬プロトコル
- Gulf Stream — Mempoolレスなトランザクションフォワードプロトコル
- Sealevel — スマートコントラクトを並列で実行
- Pipelining — 認証最適化のためのトランザクション処理ユニット
- Cloudbreak — パラレルスケーリングのアカウントデータベース
- Archivers — 分散型台帳保管
独自のコンセンサスアルゴリズム
Yakovenko氏によるとSolanaの最大の目標は「ネットワークが個々のノードのパフォーマンスに並ぶこと」であり、このためにはネットワーク内の通信を最適化することが必要不可欠である。PoHはSolana独自の特徴で、通信の省略に大きく貢献する。時間をバリデーター間で同期させることにより、ネットワークの通信状態に関係なく、ネットワーク全体としては処理が進むことになる。これによって、Solanaのバリデーターは通信を省略しながらもステーキングに参加することが可能になる。
”愛貨”をトークンとするブロックチェーンについて
Solanaの仕組みは魅力的であり、”愛貨”をトークンとする当方のブロックチェーンや愛記システムも同様な仕組みとすることを検討したい。Solanaは、トランザクションの処理にシャードやセカンドレイヤーを利用することなく、すべての処理がオンチェーンで行われるため、透明性が担保される。また、開発者やプログラムはSolanaの単一のグローバルな状態にアクセスできるため、プロジェクト間のコンポーザビリティが向上する。極めて保守性が高いといえる。”愛貨”もこのような状態を目指したい。
Gulf StreamとTurbineは、ブロックチェーンの効率向上を図るための技術であり、特にPoH(Proof of History)と組み合わせて使用されることがある。これらの技術は、ブロックの伝搬やトランザクションのフォワードなど、通信やネットワークの面での最適化に焦点を当てている。愛記システムにこれらの技術を組み込むための簡単なプログラム例を示す。ただし、これは概念的な例であり、実際のシステムに導入する際には詳細な調整とセキュリティ対策が必要である。
# Gulf Stream: Mempoolレスなトランザクションフォワードプロトコル
class GulfStream:
def forward_transaction(self, transaction):
# トランザクションを直接ブロックに追加する処理
print(f"Transaction forwarded using Gulf Stream: {transaction}")
# Turbine: ブロックの伝搬プロトコル
class Turbine:
def propagate_block(self, block):
# ブロックを効率的にネットワーク上で伝搬させる処理
print(f"Block propagated using Turbine: {block}")
# 愛記システム
class AikiSystem:
def __init__(self, gulf_stream, turbine):
self.gulf_stream = gulf_stream
self.turbine = turbine
def process_transaction(self, transaction):
# トランザクションを処理するロジック(例:移行処理)
print(f"Transaction processed by Aiki System: {transaction}")
# Gulf Streamを使用してトランザクションをブロードキャスト
self.gulf_stream.forward_transaction(transaction)
def process_block(self, block):
# ブロックを処理するロジック
print(f"Block processed by Aiki System: {block}")
# Turbineを使用してブロックをネットワーク上で伝搬
self.turbine.propagate_block(block)
# メインプログラム
if __name__ == "__main__":
# Gulf StreamとTurbineのインスタンスを作成
gulf_stream = GulfStream()
turbine = Turbine()
# Aiki Systemのインスタンスを作成し、Gulf StreamとTurbineを注入
aiki_system = AikiSystem(gulf_stream, turbine)
# トランザクションの処理
aiki_system.process_transaction("Sample Transaction")
# ブロックの処理
aiki_system.process_block("Sample Block")
この例では、Aiki SystemがGulf StreamとTurbineを使用してトランザクションとブロックを効率的に処理および伝搬させる流れを示している。ただし、これは概念的なものであり、具体的なシステムにはさまざまな詳細が組み込まれることが予想される。
一方、Solana Program Libraryには、トークンプログラムというさまざまなプログラムが含まれている。ソラナのイーサリアムERC-20に相当し、最も人気のあるものの1つである。トークンプログラムを使用すると、NFTを含むSolanaブロックチェーン上のトークンを操作できる。このプログラムを使用すると、トークンの作成、転送、書き込み、クエリなど、さまざまなことができる。ネイティブプログラムとプログラムライブラリプログラムの間で、Solana開発の旅を始めるためにいくつかの本当に興味深いdAppを構築することができる。
図(プログラム)の左上から、カスタムRust、C、およびC ++プログラムを作成してブロックチェーンに直接デプロイできる最初の開発ワークフローを確認できる。これらのプログラムが展開されると、それらとの通信方法を知っている人なら誰でもそれらを使用できる。これらのプログラムと通信するには、利用可能なクライアントSDK(またはCLI)のいずれかを使用してdAppを記述する。これらはすべて、内部でJSON RPCAPIを使用する。2番目の開発ワークフローは、左下(クライアント)から始まるdApp側で、デプロイされたプログラムと通信するdAppを作成できる。アプリは、クライアントSDKを介してこれらのプログラムに指示を含むトランザクションを送信し、ウォレット、DEXなどのさまざまなアプリケーションを作成できる。これら2つの要素が連携して、相互に通信して状態を更新し、ブロックチェーンにクエリを実行できるdAppとプログラムのネットワークを作成する。
愛記システムにおいても、直接デプロイ可能なワークフローを設計することは可能である。ただし、具体的なワークフローの構築にはいくつかのステップが関与する。
-
言語の選択: 愛記システムで使用したい言語を選択する。ソラナがRust、C、およびC++をサポートしているように、愛記システムでもサポートする言語を選ぶ必要があるのだろう。
-
スマートコントラクトの開発: 選択した言語でスマートコントラクトを開発する。これは、トランザクションの処理ロジックやブロックの操作を記述する部分です。
-
スマートコントラクトのデプロイ: スマートコントラクトを愛記システム上にデプロイします。これは、スマートコントラクトが実行される環境におけるデプロイメントプロセスを指します。
-
トランザクションの処理: ユーザーまたはアプリケーションがスマートコントラクトにトランザクションを送信し、処理が行われる流れを確立します。
以下は、簡単な例としてPythonを使用してスマートコントラクトを模したコードをデプロイするワークフローの一例である。
# 愛記システムにおけるスマートコントラクトのデプロイ
class AikiSmartContract:
def deploy(self):
# スマートコントラクトのデプロイ処理
print("Smart contract deployed successfully")
def process_transaction(self, transaction):
# トランザクションの処理ロジック
print(f"Transaction processed: {transaction}")
# メインプログラム
if __name__ == "__main__":
# AikiSmartContractのインスタンスを作成
aiki_contract = AikiSmartContract()
# スマートコントラクトのデプロイ
aiki_contract.deploy()
# ユーザーからのトランザクションの処理
aiki_contract.process_transaction("Sample Transaction")
この例では、AikiSmartContractクラスがスマートコントラクトを模したものとして、デプロイとトランザクション処理の基本的な流れを示している。実際には、スマートコントラクトの複雑なロジックやセキュリティ対策が必要であろう。
いかがであろうか、Solanaの仕組みは魅力的であり、”愛貨”も同様な仕組みとすることを検討したい。Solanaは、トランザクションの処理にシャードやセカンドレイヤーを利用することなく、すべての処理がオンチェーンで行われるため、透明性が担保される。また、開発者やプログラムはSolanaの単一のグローバルな状態にアクセスできるため、プロジェクト間のコンポーザビリティが向上する。極めて保守性が高いといえる。”愛貨”もこのような状態を目指したい。