Tallyを用いてOnChainVotingのDAOを構築する

#　はじめに

DAOの構築にあたって、様々なツールが登場している状況で整理しています。
DAOと一言に行っても、ガバナンスやトレジャリー、コミュニティなど複数の使い方があり、はDiscordなどを通じたコミュニティについてのみをDAOと呼んでいるものもあるようです。

今回は、下記のような一連の流れとして定義し、それぞれの役割についてコードで実装する流れを考えてみたいと思います。

![スクリーンショット 2022-11-07 15.19.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/62d6bcf7-7d01-5db4-ada2-b13519c09641.png)

具体的には、OpenzeppelinのGovernanceを参考にして、govenerの構築から、
実際のERC20トークンの配布、そして投票までの一連の流れを試してみたいと思います。
https://docs.openzeppelin.com/contracts/4.x/governance


# 1.DAOをつくる

Openzeppelinのコードを直接展開する方法も可能ですが、dao.newというサービスを利用することで、
必要なパラメーターだけを入れることでGoverner.solが完成するため便利です。

https://www.dao.new/

OpenzeppelinにもWizardというツールがあるためこちらを使うでもよさそう。

https://wizard.openzeppelin.com/#governor


![スクリーンショット 2022-09-24 10.07.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/27f089db-0440-eaff-d44b-f37f12ed91c7.png)


|項目  |詳細  |
|---|---|
|Proposal threshold  |何個のトークンを所有していれば提案ができるか |
|Voting delay  |提案が提出されてから投票が開始されるまでの時間。DAO メンバーが提案を理解し、意見を形成するために必要な時間。  |
|Voting period  |投票が開始されてから終了する提案までの時間。DAO メンバーが提案を理解し、意見を形成するために必要な時間。下限を 45 ブロック (約 10 分) に設定。 |
|Quorum numerator  |提案が成功するために必要な DAO 投票の最小%  |
|Timelock delay  |プロポーザルが成功してから、そのトランザクションが実行可能になるまでの時間  |

![スクリーンショット 2022-09-24 10.07.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/a2a882c6-68c3-f140-4428-fc333dfad9fa.png)

cccc
![スクリーンショット 2022-09-24 10.08.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/35fcd664-a125-bf3d-635e-0ed2cd74d2bf.png)

CONTRACT	ADDRESS
NFT	0x412b0e521387178ad336b65A265113D2cE30F696
Minter	0x69471459e2Efd261Af83c4A1D3b30989acF26f86
Governor	0x51d3b7abDb44c2564fb610C1bbc712a49E5aD756
Timelock	0xC26265227004722E82588a27D60A21fe24807512

# 2.TallyでDAOに接続する

Tallyを用いることによって、実際に投票をする流れを構築することができます。
イメージとしては、プロポーザルの作成にはじまり、投票、そして、その流れの支払いの流れを担います。

![スクリーンショット 2022-11-07 15.30.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/c723ec84-1457-f584-515d-3a5add31f716.png)

https://docs.uniswap.org/protocol/reference/Governance/governance-reference

## 2-1. daoについての説明を記入します
![スクリーンショット 2022-09-24 10.10.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/d7902588-aad9-e8be-e8d3-a53f554a0ffe.png)

## 2-2. Govenorコントラクトのアドレスを記入します
![スクリーンショット 2022-09-24 10.10.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/9e2a00e9-d4f1-f2e2-887c-b6d9595a9d00.png)

## 2-3. 今回は勉強のためにonchain votingを選択します(offchainでも使うことができるようで便利です)
![スクリーンショット 2022-09-24 10.11.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/63779d59-ca85-33ac-5429-3853a173782e.png)

## 2-4. testnetであるため、コントラクトが見つからないといわれますが、Skipを押下します

![スクリーンショット 2022-09-24 10.11.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/bb4c97c6-0a6f-b3d9-2e8d-662a8526e7cc.png)


## 2-4. ネットワークなど諸々の設定を行います

network -> testnet
type -> Governor Alpha
start block -> 
token ->

![スクリーンショット 2022-09-24 10.11.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/5a1b7fe8-b25f-cff8-7054-cfa9f5f41193.png)

## 2-5. Govenerをdeployしたコントラクトを確認します
![スクリーンショット 2022-09-24 10.24.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/48da8f98-f2b8-db7c-eb68-7f7a033a187e.png)

## 2-6. 設定を行います
![スクリーンショット 2022-09-24 10.21.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/4c29d33c-dd4a-5585-a2d6-ae5cc801544f.png)

## 2-7. 作成されました
![スクリーンショット 2022-09-24 10.21.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/8a786f86-9e44-40dc-9cdf-909e23569846.png)

## 2-8. 他の項目を埋めていきましょう
![スクリーンショット 2022-09-24 10.22.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/29a091ff-4af5-0618-5ec1-dd3d17883bfe.png)

## 2-9. 実際にProposalを書いて提案してみます
![スクリーンショット 2022-11-07 16.22.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/b55f2212-59c7-44d2-ae62-447b29b4bddd.png)

## 2-10. ERC20を持っている人だけが投票に参加することができます
![スクリーンショット 2022-11-07 16.20.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/dd624cc8-3f65-462d-5830-b6fc76fc8220.png)



# Conclusion

並行して他のdaoツールなども調べていましたが、Thirdebではnpmを利用することで、
nextjsなどで簡単に使えるような構造がとれそうで、あわせて考えていきたいと思っています。



How to set up on-chain governance
https://docs.openzeppelin.com/contracts/4.x/governance


QuickStart DAO Deployment
https://docs.dao.new/guides/quickstart-dao-deployment


The case for Governor Alpha
https://blog.tally.xyz/the-case-for-governor-alpha-15c1362d49eb

Understanding Governor Bravo
https://blog.tally.xyz/understanding-governor-bravo-69b06f1875da




thirdweb(token management)
https://thirdweb.com/
(npm install @thirdweb-dev/sdk)
https://blog.thirdweb.com/guides/build-treasury-and-governance-for-your-dao/

alagon(token management)
https://aragon.org/

colont(token management)
https://colony.io/

juicebox(treasurey)
https://juicebox.money/#/

snapshot(vote)
https://snapshot.org/#/

boardroom(vote)
https://boardroom.io/