分散型投票とは、ブロックチェーン上で動作する投票システムを指します。 ここでの重要なアイデアは、ブロックチェーン技術が提供する透明性、セキュリティ、不変性を活用して、操作が難しく、検証が容易な投票システムを構築することです。
分散型投票システムでは、各投票はブロックチェーン上のトランザクションであり、すべての参加者が見ることができますが、投票が行われるまで投票者のみが変更できます。 投票されると、ブロックチェーンに記録され、変更することはできず、透明で改ざん防止の投票メカニズムを提供します。
Remix IDE(統合開発環境)は、イーサリアムのスマートコントラクト開発に特化して設計された強力なオープンソースツールです。 Webブラウザで直接実行されるため、コンピューターに何もインストールする必要はありません。
Remix IDEには https://remix.ethereum.org からアクセスできます。 ブラウザーで Remix を開くと、次の 3 つのパネルが表示されます。
左パネル: ここでは、Solidity ファイルを作成、インポート、管理できます。 また、コントラクトのコンパイル、テスト、デバッグ、およびデプロイのためのさまざまなプラグインも含まれています。
中央パネル: これはコードエディタです。 ここでは、Solidityのコードを記述して編集します。
右パネル: このパネルには、コントラクトをコンパイルし、イーサリアムネットワーク(実際のイーサリアムネットワークまたはJavaScript VMシミュレーション)にデプロイし、デプロイされたコントラクトと対話するためのさまざまなツールが用意されています。
簡単な「投票者」契約から始めましょう。 この契約は、システム内の投票者を追跡します。
Remix IDEで、「ファイルエクスプローラー」に移動し、「+」アイコンをクリックして新しいファイルを作成します。 名前を付けます Voter.sol
。
それでは、契約書の作成を始めましょう。
硬度
SPDX-ライセンス識別子: GPL-3.0
プラグマの堅実さ >=0.7.0 <0.9.0;
契約有権者 {
人物を表す構造体
struct Person {
bool voted; // if true, that person already voted
uint vote; // index of the voted proposal
}
すべての投票者を追跡するためのマッピング
mapping(address => Person) 一般投票者;
有権者を登録する機能
関数 registerVoter() public {
voters[msg.sender].voted = false;
}
}
SPDXライセンス識別子:この行は // SPDX-License-Identifier: GPL-3.0
、契約がGNU General Public Licensev3.0を使用していることを示しています。 これは、エンドユーザーがソフトウェアを実行、研究、共有、および変更する自由を保証する、一般的に使用されるフリーソフトウェアライセンスです。
Pragma Directive: この pragma solidity >=0.7.0 <0.9.0;
ステートメントは、コントラクトが 0.7.0 以上 0.9.0 未満のバージョンの Solidity で記述されていることを指定します。 これは、コントラクトが互換性のない新しいコンパイラ バージョンでコンパイルされるのを防ぐのに役立ちます。
Contract Definition: ブロックは contract Voter {...}
、 という名前の Voter
新しいコントラクトを定義します。 ここで、コントラクトの状態変数と関数を指定します。
構造体の定義: コントラクト内では、投票システム内の個人を表す構造体 Person
を定義します。 それぞれ Person
に、 voted
すでに投票したかどうかを示すブール値と vote
、投票した提案を追跡する整数があります。
状態変数: このステートメントは mapping(address => Person) public voters;
、イーサリアムアドレスと構造体の間にリンクを作成する状態変数 voters
を宣言します Person
。 これにより、システムで投票する資格のある人とその投票内容を追跡できます。 このキーワードは public
、 のゲッター関数を自動的に作成します voters
。
関数定義: このブロックは function registerVoter() public {...}
、ユーザーが自分自身を投票者としてシステムに登録できるようにするパブリック関数を定義します。 このステートメントは voters[msg.sender].voted = false;
、 voted
新しい投票者 false
のステータスをに設定します。
今回の契約は以上です! コースが進むにつれて、投票プロセスにさらに機能を追加することで、この契約を拡張します。 コードを定期的にコンパイルしてテストし、すべてが期待どおりに動作していることを確認することを忘れないでください。 Remix IDEでは、左サイドバー(上から3番目)にあるSolidityコンパイラアイコンをクリックし、「Compile」ボタンをクリックすることで、コントラクトをコンパイルできます。
次のレッスンでは、登録有権者が投票できるようにする方法と、投票システムのロジックを実装する方法を学習します。 しかし、今のところは、契約をいじって、リミックス環境に慣れてください。 スマートコントラクト開発の世界への第一歩を踏み出したばかりです。
分散型投票とは、ブロックチェーン上で動作する投票システムを指します。 ここでの重要なアイデアは、ブロックチェーン技術が提供する透明性、セキュリティ、不変性を活用して、操作が難しく、検証が容易な投票システムを構築することです。
分散型投票システムでは、各投票はブロックチェーン上のトランザクションであり、すべての参加者が見ることができますが、投票が行われるまで投票者のみが変更できます。 投票されると、ブロックチェーンに記録され、変更することはできず、透明で改ざん防止の投票メカニズムを提供します。
Remix IDE(統合開発環境)は、イーサリアムのスマートコントラクト開発に特化して設計された強力なオープンソースツールです。 Webブラウザで直接実行されるため、コンピューターに何もインストールする必要はありません。
Remix IDEには https://remix.ethereum.org からアクセスできます。 ブラウザーで Remix を開くと、次の 3 つのパネルが表示されます。
左パネル: ここでは、Solidity ファイルを作成、インポート、管理できます。 また、コントラクトのコンパイル、テスト、デバッグ、およびデプロイのためのさまざまなプラグインも含まれています。
中央パネル: これはコードエディタです。 ここでは、Solidityのコードを記述して編集します。
右パネル: このパネルには、コントラクトをコンパイルし、イーサリアムネットワーク(実際のイーサリアムネットワークまたはJavaScript VMシミュレーション)にデプロイし、デプロイされたコントラクトと対話するためのさまざまなツールが用意されています。
簡単な「投票者」契約から始めましょう。 この契約は、システム内の投票者を追跡します。
Remix IDEで、「ファイルエクスプローラー」に移動し、「+」アイコンをクリックして新しいファイルを作成します。 名前を付けます Voter.sol
。
それでは、契約書の作成を始めましょう。
硬度
SPDX-ライセンス識別子: GPL-3.0
プラグマの堅実さ >=0.7.0 <0.9.0;
契約有権者 {
人物を表す構造体
struct Person {
bool voted; // if true, that person already voted
uint vote; // index of the voted proposal
}
すべての投票者を追跡するためのマッピング
mapping(address => Person) 一般投票者;
有権者を登録する機能
関数 registerVoter() public {
voters[msg.sender].voted = false;
}
}
SPDXライセンス識別子:この行は // SPDX-License-Identifier: GPL-3.0
、契約がGNU General Public Licensev3.0を使用していることを示しています。 これは、エンドユーザーがソフトウェアを実行、研究、共有、および変更する自由を保証する、一般的に使用されるフリーソフトウェアライセンスです。
Pragma Directive: この pragma solidity >=0.7.0 <0.9.0;
ステートメントは、コントラクトが 0.7.0 以上 0.9.0 未満のバージョンの Solidity で記述されていることを指定します。 これは、コントラクトが互換性のない新しいコンパイラ バージョンでコンパイルされるのを防ぐのに役立ちます。
Contract Definition: ブロックは contract Voter {...}
、 という名前の Voter
新しいコントラクトを定義します。 ここで、コントラクトの状態変数と関数を指定します。
構造体の定義: コントラクト内では、投票システム内の個人を表す構造体 Person
を定義します。 それぞれ Person
に、 voted
すでに投票したかどうかを示すブール値と vote
、投票した提案を追跡する整数があります。
状態変数: このステートメントは mapping(address => Person) public voters;
、イーサリアムアドレスと構造体の間にリンクを作成する状態変数 voters
を宣言します Person
。 これにより、システムで投票する資格のある人とその投票内容を追跡できます。 このキーワードは public
、 のゲッター関数を自動的に作成します voters
。
関数定義: このブロックは function registerVoter() public {...}
、ユーザーが自分自身を投票者としてシステムに登録できるようにするパブリック関数を定義します。 このステートメントは voters[msg.sender].voted = false;
、 voted
新しい投票者 false
のステータスをに設定します。
今回の契約は以上です! コースが進むにつれて、投票プロセスにさらに機能を追加することで、この契約を拡張します。 コードを定期的にコンパイルしてテストし、すべてが期待どおりに動作していることを確認することを忘れないでください。 Remix IDEでは、左サイドバー(上から3番目)にあるSolidityコンパイラアイコンをクリックし、「Compile」ボタンをクリックすることで、コントラクトをコンパイルできます。
次のレッスンでは、登録有権者が投票できるようにする方法と、投票システムのロジックを実装する方法を学習します。 しかし、今のところは、契約をいじって、リミックス環境に慣れてください。 スマートコントラクト開発の世界への第一歩を踏み出したばかりです。