Aleph Zeroでのプライベート投票dApp構築:ステップバイステップガイド

イントロダクション

このチュートリアルでは、Aleph Zeroのブロックチェーンエコシステムを活用してプライベート投票dAppを設計・構築する方法を解説します。具体的には、Rustベースのフレームワークであるink!を使用してバックエンドのスマートコントラクトを開発し、それをReactフロントエンドに接続してユーザーが操作できるようにします。このガイドは初心者に優しく、詳細に説明されているため、ブロックチェーン開発が初めての方でも理解しやすい内容となっています。

前提条件

開始する前に、以下のツールがシステムにインストールされていることを確認してください:

1. Rustおよびink!: スマートコントラクト開発用(Rustのインストール)。

  rustup install stable
  rustup target add wasm32-unknown-unknown

2. Cargo-contract: ink!スマートコントラクトをビルドおよびデプロイするためのユーティリティ。

  cargo install cargo-contract --force --locked

3. Node.jsおよびnpm: フロントエンド開発用(Node.js公式サイト)。

4. Aleph Zeroウォレット: アカウント管理用(Aleph Zeroウォレットのダウンロード)。

5. テストネットトークン: Aleph Zero Faucetから取得可能。

バックエンド:スマートコントラクト開発

ステップ1: 新しいink!プロジェクトを初期化

新しいプロジェクトを作成し、cargo-contractを使用して初期化します。

cargo contract new private-voting
cd private-voting

ステップ2: スマートコントラクトコード

以下は、ウォレットベースのゲーティングと編集可能な投票をサポートするプライベート投票dAppのink!コードです。

#![cfg_attr(not(feature = "std"), no_std)]

use ink::prelude::vec::Vec;
use ink::storage;

#[ink::contract]
mod private_voting {
    #[ink(storage)]
    pub struct PrivateVoting {
        votes: storage::Mapping<AccountId, String>,
        voter_whitelist: Vec<AccountId>,
        is_open: bool,
    }

    impl PrivateVoting {
        #[ink(constructor)]
        pub fn new(voters: Vec<AccountId>) -> Self {
            Self {
                votes: storage::Mapping::default(),
                voter_whitelist: voters,
                is_open: true,
            }
        }

        #[ink(message)]
        pub fn cast_vote(&mut self, choice: String) {
            let caller = self.env().caller();
            assert!(self.voter_whitelist.contains(&caller), "Unauthorized voter");
            assert!(self.is_open, "Voting is closed");
            self.votes.insert(caller, &choice);
        }

        #[ink(message)]
        pub fn close_voting(&mut self) {
            self.is_open = false;
        }

        #[ink(message)]
        pub fn get_vote(&self, voter: AccountId) -> Option<String> {
            self.votes.get(voter)
        }
    }
}

ステップ3: ビルドとデプロイ

コントラクトをデプロイ用にビルドします。

cargo contract build

コンパイルされた.contractファイルをAleph ZeroのテストネットにウォレットインターフェースまたはCLIツールを使用してデプロイします。

フロントエンド開発

ステップ1: Reactアプリケーションをセットアップ

フロントエンドインターフェース用にReactアプリを初期化します。

npx create-react-app private-voting-ui
cd private-voting-ui

ステップ2: 依存関係のインストール

Aleph Zeroのブロックチェーンとやり取りするためのSDKをインストールします。

npm install aleph-zero-js-sdk

ステップ3: フロントエンド機能

1. ウォレット接続: 認証のためにユーザーがAleph Zeroウォレットを接続できるようにします。

2. 投票インターフェース: dAppインターフェースを通じてユーザーが投票または投票の更新を行えるようにします。

3. 結果表示: 選挙終了後に集計または個別の投票結果を表示します。

ステップ4: コードスニペット例

以下は、cast_vote関数を呼び出す方法を示すコードスニペットです。

import { AlephZeroAPI } from 'aleph-zero-js-sdk';

const castVote = async (choice) => {
  const alephZero = new AlephZeroAPI();
  const contract = alephZero.contractInstance('your_contract_address_here');

  await contract.invoke({
    method: 'cast_vote',
    args: [choice],
    signer: userWallet,
  });
};

投票スマートコントラクトのデプロイ

スマートコントラクトを作成し、Aleph Zeroウォレットを設定したら、次のステップとしてAleph Zeroテストネットにデプロイします。以下の手順に従って、デプロイプロセスを完了してください:

1. ウォレットをテストネットに接続

  • Aleph Zeroウォレット拡張機能を開き、Aleph Zeroテストネットに接続されていることを確認します。

  • アカウントに、ファウセットから取得した十分なテストトークンがあることを確認してください。

2. デプロイを開始

  • 提供されたデプロイツール(例:Aleph Zero SDKやRemixのようなIDE)を使用します。

  • トランザクションの認証を求められた際には、Aleph Zero Signerを使用して承認します。

3. デプロイの承認

  • デプロイプロセス中に、Aleph Zero Signerのインターフェースが表示され、トランザクションの承認を求められます。

フィールドの説明

  • From: トランザクションを開始するウォレットアドレス。

  • Module: 呼び出されるモジュール。この場合、「Balances」。

  • Call: 実行される具体的なアクション(例:「Transfer」または「Deploy」)。

  • Amount: 転送または使用されるテストトークンの数量。

  • Target: 受信者アドレスまたはスマートコントラクトアドレス。

  • Password: トランザクションを確定するためにアカウントパスワードを入力します。

4. トランザクションの署名

  • 「Password for this account」フィールドにパスワードを入力します。

  • 「Remember password for 15 minutes」ボックスをチェック(任意)。

  • Signをクリックしてデプロイを進めます。

5. デプロイ成功の確認

署名後、トランザクションが完了するまで待ちます。スマートコントラクトが正常にデプロイされると、確認メッセージが表示されます。

テストネットでトランザクション認証に使用されるAleph Zero Signerインターフェース。

Aleph Zeroテストネットでのテスト

1. スマートコントラクトをデプロイし、そのアドレスを取得します。

2. SDKを使用して、フロントエンドをデプロイ済みのコントラクトに接続します。

3. 投票、投票の編集、投票プロセスの終了など、すべての機能をテストします。

初心者へのヒント

  • Aleph Zeroの公式ドキュメントを活用して、コード例やデプロイのヒントを確認してください。

  • テストネット上で徹底的にテストを行い、すべてのコンポーネントがスムーズに動作することを確認します。

  • シンプルさを重視しましょう。高度な機能は将来のアップデートで追加可能です。

結論

このガイドは、プライベート投票dAppを構築するための包括的なロードマップを提供します。Wave 4では、これらの手順を理解し、文書化することに集中してください。Wave 5では、スケーラビリティと追加機能の強化を伴うdAppの実装を進めていきます。