メインコンテンツまでスキップ

ブロックチェーン上でWEBアプリを構築しよう

👋 Polygon ENS Domain 開発プロジェクトへようこそ!

このプロジェクトでは、イーサリアムサイドチェーンのPolygon上に支払い機能を持ったドメインネームサービスアプリを実装し、実際にミントして使いこなすことを目的とします。

プロジェクトを進めるには以下の技術が必要です。

いますべてを理解している必要はありません。 わからないことがあったらインターネットで検索したり、コミュニティで質問しながらプロジェクトを進めていきましょう!

⛓ ブロックチェーンとは何か?

ブロックチェーンとは、互いに通信するコンピュータ(ノード)のピアツーピア・ネットワークです。

参加者全員がネットワークの運営を分担する分散型ネットワークですので、各ネットワークの参加者は、ブロックチェーン上のコードとデータのコピーを維持します。

これらのデータはすべて、「ブロック」と呼ばれる記録の束に含まれており、それらが「連鎖」してブロックチェーンを構成しています。

ネットワーク上のすべてのノードは、コードとデータがいつでも変更可能な中央集権型のアプリケーションとは異なり、このデータが安全で変更不可能であることを保証しています。これがブロックチェーンを強力なものにしているのです ✨

ブロックチェーンはデータの保存を担っているため、根本的にはデータベースです。

そして、互いに会話するコンピュータのネットワークですから、ネットワークとなります。ネットワークとデータベースが一体化したものと考えればよいでしょう。

また、従来のWebアプリケーションとブロックチェーンアプリケーションの根本的な違いとして、アプリケーションは、ユーザーのデータを一切管理しません。ユーザーのデータは、ブロックチェーンによって管理されています。

🥫 スマートコントラクトとは何か?

スマートコントラクトとは、ブロックチェーン上でコントラクト(=契約)を自動的に実行するしくみです。

よくたとえられるのは、自動販売機です。自動販売機には「100円が投下され、ボタンが押されたら、飲み物を落とす」というプログラムが搭載されており、「店員さんがお金を受け取って飲み物を渡す」というプロセスを必要としません。

人の介在を省き、自動的にプログラムが実行される点こそ、スマートコントラクトが、「スマート」と呼ばれる理由です。

実際には、スマートコントラクトのしくみは、イーサリアムネットワーク上のすべてのコンピュータに複製され、処理されるプログラムにより成り立っています。

イーサリアムの汎用性により、そのネットワーク上にアプリケーションを構築できます。

スマートコントラクトのコードはすべてイミュータブル(不変)、つまり変更不可能です。

つまり、スマートコントラクトをブロックチェーンにデプロイすると、コードを変更したり更新できなくなるのです。

これは、コードの信頼性と安全性を確保するための設計上の特徴です。

私はよくスマートコントラクトをWeb上のマイクロサービスにたとえます。ブロックチェーンからデータを読み書きしたり、ビジネスロジックを実行したりするためのインタフェースとして機能するのです。これらはパブリックにアクセス可能で、ブロックチェーンにアクセスできる人なら誰でもそのインタフェースにアクセスできることを意味します。

📱 dApps とは何か?

dAppsは、分散型アプリケーション(decentralized Application) の略です。

dAppsは、ブロックチェーン上に構築されたスマートコントラクトと、フロントエンドであるユーザーインタフェース(Webサイトなど)を組み合わせたアプリケーションのことを指します。

dAppsは、イーサリアムのプログラミング言語であるSolidityを基盤に構築されています。

イーサリアムでは、スマートコントラクトはオープンAPIのように誰でもアクセスできます。よって、ほかの人が書いたスマートコントラクトも、あなたのWebアプリケーションから呼び出すことができます。逆も然りです。

🛠 何を構築するのか?

CoolDomainsと呼ばれる ブロックチェーン上でドメインネームサービス を構築します。

CoolDomainsでは、以下の機能を実装します。

ドメインネームサービスを通して、ユーザーがスマートコントラクトとやりとりし独自ドメインを発行できる機能を実装します。

