⚡
pNouns⚡️DAO の投票システム構想
pNouns⚡️DAOは、本家NounsのNounを2体保有するプロジェクト。
本家で起案されたプロポーザルに対して、pNouns⚡️NFTホルダーのみ参加できる『snapshot.org』で投票を実施し、その結果を運営(マルチシグオーナー)の承認を経て本家Nounsへ投票している。
現時点では運営の意思(承認)が必要なフローになっているが、純度の高いDAOを目指すため、運営を排除すべく検討中である。
本記事では、この投票フローを実現する投票システム構想を説明する。
■全体図
右側のpNounsコントラクトでpNouns⚡️DAO内投票を実施し、結果を左側の本家Nounsへ投票する。提案時も同様のフロー。
- 投票システムの大枠は本家NounsDAOのコントラクトを流用し、部分的にカスタマイズする。
(本家Nounsのコントラクト解説はこちら) - NounsConnectorは本家NounsのプロポーザルをpNounsの投票システムへ取り込む役割を担う。
- インセンティブとして、投票参加に応じて変化するSBTを発行する。
■コントラクト概要
□PNounsDAOLogic
- 起案されたプロポーザルに対して、pNouns⚡️NFTホルダーが賛成・反対・棄権の投票を行う。
propose(提案)
- プロポーザルの内容は主に以下3パターン
-
本家Nounsのプロポーザル
NounsConnectorよりプロポーザルを登録し、結果はPNounsDAOExecutorを通して、castVoteで本家Nounsへ投票する -
本家Nounsへ起案するプロポーザル
pNouns⚡️NFTホルダーがプロポーザルを登録し、結果はPNounsDAOExecutorを通して、proposeで本家Nounsへ提案する -
pNounsへ起案するプロポーザル
pNouns⚡️NFTホルダーがプロポーザルを登録する。
** PNounsコントラクトのアップグレードなど、スマートコントラクトのトランザクションを発行するプロポーザルであれば、PNounsDAOExecutorでトランザクションを実行する。
** スマートコントラクトのトランザクションを必要としない、シンプルな決議の場合は投票結果が判明したところで完結する。
** pNounsのトレジャリーには運営維持用の経費程度しかないため、資金を伴う提案は本家Nounsへ起案する。
castVote(投票)
- 投票をオンチェーンで実施すると、都度ガス代がかかり[1]、投票参加者の足枷になる可能性が高いため、オフチェーンシステムを作成したい。
queue/execute/cancel/veto
- 流用元のNounsDAOLogicV2とほぼ同じ機能を想定。
- queueはプロポーザルの種類に応じて、登録するトランザクションデータの内容を振り分ける。
□PNounsDAOExecutor
- PNounsDAOLogicからキューイングされたトランザクションを実行する
- 流用元のNounsDAOExecutorとほぼ同じ機能を想定。
□NounsConnector
- Nounsで起案されたプロポーザルを取得し、PNounsDAOLogicのプロポーザルとして登録する
getProposal
- 当初は、自動実行でなくpNouns⚡️NFTホルダーが実行することを想定(ガス代負担あり)
- 将来的には本家のNounsDAOLogicV2の起案を監視し、自動でpNounsDAOLogicへ登録する仕組みを作っても良いかも。
■投票権限
□本家Nounsへの提案と投票
- 本来、Nounを保有しているアドレスでしか提案・投票できないが、delegateという権限移譲する仕組みがあるため、これを使用し、PNounsDAOExecutorで実行可能とする。
□pNounsへの提案と投票
提案
- pNouns⚡️NFTの保有数によって提案可能なしきい値を設ける。
投票
- pNouns⚡️NFTホルダーであれば投票可能。ただし保有数=議決数となる。
- 議決数は1アドレス当たり100を最大とする。
■インセンティブ
本家Nounsからの提案取込やpNounsへの提案では、実行者がガス代を負担することになる。また投票をオフチェーンでガス代不要にしても、提案内容を吟味し、投票を継続するにはそれなりのモチベーションが必要と考える。
開始当初は興味半分で参加していても、徐々に過疎化する可能性が高いため、インセンティブを設定する。
□PNounsSBT
上記までは本家NounsDAOのコントラクトをベースとしていたが、ここからは完全に妄想。ゼロベースで皆さんのご意見をお伺いしたい。
- マリモNFTのお世話のように、提案・投票することでNFTを育てる。
- 提案・投票をポイント化し、フルオンチェーンジェネラティブで画像を作成する際にそのポイントをパラメタとすることで、画像に変化を持たせる。
画像の変化は、ポイントをコインやスターで表現したり、アバターの成長具合で表現する。 - ポイントはアドレスごとに累積させるため、SBTとする。
以上、頭の中にある構想をざっと書いてみました。
ご質問やご意見などいただけたら嬉しいです。
-
castVoteは、投票者がガス代を支払い、castRefundableVoteはトレジャリーからガス代を支払うことになる ↩︎
Discussion