手を動かして理解するDAO

# はじめに
[2022年はDAOの年になる](https://forbesjapan.com/articles/detail/45876/2/1/1)とのことだったのですが、DAOを解することなく2022年が終わりました。これは良くない。
ということで、手を動かしながらDAOを理解していこうと思います。

### 記事の流れ

まず初めに、そもそもDAOとは何かを改めて調べました。
次に「[DAO as a Service](https://www.sunryse.co/posts/technology-of-daos-and-the-metaverse)」である[Aragon](https://aragon.org/)について説明します。
後述しますが、AragonはポチポチするだけでDAOを立ち上げられるサービスなので、DAOの感覚を掴むのにちょうど良いです。
最後に、Buildspace（ブロックチェーン関連の無料チュートリアルを多数提供）にて見つけた[DAO作成チュートリアル](https://buildspace.so/p/build-dao-with-javascript)をやってみた所感をちょこっとまとめていきます。

### 対象読者

ブロックチェーンやスマートコントラクト（スマコン）の触りからお話するつもりはないので、もしご存知ない方は下記の資料を参考に全体感を理解しておくと良いかもしれません。

https://speakerdeck.com/kayato/dao-dot-dot-dot

また、ブロックチェーンを取り巻く技術について俯瞰してから臨みたい場合は、フロントエンド / バックエンドでは定番な`roadmap.sh`のブロックチェーン版を読むのをオススメします。

https://roadmap.sh/blockchain

# DAOとは一体何なのか？

Decentralized autonomous organization、略してDAOです。
日本語では「自律分散型組織」と訳されることが多いようです。
従来の組織は中央集権型で、意思決定権がリーダーにあります。
対してDAOはコミュニティが意思決定権を持ちます。

非中央集権的な組織は様々な実現方法が考えられるかと思いますが、その中でも「[**ブロックチェーンの技術を活用してみんなで提案・投票しながら目的を達成する組織**](https://speakerdeck.com/andy0440sada/dao-zi-lu-fen-san-xing-zu-zhi-gou-zhu-sitemita-daoshe-ji-yun-yong-bian?slide=46)」を実現したものがDAOです。

下記がデジタル庁によるDAOの定義です。

>DAOとは、運営会社や代表者・取締役会などが存在せず、参加者が自律的に運営を行う組織である。DAOの運営ルールはスマートコントラクトによってコード化され、これによって意志決定が反映される。
>
>[デジタル社会の実現に向けた重点計画](https://www.digital.go.jp/assets/contents/node/basic_page/field_ref_resources/5ecac8cc-50f1-4168-b989-2bcaabffe870/d130556b/20220607_policies_priority_outline_05.pdf#page=61)

素朴なDAOだと組織の運営権を表すガバナンストークンを所有することで参画することが可能で、ガバナンストークンが株式会社における株券のような役割を果たします。

>たとえば株式会社という組織では、株を所有する株主が意思決定権を持つが、分散型自律組織の場合では、「ガバナンストークン」を所有する人が意思決定権を持つ。
>
>[DAO](https://scrapbox.io/c4j/DAO)

DAOでは投票メカニズムや資金管理システム（Treasury）がスマコンによって実現されています。
基本的にトークン所有者が組織運営における提案や投票を行うことができ、例えば投票が過半数を上回ると、スマコンにより自動で提案が実行されます。

### DAOの実例「Nouns DAO」

ここまではDAOの概要でしたが、実例をひとつ見てみると理解が更に深まると思います。
DAOの有名な例として「[Nouns（ナウンズ） DAO](https://nouns.wtf/)」があります。
Nouns DAOでは毎日1つのNFTアート「Noun」を自動生成（mint）します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287774/6044e93b-972d-3ee6-9068-efbf0c899024.png)

[Nouns DAO](https://nouns.wtf/)

生成されたNFTを購入すると投票権を獲得できます。
NFTを売買したオカネはTreasuryと呼ばれる組織のおサイフに入り、こちらの資金用途を議論し投票によって実行していきます。
[幼稚園への寄付や有名人とのコラボ企画など、Nounsを宣伝するためのプロジェクトが多数実行されており](https://tec.tecotec.co.jp/entry/2022/10/18/090000)、**Tresuryにオカネを蓄えること、その利用方法をみんなで議論することが組織の基本原理**です。
DAOではオフチェーンのやり取りも非常に重要になりまして、専用の[Discord](https://discord.com/invite/nouns)を利用し提案や議論を行い、Nounsホルダーが正式な提案化することで投票が始まります。

>ユーザー、開発者、貢献者、ファンなどの人々はDiscord、Telegram、フォーラムなどの場で合意結成、価値共有します。
>コミュニケーションはオフチェーンですが、極めて重要でしょう。
>
>[DAO(Decentralized Autonomous Organization)](https://recruit.gmo.jp/engineer/jisedai/blog/dao/)

Nouns DAOのProposal（提案）はもちろんブロックチェーン上なので[公開されており](https://nouns.wtf/vote)簡単に見ることができます。
例えば[こちら](https://nouns.wtf/vote/84)はコーヒーブランドを作る提案で、実際に賛成多数により遂行されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287774/6fda516b-27a6-2c24-0ec0-b04edee947cf.png)

提案の内容を簡単にまとめると：

- Nouns Coffeeというコーヒーブランドを作ります☕️
- 作るために焙煎機とかeコマースサイトとか色々必要🤔
- 諸々に105.5ETH必要です💰

といった形です。

変な話、提案が可決されればスマコンが自動実行されETHを受け取れるので、前払いの場合そのまま持ち逃げすることは（恐らく）可能です。
そこでNouns DAOには安全機構として[設立メンバーに特別な拒否権を与える](https://ethereumnavi.com/2021/11/27/nouns-dao/)等、DAOが成熟するまでは中央集権的なエッセンスも持たせています。
（当初は自律分散な仕組みによって不正が防御されていると誤解していましたが、飽くまでDAOの特筆すべき点は**意思決定が分散化されるようになったという点**です）

コーヒーブランドの他にも[カエルの命名を行う提案](https://nouns.wtf/vote/16)があったり、眺めているだけで面白いです。

余談ですが、Nouns DAOのNFTは投票ができるだけで、ステーキング（インカムゲイン）メリットがないのになぜみんな買うのか？については下記の記事の分析がなるほど感ありました。

>クリプト外の人はなぜクリプトの人がNFTを買うのかを真剣に考えすぎな気がする。
多くの人は結構ゲーム感覚で買ってる。ETHが値上がりしてその一部を遊びでNFTを購入してツイッターでわちゃわちゃする。
>
>お金（ここではETH）を余らせている人というのは世界中にたくさん居て、そういった人たちが面白そうだからという理由でNounsオークションに参加しているのではないかというのが、筆者の中での答えです。
>
>[Web3時代の最先端NFT｜これぞ真のDAOであると名高い「Nouns DAO」とは何かを分かりやすく徹底解説！](https://ethereumnavi.com/2021/11/27/nouns-dao/)

Nouns DAOのスマコンのソースコードが気になる方はこちらの記事が参考になります。
投票や提案がスマコンのソースコードとしてどのように定義されているかがよく分かります。

https://zenn.dev/hijikix/articles/476c21f351ad08

### 補足 - DAOの種類

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287774/a83eef71-fdbd-dc7d-e7ed-30f926273e72.png)

[Web3 School](https://www.slideshare.net/TaikiNarita/web3-study)

>通常の投資クラブに似たような機能を持つInvestment DAOs
コミュニティ管理によるトークン発行プロジェクトの管理や分散金融(DeFi)サービスなどをスマートコントラクトで管理するProtocol DAOs
製品開発や目標に向かってプロジェクトを構築するためのProduct DAOs
寄付や助成金の使い方を管理するGrants DAOs
プロジェクトに必要な人材を集めるService DAOs
コミュニティやグループを管理するためのサービスを提供するSocial DAOs
特別な目的のために作られるSpecial Purpose DAOs
収集品のNFTを共同購買するためのCollector DAOs
教育システムを使ってコミュニティを主体とした教育を提供したり、インセンティブなどを含めるような教育の仕組みを提供したりするEducation DAOs
コンテンツ制作の意思決定の権限を、メディアを取り巻くコミュニティに提供するMedia DAOs
>
>[Web3実現へ、NFT、DAOを巡るアメリカの現状](https://wisdom.nec.com/ja/series/orita/2022093001/index.html)

>DAOはどれくらいあるのですか？
>
>正確にはわかりませんが、アラゴンネットワークには約2000個、他のネットワークにも同程度の数があると思われます。DeepDAOのようなリソースが構築されており、この空間のより良いセンサスを提供しています。
>
>過去にDAOコミュニティやDAOを目指すプロトコルらをまとめたカオスマップが公開されています。Crypto系のプロジェクトは基本的にDAOの形を目指しており、未来のインフラサービスになろうとしているものが多いです
>
>[[Daily Topics]Q&Aで理解するはじめての「DAO」](https://www.notion.so/Daily-Topics-Q-A-DAO-94c34fc51b6747e68241c75f5ec3733b)

### 補足 - DAOの歴史

>2013年　　ビットコインの組織体系をDAC（最後のCはCompany）と名付けたことから始まる。
2016年　　投資DAOの最も有名なユースケース「the DAO」が数百億円あつめたことで注目を浴びる。しかしスマコンにバグが見つかり50億円盗まれた。
2018年　　セキュリティ性が増し、徐々に投資DAOがまた注目されるように。経済的な利益よりも社会的課題を解消するdAppsに投資するMolochDAOやGrantDAOなどが出始める。 
2020年　　DeFi
2021年　　NFTが爆発的な人気に。NFTを共同で購入するNFT DAOが注目される。
>
>[DAO](https://scrapbox.io/c4j/DAO)

### 補足 - その他参考リンク

ブロックチェーン等のバズワードは検索汚染が著しいので、重要な情報をしっかりとサルベージすることが重要だと感じました。

- [DAOで働くってどういうこと？](https://nobumei.substack.com/p/dao-dao)
- [【開催報告】DAO（分散型自律組織）勉強会](https://note.com/c4irj/n/n1216632fc310)
- [DAO（自律分散型組織）構築してみた 〜DAO設計・運用編〜](https://speakerdeck.com/andy0440sada/dao-zi-lu-fen-san-xing-zu-zhi-gou-zhu-sitemita-daoshe-ji-yun-yong-bian)
- [日本におけるDAOの組成の可能性](https://innovationlaw.jp/dao2022/)
- [カオスマップを通して日本Web3業界の現状を整理](https://prtimes.jp/main/html/rd/p/000000082.000008324.html)
- [DAOs, A Canon](https://future.com/dao-canon/)

# Aragonを使ってDAOを作ってみる

DAOは基本的にイーサリアム上に組織を実現するものですが、フルスクラッチで作るのはかなり骨が折れます。
成立させるためには：

- 投票メカニズム
- ガバナンストークン
- コミュニティ
- 資金管理 / 投票 / 提案システム

等々をスマコンで書いたりする必要があり大変なので、DAOを作るためのサービスは世の中にたくさん存在します。
例えば[Aragon / Colony / DAOstack / WINGS / volvox...](https://speakerdeck.com/sassah/what-is-dao?slide=7)。
これらのサービスは、下記のイメージの通り、インフラとしてのイーサリアム上に存在します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287774/4ded37ba-2563-bdf5-e403-a03758331243.png)

[DAOの構造](https://scrapbox.io/tkgshn/DAO%E3%81%AE%E6%A7%8B%E9%80%A0)

特にAragonは有名（？）で、各種有名DAOもAragon上で運営されているモノも多いようです。
[ただし基本的な機能のみを提供しており、細かな機能はサードパーティアプリに依存する方針です](https://speakerdeck.com/sassah/what-is-dao)。

>Aragon is one of the most popular choices for decentralized autonomous organizations. 
>
>[How to Create a DAO in 10 Simple Steps](https://blog.liquid.com/create-dao)

Aragonを用いてDAOをチュートリアル的に作ろうと思うと本当にポチポチするだけでできてしまいます。
基本的に公式ドキュメントのクイックスタート（Aragon Client）を読むだけでOKです。

https://documentation.aragon.org/v/japanese-aragon-user-documentation/products/quickstart

自分はスクショもたくさん載っていて大変分かりやすかったZenn記事を参考にDAOを作りました。

https://zenn.dev/shmn7iii/articles/0c64557e5f3c6e

ですので、特に自身で解説すべき余白は残されていないように思います。
公式ドキュメントや、各種ブログ記事を参考に進めて、実際に立ち上げてみると、DAOの動作も確認でき理解を更に進めることができます。

# DAOのチュートリアルをやってみる

ここまで迂遠にDAOの概要を調べたりAragonでDAOの片鱗に触れてきましたが、ようやくBuidspaceにて公開されているチュートリアルにチャレンジしてみました。

https://buildspace.so/p/build-dao-with-javascript

こちらのチュートリアルで作るものは、ウォレットを接続でき / NFTを作成でき / DAOの提案に投票できるようなWebアプリです。

>We're going to build a web app for people to: connect their wallet → mint a membership NFT → receive a token airdrop → and actually vote on proposals.

主にReactと[`thirdweb`](https://github.com/thirdweb-dev/js/tree/main/packages/react)（ブロックチェーンアプリを作るためのパッケージ）を利用して作っていきます。
`thirdweb`のReact SDKを利用し、スマコンと対話したりウォレット接続させたりするイメージです。

目次は下記のような感じです。
DAOの概要から始まり、コードを見ながら徐々にアプリケーションを作っていく構成になっています。

```md
## GETTING STARTED
- Let build some cool shit.
- What's a DAO?

## SETUP CLIENT APP FOR DAO
- Grab the client code + get setup.
- Add 'Connect to Wallet' to your DAO Dashboard.

## CREATE MEMBERSHIP NFTS
- Deploy your NFT bundle.
- Deploy NFT metadata.
- Let users mint your NFTs.

## CREATE TOKEN + GOVERNANCE
- Deploy an ERC-20 contract.
- Show off token holders on DAO Dashboard.
- Building a treasury + governance.
- Let users vote on proposals.

## FINISHING TOUCHES
- Remove your admin powers and handle basic errors.
- Finalize and celebrate.
```

実際にチュートリアルを触ってみた感想とメモを、各章毎にまとめていきます。

### SETUP CLIENT APP FOR DAO
- 実際にサンプルコードを見ながらアプリを作っていきます
- `thirdweb`では`<ConnectWallet />`コンポーネントを書くだけでウォレット接続コードが書ける等かなり取り回しやすいパッケージになっていることが分かります

### CREATE MEMBERSHIP NFTS
- 作るDAOの参加権をNFTで表します（以降、アプリ上でもNFTを所有しているかどうかチェックしUIを出し分ける）
- 通常、NFTを作るためにはSolidityによってNFT発行スマコンを書かなければいけません
  - ref. https://zenn.dev/razokulover/articles/7db2340f14c2cd
- `thirdweb`を利用すればJavaScriptでスマコンを記述できるので、記述したスマコンをQuicknode越しにデプロイします
  - Quicknodeは、ここではイーサリアム上のデータにアクセスするための開発者用APIと理解すると良いと思います
  - ref. https://blog.quicknode.com/what-is-quiknode-api/
  - `thirdWeb`からQuickNodeに繋ぎ込みができるので、スクリプトを走らせると勝手にマイニングしてデプロイされます
- NFTを発行するスマコンを書いたり、NFTの最大発行数（`maxClaimable`）等を定義します
- また、Reactで作成したアプリにNFT生成ボタンを作成します（これも`thirdweb`で容易に作成可能）

### CREATE TOKEN + GOVERNANCE
- 標準仕様ERC-20に従ったトークンを作っていきます（このDAO独自の「オカネ」）
- 更にNFTホルダーが行うことができる投票に関するスマコンも記述します
  - `thirdweb`に`deployVote`が準備されており、これを呼び出すだけで投票スマコンが作成できます
  - どれくらいの人数が賛成すれば投票は通過するか（`voting_quorum_fraction`）等も定義できます
- ここで作成した投票スマコンを利用して提案を作る場合は：
  - `getContract`で投票スマコンのアドレスを得る（`const vote = await sdk.getContract(...);`）
  - `vote.propose(description, execution)`という形で「提案の説明」と「実行すると移動する資金」等を記述する
  - スマコンとしてデプロイする
- 提案への投票も`proposal.vote(...)`といったAPIが準備されているので簡単に行えます

### チュートリアルの個人的まとめ

実際にチュートリアルをやってみる（目を通すだけでも有意義）と、スマコンでアプリケーションを作っていく流れを体感できるのが良いです。
NFTの発行も、トークンの発行も、投票も、提案も、全てはスマコンで記述します。
[DAOは組織そのものを構成するスマコンの集合](https://scrapbox.io/tkgshn/DAO%E3%81%AE%E6%A7%8B%E9%80%A0)という感覚が身に付くのが非常に重要だと思います。

# 終わりに

チュートリアル等を通してDAOの理解が深まりました。
今後もWeb3回りは継続的にキャッチアップしていきたいです。