Solidityでバックエンドを実装し、Reactでフロントエンドを構築します。

🌍 プロジェクトをアップグレードする

この学習コンテンツは、Attribution-ShareAlike 4.0 International © 2022 buildspaceのライセンス及び UNCHAIN License のもとで運用されています。

プロジェクトに参加していて、「こうすればもっと分かりやすいのに!」「これは間違っている!」と思ったら、ぜひpull requestを送ってください。

GitHubから直接コードを編集して直接pull requestを送る方法は、こちらを参照してください。

どんなリクエストでも大歓迎です 🎉

また、プロジェクトを自分のGitHubアカウントにForkして、中身を編集してからpull requestを送ることもできます。

  • プロジェクトをForkする方法は、こちら を参照してください。
  • Forkからpull requestを作成する方法は、こちら です。

⚡️ Issueを作成する

pull request送るほどでもないけど、提案を残したい! と思ったら、こちらIssueを作成してみましょう。

Issueの作成方法に関しては、こちらを参照してください。

pull requestissueの作成は実際にチームで開発する際、重要な作業になるので、ぜひトライしてみてください。

UNCHAINのプロジェクトをみんなでより良いものにしていきましょう ✨


ポリゴンとは

📚 Polygonとは

ドメインサービスのコーディングに入る前に、今回Polygonを採用する理由について少しお話ししましょう。

このプロジェクトは、ユーザーがスマートコントラクトから独自のドメインを購入して所有できるサービスを構築することを目的としています。

ユーザーがサービスの代金を支払う場合、通常、トランザクション手数料だけで40ドルを負担するのは好ましくないでしょう。

ただし、イーサリアムの取引には現在は実際にこれ以上の費用がかかってしまうことも多いのです。

ここでPolygonの利点が重要になってきます。

技術的には、Polygonは、さまざまなブロックチェーンで構成されるプロトコルおよびフレームワークです。

今回、私たちは最も一般的なチェーンであるPolygonPoSチェーンをもとに構築します。

一体どういったものでしょう?

それは、イーサリアムと並行して実行され、定期的にチェックポイントを送信していくような別のチェーンです。

少し分解してみましょう。

イーサリアムブロックチェーンは、その上に他のブロックチェーンを構築できるため、「レイヤー1」ブロックチェーンと呼ばれます。

PolygonPoSチェーンは、イーサリアムの脇に構築されたブロックチェーンであり、並行して実行されサイドチェーンとも呼ばれます。

(いわゆるレイヤー2と主張する向きもありますが性質はサイドチェーンです。このあたり初学の段階からこだわると複雑になりますが、興味がある方は検索してみてください。)

さて、ここで例えばご自分がシェフとしてキッチンを経営している状態を想像してみましょう。

注文を受けて、キッチンに戻り、調理してから提供しなければならないのは、かなり面倒です。

目が回るような忙しさでしょう。

代わりに、ウェイターのチームを雇って、キッチンと顧客の間のレイヤーとして機能させます。

そうすればウェイターは注文をより効率的に受け取り、それを直接キッチンに渡せます。

これは、イーサリアムとポリゴンの関係に似ています。

イーサリアムは、たくさんのトランザクションを処理するように構築されていないため、処理が遅くなりがちです。

Polygonは、より多くのトランザクション数を処理でき、トランザクションを一旦まとめて、最終的に信頼できる情報源としてイーサリアムに渡します。

なかなか理屈だけではイメージがわきませんよね。

実際にPolygonでこのプロジェクトを勉強すればよくわかるようになります!

💥 ポリゴンvsイーサリアム

それでも「イーサリアム以外のブロックチェーンを学習して役に立つのかな?」とお考えかもしれません。

大丈夫です! Polygon PoSチェーンはEVM(Ethereum Virtual Machine)と互換性があるため、Ethereumで実行されるすべてのものは、少し設定を変えれば特に大きな書き換えなしでPolygonでも実行できます。

Polygonでは高いトランザクション費用を払う必要はありません。

Polygonははるかに高速で安価であるため、合理的です。

