こんにちは。日本のNFTをみんなで盛り上げて応援したい!AIにも興味深々のWeb3じいじのko_sanです。
東大のブロックチェーン講座を受けているけど、だんだん難しくなってきて、プログラミング未経験の初心者にとってはついていけなさそう
私もそうですが、少しでも理解をするために、第9回のSolidityの講義の内容を整理して、今さら聞けない用語についても解説してまとめておきました
◾️東大ブロックチェーン講座2024年第9回「Solidity開発の概要」の要点
2024年6月4日の講義「Solidity開発の概要」について要点をまとめておきます。
1)スマートコントラクト概論
ここで、「チューリング完全なプログラム」とは何なのか引っかかったので、調べた結果が以下です。
「チューリング完全な」とは、計算理論における概念で、「任意の計算可能な問題を解くことができる」性質を指します。具体的には、以下のような特徴があります:
チューリング完全性の定義
- 任意の計算が可能:あるプログラム言語や計算モデルがチューリング完全である場合、その言語やモデルを使って、どんな計算問題でも解くことができるということです。つまり、他のどんなチューリング完全なシステムでも実行できることを、その言語やモデルでも実行できるということです。
- 条件:条件として、無限のメモリと無限の時間が与えられる必要があります。現実世界ではメモリや時間に限界がありますが、理論的な概念として無限が前提となります。
具体例
- プログラミング言語:C言語、Python、JavaScriptなど、多くの一般的なプログラミング言語はチューリング完全です。これらの言語を使えば、理論的にはどんな計算問題でも解くことができます。
- スマートコントラクト:イーサリアムのスマートコントラクトもチューリング完全なプログラムを実行できます。これにより、複雑なロジックを持つコントラクトを作成し、実行することが可能です。
意義
- 柔軟性:チューリング完全なシステムは非常に柔軟であり、さまざまな用途に対応できます。
- 表現力:計算の表現力が非常に高いため、複雑なアルゴリズムやロジックを実装することができます。
注意点
- 計算資源:チューリング完全なシステムは理論上無限の計算資源が必要ですが、実際のシステムではリソースに限りがあります。そのため、無限ループや計算資源の消費に注意が必要です。
2)スマートコントラクトの分類
UTXO型(Unspent Transaction Output型)
・UTXO型は、ビットコインやその他のブロックチェーンで使用される一般的なトランザクションモデル。
・このモデルでは、トランザクションが未使用のトランザクション出力(UTXO)を入力として受け取り、新しいUTXOを出力として生成する。
・各UTXOは特定の金額を表し、トランザクションが送金を行う際には、十分なUTXOを指定して送金を行う。これにより、トランザクションの追跡と管理が容易になる。
VM型(Virtual Machine型)
・VM型は、スマートコントラクトの実行環境を表す方法です。一般的には、Ethereumなどのブロックチェーンプラットフォームで使用される。
・VM型では、スマートコントラクトは仮想マシン(VM)上で実行され、その状態は仮想マシンのメモリ内に保持される。
・スマートコントラクトは、トランザクションがネットワーク上でブロードキャストされるたびに実行され、
・その結果がブロックチェーンに永続的に保存される。この方式では、スマートコントラクトの状態を更新するためには、トランザクションが正常に実行される必要がある。
3)イーサリアムとEVM
EVM(Ethereum Virtual Machine)
・スマートコントラクトを保存・実行するための仮想マシン。
・32バイトのバイナリデータを操作し、最大24.576KBのプログラムサイズ制限。
・1トランザクションで最大3000万ガスまで処理可能。
ガス(Gas)
・トランザクションの実行に必要なETHを消費し、バリデータに報酬として与えられる。
・ネットワークの混雑具合によってガス価格は変動。
・ストレージ操作には多くのガスが必要。
4)スマートコントラクトのセキュリティと法制度
セキュリティ
・仕様に基づいて正しく実装されていることが重要。
・攻撃者は常に仕様の穴を探しているため、前提条件を利用者に明示することが重要。
法制度
・スマートコントラクトの利用は法律に抵触する可能性がある。
・利益を約束する行為は証券扱いされる可能性がある。
・賭博に関するスマートコントラクトの公開は違法行為となる場合がある。
5)開発とアップグレーダビリティ
開発環境
- 推奨エディタ:Cursor、Visual Studio Code(VSCode)。
- スマートコントラクト開発フレームワーク:Meta Contract、Foundry。
アップグレーダビリティ
- コントラクトのセキュリティ向上や法令改正に対応するために必要。
- 標準化されたアップグレード手法が試みられている。
- クローン可能性(Cloneability):テンプレートから派生した複数のコントラクトに共通の振る舞いを持たせる。
◾️スマートコントラクト開発フレームワークとしてのMeta Contractとは
ここで、スマートコントラクト開発フレームワークとして紹介されて、演習にも使用されるというMeta Contract(メタコントラクト)について少し補足しておきます。
EVMのメタコントラクト(Meta Contract)とは、スマートコントラクトの作成や管理を効率化するためのフレームワークや手法のことを指します。
メタコントラクトの概要
メタコントラクトは、複数のスマートコントラクトを統一的に管理し、アップグレードやカスタマイズを容易にするための仕組みです。これにより、開発者は個々のコントラクトを手動で更新する手間を省き、全体の効率を向上させることができます。
特徴と利点
- アップグレーダビリティ:
- メタコントラクトを使用すると、スマートコントラクトを後からアップグレードすることが容易になります。これにより、セキュリティ向上や新機能追加がスムーズに行えます。
- クローン機能:
- メタコントラクトは、テンプレートとして機能し、そこから複数の子コントラクトを生成できます。これにより、共通の機能やロジックを持つコントラクトを一斉に管理できます。
- カスタマイズ性:
- 開発者は標準的な関数を利用しつつ、必要に応じて独自のカスタム関数を追加することができます。これにより、特定の用途に応じたスマートコントラクトの作成が可能です。
具体例
- テンプレート利用:
- 例えば、DAO(分散型自律組織)を運営するための基本的なスマートコントラクトのテンプレートがあるとします。このテンプレートを基に複数のDAO用コントラクトを作成し、それぞれのニーズに合わせてカスタマイズすることができます。
- 統一管理:
- メタコントラクトを使用することで、あるコントラクトにセキュリティホールが見つかった場合でも、テンプレートをアップデートするだけで、全ての子コントラクトに変更を反映させることができます。
メタコントラクトの重要性
メタコントラクトの導入により、スマートコントラクトの開発と運用が大幅に効率化されます。特に、以下のような場面でそのメリットが顕著です。
- 大規模なシステム:多くのスマートコントラクトを統一的に管理する必要がある場合。
- 継続的なアップグレード:セキュリティや機能改善のために頻繁にアップグレードが必要な場合。
- カスタム要求:特定のプロジェクトやビジネスニーズに応じてスマートコントラクトを柔軟にカスタマイズする必要がある場合。
まとめると、EVMのメタコントラクトは、スマートコントラクトの作成、管理、アップグレードを効率化するためのフレームワークです。これにより、開発者はコントラクトの複雑な管理作業を簡素化し、セキュリティや機能の向上を容易に実現できます。
◾️今さら聞けない用語集
以上、概要としては何となくわかった気になりましたが、プログラミングの経験のほとんどない私のような初心者にとっては、今さら聞けないような、基本的な用語があることに気づきました。いくつかの基本的な用語とChatGPTで調べた解説をあげておきます。
opcodesとは
オペコード(opcode)は、コンピュータの命令セットアーキテクチャ(ISA)において、特定の処理を実行するためのバイナリ形式の命令を指します。オペコードは、プロセッサが実行する特定の操作を識別するために使用されます。
ブロックチェーンや仮想マシンのコンテキストでは、オペコードはスマートコントラクトの実行時に使用されます。
たとえば、Ethereumの仮想マシン(EVM)では、スマートコントラクトの実行時に使用されるオペコードのセットが定義されています。
オペコードは、スマートコントラクトが実行される際に、それぞれの命令が順番に実行されます。
これにより、スマートコントラクトが特定の動作を実行し、ブロックチェーン上でのトランザクションや状態の変更を処理することができます。
例えば、EthereumのEVMでは、オペコードには様々なものがあります。
代表的なオペコードには、算術演算(加算、減算など)、比較演算(等値判定、大小比較など)、データ操作(データの移動、保存など)、スタック操作(プッシュ、ポップなど)などがあります。
これらのオペコードが組み合わさって、スマートコントラクトが実行され、ブロックチェーン上での操作が行われます。
スマートコントラクトのDevOpsとは
スマートコントラクトのDevOps(開発運用)は、スマートコントラクトの開発、テスト、デプロイメント、および運用を支援するプラクティスやツールの総称です。
DevOpsは、開発チームと運用チームが連携して、効率的かつ迅速にソフトウェアを開発、テスト、デプロイ、および運用するための方法論ですが、
スマートコントラクトの文脈では、ブロックチェーンの特性やスマートコントラクトの独自の要件に応じてカスタマイズされた手法やツールが含まれます。
スマートコントラクトのDevOpsには、以下のような要素が含まれます:
開発環境のセットアップ: スマートコントラクトを開発するための適切な開発環境をセットアップします。
これには、開発者向けのブロックチェーンネットワークや、スマートコントラクトの開発を支援するツールやフレームワークが含まれます。
ソースコード管理: スマートコントラクトのソースコードをバージョン管理するための仕組みを確立します。これには、Gitなどのバージョン管理システムが利用されます。
連続的インテグレーション/デリバリー (CI/CD): スマートコントラクトのソースコードを自動的にビルド、テスト、およびデプロイするためのCI/CDパイプラインを構築します。
これにより、開発者は新しいコードを迅速にデプロイしてテストすることができます。
テスト: 適切なテストスイートを使用して、スマートコントラクトの正確性、セキュリティ、パフォーマンスを確認します。
テストは、ユニットテスト、統合テスト、およびセキュリティテストなど、さまざまな形式で行われます。
デプロイメント: スマートコントラクトを本番環境にデプロイし、適切に構成し、動作することを確認します。
デプロイメントは通常、ブロックチェーンネットワーク上で行われます。
モニタリングと運用: スマートコントラクトが稼働している間、運用チームは監視、トラブルシューティング、パフォーマンスの最適化などのタスクを実行します。
UCSアーキテクチャーとは
UCS(Upgradeable Clone Standard)アーキテクチャは、スマートコントラクトの開発において、柔軟性と保守性を高めるために使用されるアーキテクチャです。UCSは、スマートコントラクトをモジュール化し、それぞれのモジュールをアップグレード可能なクローンとして扱う方法を提供します。
UCSアーキテクチャの主な要素には、次のようなものがあります:
Operations (Ops):
UCSでは、コントラクト内の個々の機能をOperations(Ops)として定義します。Opsは、スマートコントラクト内の特定の機能を実装するためのモジュールです。
Clones:
UCSでは、Opsがクローンとして扱われます。これは、Opsがスマートコントラクト内の他の部分と独立してアップグレード可能な実体であることを意味します。
Interaction:
スマートコントラクト内のOpsは、相互作用するために設計されています。これにより、各Opsが独立して動作し、必要に応じて他のOpsと連携することができます。
UCSアーキテクチャを使用することで、スマートコントラクトの開発者は個々の機能をモジュール化し、それぞれの機能を独立してアップグレードすることができます。
これにより、スマートコントラクト全体の保守性が向上し、新しい機能の追加や既存の機能の変更が容易になります。
クローンとは
クローンは、オリジナルのオブジェクトやエンティティを基に作成されたコピーを指します。スマートコントラクトの文脈では、クローンはオリジナルのスマートコントラクトを基にして作成され、そのコピーが新しいスマートコントラクトとして動作します。
クローンは、オリジナルのスマートコントラクトと同じコードやロジックを共有しますが、それぞれが独立して動作し、異なる状態やデータを持つことができます。これにより、同じ基本機能を持つ複数のスマートコントラクトを効率的に作成し、管理することができます。
クローンは通常、オリジナルのスマートコントラクトから派生するプロセスによって作成されます。
このプロセスでは、オリジナルのスマートコントラクトのコードがコピーされ、新しいアドレスが割り当てられます。そして、新しいコントラクトは、独自の状態やデータを持つことができるように初期化されます。
クローンの主な利点は、以下のようなものがあります:
・効率的な複製: クローンは、オリジナルのスマートコントラクトから素早く簡単に作成できます。これにより、同じ機能を持つ多くのスマートコントラクトを効率的に作成できます。
・独立した動作: クローンは、オリジナルのスマートコントラクトとは独立して動作します。それぞれのクローンは独自の状態やデータを持ち、異なるトランザクションを処理することができます。
・アップグレード可能性: クローンは、必要に応じて個別にアップグレードできます。
オリジナルのスマートコントラクトと同じコードを共有しながら、異なる機能や機能のバージョンを持つ複数のクローンを作成することができます。
EVMの2つのアカウントモデルEOAとCAとは
Ethereum Virtual Machine(EVM)には、2つの主要なアカウントモデルがあります:Externally Owned Accounts(EOA)とContract Accounts(CA)です。
Externally Owned Accounts (EOA):
・EOAは、通常のユーザーまたは外部のエンティティによって所有されています。
・EOAは、アドレスと秘密鍵によって識別されます。アドレスは20バイトのハッシュであり、公開鍵から生成されます。
・EOAは、イーサリアムのネットワーク上でトランザクションを作成および署名し、イーサリアムのアカウント間でイーサ(ETH)を送受信することができます。
・EOAはスマートコントラクトを作成することができません。そのため、トランザクションを送信するとき、EOAは目的のスマートコントラクトのアドレスを指定して関数呼び出しを行います。
Contract Accounts (CA):
・CAは、スマートコントラクトまたはデプロイされたプログラムコードを表します。
・CAは、イーサリアムのネットワーク上で独自のアドレスを持ちます。これはEOAと同様に20バイトのハッシュです。
・CAは、EVM上でコードを実行することができ、イーサリアムのネットワーク上で様々なアクションを実行できます。
・CAはEOAと同様にイーサを送受信できますが、スマートコントラクトとしてロジックを実行することが主な目的です。
これにより、イーサリアムのネットワーク上で複雑なデジタル資産、デジタル契約、DeFiプロトコル、DAOなどを構築できます。
簡単に言えば、EOAは通常のユーザーに関連付けられたアカウントであり、トランザクションを作成し署名し、イーサを送受信するために使用されます。
一方、CAはスマートコントラクトやプログラムコードを表し、EVM上で実行されることで、複雑なロジックや機能を実装するために使用されます。
EVMのメタコントラクトのコンテキストとしての垂直ドメインとは
EVM(Ethereum Virtual Machine)のメタコントラクトのコンテキストにおける垂直ドメインは、特定の分野や業界におけるスマートコントラクトの開発や利用に焦点を当てた領域を指します。
メタコントラクトは、他のスマートコントラクトを管理・操作するためのスマートコントラクトであり、その中でも特に、ある特定の分野や業界に特化したメタコントラクトが存在します。
例えば、DeFi(分散型ファイナンス)、NFT(非代替性トークン)、ゲーム、供給チェーン管理、不動産、医療など、さまざまな垂直ドメインに特化したメタコントラクトがあります。
これらのメタコントラクトは、その特定の分野におけるニーズや要件に合わせてカスタマイズされ、その分野のユーザーやデベロッパーによって使用されます。
垂直ドメインに特化したメタコントラクトは、その分野での特定の機能やビジネスロジックを効率的に実装し、その分野のプロセスや規制に準拠するための機能を提供します。例えば、DeFiのメタコントラクトは、ローンやステーキングなどの金融サービスを提供し、不動産のメタコントラクトは、不動産のトークン化や取引を可能にします。
垂直ドメインに特化したメタコントラクトの開発や利用は、その分野におけるスマートコントラクトの採用を促進し、その分野のユーザーや企業にとって新たなビジネス機会を提供することが期待されます。
◾️まとめ
2024年6月4日の講義「Solidity開発の概要」について要点のまとめと、プログラミングやコンピュータサイエンス初心者にとって、今さら聞けないような用語の解説をまとめておきました。
参考になれば嬉しいです。