プロジェクトの概要を掴もう
✨ NEAR Election dApp 開発プロジェクトへようこそ!
このプロジェクトではNEARというチェーン上で投票アプリの作成を行なっていきます!
プロジェクトを進めるには以下の技術が必要です。
🧐 NEAR とは何か?
NEARはブロックチェーンの1つで、Ethereumに取って替わるともいわれています。
特徴としては、独自のシャーディング技術
によって他のチェーンと比べて低い手数料での取引が可能だったり、トランザクションの完了が素早いという特徴があります。
このシャーディング技術は複数のトランザクションを1つのブロックチェーンで処理するのではなく、「シャード」と呼ばれる単位の複数のチェーンで処理を分散化することで並行処理ができるようにする技術のことです。
また、環境への配慮もされており従来の通貨に比べて約1/1300の電気しか使用しないそうです。
開発者に対する配慮もされています。Rust
やAssemblyScript
(JavaScriptっぽい言語)など比較的広く利用されているプログラミング言語を利用して開発が行えるようになっています。
加えて、NEARが公式的に「grant」という報酬システム
を用意してくれています。NEAR上での面白いアイデアやプロダクトを提出して承認されるとNEARという暗号通貨で報酬をもらえるというものです。詳しくはこちらをご覧ください。
このようにユーザーにも開発者にとっても素晴らしい環境を用意してくれているNEARの世界へ飛び込んでみましょう!
🛠 何を開発するのか?
今回開発するものは、ブロックチェーンの大きな特徴の1つである対改ざん性を生かした投票dApp
です。このdAppでは主に以下の機能を実装します
- 投票券の付与
- 候補者の追加
- 投票
- 投票結果の開示
完成した投票dApp
は以下のような見た目になります 💪
NEARのwalletと接続することでログインする画面になります!
Sign in
ボタンを押すことでNEARが用意しているwallet接続画面に移動することでwallet接続してホーム画面に移動します。
追加された候補者情報と、得票数が表示されます。
投票は一人1回できるようになっていてそれぞれの投票者の下にあるvote
ボタンを押すと確認画面が出てきて、指定の候補者に投票することができます。具体的にいうと、NEARが用意しているトランザクション画面に移動してトランザクションを承認することになります。
また、コントラクトをdeployしたウォレットでログインした場合に限り下の画像のようなClose Election
ボタンが表示されることになります。
このボタンを押すことによって投票を締め切ることができます。
一番上の入力欄にはIPFSのURIを入れ、その下には候補者の名前を、一番下には政策を入れることになります。
そしてAddボタンを押すと候補者NFTを発行できることになります。
ここには追加する投票者のアドレスを入れることで、そのwalletに投票券を送ることができます。ただし、この操作はコントラクトをdeployした人しかできないようになっています。
🌍 プロジェクトをアップグレードする
UNCHAIN のプロジェクトは UNCHAIN License により運用されています。
プロジェクトに参加していて、「こうすればもっと分かりやすいのに!」「これは間違っている!」と思ったら、ぜひpull request
を送ってください。
GitHubから直接コードを編集して直接pull request
を送る方法は、こちらを参照してください。
どんなリ クエストでも大歓迎です 🎉
また、プロジェクトを自分のGitHubアカウントにFork
して、中身を編集してからpull request
を送ることもできます。
⚡️ Issue
を作成する
pull request
送るほどでもないけど、提案を残したい! と思ったら、こちら にIssue
を作成してみましょう。
Issue
の作成方法に関しては、こちらを参照してください。
pull request
やissue
の作成は実際にチームで開発する際、重要な作業になるので、ぜひトライしてみてください。
UNCHAINのプロジェクトをみんなでより良いものにしていきましょう ✨
環境構築をしよう
🏭 環境構築をしよう
このプロジェクトは中級者向けということで、GitHubからある程度出来上がったプロジェクトをcloneするのではなく1 からプロジェクトを作成
していきます!
スマートコントラクトの作成に使う言語はRust
です。比較的低水準の言語でsolidityと比べると注意しないといけない部分が多かったりしますが、その分後々起きるかもしれないバグを予防してくれているのでとても優秀な言語だと言えます。
ではRustでスマートコントラクトを作成するための環境を整えていきましょう。
Rust のインストール
まずは下のコマンドをターミナルで実行しRustをインストールしてください
$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
- Proceed with installation(default)
- Customize installation
- Cancel installation このようなメッセージが出てきたら、1のdefaultを選択してください。 インストールが成功していれば下のようなメッセージが表示されているでしょう
Rust is installed now. Great!
また、環境変数を設定するために下のコマンドをターミナルで実行させましょう(環境変数とは?)
source $HOME/.cargo/env
export PATH="$HOME/.cargo/bin:$PATH"
ここまでの設定が完了していることを確認するために下のコマンドをターミナルで実行させましょう
$ rustc --version
完了していれば以下のような形式のメッセージが表示されるはずです
rustc x.y.z (abcabcabc yyyy-mm-dd)
次にコンピュータからnearに接続するためのツールであるnear-cli
をどのディレクトリでも使えるように下のコマンドを実行することでグローバルにインストールしましょう!
npm install -g near-cli
これで環境構築は完了です!
ここからはプロジェクトを作成していきます。
まず、node
/ yarn
を取得する必要があります。お持ちでない場合は、こちらにアクセスしてください。
node v16
をインストールすることを推奨しています。
それでは本プロジェクトで使用するフォルダーを作成してきましょう。作業を始めるディレクトリに移動したら、次のコマンドを実行します。
mkdir NEAR-Election-dApp
cd NEAR-Election-dApp
yarn init --private -y
NEAR-Election-dAppディレクトリ内に、package.jsonファイルが生成されます。
NEAR-Election-dApp
└── package.json
それでは、package.json
ファイルを以下のように更新してください。
{
"name": "NEAR-Election-dApp",
"version": "1.0.0",
"description": "Create election dapp",
"private": true,
"workspaces": {
"packages": ["packages/*"]
},
"scripts": {
"contract": "yarn workspace contract",
"client": "yarn workspace client",
"test": "yarn workspace contract test"
}
}
package.json
ファイルの内容を確認してみましょう。
モノレポを作成するにあたり、パッケージマネージャーの機能であるWorkspaces