また、Hardhat、Remix、Truffle、web3jsなどの人気のあるEthereum開発ツールはすべてPolygonで動作します。

言い換えればPolygonを学習しておけばいつでもEthereum向けの開発はできるということですね。


ENSとは

📚 ENS とは

Shopifyなどを使用していてドメインを購入したことがある場合は、ドメインネームサービス(DNS)を使用したことがあるかと思います。

ENSはEthereumNameServiceの略です。ENSは近頃Twitterなどでしばしばみかける.ethドメインを提供します。

これにより誰にも許可を求めることなく、文字通り独自のドメインサービスを作成できます。

通常、ドメインを受け入れてもらうには、大手ISPプロバイダーと取引を行う必要があります。

たとえば、ドメインを.unchainiscoolにしたい場合、大手インターネットプロバイダーがそれを承認する必要があります。

それを経ないとドメインによって「存在しません」といった趣旨のエラーページが表示されてしまいます。

さて、前回と今回の内容で、Polygonが合理的で、ENSが何であるかが大体ご理解いただけたと思います。

これからPolygonブロックチェーン上でENS同様のサービスを作成します。

誰でもドメインNFTを購入して、それを活用することができるようなサービスです。

また、誰もがドメインネームを介して所有者ウォレットにアクセスできるようにもなります。

さらに、公開されたブロックチェーンは止められないため、誰もあなたのデータを削除したり、あなたの大切なドメインを消したりすることはできません。

.dev.netのような新しくシンプルでスマートなドメインを作成して 4〜5 年利用するには、web2 の世界では多額の費用がかかります。

しかし、私たちはこれから何杯かのコーヒー代程度で同等のことを行えるのです。

🤔 イーサリアムネームサービス(ENS)

ENSの最大の問題は取引手数料です。 名前を登録するには、イーサリアムブロックチェーンにガス料金を支払う必要があります。

ドメイン名「ExpensiveNameService」を1年間登録するのにかかる費用は時価にもよりますが10000円以上かかることが多いでしょう。

昼食何十食分とか計算してしまいますよね。

また、大きな問題は、チェーン上でデータを更新したり、ウォレットを変更したりするときは、これもガス代の時価によりますが、3000円からそれ以上を支払う必要があるということです。 合計したら何回分おいしいものが食べられるのでしょうか?

重要なことですが、ブロックチェーンにデータを書き込むには料金を支払う必要があるのです。

🤖 ドメインネームサービスでは何ができるのでしょうか?

グローバルAPIのようなものを思い浮かべてみましょう。

誰もがAPIにアクセスでき、取得可能なデータを保存できます。

ENSを使用すると、登録したネームにたくさんの独自データを紐付けて保存できます。

ENS の例 ( cryptonerdtokyo.eth )

いろいろなサービスのユーザー名、メールアドレス、ウェブサイト、さらにはNFTアバターなどが設定されています。

インターネット上のすべての人がこのデータにアクセスできます。

便利ですよね。

もうプロフィール写真を二度とアップロードする必要がなくなるかもしれません。

もちろん恐い一面もあるかもしれませんが、これからいろいろな用途の拡大が見込めることでしょう。

💪 さぁ、いよいよプロジェクトに取り掛かりましょう。

ここまでENSのようなブロックチェーン上におけるドメインネームサービスについて理解を深めてきました。

では、次回からいよいよENSのようなWebアプリを実際に作成してみましょう!

🙋‍♂️ 質問する

ここまでの作業で何かわからないことがある場合は、Discordの#polygonで質問をしてください。

ヘルプをするときのフローが円滑になるので、エラーレポートには下記の3点を記載してください ✨

1. 質問が関連しているセクション番号とレッスン番号
2. 何をしようとしていたか
3. エラー文をコピー&ペースト
4. エラー画面のスクリーンショット

次のレッスンから実際に手を動かしていただきます。きっと楽しくなってきますよ。


Attribution: This learning content is licensed under Attribution-ShareAlike 4.0 International © 2022 buildspace. Sharelike: Translations and modifications to markdown documents.

Documentation created by teruj(UNCHAIN discord ID: takotaro#8346)