Worldcoin, World ID: 非中央集権型IDの可能性

## はじめに
<blockquote class="twitter-tweet"><p lang="tl" dir="ltr">gm Tokyo <a href="https://t.co/HHGNboYUNr">pic.twitter.com/HHGNboYUNr</a></p>&mdash; Worldcoin (@worldcoin) <a href="https://twitter.com/worldcoin/status/1683485325581070338?ref_src=twsrc%5Etfw">July 24, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ChatGPTで有名なサム・アルトマン手掛ける仮想通貨、**Worldcoin**が7/24にリリースされました。
**Worldcoin**はAI時代のユニバーサルベーシックインカム（UBI）を目指し、虹彩認証によって発行されるユニークなID(**World ID**)を持つことが特徴的です。

現在、多くのパブリックブロックチェーンでは、鍵ペア生成によるID発行方式を採用していますが、一人のユーザーが複数のアカウントを作成できるため、例えば匿名投票のような用途には適用できませんでした。一方、**World ID**は一人一人の人間に紐づくIDを保証するため、そのような用途にも利用することができ、新たな価値創出が期待されます。

本記事ではWorld IDの適用可能性を探るため、World ID連携アプリのチュートリアル内容を紹介します。


## World ID連携アプリのチュートリアル

https://docs.worldcoin.org/id/idkit

### 1. Developer Portalへのサインイン
まずは、World IDのDeveloper Portalへ[サインイン](https://developer.worldcoin.org/login)します。ここで、認証済みのWorld IDが必要となります。つまり、虹彩認証を提供する**Orbs**(ボウリングボール大の銀色の専用機器)のある場所に行って認証を受ける必要があります。2023年7月28日現在、予約枠がすぐに埋まるため認証は困難な状況です。(7/30追記: 電話番号の登録のみでサインインできるかも。)

サインインに成功すると下記のような画面になります。
![create new app](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/4f30cf46-5066-02e4-c584-e9f3dbfef45f.jpeg)

### 2. 新規アプリの作成
次に新規アプリを作成します。アプリ名と説明文を入力した上で、環境をStaging/Productionから選択し、さらにActionの送信先をCloud/On-chainから選択します。Actionとは、認証済ユーザーから受け付けるコマンドのようなものです。今回はテスト目的なので、環境をStaging、Actionの送信先をCloudとしました。
<img width="400" alt="create new app" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/14519617-6fa0-c827-0d47-f5a5715025e9.jpeg">

### 3. Actionの生成
今回は投票アプリなので、投票に相当するActionを作成します。
![Screenshot 2023-07-28 at 2.36.42.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/33765b23-c2e1-9208-027b-11471f77d9ba.jpeg)
``Create New Action``ボタンを押し、
<img width="400" alt="create new app" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/b35c3285-95b1-e177-bdc1-e86f07de5e0e.jpeg">

Actionの名前、説明文、識別子を入れます。Create New Actionボタンで、Actionが作成されます。
![Screenshot 2023-07-28 at 2.36.59.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/3d3f0f81-cf99-a309-c31b-37e4ebe730b9.jpeg)


### 4. フロントエンドアプリの作成
次にUIとなるアプリを作成します。GitHubにあるテンプレートをクローンし、環境変数を編集します。
```bash
$ git clone https://github.com/worldcoin/world-id-cloud-template
$ cd world-id-cloud-template
$ cp .env.example .env.local
$ vim .env.local
```
下記のように、App IDとAction識別子を修正します。
![Screenshot 2023-07-28 at 2.39.46.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/008f5d5b-c127-6c2c-0ccb-0d2be7a63d08.jpeg)

UIアプリを起動します。フレームワークはnext.jsが用いられています。
```bash
$ yarn dev
```

### 5. アプリの動作確認
ブラウザから``localhost:3000``にアクセスすると、下記のような画面が表示されます。
<img width="400" alt="app screen" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/b9ec6b84-1b57-1d23-eb72-97b52d21df84.jpeg">

``Verify with World``ボタンを押すとQRが表示されます。
<img width="400" alt="QR" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/76ffcfe2-46c1-f046-a8b6-2142793fa6fc.jpeg">

Production版では、スマホアプリであるWorld AppでQRコードを読み取って実際に認証しますが、テスト版では、[シミュレーター](https://simulator.worldcoin.org/)を使用します。QRをクリックしてアドレスをコピーし、シミュレーターに読み込ませます。シミュレーターの画面遷移は下記のようになります。
<img width="400" alt="simulator" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/6dfe6df1-aa86-b98d-9cca-b4ce42866b34.jpeg">
<img width="400" alt="simulator" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/1e31b9f7-e896-3982-6cee-60a9ea2f7cc1.jpeg">
<img width="400" alt="simulator" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/8b8f6911-d397-7346-4aba-1593d055bc97.jpeg">
<img width="400" alt="simulator" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/599fae72-efe2-5e2a-1088-967481db57c4.jpeg">


無事に認証が通ると、World IDを用いたゼロ知識証明が生成され、匿名投票のActionが実行されます。
処理の流れは下記の通りです。
![Screenshot 2023-07-28 at 2.30.26.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/fee085d7-58bb-f816-f7cb-d96af4c2213c.jpeg)


投票結果はdeveloper portal上で確認することができ、投票数を示すUnique personsが1になっています。**誰が投票したかを秘匿化しつつ、確かに人間が投票したことを証明できること**が、World IDの面白いポイントです。
![Screenshot 2023-07-28 at 2.46.49.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2466824/cb44e870-da25-5b0b-39e9-4f929a8fdbbe.jpeg)

チュートリアルは以上になります。


## さいごに

今回はdeveloper portal上で投票結果を確認しましたが、Actionの送信先をOn-chainにすることで、Ethereumプロトコル上で動くスマートコントラクトと連携でき、さらに非中央集権的なアプリを実現することができます。

さらに、ID発行は現在のところ中央集権的ですが、虹彩認証がより普及して一般化すれば、非中央集権的なID管理が可能になるかもしれません。

World IDは非中央集権における一人一個のID付与という新たな領域を開拓しており、その可能性は計り知れないです。これからも注目していきます。

## P.S. 
関連記事を貼っておきます。

https://qiita.com/trickstar03/items/18a121f8d89f070ce9da